[{"data":1,"prerenderedAt":173022},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi":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\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":8,"toc":9},"minimark",[],{"title":10,"searchDepth":11,"depth":11,"links":12},"",2,[],"自己正经开始学编程的第一门语言！","md",{"category":16},"前端",true,"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":5,"description":13},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",[23,5142,6250,7670,10659,12010,13499,14588,23351,23364,23963,23989,24113,24354,24419,24437,24450,24497,24621,24790,24989,25169,25374,25510,25605,25642,25655,25965,26706,27414,27435,28455,30086,30237,30250,30262,30563,50375,50390,50407,50440,53312,76660,92805,92825,92938,93059,93829,94492,94853,94891,94997,95097,95140,95166,95227,96881,96982,97007,97498,97998,99078,99361,100103,100605,100617,102633,104297,105800,107498,109415,111334,113356,116826,117258,117721,118470,121414,121762,121784,122140,125447,125459,125862,125885,126032,126199,126404,126705,127262,127919,129850,131448,132097,133591,135022,136257,137951,139703,142113,142229,143164,143375,144260,145495,145723,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":23357,"extension":14,"meta":23358,"navigation":17,"path":23360,"seo":23361,"stem":23362,"__hash__":23363},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23354,"toc":23355},[],{"title":10,"searchDepth":11,"depth":11,"links":23356},[],null,{"category":23359},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":87,"description":23357},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23365,"title":23366,"body":23367,"description":10,"extension":14,"meta":23958,"navigation":17,"path":23959,"seo":23960,"stem":23961,"__hash__":23962},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23368,"toc":23940},[23369,23372,23376,23379,23382,23385,23403,23408,23411,23414,23417,23420,23425,23428,23433,23436,23439,23443,23446,23449,23455,23458,23476,23480,23484,23487,23492,23495,23499,23502,23515,23518,23522,23525,23528,23531,23556,23559,23568,23579,23594,23626,23630,23637,23645,23649,23652,23655,23660,23664,23667,23670,23675,23678,23682,23685,23688,23693,23696,23700,23705,23709,23776,23780,23783,23786,23789,23792,23795,23801,23822,23825,23839,23848,23852,23855,23858,23863,23866,23871,23876,23879,23882,23887,23892,23895,23900,23905,23908,23913,23918,23921,23924,23929,23932,23937],[29,23370,23366],{"id":23371},"_1强化学习基本认识",[33,23373,23375],{"id":23374},"_11什么是强化学习","1.1.什么是强化学习",[38,23377,23378],{},"强化学习有两部分组成：智能体和环境；",[38,23380,23381],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[38,23383,23384],{},"强化学习与监督学习的区别:",[46,23386,23387,23390,23393,23396],{},[49,23388,23389],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[49,23391,23392],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[49,23394,23395],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[49,23397,23398,23399,23402],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[252,23400,23401],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[38,23404,23405],{},[1441,23406],{"alt":10,"src":23407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[38,23409,23410],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[38,23412,23413],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[38,23415,23416],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[38,23418,23419],{},"获取奖励",[38,23421,23422],{},[1441,23423],{"alt":10,"src":23424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[38,23426,23427],{},"强化学习可以分成标准强化学习和深度强化学习",[38,23429,23430],{},[1441,23431],{"alt":10,"src":23432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[38,23434,23435],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[38,23437,23438],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[33,23440,23442],{"id":23441},"_12强化学习应用场景","1.2.强化学习应用场景",[38,23444,23445],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[38,23447,23448],{},"具身智能中的应用",[38,23450,23451,23454],{},[252,23452,23453],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[38,23456,23457],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[38,23459,23460,23461,23464,23465,23468,23469,23472,23473],{},"机器人是",[252,23462,23463],{},"躯体","，深度学习是",[252,23466,23467],{},"神经元****网络","，VLA是",[252,23470,23471],{},"通用的行为逻辑","，而强化学习是",[252,23474,23475],{},"教练",[33,23477,23479],{"id":23478},"_13序列决策","1.3.序列决策",[63,23481,23483],{"id":23482},"_131智能体与环境","1.3.1.智能体与环境",[38,23485,23486],{},"强化学习研究的问题是智能体agent与环境交互的问题",[38,23488,23489],{},[1441,23490],{"alt":10,"src":23491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[38,23493,23494],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[63,23496,23498],{"id":23497},"_132奖励","1.3.2.奖励",[38,23500,23501],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[38,23503,23504,23505,23514],{},"取某个策略的表现如何。强化学习的目的就是",[252,23506,23507,23508,23513],{},"最大化",[252,23509,23510],{},[252,23511,23512],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[38,23516,23517],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[63,23519,23521],{"id":23520},"_133序列决策","1.3.3.序列决策",[38,23523,23524],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[38,23526,23527],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[38,23529,23530],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[38,23532,23533,23537,23538,23540,23541,23543,23544,23546,23547,13775,23550,13775,23553],{},[23534,23535,23536],"em",{},"Ht"," = ",[23534,23539,699],{},"1*, a",[23534,23542,320],{},", r",[23534,23545,320],{},", . . . ,* ",[23534,23548,23549],{},"ot",[23534,23551,23552],{},", at ,",[23534,23554,23555],{},"rt",[38,23557,23558],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[38,23560,23561,23537,23564,1637,23566,532],{},[23534,23562,23563],{},"st",[23534,23565,155],{},[23534,23567,23536],{},[38,23569,23570,23571,23574,23575,23578],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[252,23572,23573],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[252,23576,23577],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[38,23580,23581,23582,23585,23586,23589,23590,23593],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[252,23583,23584],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[252,23587,23588],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23534,23591,23592],{},"S, A, T, R, Ω, O, γ",")。",[38,23595,23596,23597,23599,23600,23602,23603,103,23605,23608,23609,23611,23612,103,23615,23618,23619,23621,23622,23625],{},"其中 ",[23534,23598,792],{}," 表示状态空间，为隐变量，",[23534,23601,335],{}," 为动作空间，",[23534,23604,817],{},[23534,23606,23607],{},"s ′ |s, a",") 为状态转移概率，",[23534,23610,767],{}," 为奖励函数，",[23534,23613,23614],{},"Ω",[23534,23616,23617],{},"o|s, a",") 为观测概率，",[23534,23620,693],{}," 为观测空间，",[23534,23623,23624],{},"γ"," 为折扣因子。",[33,23627,23629],{"id":23628},"_14动作空间","1.4.动作空间",[38,23631,23632,23633,23636],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[252,23634,23635],{},"动作空间"," ，动作空间分为:",[46,23638,23639,23642],{},[49,23640,23641],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[49,23643,23644],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[33,23646,23648],{"id":23647},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[38,23650,23651],{},"由策略、价值函数、模型三部分组成",[38,23653,23654],{},"这三者组成马尔可夫决策过程",[38,23656,23657],{},[1441,23658],{"alt":10,"src":23659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[63,23661,23663],{"id":23662},"_151策略","1.5.1.策略",[38,23665,23666],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[38,23668,23669],{},"策略可分为两种：",[38,23671,23672],{},[1441,23673],{"alt":10,"src":23674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[38,23676,23677],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[63,23679,23681],{"id":23680},"_152价值函数","1.5.2.价值函数",[38,23683,23684],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[38,23686,23687],{},"价值函数中有一个折扣因子，类似于存款利息",[38,23689,23690],{},[1441,23691],{"alt":10,"src":23692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[38,23694,23695],{},"进入某个状态采取的最优动作可以通过Q函数得到",[63,23697,23699],{"id":23698},"_153模型","1.5.3.模型",[38,23701,23702],{},[1441,23703],{"alt":10,"src":23704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[33,23706,23708],{"id":23707},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[240,23710,23711,23722],{},[243,23712,23713],{},[246,23714,23715,23719],{},[249,23716,23718],{"align":23717},"left","类型",[249,23720,23721],{"align":23717},"特点",[287,23723,23724,23734,23744,23754,23766],{},[246,23725,23726,23731],{},[292,23727,23728],{"align":23717},[252,23729,23730],{},"基于价值的智能体",[292,23732,23733],{"align":23717},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[246,23735,23736,23741],{},[292,23737,23738],{"align":23717},[252,23739,23740],{},"基于策略的智能体",[292,23742,23743],{"align":23717},"直接学习策略，没有学习价值函数",[246,23745,23746,23751],{},[292,23747,23748],{"align":23717},[252,23749,23750],{},"演员-评论员智能体",[292,23752,23753],{"align":23717},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[246,23755,23756,23761],{},[292,23757,23758],{"align":23717},[252,23759,23760],{},"有模型强化学习智能体",[292,23762,23763],{"align":23717},[1441,23764],{"alt":10,"src":23765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[246,23767,23768,23773],{},[292,23769,23770],{"align":23717},[252,23771,23772],{},"免模型强化学习智能体",[292,23774,23775],{"align":23717},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[33,23777,23779],{"id":23778},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[38,23781,23782],{},"学习和规划是序列决策的两个基本问题",[38,23784,23785],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[38,23787,23788],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[38,23790,23791],{},"强化学习用到的库：Gym",[38,23793,23794],{},"Gym可以检验强化学习算法的优劣",[38,23796,23797,23800],{},[252,23798,23799],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[83,23802,23806],{"className":23803,"code":23804,"language":23805,"meta":10,"style":10},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[89,23807,23808],{"__ignoreMap":10},[92,23809,23810,23813,23816,23819],{"class":94,"line":95},[92,23811,23812],{"class":1942},"pip",[92,23814,23815],{"class":207}," install",[92,23817,23818],{"class":207}," gym==",[92,23820,23821],{"class":151},"0.25.2\n",[38,23823,23824],{},"显示图形界面需要",[83,23826,23828],{"className":23803,"code":23827,"language":23805,"meta":10,"style":10},"pip install pygame\n",[89,23829,23830],{"__ignoreMap":10},[92,23831,23832,23834,23836],{"class":94,"line":95},[92,23833,23812],{"class":1942},[92,23835,23815],{"class":207},[92,23837,23838],{"class":207}," pygame\n",[38,23840,23841,23842],{},"有关Gym库的相关文档介绍：",[341,23843,23847],{"href":23844,"rel":23845},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23846],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[33,23849,23851],{"id":23850},"_18一些补充基础概念","1.8.一些补充基础概念",[38,23853,23854],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[38,23856,23857],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[38,23859,23860],{},[1441,23861],{"alt":10,"src":23862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[38,23864,23865],{},"折扣率需要自己来设定",[38,23867,23868],{},[1441,23869],{"alt":10,"src":23870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[46,23872,23873],{},[49,23874,23875],{},"状态转移函数：",[38,23877,23878],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[38,23880,23881],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[38,23883,23884],{},[1441,23885],{"alt":10,"src":23886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[46,23888,23889],{"start":11},[49,23890,23891],{},"动作价值函数：",[38,23893,23894],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[38,23896,23897],{},[1441,23898],{"alt":10,"src":23899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[46,23901,23902],{"start":1158},[49,23903,23904],{},"最优动作价值函数：",[38,23906,23907],{},"这个函数是对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,23909,23910],{},[1441,23911],{"alt":10,"src":23912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[46,23914,23915],{"start":1173},[49,23916,23917],{},"状态价值函数:",[38,23919,23920],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[38,23922,23923],{},"它衡量的是“一个具体动作”的长期价值",[38,23925,23926],{},[1441,23927],{"alt":10,"src":23928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[38,23930,23931],{},"几个价值函数之间的比较：",[38,23933,23934],{},[1441,23935],{"alt":10,"src":23936},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5106,23938,23939],{},"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":23941},[23942,23943,23944,23949,23950,23955,23956,23957],{"id":23374,"depth":11,"text":23375},{"id":23441,"depth":11,"text":23442},{"id":23478,"depth":11,"text":23479,"children":23945},[23946,23947,23948],{"id":23482,"depth":1158,"text":23483},{"id":23497,"depth":1158,"text":23498},{"id":23520,"depth":1158,"text":23521},{"id":23628,"depth":11,"text":23629},{"id":23647,"depth":11,"text":23648,"children":23951},[23952,23953,23954],{"id":23662,"depth":1158,"text":23663},{"id":23680,"depth":1158,"text":23681},{"id":23698,"depth":1158,"text":23699},{"id":23707,"depth":11,"text":23708},{"id":23778,"depth":11,"text":23779},{"id":23850,"depth":11,"text":23851},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23366,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23964,"title":23965,"body":23966,"description":23973,"extension":14,"meta":23984,"navigation":17,"path":23985,"seo":23986,"stem":23987,"__hash__":23988},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23967,"toc":23982},[23968,23971,23974,23979],[29,23969,23965],{"id":23970},"_2马尔可夫决策过程",[38,23972,23973],{},"这是强化学习的基本框架",[38,23975,23976],{},[1441,23977],{"alt":10,"src":23978},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[38,23980,23981],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":10,"searchDepth":11,"depth":11,"links":23983},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23965,"description":23973},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23990,"title":23991,"body":23992,"description":10,"extension":14,"meta":24108,"navigation":17,"path":24109,"seo":24110,"stem":24111,"__hash__":24112},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23993,"toc":24103},[23994,23997,24001,24004,24009,24014,24017,24022,24025,24030,24033,24037,24042,24045,24050,24055,24060,24063,24067,24072,24075,24080,24085,24090,24095,24098],[29,23995,23991],{"id":23996},"_3动作价值函数",[33,23998,24000],{"id":23999},"_31dqn","3.1.DQN",[38,24002,24003],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[38,24005,24006],{},[1441,24007],{"alt":10,"src":24008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[38,24010,24011],{},[1441,24012],{"alt":10,"src":24013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[38,24015,24016],{},"DQN算法的描述：",[38,24018,24019],{},[1441,24020],{"alt":10,"src":24021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[38,24023,24024],{},"这里的Dense指的是全连接层",[38,24026,24027],{},[1441,24028],{"alt":10,"src":24029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[38,24031,24032],{},"当前观测的状态为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,24034,24036],{"id":24035},"_32dqn的举例","3.2.DQN的举例",[38,24038,24039],{},[1441,24040],{"alt":10,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[38,24043,24044],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[38,24046,24047],{},[1441,24048],{"alt":10,"src":24049},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[38,24051,24052],{},[1441,24053],{"alt":10,"src":24054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[38,24056,24057],{},[1441,24058],{"alt":10,"src":24059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[38,24061,24062],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[33,24064,24066],{"id":24065},"_33td算法","3.3.TD算法",[38,24068,24069],{},[1441,24070],{"alt":10,"src":24071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[38,24073,24074],{},"强化学习TD算法公式的粗略解释：",[38,24076,24077],{},[1441,24078],{"alt":10,"src":24079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[38,24081,24082],{},[1441,24083],{"alt":10,"src":24084},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[38,24086,24087],{},[1441,24088],{"alt":10,"src":24089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[38,24091,24092],{},[1441,24093],{"alt":10,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[38,24096,24097],{},"TD算法总结：",[38,24099,24100],{},[1441,24101],{"alt":10,"src":24102},"..\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":24104},[24105,24106,24107],{"id":23999,"depth":11,"text":24000},{"id":24035,"depth":11,"text":24036},{"id":24065,"depth":11,"text":24066},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23991,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24114,"title":24115,"body":24116,"description":10,"extension":14,"meta":24349,"navigation":17,"path":24350,"seo":24351,"stem":24352,"__hash__":24353},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24117,"toc":24345},[24118,24121,24125,24128,24131,24136,24141,24144,24149,24154,24157,24162,24165,24170,24173,24178,24181,24186,24189,24194,24199,24202,24207,24210,24213,24218,24221,24226,24231,24235,24238,24241,24246,24251,24254,24259,24264,24267,24272,24275,24278,24283,24286,24291,24294,24299,24304,24307,24312,24317,24320,24325,24328,24333,24336],[29,24119,24115],{"id":24120},"_4策略学习",[33,24122,24124],{"id":24123},"_41概念描述","4.1.概念描述",[38,24126,24127],{},"用神经网络（策略网络）近似策略函数",[38,24129,24130],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[38,24132,24133],{},[1441,24134],{"alt":10,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[38,24137,24138],{},[1441,24139],{"alt":10,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[38,24142,24143],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[38,24145,24146],{},[1441,24147],{"alt":10,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[38,24150,24151],{},[1441,24152],{"alt":10,"src":24153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[38,24155,24156],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[38,24158,24159],{},[1441,24160],{"alt":10,"src":24161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[38,24163,24164],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[38,24166,24167],{},[1441,24168],{"alt":10,"src":24169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[38,24171,24172],{},"改进theta要用到策略梯度算法",[38,24174,24175],{},[1441,24176],{"alt":10,"src":24177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[38,24179,24180],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[38,24182,24183],{},[1441,24184],{"alt":10,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[38,24187,24188],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[38,24190,24191],{},[1441,24192],{"alt":10,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[38,24195,24196],{},[1441,24197],{"alt":10,"src":24198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[38,24200,24201],{},"梯度公式总结：",[38,24203,24204],{},[1441,24205],{"alt":10,"src":24206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[38,24208,24209],{},"两个公式的分别应用场景：",[38,24211,24212],{},"对于离散的动作：",[38,24214,24215],{},[1441,24216],{"alt":10,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[38,24219,24220],{},"对于连续的动作：",[38,24222,24223],{},[1441,24224],{"alt":10,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[38,24227,24228],{},[1441,24229],{"alt":10,"src":24230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[33,24232,24234],{"id":24233},"_42概率梯度算法总结","4.2.概率梯度算法总结",[38,24236,24237],{},"使用蒙特卡洛来近似计算策略梯度",[38,24239,24240],{},"蒙特卡洛法的解释如下：",[38,24242,24243],{},[1441,24244],{"alt":10,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[38,24247,24248],{},[1441,24249],{"alt":10,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[38,24252,24253],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[46,24255,24256],{},[49,24257,24258],{},"方法一：reinforce算法",[38,24260,24261],{},[1441,24262],{"alt":10,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[38,24265,24266],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[46,24268,24269],{"start":11},[49,24270,24271],{},"方法二：actor-critic算法",[38,24273,24274],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[38,24276,24277],{},"两个网络的构建：",[38,24279,24280],{},[1441,24281],{"alt":10,"src":24282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[38,24284,24285],{},"actor网路：",[38,24287,24288],{},[1441,24289],{"alt":10,"src":24290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[38,24292,24293],{},"critic网络",[38,24295,24296],{},[1441,24297],{"alt":10,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[46,24300,24301],{"start":1158},[49,24302,24303],{},"网络的训练",[38,24305,24306],{},"网络描述",[38,24308,24309],{},[1441,24310],{"alt":10,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[38,24313,24314],{},[1441,24315],{"alt":10,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[38,24318,24319],{},"TD算法更新梯度：",[38,24321,24322],{},[1441,24323],{"alt":10,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[38,24326,24327],{},"策略网络更新梯度：",[38,24329,24330],{},[1441,24331],{"alt":10,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[38,24334,24335],{},"训练整个流程的具体描述：",[38,24337,24338,24341,24342],{},[1441,24339],{"alt":10,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1441,24343],{"alt":10,"src":24344},"..\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":24346},[24347,24348],{"id":24123,"depth":11,"text":24124},{"id":24233,"depth":11,"text":24234},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24115,"description":10},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24355,"title":24356,"body":24357,"description":24364,"extension":14,"meta":24414,"navigation":17,"path":24415,"seo":24416,"stem":24417,"__hash__":24418},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24358,"toc":24410},[24359,24362,24365,24369,24372,24377,24381,24384,24389,24392,24397,24402,24405],[29,24360,24356],{"id":24361},"_5alphago算法",[38,24363,24364],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[33,24366,24368],{"id":24367},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[38,24370,24371],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[38,24373,24374],{},[1441,24375],{"alt":10,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[33,24378,24380],{"id":24379},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[38,24382,24383],{},"采用强化学习的方式训练策略网络",[38,24385,24386],{},[1441,24387],{"alt":10,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[38,24390,24391],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[38,24393,24394],{},[1441,24395],{"alt":10,"src":24396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[38,24398,24399],{},[1441,24400],{"alt":10,"src":24401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[38,24403,24404],{},"强化学习训练策略网络的总结：",[38,24406,24407],{},[1441,24408],{"alt":10,"src":24409},"..\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":24411},[24412,24413],{"id":24367,"depth":11,"text":24368},{"id":24379,"depth":11,"text":24380},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24356,"description":24364},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24420,"title":24421,"body":24422,"description":24429,"extension":14,"meta":24432,"navigation":17,"path":24433,"seo":24434,"stem":24435,"__hash__":24436},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24423,"toc":24430},[24424,24427],[29,24425,24421],{"id":24426},"_6价值网络",[38,24428,24429],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":10,"searchDepth":11,"depth":11,"links":24431},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24421,"description":24429},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24438,"title":24439,"body":24440,"description":24444,"extension":14,"meta":24445,"navigation":17,"path":24446,"seo":24447,"stem":24448,"__hash__":24449},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24441,"toc":24442},[],{"title":10,"searchDepth":11,"depth":11,"links":24443},[],"记录自己的强化学习笔记。",{"category":23359},"\u002Fwiki\u002F2025-12-04",{"title":24439,"description":24444},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24451,"title":24452,"body":24453,"description":23357,"extension":14,"meta":24492,"navigation":17,"path":24493,"seo":24494,"stem":24495,"__hash__":24496},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24454,"toc":24490},[24455,24458,24461,24467,24470,24476,24479,24484,24487],[29,24456,24452],{"id":24457},"_1-项目概览与官方资源",[38,24459,24460],{},"官方文档：",[38,24462,24463],{},[341,24464,24465],{"href":24465,"rel":24466},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23846],[38,24468,24469],{},"官方代码仓库：",[38,24471,24472],{},[341,24473,24474],{"href":24474,"rel":24475},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23846],[38,24477,24478],{},"复现大体流程：",[38,24480,24481],{},[1441,24482],{"alt":10,"src":24483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[38,24485,24486],{},"本教程的目标是打通这条链路：",[38,24488,24489],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":10,"searchDepth":11,"depth":11,"links":24491},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24452,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24498,"title":24499,"body":24500,"description":23357,"extension":14,"meta":24616,"navigation":17,"path":24617,"seo":24618,"stem":24619,"__hash__":24620},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24501,"toc":24611},[24502,24505,24509,24512,24519,24523,24526,24535,24545,24549,24579,24582,24608],[29,24503,24499],{"id":24504},"_2-环境准备与设备连接",[33,24506,24508],{"id":24507},"_21-系统与环境","2.1 系统与环境",[38,24510,24511],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[38,24513,24514,24515,24518],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[89,24516,24517],{},"lerobot"," 依赖。",[33,24520,24522],{"id":24521},"_22-机械臂串口识别","2.2 机械臂串口识别",[38,24524,24525],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[83,24527,24529],{"className":23803,"code":24528,"language":23805,"meta":10,"style":10},"lerobot-find-out\n",[89,24530,24531],{"__ignoreMap":10},[92,24532,24533],{"class":94,"line":95},[92,24534,24528],{"class":1942},[38,24536,24537,24538,315,24541,24544],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[89,24539,24540],{},"\u002Fdev\u002FttyACM0",[89,24542,24543],{},"\u002Fdev\u002FttyACM1","）。",[33,24546,24548],{"id":24547},"_23-串口授权","2.3 串口授权",[83,24550,24552],{"className":23803,"code":24551,"language":23805,"meta":10,"style":10},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[89,24553,24554,24568],{"__ignoreMap":10},[92,24555,24556,24559,24562,24565],{"class":94,"line":95},[92,24557,24558],{"class":1942},"sudo",[92,24560,24561],{"class":207}," chmod",[92,24563,24564],{"class":151}," 666",[92,24566,24567],{"class":207}," \u002Fdev\u002FttyACM0\n",[92,24569,24570,24572,24574,24576],{"class":94,"line":11},[92,24571,24558],{"class":1942},[92,24573,24561],{"class":207},[92,24575,24564],{"class":151},[92,24577,24578],{"class":207}," \u002Fdev\u002FttyACM1\n",[38,24580,24581],{},"说明：",[1110,24583,24584,24589,24595,24605],{},[49,24585,24586,24588],{},[89,24587,24558],{},"：以 root 权限执行命令。",[49,24590,24591,24594],{},[89,24592,24593],{},"chmod","：修改设备节点权限。",[49,24596,24597,24600,24601,24604],{},[89,24598,24599],{},"666","：",[89,24602,24603],{},"rw-rw-rw-","，所有用户可读写。",[49,24606,24607],{},"串口号必须替换为你机器上的真实端口。",[5106,24609,24610],{},"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":24612},[24613,24614,24615],{"id":24507,"depth":11,"text":24508},{"id":24521,"depth":11,"text":24522},{"id":24547,"depth":11,"text":24548},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24499,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24622,"title":24623,"body":24624,"description":23357,"extension":14,"meta":24785,"navigation":17,"path":24786,"seo":24787,"stem":24788,"__hash__":24789},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24625,"toc":24781},[24626,24630,24634,24640,24643,24700,24703,24707,24710,24778],[29,24627,24629],{"id":24628},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[33,24631,24633],{"id":24632},"_31-配置电机-id","3.1 配置电机 ID",[38,24635,24636,24637,24639],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[89,24638,320],{},"，需要改成机械臂链路里不冲突的编号。",[38,24641,24642],{},"方式一：用 LeRobot 命令逐步写入。",[83,24644,24646],{"className":23803,"code":24645,"language":23805,"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,24647,24648,24653,24661,24668,24673,24677,24682,24688,24695],{"__ignoreMap":10},[92,24649,24650],{"class":94,"line":95},[92,24651,24652],{"class":161},"# 主臂舵机配置 ID\n",[92,24654,24655,24658],{"class":94,"line":11},[92,24656,24657],{"class":1942},"lerobot-setup-motors",[92,24659,24660],{"class":151}," \\\n",[92,24662,24663,24666],{"class":94,"line":1158},[92,24664,24665],{"class":151},"  --teleop.type=so101_leader",[92,24667,24660],{"class":151},[92,24669,24670],{"class":94,"line":1173},[92,24671,24672],{"class":151},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[92,24674,24675],{"class":94,"line":1179},[92,24676,2379],{"emptyLinePlaceholder":17},[92,24678,24679],{"class":94,"line":1193},[92,24680,24681],{"class":161},"# 从臂舵机配置 ID\n",[92,24683,24684,24686],{"class":94,"line":1199},[92,24685,24657],{"class":1942},[92,24687,24660],{"class":151},[92,24689,24690,24693],{"class":94,"line":1290},[92,24691,24692],{"class":151},"  --robot.type=so101_follower",[92,24694,24660],{"class":151},[92,24696,24697],{"class":94,"line":1296},[92,24698,24699],{"class":151},"  --robot.port=\u002Fdev\u002FttyACM1\n",[38,24701,24702],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[33,24704,24706],{"id":24705},"_32-机械臂校准","3.2 机械臂校准",[38,24708,24709],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[83,24711,24713],{"className":23803,"code":24712,"language":23805,"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,24714,24715,24720,24727,24733,24740,24745,24749,24754,24760,24766,24773],{"__ignoreMap":10},[92,24716,24717],{"class":94,"line":95},[92,24718,24719],{"class":161},"# 主臂校准\n",[92,24721,24722,24725],{"class":94,"line":11},[92,24723,24724],{"class":1942},"lerobot-calibrate",[92,24726,24660],{"class":151},[92,24728,24729,24731],{"class":94,"line":1158},[92,24730,24665],{"class":151},[92,24732,24660],{"class":151},[92,24734,24735,24738],{"class":94,"line":1173},[92,24736,24737],{"class":151},"  --teleop.port=\u002Fdev\u002FttyACM0",[92,24739,24660],{"class":151},[92,24741,24742],{"class":94,"line":1179},[92,24743,24744],{"class":151},"  --teleop.id=my_awesome_leader_arm\n",[92,24746,24747],{"class":94,"line":1193},[92,24748,2379],{"emptyLinePlaceholder":17},[92,24750,24751],{"class":94,"line":1199},[92,24752,24753],{"class":161},"# 从臂校准\n",[92,24755,24756,24758],{"class":94,"line":1290},[92,24757,24724],{"class":1942},[92,24759,24660],{"class":151},[92,24761,24762,24764],{"class":94,"line":1296},[92,24763,24692],{"class":151},[92,24765,24660],{"class":151},[92,24767,24768,24771],{"class":94,"line":1308},[92,24769,24770],{"class":151},"  --robot.port=\u002Fdev\u002FttyACM1",[92,24772,24660],{"class":151},[92,24774,24775],{"class":94,"line":1591},[92,24776,24777],{"class":151},"  --robot.id=my_awesome_follower_arm\n",[5106,24779,24780],{},"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":24782},[24783,24784],{"id":24632,"depth":11,"text":24633},{"id":24705,"depth":11,"text":24706},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24623,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24791,"title":24792,"body":24793,"description":23357,"extension":14,"meta":24984,"navigation":17,"path":24985,"seo":24986,"stem":24987,"__hash__":24988},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24794,"toc":24980},[24795,24798,24802,24849,24853,24866,24929,24932,24977],[29,24796,24792],{"id":24797},"_4-遥操与相机接入",[33,24799,24801],{"id":24800},"_41-不带相机遥操","4.1 不带相机遥操",[83,24803,24805],{"className":23803,"code":24804,"language":23805,"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,24806,24807,24814,24820,24826,24833,24839,24845],{"__ignoreMap":10},[92,24808,24809,24812],{"class":94,"line":95},[92,24810,24811],{"class":1942},"lerobot-teleoperate",[92,24813,24660],{"class":151},[92,24815,24816,24818],{"class":94,"line":11},[92,24817,24692],{"class":151},[92,24819,24660],{"class":151},[92,24821,24822,24824],{"class":94,"line":1158},[92,24823,24770],{"class":151},[92,24825,24660],{"class":151},[92,24827,24828,24831],{"class":94,"line":1173},[92,24829,24830],{"class":151},"  --robot.id=my_awesome_follower_arm",[92,24832,24660],{"class":151},[92,24834,24835,24837],{"class":94,"line":1179},[92,24836,24665],{"class":151},[92,24838,24660],{"class":151},[92,24840,24841,24843],{"class":94,"line":1193},[92,24842,24737],{"class":151},[92,24844,24660],{"class":151},[92,24846,24847],{"class":94,"line":1199},[92,24848,24744],{"class":151},[33,24850,24852],{"id":24851},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[83,24854,24856],{"className":23803,"code":24855,"language":23805,"meta":10,"style":10},"lerobot-find-cameras opencv\n",[89,24857,24858],{"__ignoreMap":10},[92,24859,24860,24863],{"class":94,"line":95},[92,24861,24862],{"class":1942},"lerobot-find-cameras",[92,24864,24865],{"class":207}," opencv\n",[83,24867,24869],{"className":23803,"code":24868,"language":23805,"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,24870,24871,24877,24883,24889,24895,24905,24911,24917,24924],{"__ignoreMap":10},[92,24872,24873,24875],{"class":94,"line":95},[92,24874,24811],{"class":1942},[92,24876,24660],{"class":151},[92,24878,24879,24881],{"class":94,"line":11},[92,24880,24692],{"class":151},[92,24882,24660],{"class":151},[92,24884,24885,24887],{"class":94,"line":1158},[92,24886,24770],{"class":151},[92,24888,24660],{"class":151},[92,24890,24891,24893],{"class":94,"line":1173},[92,24892,24830],{"class":151},[92,24894,24660],{"class":151},[92,24896,24897,24900,24903],{"class":94,"line":1179},[92,24898,24899],{"class":151},"  --robot.cameras=",[92,24901,24902],{"class":207},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[92,24904,24660],{"class":151},[92,24906,24907,24909],{"class":94,"line":1193},[92,24908,24665],{"class":151},[92,24910,24660],{"class":151},[92,24912,24913,24915],{"class":94,"line":1199},[92,24914,24737],{"class":151},[92,24916,24660],{"class":151},[92,24918,24919,24922],{"class":94,"line":1290},[92,24920,24921],{"class":151},"  --teleop.id=my_awesome_leader_arm",[92,24923,24660],{"class":151},[92,24925,24926],{"class":94,"line":1296},[92,24927,24928],{"class":151},"  --display_data=true\n",[38,24930,24931],{},"相机参数说明：",[1110,24933,24934,24940,24946,24955,24965,24971],{},[49,24935,24936,24939],{},[89,24937,24938],{},"front","：相机名称。",[49,24941,24942,24945],{},[89,24943,24944],{},"type: opencv","：相机驱动类型。",[49,24947,24948,24951,24952,24544],{},[89,24949,24950],{},"index_or_path","：设备编号或设备路径（如 ",[89,24953,24954],{},"\u002Fdev\u002Fvideo4",[49,24956,24957,24960,24961,24964],{},[89,24958,24959],{},"width"," \u002F ",[89,24962,24963],{},"height","：图像分辨率。",[49,24966,24967,24970],{},[89,24968,24969],{},"fps","：采样帧率。",[49,24972,24973,24976],{},[89,24974,24975],{},"--display_data=true","：启用实时可视化。",[5106,24978,24979],{},"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":24981},[24982,24983],{"id":24800,"depth":11,"text":24801},{"id":24851,"depth":11,"text":24852},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24792,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24990,"title":24991,"body":24992,"description":23357,"extension":14,"meta":25164,"navigation":17,"path":25165,"seo":25166,"stem":25167,"__hash__":25168},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24993,"toc":25159},[24994,24998,25002,25007,25012,25015,25057,25063,25067,25116,25121,25125,25128,25136,25141,25146,25151,25156],[29,24995,24997],{"id":24996},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[33,24999,25001],{"id":25000},"_51-生成访问令牌","5.1 生成访问令牌",[38,25003,25004],{},[1441,25005],{"alt":10,"src":25006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[38,25008,25009],{},[1441,25010],{"alt":10,"src":25011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[38,25013,25014],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[83,25016,25018],{"className":23803,"code":25017,"language":23805,"meta":10,"style":10},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[89,25019,25020,25033],{"__ignoreMap":10},[92,25021,25022,25025,25028,25030],{"class":94,"line":95},[92,25023,25024],{"class":98},"export",[92,25026,25027],{"class":102}," HF_TOKEN",[92,25029,148],{"class":98},[92,25031,25032],{"class":207},"\"your_huggingface_token\"\n",[92,25034,25035,25038,25041,25044,25047,25049,25052,25054],{"class":94,"line":11},[92,25036,25037],{"class":1942},"hf",[92,25039,25040],{"class":207}," auth",[92,25042,25043],{"class":207}," login",[92,25045,25046],{"class":151}," --token",[92,25048,9704],{"class":207},[92,25050,25051],{"class":102},"$HF_TOKEN",[92,25053,354],{"class":207},[92,25055,25056],{"class":151}," --add-to-git-credential\n",[38,25058,25059,25062],{},[89,25060,25061],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[33,25064,25066],{"id":25065},"_52-验证登录","5.2 验证登录",[83,25068,25070],{"className":23803,"code":25069,"language":23805,"meta":10,"style":10},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[89,25071,25072,25103],{"__ignoreMap":10},[92,25073,25074,25077,25079,25082,25084,25086,25089,25092,25095,25098,25101],{"class":94,"line":95},[92,25075,25076],{"class":102},"HF_USER",[92,25078,148],{"class":98},[92,25080,25081],{"class":102},"$(",[92,25083,25037],{"class":1942},[92,25085,25040],{"class":207},[92,25087,25088],{"class":207}," whoami",[92,25090,25091],{"class":98}," |",[92,25093,25094],{"class":1942}," head",[92,25096,25097],{"class":151}," -n",[92,25099,25100],{"class":151}," 1",[92,25102,109],{"class":102},[92,25104,25105,25108,25110,25113],{"class":94,"line":11},[92,25106,25107],{"class":151},"echo",[92,25109,9704],{"class":207},[92,25111,25112],{"class":102},"$HF_USER",[92,25114,25115],{"class":207},"\"\n",[38,25117,25118],{},[1441,25119],{"alt":10,"src":25120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[33,25122,25124],{"id":25123},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[38,25126,25127],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1110,25129,25130,25133],{},[49,25131,25132],{},"Dataset Repo（用于上传演示数据）",[49,25134,25135],{},"Model Repo（用于上传训练后的 ACT 权重）",[38,25137,25138],{},[1441,25139],{"alt":10,"src":25140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[38,25142,25143],{},[1441,25144],{"alt":10,"src":25145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[38,25147,25148],{},[1441,25149],{"alt":10,"src":25150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[38,25152,25153],{},[1441,25154],{"alt":10,"src":25155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5106,25157,25158],{},"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":25160},[25161,25162,25163],{"id":25000,"depth":11,"text":25001},{"id":25065,"depth":11,"text":25066},{"id":25123,"depth":11,"text":25124},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24991,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25170,"title":25171,"body":25172,"description":23357,"extension":14,"meta":25369,"navigation":17,"path":25370,"seo":25371,"stem":25372,"__hash__":25373},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25173,"toc":25364},[25174,25178,25182,25278,25286,25291,25295,25311,25314,25318,25361],[29,25175,25177],{"id":25176},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[33,25179,25181],{"id":25180},"_61-录制示教数据","6.1 录制示教数据",[83,25183,25185],{"className":23803,"code":25184,"language":23805,"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,25186,25187,25194,25200,25206,25212,25221,25227,25233,25239,25246,25256,25263,25273],{"__ignoreMap":10},[92,25188,25189,25192],{"class":94,"line":95},[92,25190,25191],{"class":1942},"lerobot-record",[92,25193,24660],{"class":151},[92,25195,25196,25198],{"class":94,"line":11},[92,25197,24692],{"class":151},[92,25199,24660],{"class":151},[92,25201,25202,25204],{"class":94,"line":1158},[92,25203,24770],{"class":151},[92,25205,24660],{"class":151},[92,25207,25208,25210],{"class":94,"line":1173},[92,25209,24830],{"class":151},[92,25211,24660],{"class":151},[92,25213,25214,25216,25219],{"class":94,"line":1179},[92,25215,24899],{"class":151},[92,25217,25218],{"class":207},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[92,25220,24660],{"class":151},[92,25222,25223,25225],{"class":94,"line":1193},[92,25224,24665],{"class":151},[92,25226,24660],{"class":151},[92,25228,25229,25231],{"class":94,"line":1199},[92,25230,24737],{"class":151},[92,25232,24660],{"class":151},[92,25234,25235,25237],{"class":94,"line":1290},[92,25236,24921],{"class":151},[92,25238,24660],{"class":151},[92,25240,25241,25244],{"class":94,"line":1296},[92,25242,25243],{"class":151},"  --display_data=true",[92,25245,24660],{"class":151},[92,25247,25248,25251,25254],{"class":94,"line":1308},[92,25249,25250],{"class":151},"  --dataset.repo_id=",[92,25252,25253],{"class":207},"\"Embodied-AI-6\u002Fso101_test\"",[92,25255,24660],{"class":151},[92,25257,25258,25261],{"class":94,"line":1591},[92,25259,25260],{"class":151},"  --dataset.num_episodes=10",[92,25262,24660],{"class":151},[92,25264,25265,25268,25271],{"class":94,"line":1596},[92,25266,25267],{"class":151},"  --dataset.single_task=",[92,25269,25270],{"class":207},"\"Grab the green cube\"",[92,25272,24660],{"class":151},[92,25274,25275],{"class":94,"line":1602},[92,25276,25277],{"class":151},"  --resume=true\n",[1110,25279,25280],{},[49,25281,25282,25285],{},[89,25283,25284],{},"--resume=true","：已有同一数据集时继续追加 episode。",[38,25287,25288],{},[1441,25289],{"alt":10,"src":25290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[33,25292,25294],{"id":25293},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[83,25296,25298],{"className":23803,"code":25297,"language":23805,"meta":10,"style":10},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[89,25299,25300],{"__ignoreMap":10},[92,25301,25302,25305,25308],{"class":94,"line":95},[92,25303,25304],{"class":1942},"rm",[92,25306,25307],{"class":151}," -rf",[92,25309,25310],{"class":207}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[38,25312,25313],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[33,25315,25317],{"id":25316},"_63-回放指定-episode","6.3 回放指定 episode",[83,25319,25321],{"className":23803,"code":25320,"language":23805,"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,25322,25323,25330,25336,25342,25348,25356],{"__ignoreMap":10},[92,25324,25325,25328],{"class":94,"line":95},[92,25326,25327],{"class":1942},"lerobot-replay",[92,25329,24660],{"class":151},[92,25331,25332,25334],{"class":94,"line":11},[92,25333,24692],{"class":151},[92,25335,24660],{"class":151},[92,25337,25338,25340],{"class":94,"line":1158},[92,25339,24770],{"class":151},[92,25341,24660],{"class":151},[92,25343,25344,25346],{"class":94,"line":1173},[92,25345,24830],{"class":151},[92,25347,24660],{"class":151},[92,25349,25350,25352,25354],{"class":94,"line":1179},[92,25351,25250],{"class":151},[92,25353,25253],{"class":207},[92,25355,24660],{"class":151},[92,25357,25358],{"class":94,"line":1193},[92,25359,25360],{"class":151},"  --dataset.episode=0\n",[5106,25362,25363],{},"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":25365},[25366,25367,25368],{"id":25180,"depth":11,"text":25181},{"id":25293,"depth":11,"text":25294},{"id":25316,"depth":11,"text":25317},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25171,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25375,"title":25376,"body":25377,"description":23357,"extension":14,"meta":25505,"navigation":17,"path":25506,"seo":25507,"stem":25508,"__hash__":25509},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25378,"toc":25503},[25379,25383,25446,25449,25496,25501],[29,25380,25382],{"id":25381},"_7-act-模型训练","7. ACT 模型训练",[83,25384,25386],{"className":23803,"code":25385,"language":23805,"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,25387,25388,25395,25403,25410,25417,25424,25431,25438],{"__ignoreMap":10},[92,25389,25390,25393],{"class":94,"line":95},[92,25391,25392],{"class":1942},"lerobot-train",[92,25394,24660],{"class":151},[92,25396,25397,25399,25401],{"class":94,"line":11},[92,25398,25250],{"class":151},[92,25400,25253],{"class":207},[92,25402,24660],{"class":151},[92,25404,25405,25408],{"class":94,"line":1158},[92,25406,25407],{"class":151},"  --policy.type=act",[92,25409,24660],{"class":151},[92,25411,25412,25415],{"class":94,"line":1173},[92,25413,25414],{"class":151},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[92,25416,24660],{"class":151},[92,25418,25419,25422],{"class":94,"line":1179},[92,25420,25421],{"class":151},"  --job_name=act_so101_test",[92,25423,24660],{"class":151},[92,25425,25426,25429],{"class":94,"line":1193},[92,25427,25428],{"class":151},"  --policy.device=cuda",[92,25430,24660],{"class":151},[92,25432,25433,25436],{"class":94,"line":1199},[92,25434,25435],{"class":151},"  --wandb.enable=false",[92,25437,24660],{"class":151},[92,25439,25440,25443],{"class":94,"line":1290},[92,25441,25442],{"class":151},"  --policy.repo_id=",[92,25444,25445],{"class":207},"\"Embodied-AI-6\u002Flerobot_new\"\n",[38,25447,25448],{},"参数说明：",[1110,25450,25451,25457,25463,25469,25475,25484,25490],{},[49,25452,25453,25456],{},[89,25454,25455],{},"--dataset.repo_id","：训练数据集仓库。",[49,25458,25459,25462],{},[89,25460,25461],{},"--policy.type=act","：策略模型类型为 ACT。",[49,25464,25465,25468],{},[89,25466,25467],{},"--output_dir","：本地训练输出目录。",[49,25470,25471,25474],{},[89,25472,25473],{},"--job_name","：训练任务名称。",[49,25476,25477,25480,25481,24544],{},[89,25478,25479],{},"--policy.device","：训练设备（如 ",[89,25482,25483],{},"cuda",[49,25485,25486,25489],{},[89,25487,25488],{},"--wandb.enable","：是否启用 WandB 可视化。",[49,25491,25492,25495],{},[89,25493,25494],{},"--policy.repo_id","：训练后模型推送目标仓库。",[38,25497,25498],{},[1441,25499],{"alt":10,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5106,25502,25363],{},{"title":10,"searchDepth":11,"depth":11,"links":25504},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25376,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25511,"title":25512,"body":25513,"description":23357,"extension":14,"meta":25600,"navigation":17,"path":25601,"seo":25602,"stem":25603,"__hash__":25604},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25514,"toc":25598},[25515,25518,25521,25588,25596],[29,25516,25512],{"id":25517},"_8-策略部署与自动采集",[38,25519,25520],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[83,25522,25524],{"className":23803,"code":25523,"language":23805,"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,25525,25526,25532,25538,25544,25552,25558,25565,25573,25581],{"__ignoreMap":10},[92,25527,25528,25530],{"class":94,"line":95},[92,25529,25191],{"class":1942},[92,25531,24660],{"class":151},[92,25533,25534,25536],{"class":94,"line":11},[92,25535,24692],{"class":151},[92,25537,24660],{"class":151},[92,25539,25540,25542],{"class":94,"line":1158},[92,25541,24770],{"class":151},[92,25543,24660],{"class":151},[92,25545,25546,25548,25550],{"class":94,"line":1173},[92,25547,24899],{"class":151},[92,25549,25218],{"class":207},[92,25551,24660],{"class":151},[92,25553,25554,25556],{"class":94,"line":1179},[92,25555,24830],{"class":151},[92,25557,24660],{"class":151},[92,25559,25560,25563],{"class":94,"line":1193},[92,25561,25562],{"class":151},"  --display_data=false",[92,25564,24660],{"class":151},[92,25566,25567,25569,25571],{"class":94,"line":1199},[92,25568,25250],{"class":151},[92,25570,25253],{"class":207},[92,25572,24660],{"class":151},[92,25574,25575,25577,25579],{"class":94,"line":1290},[92,25576,25267],{"class":151},[92,25578,25270],{"class":207},[92,25580,24660],{"class":151},[92,25582,25583,25586],{"class":94,"line":1296},[92,25584,25585],{"class":151},"  --policy.path=",[92,25587,25445],{"class":207},[1110,25589,25590],{},[49,25591,25592,25595],{},[89,25593,25594],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5106,25597,25363],{},{"title":10,"searchDepth":11,"depth":11,"links":25599},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25512,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25606,"title":25607,"body":25608,"description":23357,"extension":14,"meta":25637,"navigation":17,"path":25638,"seo":25639,"stem":25640,"__hash__":25641},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25609,"toc":25635},[25610,25614,25617,25623,25626,25632],[29,25611,25613],{"id":25612},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[38,25615,25616],{},"项目地址：",[38,25618,25619],{},[341,25620,25621],{"href":25621,"rel":25622},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23846],[38,25624,25625],{},"参考教程：",[38,25627,25628],{},[341,25629,25630],{"href":25630,"rel":25631},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23846],[38,25633,25634],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":10,"searchDepth":11,"depth":11,"links":25636},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25607,"description":23357},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25643,"title":25644,"body":25645,"description":25649,"extension":14,"meta":25650,"navigation":17,"path":25651,"seo":25652,"stem":25653,"__hash__":25654},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25646,"toc":25647},[],{"title":10,"searchDepth":11,"depth":11,"links":25648},[],"act复现",{"category":23359},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25644,"description":25649},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25656,"title":25657,"body":25658,"description":10,"extension":14,"meta":25960,"navigation":17,"path":25961,"seo":25962,"stem":25963,"__hash__":25964},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25659,"toc":25952},[25660,25663,25667,25677,25684,25691,25694,25701,25704,25707,25711,25723,25727,25773,25776,25779,25782,25785,25788,25792,25830,25836,25840,25894,25899,25902,25905,25910,25913,25918,25921,25924,25928,25931,25934,25938],[29,25661,25657],{"id":25662},"_1简介",[63,25664,25666],{"id":25665},"_11什么是-docker","1.1什么是 Docker？",[38,25668,25669,25670,25673,25674],{},"Docker 是一个开源的 ",[252,25671,25672],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[252,25675,25676],{},"一次构建，到处运行。",[38,25678,25679,25680,25683],{},"“ ",[252,25681,25682],{},"一次构建，到处运行"," ”也就是说：",[46,25685,25686],{},[49,25687,25688],{},[252,25689,25690],{},"之前：",[38,25692,25693],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[46,25695,25696],{},[49,25697,25698],{},[252,25699,25700],{},"使用docker后：",[38,25702,25703],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[38,25705,25706],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[63,25708,25710],{"id":25709},"_12它是怎么工作的","1.2.它是怎么工作的？",[1110,25712,25713,25716],{},[49,25714,25715],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[49,25717,25718,25719,25722],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[252,25720,25721],{},"无论在哪运行都一样稳定"," 。",[63,25724,25726],{"id":25725},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[240,25728,25729,25739],{},[243,25730,25731],{},[246,25732,25733,25736],{},[249,25734,25735],{"align":23717},"概念",[249,25737,25738],{"align":23717},"解释",[287,25740,25741,25749,25757,25765],{},[246,25742,25743,25746],{},[292,25744,25745],{"align":23717},"镜像",[292,25747,25748],{"align":23717},"Image，运行容器的模板，像是一个应用快照",[246,25750,25751,25754],{},[292,25752,25753],{"align":23717},"容器",[292,25755,25756],{"align":23717},"Container，运行中的镜像实例，有自己的文件系统、网络等",[246,25758,25759,25762],{},[292,25760,25761],{"align":23717},"Dockerfile",[292,25763,25764],{"align":23717},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[246,25766,25767,25770],{},[292,25768,25769],{"align":23717},"仓库",[292,25771,25772],{"align":23717},"Registry，存放镜像的地方，比如 Docker Hub",[38,25774,25775],{},"抽象化理解:",[38,25777,25778],{},"Docker镜像≈C++类",[38,25780,25781],{},"Docker容器≈C++类实例(即对象)",[38,25783,25784],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[38,25786,25787],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[63,25789,25791],{"id":25790},"_14类比理解","1.4.类比理解",[240,25793,25794,25804],{},[243,25795,25796],{},[246,25797,25798,25801],{},[249,25799,25800],{"align":23717},"传统部署",[249,25802,25803],{"align":23717},"Docker部署",[287,25805,25806,25814,25822],{},[246,25807,25808,25811],{},[292,25809,25810],{"align":23717},"手动安装依赖、调试版本不一致问题",[292,25812,25813],{"align":23717},"一次打包环境和代码",[246,25815,25816,25819],{},[292,25817,25818],{"align":23717},"程序“裸奔”跑在系统上",[292,25820,25821],{"align":23717},"程序“穿着容器”隔离运行",[246,25823,25824,25827],{},[292,25825,25826],{"align":23717},"容易“在我电脑上能跑”",[292,25828,25829],{"align":23717},"保证“无论在哪都能跑”",[38,25831,25832,25833],{},"就像快递包裹： ",[252,25834,25835],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[63,25837,25839],{"id":25838},"_15docker-的核心优势","1.5.Docker 的核心优势",[240,25841,25842,25852],{},[243,25843,25844],{},[246,25845,25846,25849],{},[249,25847,25848],{"align":23717},"优势",[249,25850,25851],{"align":23717},"说明",[287,25853,25854,25862,25870,25878,25886],{},[246,25855,25856,25859],{},[292,25857,25858],{"align":23717},"轻量级",[292,25860,25861],{"align":23717},"基于系统内核共享，启动速度快，占资源少",[246,25863,25864,25867],{},[292,25865,25866],{"align":23717},"跨平台",[292,25868,25869],{"align":23717},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[246,25871,25872,25875],{},[292,25873,25874],{"align":23717},"易于迁移部署",[292,25876,25877],{"align":23717},"应用和环境一起封装，不怕依赖不一致",[246,25879,25880,25883],{},[292,25881,25882],{"align":23717},"易于版本控制",[292,25884,25885],{"align":23717},"镜像版本可控，支持回滚",[246,25887,25888,25891],{},[292,25889,25890],{"align":23717},"生态丰富",[292,25892,25893],{"align":23717},"Docker Hub 上有成千上万的现成镜像可用",[46,25895,25896],{},[49,25897,25898],{},"在Linux上可以几乎实现无性能损失。",[38,25900,25901],{},"docker里的发行版和本机共用Linux内核。",[38,25903,25904],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[46,25906,25907],{},[49,25908,25909],{},"可以快速部署在绝大多数Linux发行版",[38,25911,25912],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[46,25914,25915],{},[49,25916,25917],{},"配置环境简单",[38,25919,25920],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[38,25922,25923],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[46,25925,25926],{},[49,25927,25890],{},[38,25929,25930],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[38,25932,25933],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[63,25935,25937],{"id":25936},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1110,25939,25940,25943,25946,25949],{},[49,25941,25942],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[49,25944,25945],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[49,25947,25948],{},"微服务架构：每个服务一个容器，灵活组合",[49,25950,25951],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":10,"searchDepth":11,"depth":11,"links":25953},[25954,25955,25956,25957,25958,25959],{"id":25665,"depth":1158,"text":25666},{"id":25709,"depth":1158,"text":25710},{"id":25725,"depth":1158,"text":25726},{"id":25790,"depth":1158,"text":25791},{"id":25838,"depth":1158,"text":25839},{"id":25936,"depth":1158,"text":25937},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25657,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25966,"title":25967,"body":25968,"description":10,"extension":14,"meta":26701,"navigation":17,"path":26702,"seo":26703,"stem":26704,"__hash__":26705},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25969,"toc":26696},[25970,25973,25977,25980,25983,25989,25995,25999,26008,26011,26068,26071,26122,26125,26208,26211,26248,26252,26263,26276,26283,26286,26366,26369,26419,26422,26445,26449,26456,26459,26475,26481,26484,26500,26506,26509,26525,26539,26545,26565,26571,26574,26586,26592,26595,26609,26615,26618,26638,26643,26646,26649,26653,26656,26659,26662,26669,26672,26675,26678,26683,26688,26693],[29,25971,25967],{"id":25972},"_2安装docker",[63,25974,25976],{"id":25975},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[38,25978,25979],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[38,25981,25982],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[38,25984,25985],{},[341,25986,25987],{"href":25987,"rel":25988},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23846],[38,25990,25991],{},[341,25992,25993],{"href":25993,"rel":25994},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23846],[21978,25996,25998],{"id":25997},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[38,26000,26001,26002,26007],{},"以下内容根据 ",[341,26003,26006],{"href":26004,"rel":26005},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23846],"官方文档"," 修改而来。",[38,26009,26010],{},"如果你过去安装过 docker，先删掉：",[83,26012,26014],{"className":23803,"code":26013,"language":23805,"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,26015,26016],{"__ignoreMap":10},[92,26017,26018,26020,26023,26026,26029,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062,26065],{"class":94,"line":95},[92,26019,3004],{"class":98},[92,26021,26022],{"class":102}," pkg ",[92,26024,26025],{"class":98},"in",[92,26027,26028],{"class":207}," docker.io",[92,26030,26031],{"class":207}," docker-doc",[92,26033,26034],{"class":207}," docker-compose",[92,26036,26037],{"class":207}," docker-compose-v2",[92,26039,26040],{"class":207}," podman-docker",[92,26042,26043],{"class":207}," containerd",[92,26045,26046],{"class":207}," runc",[92,26048,26049],{"class":102},"; ",[92,26051,26052],{"class":98},"do",[92,26054,26055],{"class":1942}," sudo",[92,26057,26058],{"class":207}," apt-get",[92,26060,26061],{"class":207}," remove",[92,26063,26064],{"class":102}," $pkg; ",[92,26066,26067],{"class":98},"done\n",[38,26069,26070],{},"首先安装依赖和GPG：",[83,26072,26076],{"className":26073,"code":26074,"language":26075,"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,26077,26078,26083,26088,26093,26098,26103,26108,26112,26117],{"__ignoreMap":10},[92,26079,26080],{"class":94,"line":95},[92,26081,26082],{},"# Add Docker's official GPG key:\n",[92,26084,26085],{"class":94,"line":11},[92,26086,26087],{},"sudo apt-get update\n",[92,26089,26090],{"class":94,"line":1158},[92,26091,26092],{},"sudo apt-get install ca-certificates curl\n",[92,26094,26095],{"class":94,"line":1173},[92,26096,26097],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[92,26099,26100],{"class":94,"line":1179},[92,26101,26102],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[92,26104,26105],{"class":94,"line":1193},[92,26106,26107],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[92,26109,26110],{"class":94,"line":1199},[92,26111,2379],{"emptyLinePlaceholder":17},[92,26113,26114],{"class":94,"line":1290},[92,26115,26116],{},"# 如果上面这行报错就弄下面这行\n",[92,26118,26119],{"class":94,"line":1296},[92,26120,26121],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[38,26123,26124],{},"信任 Docker 的 GPG 公钥并添加仓库：",[83,26126,26128],{"className":23803,"code":26127,"language":23805,"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,26129,26130,26135,26141,26158,26191],{"__ignoreMap":10},[92,26131,26132],{"class":94,"line":95},[92,26133,26134],{"class":161},"# Add the repository to Apt sources:\n",[92,26136,26137,26139],{"class":94,"line":11},[92,26138,25107],{"class":151},[92,26140,24660],{"class":151},[92,26142,26143,26146,26149,26152,26155],{"class":94,"line":1158},[92,26144,26145],{"class":207},"  \"deb [arch=$(",[92,26147,26148],{"class":1942},"dpkg",[92,26150,26151],{"class":151}," --print-architecture",[92,26153,26154],{"class":207},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[92,26156,26157],{"class":151},"\\\n",[92,26159,26160,26163,26165,26167,26170,26173,26175,26177,26180,26182,26184,26187,26189],{"class":94,"line":1173},[92,26161,26162],{"class":207},"  \"",[92,26164,25081],{"class":102},[92,26166,661],{"class":151},[92,26168,26169],{"class":207}," \u002Fetc\u002Fos-release",[92,26171,26172],{"class":102}," && ",[92,26174,25107],{"class":151},[92,26176,9704],{"class":207},[92,26178,26179],{"class":102},"$VERSION_CODENAME",[92,26181,354],{"class":207},[92,26183,532],{"class":102},[92,26185,26186],{"class":207},"\" stable\"",[92,26188,25091],{"class":98},[92,26190,24660],{"class":151},[92,26192,26193,26196,26199,26202,26205],{"class":94,"line":1179},[92,26194,26195],{"class":1942},"  sudo",[92,26197,26198],{"class":207}," tee",[92,26200,26201],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[92,26203,26204],{"class":98}," >",[92,26206,26207],{"class":207}," \u002Fdev\u002Fnull\n",[38,26209,26210],{},"最后安装",[83,26212,26214],{"className":23803,"code":26213,"language":23805,"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,26215,26216,26225],{"__ignoreMap":10},[92,26217,26218,26220,26222],{"class":94,"line":95},[92,26219,24558],{"class":1942},[92,26221,26058],{"class":207},[92,26223,26224],{"class":207}," update\n",[92,26226,26227,26229,26231,26233,26236,26239,26242,26245],{"class":94,"line":11},[92,26228,24558],{"class":1942},[92,26230,26058],{"class":207},[92,26232,23815],{"class":207},[92,26234,26235],{"class":207}," docker-ce",[92,26237,26238],{"class":207}," docker-ce-cli",[92,26240,26241],{"class":207}," containerd.io",[92,26243,26244],{"class":207}," docker-buildx-plugin",[92,26246,26247],{"class":207}," docker-compose-plugin\n",[21978,26249,26251],{"id":26250},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[38,26253,26254,26255,26258,26259,26262],{},"查看自己自己包管理工具版本（dnf是 ",[252,26256,26257],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[252,26260,26261],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[83,26264,26266],{"className":23803,"code":26265,"language":23805,"meta":10,"style":10},"dnf --version\n",[89,26267,26268],{"__ignoreMap":10},[92,26269,26270,26273],{"class":94,"line":95},[92,26271,26272],{"class":1942},"dnf",[92,26274,26275],{"class":151}," --version\n",[38,26277,26001,26278,26282],{},[341,26279,26006],{"href":26280,"rel":26281},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23846]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[38,26284,26285],{},"如果你之前安装过 docker，请先删掉",[83,26287,26289],{"className":23803,"code":26288,"language":23805,"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,26290,26291,26305,26312,26319,26326,26333,26340,26347,26354,26361],{"__ignoreMap":10},[92,26292,26293,26295,26298,26300,26303],{"class":94,"line":95},[92,26294,24558],{"class":1942},[92,26296,26297],{"class":207}," dnf",[92,26299,26061],{"class":207},[92,26301,26302],{"class":207}," docker",[92,26304,24660],{"class":151},[92,26306,26307,26310],{"class":94,"line":11},[92,26308,26309],{"class":207},"                  docker-client",[92,26311,24660],{"class":151},[92,26313,26314,26317],{"class":94,"line":1158},[92,26315,26316],{"class":207},"                  docker-client-latest",[92,26318,24660],{"class":151},[92,26320,26321,26324],{"class":94,"line":1173},[92,26322,26323],{"class":207},"                  docker-common",[92,26325,24660],{"class":151},[92,26327,26328,26331],{"class":94,"line":1179},[92,26329,26330],{"class":207},"                  docker-latest",[92,26332,24660],{"class":151},[92,26334,26335,26338],{"class":94,"line":1193},[92,26336,26337],{"class":207},"                  docker-latest-logrotate",[92,26339,24660],{"class":151},[92,26341,26342,26345],{"class":94,"line":1199},[92,26343,26344],{"class":207},"                  docker-logrotate",[92,26346,24660],{"class":151},[92,26348,26349,26352],{"class":94,"line":1290},[92,26350,26351],{"class":207},"                  docker-selinux",[92,26353,24660],{"class":151},[92,26355,26356,26359],{"class":94,"line":1296},[92,26357,26358],{"class":207},"                  docker-engine-selinux",[92,26360,24660],{"class":151},[92,26362,26363],{"class":94,"line":1308},[92,26364,26365],{"class":207},"                  docker-engine\n",[38,26367,26368],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[83,26370,26372],{"className":23803,"code":26371,"language":23805,"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,26373,26374,26388,26403],{"__ignoreMap":10},[92,26375,26376,26378,26380,26383,26385],{"class":94,"line":95},[92,26377,24558],{"class":1942},[92,26379,26297],{"class":207},[92,26381,26382],{"class":151}," -y",[92,26384,23815],{"class":207},[92,26386,26387],{"class":207}," dnf-plugins-core\n",[92,26389,26390,26392,26394,26397,26400],{"class":94,"line":11},[92,26391,24558],{"class":1942},[92,26393,26297],{"class":207},[92,26395,26396],{"class":207}," config-manager",[92,26398,26399],{"class":207}," addrepo",[92,26401,26402],{"class":151}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[92,26404,26405,26407,26410,26413,26416],{"class":94,"line":1158},[92,26406,24558],{"class":1942},[92,26408,26409],{"class":207}," sed",[92,26411,26412],{"class":151}," -i",[92,26414,26415],{"class":207}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[92,26417,26418],{"class":207}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[38,26420,26421],{},"最后安装：",[83,26423,26425],{"className":23803,"code":26424,"language":23805,"meta":10,"style":10},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[89,26426,26427],{"__ignoreMap":10},[92,26428,26429,26431,26433,26435,26437,26439,26441,26443],{"class":94,"line":95},[92,26430,24558],{"class":1942},[92,26432,26297],{"class":207},[92,26434,23815],{"class":207},[92,26436,26235],{"class":207},[92,26438,26238],{"class":207},[92,26440,26241],{"class":207},[92,26442,26244],{"class":207},[92,26444,26247],{"class":207},[63,26446,26448],{"id":26447},"_22配置环境","2.2.配置环境",[21978,26450,26452,26455],{"id":26451},"_221检查-docker-服务状态",[252,26453,26454],{},"2.2.1.检查 Docker 服务状态"," ：",[38,26457,26458],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[83,26460,26462],{"className":23803,"code":26461,"language":23805,"meta":10,"style":10},"systemctl status docker\n",[89,26463,26464],{"__ignoreMap":10},[92,26465,26466,26469,26472],{"class":94,"line":95},[92,26467,26468],{"class":1942},"systemctl",[92,26470,26471],{"class":207}," status",[92,26473,26474],{"class":207}," docker\n",[21978,26476,26478,26455],{"id":26477},"_222启动-docker-服务",[252,26479,26480],{},"2.2.2.启动 Docker 服务",[38,26482,26483],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[83,26485,26487],{"className":23803,"code":26486,"language":23805,"meta":10,"style":10},"sudo systemctl start docker\n",[89,26488,26489],{"__ignoreMap":10},[92,26490,26491,26493,26496,26498],{"class":94,"line":95},[92,26492,24558],{"class":1942},[92,26494,26495],{"class":207}," systemctl",[92,26497,4163],{"class":207},[92,26499,26474],{"class":207},[21978,26501,26503,26455],{"id":26502},"_223设置-docker-开机自启",[252,26504,26505],{},"2.2.3.设置 Docker 开机自启",[38,26507,26508],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[83,26510,26512],{"className":23803,"code":26511,"language":23805,"meta":10,"style":10},"sudo systemctl enable docker\n",[89,26513,26514],{"__ignoreMap":10},[92,26515,26516,26518,26520,26523],{"class":94,"line":95},[92,26517,24558],{"class":1942},[92,26519,26495],{"class":207},[92,26521,26522],{"class":207}," enable",[92,26524,26474],{"class":207},[21978,26526,26528,13775,26531,13775,26536,26455],{"id":26527},"_224将用户添加到-docker-组",[252,26529,26530],{},"2.2.4.将用户添加到",[252,26532,26533],{},[89,26534,26535],{},"docker",[252,26537,26538],{},"组",[38,26540,26541,26542,26544],{},"使用以下命令将当前用户添加到 ",[89,26543,26535],{}," 组：",[83,26546,26548],{"className":23803,"code":26547,"language":23805,"meta":10,"style":10},"sudo usermod -aG docker $USER\n",[89,26549,26550],{"__ignoreMap":10},[92,26551,26552,26554,26557,26560,26562],{"class":94,"line":95},[92,26553,24558],{"class":1942},[92,26555,26556],{"class":207}," usermod",[92,26558,26559],{"class":151}," -aG",[92,26561,26302],{"class":207},[92,26563,26564],{"class":102}," $USER\n",[21978,26566,26568,26455],{"id":26567},"_225退出并重新登录",[252,26569,26570],{},"2.2.5.退出并重新登录",[38,26572,26573],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[83,26575,26577],{"className":23803,"code":26576,"language":23805,"meta":10,"style":10},"newgrp docker\n",[89,26578,26579],{"__ignoreMap":10},[92,26580,26581,26584],{"class":94,"line":95},[92,26582,26583],{"class":1942},"newgrp",[92,26585,26474],{"class":207},[21978,26587,26589,26455],{"id":26588},"_226重新启动-docker-服务如果需要",[252,26590,26591],{},"2.2.6.重新启动 Docker 服务（如果需要）",[38,26593,26594],{},"确保 Docker 服务正在运行，可以使用以下命令：",[83,26596,26597],{"className":23803,"code":26486,"language":23805,"meta":10,"style":10},[89,26598,26599],{"__ignoreMap":10},[92,26600,26601,26603,26605,26607],{"class":94,"line":95},[92,26602,24558],{"class":1942},[92,26604,26495],{"class":207},[92,26606,4163],{"class":207},[92,26608,26474],{"class":207},[21978,26610,26612,26455],{"id":26611},"_227重启电脑后检查-docker-服务状态",[252,26613,26614],{},"2.2.7.重启电脑后检查 Docker 服务状态",[38,26616,26617],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[83,26619,26621],{"className":23803,"code":26620,"language":23805,"meta":10,"style":10},"sudo reboot\nsystemctl status docker\n",[89,26622,26623,26630],{"__ignoreMap":10},[92,26624,26625,26627],{"class":94,"line":95},[92,26626,24558],{"class":1942},[92,26628,26629],{"class":207}," reboot\n",[92,26631,26632,26634,26636],{"class":94,"line":11},[92,26633,26468],{"class":1942},[92,26635,26471],{"class":207},[92,26637,26474],{"class":207},[38,26639,26640],{},[1441,26641],{"alt":10,"src":26642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[38,26644,26645],{},"第三行显示enabled说明开机自启动成功",[38,26647,26648],{},"按q退出",[63,26650,26652],{"id":26651},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[38,26654,26655],{},"优先使用linux来使用docker是比较好的",[38,26657,26658],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[38,26660,26661],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[38,26663,26664,26665],{},"官方下载安装:",[341,26666,26667],{"href":26667,"rel":26668},"https:\u002F\u002Fwww.docker.com\u002F",[23846],[38,26670,26671],{},"Windows的Docker显卡直通与USB直通:",[38,26673,26674],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[38,26676,26677],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[38,26679,26680],{},[1441,26681],{"alt":10,"src":26682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[38,26684,26685],{},[1441,26686],{"alt":10,"src":26687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[38,26689,26690],{},[1441,26691],{"alt":10,"src":26692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5106,26694,26695],{},"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":26697},[26698,26699,26700],{"id":25975,"depth":1158,"text":25976},{"id":26447,"depth":1158,"text":26448},{"id":26651,"depth":1158,"text":26652},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25967,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26707,"title":26708,"body":26709,"description":26716,"extension":14,"meta":27409,"navigation":17,"path":27410,"seo":27411,"stem":27412,"__hash__":27413},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26710,"toc":27403},[26711,26714,26717,26721,26726,26731,26734,26762,26767,26776,26779,26784,26788,26795,26800,26806,26810,26813,26817,26822,26914,26919,26937,26942,26963,26968,26984,26988,26993,27022,27027,27073,27078,27122,27130,27147,27152,27168,27173,27187,27190,27193,27196,27199,27228,27231,27236,27240,27243,27246,27252,27255,27258,27261,27323,27330,27335,27338,27356,27360,27363,27380,27383,27386,27400],[29,26712,26708],{"id":26713},"_3docker直通",[38,26715,26716],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[63,26718,26720],{"id":26719},"_31usb直通","3.1.USB直通",[38,26722,26723],{},[1441,26724],{"alt":10,"src":26725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[46,26727,26728],{},[49,26729,26730],{},"方法一(不是很推荐新手)：",[38,26732,26733],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[83,26735,26737],{"className":23803,"code":26736,"language":23805,"meta":10,"style":10},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[89,26738,26739,26747,26752],{"__ignoreMap":10},[92,26740,26741,26744],{"class":94,"line":95},[92,26742,26743],{"class":1942},"ls",[92,26745,26746],{"class":207}," \u002Fdev\n",[92,26748,26749],{"class":94,"line":11},[92,26750,26751],{"class":161},"#例如\n",[92,26753,26754,26757,26759],{"class":94,"line":1158},[92,26755,26756],{"class":102},"--device",[92,26758,148],{"class":98},[92,26760,26761],{"class":207},"\u002Fdev\u002Ftty_USB0\n",[46,26763,26764],{"start":11},[49,26765,26766],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[83,26768,26770],{"className":23803,"code":26769,"language":23805,"meta":10,"style":10},"--privileged\n",[89,26771,26772],{"__ignoreMap":10},[92,26773,26774],{"class":94,"line":95},[92,26775,26769],{"class":1942},[38,26777,26778],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[38,26780,26781],{},[1441,26782],{"alt":10,"src":26783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[63,26785,26787],{"id":26786},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[38,26789,26790,26791,26794],{},"NVIDIA Container Toolkit使用户 ",[252,26792,26793],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[38,26796,26797],{},[1441,26798],{"alt":10,"src":26799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[38,26801,26802],{},[341,26803,26804],{"href":26804,"rel":26805},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23846],[21978,26807,26809],{"id":26808},"_321安装","3.2.1.安装",[38,26811,26812],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22890,26814,26816],{"id":26815},"_3211ubuntu","3.2.1.1.Ubuntu",[46,26818,26819],{},[49,26820,26821],{},"配置存储库 并更新",[83,26823,26825],{"className":23803,"code":26824,"language":23805,"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,26826,26827,26856,26876,26888,26900,26906],{"__ignoreMap":10},[92,26828,26829,26832,26835,26838,26840,26842,26845,26848,26851,26854],{"class":94,"line":95},[92,26830,26831],{"class":1942},"curl",[92,26833,26834],{"class":151}," -fsSL",[92,26836,26837],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[92,26839,25091],{"class":98},[92,26841,26055],{"class":1942},[92,26843,26844],{"class":207}," gpg",[92,26846,26847],{"class":151}," --dearmor",[92,26849,26850],{"class":151}," -o",[92,26852,26853],{"class":207}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[92,26855,24660],{"class":151},[92,26857,26858,26861,26863,26866,26869,26872,26874],{"class":94,"line":11},[92,26859,26860],{"class":102},"  && ",[92,26862,26831],{"class":1942},[92,26864,26865],{"class":151}," -s",[92,26867,26868],{"class":151}," -L",[92,26870,26871],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[92,26873,25091],{"class":98},[92,26875,24660],{"class":151},[92,26877,26878,26881,26884,26886],{"class":94,"line":1158},[92,26879,26880],{"class":1942},"    sed",[92,26882,26883],{"class":207}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[92,26885,25091],{"class":98},[92,26887,24660],{"class":151},[92,26889,26890,26893,26895,26898],{"class":94,"line":1173},[92,26891,26892],{"class":1942},"    sudo",[92,26894,26198],{"class":207},[92,26896,26897],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[92,26899,24660],{"class":151},[92,26901,26902,26904],{"class":94,"line":1179},[92,26903,26860],{"class":102},[92,26905,26157],{"class":151},[92,26907,26908,26910,26912],{"class":94,"line":1193},[92,26909,26892],{"class":1942},[92,26911,26058],{"class":207},[92,26913,26224],{"class":207},[46,26915,26916],{"start":11},[49,26917,26918],{},"安装nvidia-docker2",[83,26920,26922],{"className":23803,"code":26921,"language":23805,"meta":10,"style":10},"sudo apt-get install -y nvidia-docker2\n",[89,26923,26924],{"__ignoreMap":10},[92,26925,26926,26928,26930,26932,26934],{"class":94,"line":95},[92,26927,24558],{"class":1942},[92,26929,26058],{"class":207},[92,26931,23815],{"class":207},[92,26933,26382],{"class":151},[92,26935,26936],{"class":207}," nvidia-docker2\n",[46,26938,26939],{"start":1158},[49,26940,26941],{},"使用nvidia-ctk命令配置container runtime",[83,26943,26945],{"className":23803,"code":26944,"language":23805,"meta":10,"style":10},"sudo nvidia-ctk runtime configure --runtime=docker\n",[89,26946,26947],{"__ignoreMap":10},[92,26948,26949,26951,26954,26957,26960],{"class":94,"line":95},[92,26950,24558],{"class":1942},[92,26952,26953],{"class":207}," nvidia-ctk",[92,26955,26956],{"class":207}," runtime",[92,26958,26959],{"class":207}," configure",[92,26961,26962],{"class":151}," --runtime=docker\n",[46,26964,26965],{"start":1173},[49,26966,26967],{},"重启docker服务:",[83,26969,26971],{"className":23803,"code":26970,"language":23805,"meta":10,"style":10},"sudo systemctl restart docker\n",[89,26972,26973],{"__ignoreMap":10},[92,26974,26975,26977,26979,26982],{"class":94,"line":95},[92,26976,24558],{"class":1942},[92,26978,26495],{"class":207},[92,26980,26981],{"class":207}," restart",[92,26983,26474],{"class":207},[22890,26985,26987],{"id":26986},"_3212fedora","3.2.1.2.Fedora",[46,26989,26990],{},[49,26991,26992],{},"配置存储库",[83,26994,26996],{"className":23803,"code":26995,"language":23805,"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,26997,26998,27013],{"__ignoreMap":10},[92,26999,27000,27002,27004,27006,27009,27011],{"class":94,"line":95},[92,27001,26831],{"class":1942},[92,27003,26865],{"class":151},[92,27005,26868],{"class":151},[92,27007,27008],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[92,27010,25091],{"class":98},[92,27012,24660],{"class":151},[92,27014,27015,27017,27019],{"class":94,"line":11},[92,27016,24558],{"class":1942},[92,27018,26198],{"class":207},[92,27020,27021],{"class":207}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[46,27023,27024],{"start":11},[49,27025,27026],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[83,27028,27030],{"className":23803,"code":27029,"language":23805,"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,27031,27032,27037,27051,27055,27060],{"__ignoreMap":10},[92,27033,27034],{"class":94,"line":95},[92,27035,27036],{"class":161},"# 如果是RHEL或者Rocky（DNF4）\n",[92,27038,27039,27041,27043,27045,27048],{"class":94,"line":11},[92,27040,24558],{"class":1942},[92,27042,26297],{"class":207},[92,27044,26396],{"class":207},[92,27046,27047],{"class":151}," --add-repo",[92,27049,27050],{"class":207}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[92,27052,27053],{"class":94,"line":1158},[92,27054,2379],{"emptyLinePlaceholder":17},[92,27056,27057],{"class":94,"line":1173},[92,27058,27059],{"class":161},"# 如果是Feodra41+（DNF5）\n",[92,27061,27062,27064,27066,27068,27070],{"class":94,"line":1179},[92,27063,24558],{"class":1942},[92,27065,26297],{"class":207},[92,27067,26396],{"class":207},[92,27069,26399],{"class":207},[92,27071,27072],{"class":151}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[46,27074,27075],{"start":1158},[49,27076,27077],{},"安装NVIDIA Container Toolki包",[83,27079,27081],{"className":23803,"code":27080,"language":23805,"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,27082,27083,27088,27101,27105,27110],{"__ignoreMap":10},[92,27084,27085],{"class":94,"line":95},[92,27086,27087],{"class":161},"# 如果是RHEL或者Rocky\n",[92,27089,27090,27092,27094,27096,27098],{"class":94,"line":11},[92,27091,24558],{"class":1942},[92,27093,26297],{"class":207},[92,27095,23815],{"class":207},[92,27097,26382],{"class":151},[92,27099,27100],{"class":207}," nvidia-container-toolkit\n",[92,27102,27103],{"class":94,"line":1158},[92,27104,2379],{"emptyLinePlaceholder":17},[92,27106,27107],{"class":94,"line":1173},[92,27108,27109],{"class":161},"# 如果是Fedora\n",[92,27111,27112,27114,27116,27118,27120],{"class":94,"line":1179},[92,27113,24558],{"class":1942},[92,27115,26297],{"class":207},[92,27117,23815],{"class":207},[92,27119,26382],{"class":151},[92,27121,27100],{"class":207},[46,27123,27124],{"start":1173},[49,27125,27126,27127,27129],{},"安装nvidia-docker2 ： 在Fedora上使用",[89,27128,26272],{},"进行安装",[83,27131,27133],{"className":23803,"code":27132,"language":23805,"meta":10,"style":10},"sudo dnf install -y nvidia-docker2\n",[89,27134,27135],{"__ignoreMap":10},[92,27136,27137,27139,27141,27143,27145],{"class":94,"line":95},[92,27138,24558],{"class":1942},[92,27140,26297],{"class":207},[92,27142,23815],{"class":207},[92,27144,26382],{"class":151},[92,27146,26936],{"class":207},[46,27148,27149],{"start":1179},[49,27150,27151],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[83,27153,27154],{"className":23803,"code":26944,"language":23805,"meta":10,"style":10},[89,27155,27156],{"__ignoreMap":10},[92,27157,27158,27160,27162,27164,27166],{"class":94,"line":95},[92,27159,24558],{"class":1942},[92,27161,26953],{"class":207},[92,27163,26956],{"class":207},[92,27165,26959],{"class":207},[92,27167,26962],{"class":151},[46,27169,27170],{"start":1193},[49,27171,27172],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[83,27174,27175],{"className":23803,"code":26970,"language":23805,"meta":10,"style":10},[89,27176,27177],{"__ignoreMap":10},[92,27178,27179,27181,27183,27185],{"class":94,"line":95},[92,27180,24558],{"class":1942},[92,27182,26495],{"class":207},[92,27184,26981],{"class":207},[92,27186,26474],{"class":207},[38,27188,27189],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[38,27191,27192],{},"方法：",[38,27194,27195],{},"1️⃣nvidia-smi",[38,27197,27198],{},"2️⃣运行nvidia cuda 容器进行测试",[83,27200,27202],{"className":23803,"code":27201,"language":23805,"meta":10,"style":10},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[89,27203,27204],{"__ignoreMap":10},[92,27205,27206,27208,27210,27213,27216,27219,27222,27225],{"class":94,"line":95},[92,27207,24558],{"class":1942},[92,27209,26302],{"class":207},[92,27211,27212],{"class":207}," run",[92,27214,27215],{"class":151}," --rm",[92,27217,27218],{"class":151}," --gpus",[92,27220,27221],{"class":207}," all",[92,27223,27224],{"class":207}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[92,27226,27227],{"class":207}," nvidia-smi\n",[38,27229,27230],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[38,27232,27233],{},[1441,27234],{"alt":10,"src":27235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[63,27237,27239],{"id":27238},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[38,27241,27242],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[38,27244,27245],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[38,27247,27248],{},[341,27249,27250],{"href":27250,"rel":27251},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23846],[38,27253,27254],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[38,27256,27257],{},"我们只需要找到对应的Docker镜像当底包即可。",[38,27259,27260],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[240,27262,27263,27279],{},[243,27264,27265],{},[246,27266,27267,27270,27273,27276],{},[249,27268,27269],{"align":23717},"镜像类型",[249,27271,27272],{"align":23717},"适用场景",[249,27274,27275],{"align":23717},"示例标签",[249,27277,27278],{"align":23717},"大小",[287,27280,27281,27295,27309],{},[246,27282,27283,27286,27289,27292],{},[292,27284,27285],{"align":23717},"base",[292,27287,27288],{"align":23717},"仅需 CUDA 运行时库",[292,27290,27291],{"align":23717},"12.4.0-base-ubuntu22.04",[292,27293,27294],{"align":23717},"~240MB",[246,27296,27297,27300,27303,27306],{},[292,27298,27299],{"align":23717},"runtime",[292,27301,27302],{"align":23717},"部署编译后的应用（含数学库）",[292,27304,27305],{"align":23717},"12.4.0-runtime-ubuntu22.04",[292,27307,27308],{"align":23717},"~2GB",[246,27310,27311,27314,27317,27320],{},[292,27312,27313],{"align":23717},"devel",[292,27315,27316],{"align":23717},"开发环境（含编译工具）",[292,27318,27319],{"align":23717},"12.4.0-devel-ubuntu22.04",[292,27321,27322],{"align":23717},"~3GB",[38,27324,27325,27326,27329],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[89,27327,27328],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[38,27331,27332],{},[1441,27333],{"alt":10,"src":27334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[38,27336,27337],{},"在dockerfile里就可以开头这么写：",[83,27339,27341],{"className":23803,"code":27340,"language":23805,"meta":10,"style":10},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[89,27342,27343,27348],{"__ignoreMap":10},[92,27344,27345],{"class":94,"line":95},[92,27346,27347],{"class":161},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[92,27349,27350,27353],{"class":94,"line":11},[92,27351,27352],{"class":1942},"FROM",[92,27354,27355],{"class":207}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[63,27357,27359],{"id":27358},"_34配置以太网","3.4.配置以太网",[38,27361,27362],{},"指定网络模式",[83,27364,27366],{"className":23803,"code":27365,"language":23805,"meta":10,"style":10},"--net=host \\\n",[89,27367,27368],{"__ignoreMap":10},[92,27369,27370,27373,27375,27378],{"class":94,"line":95},[92,27371,27372],{"class":102},"--net",[92,27374,148],{"class":98},[92,27376,27377],{"class":207},"host",[92,27379,24660],{"class":1942},[38,27381,27382],{},"启动参数里加上这行即可。具体在下方",[38,27384,27385],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1110,27387,27388,27391,27394,27397],{},[49,27389,27390],{},"--net=bridge:默认选项，表示连接到默认的网桥",[49,27392,27393],{},"--net=host:容器使用宿主机的网络",[49,27395,27396],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[49,27398,27399],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5106,27401,27402],{},"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":27404},[27405,27406,27407,27408],{"id":26719,"depth":1158,"text":26720},{"id":26786,"depth":1158,"text":26787},{"id":27238,"depth":1158,"text":27239},{"id":27358,"depth":1158,"text":27359},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26708,"description":26716},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27415,"title":27416,"body":27417,"description":27424,"extension":14,"meta":27430,"navigation":17,"path":27431,"seo":27432,"stem":27433,"__hash__":27434},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27418,"toc":27428},[27419,27422,27425],[29,27420,27416],{"id":27421},"_4dockerhub换源",[38,27423,27424],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[38,27426,27427],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":10,"searchDepth":11,"depth":11,"links":27429},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27416,"description":27424},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27436,"title":27437,"body":27438,"description":10,"extension":14,"meta":28450,"navigation":17,"path":28451,"seo":28452,"stem":28453,"__hash__":28454},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27439,"toc":28445},[27440,27443,27447,27453,27457,27460,27800,27803,27806,27809,27814,27819,27822,27825,27828,27831,27850,27853,27864,27870,28052,28062,28078,28341,28343,28368,28383,28392,28442],[29,27441,27437],{"id":27442},"_5docker命令学习",[63,27444,27446],{"id":27445},"_51参考文档","5.1.参考文档",[38,27448,27449],{},[341,27450,27451],{"href":27451,"rel":27452},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23846],[63,27454,27456],{"id":27455},"_52常用命令","5.2.常用命令",[38,27458,27459],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[240,27461,27462,27475],{},[243,27463,27464],{},[246,27465,27466,27469,27472],{},[249,27467,27468],{"align":23717},"命令",[249,27470,27471],{"align":23717},"描述",[249,27473,27474],{"align":23717},"示例",[287,27476,27477,27488,27499,27510,27521,27532,27543,27554,27564,27575,27586,27597,27607,27618,27629,27640,27650,27660,27670,27680,27691,27702,27713,27724,27735,27746,27756,27767,27778,27789],{},[246,27478,27479,27482,27485],{},[292,27480,27481],{"align":23717},"docker run",[292,27483,27484],{"align":23717},"创建并启动一个新的容器。",[292,27486,27487],{"align":23717},"docker run -it ubuntu bash",[246,27489,27490,27493,27496],{},[292,27491,27492],{"align":23717},"docker build",[292,27494,27495],{"align":23717},"通过指定的 Dockerfile 创建一个新的镜像。",[292,27497,27498],{"align":23717},"docker build -t myimage .",[246,27500,27501,27504,27507],{},[292,27502,27503],{"align":23717},"docker pull",[292,27505,27506],{"align":23717},"从 Docker 仓库拉取镜像。",[292,27508,27509],{"align":23717},"docker pull ubuntu",[246,27511,27512,27515,27518],{},[292,27513,27514],{"align":23717},"docker push",[292,27516,27517],{"align":23717},"将本地镜像推送到 Docker 仓库。",[292,27519,27520],{"align":23717},"docker push myimage",[246,27522,27523,27526,27529],{},[292,27524,27525],{"align":23717},"docker stop",[292,27527,27528],{"align":23717},"停止一个正在运行的容器。",[292,27530,27531],{"align":23717},"docker stop container_id",[246,27533,27534,27537,27540],{},[292,27535,27536],{"align":23717},"docker start",[292,27538,27539],{"align":23717},"启动一个已经存在的容器。",[292,27541,27542],{"align":23717},"docker start container_id",[246,27544,27545,27548,27551],{},[292,27546,27547],{"align":23717},"docker restart",[292,27549,27550],{"align":23717},"重新启动容器。",[292,27552,27553],{"align":23717},"docker restart container_id",[246,27555,27556,27559,27562],{},[292,27557,27558],{"align":23717},"docker ps",[292,27560,27561],{"align":23717},"列出当前正在运行的容器。",[292,27563,27558],{"align":23717},[246,27565,27566,27569,27572],{},[292,27567,27568],{"align":23717},"docker rm",[292,27570,27571],{"align":23717},"删除一个或多个停止的容器。",[292,27573,27574],{"align":23717},"docker rm container_id",[246,27576,27577,27580,27583],{},[292,27578,27579],{"align":23717},"docker exec",[292,27581,27582],{"align":23717},"在一个正在运行的容器中执行命令。",[292,27584,27585],{"align":23717},"docker exec -it container_id bash",[246,27587,27588,27591,27594],{},[292,27589,27590],{"align":23717},"docker logs",[292,27592,27593],{"align":23717},"查看容器的日志输出。",[292,27595,27596],{"align":23717},"docker logs container_id",[246,27598,27599,27602,27605],{},[292,27600,27601],{"align":23717},"docker images",[292,27603,27604],{"align":23717},"列出本地所有镜像。",[292,27606,27601],{"align":23717},[246,27608,27609,27612,27615],{},[292,27610,27611],{"align":23717},"docker rmi",[292,27613,27614],{"align":23717},"删除一个或多个镜像。",[292,27616,27617],{"align":23717},"docker rmi myimage",[246,27619,27620,27623,27626],{},[292,27621,27622],{"align":23717},"docker network",[292,27624,27625],{"align":23717},"管理 Docker 网络。",[292,27627,27628],{"align":23717},"docker network ls",[246,27630,27631,27634,27637],{},[292,27632,27633],{"align":23717},"docker volume",[292,27635,27636],{"align":23717},"管理 Docker 数据卷。",[292,27638,27639],{"align":23717},"docker volume ls",[246,27641,27642,27645,27648],{},[292,27643,27644],{"align":23717},"docker-compose up",[292,27646,27647],{"align":23717},"启动 docker-compose.yml 中定义的所有服务。",[292,27649,27644],{"align":23717},[246,27651,27652,27655,27658],{},[292,27653,27654],{"align":23717},"docker-compose down",[292,27656,27657],{"align":23717},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[292,27659,27654],{"align":23717},[246,27661,27662,27665,27668],{},[292,27663,27664],{"align":23717},"docker info",[292,27666,27667],{"align":23717},"显示 Docker 系统的详细信息。",[292,27669,27664],{"align":23717},[246,27671,27672,27675,27678],{},[292,27673,27674],{"align":23717},"docker stats",[292,27676,27677],{"align":23717},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[292,27679,27674],{"align":23717},[246,27681,27682,27685,27688],{},[292,27683,27684],{"align":23717},"docker inspect",[292,27686,27687],{"align":23717},"查看容器或镜像的详细信息（JSON 格式）。",[292,27689,27690],{"align":23717},"docker inspect container_id",[246,27692,27693,27696,27699],{},[292,27694,27695],{"align":23717},"docker save",[292,27697,27698],{"align":23717},"将一个镜像保存为 tar 文件。",[292,27700,27701],{"align":23717},"docker save -o myimage.tar myimage",[246,27703,27704,27707,27710],{},[292,27705,27706],{"align":23717},"docker load",[292,27708,27709],{"align":23717},"从 tar 文件中加载镜像。",[292,27711,27712],{"align":23717},"docker load -i myimage.tar",[246,27714,27715,27718,27721],{},[292,27716,27717],{"align":23717},"docker tag",[292,27719,27720],{"align":23717},"为镜像添加标签（tag）。",[292,27722,27723],{"align":23717},"docker tag myimage myimage:v1",[246,27725,27726,27729,27732],{},[292,27727,27728],{"align":23717},"docker buildx build",[292,27730,27731],{"align":23717},"使用 Buildx 构建多架构镜像。",[292,27733,27734],{"align":23717},"docker buildx build -t myimage .",[246,27736,27737,27740,27743],{},[292,27738,27739],{"align":23717},"docker buildx create",[292,27741,27742],{"align":23717},"创建一个新的 Buildx 构建实例。",[292,27744,27745],{"align":23717},"docker buildx create –use",[246,27747,27748,27751,27754],{},[292,27749,27750],{"align":23717},"docker buildx ls",[292,27752,27753],{"align":23717},"列出所有可用的 Buildx 构建实例。",[292,27755,27750],{"align":23717},[246,27757,27758,27761,27764],{},[292,27759,27760],{"align":23717},"docker buildx use",[292,27762,27763],{"align":23717},"设置当前的 Buildx 构建实例。",[292,27765,27766],{"align":23717},"docker buildx use mybuilder",[246,27768,27769,27772,27775],{},[292,27770,27771],{"align":23717},"docker buildx bake",[292,27773,27774],{"align":23717},"使用 Bake 文件批量构建镜像。",[292,27776,27777],{"align":23717},"docker buildx bake -f bake.hcl",[246,27779,27780,27783,27786],{},[292,27781,27782],{"align":23717},"docker buildx build –push",[292,27784,27785],{"align":23717},"构建镜像并推送到镜像仓库。",[292,27787,27788],{"align":23717},"docker buildx build –push -t myimage .",[246,27790,27791,27794,27797],{},[292,27792,27793],{"align":23717},"docker buildx build –platform",[292,27795,27796],{"align":23717},"构建镜像并为多个平台生成支持。",[292,27798,27799],{"align":23717},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[38,27801,27802],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[38,27804,27805],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[38,27807,27808],{},"docker images 可以查看已经下载的镜像",[38,27810,27811],{},[1441,27812],{"alt":10,"src":27813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[38,27815,27816],{},[252,27817,27818],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[38,27820,27821],{},"docker rmi $(docker images -q) 删除所有的镜像",[38,27823,27824],{},"docker container logs 查看容器日志",[38,27826,27827],{},"docker top 查看容器里的进程",[38,27829,27830],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[83,27832,27834],{"className":23803,"code":27833,"language":23805,"meta":10,"style":10},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[89,27835,27836],{"__ignoreMap":10},[92,27837,27838,27841,27844,27847],{"class":94,"line":95},[92,27839,27840],{"class":1942},"如：docker",[92,27842,27843],{"class":207}," cp",[92,27845,27846],{"class":207}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[92,27848,27849],{"class":207}," \u002Fmydata\u002Fnginx\n",[38,27851,27852],{},"docker run时在启动容器的时候会有几个常用的选项：",[1110,27854,27855,27858,27861],{},[49,27856,27857],{},"-d选项：表示后台运行",[49,27859,27860],{},"-P选项：随机端口映射",[49,27862,27863],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[63,27865,27867],{"id":27866},"_53run命令的参数非常重要",[252,27868,27869],{},"5.3.run命令的参数（非常重要）",[240,27871,27872,27885],{},[243,27873,27874],{},[246,27875,27876,27879,27882],{},[249,27877,27878],{"align":23717},"参数\u002F配置",[249,27880,27881],{"align":23717},"功能说明",[249,27883,27884],{"align":23717},"重要性与参考依据",[287,27886,27887,27898,27909,27920,27931,27942,27953,27964,27975,27986,27997,28008,28019,28030,28041],{},[246,27888,27889,27892,27895],{},[292,27890,27891],{"align":23717},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[292,27893,27894],{"align":23717},"指定容器名称，便于后续管理",[292,27896,27897],{"align":23717},"替代随机生成的容器名。",[246,27899,27900,27903,27906],{},[292,27901,27902],{"align":23717},"–gpus all",[292,27904,27905],{"align":23717},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[292,27907,27908],{"align":23717},"用于CUDA加速等GPU依赖任务。",[246,27910,27911,27914,27917],{},[292,27912,27913],{"align":23717},"-e NVIDIA_DRIVER_CAPABILITIES=all",[292,27915,27916],{"align":23717},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[292,27918,27919],{"align":23717},"确保容器内GPU功能完整67。",[246,27921,27922,27925,27928],{},[292,27923,27924],{"align":23717},"-dit",[292,27926,27927],{"align":23717},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[292,27929,27930],{"align":23717},"允许容器在后台运行并支持交互操作。",[246,27932,27933,27936,27939],{},[292,27934,27935],{"align":23717},"–privileged",[292,27937,27938],{"align":23717},"赋予容器完全主机权限（可访问设备、内核模块等）",[292,27940,27941],{"align":23717},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[246,27943,27944,27947,27950],{},[292,27945,27946],{"align":23717},"–net=host",[292,27948,27949],{"align":23717},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[292,27951,27952],{"align":23717},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[246,27954,27955,27958,27961],{},[292,27956,27957],{"align":23717},"–group-add audio–group-add video–group-add dialout",[292,27959,27960],{"align":23717},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[292,27962,27963],{"align":23717},"避免权限问题（如避免无法调用摄像头、麦克风）。",[246,27965,27966,27969,27972],{},[292,27967,27968],{"align":23717},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[292,27970,27971],{"align":23717},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[292,27973,27974],{"align":23717},"支持容器内运行图形界面应用（如OpenCV可视化）。",[246,27976,27977,27980,27983],{},[292,27978,27979],{"align":23717},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[292,27981,27982],{"align":23717},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[292,27984,27985],{"align":23717},"实现容器内图形显示。",[246,27987,27988,27991,27994],{},[292,27989,27990],{"align":23717},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[292,27992,27993],{"align":23717},"挂载X11认证文件（只读）",[292,27995,27996],{"align":23717},"确保容器有权连接宿主机显示服务。",[246,27998,27999,28002,28005],{},[292,28000,28001],{"align":23717},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[292,28003,28004],{"align":23717},"挂载Wayland显示协议相关目录",[292,28006,28007],{"align":23717},"支持Wayland协议的图形显示。",[246,28009,28010,28013,28016],{},[292,28011,28012],{"align":23717},"–ulimit nofile=1024:524288",[292,28014,28015],{"align":23717},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[292,28017,28018],{"align":23717},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[246,28020,28021,28024,28027],{},[292,28022,28023],{"align":23717},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[292,28025,28026],{"align":23717},"挂载宿主机用户目录到容器内同名路径",[292,28028,28029],{"align":23717},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[246,28031,28032,28035,28038],{},[292,28033,28034],{"align":23717},"-w \u002Fhome\u002Ftungchiahui",[292,28036,28037],{"align":23717},"设置容器启动后的默认工作目录",[292,28039,28040],{"align":23717},"直接进入项目路径，方便执行命令2324。",[246,28042,28043,28046,28049],{},[292,28044,28045],{"align":23717},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[292,28047,28048],{"align":23717},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[292,28050,28051],{"align":23717},"提供预配置的深度学习与机器人开发环境。",[38,28053,28054,28055,28057,28058,28061],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[89,28056,24558],{},"加不加",[89,28059,28060],{},"sudo -E","都无所谓。",[38,28063,28064,28065,28067,28068,28070,28071,28074,28075,28077],{},"用户已经被加到docker组了，不用",[89,28066,24558],{},"也行跑，其次，",[89,28069,24558],{},"运行的话，你的",[89,28072,28073],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[89,28076,28073],{},"更不可能变了。",[83,28079,28081],{"className":23803,"code":28080,"language":23805,"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,28082,28083,28096,28106,28116,28128,28135,28142,28149,28159,28168,28177,28191,28203,28215,28224,28234,28243,28258,28291,28318,28329,28336],{"__ignoreMap":10},[92,28084,28085,28087,28089,28091,28094],{"class":94,"line":95},[92,28086,24558],{"class":1942},[92,28088,26302],{"class":207},[92,28090,27212],{"class":207},[92,28092,28093],{"class":151}," --name=ros_opencv_cuda",[92,28095,24660],{"class":151},[92,28097,28098,28101,28104],{"class":94,"line":11},[92,28099,28100],{"class":102},"--gpus ",[92,28102,28103],{"class":207},"all",[92,28105,24660],{"class":151},[92,28107,28108,28111,28114],{"class":94,"line":1158},[92,28109,28110],{"class":102},"-e ",[92,28112,28113],{"class":207},"NVIDIA_DRIVER_CAPABILITIES=all",[92,28115,24660],{"class":151},[92,28117,28118,28120,28123,28126],{"class":94,"line":1173},[92,28119,28110],{"class":102},[92,28121,28122],{"class":207},"DISPLAY=",[92,28124,28125],{"class":102},"$DISPLAY ",[92,28127,26157],{"class":151},[92,28129,28130,28133],{"class":94,"line":1179},[92,28131,28132],{"class":102},"-dit ",[92,28134,26157],{"class":151},[92,28136,28137,28140],{"class":94,"line":1193},[92,28138,28139],{"class":102},"--privileged ",[92,28141,26157],{"class":151},[92,28143,28144,28147],{"class":94,"line":1199},[92,28145,28146],{"class":102},"--net=host ",[92,28148,26157],{"class":151},[92,28150,28151,28154,28157],{"class":94,"line":1290},[92,28152,28153],{"class":102},"--group-add ",[92,28155,28156],{"class":207},"audio",[92,28158,24660],{"class":151},[92,28160,28161,28163,28166],{"class":94,"line":1296},[92,28162,28153],{"class":102},[92,28164,28165],{"class":207},"video",[92,28167,24660],{"class":151},[92,28169,28170,28172,28175],{"class":94,"line":1308},[92,28171,28153],{"class":102},[92,28173,28174],{"class":207},"dialout",[92,28176,24660],{"class":151},[92,28178,28179,28181,28184,28186,28189],{"class":94,"line":1591},[92,28180,28110],{"class":102},[92,28182,28183],{"class":207},"XAUTHORITY=",[92,28185,28073],{"class":102},[92,28187,28188],{"class":207},"\u002F.Xauthority",[92,28190,24660],{"class":151},[92,28192,28193,28195,28198,28201],{"class":94,"line":1596},[92,28194,28110],{"class":102},[92,28196,28197],{"class":207},"WAYLAND_DISPLAY=",[92,28199,28200],{"class":102},"$WAYLAND_DISPLAY ",[92,28202,26157],{"class":151},[92,28204,28205,28207,28210,28213],{"class":94,"line":1602},[92,28206,28110],{"class":102},[92,28208,28209],{"class":207},"XDG_RUNTIME_DIR=",[92,28211,28212],{"class":102},"$XDG_RUNTIME_DIR ",[92,28214,26157],{"class":151},[92,28216,28217,28219,28222],{"class":94,"line":1607},[92,28218,28110],{"class":102},[92,28220,28221],{"class":207},"QT_QPA_PLATFORM=xcb",[92,28223,24660],{"class":151},[92,28225,28226,28229,28232],{"class":94,"line":1621},[92,28227,28228],{"class":102},"-v ",[92,28230,28231],{"class":207},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[92,28233,24660],{"class":151},[92,28235,28236,28238,28241],{"class":94,"line":1626},[92,28237,28228],{"class":102},[92,28239,28240],{"class":207},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[92,28242,24660],{"class":151},[92,28244,28245,28248,28251,28253,28256],{"class":94,"line":1632},[92,28246,28247],{"class":102},"-v $HOME",[92,28249,28250],{"class":207},"\u002F.Xauthority:",[92,28252,28073],{"class":102},[92,28254,28255],{"class":207},"\u002F.Xauthority:ro",[92,28257,24660],{"class":151},[92,28259,28260,28262,28265,28267,28270,28273,28275,28278,28280,28282,28284,28286,28289],{"class":94,"line":1653},[92,28261,28228],{"class":102},[92,28263,28264],{"class":207},"\u002Frun\u002Fuser\u002F",[92,28266,25081],{"class":102},[92,28268,28269],{"class":1942},"id",[92,28271,28272],{"class":151}," -u",[92,28274,532],{"class":102},[92,28276,28277],{"class":207},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[92,28279,25081],{"class":102},[92,28281,28269],{"class":1942},[92,28283,28272],{"class":151},[92,28285,532],{"class":102},[92,28287,28288],{"class":207},"\u002Fwayland-0",[92,28290,24660],{"class":151},[92,28292,28293,28295,28297,28299,28301,28303,28305,28308,28310,28312,28314,28316],{"class":94,"line":1658},[92,28294,28228],{"class":102},[92,28296,28264],{"class":207},[92,28298,25081],{"class":102},[92,28300,28269],{"class":1942},[92,28302,28272],{"class":151},[92,28304,532],{"class":102},[92,28306,28307],{"class":207},":\u002Frun\u002Fuser\u002F",[92,28309,25081],{"class":102},[92,28311,28269],{"class":1942},[92,28313,28272],{"class":151},[92,28315,13694],{"class":102},[92,28317,26157],{"class":151},[92,28319,28320,28322,28324,28327],{"class":94,"line":1672},[92,28321,28247],{"class":102},[92,28323,962],{"class":207},[92,28325,28326],{"class":102},"$HOME ",[92,28328,26157],{"class":151},[92,28330,28331,28334],{"class":94,"line":1677},[92,28332,28333],{"class":102},"-w $HOME ",[92,28335,26157],{"class":151},[92,28337,28338],{"class":94,"line":1706},[92,28339,28340],{"class":102},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[38,28342,9005],{},[46,28344,28345,28353,28356,28359],{},[49,28346,28347,13775,28349,28352],{},[89,28348,28113],{},[89,28350,28351],{},"--gpus all","没有英伟达显卡请注释。",[49,28354,28355],{},"--name后面请自己为容器起名。",[49,28357,28358],{},"最后一行仓库名称请你自己找对应的镜像填上。",[49,28360,28361,28362,28367],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23534,28363,28364],{},[252,28365,28366],{},"请不要加","。",[83,28369,28371],{"className":23803,"code":28370,"language":23805,"meta":10,"style":10},"--ulimit nofile=1024:524288 \\\n",[89,28372,28373],{"__ignoreMap":10},[92,28374,28375,28378,28381],{"class":94,"line":95},[92,28376,28377],{"class":1942},"--ulimit",[92,28379,28380],{"class":207}," nofile=1024:524288",[92,28382,24660],{"class":151},[38,28384,28385,28386,28391],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23534,28387,28388],{},[252,28389,28390],{},"不建议","**.**",[83,28393,28395],{"className":23803,"code":28394,"language":23805,"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,28396,28397,28424,28433],{"__ignoreMap":10},[92,28398,28399,28402,28405,28407,28409,28411,28413,28415,28417,28420,28422],{"class":94,"line":95},[92,28400,28401],{"class":1942},"--user",[92,28403,28404],{"class":102}," $(",[92,28406,28269],{"class":1942},[92,28408,28272],{"class":151},[92,28410,532],{"class":102},[92,28412,962],{"class":207},[92,28414,25081],{"class":102},[92,28416,28269],{"class":1942},[92,28418,28419],{"class":151}," -g",[92,28421,13694],{"class":102},[92,28423,26157],{"class":151},[92,28425,28426,28428,28431],{"class":94,"line":11},[92,28427,28228],{"class":102},[92,28429,28430],{"class":207},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[92,28432,24660],{"class":151},[92,28434,28435,28437,28440],{"class":94,"line":1158},[92,28436,28228],{"class":102},[92,28438,28439],{"class":207},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[92,28441,24660],{"class":151},[5106,28443,28444],{},"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":28446},[28447,28448,28449],{"id":27445,"depth":1158,"text":27446},{"id":27455,"depth":1158,"text":27456},{"id":27866,"depth":1158,"text":27869},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27437,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28456,"title":28457,"body":28458,"description":10,"extension":14,"meta":30081,"navigation":17,"path":30082,"seo":30083,"stem":30084,"__hash__":30085},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28459,"toc":30076},[28460,28463,28467,28470,28692,28696,28700,28703,28809,28814,28817,28822,28825,28830,28833,28838,28841,28853,28856,28861,28868,28896,28903,28979,28984,28987,29010,29012,29087,29092,29095,29099,29107,29112,29117,29121,29132,29138,29141,29144,29168,29171,29174,29202,29205,29208,29673,29676,29681,29686,29690,29713,29718,29722,29726,29729,29732,29735,29762,29765,29768,29786,29789,29792,29814,29822,29827,29832,29836,29839,29842,29845,29848,29893,29896,29914,29917,29922,29925,29946,29949,30005,30008,30013,30017,30020,30027,30030,30033,30038,30041,30057,30060,30073],[29,28461,28457],{"id":28462},"_6手动创建docker镜像",[63,28464,28466],{"id":28465},"_61dockerfile","6.1.DockerFile",[38,28468,28469],{},"常用命令：",[240,28471,28472,28483],{},[243,28473,28474],{},[246,28475,28476,28479,28481],{},[249,28477,28478],{"align":23717},"指令",[249,28480,25851],{"align":23717},[249,28482,27474],{"align":23717},[287,28484,28485,28495,28511,28522,28533,28544,28555,28566,28577,28591,28605,28616,28630,28641,28652,28666,28681],{},[246,28486,28487,28489,28492],{},[292,28488,27352],{"align":23717},[292,28490,28491],{"align":23717},"指定基础镜像，是 Dockerfile 的起点",[292,28493,28494],{"align":23717},"FROM ubuntu:22.04",[246,28496,28497,28500,28503],{},[292,28498,28499],{"align":23717},"LABEL",[292,28501,28502],{"align":23717},"添加元数据（如作者、版本等）",[292,28504,28505,28506,28510],{"align":23717},"LABEL maintainer=”",[341,28507,28509],{"href":28508},"mailto:you@example.com","you@example.com","”",[246,28512,28513,28516,28519],{},[292,28514,28515],{"align":23717},"ENV",[292,28517,28518],{"align":23717},"设置环境变量",[292,28520,28521],{"align":23717},"ENV PORT=8080",[246,28523,28524,28527,28530],{},[292,28525,28526],{"align":23717},"ARG",[292,28528,28529],{"align":23717},"构建参数，只在构建期间可用",[292,28531,28532],{"align":23717},"ARG VERSION=1.0",[246,28534,28535,28538,28541],{},[292,28536,28537],{"align":23717},"RUN",[292,28539,28540],{"align":23717},"构建镜像时运行命令",[292,28542,28543],{"align":23717},"RUN apt-get update && apt-get install -y curl",[246,28545,28546,28549,28552],{},[292,28547,28548],{"align":23717},"COPY",[292,28550,28551],{"align":23717},"复制文件到镜像中",[292,28553,28554],{"align":23717},"COPY . \u002Fapp",[246,28556,28557,28560,28563],{},[292,28558,28559],{"align":23717},"ADD",[292,28561,28562],{"align":23717},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[292,28564,28565],{"align":23717},"ADD archive.tar.gz \u002Fdata\u002F",[246,28567,28568,28571,28574],{},[292,28569,28570],{"align":23717},"WORKDIR",[292,28572,28573],{"align":23717},"设置工作目录",[292,28575,28576],{"align":23717},"WORKDIR \u002Fopt",[246,28578,28579,28582,28585],{},[292,28580,28581],{"align":23717},"CMD",[292,28583,28584],{"align":23717},"设置容器启动时默认命令（可被 docker run 覆盖）",[292,28586,28587,28588],{"align":23717},"CMD ",[92,28589,28590],{},"“node”, “index.js”",[246,28592,28593,28596,28599],{},[292,28594,28595],{"align":23717},"ENTRYPOINT",[292,28597,28598],{"align":23717},"设置容器启动时固定命令（通常用于 CLI 工具等）",[292,28600,28601,28602],{"align":23717},"ENTRYPOINT ",[92,28603,28604],{},"“python3”",[246,28606,28607,28610,28613],{},[292,28608,28609],{"align":23717},"EXPOSE",[292,28611,28612],{"align":23717},"声明镜像内服务监听的端口（不会自动映射）",[292,28614,28615],{"align":23717},"EXPOSE 80",[246,28617,28618,28621,28624],{},[292,28619,28620],{"align":23717},"VOLUME",[292,28622,28623],{"align":23717},"声明数据卷挂载点",[292,28625,28626,28627],{"align":23717},"VOLUME ",[92,28628,28629],{},"“\u002Fdata”",[246,28631,28632,28635,28638],{},[292,28633,28634],{"align":23717},"USER",[292,28636,28637],{"align":23717},"设置后续命令执行的用户",[292,28639,28640],{"align":23717},"USER appuser",[246,28642,28643,28646,28649],{},[292,28644,28645],{"align":23717},"ONBUILD",[292,28647,28648],{"align":23717},"当镜像作为其他镜像基础镜像时触发的构建指令",[292,28650,28651],{"align":23717},"ONBUILD COPY . \u002Fsrc",[246,28653,28654,28657,28660],{},[292,28655,28656],{"align":23717},"SHELL",[292,28658,28659],{"align":23717},"更改默认 shell，比如将 sh -c 改为 bash -c",[292,28661,28662,28663],{"align":23717},"SHELL ",[92,28664,28665],{},"“\u002Fbin\u002Fbash”, “-c”",[246,28667,28668,28671,28674],{},[292,28669,28670],{"align":23717},"HEALTHCHECK",[292,28672,28673],{"align":23717},"定义容器运行时的健康检查命令",[292,28675,28676,28677],{"align":23717},"`HEALTHCHECK CMD curl –fail ",[341,28678,28679],{"href":28679,"rel":28680},"http:\u002F\u002Flocalhost:8080",[23846],[246,28682,28683,28686,28689],{},[292,28684,28685],{"align":23717},"STOPSIGNAL",[292,28687,28688],{"align":23717},"容器停止时发送的信号",[292,28690,28691],{"align":23717},"STOPSIGNAL SIGKILL",[63,28693,28695],{"id":28694},"_62自己创建容器","6.2.自己创建容器",[21978,28697,28699],{"id":28698},"_621手动创建","6.2.1.手动创建",[38,28701,28702],{},"在x86电脑上编译x86的：",[83,28704,28706],{"className":23803,"code":28705,"language":23805,"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,28707,28708,28724,28728,28741,28745,28758,28762,28775,28779,28792,28796],{"__ignoreMap":10},[92,28709,28710,28712,28715,28718,28721],{"class":94,"line":95},[92,28711,26535],{"class":1942},[92,28713,28714],{"class":207}," build",[92,28716,28717],{"class":151}," -t",[92,28719,28720],{"class":207}," ros-melodic-cuda118-cudnn8-bionic:latest",[92,28722,28723],{"class":207}," .\n",[92,28725,28726],{"class":94,"line":11},[92,28727,2379],{"emptyLinePlaceholder":17},[92,28729,28730,28732,28734,28736,28739],{"class":94,"line":1158},[92,28731,26535],{"class":1942},[92,28733,28714],{"class":207},[92,28735,28717],{"class":151},[92,28737,28738],{"class":207}," ros-noetic-focal:latest",[92,28740,28723],{"class":207},[92,28742,28743],{"class":94,"line":1173},[92,28744,2379],{"emptyLinePlaceholder":17},[92,28746,28747,28749,28751,28753,28756],{"class":94,"line":1179},[92,28748,26535],{"class":1942},[92,28750,28714],{"class":207},[92,28752,28717],{"class":151},[92,28754,28755],{"class":207}," ros-humble-jammy:latest",[92,28757,28723],{"class":207},[92,28759,28760],{"class":94,"line":1193},[92,28761,2379],{"emptyLinePlaceholder":17},[92,28763,28764,28766,28768,28770,28773],{"class":94,"line":1199},[92,28765,26535],{"class":1942},[92,28767,28714],{"class":207},[92,28769,28717],{"class":151},[92,28771,28772],{"class":207}," ros-jazzy-noble:latest",[92,28774,28723],{"class":207},[92,28776,28777],{"class":94,"line":1290},[92,28778,2379],{"emptyLinePlaceholder":17},[92,28780,28781,28783,28785,28787,28790],{"class":94,"line":1296},[92,28782,26535],{"class":1942},[92,28784,28714],{"class":207},[92,28786,28717],{"class":151},[92,28788,28789],{"class":207}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[92,28791,28723],{"class":207},[92,28793,28794],{"class":94,"line":1308},[92,28795,2379],{"emptyLinePlaceholder":17},[92,28797,28798,28800,28802,28804,28807],{"class":94,"line":1591},[92,28799,26535],{"class":1942},[92,28801,28714],{"class":207},[92,28803,28717],{"class":151},[92,28805,28806],{"class":207}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[92,28808,28723],{"class":207},[38,28810,28811],{},[1441,28812],{"alt":10,"src":28813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[38,28815,28816],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[38,28818,28819],{},[1441,28820],{"alt":10,"src":28821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[38,28823,28824],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[46,28826,28827],{},[49,28828,28829],{},"创建 Docker Hub 账户",[38,28831,28832],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[46,28834,28835],{"start":11},[49,28836,28837],{},"登录 Docker Hub",[38,28839,28840],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[83,28842,28844],{"className":23803,"code":28843,"language":23805,"meta":10,"style":10},"docker login\n",[89,28845,28846],{"__ignoreMap":10},[92,28847,28848,28850],{"class":94,"line":95},[92,28849,26535],{"class":1942},[92,28851,28852],{"class":207}," login\n",[38,28854,28855],{},"输入你的 Docker Hub 用户名和密码进行验证。",[46,28857,28858],{},[49,28859,28860],{},"为你的镜像打标签",[38,28862,28863,28864,28867],{},"Docker Hub 使用 ",[89,28865,28866],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[83,28869,28871],{"className":23803,"code":28870,"language":23805,"meta":10,"style":10},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[89,28872,28873],{"__ignoreMap":10},[92,28874,28875,28877,28880,28882,28885,28888,28891,28893],{"class":94,"line":95},[92,28876,26535],{"class":1942},[92,28878,28879],{"class":207}," tag",[92,28881,28772],{"class":207},[92,28883,28884],{"class":98}," \u003C",[92,28886,28887],{"class":207},"你的用户",[92,28889,28890],{"class":102},"名",[92,28892,1063],{"class":98},[92,28894,28895],{"class":207},"\u002Fros-jazzy-noble:latest\n",[38,28897,28898,28899,28902],{},"例如，如果你的 Docker Hub 用户名是 ",[89,28900,28901],{},"tungchiahui","，你应该执行：",[83,28904,28906],{"className":23803,"code":28905,"language":23805,"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,28907,28908,28919,28923,28934,28938,28949,28953,28964,28968],{"__ignoreMap":10},[92,28909,28910,28912,28914,28916],{"class":94,"line":95},[92,28911,26535],{"class":1942},[92,28913,28879],{"class":207},[92,28915,28738],{"class":207},[92,28917,28918],{"class":207}," tungchiahui\u002Fros-noetic-focal:latest\n",[92,28920,28921],{"class":94,"line":11},[92,28922,2379],{"emptyLinePlaceholder":17},[92,28924,28925,28927,28929,28931],{"class":94,"line":1158},[92,28926,26535],{"class":1942},[92,28928,28879],{"class":207},[92,28930,28755],{"class":207},[92,28932,28933],{"class":207}," tungchiahui\u002Fros-humble-jammy:latest\n",[92,28935,28936],{"class":94,"line":1173},[92,28937,2379],{"emptyLinePlaceholder":17},[92,28939,28940,28942,28944,28946],{"class":94,"line":1179},[92,28941,26535],{"class":1942},[92,28943,28879],{"class":207},[92,28945,28772],{"class":207},[92,28947,28948],{"class":207}," tungchiahui\u002Fros-jazzy-noble:latest\n",[92,28950,28951],{"class":94,"line":1193},[92,28952,2379],{"emptyLinePlaceholder":17},[92,28954,28955,28957,28959,28961],{"class":94,"line":1199},[92,28956,26535],{"class":1942},[92,28958,28879],{"class":207},[92,28960,28789],{"class":207},[92,28962,28963],{"class":207}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[92,28965,28966],{"class":94,"line":1290},[92,28967,2379],{"emptyLinePlaceholder":17},[92,28969,28970,28972,28974,28976],{"class":94,"line":1296},[92,28971,26535],{"class":1942},[92,28973,28879],{"class":207},[92,28975,28806],{"class":207},[92,28977,28978],{"class":207}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[46,28980,28981],{"start":11},[49,28982,28983],{},"推送镜像到 Docker Hub",[38,28985,28986],{},"使用以下命令将镜像推送到 Docker Hub：",[83,28988,28990],{"className":23803,"code":28989,"language":23805,"meta":10,"style":10},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[89,28991,28992],{"__ignoreMap":10},[92,28993,28994,28996,28999,29001,29003,29005,29007],{"class":94,"line":95},[92,28995,26535],{"class":1942},[92,28997,28998],{"class":207}," push",[92,29000,28884],{"class":98},[92,29002,28887],{"class":207},[92,29004,28890],{"class":102},[92,29006,1063],{"class":98},[92,29008,29009],{"class":207},"\u002Fros-noetic-jazzy-noble:latest\n",[38,29011,14613],{},[83,29013,29015],{"className":23803,"code":29014,"language":23805,"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,29016,29017,29025,29029,29037,29041,29049,29053,29062,29066,29074,29078],{"__ignoreMap":10},[92,29018,29019,29021,29023],{"class":94,"line":95},[92,29020,26535],{"class":1942},[92,29022,28998],{"class":207},[92,29024,28918],{"class":207},[92,29026,29027],{"class":94,"line":11},[92,29028,2379],{"emptyLinePlaceholder":17},[92,29030,29031,29033,29035],{"class":94,"line":1158},[92,29032,26535],{"class":1942},[92,29034,28998],{"class":207},[92,29036,28933],{"class":207},[92,29038,29039],{"class":94,"line":1173},[92,29040,2379],{"emptyLinePlaceholder":17},[92,29042,29043,29045,29047],{"class":94,"line":1179},[92,29044,26535],{"class":1942},[92,29046,28998],{"class":207},[92,29048,28948],{"class":207},[92,29050,29051],{"class":94,"line":1193},[92,29052,2379],{"emptyLinePlaceholder":17},[92,29054,29055,29057,29059],{"class":94,"line":1199},[92,29056,26535],{"class":1942},[92,29058,28998],{"class":207},[92,29060,29061],{"class":207}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[92,29063,29064],{"class":94,"line":1290},[92,29065,2379],{"emptyLinePlaceholder":17},[92,29067,29068,29070,29072],{"class":94,"line":1296},[92,29069,26535],{"class":1942},[92,29071,28998],{"class":207},[92,29073,28978],{"class":207},[92,29075,29076],{"class":94,"line":1308},[92,29077,2379],{"emptyLinePlaceholder":17},[92,29079,29080,29082,29084],{"class":94,"line":1591},[92,29081,26535],{"class":1942},[92,29083,28998],{"class":207},[92,29085,29086],{"class":207}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[46,29088,29089],{"start":1158},[49,29090,29091],{},"验证推送成功",[38,29093,29094],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[38,29096,29097],{},[252,29098,3763],{},[1110,29100,29101,29104],{},[49,29102,29103],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[49,29105,29106],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[38,29108,29109],{},[1441,29110],{"alt":10,"src":29111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[38,29113,29114],{},[1441,29115],{"alt":10,"src":29116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21978,29118,29120],{"id":29119},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[38,29122,29123,29124,29127,29128,29131],{},"如果您想在 ",[252,29125,29126],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[252,29129,29130],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[38,29133,29134,29135],{},"1. ",[252,29136,29137],{},"启用 Docker 跨平台构建",[38,29139,29140],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[38,29142,29143],{},"第一步：启用 buildx（只需执行一次）",[83,29145,29147],{"className":23803,"code":29146,"language":23805,"meta":10,"style":10},"docker buildx create --name multiarch_builder --use\n",[89,29148,29149],{"__ignoreMap":10},[92,29150,29151,29153,29156,29159,29162,29165],{"class":94,"line":95},[92,29152,26535],{"class":1942},[92,29154,29155],{"class":207}," buildx",[92,29157,29158],{"class":207}," create",[92,29160,29161],{"class":151}," --name",[92,29163,29164],{"class":207}," multiarch_builder",[92,29166,29167],{"class":151}," --use\n",[38,29169,29170],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[38,29172,29173],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[83,29175,29177],{"className":23803,"code":29176,"language":23805,"meta":10,"style":10},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[89,29178,29179],{"__ignoreMap":10},[92,29180,29181,29183,29185,29187,29190,29193,29196,29199],{"class":94,"line":95},[92,29182,26535],{"class":1942},[92,29184,27212],{"class":207},[92,29186,27215],{"class":151},[92,29188,29189],{"class":151}," --privileged",[92,29191,29192],{"class":207}," multiarch\u002Fqemu-user-static",[92,29194,29195],{"class":151}," --reset",[92,29197,29198],{"class":151}," -p",[92,29200,29201],{"class":207}," yes\n",[38,29203,29204],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[38,29206,29207],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[83,29209,29211],{"className":23803,"code":29210,"language":23805,"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,29212,29213,29255,29259,29264,29274,29284,29293,29299,29303,29307,29317,29325,29334,29340,29344,29348,29358,29366,29375,29381,29385,29389,29399,29407,29416,29422,29426,29430,29440,29448,29457,29463,29467,29471,29481,29489,29498,29504,29508,29512,29522,29530,29539,29545,29549,29553,29563,29571,29580,29586,29590,29594,29604,29612,29621,29627,29631,29635,29646,29654,29663,29669],{"__ignoreMap":10},[92,29214,29215,29217,29219,29221,29224,29227,29229,29231,29234,29236,29238,29240,29242,29245,29248,29250,29253],{"class":94,"line":95},[92,29216,26535],{"class":1942},[92,29218,29155],{"class":207},[92,29220,28714],{"class":207},[92,29222,29223],{"class":151}," --platform",[92,29225,29226],{"class":207}," linux\u002Famd64,linux\u002Farm64",[92,29228,28717],{"class":151},[92,29230,28884],{"class":98},[92,29232,29233],{"class":207},"你的镜像",[92,29235,28890],{"class":102},[92,29237,1063],{"class":98},[92,29239,962],{"class":207},[92,29241,1013],{"class":98},[92,29243,29244],{"class":207},"标",[92,29246,29247],{"class":102},"签",[92,29249,1063],{"class":98},[92,29251,29252],{"class":151}," --push",[92,29254,28723],{"class":207},[92,29256,29257],{"class":94,"line":11},[92,29258,2379],{"emptyLinePlaceholder":17},[92,29260,29261],{"class":94,"line":1158},[92,29262,29263],{"class":161},"# 例子：\n",[92,29265,29266,29268,29270,29272],{"class":94,"line":1173},[92,29267,26535],{"class":1942},[92,29269,29155],{"class":207},[92,29271,28714],{"class":207},[92,29273,24660],{"class":151},[92,29275,29276,29279,29282],{"class":94,"line":1179},[92,29277,29278],{"class":102},"--platform ",[92,29280,29281],{"class":207},"linux\u002Famd64,linux\u002Farm64",[92,29283,24660],{"class":151},[92,29285,29286,29288,29291],{"class":94,"line":1193},[92,29287,28717],{"class":151},[92,29289,29290],{"class":207}," tungchiahui\u002Fros:noetic-focal",[92,29292,24660],{"class":151},[92,29294,29295,29297],{"class":94,"line":1199},[92,29296,29252],{"class":151},[92,29298,24660],{"class":151},[92,29300,29301],{"class":94,"line":1290},[92,29302,28723],{"class":207},[92,29304,29305],{"class":94,"line":1296},[92,29306,2379],{"emptyLinePlaceholder":17},[92,29308,29309,29311,29313,29315],{"class":94,"line":1308},[92,29310,26535],{"class":1942},[92,29312,29155],{"class":207},[92,29314,28714],{"class":207},[92,29316,24660],{"class":151},[92,29318,29319,29321,29323],{"class":94,"line":1591},[92,29320,29278],{"class":102},[92,29322,29281],{"class":207},[92,29324,24660],{"class":151},[92,29326,29327,29329,29332],{"class":94,"line":1596},[92,29328,28717],{"class":151},[92,29330,29331],{"class":207}," tungchiahui\u002Fros:humble-jammy",[92,29333,24660],{"class":151},[92,29335,29336,29338],{"class":94,"line":1602},[92,29337,29252],{"class":151},[92,29339,24660],{"class":151},[92,29341,29342],{"class":94,"line":1607},[92,29343,28723],{"class":207},[92,29345,29346],{"class":94,"line":1621},[92,29347,2379],{"emptyLinePlaceholder":17},[92,29349,29350,29352,29354,29356],{"class":94,"line":1626},[92,29351,26535],{"class":1942},[92,29353,29155],{"class":207},[92,29355,28714],{"class":207},[92,29357,24660],{"class":151},[92,29359,29360,29362,29364],{"class":94,"line":1632},[92,29361,29278],{"class":102},[92,29363,29281],{"class":207},[92,29365,24660],{"class":151},[92,29367,29368,29370,29373],{"class":94,"line":1653},[92,29369,28717],{"class":151},[92,29371,29372],{"class":207}," tungchiahui\u002Fros:jazzy-noble",[92,29374,24660],{"class":151},[92,29376,29377,29379],{"class":94,"line":1658},[92,29378,29252],{"class":151},[92,29380,24660],{"class":151},[92,29382,29383],{"class":94,"line":1672},[92,29384,28723],{"class":207},[92,29386,29387],{"class":94,"line":1677},[92,29388,2379],{"emptyLinePlaceholder":17},[92,29390,29391,29393,29395,29397],{"class":94,"line":1706},[92,29392,26302],{"class":1942},[92,29394,29155],{"class":207},[92,29396,28714],{"class":207},[92,29398,24660],{"class":151},[92,29400,29401,29403,29405],{"class":94,"line":1711},[92,29402,29278],{"class":102},[92,29404,29281],{"class":207},[92,29406,24660],{"class":151},[92,29408,29409,29411,29414],{"class":94,"line":1728},[92,29410,28717],{"class":151},[92,29412,29413],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[92,29415,24660],{"class":151},[92,29417,29418,29420],{"class":94,"line":1733},[92,29419,29252],{"class":151},[92,29421,24660],{"class":151},[92,29423,29424],{"class":94,"line":1738},[92,29425,28723],{"class":207},[92,29427,29428],{"class":94,"line":1743},[92,29429,2379],{"emptyLinePlaceholder":17},[92,29431,29432,29434,29436,29438],{"class":94,"line":1757},[92,29433,26535],{"class":1942},[92,29435,29155],{"class":207},[92,29437,28714],{"class":207},[92,29439,24660],{"class":151},[92,29441,29442,29444,29446],{"class":94,"line":1762},[92,29443,29278],{"class":102},[92,29445,29281],{"class":207},[92,29447,24660],{"class":151},[92,29449,29450,29452,29455],{"class":94,"line":2556},[92,29451,28717],{"class":151},[92,29453,29454],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[92,29456,24660],{"class":151},[92,29458,29459,29461],{"class":94,"line":2570},[92,29460,29252],{"class":151},[92,29462,24660],{"class":151},[92,29464,29465],{"class":94,"line":2578},[92,29466,28723],{"class":207},[92,29468,29469],{"class":94,"line":2583},[92,29470,2379],{"emptyLinePlaceholder":17},[92,29472,29473,29475,29477,29479],{"class":94,"line":2589},[92,29474,26302],{"class":1942},[92,29476,29155],{"class":207},[92,29478,28714],{"class":207},[92,29480,24660],{"class":151},[92,29482,29483,29485,29487],{"class":94,"line":2595},[92,29484,29278],{"class":102},[92,29486,29281],{"class":207},[92,29488,24660],{"class":151},[92,29490,29491,29493,29496],{"class":94,"line":2600},[92,29492,28717],{"class":151},[92,29494,29495],{"class":207}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[92,29497,24660],{"class":151},[92,29499,29500,29502],{"class":94,"line":7928},[92,29501,29252],{"class":151},[92,29503,24660],{"class":151},[92,29505,29506],{"class":94,"line":7952},[92,29507,28723],{"class":207},[92,29509,29510],{"class":94,"line":7957},[92,29511,2379],{"emptyLinePlaceholder":17},[92,29513,29514,29516,29518,29520],{"class":94,"line":7963},[92,29515,26535],{"class":1942},[92,29517,29155],{"class":207},[92,29519,28714],{"class":207},[92,29521,24660],{"class":151},[92,29523,29524,29526,29528],{"class":94,"line":7990},[92,29525,29278],{"class":102},[92,29527,29281],{"class":207},[92,29529,24660],{"class":151},[92,29531,29532,29534,29537],{"class":94,"line":7995},[92,29533,28717],{"class":151},[92,29535,29536],{"class":207}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[92,29538,24660],{"class":151},[92,29540,29541,29543],{"class":94,"line":8001},[92,29542,29252],{"class":151},[92,29544,24660],{"class":151},[92,29546,29547],{"class":94,"line":8013},[92,29548,28723],{"class":207},[92,29550,29551],{"class":94,"line":8025},[92,29552,2379],{"emptyLinePlaceholder":17},[92,29554,29555,29557,29559,29561],{"class":94,"line":8037},[92,29556,26535],{"class":1942},[92,29558,29155],{"class":207},[92,29560,28714],{"class":207},[92,29562,24660],{"class":151},[92,29564,29565,29567,29569],{"class":94,"line":9696},[92,29566,29278],{"class":102},[92,29568,29281],{"class":207},[92,29570,24660],{"class":151},[92,29572,29573,29575,29578],{"class":94,"line":9721},[92,29574,28717],{"class":151},[92,29576,29577],{"class":207}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[92,29579,24660],{"class":151},[92,29581,29582,29584],{"class":94,"line":9744},[92,29583,29252],{"class":151},[92,29585,24660],{"class":151},[92,29587,29588],{"class":94,"line":9768},[92,29589,28723],{"class":207},[92,29591,29592],{"class":94,"line":9773},[92,29593,2379],{"emptyLinePlaceholder":17},[92,29595,29596,29598,29600,29602],{"class":94,"line":9778},[92,29597,26302],{"class":1942},[92,29599,29155],{"class":207},[92,29601,28714],{"class":207},[92,29603,24660],{"class":151},[92,29605,29606,29608,29610],{"class":94,"line":9783},[92,29607,29278],{"class":102},[92,29609,29281],{"class":207},[92,29611,24660],{"class":151},[92,29613,29614,29616,29619],{"class":94,"line":9792},[92,29615,28717],{"class":151},[92,29617,29618],{"class":207}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[92,29620,24660],{"class":151},[92,29622,29623,29625],{"class":94,"line":9797},[92,29624,29252],{"class":151},[92,29626,24660],{"class":151},[92,29628,29629],{"class":94,"line":9803},[92,29630,28723],{"class":207},[92,29632,29633],{"class":94,"line":9824},[92,29634,2379],{"emptyLinePlaceholder":17},[92,29636,29637,29640,29642,29644],{"class":94,"line":9830},[92,29638,29639],{"class":1942},"  docker",[92,29641,29155],{"class":207},[92,29643,28714],{"class":207},[92,29645,24660],{"class":151},[92,29647,29648,29650,29652],{"class":94,"line":9844},[92,29649,29278],{"class":102},[92,29651,29281],{"class":207},[92,29653,24660],{"class":151},[92,29655,29656,29658,29661],{"class":94,"line":9850},[92,29657,28717],{"class":151},[92,29659,29660],{"class":207}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[92,29662,24660],{"class":151},[92,29664,29665,29667],{"class":94,"line":9877},[92,29666,29252],{"class":151},[92,29668,24660],{"class":151},[92,29670,29671],{"class":94,"line":9886},[92,29672,28723],{"class":207},[38,29674,29675],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[38,29677,29678],{},[1441,29679],{"alt":10,"src":29680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[38,29682,29683],{},[1441,29684],{"alt":10,"src":29685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21978,29687,29689],{"id":29688},"_623清除构建缓存","6.2.3.清除构建缓存",[83,29691,29693],{"className":23803,"code":29692,"language":23805,"meta":10,"style":10},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[89,29694,29695,29700],{"__ignoreMap":10},[92,29696,29697],{"class":94,"line":95},[92,29698,29699],{"class":161},"# 清理BuildKit构建缓存\n",[92,29701,29702,29704,29707,29710],{"class":94,"line":11},[92,29703,26535],{"class":1942},[92,29705,29706],{"class":207}," builder",[92,29708,29709],{"class":207}," prune",[92,29711,29712],{"class":151}," -f\n",[38,29714,29715],{},[1441,29716],{"alt":10,"src":29717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[63,29719,29721],{"id":29720},"_63补充","6.3.补充",[21978,29723,29725],{"id":29724},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[38,29727,29728],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[38,29730,29731],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[38,29733,29734],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[83,29736,29738],{"className":23803,"code":29737,"language":23805,"meta":10,"style":10},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[89,29739,29740,29747],{"__ignoreMap":10},[92,29741,29742,29744],{"class":94,"line":95},[92,29743,27352],{"class":1942},[92,29745,29746],{"class":207}," nginx\n",[92,29748,29749,29751,29754,29757,29759],{"class":94,"line":11},[92,29750,28537],{"class":1942},[92,29752,29753],{"class":207}," echo",[92,29755,29756],{"class":207}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[92,29758,26204],{"class":98},[92,29760,29761],{"class":207}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[38,29763,29764],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[38,29766,29767],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[83,29769,29771],{"className":23803,"code":29770,"language":23805,"meta":10,"style":10},"docker build -t nginx:tuling .\n",[89,29772,29773],{"__ignoreMap":10},[92,29774,29775,29777,29779,29781,29784],{"class":94,"line":95},[92,29776,26535],{"class":1942},[92,29778,28714],{"class":207},[92,29780,28717],{"class":151},[92,29782,29783],{"class":207}," nginx:tuling",[92,29785,28723],{"class":207},[38,29787,29788],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[38,29790,29791],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[83,29793,29795],{"className":23803,"code":29794,"language":23805,"meta":10,"style":10},"docker run -d -p 92:80 nginx:tuling\n",[89,29796,29797],{"__ignoreMap":10},[92,29798,29799,29801,29803,29806,29808,29811],{"class":94,"line":95},[92,29800,26535],{"class":1942},[92,29802,27212],{"class":207},[92,29804,29805],{"class":151}," -d",[92,29807,29198],{"class":151},[92,29809,29810],{"class":207}," 92:80",[92,29812,29813],{"class":207}," nginx:tuling\n",[38,29815,29816,29817],{},"4、访问 ",[341,29818,29821],{"href":29819,"rel":29820},"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",[23846],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[38,29823,29824],{},[1441,29825],{"alt":10,"src":29826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[38,29828,29829],{},[1441,29830],{"alt":10,"src":29831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21978,29833,29835],{"id":29834},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[38,29837,29838],{},"只需要知道大体流程即可",[38,29840,29841],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[38,29843,29844],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[38,29846,29847],{},"2、在Dockerfile中添加以下内容",[83,29849,29851],{"className":26073,"code":29850,"language":26075,"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,29852,29853,29858,29863,29868,29873,29878,29883,29888],{"__ignoreMap":10},[92,29854,29855],{"class":94,"line":95},[92,29856,29857],{},"# 基于哪个镜像\n",[92,29859,29860],{"class":94,"line":11},[92,29861,29862],{},"From java:8\n",[92,29864,29865],{"class":94,"line":1158},[92,29866,29867],{},"# 复制文件到容器\n",[92,29869,29870],{"class":94,"line":1173},[92,29871,29872],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[92,29874,29875],{"class":94,"line":1179},[92,29876,29877],{},"# 声明需要暴露的端口\n",[92,29879,29880],{"class":94,"line":1193},[92,29881,29882],{},"EXPOSE 8877\n",[92,29884,29885],{"class":94,"line":1199},[92,29886,29887],{},"# 配置容器启动后执行的命令\n",[92,29889,29890],{"class":94,"line":1290},[92,29891,29892],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[38,29894,29895],{},"3、使用docker build命令构建镜像",[83,29897,29899],{"className":23803,"code":29898,"language":23805,"meta":10,"style":10},"docker build -t tulingmall-member:0.0.5 .\n",[89,29900,29901],{"__ignoreMap":10},[92,29902,29903,29905,29907,29909,29912],{"class":94,"line":95},[92,29904,26535],{"class":1942},[92,29906,28714],{"class":207},[92,29908,28717],{"class":151},[92,29910,29911],{"class":207}," tulingmall-member:0.0.5",[92,29913,28723],{"class":207},[38,29915,29916],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[38,29918,29919],{},[1441,29920],{"alt":10,"src":29921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[38,29923,29924],{},"4、启动镜像，加-d可在后台启动",[83,29926,29928],{"className":23803,"code":29927,"language":23805,"meta":10,"style":10},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[89,29929,29930],{"__ignoreMap":10},[92,29931,29932,29934,29936,29938,29940,29943],{"class":94,"line":95},[92,29933,26535],{"class":1942},[92,29935,27212],{"class":207},[92,29937,29805],{"class":151},[92,29939,29198],{"class":151},[92,29941,29942],{"class":207}," 8877:8877",[92,29944,29945],{"class":207}," tulingmall-member:0.0.5\n",[38,29947,29948],{},"加上JVM参数：",[83,29950,29952],{"className":23803,"code":29951,"language":23805,"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,29953,29954,29959,29974,29984,29993,30000],{"__ignoreMap":10},[92,29955,29956],{"class":94,"line":95},[92,29957,29958],{"class":161},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[92,29960,29961,29963,29965,29968,29970,29972],{"class":94,"line":11},[92,29962,26535],{"class":1942},[92,29964,27212],{"class":207},[92,29966,29967],{"class":151},"  -d",[92,29969,29198],{"class":151},[92,29971,29942],{"class":207},[92,29973,24660],{"class":151},[92,29975,29976,29978,29981],{"class":94,"line":1158},[92,29977,28110],{"class":102},[92,29979,29980],{"class":207},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[92,29982,29983],{"class":151},"  \\\n",[92,29985,29986,29988,29991],{"class":94,"line":1173},[92,29987,28110],{"class":102},[92,29989,29990],{"class":207},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[92,29992,29983],{"class":151},[92,29994,29995,29998],{"class":94,"line":1179},[92,29996,29997],{"class":102},"--cap-add=SYS_PTRACE  ",[92,29999,26157],{"class":151},[92,30001,30002],{"class":94,"line":1193},[92,30003,30004],{"class":102},"tulingmall-member:0.0.5\n",[38,30006,30007],{},"5、访问会员服务接口",[38,30009,30010],{},[1441,30011],{"alt":10,"src":30012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21978,30014,30016],{"id":30015},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[38,30018,30019],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[38,30021,30022,30023],{},"阿里云docker镜像仓库：",[341,30024,30025],{"href":30025,"rel":30026},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23846],[38,30028,30029],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[38,30031,30032],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[38,30034,30035],{},[1441,30036],{"alt":10,"src":30037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[38,30039,30040],{},"要把镜像推送到镜像仓库",[83,30042,30044],{"className":23803,"code":30043,"language":23805,"meta":10,"style":10},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[89,30045,30046],{"__ignoreMap":10},[92,30047,30048,30050,30052,30054],{"class":94,"line":95},[92,30049,26535],{"class":1942},[92,30051,28879],{"class":207},[92,30053,29911],{"class":207},[92,30055,30056],{"class":207}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[38,30058,30059],{},"最后将镜像推送到远程仓库",[83,30061,30063],{"className":23803,"code":30062,"language":23805,"meta":10,"style":10},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[89,30064,30065],{"__ignoreMap":10},[92,30066,30067,30069,30071],{"class":94,"line":95},[92,30068,26535],{"class":1942},[92,30070,28998],{"class":207},[92,30072,30056],{"class":207},[5106,30074,30075],{},"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":30077},[30078,30079,30080],{"id":28465,"depth":1158,"text":28466},{"id":28694,"depth":1158,"text":28695},{"id":29720,"depth":1158,"text":29721},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28457,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30087,"title":30088,"body":30089,"description":10,"extension":14,"meta":30232,"navigation":17,"path":30233,"seo":30234,"stem":30235,"__hash__":30236},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30090,"toc":30230},[30091,30094,30099,30104,30107,30112,30117,30120,30125,30130,30133,30138,30141,30144,30147,30150,30153,30156,30176,30198,30201,30204,30224,30227],[29,30092,30088],{"id":30093},"_7vscode远程开发",[46,30095,30096],{},[49,30097,30098],{},"插件1：微软Docker工具",[38,30100,30101],{},[1441,30102],{"alt":10,"src":30103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[38,30105,30106],{},"docker扩展插件已经进化为container tools了，请安装container tools",[38,30108,30109],{},[1441,30110],{"alt":10,"src":30111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[46,30113,30114],{"start":11},[49,30115,30116],{},"插件2：微软Docker远程开发工具",[38,30118,30119],{},"下面这是远程开发的插件。",[38,30121,30122],{},[1441,30123],{"alt":10,"src":30124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[38,30126,30127],{},[1441,30128],{"alt":10,"src":30129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[38,30131,30132],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[38,30134,30135],{},[1441,30136],{"alt":10,"src":30137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[38,30139,30140],{},"安装完拓展之后，vscode进行链接：",[38,30142,30143],{},"1.按ctrl+shift+p",[38,30145,30146],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[38,30148,30149],{},"3.选择目前运行的容器",[38,30151,30152],{},"4.VS Code 会在新窗口中打开并连接到容器",[38,30154,30155],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[83,30157,30159],{"className":23803,"code":30158,"language":23805,"meta":10,"style":10},"docker run -v 主机目录:容器目录 image-name\n",[89,30160,30161],{"__ignoreMap":10},[92,30162,30163,30165,30167,30170,30173],{"class":94,"line":95},[92,30164,26535],{"class":1942},[92,30166,27212],{"class":207},[92,30168,30169],{"class":151}," -v",[92,30171,30172],{"class":207}," 主机目录:容器目录",[92,30174,30175],{"class":207}," image-name\n",[83,30177,30179],{"className":23803,"code":30178,"language":23805,"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,30180,30181],{"__ignoreMap":10},[92,30182,30183,30185,30187,30190,30192,30195],{"class":94,"line":95},[92,30184,26535],{"class":1942},[92,30186,27212],{"class":207},[92,30188,30189],{"class":151}," -it",[92,30191,30169],{"class":151},[92,30193,30194],{"class":207}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[92,30196,30197],{"class":207}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[38,30199,30200],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[38,30202,30203],{},"查看挂载情况：",[83,30205,30207],{"className":23803,"code":30206,"language":23805,"meta":10,"style":10},"mount | grep -i project\n",[89,30208,30209],{"__ignoreMap":10},[92,30210,30211,30214,30216,30219,30221],{"class":94,"line":95},[92,30212,30213],{"class":1942},"mount",[92,30215,25091],{"class":98},[92,30217,30218],{"class":1942}," grep",[92,30220,26412],{"class":151},[92,30222,30223],{"class":207}," project\n",[38,30225,30226],{},"也可以通过ls来进行查看",[5106,30228,30229],{},"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":30231},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30088,"description":10},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30238,"title":30239,"body":30240,"description":23357,"extension":14,"meta":30244,"navigation":17,"path":30246,"seo":30247,"stem":30248,"__hash__":30249},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30241,"toc":30242},[],{"title":10,"searchDepth":11,"depth":11,"links":30243},[],{"category":30245},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30239,"description":23357},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30251,"title":30252,"body":30253,"description":23357,"extension":14,"meta":30257,"navigation":17,"path":30258,"seo":30259,"stem":30260,"__hash__":30261},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30254,"toc":30255},[],{"title":10,"searchDepth":11,"depth":11,"links":30256},[],{"category":30245},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30252,"description":23357},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30263,"title":30264,"body":30265,"description":23357,"extension":14,"meta":30558,"navigation":17,"path":30559,"seo":30560,"stem":30561,"__hash__":30562},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30266,"toc":30556},[30267,30270,30278,30293,30298,30349,30352,30358,30545,30550,30553],[29,30268,30264],{"id":30269},"_1验证深度学习环境",[38,30271,30272,30273],{},"关于环境的安装，看",[341,30274,30277],{"href":30275,"rel":30276},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23846],"Pytorch-->深度学习",[38,30279,30280,30281,30284,30285,30288,30289,30292],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[89,30282,30283],{},"pytorch-cuda=12.4"," 是一个“ ",[252,30286,30287],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[252,30290,30291],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[38,30294,30295],{},[1441,30296],{"alt":10,"src":30297},"\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,30299,30301],{"className":23803,"code":30300,"language":23805,"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,30302,30303,30308],{"__ignoreMap":10},[92,30304,30305],{"class":94,"line":95},[92,30306,30307],{"class":161},"# CUDA 12.4\n",[92,30309,30310,30313,30315,30318,30321,30324,30327,30330,30332,30335,30338,30341,30344,30346],{"class":94,"line":11},[92,30311,30312],{"class":1942},"conda",[92,30314,23815],{"class":207},[92,30316,30317],{"class":207}," pytorch==",[92,30319,30320],{"class":151},"2.5.1",[92,30322,30323],{"class":207}," torchvision==",[92,30325,30326],{"class":151},"0.20.1",[92,30328,30329],{"class":207}," torchaudio==",[92,30331,30320],{"class":151},[92,30333,30334],{"class":207}," pytorch-cuda=",[92,30336,30337],{"class":151},"12.4",[92,30339,30340],{"class":151}," -c",[92,30342,30343],{"class":207}," pytorch",[92,30345,30340],{"class":151},[92,30347,30348],{"class":207}," nvidia\n",[38,30350,30351],{},"）：",[38,30353,30354],{},[341,30355,30356],{"href":30356,"rel":30357},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23846],[83,30359,30363],{"className":30360,"code":30361,"language":30362,"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,30364,30365,30370,30378,30383,30393,30409,30414,30424,30461,30468,30480,30496,30501,30511,30523,30533],{"__ignoreMap":10},[92,30366,30367],{"class":94,"line":95},[92,30368,30369],{"class":161},"# 对深度学习环境进行测试\n",[92,30371,30372,30375],{"class":94,"line":11},[92,30373,30374],{"class":98},"import",[92,30376,30377],{"class":102}," torch\n",[92,30379,30380],{"class":94,"line":1158},[92,30381,30382],{"class":161},"# 查看cuda是否被激活\n",[92,30384,30385,30388,30390],{"class":94,"line":1173},[92,30386,30387],{"class":102},"flag",[92,30389,148],{"class":98},[92,30391,30392],{"class":102},"torch.cuda.is_available()\n",[92,30394,30395,30398,30400,30403,30406],{"class":94,"line":1179},[92,30396,30397],{"class":151},"print",[92,30399,103],{"class":102},[92,30401,30402],{"class":207},"\"cuda:\"",[92,30404,30405],{"class":102},", flag)   ",[92,30407,30408],{"class":161},"#返回true的话说明被激活\n",[92,30410,30411],{"class":94,"line":1193},[92,30412,30413],{"class":161},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[92,30415,30416,30419,30421],{"class":94,"line":1199},[92,30417,30418],{"class":102},"ngpu",[92,30420,148],{"class":98},[92,30422,30423],{"class":151},"1\n",[92,30425,30426,30429,30431,30434,30437,30439,30442,30445,30448,30450,30452,30454,30456,30459],{"class":94,"line":1290},[92,30427,30428],{"class":102},"device",[92,30430,148],{"class":98},[92,30432,30433],{"class":102},"torch.device(",[92,30435,30436],{"class":207},"\"cuda:0\"",[92,30438,1683],{"class":98},[92,30440,30441],{"class":102},"(torch.cuda.is_available() ",[92,30443,30444],{"class":98},"and",[92,30446,30447],{"class":102}," ngpu",[92,30449,1063],{"class":98},[92,30451,294],{"class":151},[92,30453,13694],{"class":102},[92,30455,1680],{"class":98},[92,30457,30458],{"class":207}," \"cpu\"",[92,30460,109],{"class":102},[92,30462,30463,30465],{"class":94,"line":1296},[92,30464,30397],{"class":151},[92,30466,30467],{"class":102},"(device)\n",[92,30469,30470,30472,30475,30477],{"class":94,"line":1308},[92,30471,30397],{"class":151},[92,30473,30474],{"class":102},"(torch.cuda.get_device_name(",[92,30476,294],{"class":151},[92,30478,30479],{"class":102},"))\n",[92,30481,30482,30484,30487,30489,30491,30493],{"class":94,"line":1591},[92,30483,30397],{"class":151},[92,30485,30486],{"class":102},"(torch.rand(",[92,30488,174],{"class":151},[92,30490,481],{"class":102},[92,30492,174],{"class":151},[92,30494,30495],{"class":102},").cuda())\n",[92,30497,30498],{"class":94,"line":1596},[92,30499,30500],{"class":161},"# 查看cuda和cudnn的版本\n",[92,30502,30503,30506,30508],{"class":94,"line":1602},[92,30504,30505],{"class":102},"cuda_version",[92,30507,148],{"class":98},[92,30509,30510],{"class":102},"torch.version.cuda\n",[92,30512,30513,30515,30517,30520],{"class":94,"line":1607},[92,30514,30397],{"class":151},[92,30516,103],{"class":102},[92,30518,30519],{"class":207},"\"cuda version\"",[92,30521,30522],{"class":102},",cuda_version)\n",[92,30524,30525,30528,30530],{"class":94,"line":1621},[92,30526,30527],{"class":102},"cudnn_version",[92,30529,148],{"class":98},[92,30531,30532],{"class":102},"torch.backends.cudnn.version()\n",[92,30534,30535,30537,30539,30542],{"class":94,"line":1626},[92,30536,30397],{"class":151},[92,30538,103],{"class":102},[92,30540,30541],{"class":207},"\"cudnn version\"",[92,30543,30544],{"class":102},",cudnn_version)\n",[38,30546,30547],{},[1441,30548],{"alt":10,"src":30549},"\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,30551,30552],{},"cuda:0 指的是一块显卡",[5106,30554,30555],{},"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":30557},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30264,"description":23357},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30564,"title":30565,"body":30566,"description":23357,"extension":14,"meta":50370,"navigation":17,"path":50371,"seo":50372,"stem":50373,"__hash__":50374},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30567,"toc":50364},[30568,30571,30575,30579,30582,30587,30592,30595,30600,30605,30610,30613,30617,30622,30626,30631,30634,30639,30642,30645,30648,30651,30656,30659,30664,30669,30674,30679,30682,30686,30689,30694,31298,31303,31306,31311,31314,31317,31781,31784,31787,31790,31793,33844,33847,33852,33857,34652,34655,34660,35438,35442,37101,37105,37819,37823,37827,37832,37837,37842,37845,37850,37855,37860,37865,37870,37874,37879,39161,39166,39169,39172,39175,39330,39333,39336,40552,40557,41252,41256,41260,41265,41270,41273,41278,41283,41288,41293,41298,41303,41308,41313,41318,41323,41328,41333,41338,41343,41348,41353,41358,41363,41368,41373,41378,41383,41388,41393,41398,41403,41408,41413,41418,41423,41427,41431,41434,42912,42916,44563,44567,45261,45265,45268,45271,45815,45818,45822,45825,47222,47226,47229,47807,49594,49598,49601,50361],[29,30569,30565],{"id":30570},"_2经典神经网络",[63,30572,30574],{"id":30573},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21978,30576,30578],{"id":30577},"_211原理介绍","2.1.1.原理介绍",[38,30580,30581],{},"LeNet-5",[46,30583,30584],{},[49,30585,30586],{},"原理",[38,30588,30589],{},[1441,30590],{"alt":10,"src":30591},"\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,30593,30594],{},"B是batch批次；C是channel通道",[46,30596,30597],{"start":11},[49,30598,30599],{},"网络参数详细",[38,30601,30602],{},[1441,30603],{"alt":10,"src":30604},"\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,30606,30607],{},[1441,30608],{"alt":10,"src":30609},"\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,30611,30612],{},"AlexNet",[46,30614,30615],{},[49,30616,30586],{},[38,30618,30619],{},[1441,30620],{"alt":10,"src":30621},"\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,30623,30624],{"start":11},[49,30625,30599],{},[38,30627,30628],{},[1441,30629],{"alt":10,"src":30630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[38,30632,30633],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[38,30635,30636],{},[1441,30637],{"alt":10,"src":30638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[38,30640,30641],{},"数据处理中的图像增强操作:",[38,30643,30644],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[38,30646,30647],{},"①增加数据量，保证训练数据充足；②防止过拟合",[38,30649,30650],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[38,30652,30653],{},[1441,30654],{"alt":10,"src":30655},"\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,30657,30658],{},"提升网络精确度的方法：LRN正则化",[38,30660,30661],{},[1441,30662],{"alt":10,"src":30663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[38,30665,30666],{},[1441,30667],{"alt":10,"src":30668},"\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,30670,30671],{"start":1158},[49,30672,30673],{},"AlexNet的总结",[38,30675,30676],{},[1441,30677],{"alt":10,"src":30678},"\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,30680,30681],{},"比LeNet模型要深一丢丢",[21978,30683,30685],{"id":30684},"_212代码实现","2.1.2.代码实现",[38,30687,30688],{},"（1）LeNet",[46,30690,30691],{},[49,30692,30693],{},"模型搭建",[83,30695,30697],{"className":30360,"code":30696,"language":30362,"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,30698,30699,30704,30710,30715,30728,30733,30745,30749,30769,30774,30779,30790,30795,30814,30818,30823,30872,30884,30889,30918,30953,30980,30985,30997,31002,31022,31041,31060,31064,31069,31079,31096,31107,31122,31133,31144,31159,31174,31185,31192,31196,31210,31215,31238,31243,31248,31253,31257,31262,31267,31277],{"__ignoreMap":10},[92,30700,30701],{"class":94,"line":95},[92,30702,30703],{"class":161},"# 导入库\n",[92,30705,30706,30708],{"class":94,"line":11},[92,30707,30374],{"class":98},[92,30709,30377],{"class":102},[92,30711,30712],{"class":94,"line":1158},[92,30713,30714],{"class":161},"# 导入神经网络层\n",[92,30716,30717,30720,30723,30725],{"class":94,"line":1173},[92,30718,30719],{"class":98},"from",[92,30721,30722],{"class":102}," torch ",[92,30724,30374],{"class":98},[92,30726,30727],{"class":102}," nn\n",[92,30729,30730],{"class":94,"line":1179},[92,30731,30732],{"class":161},"# 导入展示神经网络参数的包\n",[92,30734,30735,30737,30740,30742],{"class":94,"line":1193},[92,30736,30719],{"class":98},[92,30738,30739],{"class":102}," torchsummary ",[92,30741,30374],{"class":98},[92,30743,30744],{"class":102}," summary\n",[92,30746,30747],{"class":94,"line":1199},[92,30748,2379],{"emptyLinePlaceholder":17},[92,30750,30751,30753,30756,30758,30761,30763,30766],{"class":94,"line":1290},[92,30752,14674],{"class":98},[92,30754,30755],{"class":1942}," LeNet",[92,30757,103],{"class":102},[92,30759,30760],{"class":1942},"nn",[92,30762,661],{"class":102},[92,30764,30765],{"class":1942},"Module",[92,30767,30768],{"class":102},"):\n",[92,30770,30771],{"class":94,"line":1296},[92,30772,30773],{"class":161},"    # 模型初始化:\n",[92,30775,30776],{"class":94,"line":1308},[92,30777,30778],{"class":161},"    # 定义一些网络层和激活函数\n",[92,30780,30781,30784,30787],{"class":94,"line":1591},[92,30782,30783],{"class":98},"    def",[92,30785,30786],{"class":151}," __init__",[92,30788,30789],{"class":102},"(self):\n",[92,30791,30792],{"class":94,"line":1596},[92,30793,30794],{"class":161},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[92,30796,30797,30800,30803,30806,30809,30812],{"class":94,"line":1602},[92,30798,30799],{"class":151},"        super",[92,30801,30802],{"class":102},"(LeNet,",[92,30804,30805],{"class":151},"self",[92,30807,30808],{"class":102},").",[92,30810,30811],{"class":151},"__init__",[92,30813,1955],{"class":102},[92,30815,30816],{"class":94,"line":1607},[92,30817,2379],{"emptyLinePlaceholder":17},[92,30819,30820],{"class":94,"line":1621},[92,30821,30822],{"class":161},"        # 定义网络层\n",[92,30824,30825,30828,30831,30833,30836,30839,30841,30843,30845,30848,30850,30852,30854,30857,30859,30861,30863,30866,30868,30870],{"class":94,"line":1626},[92,30826,30827],{"class":151},"        self",[92,30829,30830],{"class":102},".c1",[92,30832,148],{"class":98},[92,30834,30835],{"class":102},"nn.Conv2d(",[92,30837,30838],{"class":5196},"in_channels",[92,30840,148],{"class":98},[92,30842,320],{"class":151},[92,30844,481],{"class":102},[92,30846,30847],{"class":5196},"out_channels",[92,30849,148],{"class":98},[92,30851,447],{"class":151},[92,30853,481],{"class":102},[92,30855,30856],{"class":5196},"kernel_size",[92,30858,148],{"class":98},[92,30860,422],{"class":151},[92,30862,481],{"class":102},[92,30864,30865],{"class":5196},"padding",[92,30867,148],{"class":98},[92,30869,180],{"class":151},[92,30871,109],{"class":102},[92,30873,30874,30876,30879,30881],{"class":94,"line":1632},[92,30875,30827],{"class":151},[92,30877,30878],{"class":102},".sig",[92,30880,148],{"class":98},[92,30882,30883],{"class":102},"nn.Sigmoid()\n",[92,30885,30886],{"class":94,"line":1653},[92,30887,30888],{"class":161},"        # 定义池化\n",[92,30890,30891,30893,30896,30898,30901,30903,30905,30907,30909,30912,30914,30916],{"class":94,"line":1658},[92,30892,30827],{"class":151},[92,30894,30895],{"class":102},".s2",[92,30897,148],{"class":98},[92,30899,30900],{"class":102},"nn.AvgPool2d(",[92,30902,30856],{"class":5196},[92,30904,148],{"class":98},[92,30906,180],{"class":151},[92,30908,481],{"class":102},[92,30910,30911],{"class":5196},"stride",[92,30913,148],{"class":98},[92,30915,180],{"class":151},[92,30917,109],{"class":102},[92,30919,30920,30922,30925,30927,30929,30931,30933,30935,30937,30939,30941,30943,30945,30947,30949,30951],{"class":94,"line":1672},[92,30921,30827],{"class":151},[92,30923,30924],{"class":102},".c3",[92,30926,148],{"class":98},[92,30928,30835],{"class":102},[92,30930,30838],{"class":5196},[92,30932,148],{"class":98},[92,30934,447],{"class":151},[92,30936,481],{"class":102},[92,30938,30847],{"class":5196},[92,30940,148],{"class":98},[92,30942,704],{"class":151},[92,30944,481],{"class":102},[92,30946,30856],{"class":5196},[92,30948,148],{"class":98},[92,30950,422],{"class":151},[92,30952,109],{"class":102},[92,30954,30955,30957,30960,30962,30964,30966,30968,30970,30972,30974,30976,30978],{"class":94,"line":1677},[92,30956,30827],{"class":151},[92,30958,30959],{"class":102},".s4",[92,30961,148],{"class":98},[92,30963,30900],{"class":102},[92,30965,30856],{"class":5196},[92,30967,148],{"class":98},[92,30969,180],{"class":151},[92,30971,481],{"class":102},[92,30973,30911],{"class":5196},[92,30975,148],{"class":98},[92,30977,180],{"class":151},[92,30979,109],{"class":102},[92,30981,30982],{"class":94,"line":1706},[92,30983,30984],{"class":161},"        # 定义平展层\n",[92,30986,30987,30989,30992,30994],{"class":94,"line":1711},[92,30988,30827],{"class":151},[92,30990,30991],{"class":102},".flatten",[92,30993,148],{"class":98},[92,30995,30996],{"class":102},"nn.Flatten()\n",[92,30998,30999],{"class":94,"line":1728},[92,31000,31001],{"class":161},"        # 定义全连接层\n",[92,31003,31004,31006,31009,31011,31014,31016,31018,31020],{"class":94,"line":1733},[92,31005,30827],{"class":151},[92,31007,31008],{"class":102},".f5",[92,31010,148],{"class":98},[92,31012,31013],{"class":102},"nn.Linear(",[92,31015,3966],{"class":151},[92,31017,481],{"class":102},[92,31019,920],{"class":151},[92,31021,109],{"class":102},[92,31023,31024,31026,31029,31031,31033,31035,31037,31039],{"class":94,"line":1738},[92,31025,30827],{"class":151},[92,31027,31028],{"class":102},".f6",[92,31030,148],{"class":98},[92,31032,31013],{"class":102},[92,31034,920],{"class":151},[92,31036,481],{"class":102},[92,31038,814],{"class":151},[92,31040,109],{"class":102},[92,31042,31043,31045,31048,31050,31052,31054,31056,31058],{"class":94,"line":1743},[92,31044,30827],{"class":151},[92,31046,31047],{"class":102},".f7",[92,31049,148],{"class":98},[92,31051,31013],{"class":102},[92,31053,814],{"class":151},[92,31055,481],{"class":102},[92,31057,549],{"class":151},[92,31059,109],{"class":102},[92,31061,31062],{"class":94,"line":1757},[92,31063,2379],{"emptyLinePlaceholder":17},[92,31065,31066],{"class":94,"line":1762},[92,31067,31068],{"class":161},"    # 写工具->写前向传播\n",[92,31070,31071,31073,31076],{"class":94,"line":2556},[92,31072,30783],{"class":98},[92,31074,31075],{"class":1942}," forward",[92,31077,31078],{"class":102},"(self,x):\n",[92,31080,31081,31084,31086,31088,31091,31093],{"class":94,"line":2570},[92,31082,31083],{"class":102},"        x",[92,31085,148],{"class":98},[92,31087,30805],{"class":151},[92,31089,31090],{"class":102},".sig(",[92,31092,30805],{"class":151},[92,31094,31095],{"class":102},".c1(x))\n",[92,31097,31098,31100,31102,31104],{"class":94,"line":2578},[92,31099,31083],{"class":102},[92,31101,148],{"class":98},[92,31103,30805],{"class":151},[92,31105,31106],{"class":102},".s2(x)\n",[92,31108,31109,31111,31113,31115,31117,31119],{"class":94,"line":2583},[92,31110,31083],{"class":102},[92,31112,148],{"class":98},[92,31114,30805],{"class":151},[92,31116,31090],{"class":102},[92,31118,30805],{"class":151},[92,31120,31121],{"class":102},".c3(x))\n",[92,31123,31124,31126,31128,31130],{"class":94,"line":2589},[92,31125,31083],{"class":102},[92,31127,148],{"class":98},[92,31129,30805],{"class":151},[92,31131,31132],{"class":102},".s4(x)\n",[92,31134,31135,31137,31139,31141],{"class":94,"line":2595},[92,31136,31083],{"class":102},[92,31138,148],{"class":98},[92,31140,30805],{"class":151},[92,31142,31143],{"class":102},".flatten(x)\n",[92,31145,31146,31148,31150,31152,31154,31156],{"class":94,"line":2600},[92,31147,31083],{"class":102},[92,31149,148],{"class":98},[92,31151,30805],{"class":151},[92,31153,31090],{"class":102},[92,31155,30805],{"class":151},[92,31157,31158],{"class":102},".f5(x))\n",[92,31160,31161,31163,31165,31167,31169,31171],{"class":94,"line":7928},[92,31162,31083],{"class":102},[92,31164,148],{"class":98},[92,31166,30805],{"class":151},[92,31168,31090],{"class":102},[92,31170,30805],{"class":151},[92,31172,31173],{"class":102},".f6(x))\n",[92,31175,31176,31178,31180,31182],{"class":94,"line":7952},[92,31177,31083],{"class":102},[92,31179,148],{"class":98},[92,31181,30805],{"class":151},[92,31183,31184],{"class":102},".f7(x)\n",[92,31186,31187,31189],{"class":94,"line":7957},[92,31188,14732],{"class":98},[92,31190,31191],{"class":102}," x\n",[92,31193,31194],{"class":94,"line":7963},[92,31195,2379],{"emptyLinePlaceholder":17},[92,31197,31198,31200,31203,31205,31208],{"class":94,"line":7990},[92,31199,1510],{"class":98},[92,31201,31202],{"class":151}," __name__",[92,31204,2928],{"class":98},[92,31206,31207],{"class":207},"\"__main__\"",[92,31209,3718],{"class":102},[92,31211,31212],{"class":94,"line":7995},[92,31213,31214],{"class":161},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[92,31216,31217,31220,31222,31224,31227,31229,31232,31234,31236],{"class":94,"line":8001},[92,31218,31219],{"class":102},"    device",[92,31221,148],{"class":98},[92,31223,30433],{"class":102},[92,31225,31226],{"class":207},"\"cuda\"",[92,31228,1683],{"class":98},[92,31230,31231],{"class":102}," torch.cuda.is_available() ",[92,31233,1680],{"class":98},[92,31235,30458],{"class":207},[92,31237,109],{"class":102},[92,31239,31240],{"class":94,"line":8013},[92,31241,31242],{"class":161},"    # 如果就是想指定用cpu用下方代码:\n",[92,31244,31245],{"class":94,"line":8025},[92,31246,31247],{"class":161},"    # device=\"cpu\"\n",[92,31249,31250],{"class":94,"line":8037},[92,31251,31252],{"class":161},"    # print(device)\n",[92,31254,31255],{"class":94,"line":9696},[92,31256,2379],{"emptyLinePlaceholder":17},[92,31258,31259],{"class":94,"line":9721},[92,31260,31261],{"class":161},"    # 实例化模型\n",[92,31263,31264],{"class":94,"line":9744},[92,31265,31266],{"class":161},"    # 将模型放到设备中去运行\n",[92,31268,31269,31272,31274],{"class":94,"line":9768},[92,31270,31271],{"class":102},"    model",[92,31273,148],{"class":98},[92,31275,31276],{"class":102},"LeNet().to(device)\n",[92,31278,31279,31282,31285,31287,31289,31291,31293,31295],{"class":94,"line":9773},[92,31280,31281],{"class":151},"    print",[92,31283,31284],{"class":102},"(summary(model,(",[92,31286,320],{"class":151},[92,31288,481],{"class":102},[92,31290,1004],{"class":151},[92,31292,481],{"class":102},[92,31294,1004],{"class":151},[92,31296,31297],{"class":102},")))\n",[38,31299,31300],{},[1441,31301],{"alt":10,"src":31302},"\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,31304,31305],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[46,31307,31308],{"start":11},[49,31309,31310],{},"训练",[38,31312,31313],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[38,31315,31316],{},"在训练之前可以将数据展示看一下",[83,31318,31320],{"className":30360,"code":31319,"language":30362,"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,31321,31322,31327,31332,31344,31356,31369,31374,31386,31391,31403,31408,31420,31424,31428,31449,31461,31466,31487,31498,31502,31507,31525,31536,31541,31552,31557,31568,31572,31577,31592,31605,31610,31615,31628,31641,31654,31659,31663,31668,31688,31705,31725,31738,31751,31761,31776],{"__ignoreMap":10},[92,31323,31324],{"class":94,"line":95},[92,31325,31326],{"class":161},"# 建立画图的函数，用于展示数据\n",[92,31328,31329],{"class":94,"line":11},[92,31330,31331],{"class":161},"# torchvision中包含很多内置的数据集\n",[92,31333,31334,31336,31339,31341],{"class":94,"line":1158},[92,31335,30719],{"class":98},[92,31337,31338],{"class":102}," sklearn.externals.array_api_compat.torch ",[92,31340,30374],{"class":98},[92,31342,31343],{"class":102}," squeeze\n",[92,31345,31346,31348,31351,31353],{"class":94,"line":1173},[92,31347,30719],{"class":98},[92,31349,31350],{"class":102}," torchvision.datasets ",[92,31352,30374],{"class":98},[92,31354,31355],{"class":102}," FashionMNIST\n",[92,31357,31358,31360,31363,31366],{"class":94,"line":1179},[92,31359,30374],{"class":98},[92,31361,31362],{"class":102}," numpy ",[92,31364,31365],{"class":98},"as",[92,31367,31368],{"class":102}," np\n",[92,31370,31371],{"class":94,"line":1193},[92,31372,31373],{"class":161},"# 引入处理数据集的包\n",[92,31375,31376,31378,31381,31383],{"class":94,"line":1199},[92,31377,30719],{"class":98},[92,31379,31380],{"class":102}," torchvision ",[92,31382,30374],{"class":98},[92,31384,31385],{"class":102}," transforms\n",[92,31387,31388],{"class":94,"line":1290},[92,31389,31390],{"class":161},"# 从torch库中引入数据处理的包\n",[92,31392,31393,31395,31398,31400],{"class":94,"line":1296},[92,31394,30374],{"class":98},[92,31396,31397],{"class":102}," torch.utils.data ",[92,31399,31365],{"class":98},[92,31401,31402],{"class":102}," Data\n",[92,31404,31405],{"class":94,"line":1308},[92,31406,31407],{"class":161},"# 导入画图的库\n",[92,31409,31410,31412,31415,31417],{"class":94,"line":1591},[92,31411,30374],{"class":98},[92,31413,31414],{"class":102}," matplotlib.pyplot ",[92,31416,31365],{"class":98},[92,31418,31419],{"class":102}," plt\n",[92,31421,31422],{"class":94,"line":1596},[92,31423,2379],{"emptyLinePlaceholder":17},[92,31425,31426],{"class":94,"line":1602},[92,31427,2379],{"emptyLinePlaceholder":17},[92,31429,31430,31433,31435,31438,31441,31443,31446],{"class":94,"line":1607},[92,31431,31432],{"class":102},"train_data",[92,31434,148],{"class":98},[92,31436,31437],{"class":102},"FashionMNIST(",[92,31439,31440],{"class":5196},"root",[92,31442,148],{"class":98},[92,31444,31445],{"class":207},"'.\u002Fdata'",[92,31447,31448],{"class":102},",\n",[92,31450,31451,31454,31456,31459],{"class":94,"line":1621},[92,31452,31453],{"class":5196},"                        train",[92,31455,148],{"class":98},[92,31457,31458],{"class":151},"True",[92,31460,31448],{"class":102},[92,31462,31463],{"class":94,"line":1626},[92,31464,31465],{"class":161},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[92,31467,31468,31471,31473,31476,31479,31481,31484],{"class":94,"line":1632},[92,31469,31470],{"class":5196},"                        transform",[92,31472,148],{"class":98},[92,31474,31475],{"class":102},"transforms.Compose([transforms.Resize(",[92,31477,31478],{"class":5196},"size",[92,31480,148],{"class":98},[92,31482,31483],{"class":151},"224",[92,31485,31486],{"class":102},"),transforms.ToTensor()]),\n",[92,31488,31489,31492,31494,31496],{"class":94,"line":1653},[92,31490,31491],{"class":5196},"                        download",[92,31493,148],{"class":98},[92,31495,31458],{"class":151},[92,31497,109],{"class":102},[92,31499,31500],{"class":94,"line":1658},[92,31501,2379],{"emptyLinePlaceholder":17},[92,31503,31504],{"class":94,"line":1672},[92,31505,31506],{"class":161},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[92,31508,31509,31512,31514,31517,31520,31522],{"class":94,"line":1677},[92,31510,31511],{"class":102},"train_loader",[92,31513,148],{"class":98},[92,31515,31516],{"class":102},"Data.DataLoader(",[92,31518,31519],{"class":5196},"dataset",[92,31521,148],{"class":98},[92,31523,31524],{"class":102},"train_data,\n",[92,31526,31527,31530,31532,31534],{"class":94,"line":1706},[92,31528,31529],{"class":5196},"                             batch_size",[92,31531,148],{"class":98},[92,31533,306],{"class":151},[92,31535,31448],{"class":102},[92,31537,31538],{"class":94,"line":1711},[92,31539,31540],{"class":161},"                             # 数据是否打乱\n",[92,31542,31543,31546,31548,31550],{"class":94,"line":1728},[92,31544,31545],{"class":5196},"                             shuffle",[92,31547,148],{"class":98},[92,31549,31458],{"class":151},[92,31551,31448],{"class":102},[92,31553,31554],{"class":94,"line":1733},[92,31555,31556],{"class":161},"                             # 规定加载数据的进程\n",[92,31558,31559,31562,31564,31566],{"class":94,"line":1738},[92,31560,31561],{"class":5196},"                             num_workers",[92,31563,148],{"class":98},[92,31565,294],{"class":151},[92,31567,109],{"class":102},[92,31569,31570],{"class":94,"line":1743},[92,31571,2379],{"emptyLinePlaceholder":17},[92,31573,31574],{"class":94,"line":1757},[92,31575,31576],{"class":161},"# 获得一个batch的数据\n",[92,31578,31579,31581,31584,31586,31589],{"class":94,"line":1762},[92,31580,3004],{"class":98},[92,31582,31583],{"class":102}," step,(b_x,b_y) ",[92,31585,26025],{"class":98},[92,31587,31588],{"class":151}," enumerate",[92,31590,31591],{"class":102},"(train_loader):\n",[92,31593,31594,31596,31599,31601,31603],{"class":94,"line":2556},[92,31595,3080],{"class":98},[92,31597,31598],{"class":102}," step ",[92,31600,1063],{"class":98},[92,31602,4072],{"class":151},[92,31604,3718],{"class":102},[92,31606,31607],{"class":94,"line":2570},[92,31608,31609],{"class":98},"        break\n",[92,31611,31612],{"class":94,"line":2578},[92,31613,31614],{"class":161},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[92,31616,31617,31620,31622,31625],{"class":94,"line":2583},[92,31618,31619],{"class":102},"batch_x",[92,31621,148],{"class":98},[92,31623,31624],{"class":102},"b_x.squeeze().numpy()  ",[92,31626,31627],{"class":161},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[92,31629,31630,31633,31635,31638],{"class":94,"line":2589},[92,31631,31632],{"class":102},"batch_y",[92,31634,148],{"class":98},[92,31636,31637],{"class":102},"b_y.numpy()   ",[92,31639,31640],{"class":161},"#将张量转换成功numpy数组\n",[92,31642,31643,31646,31648,31651],{"class":94,"line":2595},[92,31644,31645],{"class":102},"class_label",[92,31647,148],{"class":98},[92,31649,31650],{"class":102},"train_data.classes  ",[92,31652,31653],{"class":161},"#训练集标签\n",[92,31655,31656],{"class":94,"line":2600},[92,31657,31658],{"class":161},"# print(class_label)\n",[92,31660,31661],{"class":94,"line":7928},[92,31662,2379],{"emptyLinePlaceholder":17},[92,31664,31665],{"class":94,"line":7952},[92,31666,31667],{"class":161},"# 可视化一个batch的图像\n",[92,31669,31670,31673,31676,31678,31680,31682,31684,31686],{"class":94,"line":7957},[92,31671,31672],{"class":102},"plt.figure(",[92,31674,31675],{"class":5196},"figsize",[92,31677,148],{"class":98},[92,31679,103],{"class":102},[92,31681,601],{"class":151},[92,31683,481],{"class":102},[92,31685,422],{"class":151},[92,31687,30479],{"class":102},[92,31689,31690,31692,31695,31697,31700,31702],{"class":94,"line":7963},[92,31691,3004],{"class":98},[92,31693,31694],{"class":102}," ii ",[92,31696,26025],{"class":98},[92,31698,31699],{"class":102}," np.arange(",[92,31701,7338],{"class":151},[92,31703,31704],{"class":102},"(batch_y)):\n",[92,31706,31707,31710,31712,31714,31716,31719,31721,31723],{"class":94,"line":7990},[92,31708,31709],{"class":102},"    plt.subplot(",[92,31711,396],{"class":151},[92,31713,481],{"class":102},[92,31715,704],{"class":151},[92,31717,31718],{"class":102},",ii ",[92,31720,584],{"class":98},[92,31722,25100],{"class":151},[92,31724,109],{"class":102},[92,31726,31727,31730,31733,31735],{"class":94,"line":7995},[92,31728,31729],{"class":102},"    plt.imshow(batch_x[ii,:,:],",[92,31731,31732],{"class":5196},"cmap",[92,31734,148],{"class":98},[92,31736,31737],{"class":102},"plt.cm.gray)\n",[92,31739,31740,31743,31745,31747,31749],{"class":94,"line":8001},[92,31741,31742],{"class":102},"    plt.title(class_label[batch_y[ii]],",[92,31744,31478],{"class":5196},[92,31746,148],{"class":98},[92,31748,549],{"class":151},[92,31750,109],{"class":102},[92,31752,31753,31756,31759],{"class":94,"line":8013},[92,31754,31755],{"class":102},"    plt.axis(",[92,31757,31758],{"class":207},"\"off\"",[92,31760,109],{"class":102},[92,31762,31763,31766,31769,31771,31774],{"class":94,"line":8025},[92,31764,31765],{"class":102},"    plt.subplots_adjust(",[92,31767,31768],{"class":5196},"wspace",[92,31770,148],{"class":98},[92,31772,31773],{"class":151},"0.05",[92,31775,109],{"class":102},[92,31777,31778],{"class":94,"line":8037},[92,31779,31780],{"class":102},"plt.show()\n",[38,31782,31783],{},"用matplotlib进行展示的过程可以后续再补",[38,31785,31786],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[38,31788,31789],{},"训练次数就是按照批次过整个训练集数据的次数",[38,31791,31792],{},"模型训练：",[83,31794,31796],{"className":30360,"code":31795,"language":30362,"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,31797,31798,31805,31812,31816,31828,31834,31845,31855,31865,31875,31885,31890,31902,31912,31916,31920,31925,31936,31949,31960,31977,31988,32027,32043,32055,32066,32071,32082,32098,32109,32120,32131,32138,32142,32147,32152,32156,32161,32171,32192,32196,32200,32205,32210,32215,32235,32239,32244,32254,32258,32263,32272,32277,32282,32287,32297,32301,32305,32310,32315,32325,32330,32340,32345,32354,32359,32368,32373,32382,32386,32391,32401,32405,32409,32414,32429,32457,32472,32476,32481,32486,32495,32500,32509,32514,32523,32528,32537,32542,32551,32556,32565,32570,32583,32588,32598,32603,32613,32619,32625,32631,32637,32648,32654,32674,32680,32691,32697,32703,32709,32715,32721,32727,32733,32753,32759,32775,32781,32795,32801,32816,32822,32831,32837,32846,32852,32858,32867,32873,32884,32890,32909,32915,32926,32932,32952,32968,32974,32988,32994,33000,33011,33017,33023,33033,33039,33050,33056,33066,33071,33077,33126,33173,33178,33184,33203,33209,33229,33235,33241,33251,33256,33262,33278,33323,33329,33335,33341,33352,33358,33364,33370,33388,33402,33411,33420,33429,33438,33444,33450,33458,33463,33469,33480,33486,33506,33512,33518,33524,33541,33547,33553,33559,33565,33571,33598,33622,33628,33634,33640,33651,33662,33668,33685,33708,33731,33737,33742,33751,33761,33767,33772,33778,33791,33797,33808,33819,33838],{"__ignoreMap":10},[92,31799,31800,31802],{"class":94,"line":95},[92,31801,30374],{"class":98},[92,31803,31804],{"class":102}," copy\n",[92,31806,31807,31809],{"class":94,"line":11},[92,31808,30374],{"class":98},[92,31810,31811],{"class":102}," time\n",[92,31813,31814],{"class":94,"line":1158},[92,31815,2379],{"emptyLinePlaceholder":17},[92,31817,31818,31820,31823,31825],{"class":94,"line":1173},[92,31819,30374],{"class":98},[92,31821,31822],{"class":102}," pandas ",[92,31824,31365],{"class":98},[92,31826,31827],{"class":102}," pd\n",[92,31829,31830,31832],{"class":94,"line":1179},[92,31831,30374],{"class":98},[92,31833,30377],{"class":102},[92,31835,31836,31838,31840,31842],{"class":94,"line":1193},[92,31837,30719],{"class":98},[92,31839,31397],{"class":102},[92,31841,30374],{"class":98},[92,31843,31844],{"class":102}," Dataset\n",[92,31846,31847,31849,31851,31853],{"class":94,"line":1199},[92,31848,30719],{"class":98},[92,31850,31350],{"class":102},[92,31852,30374],{"class":98},[92,31854,31355],{"class":102},[92,31856,31857,31859,31861,31863],{"class":94,"line":1290},[92,31858,30719],{"class":98},[92,31860,31380],{"class":102},[92,31862,30374],{"class":98},[92,31864,31385],{"class":102},[92,31866,31867,31869,31871,31873],{"class":94,"line":1296},[92,31868,30374],{"class":98},[92,31870,31397],{"class":102},[92,31872,31365],{"class":98},[92,31874,31402],{"class":102},[92,31876,31877,31879,31881,31883],{"class":94,"line":1308},[92,31878,30374],{"class":98},[92,31880,31414],{"class":102},[92,31882,31365],{"class":98},[92,31884,31419],{"class":102},[92,31886,31887],{"class":94,"line":1591},[92,31888,31889],{"class":161},"# 导入模型\n",[92,31891,31892,31894,31897,31899],{"class":94,"line":1596},[92,31893,30719],{"class":98},[92,31895,31896],{"class":102}," model ",[92,31898,30374],{"class":98},[92,31900,31901],{"class":102}," LeNet\n",[92,31903,31904,31906,31908,31910],{"class":94,"line":1602},[92,31905,30719],{"class":98},[92,31907,30722],{"class":102},[92,31909,30374],{"class":98},[92,31911,30727],{"class":102},[92,31913,31914],{"class":94,"line":1607},[92,31915,2379],{"emptyLinePlaceholder":17},[92,31917,31918],{"class":94,"line":1621},[92,31919,2379],{"emptyLinePlaceholder":17},[92,31921,31922],{"class":94,"line":1626},[92,31923,31924],{"class":161},"# 处理训练集与验证集函数--->划分数据集\n",[92,31926,31927,31930,31933],{"class":94,"line":1632},[92,31928,31929],{"class":98},"def",[92,31931,31932],{"class":1942}," train_val_data_process",[92,31934,31935],{"class":102},"():\n",[92,31937,31938,31941,31943,31945,31947],{"class":94,"line":1653},[92,31939,31940],{"class":102},"    train_data",[92,31942,148],{"class":98},[92,31944,31437],{"class":102},[92,31946,31445],{"class":207},[92,31948,31448],{"class":102},[92,31950,31951,31954,31956,31958],{"class":94,"line":1658},[92,31952,31953],{"class":5196},"                            train",[92,31955,148],{"class":98},[92,31957,31458],{"class":151},[92,31959,31448],{"class":102},[92,31961,31962,31965,31967,31969,31971,31973,31975],{"class":94,"line":1672},[92,31963,31964],{"class":5196},"                            transform",[92,31966,148],{"class":98},[92,31968,31475],{"class":102},[92,31970,31478],{"class":5196},[92,31972,148],{"class":98},[92,31974,1004],{"class":151},[92,31976,31486],{"class":102},[92,31978,31979,31982,31984,31986],{"class":94,"line":1677},[92,31980,31981],{"class":5196},"                            download",[92,31983,148],{"class":98},[92,31985,31458],{"class":151},[92,31987,109],{"class":102},[92,31989,31990,31993,31995,31998,32001,32003,32006,32008,32010,32013,32015,32017,32020,32022,32024],{"class":94,"line":1706},[92,31991,31992],{"class":102},"    train_data,val_data",[92,31994,148],{"class":98},[92,31996,31997],{"class":102},"Data.random_split(train_data,[",[92,31999,32000],{"class":151},"round",[92,32002,103],{"class":102},[92,32004,32005],{"class":151},"0.8",[92,32007,558],{"class":98},[92,32009,7338],{"class":151},[92,32011,32012],{"class":102},"(train_data)),",[92,32014,32000],{"class":151},[92,32016,103],{"class":102},[92,32018,32019],{"class":151},"0.2",[92,32021,558],{"class":98},[92,32023,7338],{"class":151},[92,32025,32026],{"class":102},"(train_data))])\n",[92,32028,32029,32032,32034,32037,32039,32041],{"class":94,"line":1711},[92,32030,32031],{"class":102},"    train_dataloader ",[92,32033,148],{"class":98},[92,32035,32036],{"class":102}," Data.DataLoader(",[92,32038,31519],{"class":5196},[92,32040,148],{"class":98},[92,32042,31524],{"class":102},[92,32044,32045,32048,32050,32053],{"class":94,"line":1728},[92,32046,32047],{"class":5196},"                                       batch_size",[92,32049,148],{"class":98},[92,32051,32052],{"class":151},"128",[92,32054,31448],{"class":102},[92,32056,32057,32060,32062,32064],{"class":94,"line":1733},[92,32058,32059],{"class":5196},"                                       shuffle",[92,32061,148],{"class":98},[92,32063,31458],{"class":151},[92,32065,31448],{"class":102},[92,32067,32068],{"class":94,"line":1738},[92,32069,32070],{"class":161},"                                       # 规定8个进程\n",[92,32072,32073,32076,32078,32080],{"class":94,"line":1743},[92,32074,32075],{"class":5196},"                                       num_workers",[92,32077,148],{"class":98},[92,32079,498],{"class":151},[92,32081,109],{"class":102},[92,32083,32084,32087,32089,32091,32093,32095],{"class":94,"line":1757},[92,32085,32086],{"class":102},"    val_dataloader",[92,32088,148],{"class":98},[92,32090,31516],{"class":102},[92,32092,31519],{"class":5196},[92,32094,148],{"class":98},[92,32096,32097],{"class":102},"val_data,\n",[92,32099,32100,32103,32105,32107],{"class":94,"line":1762},[92,32101,32102],{"class":5196},"                                   batch_size",[92,32104,148],{"class":98},[92,32106,32052],{"class":151},[92,32108,31448],{"class":102},[92,32110,32111,32114,32116,32118],{"class":94,"line":2556},[92,32112,32113],{"class":5196},"                                   shuffle",[92,32115,148],{"class":98},[92,32117,31458],{"class":151},[92,32119,31448],{"class":102},[92,32121,32122,32125,32127,32129],{"class":94,"line":2570},[92,32123,32124],{"class":5196},"                                   num_workers",[92,32126,148],{"class":98},[92,32128,498],{"class":151},[92,32130,109],{"class":102},[92,32132,32133,32135],{"class":94,"line":2578},[92,32134,4069],{"class":98},[92,32136,32137],{"class":102}," train_dataloader,val_dataloader\n",[92,32139,32140],{"class":94,"line":2583},[92,32141,2379],{"emptyLinePlaceholder":17},[92,32143,32144],{"class":94,"line":2589},[92,32145,32146],{"class":161},"# 验证是否出错\n",[92,32148,32149],{"class":94,"line":2595},[92,32150,32151],{"class":161},"# train_val_data_process()\n",[92,32153,32154],{"class":94,"line":2600},[92,32155,2379],{"emptyLinePlaceholder":17},[92,32157,32158],{"class":94,"line":7928},[92,32159,32160],{"class":161},"# 定义模型训练函数\n",[92,32162,32163,32165,32168],{"class":94,"line":7952},[92,32164,31929],{"class":98},[92,32166,32167],{"class":1942}," train_model_process",[92,32169,32170],{"class":102},"(model,train_dataloader,val_dataloader,num_epochs):\n",[92,32172,32173,32175,32177,32179,32181,32183,32185,32187,32190],{"class":94,"line":7957},[92,32174,31219],{"class":102},[92,32176,148],{"class":98},[92,32178,30433],{"class":102},[92,32180,31226],{"class":207},[92,32182,1683],{"class":98},[92,32184,31231],{"class":102},[92,32186,1680],{"class":98},[92,32188,32189],{"class":207}," 'cpu'",[92,32191,109],{"class":102},[92,32193,32194],{"class":94,"line":7963},[92,32195,2379],{"emptyLinePlaceholder":17},[92,32197,32198],{"class":94,"line":7990},[92,32199,2379],{"emptyLinePlaceholder":17},[92,32201,32202],{"class":94,"line":7995},[92,32203,32204],{"class":161},"    # 定义优化器\n",[92,32206,32207],{"class":94,"line":8001},[92,32208,32209],{"class":161},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[92,32211,32212],{"class":94,"line":8013},[92,32213,32214],{"class":161},"    # lr为学习率\n",[92,32216,32217,32220,32222,32225,32228,32230,32233],{"class":94,"line":8025},[92,32218,32219],{"class":102},"    optimizer",[92,32221,148],{"class":98},[92,32223,32224],{"class":102},"torch.optim.Adam(model.parameters(),",[92,32226,32227],{"class":5196},"lr",[92,32229,148],{"class":98},[92,32231,32232],{"class":151},"0.001",[92,32234,109],{"class":102},[92,32236,32237],{"class":94,"line":8037},[92,32238,2379],{"emptyLinePlaceholder":17},[92,32240,32241],{"class":94,"line":9696},[92,32242,32243],{"class":161},"    # 定义损失函数使用交叉熵损失函数\n",[92,32245,32246,32249,32251],{"class":94,"line":9721},[92,32247,32248],{"class":102},"    criterion",[92,32250,148],{"class":98},[92,32252,32253],{"class":102},"nn.CrossEntropyLoss()\n",[92,32255,32256],{"class":94,"line":9744},[92,32257,2379],{"emptyLinePlaceholder":17},[92,32259,32260],{"class":94,"line":9768},[92,32261,32262],{"class":161},"    # 将模型放到GPU中进行训练\n",[92,32264,32265,32267,32269],{"class":94,"line":9773},[92,32266,31271],{"class":102},[92,32268,148],{"class":98},[92,32270,32271],{"class":102},"model.to(device)\n",[92,32273,32274],{"class":94,"line":9778},[92,32275,32276],{"class":161},"    # 复制当前模型的参数\n",[92,32278,32279],{"class":94,"line":9783},[92,32280,32281],{"class":161},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[92,32283,32284],{"class":94,"line":9792},[92,32285,32286],{"class":161},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[92,32288,32289,32292,32294],{"class":94,"line":9797},[92,32290,32291],{"class":102},"    best_model_wts",[92,32293,148],{"class":98},[92,32295,32296],{"class":102},"copy.deepcopy(model.state_dict())\n",[92,32298,32299],{"class":94,"line":9803},[92,32300,2379],{"emptyLinePlaceholder":17},[92,32302,32303],{"class":94,"line":9824},[92,32304,2379],{"emptyLinePlaceholder":17},[92,32306,32307],{"class":94,"line":9830},[92,32308,32309],{"class":161},"    # 初始化参数\n",[92,32311,32312],{"class":94,"line":9844},[92,32313,32314],{"class":161},"    # 最高准确度\n",[92,32316,32317,32320,32322],{"class":94,"line":9850},[92,32318,32319],{"class":102},"    best_acc",[92,32321,148],{"class":98},[92,32323,32324],{"class":151},"0.0\n",[92,32326,32327],{"class":94,"line":9877},[92,32328,32329],{"class":161},"    # 训练集损失列表\n",[92,32331,32332,32335,32337],{"class":94,"line":9886},[92,32333,32334],{"class":102},"    train_loss_all",[92,32336,148],{"class":98},[92,32338,32339],{"class":102},"[]\n",[92,32341,32342],{"class":94,"line":9892},[92,32343,32344],{"class":161},"    # 验证集函数列表\n",[92,32346,32347,32350,32352],{"class":94,"line":9900},[92,32348,32349],{"class":102},"    val_loss_all",[92,32351,148],{"class":98},[92,32353,32339],{"class":102},[92,32355,32356],{"class":94,"line":9905},[92,32357,32358],{"class":161},"    # 训练集准确度列表\n",[92,32360,32361,32364,32366],{"class":94,"line":16584},[92,32362,32363],{"class":102},"    train_acc_all",[92,32365,148],{"class":98},[92,32367,32339],{"class":102},[92,32369,32370],{"class":94,"line":16590},[92,32371,32372],{"class":161},"    # 验证集准确度列表\n",[92,32374,32375,32378,32380],{"class":94,"line":16613},[92,32376,32377],{"class":102},"    val_acc_all",[92,32379,148],{"class":98},[92,32381,32339],{"class":102},[92,32383,32384],{"class":94,"line":16619},[92,32385,2379],{"emptyLinePlaceholder":17},[92,32387,32388],{"class":94,"line":16642},[92,32389,32390],{"class":161},"    # 保存当前时间--->方便看每轮训练的时间\n",[92,32392,32393,32396,32398],{"class":94,"line":16656},[92,32394,32395],{"class":102},"    since",[92,32397,148],{"class":98},[92,32399,32400],{"class":102},"time.time()\n",[92,32402,32403],{"class":94,"line":16676},[92,32404,2379],{"emptyLinePlaceholder":17},[92,32406,32407],{"class":94,"line":16682},[92,32408,2379],{"emptyLinePlaceholder":17},[92,32410,32411],{"class":94,"line":16693},[92,32412,32413],{"class":161},"    # 准备工作完成--->开始训练模型\n",[92,32415,32416,32418,32421,32423,32426],{"class":94,"line":16716},[92,32417,3180],{"class":98},[92,32419,32420],{"class":102}," epoch ",[92,32422,26025],{"class":98},[92,32424,32425],{"class":151}," range",[92,32427,32428],{"class":102},"(num_epochs):\n",[92,32430,32431,32434,32436,32439,32442,32444,32446,32448,32451,32453,32455],{"class":94,"line":16738},[92,32432,32433],{"class":151},"        print",[92,32435,103],{"class":102},[92,32437,32438],{"class":207},"\"Epoch ",[92,32440,32441],{"class":151},"{}",[92,32443,687],{"class":207},[92,32445,32441],{"class":151},[92,32447,354],{"class":207},[92,32449,32450],{"class":102},".format(epoch,num_epochs",[92,32452,635],{"class":98},[92,32454,320],{"class":151},[92,32456,30479],{"class":102},[92,32458,32459,32461,32463,32466,32468,32470],{"class":94,"line":16743},[92,32460,32433],{"class":151},[92,32462,103],{"class":102},[92,32464,32465],{"class":207},"\"-\"",[92,32467,558],{"class":98},[92,32469,549],{"class":151},[92,32471,109],{"class":102},[92,32473,32474],{"class":94,"line":16749},[92,32475,2379],{"emptyLinePlaceholder":17},[92,32477,32478],{"class":94,"line":16763},[92,32479,32480],{"class":161},"        # 初始化参数\n",[92,32482,32483],{"class":94,"line":16776},[92,32484,32485],{"class":161},"        # 训练集损失函数\n",[92,32487,32488,32491,32493],{"class":94,"line":16781},[92,32489,32490],{"class":102},"        train_loss",[92,32492,148],{"class":98},[92,32494,32324],{"class":151},[92,32496,32497],{"class":94,"line":16795},[92,32498,32499],{"class":161},"        # 训练集准确度\n",[92,32501,32502,32505,32507],{"class":94,"line":16800},[92,32503,32504],{"class":102},"        train_corrects",[92,32506,148],{"class":98},[92,32508,3064],{"class":151},[92,32510,32511],{"class":94,"line":16806},[92,32512,32513],{"class":161},"        # 验证集损失函数\n",[92,32515,32516,32519,32521],{"class":94,"line":16811},[92,32517,32518],{"class":102},"        val_loss",[92,32520,148],{"class":98},[92,32522,32324],{"class":151},[92,32524,32525],{"class":94,"line":16825},[92,32526,32527],{"class":161},"        # 验证集准确度\n",[92,32529,32530,32533,32535],{"class":94,"line":16830},[92,32531,32532],{"class":102},"        val_corrects",[92,32534,148],{"class":98},[92,32536,3064],{"class":151},[92,32538,32539],{"class":94,"line":16835},[92,32540,32541],{"class":161},"        # 训练集样本数量\n",[92,32543,32544,32547,32549],{"class":94,"line":16849},[92,32545,32546],{"class":102},"        train_num",[92,32548,148],{"class":98},[92,32550,3064],{"class":151},[92,32552,32553],{"class":94,"line":16861},[92,32554,32555],{"class":161},"        # 验证集样本数量\n",[92,32557,32558,32561,32563],{"class":94,"line":16866},[92,32559,32560],{"class":102},"        val_num",[92,32562,148],{"class":98},[92,32564,3064],{"class":151},[92,32566,32567],{"class":94,"line":16879},[92,32568,32569],{"class":161},"        # 将数据放到设备,并开始训练\n",[92,32571,32572,32574,32576,32578,32580],{"class":94,"line":16884},[92,32573,3382],{"class":98},[92,32575,31583],{"class":102},[92,32577,26025],{"class":98},[92,32579,31588],{"class":151},[92,32581,32582],{"class":102},"(train_dataloader):\n",[92,32584,32585],{"class":94,"line":16889},[92,32586,32587],{"class":161},"            # 将特征放入到训练设备\n",[92,32589,32590,32593,32595],{"class":94,"line":16894},[92,32591,32592],{"class":102},"            b_x",[92,32594,148],{"class":98},[92,32596,32597],{"class":102},"b_x.to(device)\n",[92,32599,32600],{"class":94,"line":16907},[92,32601,32602],{"class":161},"            # 将标签放入到训练设备当中\n",[92,32604,32605,32608,32610],{"class":94,"line":16912},[92,32606,32607],{"class":102},"            b_y",[92,32609,148],{"class":98},[92,32611,32612],{"class":102},"b_y.to(device)\n",[92,32614,32616],{"class":94,"line":32615},98,[92,32617,32618],{"class":161},"            # 设置模型为训练模式\n",[92,32620,32622],{"class":94,"line":32621},99,[92,32623,32624],{"class":102},"            model.train()\n",[92,32626,32628],{"class":94,"line":32627},100,[92,32629,32630],{"class":161},"            # 将数据放到模型当中,开始前向传播\n",[92,32632,32634],{"class":94,"line":32633},101,[92,32635,32636],{"class":161},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[92,32638,32640,32643,32645],{"class":94,"line":32639},102,[92,32641,32642],{"class":102},"            output",[92,32644,148],{"class":98},[92,32646,32647],{"class":102},"model(b_x)\n",[92,32649,32651],{"class":94,"line":32650},103,[92,32652,32653],{"class":161},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[92,32655,32657,32660,32662,32665,32668,32670,32672],{"class":94,"line":32656},104,[92,32658,32659],{"class":102},"            pre_lab",[92,32661,148],{"class":98},[92,32663,32664],{"class":102},"torch.argmax(output,",[92,32666,32667],{"class":5196},"dim",[92,32669,148],{"class":98},[92,32671,320],{"class":151},[92,32673,109],{"class":102},[92,32675,32677],{"class":94,"line":32676},105,[92,32678,32679],{"class":161},"            # 计算每一个batch的损失函数\n",[92,32681,32683,32686,32688],{"class":94,"line":32682},106,[92,32684,32685],{"class":102},"            loss",[92,32687,148],{"class":98},[92,32689,32690],{"class":102},"criterion(output,b_y)\n",[92,32692,32694],{"class":94,"line":32693},107,[92,32695,32696],{"class":161},"            # 将梯度初始化为0\n",[92,32698,32700],{"class":94,"line":32699},108,[92,32701,32702],{"class":102},"            optimizer.zero_grad()\n",[92,32704,32706],{"class":94,"line":32705},109,[92,32707,32708],{"class":161},"            # 梯度置为0后再进行反向传播\n",[92,32710,32712],{"class":94,"line":32711},110,[92,32713,32714],{"class":102},"            loss.backward()\n",[92,32716,32718],{"class":94,"line":32717},111,[92,32719,32720],{"class":161},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[92,32722,32724],{"class":94,"line":32723},112,[92,32725,32726],{"class":102},"            optimizer.step()\n",[92,32728,32730],{"class":94,"line":32729},113,[92,32731,32732],{"class":161},"            # loss.item()指的是batch的平均损失\n",[92,32734,32736,32739,32741,32744,32746,32749,32751],{"class":94,"line":32735},114,[92,32737,32738],{"class":102},"            train_loss",[92,32740,9457],{"class":98},[92,32742,32743],{"class":102},"loss.item()",[92,32745,558],{"class":98},[92,32747,32748],{"class":102},"b_x.size(",[92,32750,294],{"class":151},[92,32752,109],{"class":102},[92,32754,32756],{"class":94,"line":32755},115,[92,32757,32758],{"class":161},"            # 计算每个批次中正确预测的数量\n",[92,32760,32762,32765,32767,32770,32772],{"class":94,"line":32761},116,[92,32763,32764],{"class":102},"            train_corrects",[92,32766,9457],{"class":98},[92,32768,32769],{"class":102},"torch.sum(pre_lab",[92,32771,2928],{"class":98},[92,32773,32774],{"class":102},"b_y.data)\n",[92,32776,32778],{"class":94,"line":32777},117,[92,32779,32780],{"class":161},"            # 计算目前为止一共处理了多少样本\n",[92,32782,32784,32787,32789,32791,32793],{"class":94,"line":32783},118,[92,32785,32786],{"class":102},"            train_num",[92,32788,9457],{"class":98},[92,32790,32748],{"class":102},[92,32792,294],{"class":151},[92,32794,109],{"class":102},[92,32796,32798],{"class":94,"line":32797},119,[92,32799,32800],{"class":161},"        # 验证数据\n",[92,32802,32804,32806,32809,32811,32813],{"class":94,"line":32803},120,[92,32805,3382],{"class":98},[92,32807,32808],{"class":102}," step ,(b_x,b_y) ",[92,32810,26025],{"class":98},[92,32812,31588],{"class":151},[92,32814,32815],{"class":102},"(val_dataloader):\n",[92,32817,32819],{"class":94,"line":32818},121,[92,32820,32821],{"class":161},"            # 将特征放到验证设备当中\n",[92,32823,32825,32827,32829],{"class":94,"line":32824},122,[92,32826,32592],{"class":102},[92,32828,148],{"class":98},[92,32830,32597],{"class":102},[92,32832,32834],{"class":94,"line":32833},123,[92,32835,32836],{"class":161},"            # 将标签放到放到训练设备当中\n",[92,32838,32840,32842,32844],{"class":94,"line":32839},124,[92,32841,32607],{"class":102},[92,32843,148],{"class":98},[92,32845,32612],{"class":102},[92,32847,32849],{"class":94,"line":32848},125,[92,32850,32851],{"class":161},"            # 开启验证模式，设置模型为评估模式\n",[92,32853,32855],{"class":94,"line":32854},126,[92,32856,32857],{"class":102},"            model.eval()\n",[92,32859,32861,32864],{"class":94,"line":32860},127,[92,32862,32863],{"class":98},"            with",[92,32865,32866],{"class":102}," torch.no_grad():\n",[92,32868,32870],{"class":94,"line":32869},128,[92,32871,32872],{"class":161},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[92,32874,32876,32879,32881],{"class":94,"line":32875},129,[92,32877,32878],{"class":102},"                output ",[92,32880,148],{"class":98},[92,32882,32883],{"class":102}," model(b_x)\n",[92,32885,32887],{"class":94,"line":32886},130,[92,32888,32889],{"class":161},"                # 查找每一行中最大值对应的下标\n",[92,32891,32893,32896,32898,32901,32903,32905,32907],{"class":94,"line":32892},131,[92,32894,32895],{"class":102},"                pre_lab ",[92,32897,148],{"class":98},[92,32899,32900],{"class":102}," torch.argmax(output, ",[92,32902,32667],{"class":5196},[92,32904,148],{"class":98},[92,32906,320],{"class":151},[92,32908,109],{"class":102},[92,32910,32912],{"class":94,"line":32911},132,[92,32913,32914],{"class":161},"                # 计算验证集上的当前 batch 损失\n",[92,32916,32918,32921,32923],{"class":94,"line":32917},133,[92,32919,32920],{"class":102},"                val_batch_loss ",[92,32922,148],{"class":98},[92,32924,32925],{"class":102}," criterion(output, b_y)\n",[92,32927,32929],{"class":94,"line":32928},134,[92,32930,32931],{"class":161},"                # 对损失函数进行累加（按样本数加权）\n",[92,32933,32935,32938,32940,32943,32945,32948,32950],{"class":94,"line":32934},135,[92,32936,32937],{"class":102},"                val_loss ",[92,32939,9457],{"class":98},[92,32941,32942],{"class":102}," val_batch_loss.item() ",[92,32944,558],{"class":98},[92,32946,32947],{"class":102}," b_x.size(",[92,32949,294],{"class":151},[92,32951,109],{"class":102},[92,32953,32955,32958,32960,32963,32965],{"class":94,"line":32954},136,[92,32956,32957],{"class":102},"                val_corrects ",[92,32959,9457],{"class":98},[92,32961,32962],{"class":102}," torch.sum(pre_lab ",[92,32964,2928],{"class":98},[92,32966,32967],{"class":102}," b_y.data)\n",[92,32969,32971],{"class":94,"line":32970},137,[92,32972,32973],{"class":161},"                # 当前用于验证的样本数量\n",[92,32975,32977,32980,32982,32984,32986],{"class":94,"line":32976},138,[92,32978,32979],{"class":102},"            val_num ",[92,32981,9457],{"class":98},[92,32983,32947],{"class":102},[92,32985,294],{"class":151},[92,32987,109],{"class":102},[92,32989,32991],{"class":94,"line":32990},139,[92,32992,32993],{"class":161},"        # 计算并保存每一次迭代的loss值和准确率\n",[92,32995,32997],{"class":94,"line":32996},140,[92,32998,32999],{"class":161},"        # 计算并保存训练集的loss值\n",[92,33001,33003,33006,33008],{"class":94,"line":33002},141,[92,33004,33005],{"class":102},"        train_loss_all.append(train_loss",[92,33007,687],{"class":98},[92,33009,33010],{"class":102},"train_num)\n",[92,33012,33014],{"class":94,"line":33013},142,[92,33015,33016],{"class":161},"        # 取双精度\n",[92,33018,33020],{"class":94,"line":33019},143,[92,33021,33022],{"class":161},"        # 计算并保存训练集的准确率\n",[92,33024,33026,33029,33031],{"class":94,"line":33025},144,[92,33027,33028],{"class":102},"        train_acc_all.append(train_corrects.double().item()",[92,33030,687],{"class":98},[92,33032,33010],{"class":102},[92,33034,33036],{"class":94,"line":33035},145,[92,33037,33038],{"class":161},"        # 计算并保存验证集的loss值\n",[92,33040,33042,33045,33047],{"class":94,"line":33041},146,[92,33043,33044],{"class":102},"        val_loss_all.append(val_loss",[92,33046,687],{"class":98},[92,33048,33049],{"class":102},"val_num)\n",[92,33051,33053],{"class":94,"line":33052},147,[92,33054,33055],{"class":161},"        # 计算并保存验证集的准确率\n",[92,33057,33059,33062,33064],{"class":94,"line":33058},148,[92,33060,33061],{"class":102},"        val_acc_all.append(val_corrects.double().item()",[92,33063,687],{"class":98},[92,33065,33049],{"class":102},[92,33067,33069],{"class":94,"line":33068},149,[92,33070,2379],{"emptyLinePlaceholder":17},[92,33072,33074],{"class":94,"line":33073},150,[92,33075,33076],{"class":161},"        # 打印训练一轮的loss值和准确率\n",[92,33078,33080,33082,33084,33086,33088,33091,33093,33096,33098,33101,33103,33105,33107,33109,33112,33114,33116,33119,33121,33123],{"class":94,"line":33079},151,[92,33081,32433],{"class":151},[92,33083,103],{"class":102},[92,33085,3571],{"class":207},[92,33087,32441],{"class":151},[92,33089,33090],{"class":207},"train loss:",[92,33092,999],{"class":151},[92,33094,33095],{"class":98},":.4f",[92,33097,1049],{"class":151},[92,33099,33100],{"class":207}," train acc:",[92,33102,999],{"class":151},[92,33104,33095],{"class":98},[92,33106,1049],{"class":151},[92,33108,3571],{"class":207},[92,33110,33111],{"class":102},".format(epoch,train_loss_all[",[92,33113,635],{"class":98},[92,33115,320],{"class":151},[92,33117,33118],{"class":102},"],train_acc_all[",[92,33120,635],{"class":98},[92,33122,320],{"class":151},[92,33124,33125],{"class":102},"]))\n",[92,33127,33129,33131,33133,33135,33137,33140,33142,33144,33146,33149,33151,33153,33155,33157,33160,33162,33164,33167,33169,33171],{"class":94,"line":33128},152,[92,33130,32433],{"class":151},[92,33132,103],{"class":102},[92,33134,3571],{"class":207},[92,33136,32441],{"class":151},[92,33138,33139],{"class":207},"val loss:",[92,33141,999],{"class":151},[92,33143,33095],{"class":98},[92,33145,1049],{"class":151},[92,33147,33148],{"class":207}," val acc:",[92,33150,999],{"class":151},[92,33152,33095],{"class":98},[92,33154,1049],{"class":151},[92,33156,3571],{"class":207},[92,33158,33159],{"class":102},".format(epoch,val_loss_all[",[92,33161,635],{"class":98},[92,33163,320],{"class":151},[92,33165,33166],{"class":102},"],val_acc_all[",[92,33168,635],{"class":98},[92,33170,320],{"class":151},[92,33172,33125],{"class":102},[92,33174,33176],{"class":94,"line":33175},153,[92,33177,2379],{"emptyLinePlaceholder":17},[92,33179,33181],{"class":94,"line":33180},154,[92,33182,33183],{"class":161},"        # 判断准确度--->保存最优模型\n",[92,33185,33187,33189,33192,33194,33196,33198,33200],{"class":94,"line":33186},155,[92,33188,2476],{"class":98},[92,33190,33191],{"class":102}," val_acc_all[",[92,33193,635],{"class":98},[92,33195,320],{"class":151},[92,33197,1043],{"class":102},[92,33199,1063],{"class":98},[92,33201,33202],{"class":102},"best_acc:\n",[92,33204,33206],{"class":94,"line":33205},156,[92,33207,33208],{"class":161},"            # 保存当前模型准确度\n",[92,33210,33212,33215,33217,33219,33222,33224,33226],{"class":94,"line":33211},157,[92,33213,33214],{"class":102},"            best_acc:",[92,33216,142],{"class":151},[92,33218,148],{"class":98},[92,33220,33221],{"class":102},"val_acc_all[",[92,33223,635],{"class":98},[92,33225,320],{"class":151},[92,33227,33228],{"class":102},"]\n",[92,33230,33232],{"class":94,"line":33231},158,[92,33233,33234],{"class":161},"            # 保存当前的准确度\n",[92,33236,33238],{"class":94,"line":33237},159,[92,33239,33240],{"class":161},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[92,33242,33244,33247,33249],{"class":94,"line":33243},160,[92,33245,33246],{"class":102},"            best_model_wts",[92,33248,148],{"class":98},[92,33250,32296],{"class":102},[92,33252,33254],{"class":94,"line":33253},161,[92,33255,2379],{"emptyLinePlaceholder":17},[92,33257,33259],{"class":94,"line":33258},162,[92,33260,33261],{"class":161},"        # 计算耗时\n",[92,33263,33265,33268,33270,33273,33275],{"class":94,"line":33264},163,[92,33266,33267],{"class":102},"        time_use",[92,33269,148],{"class":98},[92,33271,33272],{"class":102},"time.time()",[92,33274,635],{"class":98},[92,33276,33277],{"class":102},"since\n",[92,33279,33281,33283,33285,33288,33290,33293,33295,33297,33299,33301,33303,33306,33309,33312,33314,33317,33319,33321],{"class":94,"line":33280},164,[92,33282,32433],{"class":151},[92,33284,103],{"class":102},[92,33286,33287],{"class":207},"'训练和验证耗费的时间",[92,33289,999],{"class":151},[92,33291,33292],{"class":98},":.0f",[92,33294,1049],{"class":151},[92,33296,647],{"class":207},[92,33298,999],{"class":151},[92,33300,33292],{"class":98},[92,33302,1049],{"class":151},[92,33304,33305],{"class":207},"s'",[92,33307,33308],{"class":102},".format(time_use",[92,33310,33311],{"class":98},"\u002F\u002F",[92,33313,1010],{"class":151},[92,33315,33316],{"class":102},",time_use",[92,33318,431],{"class":98},[92,33320,1010],{"class":151},[92,33322,30479],{"class":102},[92,33324,33326],{"class":94,"line":33325},165,[92,33327,33328],{"class":161},"    # 选择最优参数\n",[92,33330,33332],{"class":94,"line":33331},166,[92,33333,33334],{"class":161},"    # 加载最高准确率下的模型参数\n",[92,33336,33338],{"class":94,"line":33337},167,[92,33339,33340],{"class":161},"    # model.load_state_dict(best_model_wts)\n",[92,33342,33344,33347,33350],{"class":94,"line":33343},168,[92,33345,33346],{"class":102},"    torch.save(model.state_dict(best_model_wts), ",[92,33348,33349],{"class":207},"'.\u002Fbest_model.pth'",[92,33351,109],{"class":102},[92,33353,33355],{"class":94,"line":33354},169,[92,33356,33357],{"class":161},"    # 或者写成\n",[92,33359,33361],{"class":94,"line":33360},170,[92,33362,33363],{"class":161},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[92,33365,33367],{"class":94,"line":33366},171,[92,33368,33369],{"class":161},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[92,33371,33373,33376,33378,33381,33384,33386],{"class":94,"line":33372},172,[92,33374,33375],{"class":102},"    train_process",[92,33377,148],{"class":98},[92,33379,33380],{"class":102},"pd.DataFrame(",[92,33382,33383],{"class":5196},"data",[92,33385,148],{"class":98},[92,33387,1525],{"class":102},[92,33389,33391,33394,33396,33399],{"class":94,"line":33390},173,[92,33392,33393],{"class":207},"        \"epoch\"",[92,33395,962],{"class":102},[92,33397,33398],{"class":151},"range",[92,33400,33401],{"class":102},"(num_epochs),\n",[92,33403,33405,33408],{"class":94,"line":33404},174,[92,33406,33407],{"class":207},"        \"train_loss_all\"",[92,33409,33410],{"class":102},":train_loss_all,\n",[92,33412,33414,33417],{"class":94,"line":33413},175,[92,33415,33416],{"class":207},"        \"val_loss_all\"",[92,33418,33419],{"class":102},":val_loss_all,\n",[92,33421,33423,33426],{"class":94,"line":33422},176,[92,33424,33425],{"class":207},"        \"train_acc_all\"",[92,33427,33428],{"class":102},":train_acc_all,\n",[92,33430,33432,33435],{"class":94,"line":33431},177,[92,33433,33434],{"class":207},"        \"val_acc_all\"",[92,33436,33437],{"class":102},":val_acc_all\n",[92,33439,33441],{"class":94,"line":33440},178,[92,33442,33443],{"class":102},"    })\n",[92,33445,33447],{"class":94,"line":33446},179,[92,33448,33449],{"class":161},"    # 返回训练保存的过程\n",[92,33451,33453,33455],{"class":94,"line":33452},180,[92,33454,4069],{"class":98},[92,33456,33457],{"class":102}," train_process\n",[92,33459,33461],{"class":94,"line":33460},181,[92,33462,2379],{"emptyLinePlaceholder":17},[92,33464,33466],{"class":94,"line":33465},182,[92,33467,33468],{"class":161},"# 将loss值和精度按照图片的形式展示出来\n",[92,33470,33472,33474,33477],{"class":94,"line":33471},183,[92,33473,31929],{"class":98},[92,33475,33476],{"class":1942}," matplot_acc_loss",[92,33478,33479],{"class":102},"(train_process):\n",[92,33481,33483],{"class":94,"line":33482},184,[92,33484,33485],{"class":161},"    # 设置图的大小\n",[92,33487,33489,33492,33494,33496,33498,33500,33502,33504],{"class":94,"line":33488},185,[92,33490,33491],{"class":102},"    plt.figure(",[92,33493,31675],{"class":5196},[92,33495,148],{"class":98},[92,33497,103],{"class":102},[92,33499,601],{"class":151},[92,33501,481],{"class":102},[92,33503,396],{"class":151},[92,33505,30479],{"class":102},[92,33507,33509],{"class":94,"line":33508},186,[92,33510,33511],{"class":161},"    # 设置图中有几张图\n",[92,33513,33515],{"class":94,"line":33514},187,[92,33516,33517],{"class":161},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[92,33519,33521],{"class":94,"line":33520},188,[92,33522,33523],{"class":161},"    # ①loss图\n",[92,33525,33527,33529,33531,33533,33535,33537,33539],{"class":94,"line":33526},189,[92,33528,31709],{"class":102},[92,33530,320],{"class":151},[92,33532,481],{"class":102},[92,33534,180],{"class":151},[92,33536,481],{"class":102},[92,33538,320],{"class":151},[92,33540,109],{"class":102},[92,33542,33544],{"class":94,"line":33543},190,[92,33545,33546],{"class":161},"    # 补充:\n",[92,33548,33550],{"class":94,"line":33549},191,[92,33551,33552],{"class":161},"    # plt.subplot(nrows, ncols, index)\n",[92,33554,33556],{"class":94,"line":33555},192,[92,33557,33558],{"class":161},"    # nrows：行数\n",[92,33560,33562],{"class":94,"line":33561},193,[92,33563,33564],{"class":161},"    # ncols：列数\n",[92,33566,33568],{"class":94,"line":33567},194,[92,33569,33570],{"class":161},"    # index：目前选中第几个子图（从1开始）\n",[92,33572,33574,33577,33580,33583,33586,33588,33591,33593,33596],{"class":94,"line":33573},195,[92,33575,33576],{"class":102},"    plt.plot(train_process[",[92,33578,33579],{"class":207},"\"epoch\"",[92,33581,33582],{"class":102},"],train_process.train_loss_all,",[92,33584,33585],{"class":207},"'ro-'",[92,33587,481],{"class":102},[92,33589,33590],{"class":5196},"label",[92,33592,148],{"class":98},[92,33594,33595],{"class":207},"'train loss'",[92,33597,109],{"class":102},[92,33599,33601,33603,33605,33608,33611,33613,33615,33617,33620],{"class":94,"line":33600},196,[92,33602,33576],{"class":102},[92,33604,33579],{"class":207},[92,33606,33607],{"class":102},"],train_process.val_loss_all,",[92,33609,33610],{"class":207},"'bs--'",[92,33612,481],{"class":102},[92,33614,33590],{"class":5196},[92,33616,148],{"class":98},[92,33618,33619],{"class":207},"'val loss'",[92,33621,109],{"class":102},[92,33623,33625],{"class":94,"line":33624},197,[92,33626,33627],{"class":161},"    # 添加一个图例\n",[92,33629,33631],{"class":94,"line":33630},198,[92,33632,33633],{"class":102},"    plt.legend()\n",[92,33635,33637],{"class":94,"line":33636},199,[92,33638,33639],{"class":161},"    # 给轴添加标签\n",[92,33641,33643,33646,33649],{"class":94,"line":33642},200,[92,33644,33645],{"class":102},"    plt.xlabel(",[92,33647,33648],{"class":207},"'epoch'",[92,33650,109],{"class":102},[92,33652,33654,33657,33660],{"class":94,"line":33653},201,[92,33655,33656],{"class":102},"    plt.ylabel(",[92,33658,33659],{"class":207},"'loss'",[92,33661,109],{"class":102},[92,33663,33665],{"class":94,"line":33664},202,[92,33666,33667],{"class":161},"    # ②准确度图\n",[92,33669,33671,33673,33675,33677,33679,33681,33683],{"class":94,"line":33670},203,[92,33672,31709],{"class":102},[92,33674,320],{"class":151},[92,33676,481],{"class":102},[92,33678,180],{"class":151},[92,33680,481],{"class":102},[92,33682,180],{"class":151},[92,33684,109],{"class":102},[92,33686,33688,33690,33692,33695,33697,33699,33701,33703,33706],{"class":94,"line":33687},204,[92,33689,33576],{"class":102},[92,33691,33579],{"class":207},[92,33693,33694],{"class":102},"],train_process.train_acc_all,",[92,33696,33585],{"class":207},[92,33698,481],{"class":102},[92,33700,33590],{"class":5196},[92,33702,148],{"class":98},[92,33704,33705],{"class":207},"'train acc'",[92,33707,109],{"class":102},[92,33709,33711,33713,33715,33718,33720,33722,33724,33726,33729],{"class":94,"line":33710},205,[92,33712,33576],{"class":102},[92,33714,33579],{"class":207},[92,33716,33717],{"class":102},"],train_process.val_acc_all,",[92,33719,33610],{"class":207},[92,33721,481],{"class":102},[92,33723,33590],{"class":5196},[92,33725,148],{"class":98},[92,33727,33728],{"class":207},"'val acc'",[92,33730,109],{"class":102},[92,33732,33734],{"class":94,"line":33733},206,[92,33735,33736],{"class":161},"    # 添加图例\n",[92,33738,33740],{"class":94,"line":33739},207,[92,33741,33633],{"class":102},[92,33743,33745,33747,33749],{"class":94,"line":33744},208,[92,33746,33645],{"class":102},[92,33748,33579],{"class":207},[92,33750,109],{"class":102},[92,33752,33754,33756,33759],{"class":94,"line":33753},209,[92,33755,33656],{"class":102},[92,33757,33758],{"class":207},"\"acc\"",[92,33760,109],{"class":102},[92,33762,33764],{"class":94,"line":33763},210,[92,33765,33766],{"class":102},"    plt.show()\n",[92,33768,33770],{"class":94,"line":33769},211,[92,33771,2379],{"emptyLinePlaceholder":17},[92,33773,33775],{"class":94,"line":33774},212,[92,33776,33777],{"class":161},"# 正式开始训练:\n",[92,33779,33781,33783,33785,33787,33789],{"class":94,"line":33780},213,[92,33782,1510],{"class":98},[92,33784,31202],{"class":151},[92,33786,2928],{"class":98},[92,33788,31207],{"class":207},[92,33790,3718],{"class":102},[92,33792,33794],{"class":94,"line":33793},214,[92,33795,33796],{"class":161},"    # 将模型实例化\n",[92,33798,33800,33803,33805],{"class":94,"line":33799},215,[92,33801,33802],{"class":102},"    LeNet",[92,33804,148],{"class":98},[92,33806,33807],{"class":102},"LeNet()\n",[92,33809,33811,33814,33816],{"class":94,"line":33810},216,[92,33812,33813],{"class":102},"    train_dataloader,val_dataloader",[92,33815,148],{"class":98},[92,33817,33818],{"class":102},"train_val_data_process()\n",[92,33820,33822,33824,33826,33829,33832,33834,33836],{"class":94,"line":33821},217,[92,33823,33375],{"class":102},[92,33825,148],{"class":98},[92,33827,33828],{"class":102},"train_model_process(LeNet,train_dataloader,val_dataloader,",[92,33830,33831],{"class":5196},"num_epochs",[92,33833,148],{"class":98},[92,33835,803],{"class":151},[92,33837,109],{"class":102},[92,33839,33841],{"class":94,"line":33840},218,[92,33842,33843],{"class":102},"    matplot_acc_loss(train_process)\n",[38,33845,33846],{},"画图的补充点学习：",[38,33848,33849],{},[1441,33850],{"alt":10,"src":33851},"\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,33853,33854],{"start":1158},[49,33855,33856],{},"测试",[83,33858,33860],{"className":30360,"code":33859,"language":30362,"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,33861,33862,33868,33878,33890,33900,33905,33915,33925,33929,33934,33943,33960,33972,33989,34000,34016,34021,34032,34043,34054,34061,34065,34070,34080,34085,34102,34110,34114,34119,34128,34137,34141,34146,34151,34156,34163,34168,34180,34190,34200,34205,34209,34214,34223,34228,34244,34249,34254,34259,34273,34278,34292,34296,34301,34316,34321,34333,34337,34342,34354,34359,34367,34372,34377,34387,34392,34401,34406,34411,34415,34420,34425,34441,34449,34454,34459,34518,34524,34529,34540,34548,34556,34560,34565,34569,34574,34582,34587,34603,34608,34618,34628],{"__ignoreMap":10},[92,33863,33864,33866],{"class":94,"line":95},[92,33865,30374],{"class":98},[92,33867,30377],{"class":102},[92,33869,33870,33872,33874,33876],{"class":94,"line":11},[92,33871,30374],{"class":98},[92,33873,31397],{"class":102},[92,33875,31365],{"class":98},[92,33877,31402],{"class":102},[92,33879,33880,33882,33885,33887],{"class":94,"line":1158},[92,33881,30719],{"class":98},[92,33883,33884],{"class":102}," jupyter_client.consoleapp ",[92,33886,30374],{"class":98},[92,33888,33889],{"class":102}," classes\n",[92,33891,33892,33894,33896,33898],{"class":94,"line":1173},[92,33893,30719],{"class":98},[92,33895,31380],{"class":102},[92,33897,30374],{"class":98},[92,33899,31385],{"class":102},[92,33901,33902],{"class":94,"line":1179},[92,33903,33904],{"class":161},"# 导入数据集\n",[92,33906,33907,33909,33911,33913],{"class":94,"line":1193},[92,33908,30719],{"class":98},[92,33910,31350],{"class":102},[92,33912,30374],{"class":98},[92,33914,31355],{"class":102},[92,33916,33917,33919,33921,33923],{"class":94,"line":1199},[92,33918,30719],{"class":98},[92,33920,31896],{"class":102},[92,33922,30374],{"class":98},[92,33924,31901],{"class":102},[92,33926,33927],{"class":94,"line":1290},[92,33928,2379],{"emptyLinePlaceholder":17},[92,33930,33931],{"class":94,"line":1296},[92,33932,33933],{"class":161},"# 测试数据处理\n",[92,33935,33936,33938,33941],{"class":94,"line":1308},[92,33937,31929],{"class":98},[92,33939,33940],{"class":1942}," test_data_process",[92,33942,31935],{"class":102},[92,33944,33945,33948,33950,33952,33954,33956,33958],{"class":94,"line":1591},[92,33946,33947],{"class":102},"    test_data",[92,33949,148],{"class":98},[92,33951,31437],{"class":102},[92,33953,31440],{"class":5196},[92,33955,148],{"class":98},[92,33957,31445],{"class":207},[92,33959,31448],{"class":102},[92,33961,33962,33965,33967,33970],{"class":94,"line":1596},[92,33963,33964],{"class":5196},"                           train",[92,33966,148],{"class":98},[92,33968,33969],{"class":151},"False",[92,33971,31448],{"class":102},[92,33973,33974,33977,33979,33981,33983,33985,33987],{"class":94,"line":1602},[92,33975,33976],{"class":5196},"                           transform",[92,33978,148],{"class":98},[92,33980,31475],{"class":102},[92,33982,31478],{"class":5196},[92,33984,148],{"class":98},[92,33986,1004],{"class":151},[92,33988,31486],{"class":102},[92,33990,33991,33994,33996,33998],{"class":94,"line":1607},[92,33992,33993],{"class":5196},"                           download",[92,33995,148],{"class":98},[92,33997,31458],{"class":151},[92,33999,109],{"class":102},[92,34001,34002,34005,34007,34009,34011,34013],{"class":94,"line":1621},[92,34003,34004],{"class":102},"    test_dataloader",[92,34006,148],{"class":98},[92,34008,31516],{"class":102},[92,34010,31519],{"class":5196},[92,34012,148],{"class":98},[92,34014,34015],{"class":102},"test_data,\n",[92,34017,34018],{"class":94,"line":1626},[92,34019,34020],{"class":161},"                                    # 这里是一张一张进行测试\n",[92,34022,34023,34026,34028,34030],{"class":94,"line":1632},[92,34024,34025],{"class":5196},"                                    batch_size",[92,34027,148],{"class":98},[92,34029,320],{"class":151},[92,34031,31448],{"class":102},[92,34033,34034,34037,34039,34041],{"class":94,"line":1653},[92,34035,34036],{"class":5196},"                                    shuffle",[92,34038,148],{"class":98},[92,34040,31458],{"class":151},[92,34042,31448],{"class":102},[92,34044,34045,34048,34050,34052],{"class":94,"line":1658},[92,34046,34047],{"class":5196},"                                    num_workers",[92,34049,148],{"class":98},[92,34051,294],{"class":151},[92,34053,109],{"class":102},[92,34055,34056,34058],{"class":94,"line":1672},[92,34057,4069],{"class":98},[92,34059,34060],{"class":102}," test_dataloader\n",[92,34062,34063],{"class":94,"line":1677},[92,34064,2379],{"emptyLinePlaceholder":17},[92,34066,34067],{"class":94,"line":1706},[92,34068,34069],{"class":161},"# 定义模型测试函数\n",[92,34071,34072,34074,34077],{"class":94,"line":1711},[92,34073,31929],{"class":98},[92,34075,34076],{"class":1942}," test_model_process",[92,34078,34079],{"class":102},"(model,test_dataloader):\n",[92,34081,34082],{"class":94,"line":1728},[92,34083,34084],{"class":161},"    # 将模型放到设备当中，先进行判断\n",[92,34086,34087,34089,34091,34093,34095,34097,34099],{"class":94,"line":1733},[92,34088,31219],{"class":102},[92,34090,148],{"class":98},[92,34092,31226],{"class":207},[92,34094,1683],{"class":98},[92,34096,31231],{"class":102},[92,34098,1680],{"class":98},[92,34100,34101],{"class":207}," \"cpu\"\n",[92,34103,34104,34106,34108],{"class":94,"line":1738},[92,34105,31271],{"class":102},[92,34107,148],{"class":98},[92,34109,32271],{"class":102},[92,34111,34112],{"class":94,"line":1743},[92,34113,2379],{"emptyLinePlaceholder":17},[92,34115,34116],{"class":94,"line":1757},[92,34117,34118],{"class":161},"    # 设置初始化参数\n",[92,34120,34121,34124,34126],{"class":94,"line":1762},[92,34122,34123],{"class":102},"    test_corrects",[92,34125,148],{"class":98},[92,34127,32324],{"class":151},[92,34129,34130,34133,34135],{"class":94,"line":2556},[92,34131,34132],{"class":102},"    test_num",[92,34134,148],{"class":98},[92,34136,3064],{"class":151},[92,34138,34139],{"class":94,"line":2570},[92,34140,2379],{"emptyLinePlaceholder":17},[92,34142,34143],{"class":94,"line":2578},[92,34144,34145],{"class":161},"    # 进行模型测试\n",[92,34147,34148],{"class":94,"line":2583},[92,34149,34150],{"class":161},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[92,34152,34153],{"class":94,"line":2589},[92,34154,34155],{"class":161},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[92,34157,34158,34161],{"class":94,"line":2595},[92,34159,34160],{"class":98},"    with",[92,34162,32866],{"class":102},[92,34164,34165],{"class":94,"line":2600},[92,34166,34167],{"class":161},"        # 从数据中进行\n",[92,34169,34170,34172,34175,34177],{"class":94,"line":7928},[92,34171,3382],{"class":98},[92,34173,34174],{"class":102}," test_data_x,test_data_y ",[92,34176,26025],{"class":98},[92,34178,34179],{"class":102}," test_dataloader:\n",[92,34181,34182,34185,34187],{"class":94,"line":7952},[92,34183,34184],{"class":102},"            test_data_x",[92,34186,148],{"class":98},[92,34188,34189],{"class":102},"test_data_x.to(device)\n",[92,34191,34192,34195,34197],{"class":94,"line":7957},[92,34193,34194],{"class":102},"            test_data_y",[92,34196,148],{"class":98},[92,34198,34199],{"class":102},"test_data_y.to(device)\n",[92,34201,34202],{"class":94,"line":7963},[92,34203,34204],{"class":161},"            # 设置为验证模式\n",[92,34206,34207],{"class":94,"line":7990},[92,34208,32857],{"class":102},[92,34210,34211],{"class":94,"line":7995},[92,34212,34213],{"class":161},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[92,34215,34216,34218,34220],{"class":94,"line":8001},[92,34217,32642],{"class":102},[92,34219,148],{"class":98},[92,34221,34222],{"class":102},"model(test_data_x)\n",[92,34224,34225],{"class":94,"line":8013},[92,34226,34227],{"class":161},"            # 查找每一行中最大值对应的下标\n",[92,34229,34230,34232,34234,34236,34238,34240,34242],{"class":94,"line":8025},[92,34231,32659],{"class":102},[92,34233,148],{"class":98},[92,34235,32664],{"class":102},[92,34237,32667],{"class":5196},[92,34239,148],{"class":98},[92,34241,320],{"class":151},[92,34243,109],{"class":102},[92,34245,34246],{"class":94,"line":8037},[92,34247,34248],{"class":161},"            # 计算正确率\n",[92,34250,34251],{"class":94,"line":9696},[92,34252,34253],{"class":161},"            # .data表示是一个不带梯度信息的tensor\n",[92,34255,34256],{"class":94,"line":9721},[92,34257,34258],{"class":161},"            # 如果预测正确，则准确度test_corrects加1\n",[92,34260,34261,34264,34266,34268,34270],{"class":94,"line":9744},[92,34262,34263],{"class":102},"            test_corrects",[92,34265,9457],{"class":98},[92,34267,32769],{"class":102},[92,34269,2928],{"class":98},[92,34271,34272],{"class":102},"test_data_y.data)\n",[92,34274,34275],{"class":94,"line":9768},[92,34276,34277],{"class":161},"            # 将所有的测试样本进行累计\n",[92,34279,34280,34283,34285,34288,34290],{"class":94,"line":9773},[92,34281,34282],{"class":102},"            test_num",[92,34284,9457],{"class":98},[92,34286,34287],{"class":102},"test_data_x.size(",[92,34289,294],{"class":151},[92,34291,109],{"class":102},[92,34293,34294],{"class":94,"line":9778},[92,34295,2379],{"emptyLinePlaceholder":17},[92,34297,34298],{"class":94,"line":9783},[92,34299,34300],{"class":161},"        # 计算准确度\n",[92,34302,34303,34306,34308,34311,34313],{"class":94,"line":9792},[92,34304,34305],{"class":102},"        test_acc",[92,34307,148],{"class":98},[92,34309,34310],{"class":102},"test_corrects.double().item()",[92,34312,687],{"class":98},[92,34314,34315],{"class":102},"test_num\n",[92,34317,34318],{"class":94,"line":9797},[92,34319,34320],{"class":161},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[92,34322,34323,34325,34327,34330],{"class":94,"line":9803},[92,34324,32433],{"class":151},[92,34326,103],{"class":102},[92,34328,34329],{"class":207},"\"测试的准确率：\"",[92,34331,34332],{"class":102},",test_acc)\n",[92,34334,34335],{"class":94,"line":9824},[92,34336,2379],{"emptyLinePlaceholder":17},[92,34338,34339],{"class":94,"line":9830},[92,34340,34341],{"class":161},"# 实现模型的测试功能\n",[92,34343,34344,34346,34348,34350,34352],{"class":94,"line":9844},[92,34345,1510],{"class":98},[92,34347,31202],{"class":151},[92,34349,2928],{"class":98},[92,34351,31207],{"class":207},[92,34353,3718],{"class":102},[92,34355,34356],{"class":94,"line":9850},[92,34357,34358],{"class":161},"    # 加载模型\n",[92,34360,34361,34363,34365],{"class":94,"line":9877},[92,34362,31271],{"class":102},[92,34364,148],{"class":98},[92,34366,33807],{"class":102},[92,34368,34369],{"class":94,"line":9886},[92,34370,34371],{"class":161},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[92,34373,34374],{"class":94,"line":9892},[92,34375,34376],{"class":161},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[92,34378,34379,34382,34385],{"class":94,"line":9900},[92,34380,34381],{"class":102},"    model.load_state_dict(torch.load(",[92,34383,34384],{"class":207},"'best_model.pth'",[92,34386,30479],{"class":102},[92,34388,34389],{"class":94,"line":9905},[92,34390,34391],{"class":161},"    # 数据加载\n",[92,34393,34394,34396,34398],{"class":94,"line":16584},[92,34395,34004],{"class":102},[92,34397,148],{"class":98},[92,34399,34400],{"class":102},"test_data_process()\n",[92,34402,34403],{"class":94,"line":16590},[92,34404,34405],{"class":161},"    # 加载模型测试的函数\n",[92,34407,34408],{"class":94,"line":16613},[92,34409,34410],{"class":102},"    test_model_process(model,test_dataloader)\n",[92,34412,34413],{"class":94,"line":16619},[92,34414,2379],{"emptyLinePlaceholder":17},[92,34416,34417],{"class":94,"line":16642},[92,34418,34419],{"class":161},"    # 验证集推理实现：\n",[92,34421,34422],{"class":94,"line":16656},[92,34423,34424],{"class":161},"    # 加载数据加载的更详细一些\n",[92,34426,34427,34429,34431,34433,34435,34437,34439],{"class":94,"line":16676},[92,34428,31219],{"class":102},[92,34430,148],{"class":98},[92,34432,31226],{"class":207},[92,34434,1683],{"class":98},[92,34436,31231],{"class":102},[92,34438,1680],{"class":98},[92,34440,34101],{"class":207},[92,34442,34443,34445,34447],{"class":94,"line":16682},[92,34444,31271],{"class":102},[92,34446,148],{"class":98},[92,34448,32271],{"class":102},[92,34450,34451],{"class":94,"line":16693},[92,34452,34453],{"class":161},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[92,34455,34456],{"class":94,"line":16716},[92,34457,34458],{"class":161},"    # 顺序不可改变\n",[92,34460,34461,34464,34466,34468,34471,34473,34476,34478,34481,34483,34486,34488,34491,34493,34496,34498,34501,34503,34506,34508,34511,34513,34516],{"class":94,"line":16738},[92,34462,34463],{"class":102},"    classes",[92,34465,148],{"class":98},[92,34467,993],{"class":102},[92,34469,34470],{"class":207},"'T-shirt\u002Ftop'",[92,34472,481],{"class":102},[92,34474,34475],{"class":207},"'Trouser'",[92,34477,481],{"class":102},[92,34479,34480],{"class":207},"'Pullover'",[92,34482,481],{"class":102},[92,34484,34485],{"class":207},"'Dress'",[92,34487,481],{"class":102},[92,34489,34490],{"class":207},"'Coat'",[92,34492,481],{"class":102},[92,34494,34495],{"class":207},"'Sandal'",[92,34497,481],{"class":102},[92,34499,34500],{"class":207},"'Shirt'",[92,34502,481],{"class":102},[92,34504,34505],{"class":207},"'Sneaker'",[92,34507,481],{"class":102},[92,34509,34510],{"class":207},"'Bag'",[92,34512,481],{"class":102},[92,34514,34515],{"class":207},"'Ankle boot'",[92,34517,33228],{"class":102},[92,34519,34520,34522],{"class":94,"line":16743},[92,34521,34160],{"class":98},[92,34523,32866],{"class":102},[92,34525,34526],{"class":94,"line":16749},[92,34527,34528],{"class":161},"        # 将数据和标签都放到设备当中\n",[92,34530,34531,34533,34536,34538],{"class":94,"line":16763},[92,34532,3382],{"class":98},[92,34534,34535],{"class":102}," b_x,b_y ",[92,34537,26025],{"class":98},[92,34539,34179],{"class":102},[92,34541,34542,34544,34546],{"class":94,"line":16776},[92,34543,32592],{"class":102},[92,34545,148],{"class":98},[92,34547,32597],{"class":102},[92,34549,34550,34552,34554],{"class":94,"line":16781},[92,34551,32607],{"class":102},[92,34553,148],{"class":98},[92,34555,32612],{"class":102},[92,34557,34558],{"class":94,"line":16795},[92,34559,2379],{"emptyLinePlaceholder":17},[92,34561,34562],{"class":94,"line":16800},[92,34563,34564],{"class":161},"            # 设置模型为验证模式\n",[92,34566,34567],{"class":94,"line":16806},[92,34568,32857],{"class":102},[92,34570,34571],{"class":94,"line":16811},[92,34572,34573],{"class":161},"            # 模型推理结果\n",[92,34575,34576,34578,34580],{"class":94,"line":16825},[92,34577,32642],{"class":102},[92,34579,148],{"class":98},[92,34581,32647],{"class":102},[92,34583,34584],{"class":94,"line":16830},[92,34585,34586],{"class":161},"            # 获取最大下标，最大下标就是类别号\n",[92,34588,34589,34591,34593,34595,34597,34599,34601],{"class":94,"line":16835},[92,34590,32659],{"class":102},[92,34592,148],{"class":98},[92,34594,32664],{"class":102},[92,34596,32667],{"class":5196},[92,34598,148],{"class":98},[92,34600,320],{"class":151},[92,34602,109],{"class":102},[92,34604,34605],{"class":94,"line":16849},[92,34606,34607],{"class":161},"            # 取出张量中的数值\n",[92,34609,34610,34613,34615],{"class":94,"line":16861},[92,34611,34612],{"class":102},"            result",[92,34614,148],{"class":98},[92,34616,34617],{"class":102},"pre_lab.item()\n",[92,34619,34620,34623,34625],{"class":94,"line":16866},[92,34621,34622],{"class":102},"            label",[92,34624,148],{"class":98},[92,34626,34627],{"class":102},"b_y.item()\n",[92,34629,34630,34633,34635,34638,34641,34644,34646,34649],{"class":94,"line":16879},[92,34631,34632],{"class":151},"            print",[92,34634,103],{"class":102},[92,34636,34637],{"class":207},"\"预测值：\"",[92,34639,34640],{"class":102},",classes[result],",[92,34642,34643],{"class":207},"\"------\"",[92,34645,481],{"class":102},[92,34647,34648],{"class":207},"\"真实值：\"",[92,34650,34651],{"class":102},",classes[label])\n",[38,34653,34654],{},"（2）AlexNet",[46,34656,34657],{},[49,34658,34659],{},"神经网络构建",[83,34661,34663],{"className":30360,"code":34662,"language":30362,"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,34664,34665,34671,34681,34691,34703,34707,34724,34732,34747,34759,34801,34828,34871,34897,34941,34984,35027,35054,35058,35068,35073,35101,35120,35139,35143,35148,35156,35171,35181,35195,35205,35220,35235,35250,35261,35265,35270,35280,35295,35300,35314,35329,35341,35346,35357,35362,35368,35373,35385,35405,35410,35419],{"__ignoreMap":10},[92,34666,34667,34669],{"class":94,"line":95},[92,34668,30374],{"class":98},[92,34670,30377],{"class":102},[92,34672,34673,34675,34677,34679],{"class":94,"line":11},[92,34674,30719],{"class":98},[92,34676,30722],{"class":102},[92,34678,30374],{"class":98},[92,34680,30727],{"class":102},[92,34682,34683,34685,34687,34689],{"class":94,"line":1158},[92,34684,30719],{"class":98},[92,34686,30739],{"class":102},[92,34688,30374],{"class":98},[92,34690,30744],{"class":102},[92,34692,34693,34695,34698,34700],{"class":94,"line":1173},[92,34694,30374],{"class":98},[92,34696,34697],{"class":102}," torch.nn.functional ",[92,34699,31365],{"class":98},[92,34701,34702],{"class":102}," F\n",[92,34704,34705],{"class":94,"line":1179},[92,34706,2379],{"emptyLinePlaceholder":17},[92,34708,34709,34711,34714,34716,34718,34720,34722],{"class":94,"line":1193},[92,34710,14674],{"class":98},[92,34712,34713],{"class":1942}," AlexNet",[92,34715,103],{"class":102},[92,34717,30760],{"class":1942},[92,34719,661],{"class":102},[92,34721,30765],{"class":1942},[92,34723,30768],{"class":102},[92,34725,34726,34728,34730],{"class":94,"line":1199},[92,34727,30783],{"class":98},[92,34729,30786],{"class":151},[92,34731,30789],{"class":102},[92,34733,34734,34736,34739,34741,34743,34745],{"class":94,"line":1290},[92,34735,30799],{"class":151},[92,34737,34738],{"class":102},"(AlexNet,",[92,34740,30805],{"class":151},[92,34742,30808],{"class":102},[92,34744,30811],{"class":151},[92,34746,1955],{"class":102},[92,34748,34749,34751,34754,34756],{"class":94,"line":1296},[92,34750,30827],{"class":151},[92,34752,34753],{"class":102},".ReLu",[92,34755,148],{"class":98},[92,34757,34758],{"class":102},"nn.ReLU()\n",[92,34760,34761,34763,34765,34767,34769,34771,34773,34775,34777,34779,34781,34783,34785,34787,34789,34791,34793,34795,34797,34799],{"class":94,"line":1308},[92,34762,30827],{"class":151},[92,34764,30830],{"class":102},[92,34766,148],{"class":98},[92,34768,30835],{"class":102},[92,34770,30838],{"class":5196},[92,34772,148],{"class":98},[92,34774,320],{"class":151},[92,34776,481],{"class":102},[92,34778,30847],{"class":5196},[92,34780,148],{"class":98},[92,34782,312],{"class":151},[92,34784,481],{"class":102},[92,34786,30856],{"class":5196},[92,34788,148],{"class":98},[92,34790,575],{"class":151},[92,34792,481],{"class":102},[92,34794,30911],{"class":5196},[92,34796,148],{"class":98},[92,34798,396],{"class":151},[92,34800,109],{"class":102},[92,34802,34803,34805,34807,34809,34812,34814,34816,34818,34820,34822,34824,34826],{"class":94,"line":1591},[92,34804,30827],{"class":151},[92,34806,30895],{"class":102},[92,34808,148],{"class":98},[92,34810,34811],{"class":102},"nn.MaxPool2d(",[92,34813,30856],{"class":5196},[92,34815,148],{"class":98},[92,34817,174],{"class":151},[92,34819,481],{"class":102},[92,34821,30911],{"class":5196},[92,34823,148],{"class":98},[92,34825,180],{"class":151},[92,34827,109],{"class":102},[92,34829,34830,34832,34834,34836,34838,34840,34842,34844,34846,34848,34850,34853,34855,34857,34859,34861,34863,34865,34867,34869],{"class":94,"line":1596},[92,34831,30827],{"class":151},[92,34833,30924],{"class":102},[92,34835,148],{"class":98},[92,34837,30835],{"class":102},[92,34839,30838],{"class":5196},[92,34841,148],{"class":98},[92,34843,312],{"class":151},[92,34845,481],{"class":102},[92,34847,30847],{"class":5196},[92,34849,148],{"class":98},[92,34851,34852],{"class":151},"256",[92,34854,481],{"class":102},[92,34856,30856],{"class":5196},[92,34858,148],{"class":98},[92,34860,422],{"class":151},[92,34862,481],{"class":102},[92,34864,30865],{"class":5196},[92,34866,148],{"class":98},[92,34868,180],{"class":151},[92,34870,109],{"class":102},[92,34872,34873,34875,34877,34879,34881,34883,34885,34887,34889,34891,34893,34895],{"class":94,"line":1602},[92,34874,30827],{"class":151},[92,34876,30959],{"class":102},[92,34878,148],{"class":98},[92,34880,34811],{"class":102},[92,34882,30856],{"class":5196},[92,34884,148],{"class":98},[92,34886,174],{"class":151},[92,34888,481],{"class":102},[92,34890,30911],{"class":5196},[92,34892,148],{"class":98},[92,34894,180],{"class":151},[92,34896,109],{"class":102},[92,34898,34899,34901,34904,34906,34908,34910,34912,34914,34916,34918,34920,34923,34925,34927,34929,34931,34933,34935,34937,34939],{"class":94,"line":1607},[92,34900,30827],{"class":151},[92,34902,34903],{"class":102},".c5",[92,34905,148],{"class":98},[92,34907,30835],{"class":102},[92,34909,30838],{"class":5196},[92,34911,148],{"class":98},[92,34913,34852],{"class":151},[92,34915,481],{"class":102},[92,34917,30847],{"class":5196},[92,34919,148],{"class":98},[92,34921,34922],{"class":151},"384",[92,34924,481],{"class":102},[92,34926,30856],{"class":5196},[92,34928,148],{"class":98},[92,34930,174],{"class":151},[92,34932,481],{"class":102},[92,34934,30865],{"class":5196},[92,34936,148],{"class":98},[92,34938,320],{"class":151},[92,34940,109],{"class":102},[92,34942,34943,34945,34948,34950,34952,34954,34956,34958,34960,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982],{"class":94,"line":1621},[92,34944,30827],{"class":151},[92,34946,34947],{"class":102},".c6",[92,34949,148],{"class":98},[92,34951,30835],{"class":102},[92,34953,30838],{"class":5196},[92,34955,148],{"class":98},[92,34957,34922],{"class":151},[92,34959,481],{"class":102},[92,34961,30847],{"class":5196},[92,34963,148],{"class":98},[92,34965,34922],{"class":151},[92,34967,481],{"class":102},[92,34969,30856],{"class":5196},[92,34971,148],{"class":98},[92,34973,174],{"class":151},[92,34975,481],{"class":102},[92,34977,30865],{"class":5196},[92,34979,148],{"class":98},[92,34981,320],{"class":151},[92,34983,109],{"class":102},[92,34985,34986,34988,34991,34993,34995,34997,34999,35001,35003,35005,35007,35009,35011,35013,35015,35017,35019,35021,35023,35025],{"class":94,"line":1626},[92,34987,30827],{"class":151},[92,34989,34990],{"class":102},".c7",[92,34992,148],{"class":98},[92,34994,30835],{"class":102},[92,34996,30838],{"class":5196},[92,34998,148],{"class":98},[92,35000,34922],{"class":151},[92,35002,481],{"class":102},[92,35004,30847],{"class":5196},[92,35006,148],{"class":98},[92,35008,34852],{"class":151},[92,35010,481],{"class":102},[92,35012,30856],{"class":5196},[92,35014,148],{"class":98},[92,35016,174],{"class":151},[92,35018,481],{"class":102},[92,35020,30865],{"class":5196},[92,35022,148],{"class":98},[92,35024,320],{"class":151},[92,35026,109],{"class":102},[92,35028,35029,35031,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052],{"class":94,"line":1632},[92,35030,30827],{"class":151},[92,35032,35033],{"class":102},".s8",[92,35035,148],{"class":98},[92,35037,34811],{"class":102},[92,35039,30856],{"class":5196},[92,35041,148],{"class":98},[92,35043,174],{"class":151},[92,35045,481],{"class":102},[92,35047,30911],{"class":5196},[92,35049,148],{"class":98},[92,35051,180],{"class":151},[92,35053,109],{"class":102},[92,35055,35056],{"class":94,"line":1653},[92,35057,30984],{"class":161},[92,35059,35060,35062,35064,35066],{"class":94,"line":1658},[92,35061,30827],{"class":151},[92,35063,30991],{"class":102},[92,35065,148],{"class":98},[92,35067,30996],{"class":102},[92,35069,35070],{"class":94,"line":1672},[92,35071,35072],{"class":161},"       # 定义全连接层\n",[92,35074,35075,35077,35080,35082,35084,35086,35088,35090,35092,35094,35096,35099],{"class":94,"line":1677},[92,35076,30827],{"class":151},[92,35078,35079],{"class":102},".f1",[92,35081,148],{"class":98},[92,35083,31013],{"class":102},[92,35085,447],{"class":151},[92,35087,558],{"class":98},[92,35089,447],{"class":151},[92,35091,558],{"class":98},[92,35093,34852],{"class":151},[92,35095,481],{"class":102},[92,35097,35098],{"class":151},"4096",[92,35100,109],{"class":102},[92,35102,35103,35105,35108,35110,35112,35114,35116,35118],{"class":94,"line":1706},[92,35104,30827],{"class":151},[92,35106,35107],{"class":102},".f2",[92,35109,148],{"class":98},[92,35111,31013],{"class":102},[92,35113,35098],{"class":151},[92,35115,481],{"class":102},[92,35117,35098],{"class":151},[92,35119,109],{"class":102},[92,35121,35122,35124,35127,35129,35131,35133,35135,35137],{"class":94,"line":1711},[92,35123,30827],{"class":151},[92,35125,35126],{"class":102},".f3",[92,35128,148],{"class":98},[92,35130,31013],{"class":102},[92,35132,35098],{"class":151},[92,35134,481],{"class":102},[92,35136,549],{"class":151},[92,35138,109],{"class":102},[92,35140,35141],{"class":94,"line":1728},[92,35142,2379],{"emptyLinePlaceholder":17},[92,35144,35145],{"class":94,"line":1733},[92,35146,35147],{"class":161},"    # 定义前向传播\n",[92,35149,35150,35152,35154],{"class":94,"line":1738},[92,35151,30783],{"class":98},[92,35153,31075],{"class":1942},[92,35155,31078],{"class":102},[92,35157,35158,35160,35162,35164,35167,35169],{"class":94,"line":1743},[92,35159,31083],{"class":102},[92,35161,148],{"class":98},[92,35163,30805],{"class":151},[92,35165,35166],{"class":102},".ReLu(",[92,35168,30805],{"class":151},[92,35170,31095],{"class":102},[92,35172,35173,35175,35177,35179],{"class":94,"line":1757},[92,35174,31083],{"class":102},[92,35176,148],{"class":98},[92,35178,30805],{"class":151},[92,35180,31106],{"class":102},[92,35182,35183,35185,35187,35189,35191,35193],{"class":94,"line":1762},[92,35184,31083],{"class":102},[92,35186,148],{"class":98},[92,35188,30805],{"class":151},[92,35190,35166],{"class":102},[92,35192,30805],{"class":151},[92,35194,31121],{"class":102},[92,35196,35197,35199,35201,35203],{"class":94,"line":2556},[92,35198,31083],{"class":102},[92,35200,148],{"class":98},[92,35202,30805],{"class":151},[92,35204,31132],{"class":102},[92,35206,35207,35209,35211,35213,35215,35217],{"class":94,"line":2570},[92,35208,31083],{"class":102},[92,35210,148],{"class":98},[92,35212,30805],{"class":151},[92,35214,35166],{"class":102},[92,35216,30805],{"class":151},[92,35218,35219],{"class":102},".c5(x))\n",[92,35221,35222,35224,35226,35228,35230,35232],{"class":94,"line":2578},[92,35223,31083],{"class":102},[92,35225,148],{"class":98},[92,35227,30805],{"class":151},[92,35229,35166],{"class":102},[92,35231,30805],{"class":151},[92,35233,35234],{"class":102},".c6(x))\n",[92,35236,35237,35239,35241,35243,35245,35247],{"class":94,"line":2583},[92,35238,31083],{"class":102},[92,35240,148],{"class":98},[92,35242,30805],{"class":151},[92,35244,35166],{"class":102},[92,35246,30805],{"class":151},[92,35248,35249],{"class":102},".c7(x))\n",[92,35251,35252,35254,35256,35258],{"class":94,"line":2589},[92,35253,31083],{"class":102},[92,35255,148],{"class":98},[92,35257,30805],{"class":151},[92,35259,35260],{"class":102},".s8(x)\n",[92,35262,35263],{"class":94,"line":2595},[92,35264,2379],{"emptyLinePlaceholder":17},[92,35266,35267],{"class":94,"line":2600},[92,35268,35269],{"class":161},"        # 展平加线性全连接层\n",[92,35271,35272,35274,35276,35278],{"class":94,"line":7928},[92,35273,31083],{"class":102},[92,35275,148],{"class":98},[92,35277,30805],{"class":151},[92,35279,31143],{"class":102},[92,35281,35282,35284,35286,35288,35290,35292],{"class":94,"line":7952},[92,35283,31083],{"class":102},[92,35285,148],{"class":98},[92,35287,30805],{"class":151},[92,35289,35166],{"class":102},[92,35291,30805],{"class":151},[92,35293,35294],{"class":102},".f1(x))\n",[92,35296,35297],{"class":94,"line":7957},[92,35298,35299],{"class":161},"        # 还需要dropout对神经元随机进行失活\n",[92,35301,35302,35304,35306,35309,35312],{"class":94,"line":7963},[92,35303,31083],{"class":102},[92,35305,148],{"class":98},[92,35307,35308],{"class":102},"F.dropout(x,",[92,35310,35311],{"class":151},"0.5",[92,35313,109],{"class":102},[92,35315,35316,35318,35320,35322,35324,35326],{"class":94,"line":7990},[92,35317,31083],{"class":102},[92,35319,148],{"class":98},[92,35321,30805],{"class":151},[92,35323,35166],{"class":102},[92,35325,30805],{"class":151},[92,35327,35328],{"class":102},".f2(x))\n",[92,35330,35331,35333,35335,35337,35339],{"class":94,"line":7995},[92,35332,31083],{"class":102},[92,35334,148],{"class":98},[92,35336,35308],{"class":102},[92,35338,35311],{"class":151},[92,35340,109],{"class":102},[92,35342,35343],{"class":94,"line":8001},[92,35344,35345],{"class":161},"        # 直接输出\n",[92,35347,35348,35350,35352,35354],{"class":94,"line":8013},[92,35349,31083],{"class":102},[92,35351,148],{"class":98},[92,35353,30805],{"class":151},[92,35355,35356],{"class":102},".f3(x)\n",[92,35358,35359],{"class":94,"line":8025},[92,35360,35361],{"class":161},"        # 前向传播输出\n",[92,35363,35364,35366],{"class":94,"line":8037},[92,35365,14732],{"class":98},[92,35367,31191],{"class":102},[92,35369,35370],{"class":94,"line":9696},[92,35371,35372],{"class":161},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[92,35374,35375,35377,35379,35381,35383],{"class":94,"line":9721},[92,35376,1510],{"class":98},[92,35378,31202],{"class":151},[92,35380,2928],{"class":98},[92,35382,31207],{"class":207},[92,35384,3718],{"class":102},[92,35386,35387,35389,35391,35393,35395,35397,35399,35401,35403],{"class":94,"line":9744},[92,35388,31219],{"class":102},[92,35390,148],{"class":98},[92,35392,30433],{"class":102},[92,35394,31226],{"class":207},[92,35396,1683],{"class":98},[92,35398,31231],{"class":102},[92,35400,1680],{"class":98},[92,35402,30458],{"class":207},[92,35404,109],{"class":102},[92,35406,35407],{"class":94,"line":9768},[92,35408,35409],{"class":161},"    # 模型实例化，然后将实例化的模型放到设备中\n",[92,35411,35412,35414,35416],{"class":94,"line":9773},[92,35413,31271],{"class":102},[92,35415,148],{"class":98},[92,35417,35418],{"class":102},"AlexNet().to(device)\n",[92,35420,35421,35423,35425,35427,35429,35432,35434,35436],{"class":94,"line":9778},[92,35422,31281],{"class":151},[92,35424,31284],{"class":102},[92,35426,320],{"class":151},[92,35428,481],{"class":102},[92,35430,35431],{"class":151},"227",[92,35433,481],{"class":102},[92,35435,35431],{"class":151},[92,35437,31297],{"class":102},[46,35439,35440],{"start":11},[49,35441,31310],{},[83,35443,35445],{"className":30360,"code":35444,"language":30362,"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,35446,35447,35453,35459,35469,35475,35485,35495,35505,35515,35525,35529,35540,35550,35554,35558,35562,35570,35582,35592,35608,35618,35650,35664,35674,35684,35688,35698,35712,35722,35732,35742,35748,35752,35756,35760,35764,35768,35776,35796,35800,35804,35808,35812,35816,35832,35836,35840,35848,35852,35856,35864,35868,35872,35876,35884,35888,35892,35896,35900,35908,35912,35920,35924,35932,35936,35944,35948,35956,35960,35964,35972,35976,35980,35984,35996,36020,36034,36038,36042,36046,36054,36058,36066,36070,36078,36082,36090,36094,36102,36106,36114,36118,36130,36134,36142,36146,36154,36158,36162,36166,36170,36178,36182,36198,36202,36210,36214,36218,36222,36226,36230,36234,36238,36254,36258,36270,36274,36286,36290,36302,36306,36314,36318,36326,36330,36334,36339,36345,36349,36358,36362,36379,36383,36392,36396,36414,36427,36432,36445,36449,36453,36461,36465,36469,36477,36481,36489,36493,36501,36505,36509,36551,36593,36597,36601,36617,36621,36637,36641,36645,36653,36657,36661,36673,36711,36716,36721,36730,36734,36748,36758,36764,36770,36776,36782,36786,36790,36796,36800,36804,36812,36816,36834,36838,36842,36846,36862,36866,36870,36874,36878,36882,36902,36922,36926,36930,36934,36942,36950,36954,36970,36990,37010,37014,37018,37026,37034,37038,37042,37046,37058,37062,37072,37080,37097],{"__ignoreMap":10},[92,35448,35449,35451],{"class":94,"line":95},[92,35450,30374],{"class":98},[92,35452,31804],{"class":102},[92,35454,35455,35457],{"class":94,"line":11},[92,35456,30374],{"class":98},[92,35458,31811],{"class":102},[92,35460,35461,35463,35465,35467],{"class":94,"line":1158},[92,35462,30374],{"class":98},[92,35464,31822],{"class":102},[92,35466,31365],{"class":98},[92,35468,31827],{"class":102},[92,35470,35471,35473],{"class":94,"line":1173},[92,35472,30374],{"class":98},[92,35474,30377],{"class":102},[92,35476,35477,35479,35481,35483],{"class":94,"line":1179},[92,35478,30719],{"class":98},[92,35480,31397],{"class":102},[92,35482,30374],{"class":98},[92,35484,31844],{"class":102},[92,35486,35487,35489,35491,35493],{"class":94,"line":1193},[92,35488,30719],{"class":98},[92,35490,31350],{"class":102},[92,35492,30374],{"class":98},[92,35494,31355],{"class":102},[92,35496,35497,35499,35501,35503],{"class":94,"line":1199},[92,35498,30719],{"class":98},[92,35500,31380],{"class":102},[92,35502,30374],{"class":98},[92,35504,31385],{"class":102},[92,35506,35507,35509,35511,35513],{"class":94,"line":1290},[92,35508,30374],{"class":98},[92,35510,31397],{"class":102},[92,35512,31365],{"class":98},[92,35514,31402],{"class":102},[92,35516,35517,35519,35521,35523],{"class":94,"line":1296},[92,35518,30374],{"class":98},[92,35520,31414],{"class":102},[92,35522,31365],{"class":98},[92,35524,31419],{"class":102},[92,35526,35527],{"class":94,"line":1308},[92,35528,31889],{"class":161},[92,35530,35531,35533,35535,35537],{"class":94,"line":1591},[92,35532,30719],{"class":98},[92,35534,31896],{"class":102},[92,35536,30374],{"class":98},[92,35538,35539],{"class":102}," AlexNet\n",[92,35541,35542,35544,35546,35548],{"class":94,"line":1596},[92,35543,30719],{"class":98},[92,35545,30722],{"class":102},[92,35547,30374],{"class":98},[92,35549,30727],{"class":102},[92,35551,35552],{"class":94,"line":1602},[92,35553,2379],{"emptyLinePlaceholder":17},[92,35555,35556],{"class":94,"line":1607},[92,35557,2379],{"emptyLinePlaceholder":17},[92,35559,35560],{"class":94,"line":1621},[92,35561,31924],{"class":161},[92,35563,35564,35566,35568],{"class":94,"line":1626},[92,35565,31929],{"class":98},[92,35567,31932],{"class":1942},[92,35569,31935],{"class":102},[92,35571,35572,35574,35576,35578,35580],{"class":94,"line":1632},[92,35573,31940],{"class":102},[92,35575,148],{"class":98},[92,35577,31437],{"class":102},[92,35579,31445],{"class":207},[92,35581,31448],{"class":102},[92,35583,35584,35586,35588,35590],{"class":94,"line":1653},[92,35585,31953],{"class":5196},[92,35587,148],{"class":98},[92,35589,31458],{"class":151},[92,35591,31448],{"class":102},[92,35593,35594,35596,35598,35600,35602,35604,35606],{"class":94,"line":1658},[92,35595,31964],{"class":5196},[92,35597,148],{"class":98},[92,35599,31475],{"class":102},[92,35601,31478],{"class":5196},[92,35603,148],{"class":98},[92,35605,35431],{"class":151},[92,35607,31486],{"class":102},[92,35609,35610,35612,35614,35616],{"class":94,"line":1672},[92,35611,31981],{"class":5196},[92,35613,148],{"class":98},[92,35615,31458],{"class":151},[92,35617,109],{"class":102},[92,35619,35620,35622,35624,35626,35628,35630,35632,35634,35636,35638,35640,35642,35644,35646,35648],{"class":94,"line":1677},[92,35621,31992],{"class":102},[92,35623,148],{"class":98},[92,35625,31997],{"class":102},[92,35627,32000],{"class":151},[92,35629,103],{"class":102},[92,35631,32005],{"class":151},[92,35633,558],{"class":98},[92,35635,7338],{"class":151},[92,35637,32012],{"class":102},[92,35639,32000],{"class":151},[92,35641,103],{"class":102},[92,35643,32019],{"class":151},[92,35645,558],{"class":98},[92,35647,7338],{"class":151},[92,35649,32026],{"class":102},[92,35651,35652,35654,35656,35658,35660,35662],{"class":94,"line":1706},[92,35653,32031],{"class":102},[92,35655,148],{"class":98},[92,35657,32036],{"class":102},[92,35659,31519],{"class":5196},[92,35661,148],{"class":98},[92,35663,31524],{"class":102},[92,35665,35666,35668,35670,35672],{"class":94,"line":1711},[92,35667,32047],{"class":5196},[92,35669,148],{"class":98},[92,35671,32052],{"class":151},[92,35673,31448],{"class":102},[92,35675,35676,35678,35680,35682],{"class":94,"line":1728},[92,35677,32059],{"class":5196},[92,35679,148],{"class":98},[92,35681,31458],{"class":151},[92,35683,31448],{"class":102},[92,35685,35686],{"class":94,"line":1733},[92,35687,32070],{"class":161},[92,35689,35690,35692,35694,35696],{"class":94,"line":1738},[92,35691,32075],{"class":5196},[92,35693,148],{"class":98},[92,35695,498],{"class":151},[92,35697,109],{"class":102},[92,35699,35700,35702,35704,35706,35708,35710],{"class":94,"line":1743},[92,35701,32086],{"class":102},[92,35703,148],{"class":98},[92,35705,31516],{"class":102},[92,35707,31519],{"class":5196},[92,35709,148],{"class":98},[92,35711,32097],{"class":102},[92,35713,35714,35716,35718,35720],{"class":94,"line":1757},[92,35715,32102],{"class":5196},[92,35717,148],{"class":98},[92,35719,32052],{"class":151},[92,35721,31448],{"class":102},[92,35723,35724,35726,35728,35730],{"class":94,"line":1762},[92,35725,32113],{"class":5196},[92,35727,148],{"class":98},[92,35729,31458],{"class":151},[92,35731,31448],{"class":102},[92,35733,35734,35736,35738,35740],{"class":94,"line":2556},[92,35735,32124],{"class":5196},[92,35737,148],{"class":98},[92,35739,498],{"class":151},[92,35741,109],{"class":102},[92,35743,35744,35746],{"class":94,"line":2570},[92,35745,4069],{"class":98},[92,35747,32137],{"class":102},[92,35749,35750],{"class":94,"line":2578},[92,35751,2379],{"emptyLinePlaceholder":17},[92,35753,35754],{"class":94,"line":2583},[92,35755,32146],{"class":161},[92,35757,35758],{"class":94,"line":2589},[92,35759,32151],{"class":161},[92,35761,35762],{"class":94,"line":2595},[92,35763,2379],{"emptyLinePlaceholder":17},[92,35765,35766],{"class":94,"line":2600},[92,35767,32160],{"class":161},[92,35769,35770,35772,35774],{"class":94,"line":7928},[92,35771,31929],{"class":98},[92,35773,32167],{"class":1942},[92,35775,32170],{"class":102},[92,35777,35778,35780,35782,35784,35786,35788,35790,35792,35794],{"class":94,"line":7952},[92,35779,31219],{"class":102},[92,35781,148],{"class":98},[92,35783,30433],{"class":102},[92,35785,31226],{"class":207},[92,35787,1683],{"class":98},[92,35789,31231],{"class":102},[92,35791,1680],{"class":98},[92,35793,32189],{"class":207},[92,35795,109],{"class":102},[92,35797,35798],{"class":94,"line":7957},[92,35799,2379],{"emptyLinePlaceholder":17},[92,35801,35802],{"class":94,"line":7963},[92,35803,2379],{"emptyLinePlaceholder":17},[92,35805,35806],{"class":94,"line":7990},[92,35807,32204],{"class":161},[92,35809,35810],{"class":94,"line":7995},[92,35811,32209],{"class":161},[92,35813,35814],{"class":94,"line":8001},[92,35815,32214],{"class":161},[92,35817,35818,35820,35822,35824,35826,35828,35830],{"class":94,"line":8013},[92,35819,32219],{"class":102},[92,35821,148],{"class":98},[92,35823,32224],{"class":102},[92,35825,32227],{"class":5196},[92,35827,148],{"class":98},[92,35829,32232],{"class":151},[92,35831,109],{"class":102},[92,35833,35834],{"class":94,"line":8025},[92,35835,2379],{"emptyLinePlaceholder":17},[92,35837,35838],{"class":94,"line":8037},[92,35839,32243],{"class":161},[92,35841,35842,35844,35846],{"class":94,"line":9696},[92,35843,32248],{"class":102},[92,35845,148],{"class":98},[92,35847,32253],{"class":102},[92,35849,35850],{"class":94,"line":9721},[92,35851,2379],{"emptyLinePlaceholder":17},[92,35853,35854],{"class":94,"line":9744},[92,35855,32262],{"class":161},[92,35857,35858,35860,35862],{"class":94,"line":9768},[92,35859,31271],{"class":102},[92,35861,148],{"class":98},[92,35863,32271],{"class":102},[92,35865,35866],{"class":94,"line":9773},[92,35867,32276],{"class":161},[92,35869,35870],{"class":94,"line":9778},[92,35871,32281],{"class":161},[92,35873,35874],{"class":94,"line":9783},[92,35875,32286],{"class":161},[92,35877,35878,35880,35882],{"class":94,"line":9792},[92,35879,32291],{"class":102},[92,35881,148],{"class":98},[92,35883,32296],{"class":102},[92,35885,35886],{"class":94,"line":9797},[92,35887,2379],{"emptyLinePlaceholder":17},[92,35889,35890],{"class":94,"line":9803},[92,35891,2379],{"emptyLinePlaceholder":17},[92,35893,35894],{"class":94,"line":9824},[92,35895,32309],{"class":161},[92,35897,35898],{"class":94,"line":9830},[92,35899,32314],{"class":161},[92,35901,35902,35904,35906],{"class":94,"line":9844},[92,35903,32319],{"class":102},[92,35905,148],{"class":98},[92,35907,32324],{"class":151},[92,35909,35910],{"class":94,"line":9850},[92,35911,32329],{"class":161},[92,35913,35914,35916,35918],{"class":94,"line":9877},[92,35915,32334],{"class":102},[92,35917,148],{"class":98},[92,35919,32339],{"class":102},[92,35921,35922],{"class":94,"line":9886},[92,35923,32344],{"class":161},[92,35925,35926,35928,35930],{"class":94,"line":9892},[92,35927,32349],{"class":102},[92,35929,148],{"class":98},[92,35931,32339],{"class":102},[92,35933,35934],{"class":94,"line":9900},[92,35935,32358],{"class":161},[92,35937,35938,35940,35942],{"class":94,"line":9905},[92,35939,32363],{"class":102},[92,35941,148],{"class":98},[92,35943,32339],{"class":102},[92,35945,35946],{"class":94,"line":16584},[92,35947,32372],{"class":161},[92,35949,35950,35952,35954],{"class":94,"line":16590},[92,35951,32377],{"class":102},[92,35953,148],{"class":98},[92,35955,32339],{"class":102},[92,35957,35958],{"class":94,"line":16613},[92,35959,2379],{"emptyLinePlaceholder":17},[92,35961,35962],{"class":94,"line":16619},[92,35963,32390],{"class":161},[92,35965,35966,35968,35970],{"class":94,"line":16642},[92,35967,32395],{"class":102},[92,35969,148],{"class":98},[92,35971,32400],{"class":102},[92,35973,35974],{"class":94,"line":16656},[92,35975,2379],{"emptyLinePlaceholder":17},[92,35977,35978],{"class":94,"line":16676},[92,35979,2379],{"emptyLinePlaceholder":17},[92,35981,35982],{"class":94,"line":16682},[92,35983,32413],{"class":161},[92,35985,35986,35988,35990,35992,35994],{"class":94,"line":16693},[92,35987,3180],{"class":98},[92,35989,32420],{"class":102},[92,35991,26025],{"class":98},[92,35993,32425],{"class":151},[92,35995,32428],{"class":102},[92,35997,35998,36000,36002,36004,36006,36008,36010,36012,36014,36016,36018],{"class":94,"line":16716},[92,35999,32433],{"class":151},[92,36001,103],{"class":102},[92,36003,32438],{"class":207},[92,36005,32441],{"class":151},[92,36007,687],{"class":207},[92,36009,32441],{"class":151},[92,36011,354],{"class":207},[92,36013,32450],{"class":102},[92,36015,635],{"class":98},[92,36017,320],{"class":151},[92,36019,30479],{"class":102},[92,36021,36022,36024,36026,36028,36030,36032],{"class":94,"line":16738},[92,36023,32433],{"class":151},[92,36025,103],{"class":102},[92,36027,32465],{"class":207},[92,36029,558],{"class":98},[92,36031,549],{"class":151},[92,36033,109],{"class":102},[92,36035,36036],{"class":94,"line":16743},[92,36037,2379],{"emptyLinePlaceholder":17},[92,36039,36040],{"class":94,"line":16749},[92,36041,32480],{"class":161},[92,36043,36044],{"class":94,"line":16763},[92,36045,32485],{"class":161},[92,36047,36048,36050,36052],{"class":94,"line":16776},[92,36049,32490],{"class":102},[92,36051,148],{"class":98},[92,36053,32324],{"class":151},[92,36055,36056],{"class":94,"line":16781},[92,36057,32499],{"class":161},[92,36059,36060,36062,36064],{"class":94,"line":16795},[92,36061,32504],{"class":102},[92,36063,148],{"class":98},[92,36065,3064],{"class":151},[92,36067,36068],{"class":94,"line":16800},[92,36069,32513],{"class":161},[92,36071,36072,36074,36076],{"class":94,"line":16806},[92,36073,32518],{"class":102},[92,36075,148],{"class":98},[92,36077,32324],{"class":151},[92,36079,36080],{"class":94,"line":16811},[92,36081,32527],{"class":161},[92,36083,36084,36086,36088],{"class":94,"line":16825},[92,36085,32532],{"class":102},[92,36087,148],{"class":98},[92,36089,3064],{"class":151},[92,36091,36092],{"class":94,"line":16830},[92,36093,32541],{"class":161},[92,36095,36096,36098,36100],{"class":94,"line":16835},[92,36097,32546],{"class":102},[92,36099,148],{"class":98},[92,36101,3064],{"class":151},[92,36103,36104],{"class":94,"line":16849},[92,36105,32555],{"class":161},[92,36107,36108,36110,36112],{"class":94,"line":16861},[92,36109,32560],{"class":102},[92,36111,148],{"class":98},[92,36113,3064],{"class":151},[92,36115,36116],{"class":94,"line":16866},[92,36117,32569],{"class":161},[92,36119,36120,36122,36124,36126,36128],{"class":94,"line":16879},[92,36121,3382],{"class":98},[92,36123,31583],{"class":102},[92,36125,26025],{"class":98},[92,36127,31588],{"class":151},[92,36129,32582],{"class":102},[92,36131,36132],{"class":94,"line":16884},[92,36133,32587],{"class":161},[92,36135,36136,36138,36140],{"class":94,"line":16889},[92,36137,32592],{"class":102},[92,36139,148],{"class":98},[92,36141,32597],{"class":102},[92,36143,36144],{"class":94,"line":16894},[92,36145,32602],{"class":161},[92,36147,36148,36150,36152],{"class":94,"line":16907},[92,36149,32607],{"class":102},[92,36151,148],{"class":98},[92,36153,32612],{"class":102},[92,36155,36156],{"class":94,"line":16912},[92,36157,32618],{"class":161},[92,36159,36160],{"class":94,"line":32615},[92,36161,32624],{"class":102},[92,36163,36164],{"class":94,"line":32621},[92,36165,32630],{"class":161},[92,36167,36168],{"class":94,"line":32627},[92,36169,32636],{"class":161},[92,36171,36172,36174,36176],{"class":94,"line":32633},[92,36173,32642],{"class":102},[92,36175,148],{"class":98},[92,36177,32647],{"class":102},[92,36179,36180],{"class":94,"line":32639},[92,36181,32653],{"class":161},[92,36183,36184,36186,36188,36190,36192,36194,36196],{"class":94,"line":32650},[92,36185,32659],{"class":102},[92,36187,148],{"class":98},[92,36189,32664],{"class":102},[92,36191,32667],{"class":5196},[92,36193,148],{"class":98},[92,36195,320],{"class":151},[92,36197,109],{"class":102},[92,36199,36200],{"class":94,"line":32656},[92,36201,32679],{"class":161},[92,36203,36204,36206,36208],{"class":94,"line":32676},[92,36205,32685],{"class":102},[92,36207,148],{"class":98},[92,36209,32690],{"class":102},[92,36211,36212],{"class":94,"line":32682},[92,36213,32696],{"class":161},[92,36215,36216],{"class":94,"line":32693},[92,36217,32702],{"class":102},[92,36219,36220],{"class":94,"line":32699},[92,36221,32708],{"class":161},[92,36223,36224],{"class":94,"line":32705},[92,36225,32714],{"class":102},[92,36227,36228],{"class":94,"line":32711},[92,36229,32720],{"class":161},[92,36231,36232],{"class":94,"line":32717},[92,36233,32726],{"class":102},[92,36235,36236],{"class":94,"line":32723},[92,36237,32732],{"class":161},[92,36239,36240,36242,36244,36246,36248,36250,36252],{"class":94,"line":32729},[92,36241,32738],{"class":102},[92,36243,9457],{"class":98},[92,36245,32743],{"class":102},[92,36247,558],{"class":98},[92,36249,32748],{"class":102},[92,36251,294],{"class":151},[92,36253,109],{"class":102},[92,36255,36256],{"class":94,"line":32735},[92,36257,32758],{"class":161},[92,36259,36260,36262,36264,36266,36268],{"class":94,"line":32755},[92,36261,32764],{"class":102},[92,36263,9457],{"class":98},[92,36265,32769],{"class":102},[92,36267,2928],{"class":98},[92,36269,32774],{"class":102},[92,36271,36272],{"class":94,"line":32761},[92,36273,32780],{"class":161},[92,36275,36276,36278,36280,36282,36284],{"class":94,"line":32777},[92,36277,32786],{"class":102},[92,36279,9457],{"class":98},[92,36281,32748],{"class":102},[92,36283,294],{"class":151},[92,36285,109],{"class":102},[92,36287,36288],{"class":94,"line":32783},[92,36289,32800],{"class":161},[92,36291,36292,36294,36296,36298,36300],{"class":94,"line":32797},[92,36293,3382],{"class":98},[92,36295,32808],{"class":102},[92,36297,26025],{"class":98},[92,36299,31588],{"class":151},[92,36301,32815],{"class":102},[92,36303,36304],{"class":94,"line":32803},[92,36305,32821],{"class":161},[92,36307,36308,36310,36312],{"class":94,"line":32818},[92,36309,32592],{"class":102},[92,36311,148],{"class":98},[92,36313,32597],{"class":102},[92,36315,36316],{"class":94,"line":32824},[92,36317,32836],{"class":161},[92,36319,36320,36322,36324],{"class":94,"line":32833},[92,36321,32607],{"class":102},[92,36323,148],{"class":98},[92,36325,32612],{"class":102},[92,36327,36328],{"class":94,"line":32839},[92,36329,32851],{"class":161},[92,36331,36332],{"class":94,"line":32848},[92,36333,32857],{"class":102},[92,36335,36336],{"class":94,"line":32854},[92,36337,36338],{"class":161},"            # 验证时不计算梯度以节省内存\u002F计算\n",[92,36340,36341,36343],{"class":94,"line":32860},[92,36342,32863],{"class":98},[92,36344,32866],{"class":102},[92,36346,36347],{"class":94,"line":32869},[92,36348,32872],{"class":161},[92,36350,36351,36354,36356],{"class":94,"line":32875},[92,36352,36353],{"class":102},"                output",[92,36355,148],{"class":98},[92,36357,32647],{"class":102},[92,36359,36360],{"class":94,"line":32886},[92,36361,32889],{"class":161},[92,36363,36364,36367,36369,36371,36373,36375,36377],{"class":94,"line":32892},[92,36365,36366],{"class":102},"                pre_lab",[92,36368,148],{"class":98},[92,36370,32664],{"class":102},[92,36372,32667],{"class":5196},[92,36374,148],{"class":98},[92,36376,320],{"class":151},[92,36378,109],{"class":102},[92,36380,36381],{"class":94,"line":32911},[92,36382,32914],{"class":161},[92,36384,36385,36388,36390],{"class":94,"line":32917},[92,36386,36387],{"class":102},"                val_batch_loss",[92,36389,148],{"class":98},[92,36391,32690],{"class":102},[92,36393,36394],{"class":94,"line":32928},[92,36395,32931],{"class":161},[92,36397,36398,36401,36403,36406,36408,36410,36412],{"class":94,"line":32934},[92,36399,36400],{"class":102},"                val_loss",[92,36402,9457],{"class":98},[92,36404,36405],{"class":102},"val_batch_loss.item()",[92,36407,558],{"class":98},[92,36409,32748],{"class":102},[92,36411,294],{"class":151},[92,36413,109],{"class":102},[92,36415,36416,36419,36421,36423,36425],{"class":94,"line":32954},[92,36417,36418],{"class":102},"                val_corrects",[92,36420,9457],{"class":98},[92,36422,32769],{"class":102},[92,36424,2928],{"class":98},[92,36426,32774],{"class":102},[92,36428,36429],{"class":94,"line":32970},[92,36430,36431],{"class":161},"            # 当前用于验证的样本数量\n",[92,36433,36434,36437,36439,36441,36443],{"class":94,"line":32976},[92,36435,36436],{"class":102},"            val_num",[92,36438,9457],{"class":98},[92,36440,32748],{"class":102},[92,36442,294],{"class":151},[92,36444,109],{"class":102},[92,36446,36447],{"class":94,"line":32990},[92,36448,32993],{"class":161},[92,36450,36451],{"class":94,"line":32996},[92,36452,32999],{"class":161},[92,36454,36455,36457,36459],{"class":94,"line":33002},[92,36456,33005],{"class":102},[92,36458,687],{"class":98},[92,36460,33010],{"class":102},[92,36462,36463],{"class":94,"line":33013},[92,36464,33016],{"class":161},[92,36466,36467],{"class":94,"line":33019},[92,36468,33022],{"class":161},[92,36470,36471,36473,36475],{"class":94,"line":33025},[92,36472,33028],{"class":102},[92,36474,687],{"class":98},[92,36476,33010],{"class":102},[92,36478,36479],{"class":94,"line":33035},[92,36480,33038],{"class":161},[92,36482,36483,36485,36487],{"class":94,"line":33041},[92,36484,33044],{"class":102},[92,36486,687],{"class":98},[92,36488,33049],{"class":102},[92,36490,36491],{"class":94,"line":33052},[92,36492,33055],{"class":161},[92,36494,36495,36497,36499],{"class":94,"line":33058},[92,36496,33061],{"class":102},[92,36498,687],{"class":98},[92,36500,33049],{"class":102},[92,36502,36503],{"class":94,"line":33068},[92,36504,2379],{"emptyLinePlaceholder":17},[92,36506,36507],{"class":94,"line":33073},[92,36508,33076],{"class":161},[92,36510,36511,36513,36515,36517,36519,36521,36523,36525,36527,36529,36531,36533,36535,36537,36539,36541,36543,36545,36547,36549],{"class":94,"line":33079},[92,36512,32433],{"class":151},[92,36514,103],{"class":102},[92,36516,3571],{"class":207},[92,36518,32441],{"class":151},[92,36520,33090],{"class":207},[92,36522,999],{"class":151},[92,36524,33095],{"class":98},[92,36526,1049],{"class":151},[92,36528,33100],{"class":207},[92,36530,999],{"class":151},[92,36532,33095],{"class":98},[92,36534,1049],{"class":151},[92,36536,3571],{"class":207},[92,36538,33111],{"class":102},[92,36540,635],{"class":98},[92,36542,320],{"class":151},[92,36544,33118],{"class":102},[92,36546,635],{"class":98},[92,36548,320],{"class":151},[92,36550,33125],{"class":102},[92,36552,36553,36555,36557,36559,36561,36563,36565,36567,36569,36571,36573,36575,36577,36579,36581,36583,36585,36587,36589,36591],{"class":94,"line":33128},[92,36554,32433],{"class":151},[92,36556,103],{"class":102},[92,36558,3571],{"class":207},[92,36560,32441],{"class":151},[92,36562,33139],{"class":207},[92,36564,999],{"class":151},[92,36566,33095],{"class":98},[92,36568,1049],{"class":151},[92,36570,33148],{"class":207},[92,36572,999],{"class":151},[92,36574,33095],{"class":98},[92,36576,1049],{"class":151},[92,36578,3571],{"class":207},[92,36580,33159],{"class":102},[92,36582,635],{"class":98},[92,36584,320],{"class":151},[92,36586,33166],{"class":102},[92,36588,635],{"class":98},[92,36590,320],{"class":151},[92,36592,33125],{"class":102},[92,36594,36595],{"class":94,"line":33175},[92,36596,2379],{"emptyLinePlaceholder":17},[92,36598,36599],{"class":94,"line":33180},[92,36600,33183],{"class":161},[92,36602,36603,36605,36607,36609,36611,36613,36615],{"class":94,"line":33186},[92,36604,2476],{"class":98},[92,36606,33191],{"class":102},[92,36608,635],{"class":98},[92,36610,320],{"class":151},[92,36612,1043],{"class":102},[92,36614,1063],{"class":98},[92,36616,33202],{"class":102},[92,36618,36619],{"class":94,"line":33205},[92,36620,33208],{"class":161},[92,36622,36623,36625,36627,36629,36631,36633,36635],{"class":94,"line":33211},[92,36624,33214],{"class":102},[92,36626,142],{"class":151},[92,36628,148],{"class":98},[92,36630,33221],{"class":102},[92,36632,635],{"class":98},[92,36634,320],{"class":151},[92,36636,33228],{"class":102},[92,36638,36639],{"class":94,"line":33231},[92,36640,33234],{"class":161},[92,36642,36643],{"class":94,"line":33237},[92,36644,33240],{"class":161},[92,36646,36647,36649,36651],{"class":94,"line":33243},[92,36648,33246],{"class":102},[92,36650,148],{"class":98},[92,36652,32296],{"class":102},[92,36654,36655],{"class":94,"line":33253},[92,36656,2379],{"emptyLinePlaceholder":17},[92,36658,36659],{"class":94,"line":33258},[92,36660,33261],{"class":161},[92,36662,36663,36665,36667,36669,36671],{"class":94,"line":33264},[92,36664,33267],{"class":102},[92,36666,148],{"class":98},[92,36668,33272],{"class":102},[92,36670,635],{"class":98},[92,36672,33277],{"class":102},[92,36674,36675,36677,36679,36681,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705,36707,36709],{"class":94,"line":33280},[92,36676,32433],{"class":151},[92,36678,103],{"class":102},[92,36680,33287],{"class":207},[92,36682,999],{"class":151},[92,36684,33292],{"class":98},[92,36686,1049],{"class":151},[92,36688,647],{"class":207},[92,36690,999],{"class":151},[92,36692,33292],{"class":98},[92,36694,1049],{"class":151},[92,36696,33305],{"class":207},[92,36698,33308],{"class":102},[92,36700,33311],{"class":98},[92,36702,1010],{"class":151},[92,36704,33316],{"class":102},[92,36706,431],{"class":98},[92,36708,1010],{"class":151},[92,36710,30479],{"class":102},[92,36712,36713],{"class":94,"line":33325},[92,36714,36715],{"class":161},"    # 选择最优参数并保存\n",[92,36717,36718],{"class":94,"line":33331},[92,36719,36720],{"class":161},"    # 保存最佳模型权重字典\n",[92,36722,36723,36726,36728],{"class":94,"line":33337},[92,36724,36725],{"class":102},"    torch.save(best_model_wts,",[92,36727,33349],{"class":207},[92,36729,109],{"class":102},[92,36731,36732],{"class":94,"line":33343},[92,36733,33369],{"class":161},[92,36735,36736,36738,36740,36742,36744,36746],{"class":94,"line":33354},[92,36737,33375],{"class":102},[92,36739,148],{"class":98},[92,36741,33380],{"class":102},[92,36743,33383],{"class":5196},[92,36745,148],{"class":98},[92,36747,1525],{"class":102},[92,36749,36750,36752,36754,36756],{"class":94,"line":33360},[92,36751,33393],{"class":207},[92,36753,962],{"class":102},[92,36755,33398],{"class":151},[92,36757,33401],{"class":102},[92,36759,36760,36762],{"class":94,"line":33366},[92,36761,33407],{"class":207},[92,36763,33410],{"class":102},[92,36765,36766,36768],{"class":94,"line":33372},[92,36767,33416],{"class":207},[92,36769,33419],{"class":102},[92,36771,36772,36774],{"class":94,"line":33390},[92,36773,33425],{"class":207},[92,36775,33428],{"class":102},[92,36777,36778,36780],{"class":94,"line":33404},[92,36779,33434],{"class":207},[92,36781,33437],{"class":102},[92,36783,36784],{"class":94,"line":33413},[92,36785,33443],{"class":102},[92,36787,36788],{"class":94,"line":33422},[92,36789,33449],{"class":161},[92,36791,36792,36794],{"class":94,"line":33431},[92,36793,4069],{"class":98},[92,36795,33457],{"class":102},[92,36797,36798],{"class":94,"line":33440},[92,36799,2379],{"emptyLinePlaceholder":17},[92,36801,36802],{"class":94,"line":33446},[92,36803,33468],{"class":161},[92,36805,36806,36808,36810],{"class":94,"line":33452},[92,36807,31929],{"class":98},[92,36809,33476],{"class":1942},[92,36811,33479],{"class":102},[92,36813,36814],{"class":94,"line":33460},[92,36815,33485],{"class":161},[92,36817,36818,36820,36822,36824,36826,36828,36830,36832],{"class":94,"line":33465},[92,36819,33491],{"class":102},[92,36821,31675],{"class":5196},[92,36823,148],{"class":98},[92,36825,103],{"class":102},[92,36827,601],{"class":151},[92,36829,481],{"class":102},[92,36831,396],{"class":151},[92,36833,30479],{"class":102},[92,36835,36836],{"class":94,"line":33471},[92,36837,33511],{"class":161},[92,36839,36840],{"class":94,"line":33482},[92,36841,33517],{"class":161},[92,36843,36844],{"class":94,"line":33488},[92,36845,33523],{"class":161},[92,36847,36848,36850,36852,36854,36856,36858,36860],{"class":94,"line":33508},[92,36849,31709],{"class":102},[92,36851,320],{"class":151},[92,36853,481],{"class":102},[92,36855,180],{"class":151},[92,36857,481],{"class":102},[92,36859,320],{"class":151},[92,36861,109],{"class":102},[92,36863,36864],{"class":94,"line":33514},[92,36865,33546],{"class":161},[92,36867,36868],{"class":94,"line":33520},[92,36869,33552],{"class":161},[92,36871,36872],{"class":94,"line":33526},[92,36873,33558],{"class":161},[92,36875,36876],{"class":94,"line":33543},[92,36877,33564],{"class":161},[92,36879,36880],{"class":94,"line":33549},[92,36881,33570],{"class":161},[92,36883,36884,36886,36888,36890,36892,36894,36896,36898,36900],{"class":94,"line":33555},[92,36885,33576],{"class":102},[92,36887,33579],{"class":207},[92,36889,33582],{"class":102},[92,36891,33585],{"class":207},[92,36893,481],{"class":102},[92,36895,33590],{"class":5196},[92,36897,148],{"class":98},[92,36899,33595],{"class":207},[92,36901,109],{"class":102},[92,36903,36904,36906,36908,36910,36912,36914,36916,36918,36920],{"class":94,"line":33561},[92,36905,33576],{"class":102},[92,36907,33579],{"class":207},[92,36909,33607],{"class":102},[92,36911,33610],{"class":207},[92,36913,481],{"class":102},[92,36915,33590],{"class":5196},[92,36917,148],{"class":98},[92,36919,33619],{"class":207},[92,36921,109],{"class":102},[92,36923,36924],{"class":94,"line":33567},[92,36925,33627],{"class":161},[92,36927,36928],{"class":94,"line":33573},[92,36929,33633],{"class":102},[92,36931,36932],{"class":94,"line":33600},[92,36933,33639],{"class":161},[92,36935,36936,36938,36940],{"class":94,"line":33624},[92,36937,33645],{"class":102},[92,36939,33648],{"class":207},[92,36941,109],{"class":102},[92,36943,36944,36946,36948],{"class":94,"line":33630},[92,36945,33656],{"class":102},[92,36947,33659],{"class":207},[92,36949,109],{"class":102},[92,36951,36952],{"class":94,"line":33636},[92,36953,33667],{"class":161},[92,36955,36956,36958,36960,36962,36964,36966,36968],{"class":94,"line":33642},[92,36957,31709],{"class":102},[92,36959,320],{"class":151},[92,36961,481],{"class":102},[92,36963,180],{"class":151},[92,36965,481],{"class":102},[92,36967,180],{"class":151},[92,36969,109],{"class":102},[92,36971,36972,36974,36976,36978,36980,36982,36984,36986,36988],{"class":94,"line":33653},[92,36973,33576],{"class":102},[92,36975,33579],{"class":207},[92,36977,33694],{"class":102},[92,36979,33585],{"class":207},[92,36981,481],{"class":102},[92,36983,33590],{"class":5196},[92,36985,148],{"class":98},[92,36987,33705],{"class":207},[92,36989,109],{"class":102},[92,36991,36992,36994,36996,36998,37000,37002,37004,37006,37008],{"class":94,"line":33664},[92,36993,33576],{"class":102},[92,36995,33579],{"class":207},[92,36997,33717],{"class":102},[92,36999,33610],{"class":207},[92,37001,481],{"class":102},[92,37003,33590],{"class":5196},[92,37005,148],{"class":98},[92,37007,33728],{"class":207},[92,37009,109],{"class":102},[92,37011,37012],{"class":94,"line":33670},[92,37013,33736],{"class":161},[92,37015,37016],{"class":94,"line":33687},[92,37017,33633],{"class":102},[92,37019,37020,37022,37024],{"class":94,"line":33710},[92,37021,33645],{"class":102},[92,37023,33579],{"class":207},[92,37025,109],{"class":102},[92,37027,37028,37030,37032],{"class":94,"line":33733},[92,37029,33656],{"class":102},[92,37031,33758],{"class":207},[92,37033,109],{"class":102},[92,37035,37036],{"class":94,"line":33739},[92,37037,33766],{"class":102},[92,37039,37040],{"class":94,"line":33744},[92,37041,2379],{"emptyLinePlaceholder":17},[92,37043,37044],{"class":94,"line":33753},[92,37045,33777],{"class":161},[92,37047,37048,37050,37052,37054,37056],{"class":94,"line":33763},[92,37049,1510],{"class":98},[92,37051,31202],{"class":151},[92,37053,2928],{"class":98},[92,37055,31207],{"class":207},[92,37057,3718],{"class":102},[92,37059,37060],{"class":94,"line":33769},[92,37061,33796],{"class":161},[92,37063,37064,37067,37069],{"class":94,"line":33774},[92,37065,37066],{"class":102},"    AlexNet",[92,37068,148],{"class":98},[92,37070,37071],{"class":102},"AlexNet()\n",[92,37073,37074,37076,37078],{"class":94,"line":33780},[92,37075,33813],{"class":102},[92,37077,148],{"class":98},[92,37079,33818],{"class":102},[92,37081,37082,37084,37086,37089,37091,37093,37095],{"class":94,"line":33793},[92,37083,33375],{"class":102},[92,37085,148],{"class":98},[92,37087,37088],{"class":102},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[92,37090,33831],{"class":5196},[92,37092,148],{"class":98},[92,37094,803],{"class":151},[92,37096,109],{"class":102},[92,37098,37099],{"class":94,"line":33799},[92,37100,33843],{"class":102},[46,37102,37103],{"start":1158},[49,37104,33856],{},[83,37106,37108],{"className":30360,"code":37107,"language":30362,"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,37109,37110,37116,37126,37136,37146,37150,37160,37170,37181,37185,37189,37193,37201,37217,37227,37243,37253,37267,37271,37281,37291,37301,37307,37311,37315,37323,37327,37343,37351,37355,37359,37367,37375,37379,37383,37387,37391,37397,37401,37411,37419,37427,37431,37435,37439,37447,37451,37467,37471,37475,37479,37491,37495,37507,37511,37515,37527,37531,37541,37545,37549,37561,37565,37573,37577,37581,37589,37593,37601,37605,37609,37613,37617,37621,37637,37645,37649,37653,37701,37707,37711,37721,37729,37737,37741,37745,37749,37753,37761,37765,37781,37785,37793,37801],{"__ignoreMap":10},[92,37111,37112,37114],{"class":94,"line":95},[92,37113,30374],{"class":98},[92,37115,30377],{"class":102},[92,37117,37118,37120,37122,37124],{"class":94,"line":11},[92,37119,30374],{"class":98},[92,37121,31397],{"class":102},[92,37123,31365],{"class":98},[92,37125,31402],{"class":102},[92,37127,37128,37130,37132,37134],{"class":94,"line":1158},[92,37129,30719],{"class":98},[92,37131,33884],{"class":102},[92,37133,30374],{"class":98},[92,37135,33889],{"class":102},[92,37137,37138,37140,37142,37144],{"class":94,"line":1173},[92,37139,30719],{"class":98},[92,37141,31380],{"class":102},[92,37143,30374],{"class":98},[92,37145,31385],{"class":102},[92,37147,37148],{"class":94,"line":1179},[92,37149,33904],{"class":161},[92,37151,37152,37154,37156,37158],{"class":94,"line":1193},[92,37153,30719],{"class":98},[92,37155,31350],{"class":102},[92,37157,30374],{"class":98},[92,37159,31355],{"class":102},[92,37161,37162,37164,37166,37168],{"class":94,"line":1199},[92,37163,30719],{"class":98},[92,37165,31896],{"class":102},[92,37167,30374],{"class":98},[92,37169,35539],{"class":102},[92,37171,37172,37174,37177,37179],{"class":94,"line":1290},[92,37173,30719],{"class":98},[92,37175,37176],{"class":102}," 练习.AlexNet.model ",[92,37178,30374],{"class":98},[92,37180,35539],{"class":102},[92,37182,37183],{"class":94,"line":1296},[92,37184,2379],{"emptyLinePlaceholder":17},[92,37186,37187],{"class":94,"line":1308},[92,37188,2379],{"emptyLinePlaceholder":17},[92,37190,37191],{"class":94,"line":1591},[92,37192,33933],{"class":161},[92,37194,37195,37197,37199],{"class":94,"line":1596},[92,37196,31929],{"class":98},[92,37198,33940],{"class":1942},[92,37200,31935],{"class":102},[92,37202,37203,37205,37207,37209,37211,37213,37215],{"class":94,"line":1602},[92,37204,33947],{"class":102},[92,37206,148],{"class":98},[92,37208,31437],{"class":102},[92,37210,31440],{"class":5196},[92,37212,148],{"class":98},[92,37214,31445],{"class":207},[92,37216,31448],{"class":102},[92,37218,37219,37221,37223,37225],{"class":94,"line":1607},[92,37220,33964],{"class":5196},[92,37222,148],{"class":98},[92,37224,33969],{"class":151},[92,37226,31448],{"class":102},[92,37228,37229,37231,37233,37235,37237,37239,37241],{"class":94,"line":1621},[92,37230,33976],{"class":5196},[92,37232,148],{"class":98},[92,37234,31475],{"class":102},[92,37236,31478],{"class":5196},[92,37238,148],{"class":98},[92,37240,35431],{"class":151},[92,37242,31486],{"class":102},[92,37244,37245,37247,37249,37251],{"class":94,"line":1626},[92,37246,33993],{"class":5196},[92,37248,148],{"class":98},[92,37250,31458],{"class":151},[92,37252,109],{"class":102},[92,37254,37255,37257,37259,37261,37263,37265],{"class":94,"line":1632},[92,37256,34004],{"class":102},[92,37258,148],{"class":98},[92,37260,31516],{"class":102},[92,37262,31519],{"class":5196},[92,37264,148],{"class":98},[92,37266,34015],{"class":102},[92,37268,37269],{"class":94,"line":1653},[92,37270,34020],{"class":161},[92,37272,37273,37275,37277,37279],{"class":94,"line":1658},[92,37274,34025],{"class":5196},[92,37276,148],{"class":98},[92,37278,320],{"class":151},[92,37280,31448],{"class":102},[92,37282,37283,37285,37287,37289],{"class":94,"line":1672},[92,37284,34036],{"class":5196},[92,37286,148],{"class":98},[92,37288,31458],{"class":151},[92,37290,31448],{"class":102},[92,37292,37293,37295,37297,37299],{"class":94,"line":1677},[92,37294,34047],{"class":5196},[92,37296,148],{"class":98},[92,37298,294],{"class":151},[92,37300,109],{"class":102},[92,37302,37303,37305],{"class":94,"line":1706},[92,37304,4069],{"class":98},[92,37306,34060],{"class":102},[92,37308,37309],{"class":94,"line":1711},[92,37310,2379],{"emptyLinePlaceholder":17},[92,37312,37313],{"class":94,"line":1728},[92,37314,34069],{"class":161},[92,37316,37317,37319,37321],{"class":94,"line":1733},[92,37318,31929],{"class":98},[92,37320,34076],{"class":1942},[92,37322,34079],{"class":102},[92,37324,37325],{"class":94,"line":1738},[92,37326,34084],{"class":161},[92,37328,37329,37331,37333,37335,37337,37339,37341],{"class":94,"line":1743},[92,37330,31219],{"class":102},[92,37332,148],{"class":98},[92,37334,31226],{"class":207},[92,37336,1683],{"class":98},[92,37338,31231],{"class":102},[92,37340,1680],{"class":98},[92,37342,34101],{"class":207},[92,37344,37345,37347,37349],{"class":94,"line":1757},[92,37346,31271],{"class":102},[92,37348,148],{"class":98},[92,37350,32271],{"class":102},[92,37352,37353],{"class":94,"line":1762},[92,37354,2379],{"emptyLinePlaceholder":17},[92,37356,37357],{"class":94,"line":2556},[92,37358,34118],{"class":161},[92,37360,37361,37363,37365],{"class":94,"line":2570},[92,37362,34123],{"class":102},[92,37364,148],{"class":98},[92,37366,32324],{"class":151},[92,37368,37369,37371,37373],{"class":94,"line":2578},[92,37370,34132],{"class":102},[92,37372,148],{"class":98},[92,37374,3064],{"class":151},[92,37376,37377],{"class":94,"line":2583},[92,37378,2379],{"emptyLinePlaceholder":17},[92,37380,37381],{"class":94,"line":2589},[92,37382,34145],{"class":161},[92,37384,37385],{"class":94,"line":2595},[92,37386,34150],{"class":161},[92,37388,37389],{"class":94,"line":2600},[92,37390,34155],{"class":161},[92,37392,37393,37395],{"class":94,"line":7928},[92,37394,34160],{"class":98},[92,37396,32866],{"class":102},[92,37398,37399],{"class":94,"line":7952},[92,37400,34167],{"class":161},[92,37402,37403,37405,37407,37409],{"class":94,"line":7957},[92,37404,3382],{"class":98},[92,37406,34174],{"class":102},[92,37408,26025],{"class":98},[92,37410,34179],{"class":102},[92,37412,37413,37415,37417],{"class":94,"line":7963},[92,37414,34184],{"class":102},[92,37416,148],{"class":98},[92,37418,34189],{"class":102},[92,37420,37421,37423,37425],{"class":94,"line":7990},[92,37422,34194],{"class":102},[92,37424,148],{"class":98},[92,37426,34199],{"class":102},[92,37428,37429],{"class":94,"line":7995},[92,37430,34204],{"class":161},[92,37432,37433],{"class":94,"line":8001},[92,37434,32857],{"class":102},[92,37436,37437],{"class":94,"line":8013},[92,37438,34213],{"class":161},[92,37440,37441,37443,37445],{"class":94,"line":8025},[92,37442,32642],{"class":102},[92,37444,148],{"class":98},[92,37446,34222],{"class":102},[92,37448,37449],{"class":94,"line":8037},[92,37450,34227],{"class":161},[92,37452,37453,37455,37457,37459,37461,37463,37465],{"class":94,"line":9696},[92,37454,32659],{"class":102},[92,37456,148],{"class":98},[92,37458,32664],{"class":102},[92,37460,32667],{"class":5196},[92,37462,148],{"class":98},[92,37464,320],{"class":151},[92,37466,109],{"class":102},[92,37468,37469],{"class":94,"line":9721},[92,37470,34248],{"class":161},[92,37472,37473],{"class":94,"line":9744},[92,37474,34253],{"class":161},[92,37476,37477],{"class":94,"line":9768},[92,37478,34258],{"class":161},[92,37480,37481,37483,37485,37487,37489],{"class":94,"line":9773},[92,37482,34263],{"class":102},[92,37484,9457],{"class":98},[92,37486,32769],{"class":102},[92,37488,2928],{"class":98},[92,37490,34272],{"class":102},[92,37492,37493],{"class":94,"line":9778},[92,37494,34277],{"class":161},[92,37496,37497,37499,37501,37503,37505],{"class":94,"line":9783},[92,37498,34282],{"class":102},[92,37500,9457],{"class":98},[92,37502,34287],{"class":102},[92,37504,294],{"class":151},[92,37506,109],{"class":102},[92,37508,37509],{"class":94,"line":9792},[92,37510,2379],{"emptyLinePlaceholder":17},[92,37512,37513],{"class":94,"line":9797},[92,37514,34300],{"class":161},[92,37516,37517,37519,37521,37523,37525],{"class":94,"line":9803},[92,37518,34305],{"class":102},[92,37520,148],{"class":98},[92,37522,34310],{"class":102},[92,37524,687],{"class":98},[92,37526,34315],{"class":102},[92,37528,37529],{"class":94,"line":9824},[92,37530,34320],{"class":161},[92,37532,37533,37535,37537,37539],{"class":94,"line":9830},[92,37534,32433],{"class":151},[92,37536,103],{"class":102},[92,37538,34329],{"class":207},[92,37540,34332],{"class":102},[92,37542,37543],{"class":94,"line":9844},[92,37544,2379],{"emptyLinePlaceholder":17},[92,37546,37547],{"class":94,"line":9850},[92,37548,34341],{"class":161},[92,37550,37551,37553,37555,37557,37559],{"class":94,"line":9877},[92,37552,1510],{"class":98},[92,37554,31202],{"class":151},[92,37556,2928],{"class":98},[92,37558,31207],{"class":207},[92,37560,3718],{"class":102},[92,37562,37563],{"class":94,"line":9886},[92,37564,34358],{"class":161},[92,37566,37567,37569,37571],{"class":94,"line":9892},[92,37568,31271],{"class":102},[92,37570,148],{"class":98},[92,37572,37071],{"class":102},[92,37574,37575],{"class":94,"line":9900},[92,37576,34371],{"class":161},[92,37578,37579],{"class":94,"line":9905},[92,37580,34376],{"class":161},[92,37582,37583,37585,37587],{"class":94,"line":16584},[92,37584,34381],{"class":102},[92,37586,34384],{"class":207},[92,37588,30479],{"class":102},[92,37590,37591],{"class":94,"line":16590},[92,37592,34391],{"class":161},[92,37594,37595,37597,37599],{"class":94,"line":16613},[92,37596,34004],{"class":102},[92,37598,148],{"class":98},[92,37600,34400],{"class":102},[92,37602,37603],{"class":94,"line":16619},[92,37604,34405],{"class":161},[92,37606,37607],{"class":94,"line":16642},[92,37608,34410],{"class":102},[92,37610,37611],{"class":94,"line":16656},[92,37612,2379],{"emptyLinePlaceholder":17},[92,37614,37615],{"class":94,"line":16676},[92,37616,34419],{"class":161},[92,37618,37619],{"class":94,"line":16682},[92,37620,34424],{"class":161},[92,37622,37623,37625,37627,37629,37631,37633,37635],{"class":94,"line":16693},[92,37624,31219],{"class":102},[92,37626,148],{"class":98},[92,37628,31226],{"class":207},[92,37630,1683],{"class":98},[92,37632,31231],{"class":102},[92,37634,1680],{"class":98},[92,37636,34101],{"class":207},[92,37638,37639,37641,37643],{"class":94,"line":16716},[92,37640,31271],{"class":102},[92,37642,148],{"class":98},[92,37644,32271],{"class":102},[92,37646,37647],{"class":94,"line":16738},[92,37648,34453],{"class":161},[92,37650,37651],{"class":94,"line":16743},[92,37652,34458],{"class":161},[92,37654,37655,37657,37659,37661,37663,37665,37667,37669,37671,37673,37675,37677,37679,37681,37683,37685,37687,37689,37691,37693,37695,37697,37699],{"class":94,"line":16749},[92,37656,34463],{"class":102},[92,37658,148],{"class":98},[92,37660,993],{"class":102},[92,37662,34470],{"class":207},[92,37664,481],{"class":102},[92,37666,34475],{"class":207},[92,37668,481],{"class":102},[92,37670,34480],{"class":207},[92,37672,481],{"class":102},[92,37674,34485],{"class":207},[92,37676,481],{"class":102},[92,37678,34490],{"class":207},[92,37680,481],{"class":102},[92,37682,34495],{"class":207},[92,37684,481],{"class":102},[92,37686,34500],{"class":207},[92,37688,481],{"class":102},[92,37690,34505],{"class":207},[92,37692,481],{"class":102},[92,37694,34510],{"class":207},[92,37696,481],{"class":102},[92,37698,34515],{"class":207},[92,37700,33228],{"class":102},[92,37702,37703,37705],{"class":94,"line":16763},[92,37704,34160],{"class":98},[92,37706,32866],{"class":102},[92,37708,37709],{"class":94,"line":16776},[92,37710,34528],{"class":161},[92,37712,37713,37715,37717,37719],{"class":94,"line":16781},[92,37714,3382],{"class":98},[92,37716,34535],{"class":102},[92,37718,26025],{"class":98},[92,37720,34179],{"class":102},[92,37722,37723,37725,37727],{"class":94,"line":16795},[92,37724,32592],{"class":102},[92,37726,148],{"class":98},[92,37728,32597],{"class":102},[92,37730,37731,37733,37735],{"class":94,"line":16800},[92,37732,32607],{"class":102},[92,37734,148],{"class":98},[92,37736,32612],{"class":102},[92,37738,37739],{"class":94,"line":16806},[92,37740,2379],{"emptyLinePlaceholder":17},[92,37742,37743],{"class":94,"line":16811},[92,37744,34564],{"class":161},[92,37746,37747],{"class":94,"line":16825},[92,37748,32857],{"class":102},[92,37750,37751],{"class":94,"line":16830},[92,37752,34573],{"class":161},[92,37754,37755,37757,37759],{"class":94,"line":16835},[92,37756,32642],{"class":102},[92,37758,148],{"class":98},[92,37760,32647],{"class":102},[92,37762,37763],{"class":94,"line":16849},[92,37764,34586],{"class":161},[92,37766,37767,37769,37771,37773,37775,37777,37779],{"class":94,"line":16861},[92,37768,32659],{"class":102},[92,37770,148],{"class":98},[92,37772,32664],{"class":102},[92,37774,32667],{"class":5196},[92,37776,148],{"class":98},[92,37778,320],{"class":151},[92,37780,109],{"class":102},[92,37782,37783],{"class":94,"line":16866},[92,37784,34607],{"class":161},[92,37786,37787,37789,37791],{"class":94,"line":16879},[92,37788,34612],{"class":102},[92,37790,148],{"class":98},[92,37792,34617],{"class":102},[92,37794,37795,37797,37799],{"class":94,"line":16884},[92,37796,34622],{"class":102},[92,37798,148],{"class":98},[92,37800,34627],{"class":102},[92,37802,37803,37805,37807,37809,37811,37813,37815,37817],{"class":94,"line":16889},[92,37804,34632],{"class":151},[92,37806,103],{"class":102},[92,37808,34637],{"class":207},[92,37810,34640],{"class":102},[92,37812,34643],{"class":207},[92,37814,481],{"class":102},[92,37816,34648],{"class":207},[92,37818,34651],{"class":102},[63,37820,37822],{"id":37821},"_22vgg","2.2.VGG",[21978,37824,37826],{"id":37825},"_221原理","2.2.1.原理",[38,37828,37829],{},[1441,37830],{"alt":10,"src":37831},"\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,37833,37834],{},[1441,37835],{"alt":10,"src":37836},"\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,37838,37839],{},[1441,37840],{"alt":10,"src":37841},"\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,37843,37844],{},"参数详细描述：",[38,37846,37847],{},[1441,37848],{"alt":10,"src":37849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[38,37851,37852],{},[1441,37853],{"alt":10,"src":37854},"\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,37856,37857],{},[1441,37858],{"alt":10,"src":37859},"\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,37861,37862],{},[1441,37863],{"alt":10,"src":37864},"\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,37866,37867],{},[1441,37868],{"alt":10,"src":37869},"\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,37871,37873],{"id":37872},"_222代码实现","2.2.2.代码实现",[46,37875,37876],{},[49,37877,37878],{},"网络搭建",[83,37880,37882],{"className":30360,"code":37881,"language":30362,"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,37883,37884,37890,37902,37912,37922,37926,37943,37951,37970,37975,37980,37992,38030,38035,38071,38075,38104,38109,38114,38125,38161,38165,38201,38205,38233,38237,38242,38253,38289,38293,38329,38333,38369,38373,38401,38405,38410,38421,38458,38462,38498,38502,38538,38542,38570,38574,38579,38590,38626,38630,38666,38670,38706,38710,38738,38742,38747,38758,38763,38768,38773,38794,38798,38810,38814,38826,38830,38834,38839,38844,38859,38864,38874,38879,38894,38899,38918,38923,38932,38937,38947,38952,38957,38971,38976,38990,38998,39002,39006,39014,39025,39036,39047,39058,39069,39080,39086,39090,39095,39108,39128,39134,39143],{"__ignoreMap":10},[92,37885,37886,37888],{"class":94,"line":95},[92,37887,30374],{"class":98},[92,37889,30377],{"class":102},[92,37891,37892,37894,37897,37899],{"class":94,"line":11},[92,37893,30719],{"class":98},[92,37895,37896],{"class":102}," sympy.core.sympify ",[92,37898,30374],{"class":98},[92,37900,37901],{"class":102}," kernS\n",[92,37903,37904,37906,37908,37910],{"class":94,"line":1158},[92,37905,30719],{"class":98},[92,37907,30722],{"class":102},[92,37909,30374],{"class":98},[92,37911,30727],{"class":102},[92,37913,37914,37916,37918,37920],{"class":94,"line":1173},[92,37915,30719],{"class":98},[92,37917,30739],{"class":102},[92,37919,30374],{"class":98},[92,37921,30744],{"class":102},[92,37923,37924],{"class":94,"line":1179},[92,37925,2379],{"emptyLinePlaceholder":17},[92,37927,37928,37930,37933,37935,37937,37939,37941],{"class":94,"line":1193},[92,37929,14674],{"class":98},[92,37931,37932],{"class":1942}," VGG16",[92,37934,103],{"class":102},[92,37936,30760],{"class":1942},[92,37938,661],{"class":102},[92,37940,30765],{"class":1942},[92,37942,30768],{"class":102},[92,37944,37945,37947,37949],{"class":94,"line":1199},[92,37946,30783],{"class":98},[92,37948,30786],{"class":151},[92,37950,30789],{"class":102},[92,37952,37953,37955,37957,37960,37962,37964,37966,37968],{"class":94,"line":1290},[92,37954,30799],{"class":151},[92,37956,103],{"class":102},[92,37958,37959],{"class":151},"VGG16",[92,37961,12415],{"class":102},[92,37963,30805],{"class":151},[92,37965,30808],{"class":102},[92,37967,30811],{"class":151},[92,37969,1955],{"class":102},[92,37971,37972],{"class":94,"line":1296},[92,37973,37974],{"class":161},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[92,37976,37977],{"class":94,"line":1308},[92,37978,37979],{"class":161},"        # 这里用的是灰度图\n",[92,37981,37982,37984,37987,37989],{"class":94,"line":1591},[92,37983,30827],{"class":151},[92,37985,37986],{"class":102},".block1",[92,37988,148],{"class":98},[92,37990,37991],{"class":102},"nn.Sequential(\n",[92,37993,37994,37997,37999,38001,38003,38005,38007,38009,38011,38013,38015,38017,38019,38021,38023,38025,38027],{"class":94,"line":1596},[92,37995,37996],{"class":102},"            nn.Conv2d(",[92,37998,30838],{"class":5196},[92,38000,148],{"class":98},[92,38002,320],{"class":151},[92,38004,481],{"class":102},[92,38006,30847],{"class":5196},[92,38008,148],{"class":98},[92,38010,306],{"class":151},[92,38012,481],{"class":102},[92,38014,30856],{"class":5196},[92,38016,148],{"class":98},[92,38018,174],{"class":151},[92,38020,481],{"class":102},[92,38022,30865],{"class":5196},[92,38024,148],{"class":98},[92,38026,320],{"class":151},[92,38028,38029],{"class":102},"),\n",[92,38031,38032],{"class":94,"line":1602},[92,38033,38034],{"class":102},"            nn.ReLU(),\n",[92,38036,38037,38039,38041,38043,38045,38047,38049,38051,38053,38055,38057,38059,38061,38063,38065,38067,38069],{"class":94,"line":1607},[92,38038,37996],{"class":102},[92,38040,30838],{"class":5196},[92,38042,148],{"class":98},[92,38044,306],{"class":151},[92,38046,481],{"class":102},[92,38048,30847],{"class":5196},[92,38050,148],{"class":98},[92,38052,306],{"class":151},[92,38054,481],{"class":102},[92,38056,30856],{"class":5196},[92,38058,148],{"class":98},[92,38060,174],{"class":151},[92,38062,481],{"class":102},[92,38064,30865],{"class":5196},[92,38066,148],{"class":98},[92,38068,320],{"class":151},[92,38070,38029],{"class":102},[92,38072,38073],{"class":94,"line":1621},[92,38074,38034],{"class":102},[92,38076,38077,38080,38082,38084,38086,38088,38090,38092,38094,38096,38098,38100,38102],{"class":94,"line":1626},[92,38078,38079],{"class":102},"            nn.MaxPool2d(",[92,38081,30856],{"class":5196},[92,38083,148],{"class":98},[92,38085,180],{"class":151},[92,38087,481],{"class":102},[92,38089,30911],{"class":5196},[92,38091,148],{"class":98},[92,38093,180],{"class":151},[92,38095,481],{"class":102},[92,38097,30865],{"class":5196},[92,38099,148],{"class":98},[92,38101,294],{"class":151},[92,38103,109],{"class":102},[92,38105,38106],{"class":94,"line":1632},[92,38107,38108],{"class":102},"        )\n",[92,38110,38111],{"class":94,"line":1653},[92,38112,38113],{"class":161},"        # 第二层\n",[92,38115,38116,38118,38121,38123],{"class":94,"line":1658},[92,38117,30827],{"class":151},[92,38119,38120],{"class":102},".block2",[92,38122,148],{"class":98},[92,38124,37991],{"class":102},[92,38126,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159],{"class":94,"line":1672},[92,38128,37996],{"class":102},[92,38130,30838],{"class":5196},[92,38132,148],{"class":98},[92,38134,306],{"class":151},[92,38136,481],{"class":102},[92,38138,30847],{"class":5196},[92,38140,148],{"class":98},[92,38142,32052],{"class":151},[92,38144,481],{"class":102},[92,38146,30856],{"class":5196},[92,38148,148],{"class":98},[92,38150,174],{"class":151},[92,38152,481],{"class":102},[92,38154,30865],{"class":5196},[92,38156,148],{"class":98},[92,38158,320],{"class":151},[92,38160,38029],{"class":102},[92,38162,38163],{"class":94,"line":1677},[92,38164,38034],{"class":102},[92,38166,38167,38169,38171,38173,38175,38177,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199],{"class":94,"line":1706},[92,38168,37996],{"class":102},[92,38170,30838],{"class":5196},[92,38172,148],{"class":98},[92,38174,32052],{"class":151},[92,38176,481],{"class":102},[92,38178,30847],{"class":5196},[92,38180,148],{"class":98},[92,38182,32052],{"class":151},[92,38184,481],{"class":102},[92,38186,30856],{"class":5196},[92,38188,148],{"class":98},[92,38190,174],{"class":151},[92,38192,481],{"class":102},[92,38194,30865],{"class":5196},[92,38196,148],{"class":98},[92,38198,320],{"class":151},[92,38200,38029],{"class":102},[92,38202,38203],{"class":94,"line":1711},[92,38204,38034],{"class":102},[92,38206,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231],{"class":94,"line":1728},[92,38208,38079],{"class":102},[92,38210,30856],{"class":5196},[92,38212,148],{"class":98},[92,38214,180],{"class":151},[92,38216,481],{"class":102},[92,38218,30911],{"class":5196},[92,38220,148],{"class":98},[92,38222,180],{"class":151},[92,38224,481],{"class":102},[92,38226,30865],{"class":5196},[92,38228,148],{"class":98},[92,38230,294],{"class":151},[92,38232,109],{"class":102},[92,38234,38235],{"class":94,"line":1733},[92,38236,38108],{"class":102},[92,38238,38239],{"class":94,"line":1738},[92,38240,38241],{"class":161},"        # 第三层\n",[92,38243,38244,38246,38249,38251],{"class":94,"line":1743},[92,38245,30827],{"class":151},[92,38247,38248],{"class":102},".block3",[92,38250,148],{"class":98},[92,38252,37991],{"class":102},[92,38254,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287],{"class":94,"line":1757},[92,38256,37996],{"class":102},[92,38258,30838],{"class":5196},[92,38260,148],{"class":98},[92,38262,32052],{"class":151},[92,38264,481],{"class":102},[92,38266,30847],{"class":5196},[92,38268,148],{"class":98},[92,38270,34852],{"class":151},[92,38272,481],{"class":102},[92,38274,30856],{"class":5196},[92,38276,148],{"class":98},[92,38278,174],{"class":151},[92,38280,481],{"class":102},[92,38282,30865],{"class":5196},[92,38284,148],{"class":98},[92,38286,320],{"class":151},[92,38288,38029],{"class":102},[92,38290,38291],{"class":94,"line":1762},[92,38292,38034],{"class":102},[92,38294,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327],{"class":94,"line":2556},[92,38296,37996],{"class":102},[92,38298,30838],{"class":5196},[92,38300,148],{"class":98},[92,38302,34852],{"class":151},[92,38304,481],{"class":102},[92,38306,30847],{"class":5196},[92,38308,148],{"class":98},[92,38310,34852],{"class":151},[92,38312,481],{"class":102},[92,38314,30856],{"class":5196},[92,38316,148],{"class":98},[92,38318,174],{"class":151},[92,38320,481],{"class":102},[92,38322,30865],{"class":5196},[92,38324,148],{"class":98},[92,38326,320],{"class":151},[92,38328,38029],{"class":102},[92,38330,38331],{"class":94,"line":2570},[92,38332,38034],{"class":102},[92,38334,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367],{"class":94,"line":2578},[92,38336,37996],{"class":102},[92,38338,30838],{"class":5196},[92,38340,148],{"class":98},[92,38342,34852],{"class":151},[92,38344,481],{"class":102},[92,38346,30847],{"class":5196},[92,38348,148],{"class":98},[92,38350,34852],{"class":151},[92,38352,481],{"class":102},[92,38354,30856],{"class":5196},[92,38356,148],{"class":98},[92,38358,174],{"class":151},[92,38360,481],{"class":102},[92,38362,30865],{"class":5196},[92,38364,148],{"class":98},[92,38366,320],{"class":151},[92,38368,38029],{"class":102},[92,38370,38371],{"class":94,"line":2583},[92,38372,38034],{"class":102},[92,38374,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399],{"class":94,"line":2589},[92,38376,38079],{"class":102},[92,38378,30856],{"class":5196},[92,38380,148],{"class":98},[92,38382,180],{"class":151},[92,38384,481],{"class":102},[92,38386,30911],{"class":5196},[92,38388,148],{"class":98},[92,38390,180],{"class":151},[92,38392,481],{"class":102},[92,38394,30865],{"class":5196},[92,38396,148],{"class":98},[92,38398,294],{"class":151},[92,38400,109],{"class":102},[92,38402,38403],{"class":94,"line":2595},[92,38404,38108],{"class":102},[92,38406,38407],{"class":94,"line":2600},[92,38408,38409],{"class":161},"        # 第四层\n",[92,38411,38412,38414,38417,38419],{"class":94,"line":7928},[92,38413,30827],{"class":151},[92,38415,38416],{"class":102},".block4",[92,38418,148],{"class":98},[92,38420,37991],{"class":102},[92,38422,38423,38425,38427,38429,38431,38433,38435,38437,38440,38442,38444,38446,38448,38450,38452,38454,38456],{"class":94,"line":7952},[92,38424,37996],{"class":102},[92,38426,30838],{"class":5196},[92,38428,148],{"class":98},[92,38430,34852],{"class":151},[92,38432,481],{"class":102},[92,38434,30847],{"class":5196},[92,38436,148],{"class":98},[92,38438,38439],{"class":151},"512",[92,38441,481],{"class":102},[92,38443,30856],{"class":5196},[92,38445,148],{"class":98},[92,38447,174],{"class":151},[92,38449,481],{"class":102},[92,38451,30865],{"class":5196},[92,38453,148],{"class":98},[92,38455,320],{"class":151},[92,38457,38029],{"class":102},[92,38459,38460],{"class":94,"line":7957},[92,38461,38034],{"class":102},[92,38463,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496],{"class":94,"line":7963},[92,38465,37996],{"class":102},[92,38467,30838],{"class":5196},[92,38469,148],{"class":98},[92,38471,38439],{"class":151},[92,38473,481],{"class":102},[92,38475,30847],{"class":5196},[92,38477,148],{"class":98},[92,38479,38439],{"class":151},[92,38481,481],{"class":102},[92,38483,30856],{"class":5196},[92,38485,148],{"class":98},[92,38487,174],{"class":151},[92,38489,481],{"class":102},[92,38491,30865],{"class":5196},[92,38493,148],{"class":98},[92,38495,320],{"class":151},[92,38497,38029],{"class":102},[92,38499,38500],{"class":94,"line":7990},[92,38501,38034],{"class":102},[92,38503,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536],{"class":94,"line":7995},[92,38505,37996],{"class":102},[92,38507,30838],{"class":5196},[92,38509,148],{"class":98},[92,38511,38439],{"class":151},[92,38513,481],{"class":102},[92,38515,30847],{"class":5196},[92,38517,148],{"class":98},[92,38519,38439],{"class":151},[92,38521,481],{"class":102},[92,38523,30856],{"class":5196},[92,38525,148],{"class":98},[92,38527,174],{"class":151},[92,38529,481],{"class":102},[92,38531,30865],{"class":5196},[92,38533,148],{"class":98},[92,38535,320],{"class":151},[92,38537,38029],{"class":102},[92,38539,38540],{"class":94,"line":8001},[92,38541,38034],{"class":102},[92,38543,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568],{"class":94,"line":8013},[92,38545,38079],{"class":102},[92,38547,30856],{"class":5196},[92,38549,148],{"class":98},[92,38551,180],{"class":151},[92,38553,481],{"class":102},[92,38555,30911],{"class":5196},[92,38557,148],{"class":98},[92,38559,180],{"class":151},[92,38561,481],{"class":102},[92,38563,30865],{"class":5196},[92,38565,148],{"class":98},[92,38567,294],{"class":151},[92,38569,109],{"class":102},[92,38571,38572],{"class":94,"line":8025},[92,38573,38108],{"class":102},[92,38575,38576],{"class":94,"line":8037},[92,38577,38578],{"class":161},"        # 第五层\n",[92,38580,38581,38583,38586,38588],{"class":94,"line":9696},[92,38582,30827],{"class":151},[92,38584,38585],{"class":102},".block5",[92,38587,148],{"class":98},[92,38589,37991],{"class":102},[92,38591,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624],{"class":94,"line":9721},[92,38593,37996],{"class":102},[92,38595,30838],{"class":5196},[92,38597,148],{"class":98},[92,38599,38439],{"class":151},[92,38601,481],{"class":102},[92,38603,30847],{"class":5196},[92,38605,148],{"class":98},[92,38607,38439],{"class":151},[92,38609,481],{"class":102},[92,38611,30856],{"class":5196},[92,38613,148],{"class":98},[92,38615,174],{"class":151},[92,38617,481],{"class":102},[92,38619,30865],{"class":5196},[92,38621,148],{"class":98},[92,38623,320],{"class":151},[92,38625,38029],{"class":102},[92,38627,38628],{"class":94,"line":9744},[92,38629,38034],{"class":102},[92,38631,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662,38664],{"class":94,"line":9768},[92,38633,37996],{"class":102},[92,38635,30838],{"class":5196},[92,38637,148],{"class":98},[92,38639,38439],{"class":151},[92,38641,481],{"class":102},[92,38643,30847],{"class":5196},[92,38645,148],{"class":98},[92,38647,38439],{"class":151},[92,38649,481],{"class":102},[92,38651,30856],{"class":5196},[92,38653,148],{"class":98},[92,38655,174],{"class":151},[92,38657,481],{"class":102},[92,38659,30865],{"class":5196},[92,38661,148],{"class":98},[92,38663,320],{"class":151},[92,38665,38029],{"class":102},[92,38667,38668],{"class":94,"line":9773},[92,38669,38034],{"class":102},[92,38671,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704],{"class":94,"line":9778},[92,38673,37996],{"class":102},[92,38675,30838],{"class":5196},[92,38677,148],{"class":98},[92,38679,38439],{"class":151},[92,38681,481],{"class":102},[92,38683,30847],{"class":5196},[92,38685,148],{"class":98},[92,38687,38439],{"class":151},[92,38689,481],{"class":102},[92,38691,30856],{"class":5196},[92,38693,148],{"class":98},[92,38695,174],{"class":151},[92,38697,481],{"class":102},[92,38699,30865],{"class":5196},[92,38701,148],{"class":98},[92,38703,320],{"class":151},[92,38705,38029],{"class":102},[92,38707,38708],{"class":94,"line":9783},[92,38709,38034],{"class":102},[92,38711,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736],{"class":94,"line":9792},[92,38713,38079],{"class":102},[92,38715,30856],{"class":5196},[92,38717,148],{"class":98},[92,38719,180],{"class":151},[92,38721,481],{"class":102},[92,38723,30911],{"class":5196},[92,38725,148],{"class":98},[92,38727,180],{"class":151},[92,38729,481],{"class":102},[92,38731,30865],{"class":5196},[92,38733,148],{"class":98},[92,38735,294],{"class":151},[92,38737,109],{"class":102},[92,38739,38740],{"class":94,"line":9797},[92,38741,38108],{"class":102},[92,38743,38744],{"class":94,"line":9803},[92,38745,38746],{"class":161},"        # 全连接层\n",[92,38748,38749,38751,38754,38756],{"class":94,"line":9824},[92,38750,30827],{"class":151},[92,38752,38753],{"class":102},".block6",[92,38755,148],{"class":98},[92,38757,37991],{"class":102},[92,38759,38760],{"class":94,"line":9830},[92,38761,38762],{"class":161},"            # 平展操作\n",[92,38764,38765],{"class":94,"line":9844},[92,38766,38767],{"class":161},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[92,38769,38770],{"class":94,"line":9850},[92,38771,38772],{"class":102},"            nn.Flatten(),\n",[92,38774,38775,38778,38780,38782,38784,38786,38788,38790,38792],{"class":94,"line":9877},[92,38776,38777],{"class":102},"            nn.Linear(",[92,38779,472],{"class":151},[92,38781,558],{"class":98},[92,38783,472],{"class":151},[92,38785,558],{"class":98},[92,38787,38439],{"class":151},[92,38789,481],{"class":102},[92,38791,34852],{"class":151},[92,38793,38029],{"class":102},[92,38795,38796],{"class":94,"line":9886},[92,38797,38034],{"class":102},[92,38799,38800,38802,38804,38806,38808],{"class":94,"line":9892},[92,38801,38777],{"class":102},[92,38803,34852],{"class":151},[92,38805,481],{"class":102},[92,38807,32052],{"class":151},[92,38809,38029],{"class":102},[92,38811,38812],{"class":94,"line":9900},[92,38813,38034],{"class":102},[92,38815,38816,38818,38820,38822,38824],{"class":94,"line":9905},[92,38817,38777],{"class":102},[92,38819,32052],{"class":151},[92,38821,481],{"class":102},[92,38823,549],{"class":151},[92,38825,109],{"class":102},[92,38827,38828],{"class":94,"line":16584},[92,38829,38108],{"class":102},[92,38831,38832],{"class":94,"line":16590},[92,38833,2379],{"emptyLinePlaceholder":17},[92,38835,38836],{"class":94,"line":16613},[92,38837,38838],{"class":161},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[92,38840,38841],{"class":94,"line":16619},[92,38842,38843],{"class":161},"        # 循环遍历模型\n",[92,38845,38846,38848,38851,38853,38856],{"class":94,"line":16642},[92,38847,3382],{"class":98},[92,38849,38850],{"class":102}," m ",[92,38852,26025],{"class":98},[92,38854,38855],{"class":151}," self",[92,38857,38858],{"class":102},".modules():\n",[92,38860,38861],{"class":94,"line":16656},[92,38862,38863],{"class":161},"            # print(m)\n",[92,38865,38866,38868,38871],{"class":94,"line":16676},[92,38867,4621],{"class":98},[92,38869,38870],{"class":151}," isinstance",[92,38872,38873],{"class":102},"(m,nn.Conv2d):\n",[92,38875,38876],{"class":94,"line":16682},[92,38877,38878],{"class":161},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[92,38880,38881,38884,38887,38889,38892],{"class":94,"line":16693},[92,38882,38883],{"class":102},"                nn.init.kaiming_normal_(m.weight,",[92,38885,38886],{"class":5196},"nonlinearity",[92,38888,148],{"class":98},[92,38890,38891],{"class":207},"'relu'",[92,38893,109],{"class":102},[92,38895,38896],{"class":94,"line":16716},[92,38897,38898],{"class":161},"                # 判断b参数是否存在\n",[92,38900,38901,38904,38907,38910,38913,38916],{"class":94,"line":16738},[92,38902,38903],{"class":98},"                if",[92,38905,38906],{"class":102}," m.bias ",[92,38908,38909],{"class":98},"is",[92,38911,38912],{"class":98}," not",[92,38914,38915],{"class":151}," None",[92,38917,3718],{"class":102},[92,38919,38920],{"class":94,"line":16743},[92,38921,38922],{"class":161},"                    # 如果参数不存在的化初始化b=0\n",[92,38924,38925,38928,38930],{"class":94,"line":16749},[92,38926,38927],{"class":102},"                    nn.init.constant_(m.bias,",[92,38929,294],{"class":151},[92,38931,109],{"class":102},[92,38933,38934],{"class":94,"line":16763},[92,38935,38936],{"class":161},"            # 全连接层初始化\n",[92,38938,38939,38942,38944],{"class":94,"line":16776},[92,38940,38941],{"class":98},"            elif",[92,38943,38870],{"class":151},[92,38945,38946],{"class":102},"(m,nn.Linear):\n",[92,38948,38949],{"class":94,"line":16781},[92,38950,38951],{"class":161},"                # 这个初始化方法是利用的是正太分布的方式\n",[92,38953,38954],{"class":94,"line":16795},[92,38955,38956],{"class":161},"                # 均值为0，方差为0.01\n",[92,38958,38959,38962,38964,38966,38969],{"class":94,"line":16800},[92,38960,38961],{"class":102},"                nn.init.normal_(m.weight,",[92,38963,294],{"class":151},[92,38965,481],{"class":102},[92,38967,38968],{"class":151},"0.01",[92,38970,109],{"class":102},[92,38972,38973],{"class":94,"line":16806},[92,38974,38975],{"class":161},"                # 初始化b参数\n",[92,38977,38978,38980,38982,38984,38986,38988],{"class":94,"line":16811},[92,38979,38903],{"class":98},[92,38981,38906],{"class":102},[92,38983,38909],{"class":98},[92,38985,38912],{"class":98},[92,38987,38915],{"class":151},[92,38989,3718],{"class":102},[92,38991,38992,38994,38996],{"class":94,"line":16825},[92,38993,38927],{"class":102},[92,38995,294],{"class":151},[92,38997,109],{"class":102},[92,38999,39000],{"class":94,"line":16830},[92,39001,2379],{"emptyLinePlaceholder":17},[92,39003,39004],{"class":94,"line":16835},[92,39005,35147],{"class":161},[92,39007,39008,39010,39012],{"class":94,"line":16849},[92,39009,30783],{"class":98},[92,39011,31075],{"class":1942},[92,39013,31078],{"class":102},[92,39015,39016,39018,39020,39022],{"class":94,"line":16861},[92,39017,31083],{"class":102},[92,39019,148],{"class":98},[92,39021,30805],{"class":151},[92,39023,39024],{"class":102},".block1(x)\n",[92,39026,39027,39029,39031,39033],{"class":94,"line":16866},[92,39028,31083],{"class":102},[92,39030,148],{"class":98},[92,39032,30805],{"class":151},[92,39034,39035],{"class":102},".block2(x)\n",[92,39037,39038,39040,39042,39044],{"class":94,"line":16879},[92,39039,31083],{"class":102},[92,39041,148],{"class":98},[92,39043,30805],{"class":151},[92,39045,39046],{"class":102},".block3(x)\n",[92,39048,39049,39051,39053,39055],{"class":94,"line":16884},[92,39050,31083],{"class":102},[92,39052,148],{"class":98},[92,39054,30805],{"class":151},[92,39056,39057],{"class":102},".block4(x)\n",[92,39059,39060,39062,39064,39066],{"class":94,"line":16889},[92,39061,31083],{"class":102},[92,39063,148],{"class":98},[92,39065,30805],{"class":151},[92,39067,39068],{"class":102},".block5(x)\n",[92,39070,39071,39073,39075,39077],{"class":94,"line":16894},[92,39072,31083],{"class":102},[92,39074,148],{"class":98},[92,39076,30805],{"class":151},[92,39078,39079],{"class":102},".block6(x)\n",[92,39081,39082,39084],{"class":94,"line":16907},[92,39083,14732],{"class":98},[92,39085,31191],{"class":102},[92,39087,39088],{"class":94,"line":16912},[92,39089,2379],{"emptyLinePlaceholder":17},[92,39091,39092],{"class":94,"line":32615},[92,39093,39094],{"class":161},"# 验证模型\n",[92,39096,39097,39099,39101,39103,39106],{"class":94,"line":32621},[92,39098,1510],{"class":98},[92,39100,31202],{"class":151},[92,39102,2928],{"class":98},[92,39104,39105],{"class":207},"'__main__'",[92,39107,3718],{"class":102},[92,39109,39110,39112,39114,39116,39118,39120,39122,39124,39126],{"class":94,"line":32627},[92,39111,31219],{"class":102},[92,39113,148],{"class":98},[92,39115,30433],{"class":102},[92,39117,31226],{"class":207},[92,39119,1683],{"class":98},[92,39121,31231],{"class":102},[92,39123,1680],{"class":98},[92,39125,30458],{"class":207},[92,39127,109],{"class":102},[92,39129,39130,39132],{"class":94,"line":32633},[92,39131,31281],{"class":151},[92,39133,30467],{"class":102},[92,39135,39136,39138,39140],{"class":94,"line":32639},[92,39137,31271],{"class":102},[92,39139,148],{"class":98},[92,39141,39142],{"class":102},"VGG16().to(device)\n",[92,39144,39145,39147,39149,39151,39153,39155,39157,39159],{"class":94,"line":32650},[92,39146,31281],{"class":151},[92,39148,31284],{"class":102},[92,39150,320],{"class":151},[92,39152,481],{"class":102},[92,39154,31483],{"class":151},[92,39156,481],{"class":102},[92,39158,31483],{"class":151},[92,39160,31297],{"class":102},[46,39162,39163],{"start":11},[49,39164,39165],{},"训练代码",[38,39167,39168],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[38,39170,39171],{},"解决方式:",[38,39173,39174],{},"①权重初始化",[83,39176,39178],{"className":30360,"code":39177,"language":30362,"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,39179,39180,39185,39190,39202,39207,39215,39220,39233,39238,39252,39257,39266,39271,39280,39285,39290,39303,39308,39322],{"__ignoreMap":10},[92,39181,39182],{"class":94,"line":95},[92,39183,39184],{"class":161},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[92,39186,39187],{"class":94,"line":11},[92,39188,39189],{"class":161},"# 循环遍历模型\n",[92,39191,39192,39194,39196,39198,39200],{"class":94,"line":1158},[92,39193,3004],{"class":98},[92,39195,38850],{"class":102},[92,39197,26025],{"class":98},[92,39199,38855],{"class":151},[92,39201,38858],{"class":102},[92,39203,39204],{"class":94,"line":1173},[92,39205,39206],{"class":161},"    # print(m)\n",[92,39208,39209,39211,39213],{"class":94,"line":1179},[92,39210,3080],{"class":98},[92,39212,38870],{"class":151},[92,39214,38873],{"class":102},[92,39216,39217],{"class":94,"line":1193},[92,39218,39219],{"class":161},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[92,39221,39222,39225,39227,39229,39231],{"class":94,"line":1199},[92,39223,39224],{"class":102},"        nn.init.kaiming_normal_(m.weight,",[92,39226,38886],{"class":5196},[92,39228,148],{"class":98},[92,39230,38891],{"class":207},[92,39232,109],{"class":102},[92,39234,39235],{"class":94,"line":1290},[92,39236,39237],{"class":161},"        # 判断b参数是否存在\n",[92,39239,39240,39242,39244,39246,39248,39250],{"class":94,"line":1296},[92,39241,2476],{"class":98},[92,39243,38906],{"class":102},[92,39245,38909],{"class":98},[92,39247,38912],{"class":98},[92,39249,38915],{"class":151},[92,39251,3718],{"class":102},[92,39253,39254],{"class":94,"line":1308},[92,39255,39256],{"class":161},"            # 如果参数不存在的化初始化b=0\n",[92,39258,39259,39262,39264],{"class":94,"line":1591},[92,39260,39261],{"class":102},"            nn.init.constant_(m.bias,",[92,39263,294],{"class":151},[92,39265,109],{"class":102},[92,39267,39268],{"class":94,"line":1596},[92,39269,39270],{"class":161},"    # 全连接层初始化\n",[92,39272,39273,39276,39278],{"class":94,"line":1602},[92,39274,39275],{"class":98},"    elif",[92,39277,38870],{"class":151},[92,39279,38946],{"class":102},[92,39281,39282],{"class":94,"line":1607},[92,39283,39284],{"class":161},"        # 这个初始化方法是利用的是正太分布的方式\n",[92,39286,39287],{"class":94,"line":1621},[92,39288,39289],{"class":161},"        # 均值为0，方差为0.01\n",[92,39291,39292,39295,39297,39299,39301],{"class":94,"line":1626},[92,39293,39294],{"class":102},"        nn.init.normal_(m.weight,",[92,39296,294],{"class":151},[92,39298,481],{"class":102},[92,39300,38968],{"class":151},[92,39302,109],{"class":102},[92,39304,39305],{"class":94,"line":1632},[92,39306,39307],{"class":161},"        # 初始化b参数\n",[92,39309,39310,39312,39314,39316,39318,39320],{"class":94,"line":1653},[92,39311,2476],{"class":98},[92,39313,38906],{"class":102},[92,39315,38909],{"class":98},[92,39317,38912],{"class":98},[92,39319,38915],{"class":151},[92,39321,3718],{"class":102},[92,39323,39324,39326,39328],{"class":94,"line":1658},[92,39325,39261],{"class":102},[92,39327,294],{"class":151},[92,39329,109],{"class":102},[38,39331,39332],{},"②尽可能地增加批次",[38,39334,39335],{},"训练完整代码：",[83,39337,39338],{"className":30360,"code":37881,"language":30362,"meta":10,"style":10},[89,39339,39340,39346,39356,39366,39376,39380,39396,39404,39422,39426,39430,39440,39476,39480,39516,39520,39548,39552,39556,39566,39602,39606,39642,39646,39674,39678,39682,39692,39728,39732,39768,39772,39808,39812,39840,39844,39848,39858,39894,39898,39934,39938,39974,39978,40006,40010,40014,40024,40060,40064,40100,40104,40140,40144,40172,40176,40180,40190,40194,40198,40202,40222,40226,40238,40242,40254,40258,40262,40266,40270,40282,40286,40294,40298,40310,40314,40328,40332,40340,40344,40352,40356,40360,40372,40376,40390,40398,40402,40406,40414,40424,40434,40444,40454,40464,40474,40480,40484,40488,40500,40520,40526,40534],{"__ignoreMap":10},[92,39341,39342,39344],{"class":94,"line":95},[92,39343,30374],{"class":98},[92,39345,30377],{"class":102},[92,39347,39348,39350,39352,39354],{"class":94,"line":11},[92,39349,30719],{"class":98},[92,39351,37896],{"class":102},[92,39353,30374],{"class":98},[92,39355,37901],{"class":102},[92,39357,39358,39360,39362,39364],{"class":94,"line":1158},[92,39359,30719],{"class":98},[92,39361,30722],{"class":102},[92,39363,30374],{"class":98},[92,39365,30727],{"class":102},[92,39367,39368,39370,39372,39374],{"class":94,"line":1173},[92,39369,30719],{"class":98},[92,39371,30739],{"class":102},[92,39373,30374],{"class":98},[92,39375,30744],{"class":102},[92,39377,39378],{"class":94,"line":1179},[92,39379,2379],{"emptyLinePlaceholder":17},[92,39381,39382,39384,39386,39388,39390,39392,39394],{"class":94,"line":1193},[92,39383,14674],{"class":98},[92,39385,37932],{"class":1942},[92,39387,103],{"class":102},[92,39389,30760],{"class":1942},[92,39391,661],{"class":102},[92,39393,30765],{"class":1942},[92,39395,30768],{"class":102},[92,39397,39398,39400,39402],{"class":94,"line":1199},[92,39399,30783],{"class":98},[92,39401,30786],{"class":151},[92,39403,30789],{"class":102},[92,39405,39406,39408,39410,39412,39414,39416,39418,39420],{"class":94,"line":1290},[92,39407,30799],{"class":151},[92,39409,103],{"class":102},[92,39411,37959],{"class":151},[92,39413,12415],{"class":102},[92,39415,30805],{"class":151},[92,39417,30808],{"class":102},[92,39419,30811],{"class":151},[92,39421,1955],{"class":102},[92,39423,39424],{"class":94,"line":1296},[92,39425,37974],{"class":161},[92,39427,39428],{"class":94,"line":1308},[92,39429,37979],{"class":161},[92,39431,39432,39434,39436,39438],{"class":94,"line":1591},[92,39433,30827],{"class":151},[92,39435,37986],{"class":102},[92,39437,148],{"class":98},[92,39439,37991],{"class":102},[92,39441,39442,39444,39446,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474],{"class":94,"line":1596},[92,39443,37996],{"class":102},[92,39445,30838],{"class":5196},[92,39447,148],{"class":98},[92,39449,320],{"class":151},[92,39451,481],{"class":102},[92,39453,30847],{"class":5196},[92,39455,148],{"class":98},[92,39457,306],{"class":151},[92,39459,481],{"class":102},[92,39461,30856],{"class":5196},[92,39463,148],{"class":98},[92,39465,174],{"class":151},[92,39467,481],{"class":102},[92,39469,30865],{"class":5196},[92,39471,148],{"class":98},[92,39473,320],{"class":151},[92,39475,38029],{"class":102},[92,39477,39478],{"class":94,"line":1602},[92,39479,38034],{"class":102},[92,39481,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514],{"class":94,"line":1607},[92,39483,37996],{"class":102},[92,39485,30838],{"class":5196},[92,39487,148],{"class":98},[92,39489,306],{"class":151},[92,39491,481],{"class":102},[92,39493,30847],{"class":5196},[92,39495,148],{"class":98},[92,39497,306],{"class":151},[92,39499,481],{"class":102},[92,39501,30856],{"class":5196},[92,39503,148],{"class":98},[92,39505,174],{"class":151},[92,39507,481],{"class":102},[92,39509,30865],{"class":5196},[92,39511,148],{"class":98},[92,39513,320],{"class":151},[92,39515,38029],{"class":102},[92,39517,39518],{"class":94,"line":1621},[92,39519,38034],{"class":102},[92,39521,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546],{"class":94,"line":1626},[92,39523,38079],{"class":102},[92,39525,30856],{"class":5196},[92,39527,148],{"class":98},[92,39529,180],{"class":151},[92,39531,481],{"class":102},[92,39533,30911],{"class":5196},[92,39535,148],{"class":98},[92,39537,180],{"class":151},[92,39539,481],{"class":102},[92,39541,30865],{"class":5196},[92,39543,148],{"class":98},[92,39545,294],{"class":151},[92,39547,109],{"class":102},[92,39549,39550],{"class":94,"line":1632},[92,39551,38108],{"class":102},[92,39553,39554],{"class":94,"line":1653},[92,39555,38113],{"class":161},[92,39557,39558,39560,39562,39564],{"class":94,"line":1658},[92,39559,30827],{"class":151},[92,39561,38120],{"class":102},[92,39563,148],{"class":98},[92,39565,37991],{"class":102},[92,39567,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600],{"class":94,"line":1672},[92,39569,37996],{"class":102},[92,39571,30838],{"class":5196},[92,39573,148],{"class":98},[92,39575,306],{"class":151},[92,39577,481],{"class":102},[92,39579,30847],{"class":5196},[92,39581,148],{"class":98},[92,39583,32052],{"class":151},[92,39585,481],{"class":102},[92,39587,30856],{"class":5196},[92,39589,148],{"class":98},[92,39591,174],{"class":151},[92,39593,481],{"class":102},[92,39595,30865],{"class":5196},[92,39597,148],{"class":98},[92,39599,320],{"class":151},[92,39601,38029],{"class":102},[92,39603,39604],{"class":94,"line":1677},[92,39605,38034],{"class":102},[92,39607,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640],{"class":94,"line":1706},[92,39609,37996],{"class":102},[92,39611,30838],{"class":5196},[92,39613,148],{"class":98},[92,39615,32052],{"class":151},[92,39617,481],{"class":102},[92,39619,30847],{"class":5196},[92,39621,148],{"class":98},[92,39623,32052],{"class":151},[92,39625,481],{"class":102},[92,39627,30856],{"class":5196},[92,39629,148],{"class":98},[92,39631,174],{"class":151},[92,39633,481],{"class":102},[92,39635,30865],{"class":5196},[92,39637,148],{"class":98},[92,39639,320],{"class":151},[92,39641,38029],{"class":102},[92,39643,39644],{"class":94,"line":1711},[92,39645,38034],{"class":102},[92,39647,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672],{"class":94,"line":1728},[92,39649,38079],{"class":102},[92,39651,30856],{"class":5196},[92,39653,148],{"class":98},[92,39655,180],{"class":151},[92,39657,481],{"class":102},[92,39659,30911],{"class":5196},[92,39661,148],{"class":98},[92,39663,180],{"class":151},[92,39665,481],{"class":102},[92,39667,30865],{"class":5196},[92,39669,148],{"class":98},[92,39671,294],{"class":151},[92,39673,109],{"class":102},[92,39675,39676],{"class":94,"line":1733},[92,39677,38108],{"class":102},[92,39679,39680],{"class":94,"line":1738},[92,39681,38241],{"class":161},[92,39683,39684,39686,39688,39690],{"class":94,"line":1743},[92,39685,30827],{"class":151},[92,39687,38248],{"class":102},[92,39689,148],{"class":98},[92,39691,37991],{"class":102},[92,39693,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726],{"class":94,"line":1757},[92,39695,37996],{"class":102},[92,39697,30838],{"class":5196},[92,39699,148],{"class":98},[92,39701,32052],{"class":151},[92,39703,481],{"class":102},[92,39705,30847],{"class":5196},[92,39707,148],{"class":98},[92,39709,34852],{"class":151},[92,39711,481],{"class":102},[92,39713,30856],{"class":5196},[92,39715,148],{"class":98},[92,39717,174],{"class":151},[92,39719,481],{"class":102},[92,39721,30865],{"class":5196},[92,39723,148],{"class":98},[92,39725,320],{"class":151},[92,39727,38029],{"class":102},[92,39729,39730],{"class":94,"line":1762},[92,39731,38034],{"class":102},[92,39733,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766],{"class":94,"line":2556},[92,39735,37996],{"class":102},[92,39737,30838],{"class":5196},[92,39739,148],{"class":98},[92,39741,34852],{"class":151},[92,39743,481],{"class":102},[92,39745,30847],{"class":5196},[92,39747,148],{"class":98},[92,39749,34852],{"class":151},[92,39751,481],{"class":102},[92,39753,30856],{"class":5196},[92,39755,148],{"class":98},[92,39757,174],{"class":151},[92,39759,481],{"class":102},[92,39761,30865],{"class":5196},[92,39763,148],{"class":98},[92,39765,320],{"class":151},[92,39767,38029],{"class":102},[92,39769,39770],{"class":94,"line":2570},[92,39771,38034],{"class":102},[92,39773,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806],{"class":94,"line":2578},[92,39775,37996],{"class":102},[92,39777,30838],{"class":5196},[92,39779,148],{"class":98},[92,39781,34852],{"class":151},[92,39783,481],{"class":102},[92,39785,30847],{"class":5196},[92,39787,148],{"class":98},[92,39789,34852],{"class":151},[92,39791,481],{"class":102},[92,39793,30856],{"class":5196},[92,39795,148],{"class":98},[92,39797,174],{"class":151},[92,39799,481],{"class":102},[92,39801,30865],{"class":5196},[92,39803,148],{"class":98},[92,39805,320],{"class":151},[92,39807,38029],{"class":102},[92,39809,39810],{"class":94,"line":2583},[92,39811,38034],{"class":102},[92,39813,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838],{"class":94,"line":2589},[92,39815,38079],{"class":102},[92,39817,30856],{"class":5196},[92,39819,148],{"class":98},[92,39821,180],{"class":151},[92,39823,481],{"class":102},[92,39825,30911],{"class":5196},[92,39827,148],{"class":98},[92,39829,180],{"class":151},[92,39831,481],{"class":102},[92,39833,30865],{"class":5196},[92,39835,148],{"class":98},[92,39837,294],{"class":151},[92,39839,109],{"class":102},[92,39841,39842],{"class":94,"line":2595},[92,39843,38108],{"class":102},[92,39845,39846],{"class":94,"line":2600},[92,39847,38409],{"class":161},[92,39849,39850,39852,39854,39856],{"class":94,"line":7928},[92,39851,30827],{"class":151},[92,39853,38416],{"class":102},[92,39855,148],{"class":98},[92,39857,37991],{"class":102},[92,39859,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892],{"class":94,"line":7952},[92,39861,37996],{"class":102},[92,39863,30838],{"class":5196},[92,39865,148],{"class":98},[92,39867,34852],{"class":151},[92,39869,481],{"class":102},[92,39871,30847],{"class":5196},[92,39873,148],{"class":98},[92,39875,38439],{"class":151},[92,39877,481],{"class":102},[92,39879,30856],{"class":5196},[92,39881,148],{"class":98},[92,39883,174],{"class":151},[92,39885,481],{"class":102},[92,39887,30865],{"class":5196},[92,39889,148],{"class":98},[92,39891,320],{"class":151},[92,39893,38029],{"class":102},[92,39895,39896],{"class":94,"line":7957},[92,39897,38034],{"class":102},[92,39899,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932],{"class":94,"line":7963},[92,39901,37996],{"class":102},[92,39903,30838],{"class":5196},[92,39905,148],{"class":98},[92,39907,38439],{"class":151},[92,39909,481],{"class":102},[92,39911,30847],{"class":5196},[92,39913,148],{"class":98},[92,39915,38439],{"class":151},[92,39917,481],{"class":102},[92,39919,30856],{"class":5196},[92,39921,148],{"class":98},[92,39923,174],{"class":151},[92,39925,481],{"class":102},[92,39927,30865],{"class":5196},[92,39929,148],{"class":98},[92,39931,320],{"class":151},[92,39933,38029],{"class":102},[92,39935,39936],{"class":94,"line":7990},[92,39937,38034],{"class":102},[92,39939,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972],{"class":94,"line":7995},[92,39941,37996],{"class":102},[92,39943,30838],{"class":5196},[92,39945,148],{"class":98},[92,39947,38439],{"class":151},[92,39949,481],{"class":102},[92,39951,30847],{"class":5196},[92,39953,148],{"class":98},[92,39955,38439],{"class":151},[92,39957,481],{"class":102},[92,39959,30856],{"class":5196},[92,39961,148],{"class":98},[92,39963,174],{"class":151},[92,39965,481],{"class":102},[92,39967,30865],{"class":5196},[92,39969,148],{"class":98},[92,39971,320],{"class":151},[92,39973,38029],{"class":102},[92,39975,39976],{"class":94,"line":8001},[92,39977,38034],{"class":102},[92,39979,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004],{"class":94,"line":8013},[92,39981,38079],{"class":102},[92,39983,30856],{"class":5196},[92,39985,148],{"class":98},[92,39987,180],{"class":151},[92,39989,481],{"class":102},[92,39991,30911],{"class":5196},[92,39993,148],{"class":98},[92,39995,180],{"class":151},[92,39997,481],{"class":102},[92,39999,30865],{"class":5196},[92,40001,148],{"class":98},[92,40003,294],{"class":151},[92,40005,109],{"class":102},[92,40007,40008],{"class":94,"line":8025},[92,40009,38108],{"class":102},[92,40011,40012],{"class":94,"line":8037},[92,40013,38578],{"class":161},[92,40015,40016,40018,40020,40022],{"class":94,"line":9696},[92,40017,30827],{"class":151},[92,40019,38585],{"class":102},[92,40021,148],{"class":98},[92,40023,37991],{"class":102},[92,40025,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058],{"class":94,"line":9721},[92,40027,37996],{"class":102},[92,40029,30838],{"class":5196},[92,40031,148],{"class":98},[92,40033,38439],{"class":151},[92,40035,481],{"class":102},[92,40037,30847],{"class":5196},[92,40039,148],{"class":98},[92,40041,38439],{"class":151},[92,40043,481],{"class":102},[92,40045,30856],{"class":5196},[92,40047,148],{"class":98},[92,40049,174],{"class":151},[92,40051,481],{"class":102},[92,40053,30865],{"class":5196},[92,40055,148],{"class":98},[92,40057,320],{"class":151},[92,40059,38029],{"class":102},[92,40061,40062],{"class":94,"line":9744},[92,40063,38034],{"class":102},[92,40065,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098],{"class":94,"line":9768},[92,40067,37996],{"class":102},[92,40069,30838],{"class":5196},[92,40071,148],{"class":98},[92,40073,38439],{"class":151},[92,40075,481],{"class":102},[92,40077,30847],{"class":5196},[92,40079,148],{"class":98},[92,40081,38439],{"class":151},[92,40083,481],{"class":102},[92,40085,30856],{"class":5196},[92,40087,148],{"class":98},[92,40089,174],{"class":151},[92,40091,481],{"class":102},[92,40093,30865],{"class":5196},[92,40095,148],{"class":98},[92,40097,320],{"class":151},[92,40099,38029],{"class":102},[92,40101,40102],{"class":94,"line":9773},[92,40103,38034],{"class":102},[92,40105,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138],{"class":94,"line":9778},[92,40107,37996],{"class":102},[92,40109,30838],{"class":5196},[92,40111,148],{"class":98},[92,40113,38439],{"class":151},[92,40115,481],{"class":102},[92,40117,30847],{"class":5196},[92,40119,148],{"class":98},[92,40121,38439],{"class":151},[92,40123,481],{"class":102},[92,40125,30856],{"class":5196},[92,40127,148],{"class":98},[92,40129,174],{"class":151},[92,40131,481],{"class":102},[92,40133,30865],{"class":5196},[92,40135,148],{"class":98},[92,40137,320],{"class":151},[92,40139,38029],{"class":102},[92,40141,40142],{"class":94,"line":9783},[92,40143,38034],{"class":102},[92,40145,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170],{"class":94,"line":9792},[92,40147,38079],{"class":102},[92,40149,30856],{"class":5196},[92,40151,148],{"class":98},[92,40153,180],{"class":151},[92,40155,481],{"class":102},[92,40157,30911],{"class":5196},[92,40159,148],{"class":98},[92,40161,180],{"class":151},[92,40163,481],{"class":102},[92,40165,30865],{"class":5196},[92,40167,148],{"class":98},[92,40169,294],{"class":151},[92,40171,109],{"class":102},[92,40173,40174],{"class":94,"line":9797},[92,40175,38108],{"class":102},[92,40177,40178],{"class":94,"line":9803},[92,40179,38746],{"class":161},[92,40181,40182,40184,40186,40188],{"class":94,"line":9824},[92,40183,30827],{"class":151},[92,40185,38753],{"class":102},[92,40187,148],{"class":98},[92,40189,37991],{"class":102},[92,40191,40192],{"class":94,"line":9830},[92,40193,38762],{"class":161},[92,40195,40196],{"class":94,"line":9844},[92,40197,38767],{"class":161},[92,40199,40200],{"class":94,"line":9850},[92,40201,38772],{"class":102},[92,40203,40204,40206,40208,40210,40212,40214,40216,40218,40220],{"class":94,"line":9877},[92,40205,38777],{"class":102},[92,40207,472],{"class":151},[92,40209,558],{"class":98},[92,40211,472],{"class":151},[92,40213,558],{"class":98},[92,40215,38439],{"class":151},[92,40217,481],{"class":102},[92,40219,34852],{"class":151},[92,40221,38029],{"class":102},[92,40223,40224],{"class":94,"line":9886},[92,40225,38034],{"class":102},[92,40227,40228,40230,40232,40234,40236],{"class":94,"line":9892},[92,40229,38777],{"class":102},[92,40231,34852],{"class":151},[92,40233,481],{"class":102},[92,40235,32052],{"class":151},[92,40237,38029],{"class":102},[92,40239,40240],{"class":94,"line":9900},[92,40241,38034],{"class":102},[92,40243,40244,40246,40248,40250,40252],{"class":94,"line":9905},[92,40245,38777],{"class":102},[92,40247,32052],{"class":151},[92,40249,481],{"class":102},[92,40251,549],{"class":151},[92,40253,109],{"class":102},[92,40255,40256],{"class":94,"line":16584},[92,40257,38108],{"class":102},[92,40259,40260],{"class":94,"line":16590},[92,40261,2379],{"emptyLinePlaceholder":17},[92,40263,40264],{"class":94,"line":16613},[92,40265,38838],{"class":161},[92,40267,40268],{"class":94,"line":16619},[92,40269,38843],{"class":161},[92,40271,40272,40274,40276,40278,40280],{"class":94,"line":16642},[92,40273,3382],{"class":98},[92,40275,38850],{"class":102},[92,40277,26025],{"class":98},[92,40279,38855],{"class":151},[92,40281,38858],{"class":102},[92,40283,40284],{"class":94,"line":16656},[92,40285,38863],{"class":161},[92,40287,40288,40290,40292],{"class":94,"line":16676},[92,40289,4621],{"class":98},[92,40291,38870],{"class":151},[92,40293,38873],{"class":102},[92,40295,40296],{"class":94,"line":16682},[92,40297,38878],{"class":161},[92,40299,40300,40302,40304,40306,40308],{"class":94,"line":16693},[92,40301,38883],{"class":102},[92,40303,38886],{"class":5196},[92,40305,148],{"class":98},[92,40307,38891],{"class":207},[92,40309,109],{"class":102},[92,40311,40312],{"class":94,"line":16716},[92,40313,38898],{"class":161},[92,40315,40316,40318,40320,40322,40324,40326],{"class":94,"line":16738},[92,40317,38903],{"class":98},[92,40319,38906],{"class":102},[92,40321,38909],{"class":98},[92,40323,38912],{"class":98},[92,40325,38915],{"class":151},[92,40327,3718],{"class":102},[92,40329,40330],{"class":94,"line":16743},[92,40331,38922],{"class":161},[92,40333,40334,40336,40338],{"class":94,"line":16749},[92,40335,38927],{"class":102},[92,40337,294],{"class":151},[92,40339,109],{"class":102},[92,40341,40342],{"class":94,"line":16763},[92,40343,38936],{"class":161},[92,40345,40346,40348,40350],{"class":94,"line":16776},[92,40347,38941],{"class":98},[92,40349,38870],{"class":151},[92,40351,38946],{"class":102},[92,40353,40354],{"class":94,"line":16781},[92,40355,38951],{"class":161},[92,40357,40358],{"class":94,"line":16795},[92,40359,38956],{"class":161},[92,40361,40362,40364,40366,40368,40370],{"class":94,"line":16800},[92,40363,38961],{"class":102},[92,40365,294],{"class":151},[92,40367,481],{"class":102},[92,40369,38968],{"class":151},[92,40371,109],{"class":102},[92,40373,40374],{"class":94,"line":16806},[92,40375,38975],{"class":161},[92,40377,40378,40380,40382,40384,40386,40388],{"class":94,"line":16811},[92,40379,38903],{"class":98},[92,40381,38906],{"class":102},[92,40383,38909],{"class":98},[92,40385,38912],{"class":98},[92,40387,38915],{"class":151},[92,40389,3718],{"class":102},[92,40391,40392,40394,40396],{"class":94,"line":16825},[92,40393,38927],{"class":102},[92,40395,294],{"class":151},[92,40397,109],{"class":102},[92,40399,40400],{"class":94,"line":16830},[92,40401,2379],{"emptyLinePlaceholder":17},[92,40403,40404],{"class":94,"line":16835},[92,40405,35147],{"class":161},[92,40407,40408,40410,40412],{"class":94,"line":16849},[92,40409,30783],{"class":98},[92,40411,31075],{"class":1942},[92,40413,31078],{"class":102},[92,40415,40416,40418,40420,40422],{"class":94,"line":16861},[92,40417,31083],{"class":102},[92,40419,148],{"class":98},[92,40421,30805],{"class":151},[92,40423,39024],{"class":102},[92,40425,40426,40428,40430,40432],{"class":94,"line":16866},[92,40427,31083],{"class":102},[92,40429,148],{"class":98},[92,40431,30805],{"class":151},[92,40433,39035],{"class":102},[92,40435,40436,40438,40440,40442],{"class":94,"line":16879},[92,40437,31083],{"class":102},[92,40439,148],{"class":98},[92,40441,30805],{"class":151},[92,40443,39046],{"class":102},[92,40445,40446,40448,40450,40452],{"class":94,"line":16884},[92,40447,31083],{"class":102},[92,40449,148],{"class":98},[92,40451,30805],{"class":151},[92,40453,39057],{"class":102},[92,40455,40456,40458,40460,40462],{"class":94,"line":16889},[92,40457,31083],{"class":102},[92,40459,148],{"class":98},[92,40461,30805],{"class":151},[92,40463,39068],{"class":102},[92,40465,40466,40468,40470,40472],{"class":94,"line":16894},[92,40467,31083],{"class":102},[92,40469,148],{"class":98},[92,40471,30805],{"class":151},[92,40473,39079],{"class":102},[92,40475,40476,40478],{"class":94,"line":16907},[92,40477,14732],{"class":98},[92,40479,31191],{"class":102},[92,40481,40482],{"class":94,"line":16912},[92,40483,2379],{"emptyLinePlaceholder":17},[92,40485,40486],{"class":94,"line":32615},[92,40487,39094],{"class":161},[92,40489,40490,40492,40494,40496,40498],{"class":94,"line":32621},[92,40491,1510],{"class":98},[92,40493,31202],{"class":151},[92,40495,2928],{"class":98},[92,40497,39105],{"class":207},[92,40499,3718],{"class":102},[92,40501,40502,40504,40506,40508,40510,40512,40514,40516,40518],{"class":94,"line":32627},[92,40503,31219],{"class":102},[92,40505,148],{"class":98},[92,40507,30433],{"class":102},[92,40509,31226],{"class":207},[92,40511,1683],{"class":98},[92,40513,31231],{"class":102},[92,40515,1680],{"class":98},[92,40517,30458],{"class":207},[92,40519,109],{"class":102},[92,40521,40522,40524],{"class":94,"line":32633},[92,40523,31281],{"class":151},[92,40525,30467],{"class":102},[92,40527,40528,40530,40532],{"class":94,"line":32639},[92,40529,31271],{"class":102},[92,40531,148],{"class":98},[92,40533,39142],{"class":102},[92,40535,40536,40538,40540,40542,40544,40546,40548,40550],{"class":94,"line":32650},[92,40537,31281],{"class":151},[92,40539,31284],{"class":102},[92,40541,320],{"class":151},[92,40543,481],{"class":102},[92,40545,31483],{"class":151},[92,40547,481],{"class":102},[92,40549,31483],{"class":151},[92,40551,31297],{"class":102},[46,40553,40554],{"start":1158},[49,40555,40556],{},"测试代码",[83,40558,40560],{"className":30360,"code":40559,"language":30362,"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,40561,40562,40568,40578,40588,40592,40602,40613,40617,40621,40625,40633,40649,40659,40675,40685,40699,40703,40713,40723,40733,40739,40743,40747,40755,40759,40775,40783,40787,40791,40799,40807,40811,40815,40819,40823,40829,40833,40843,40851,40859,40863,40867,40871,40879,40883,40899,40903,40907,40911,40923,40927,40939,40943,40947,40959,40963,40973,40977,40981,40993,40997,41006,41010,41014,41022,41026,41034,41038,41042,41046,41050,41054,41070,41078,41082,41086,41134,41140,41144,41154,41162,41170,41174,41178,41182,41186,41194,41198,41214,41218,41226,41234],{"__ignoreMap":10},[92,40563,40564,40566],{"class":94,"line":95},[92,40565,30374],{"class":98},[92,40567,30377],{"class":102},[92,40569,40570,40572,40574,40576],{"class":94,"line":11},[92,40571,30374],{"class":98},[92,40573,31397],{"class":102},[92,40575,31365],{"class":98},[92,40577,31402],{"class":102},[92,40579,40580,40582,40584,40586],{"class":94,"line":1158},[92,40581,30719],{"class":98},[92,40583,31380],{"class":102},[92,40585,30374],{"class":98},[92,40587,31385],{"class":102},[92,40589,40590],{"class":94,"line":1173},[92,40591,33904],{"class":161},[92,40593,40594,40596,40598,40600],{"class":94,"line":1179},[92,40595,30719],{"class":98},[92,40597,31350],{"class":102},[92,40599,30374],{"class":98},[92,40601,31355],{"class":102},[92,40603,40604,40606,40608,40610],{"class":94,"line":1193},[92,40605,30719],{"class":98},[92,40607,31896],{"class":102},[92,40609,30374],{"class":98},[92,40611,40612],{"class":151}," VGG16\n",[92,40614,40615],{"class":94,"line":1199},[92,40616,2379],{"emptyLinePlaceholder":17},[92,40618,40619],{"class":94,"line":1290},[92,40620,2379],{"emptyLinePlaceholder":17},[92,40622,40623],{"class":94,"line":1296},[92,40624,33933],{"class":161},[92,40626,40627,40629,40631],{"class":94,"line":1308},[92,40628,31929],{"class":98},[92,40630,33940],{"class":1942},[92,40632,31935],{"class":102},[92,40634,40635,40637,40639,40641,40643,40645,40647],{"class":94,"line":1591},[92,40636,33947],{"class":102},[92,40638,148],{"class":98},[92,40640,31437],{"class":102},[92,40642,31440],{"class":5196},[92,40644,148],{"class":98},[92,40646,31445],{"class":207},[92,40648,31448],{"class":102},[92,40650,40651,40653,40655,40657],{"class":94,"line":1596},[92,40652,33964],{"class":5196},[92,40654,148],{"class":98},[92,40656,33969],{"class":151},[92,40658,31448],{"class":102},[92,40660,40661,40663,40665,40667,40669,40671,40673],{"class":94,"line":1602},[92,40662,33976],{"class":5196},[92,40664,148],{"class":98},[92,40666,31475],{"class":102},[92,40668,31478],{"class":5196},[92,40670,148],{"class":98},[92,40672,31483],{"class":151},[92,40674,31486],{"class":102},[92,40676,40677,40679,40681,40683],{"class":94,"line":1607},[92,40678,33993],{"class":5196},[92,40680,148],{"class":98},[92,40682,31458],{"class":151},[92,40684,109],{"class":102},[92,40686,40687,40689,40691,40693,40695,40697],{"class":94,"line":1621},[92,40688,34004],{"class":102},[92,40690,148],{"class":98},[92,40692,31516],{"class":102},[92,40694,31519],{"class":5196},[92,40696,148],{"class":98},[92,40698,34015],{"class":102},[92,40700,40701],{"class":94,"line":1626},[92,40702,34020],{"class":161},[92,40704,40705,40707,40709,40711],{"class":94,"line":1632},[92,40706,34025],{"class":5196},[92,40708,148],{"class":98},[92,40710,320],{"class":151},[92,40712,31448],{"class":102},[92,40714,40715,40717,40719,40721],{"class":94,"line":1653},[92,40716,34036],{"class":5196},[92,40718,148],{"class":98},[92,40720,31458],{"class":151},[92,40722,31448],{"class":102},[92,40724,40725,40727,40729,40731],{"class":94,"line":1658},[92,40726,34047],{"class":5196},[92,40728,148],{"class":98},[92,40730,294],{"class":151},[92,40732,109],{"class":102},[92,40734,40735,40737],{"class":94,"line":1672},[92,40736,4069],{"class":98},[92,40738,34060],{"class":102},[92,40740,40741],{"class":94,"line":1677},[92,40742,2379],{"emptyLinePlaceholder":17},[92,40744,40745],{"class":94,"line":1706},[92,40746,34069],{"class":161},[92,40748,40749,40751,40753],{"class":94,"line":1711},[92,40750,31929],{"class":98},[92,40752,34076],{"class":1942},[92,40754,34079],{"class":102},[92,40756,40757],{"class":94,"line":1728},[92,40758,34084],{"class":161},[92,40760,40761,40763,40765,40767,40769,40771,40773],{"class":94,"line":1733},[92,40762,31219],{"class":102},[92,40764,148],{"class":98},[92,40766,31226],{"class":207},[92,40768,1683],{"class":98},[92,40770,31231],{"class":102},[92,40772,1680],{"class":98},[92,40774,34101],{"class":207},[92,40776,40777,40779,40781],{"class":94,"line":1738},[92,40778,31271],{"class":102},[92,40780,148],{"class":98},[92,40782,32271],{"class":102},[92,40784,40785],{"class":94,"line":1743},[92,40786,2379],{"emptyLinePlaceholder":17},[92,40788,40789],{"class":94,"line":1757},[92,40790,34118],{"class":161},[92,40792,40793,40795,40797],{"class":94,"line":1762},[92,40794,34123],{"class":102},[92,40796,148],{"class":98},[92,40798,32324],{"class":151},[92,40800,40801,40803,40805],{"class":94,"line":2556},[92,40802,34132],{"class":102},[92,40804,148],{"class":98},[92,40806,3064],{"class":151},[92,40808,40809],{"class":94,"line":2570},[92,40810,2379],{"emptyLinePlaceholder":17},[92,40812,40813],{"class":94,"line":2578},[92,40814,34145],{"class":161},[92,40816,40817],{"class":94,"line":2583},[92,40818,34150],{"class":161},[92,40820,40821],{"class":94,"line":2589},[92,40822,34155],{"class":161},[92,40824,40825,40827],{"class":94,"line":2595},[92,40826,34160],{"class":98},[92,40828,32866],{"class":102},[92,40830,40831],{"class":94,"line":2600},[92,40832,34167],{"class":161},[92,40834,40835,40837,40839,40841],{"class":94,"line":7928},[92,40836,3382],{"class":98},[92,40838,34174],{"class":102},[92,40840,26025],{"class":98},[92,40842,34179],{"class":102},[92,40844,40845,40847,40849],{"class":94,"line":7952},[92,40846,34184],{"class":102},[92,40848,148],{"class":98},[92,40850,34189],{"class":102},[92,40852,40853,40855,40857],{"class":94,"line":7957},[92,40854,34194],{"class":102},[92,40856,148],{"class":98},[92,40858,34199],{"class":102},[92,40860,40861],{"class":94,"line":7963},[92,40862,34204],{"class":161},[92,40864,40865],{"class":94,"line":7990},[92,40866,32857],{"class":102},[92,40868,40869],{"class":94,"line":7995},[92,40870,34213],{"class":161},[92,40872,40873,40875,40877],{"class":94,"line":8001},[92,40874,32642],{"class":102},[92,40876,148],{"class":98},[92,40878,34222],{"class":102},[92,40880,40881],{"class":94,"line":8013},[92,40882,34227],{"class":161},[92,40884,40885,40887,40889,40891,40893,40895,40897],{"class":94,"line":8025},[92,40886,32659],{"class":102},[92,40888,148],{"class":98},[92,40890,32664],{"class":102},[92,40892,32667],{"class":5196},[92,40894,148],{"class":98},[92,40896,320],{"class":151},[92,40898,109],{"class":102},[92,40900,40901],{"class":94,"line":8037},[92,40902,34248],{"class":161},[92,40904,40905],{"class":94,"line":9696},[92,40906,34253],{"class":161},[92,40908,40909],{"class":94,"line":9721},[92,40910,34258],{"class":161},[92,40912,40913,40915,40917,40919,40921],{"class":94,"line":9744},[92,40914,34263],{"class":102},[92,40916,9457],{"class":98},[92,40918,32769],{"class":102},[92,40920,2928],{"class":98},[92,40922,34272],{"class":102},[92,40924,40925],{"class":94,"line":9768},[92,40926,34277],{"class":161},[92,40928,40929,40931,40933,40935,40937],{"class":94,"line":9773},[92,40930,34282],{"class":102},[92,40932,9457],{"class":98},[92,40934,34287],{"class":102},[92,40936,294],{"class":151},[92,40938,109],{"class":102},[92,40940,40941],{"class":94,"line":9778},[92,40942,2379],{"emptyLinePlaceholder":17},[92,40944,40945],{"class":94,"line":9783},[92,40946,34300],{"class":161},[92,40948,40949,40951,40953,40955,40957],{"class":94,"line":9792},[92,40950,34305],{"class":102},[92,40952,148],{"class":98},[92,40954,34310],{"class":102},[92,40956,687],{"class":98},[92,40958,34315],{"class":102},[92,40960,40961],{"class":94,"line":9797},[92,40962,34320],{"class":161},[92,40964,40965,40967,40969,40971],{"class":94,"line":9803},[92,40966,32433],{"class":151},[92,40968,103],{"class":102},[92,40970,34329],{"class":207},[92,40972,34332],{"class":102},[92,40974,40975],{"class":94,"line":9824},[92,40976,2379],{"emptyLinePlaceholder":17},[92,40978,40979],{"class":94,"line":9830},[92,40980,34341],{"class":161},[92,40982,40983,40985,40987,40989,40991],{"class":94,"line":9844},[92,40984,1510],{"class":98},[92,40986,31202],{"class":151},[92,40988,2928],{"class":98},[92,40990,31207],{"class":207},[92,40992,3718],{"class":102},[92,40994,40995],{"class":94,"line":9850},[92,40996,34358],{"class":161},[92,40998,40999,41001,41003],{"class":94,"line":9877},[92,41000,31271],{"class":102},[92,41002,148],{"class":98},[92,41004,41005],{"class":102},"VGG16()\n",[92,41007,41008],{"class":94,"line":9886},[92,41009,34371],{"class":161},[92,41011,41012],{"class":94,"line":9892},[92,41013,34376],{"class":161},[92,41015,41016,41018,41020],{"class":94,"line":9900},[92,41017,34381],{"class":102},[92,41019,34384],{"class":207},[92,41021,30479],{"class":102},[92,41023,41024],{"class":94,"line":9905},[92,41025,34391],{"class":161},[92,41027,41028,41030,41032],{"class":94,"line":16584},[92,41029,34004],{"class":102},[92,41031,148],{"class":98},[92,41033,34400],{"class":102},[92,41035,41036],{"class":94,"line":16590},[92,41037,34405],{"class":161},[92,41039,41040],{"class":94,"line":16613},[92,41041,34410],{"class":102},[92,41043,41044],{"class":94,"line":16619},[92,41045,2379],{"emptyLinePlaceholder":17},[92,41047,41048],{"class":94,"line":16642},[92,41049,34419],{"class":161},[92,41051,41052],{"class":94,"line":16656},[92,41053,34424],{"class":161},[92,41055,41056,41058,41060,41062,41064,41066,41068],{"class":94,"line":16676},[92,41057,31219],{"class":102},[92,41059,148],{"class":98},[92,41061,31226],{"class":207},[92,41063,1683],{"class":98},[92,41065,31231],{"class":102},[92,41067,1680],{"class":98},[92,41069,34101],{"class":207},[92,41071,41072,41074,41076],{"class":94,"line":16682},[92,41073,31271],{"class":102},[92,41075,148],{"class":98},[92,41077,32271],{"class":102},[92,41079,41080],{"class":94,"line":16693},[92,41081,34453],{"class":161},[92,41083,41084],{"class":94,"line":16716},[92,41085,34458],{"class":161},[92,41087,41088,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132],{"class":94,"line":16738},[92,41089,34463],{"class":102},[92,41091,148],{"class":98},[92,41093,993],{"class":102},[92,41095,34470],{"class":207},[92,41097,481],{"class":102},[92,41099,34475],{"class":207},[92,41101,481],{"class":102},[92,41103,34480],{"class":207},[92,41105,481],{"class":102},[92,41107,34485],{"class":207},[92,41109,481],{"class":102},[92,41111,34490],{"class":207},[92,41113,481],{"class":102},[92,41115,34495],{"class":207},[92,41117,481],{"class":102},[92,41119,34500],{"class":207},[92,41121,481],{"class":102},[92,41123,34505],{"class":207},[92,41125,481],{"class":102},[92,41127,34510],{"class":207},[92,41129,481],{"class":102},[92,41131,34515],{"class":207},[92,41133,33228],{"class":102},[92,41135,41136,41138],{"class":94,"line":16743},[92,41137,34160],{"class":98},[92,41139,32866],{"class":102},[92,41141,41142],{"class":94,"line":16749},[92,41143,34528],{"class":161},[92,41145,41146,41148,41150,41152],{"class":94,"line":16763},[92,41147,3382],{"class":98},[92,41149,34535],{"class":102},[92,41151,26025],{"class":98},[92,41153,34179],{"class":102},[92,41155,41156,41158,41160],{"class":94,"line":16776},[92,41157,32592],{"class":102},[92,41159,148],{"class":98},[92,41161,32597],{"class":102},[92,41163,41164,41166,41168],{"class":94,"line":16781},[92,41165,32607],{"class":102},[92,41167,148],{"class":98},[92,41169,32612],{"class":102},[92,41171,41172],{"class":94,"line":16795},[92,41173,2379],{"emptyLinePlaceholder":17},[92,41175,41176],{"class":94,"line":16800},[92,41177,34564],{"class":161},[92,41179,41180],{"class":94,"line":16806},[92,41181,32857],{"class":102},[92,41183,41184],{"class":94,"line":16811},[92,41185,34573],{"class":161},[92,41187,41188,41190,41192],{"class":94,"line":16825},[92,41189,32642],{"class":102},[92,41191,148],{"class":98},[92,41193,32647],{"class":102},[92,41195,41196],{"class":94,"line":16830},[92,41197,34586],{"class":161},[92,41199,41200,41202,41204,41206,41208,41210,41212],{"class":94,"line":16835},[92,41201,32659],{"class":102},[92,41203,148],{"class":98},[92,41205,32664],{"class":102},[92,41207,32667],{"class":5196},[92,41209,148],{"class":98},[92,41211,320],{"class":151},[92,41213,109],{"class":102},[92,41215,41216],{"class":94,"line":16849},[92,41217,34607],{"class":161},[92,41219,41220,41222,41224],{"class":94,"line":16861},[92,41221,34612],{"class":102},[92,41223,148],{"class":98},[92,41225,34617],{"class":102},[92,41227,41228,41230,41232],{"class":94,"line":16866},[92,41229,34622],{"class":102},[92,41231,148],{"class":98},[92,41233,34627],{"class":102},[92,41235,41236,41238,41240,41242,41244,41246,41248,41250],{"class":94,"line":16879},[92,41237,34632],{"class":151},[92,41239,103],{"class":102},[92,41241,34637],{"class":207},[92,41243,34640],{"class":102},[92,41245,34643],{"class":207},[92,41247,481],{"class":102},[92,41249,34648],{"class":207},[92,41251,34651],{"class":102},[63,41253,41255],{"id":41254},"_23googlenet","2.3.GoogLeNet",[21978,41257,41259],{"id":41258},"_231原理","2.3.1.原理",[46,41261,41262],{},[49,41263,41264],{},"网络结构",[38,41266,41267],{},[1441,41268],{"alt":10,"src":41269},"\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,41271,41272],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[38,41274,41275],{},[1441,41276],{"alt":10,"src":41277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[38,41279,41280],{},[1441,41281],{"alt":10,"src":41282},"\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,41284,41285],{},[1441,41286],{"alt":10,"src":41287},"\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,41289,41290],{"start":11},[49,41291,41292],{},"1x1卷积的优点",[38,41294,41295],{},[1441,41296],{"alt":10,"src":41297},"\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,41299,41300],{"start":1158},[49,41301,41302],{},"全局平均池化层优点",[38,41304,41305],{},[1441,41306],{"alt":10,"src":41307},"\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,41309,41310],{},[1441,41311],{"alt":10,"src":41312},"\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,41314,41315],{"start":1173},[49,41316,41317],{},"参数详细描述",[38,41319,41320],{},[1441,41321],{"alt":10,"src":41322},"\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,41324,41325],{},[1441,41326],{"alt":10,"src":41327},"\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,41329,41330],{},[1441,41331],{"alt":10,"src":41332},"\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,41334,41335],{},[1441,41336],{"alt":10,"src":41337},"\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,41339,41340],{},[1441,41341],{"alt":10,"src":41342},"\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,41344,41345],{},[1441,41346],{"alt":10,"src":41347},"\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,41349,41350],{},[1441,41351],{"alt":10,"src":41352},"\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,41354,41355],{},[1441,41356],{"alt":10,"src":41357},"\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,41359,41360],{},[1441,41361],{"alt":10,"src":41362},"\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,41364,41365],{},[1441,41366],{"alt":10,"src":41367},"\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,41369,41370],{},[1441,41371],{"alt":10,"src":41372},"\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,41374,41375],{},[1441,41376],{"alt":10,"src":41377},"\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,41379,41380],{},[1441,41381],{"alt":10,"src":41382},"\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,41384,41385],{},[1441,41386],{"alt":10,"src":41387},"\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,41389,41390],{},[1441,41391],{"alt":10,"src":41392},"\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,41394,41395],{},[1441,41396],{"alt":10,"src":41397},"\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,41399,41400],{},[1441,41401],{"alt":10,"src":41402},"\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,41404,41405],{},[1441,41406],{"alt":10,"src":41407},"\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,41409,41410],{},[1441,41411],{"alt":10,"src":41412},"\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,41414,41415],{},[1441,41416],{"alt":10,"src":41417},"\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,41419,41420],{},[1441,41421],{"alt":10,"src":41422},"\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,41424,41426],{"id":41425},"_232代码实现","2.3.2.代码实现",[46,41428,41429],{},[49,41430,30693],{},[38,41432,41433],{},"根据原理一步一步搭建即可",[83,41435,41437],{"className":30360,"code":41436,"language":30362,"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,41438,41439,41445,41455,41465,41469,41486,41495,41510,41520,41525,41558,41563,41600,41647,41652,41688,41735,41740,41745,41780,41812,41816,41824,41840,41864,41889,41910,41915,41930,41934,41938,41943,41960,41965,41974,41989,42000,42044,42048,42076,42080,42091,42119,42123,42160,42164,42192,42196,42207,42243,42275,42303,42307,42318,42352,42384,42416,42449,42483,42511,42515,42526,42559,42591,42605,42609,42622,42626,42631,42643,42651,42673,42678,42683,42688,42693,42698,42703,42717,42725,42734,42747,42762,42771,42775,42783,42794,42805,42816,42827,42838,42844,42848,42853,42865,42885,42894],{"__ignoreMap":10},[92,41440,41441,41443],{"class":94,"line":95},[92,41442,30374],{"class":98},[92,41444,30377],{"class":102},[92,41446,41447,41449,41451,41453],{"class":94,"line":11},[92,41448,30719],{"class":98},[92,41450,30722],{"class":102},[92,41452,30374],{"class":98},[92,41454,30727],{"class":102},[92,41456,41457,41459,41461,41463],{"class":94,"line":1158},[92,41458,30719],{"class":98},[92,41460,30739],{"class":102},[92,41462,30374],{"class":98},[92,41464,30744],{"class":102},[92,41466,41467],{"class":94,"line":1173},[92,41468,2379],{"emptyLinePlaceholder":17},[92,41470,41471,41473,41476,41478,41480,41482,41484],{"class":94,"line":1179},[92,41472,14674],{"class":98},[92,41474,41475],{"class":1942}," Inception",[92,41477,103],{"class":102},[92,41479,30760],{"class":1942},[92,41481,661],{"class":102},[92,41483,30765],{"class":1942},[92,41485,30768],{"class":102},[92,41487,41488,41490,41492],{"class":94,"line":1193},[92,41489,30783],{"class":98},[92,41491,30786],{"class":151},[92,41493,41494],{"class":102},"(self,in_channels,c1,c2,c3,c4):\n",[92,41496,41497,41499,41502,41504,41506,41508],{"class":94,"line":1199},[92,41498,30799],{"class":151},[92,41500,41501],{"class":102},"(Inception,",[92,41503,30805],{"class":151},[92,41505,30808],{"class":102},[92,41507,30811],{"class":151},[92,41509,1955],{"class":102},[92,41511,41512,41514,41516,41518],{"class":94,"line":1290},[92,41513,30827],{"class":151},[92,41515,34753],{"class":102},[92,41517,148],{"class":98},[92,41519,34758],{"class":102},[92,41521,41522],{"class":94,"line":1296},[92,41523,41524],{"class":161},"        # 路线1：定义1*1卷积\n",[92,41526,41527,41529,41532,41534,41536,41538,41540,41543,41545,41547,41550,41552,41554,41556],{"class":94,"line":1308},[92,41528,30827],{"class":151},[92,41530,41531],{"class":102},".p1_1",[92,41533,148],{"class":98},[92,41535,30835],{"class":102},[92,41537,30838],{"class":5196},[92,41539,148],{"class":98},[92,41541,41542],{"class":102},"in_channels,",[92,41544,30847],{"class":5196},[92,41546,148],{"class":98},[92,41548,41549],{"class":102},"c1,",[92,41551,30856],{"class":5196},[92,41553,148],{"class":98},[92,41555,320],{"class":151},[92,41557,109],{"class":102},[92,41559,41560],{"class":94,"line":1591},[92,41561,41562],{"class":161},"        # 路线2：定义1*1卷积和3*3\n",[92,41564,41565,41567,41570,41572,41574,41576,41578,41580,41582,41584,41587,41589,41592,41594,41596,41598],{"class":94,"line":1596},[92,41566,30827],{"class":151},[92,41568,41569],{"class":102},".p2_1",[92,41571,148],{"class":98},[92,41573,30835],{"class":102},[92,41575,30838],{"class":5196},[92,41577,148],{"class":98},[92,41579,41542],{"class":102},[92,41581,30847],{"class":5196},[92,41583,148],{"class":98},[92,41585,41586],{"class":102},"c2[",[92,41588,294],{"class":151},[92,41590,41591],{"class":102},"],",[92,41593,30856],{"class":5196},[92,41595,148],{"class":98},[92,41597,320],{"class":151},[92,41599,109],{"class":102},[92,41601,41602,41604,41607,41609,41611,41613,41615,41617,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645],{"class":94,"line":1602},[92,41603,30827],{"class":151},[92,41605,41606],{"class":102},".p2_2",[92,41608,148],{"class":98},[92,41610,30835],{"class":102},[92,41612,30838],{"class":5196},[92,41614,148],{"class":98},[92,41616,41586],{"class":102},[92,41618,294],{"class":151},[92,41620,41591],{"class":102},[92,41622,30847],{"class":5196},[92,41624,148],{"class":98},[92,41626,41586],{"class":102},[92,41628,320],{"class":151},[92,41630,41591],{"class":102},[92,41632,30856],{"class":5196},[92,41634,148],{"class":98},[92,41636,174],{"class":151},[92,41638,481],{"class":102},[92,41640,30865],{"class":5196},[92,41642,148],{"class":98},[92,41644,320],{"class":151},[92,41646,109],{"class":102},[92,41648,41649],{"class":94,"line":1607},[92,41650,41651],{"class":161},"        # 路线3：定义1*1卷积和5*5\n",[92,41653,41654,41656,41659,41661,41663,41665,41667,41669,41671,41673,41676,41678,41680,41682,41684,41686],{"class":94,"line":1621},[92,41655,30827],{"class":151},[92,41657,41658],{"class":102},".p3_1",[92,41660,148],{"class":98},[92,41662,30835],{"class":102},[92,41664,30838],{"class":5196},[92,41666,148],{"class":98},[92,41668,41542],{"class":102},[92,41670,30847],{"class":5196},[92,41672,148],{"class":98},[92,41674,41675],{"class":102},"c3[",[92,41677,294],{"class":151},[92,41679,41591],{"class":102},[92,41681,30856],{"class":5196},[92,41683,148],{"class":98},[92,41685,320],{"class":151},[92,41687,109],{"class":102},[92,41689,41690,41692,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733],{"class":94,"line":1626},[92,41691,30827],{"class":151},[92,41693,41694],{"class":102},".p3_2",[92,41696,148],{"class":98},[92,41698,30835],{"class":102},[92,41700,30838],{"class":5196},[92,41702,148],{"class":98},[92,41704,41675],{"class":102},[92,41706,294],{"class":151},[92,41708,41591],{"class":102},[92,41710,30847],{"class":5196},[92,41712,148],{"class":98},[92,41714,41675],{"class":102},[92,41716,320],{"class":151},[92,41718,41591],{"class":102},[92,41720,30856],{"class":5196},[92,41722,148],{"class":98},[92,41724,422],{"class":151},[92,41726,481],{"class":102},[92,41728,30865],{"class":5196},[92,41730,148],{"class":98},[92,41732,180],{"class":151},[92,41734,109],{"class":102},[92,41736,41737],{"class":94,"line":1632},[92,41738,41739],{"class":161},"        # 路线4：定义3*3最大池化和1*1卷积\n",[92,41741,41742],{"class":94,"line":1653},[92,41743,41744],{"class":161},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[92,41746,41747,41749,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778],{"class":94,"line":1658},[92,41748,30827],{"class":151},[92,41750,41751],{"class":102},".p4_1",[92,41753,148],{"class":98},[92,41755,34811],{"class":102},[92,41757,30856],{"class":5196},[92,41759,148],{"class":98},[92,41761,174],{"class":151},[92,41763,481],{"class":102},[92,41765,30911],{"class":5196},[92,41767,148],{"class":98},[92,41769,320],{"class":151},[92,41771,481],{"class":102},[92,41773,30865],{"class":5196},[92,41775,148],{"class":98},[92,41777,320],{"class":151},[92,41779,109],{"class":102},[92,41781,41782,41784,41787,41789,41791,41793,41795,41797,41799,41801,41804,41806,41808,41810],{"class":94,"line":1672},[92,41783,30827],{"class":151},[92,41785,41786],{"class":102},".p4_2",[92,41788,148],{"class":98},[92,41790,30835],{"class":102},[92,41792,30838],{"class":5196},[92,41794,148],{"class":98},[92,41796,41542],{"class":102},[92,41798,30847],{"class":5196},[92,41800,148],{"class":98},[92,41802,41803],{"class":102},"c4,",[92,41805,30856],{"class":5196},[92,41807,148],{"class":98},[92,41809,320],{"class":151},[92,41811,109],{"class":102},[92,41813,41814],{"class":94,"line":1677},[92,41815,2379],{"emptyLinePlaceholder":17},[92,41817,41818,41820,41822],{"class":94,"line":1706},[92,41819,30783],{"class":98},[92,41821,31075],{"class":1942},[92,41823,31078],{"class":102},[92,41825,41826,41829,41831,41833,41835,41837],{"class":94,"line":1711},[92,41827,41828],{"class":102},"        p1",[92,41830,148],{"class":98},[92,41832,30805],{"class":151},[92,41834,35166],{"class":102},[92,41836,30805],{"class":151},[92,41838,41839],{"class":102},".p1_1(x))\n",[92,41841,41842,41844,41846,41848,41850,41852,41855,41857,41859,41861],{"class":94,"line":1728},[92,41843,7065],{"class":102},[92,41845,148],{"class":98},[92,41847,30805],{"class":151},[92,41849,35166],{"class":102},[92,41851,30805],{"class":151},[92,41853,41854],{"class":102},".p2_2(",[92,41856,30805],{"class":151},[92,41858,35166],{"class":102},[92,41860,30805],{"class":151},[92,41862,41863],{"class":102},".p2_1(x))))\n",[92,41865,41866,41869,41871,41873,41875,41877,41880,41882,41884,41886],{"class":94,"line":1733},[92,41867,41868],{"class":102},"        p3",[92,41870,148],{"class":98},[92,41872,30805],{"class":151},[92,41874,35166],{"class":102},[92,41876,30805],{"class":151},[92,41878,41879],{"class":102},".p3_2(",[92,41881,30805],{"class":151},[92,41883,35166],{"class":102},[92,41885,30805],{"class":151},[92,41887,41888],{"class":102},".p3_1(x))))\n",[92,41890,41891,41894,41896,41898,41900,41902,41905,41907],{"class":94,"line":1738},[92,41892,41893],{"class":102},"        p4",[92,41895,148],{"class":98},[92,41897,30805],{"class":151},[92,41899,35166],{"class":102},[92,41901,30805],{"class":151},[92,41903,41904],{"class":102},".p4_2(",[92,41906,30805],{"class":151},[92,41908,41909],{"class":102},".p4_1(x)))\n",[92,41911,41912],{"class":94,"line":1743},[92,41913,41914],{"class":161},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[92,41916,41917,41919,41922,41924,41926,41928],{"class":94,"line":1757},[92,41918,14732],{"class":98},[92,41920,41921],{"class":102}," torch.cat((p1,p2,p3,p4),",[92,41923,32667],{"class":5196},[92,41925,148],{"class":98},[92,41927,320],{"class":151},[92,41929,109],{"class":102},[92,41931,41932],{"class":94,"line":1762},[92,41933,2379],{"emptyLinePlaceholder":17},[92,41935,41936],{"class":94,"line":2556},[92,41937,2379],{"emptyLinePlaceholder":17},[92,41939,41940],{"class":94,"line":2570},[92,41941,41942],{"class":161},"# 搭建GoogLeNet网络\n",[92,41944,41945,41947,41950,41952,41954,41956,41958],{"class":94,"line":2578},[92,41946,14674],{"class":98},[92,41948,41949],{"class":1942}," GoogLeNet",[92,41951,103],{"class":102},[92,41953,30760],{"class":1942},[92,41955,661],{"class":102},[92,41957,30765],{"class":1942},[92,41959,30768],{"class":102},[92,41961,41962],{"class":94,"line":2583},[92,41963,41964],{"class":161},"    # 必须把Inception导入到里边\n",[92,41966,41967,41969,41971],{"class":94,"line":2589},[92,41968,30783],{"class":98},[92,41970,30786],{"class":151},[92,41972,41973],{"class":102},"(self,Inception):\n",[92,41975,41976,41978,41981,41983,41985,41987],{"class":94,"line":2595},[92,41977,30799],{"class":151},[92,41979,41980],{"class":102},"(GoogLeNet,",[92,41982,30805],{"class":151},[92,41984,30808],{"class":102},[92,41986,30811],{"class":151},[92,41988,1955],{"class":102},[92,41990,41991,41993,41996,41998],{"class":94,"line":2600},[92,41992,30827],{"class":151},[92,41994,41995],{"class":102},".b1",[92,41997,148],{"class":98},[92,41999,37991],{"class":102},[92,42001,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032,42034,42036,42038,42040,42042],{"class":94,"line":7928},[92,42003,37996],{"class":102},[92,42005,30838],{"class":5196},[92,42007,148],{"class":98},[92,42009,320],{"class":151},[92,42011,481],{"class":102},[92,42013,30847],{"class":5196},[92,42015,148],{"class":98},[92,42017,306],{"class":151},[92,42019,481],{"class":102},[92,42021,30856],{"class":5196},[92,42023,148],{"class":98},[92,42025,472],{"class":151},[92,42027,481],{"class":102},[92,42029,30911],{"class":5196},[92,42031,148],{"class":98},[92,42033,180],{"class":151},[92,42035,481],{"class":102},[92,42037,30865],{"class":5196},[92,42039,148],{"class":98},[92,42041,174],{"class":151},[92,42043,38029],{"class":102},[92,42045,42046],{"class":94,"line":7952},[92,42047,38034],{"class":102},[92,42049,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074],{"class":94,"line":7957},[92,42051,38079],{"class":102},[92,42053,30856],{"class":5196},[92,42055,148],{"class":98},[92,42057,174],{"class":151},[92,42059,481],{"class":102},[92,42061,30911],{"class":5196},[92,42063,148],{"class":98},[92,42065,180],{"class":151},[92,42067,481],{"class":102},[92,42069,30865],{"class":5196},[92,42071,148],{"class":98},[92,42073,320],{"class":151},[92,42075,109],{"class":102},[92,42077,42078],{"class":94,"line":7963},[92,42079,38108],{"class":102},[92,42081,42082,42084,42087,42089],{"class":94,"line":7990},[92,42083,30827],{"class":151},[92,42085,42086],{"class":102},".b2",[92,42088,148],{"class":98},[92,42090,37991],{"class":102},[92,42092,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117],{"class":94,"line":7995},[92,42094,37996],{"class":102},[92,42096,30838],{"class":5196},[92,42098,148],{"class":98},[92,42100,306],{"class":151},[92,42102,481],{"class":102},[92,42104,30847],{"class":5196},[92,42106,148],{"class":98},[92,42108,306],{"class":151},[92,42110,481],{"class":102},[92,42112,30856],{"class":5196},[92,42114,148],{"class":98},[92,42116,320],{"class":151},[92,42118,38029],{"class":102},[92,42120,42121],{"class":94,"line":8001},[92,42122,38034],{"class":102},[92,42124,42125,42127,42129,42131,42133,42135,42137,42139,42142,42144,42146,42148,42150,42152,42154,42156,42158],{"class":94,"line":8013},[92,42126,37996],{"class":102},[92,42128,30838],{"class":5196},[92,42130,148],{"class":98},[92,42132,306],{"class":151},[92,42134,481],{"class":102},[92,42136,30847],{"class":5196},[92,42138,148],{"class":98},[92,42140,42141],{"class":151},"192",[92,42143,481],{"class":102},[92,42145,30856],{"class":5196},[92,42147,148],{"class":98},[92,42149,174],{"class":151},[92,42151,481],{"class":102},[92,42153,30865],{"class":5196},[92,42155,148],{"class":98},[92,42157,320],{"class":151},[92,42159,38029],{"class":102},[92,42161,42162],{"class":94,"line":8025},[92,42163,38034],{"class":102},[92,42165,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190],{"class":94,"line":8037},[92,42167,38079],{"class":102},[92,42169,30856],{"class":5196},[92,42171,148],{"class":98},[92,42173,174],{"class":151},[92,42175,481],{"class":102},[92,42177,30911],{"class":5196},[92,42179,148],{"class":98},[92,42181,180],{"class":151},[92,42183,481],{"class":102},[92,42185,30865],{"class":5196},[92,42187,148],{"class":98},[92,42189,320],{"class":151},[92,42191,109],{"class":102},[92,42193,42194],{"class":94,"line":9696},[92,42195,38108],{"class":102},[92,42197,42198,42200,42203,42205],{"class":94,"line":9721},[92,42199,30827],{"class":151},[92,42201,42202],{"class":102},".b3",[92,42204,148],{"class":98},[92,42206,37991],{"class":102},[92,42208,42209,42212,42214,42216,42218,42221,42223,42225,42227,42230,42232,42234,42236,42239,42241],{"class":94,"line":9744},[92,42210,42211],{"class":102},"            Inception(",[92,42213,42141],{"class":151},[92,42215,481],{"class":102},[92,42217,306],{"class":151},[92,42219,42220],{"class":102},",(",[92,42222,312],{"class":151},[92,42224,481],{"class":102},[92,42226,32052],{"class":151},[92,42228,42229],{"class":102},"),(",[92,42231,704],{"class":151},[92,42233,481],{"class":102},[92,42235,300],{"class":151},[92,42237,42238],{"class":102},"),",[92,42240,300],{"class":151},[92,42242,38029],{"class":102},[92,42244,42245,42247,42249,42251,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273],{"class":94,"line":9768},[92,42246,42211],{"class":102},[92,42248,34852],{"class":151},[92,42250,481],{"class":102},[92,42252,32052],{"class":151},[92,42254,42220],{"class":102},[92,42256,32052],{"class":151},[92,42258,481],{"class":102},[92,42260,42141],{"class":151},[92,42262,42229],{"class":102},[92,42264,300],{"class":151},[92,42266,481],{"class":102},[92,42268,312],{"class":151},[92,42270,42238],{"class":102},[92,42272,306],{"class":151},[92,42274,38029],{"class":102},[92,42276,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299,42301],{"class":94,"line":9773},[92,42278,38079],{"class":102},[92,42280,30856],{"class":5196},[92,42282,148],{"class":98},[92,42284,174],{"class":151},[92,42286,481],{"class":102},[92,42288,30911],{"class":5196},[92,42290,148],{"class":98},[92,42292,180],{"class":151},[92,42294,481],{"class":102},[92,42296,30865],{"class":5196},[92,42298,148],{"class":98},[92,42300,320],{"class":151},[92,42302,109],{"class":102},[92,42304,42305],{"class":94,"line":9778},[92,42306,38108],{"class":102},[92,42308,42309,42311,42314,42316],{"class":94,"line":9783},[92,42310,30827],{"class":151},[92,42312,42313],{"class":102},".b4",[92,42315,148],{"class":98},[92,42317,37991],{"class":102},[92,42319,42320,42322,42325,42327,42329,42331,42333,42335,42338,42340,42342,42344,42346,42348,42350],{"class":94,"line":9792},[92,42321,42211],{"class":102},[92,42323,42324],{"class":151},"480",[92,42326,481],{"class":102},[92,42328,42141],{"class":151},[92,42330,42220],{"class":102},[92,42332,312],{"class":151},[92,42334,481],{"class":102},[92,42336,42337],{"class":151},"208",[92,42339,42229],{"class":102},[92,42341,704],{"class":151},[92,42343,481],{"class":102},[92,42345,710],{"class":151},[92,42347,42238],{"class":102},[92,42349,306],{"class":151},[92,42351,38029],{"class":102},[92,42353,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382],{"class":94,"line":9797},[92,42355,42211],{"class":102},[92,42357,38439],{"class":151},[92,42359,481],{"class":102},[92,42361,21028],{"class":151},[92,42363,42220],{"class":102},[92,42365,721],{"class":151},[92,42367,481],{"class":102},[92,42369,31483],{"class":151},[92,42371,42229],{"class":102},[92,42373,903],{"class":151},[92,42375,481],{"class":102},[92,42377,306],{"class":151},[92,42379,42238],{"class":102},[92,42381,306],{"class":151},[92,42383,38029],{"class":102},[92,42385,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414],{"class":94,"line":9803},[92,42387,42211],{"class":102},[92,42389,38439],{"class":151},[92,42391,481],{"class":102},[92,42393,32052],{"class":151},[92,42395,42220],{"class":102},[92,42397,32052],{"class":151},[92,42399,481],{"class":102},[92,42401,34852],{"class":151},[92,42403,42229],{"class":102},[92,42405,903],{"class":151},[92,42407,481],{"class":102},[92,42409,306],{"class":151},[92,42411,42238],{"class":102},[92,42413,306],{"class":151},[92,42415,38029],{"class":102},[92,42417,42418,42420,42422,42424,42426,42428,42430,42432,42435,42437,42439,42441,42443,42445,42447],{"class":94,"line":9824},[92,42419,42211],{"class":102},[92,42421,38439],{"class":151},[92,42423,481],{"class":102},[92,42425,721],{"class":151},[92,42427,42220],{"class":102},[92,42429,32052],{"class":151},[92,42431,481],{"class":102},[92,42433,42434],{"class":151},"288",[92,42436,42229],{"class":102},[92,42438,300],{"class":151},[92,42440,481],{"class":102},[92,42442,306],{"class":151},[92,42444,42238],{"class":102},[92,42446,306],{"class":151},[92,42448,38029],{"class":102},[92,42450,42451,42453,42456,42458,42460,42462,42464,42466,42469,42471,42473,42475,42477,42479,42481],{"class":94,"line":9830},[92,42452,42211],{"class":102},[92,42454,42455],{"class":151},"528",[92,42457,481],{"class":102},[92,42459,34852],{"class":151},[92,42461,42220],{"class":102},[92,42463,21028],{"class":151},[92,42465,481],{"class":102},[92,42467,42468],{"class":151},"320",[92,42470,42229],{"class":102},[92,42472,300],{"class":151},[92,42474,481],{"class":102},[92,42476,32052],{"class":151},[92,42478,42238],{"class":102},[92,42480,32052],{"class":151},[92,42482,38029],{"class":102},[92,42484,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509],{"class":94,"line":9844},[92,42486,38079],{"class":102},[92,42488,30856],{"class":5196},[92,42490,148],{"class":98},[92,42492,174],{"class":151},[92,42494,481],{"class":102},[92,42496,30911],{"class":5196},[92,42498,148],{"class":98},[92,42500,180],{"class":151},[92,42502,481],{"class":102},[92,42504,30865],{"class":5196},[92,42506,148],{"class":98},[92,42508,320],{"class":151},[92,42510,109],{"class":102},[92,42512,42513],{"class":94,"line":9850},[92,42514,38108],{"class":102},[92,42516,42517,42519,42522,42524],{"class":94,"line":9877},[92,42518,30827],{"class":151},[92,42520,42521],{"class":102},".b5",[92,42523,148],{"class":98},[92,42525,37991],{"class":102},[92,42527,42528,42530,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555,42557],{"class":94,"line":9886},[92,42529,42211],{"class":102},[92,42531,42532],{"class":151},"832",[92,42534,481],{"class":102},[92,42536,34852],{"class":151},[92,42538,42220],{"class":102},[92,42540,21028],{"class":151},[92,42542,481],{"class":102},[92,42544,42468],{"class":151},[92,42546,42229],{"class":102},[92,42548,300],{"class":151},[92,42550,481],{"class":102},[92,42552,32052],{"class":151},[92,42554,42238],{"class":102},[92,42556,32052],{"class":151},[92,42558,38029],{"class":102},[92,42560,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589],{"class":94,"line":9892},[92,42562,42211],{"class":102},[92,42564,42532],{"class":151},[92,42566,481],{"class":102},[92,42568,34922],{"class":151},[92,42570,42220],{"class":102},[92,42572,42141],{"class":151},[92,42574,481],{"class":102},[92,42576,34922],{"class":151},[92,42578,42229],{"class":102},[92,42580,710],{"class":151},[92,42582,481],{"class":102},[92,42584,32052],{"class":151},[92,42586,42238],{"class":102},[92,42588,32052],{"class":151},[92,42590,38029],{"class":102},[92,42592,42593,42596,42598,42600,42602],{"class":94,"line":9900},[92,42594,42595],{"class":102},"            nn.AdaptiveAvgPool2d((",[92,42597,320],{"class":151},[92,42599,481],{"class":102},[92,42601,320],{"class":151},[92,42603,42604],{"class":102},")),\n",[92,42606,42607],{"class":94,"line":9905},[92,42608,38772],{"class":102},[92,42610,42611,42613,42616,42618,42620],{"class":94,"line":16584},[92,42612,38777],{"class":102},[92,42614,42615],{"class":151},"1024",[92,42617,481],{"class":102},[92,42619,549],{"class":151},[92,42621,109],{"class":102},[92,42623,42624],{"class":94,"line":16590},[92,42625,38108],{"class":102},[92,42627,42628],{"class":94,"line":16613},[92,42629,42630],{"class":161},"        # 对模型参数初始化\n",[92,42632,42633,42635,42637,42639,42641],{"class":94,"line":16619},[92,42634,3382],{"class":98},[92,42636,38850],{"class":102},[92,42638,26025],{"class":98},[92,42640,38855],{"class":151},[92,42642,38858],{"class":102},[92,42644,42645,42647,42649],{"class":94,"line":16642},[92,42646,4621],{"class":98},[92,42648,38870],{"class":151},[92,42650,38873],{"class":102},[92,42652,42653,42655,42658,42660,42663,42665,42667,42669,42671],{"class":94,"line":16656},[92,42654,38883],{"class":102},[92,42656,42657],{"class":5196},"mode",[92,42659,148],{"class":98},[92,42661,42662],{"class":207},"'fan_out'",[92,42664,481],{"class":102},[92,42666,38886],{"class":5196},[92,42668,148],{"class":98},[92,42670,38891],{"class":207},[92,42672,109],{"class":102},[92,42674,42675],{"class":94,"line":16676},[92,42676,42677],{"class":161},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[92,42679,42680],{"class":94,"line":16682},[92,42681,42682],{"class":161},"                # ② mode = 'fan_out'决定使用的fan值：\n",[92,42684,42685],{"class":94,"line":16693},[92,42686,42687],{"class":161},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[92,42689,42690],{"class":94,"line":16716},[92,42691,42692],{"class":161},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[92,42694,42695],{"class":94,"line":16738},[92,42696,42697],{"class":161},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[92,42699,42700],{"class":94,"line":16743},[92,42701,42702],{"class":161},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[92,42704,42705,42707,42709,42711,42713,42715],{"class":94,"line":16749},[92,42706,38903],{"class":98},[92,42708,38906],{"class":102},[92,42710,38909],{"class":98},[92,42712,38912],{"class":98},[92,42714,38915],{"class":151},[92,42716,3718],{"class":102},[92,42718,42719,42721,42723],{"class":94,"line":16763},[92,42720,38927],{"class":102},[92,42722,294],{"class":151},[92,42724,109],{"class":102},[92,42726,42727,42730,42732],{"class":94,"line":16776},[92,42728,42729],{"class":98},"                elif",[92,42731,38870],{"class":151},[92,42733,38946],{"class":102},[92,42735,42736,42739,42741,42743,42745],{"class":94,"line":16781},[92,42737,42738],{"class":102},"                    nn.init.normal_(m.weight,",[92,42740,294],{"class":151},[92,42742,481],{"class":102},[92,42744,38968],{"class":151},[92,42746,109],{"class":102},[92,42748,42749,42752,42754,42756,42758,42760],{"class":94,"line":16795},[92,42750,42751],{"class":98},"                    if",[92,42753,38906],{"class":102},[92,42755,38909],{"class":98},[92,42757,38912],{"class":98},[92,42759,38915],{"class":151},[92,42761,3718],{"class":102},[92,42763,42764,42767,42769],{"class":94,"line":16800},[92,42765,42766],{"class":102},"                        nn.init.constant_(m.bias,",[92,42768,294],{"class":151},[92,42770,109],{"class":102},[92,42772,42773],{"class":94,"line":16806},[92,42774,35147],{"class":161},[92,42776,42777,42779,42781],{"class":94,"line":16811},[92,42778,30783],{"class":98},[92,42780,31075],{"class":1942},[92,42782,31078],{"class":102},[92,42784,42785,42787,42789,42791],{"class":94,"line":16825},[92,42786,31083],{"class":102},[92,42788,148],{"class":98},[92,42790,30805],{"class":151},[92,42792,42793],{"class":102},".b1(x)\n",[92,42795,42796,42798,42800,42802],{"class":94,"line":16830},[92,42797,31083],{"class":102},[92,42799,148],{"class":98},[92,42801,30805],{"class":151},[92,42803,42804],{"class":102},".b2(x)\n",[92,42806,42807,42809,42811,42813],{"class":94,"line":16835},[92,42808,31083],{"class":102},[92,42810,148],{"class":98},[92,42812,30805],{"class":151},[92,42814,42815],{"class":102},".b3(x)\n",[92,42817,42818,42820,42822,42824],{"class":94,"line":16849},[92,42819,31083],{"class":102},[92,42821,148],{"class":98},[92,42823,30805],{"class":151},[92,42825,42826],{"class":102},".b4(x)\n",[92,42828,42829,42831,42833,42835],{"class":94,"line":16861},[92,42830,31083],{"class":102},[92,42832,148],{"class":98},[92,42834,30805],{"class":151},[92,42836,42837],{"class":102},".b5(x)\n",[92,42839,42840,42842],{"class":94,"line":16866},[92,42841,14732],{"class":98},[92,42843,31191],{"class":102},[92,42845,42846],{"class":94,"line":16879},[92,42847,2379],{"emptyLinePlaceholder":17},[92,42849,42850],{"class":94,"line":16884},[92,42851,42852],{"class":161},"# 模型展示\n",[92,42854,42855,42857,42859,42861,42863],{"class":94,"line":16889},[92,42856,1510],{"class":98},[92,42858,31202],{"class":151},[92,42860,2928],{"class":98},[92,42862,31207],{"class":207},[92,42864,3718],{"class":102},[92,42866,42867,42869,42871,42873,42875,42877,42879,42881,42883],{"class":94,"line":16894},[92,42868,31219],{"class":102},[92,42870,148],{"class":98},[92,42872,30433],{"class":102},[92,42874,31226],{"class":207},[92,42876,1683],{"class":98},[92,42878,31231],{"class":102},[92,42880,1680],{"class":98},[92,42882,30458],{"class":207},[92,42884,109],{"class":102},[92,42886,42887,42889,42891],{"class":94,"line":16907},[92,42888,31271],{"class":102},[92,42890,148],{"class":98},[92,42892,42893],{"class":102},"GoogLeNet(Inception).to(device)\n",[92,42895,42896,42898,42900,42902,42904,42906,42908,42910],{"class":94,"line":16912},[92,42897,31281],{"class":151},[92,42899,31284],{"class":102},[92,42901,320],{"class":151},[92,42903,481],{"class":102},[92,42905,31483],{"class":151},[92,42907,481],{"class":102},[92,42909,31483],{"class":151},[92,42911,31297],{"class":102},[46,42913,42914],{"start":11},[49,42915,39165],{},[83,42917,42919],{"className":30360,"code":42918,"language":30362,"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,42920,42921,42927,42933,42943,42949,42959,42969,42979,42989,42999,43003,43014,43024,43028,43032,43036,43044,43056,43066,43082,43092,43124,43138,43148,43158,43162,43172,43186,43196,43206,43216,43222,43226,43230,43234,43238,43242,43250,43270,43274,43278,43282,43286,43290,43306,43310,43314,43322,43326,43330,43338,43342,43346,43350,43358,43362,43366,43370,43374,43382,43386,43394,43398,43406,43410,43418,43422,43430,43434,43438,43446,43450,43454,43458,43470,43494,43508,43512,43516,43520,43528,43532,43540,43544,43552,43556,43564,43568,43576,43580,43588,43592,43604,43608,43616,43620,43628,43632,43636,43640,43644,43652,43656,43672,43676,43684,43688,43692,43696,43700,43704,43708,43712,43728,43732,43744,43748,43760,43764,43776,43780,43788,43792,43800,43804,43808,43812,43818,43822,43830,43834,43850,43854,43862,43866,43882,43894,43898,43910,43914,43918,43926,43930,43934,43942,43946,43954,43958,43966,43970,43974,44016,44058,44062,44066,44082,44086,44102,44106,44110,44118,44122,44126,44138,44176,44180,44184,44192,44196,44210,44220,44226,44232,44238,44244,44248,44252,44258,44262,44266,44274,44278,44296,44300,44304,44308,44324,44328,44332,44336,44340,44344,44364,44384,44388,44392,44396,44404,44412,44416,44432,44452,44472,44476,44480,44488,44496,44500,44504,44508,44520,44524,44534,44542,44559],{"__ignoreMap":10},[92,42922,42923,42925],{"class":94,"line":95},[92,42924,30374],{"class":98},[92,42926,31804],{"class":102},[92,42928,42929,42931],{"class":94,"line":11},[92,42930,30374],{"class":98},[92,42932,31811],{"class":102},[92,42934,42935,42937,42939,42941],{"class":94,"line":1158},[92,42936,30374],{"class":98},[92,42938,31822],{"class":102},[92,42940,31365],{"class":98},[92,42942,31827],{"class":102},[92,42944,42945,42947],{"class":94,"line":1173},[92,42946,30374],{"class":98},[92,42948,30377],{"class":102},[92,42950,42951,42953,42955,42957],{"class":94,"line":1179},[92,42952,30719],{"class":98},[92,42954,31397],{"class":102},[92,42956,30374],{"class":98},[92,42958,31844],{"class":102},[92,42960,42961,42963,42965,42967],{"class":94,"line":1193},[92,42962,30719],{"class":98},[92,42964,31350],{"class":102},[92,42966,30374],{"class":98},[92,42968,31355],{"class":102},[92,42970,42971,42973,42975,42977],{"class":94,"line":1199},[92,42972,30719],{"class":98},[92,42974,31380],{"class":102},[92,42976,30374],{"class":98},[92,42978,31385],{"class":102},[92,42980,42981,42983,42985,42987],{"class":94,"line":1290},[92,42982,30374],{"class":98},[92,42984,31397],{"class":102},[92,42986,31365],{"class":98},[92,42988,31402],{"class":102},[92,42990,42991,42993,42995,42997],{"class":94,"line":1296},[92,42992,30374],{"class":98},[92,42994,31414],{"class":102},[92,42996,31365],{"class":98},[92,42998,31419],{"class":102},[92,43000,43001],{"class":94,"line":1308},[92,43002,31889],{"class":161},[92,43004,43005,43007,43009,43011],{"class":94,"line":1591},[92,43006,30719],{"class":98},[92,43008,31896],{"class":102},[92,43010,30374],{"class":98},[92,43012,43013],{"class":102}," GoogLeNet, Inception\n",[92,43015,43016,43018,43020,43022],{"class":94,"line":1596},[92,43017,30719],{"class":98},[92,43019,30722],{"class":102},[92,43021,30374],{"class":98},[92,43023,30727],{"class":102},[92,43025,43026],{"class":94,"line":1602},[92,43027,2379],{"emptyLinePlaceholder":17},[92,43029,43030],{"class":94,"line":1607},[92,43031,2379],{"emptyLinePlaceholder":17},[92,43033,43034],{"class":94,"line":1621},[92,43035,31924],{"class":161},[92,43037,43038,43040,43042],{"class":94,"line":1626},[92,43039,31929],{"class":98},[92,43041,31932],{"class":1942},[92,43043,31935],{"class":102},[92,43045,43046,43048,43050,43052,43054],{"class":94,"line":1632},[92,43047,31940],{"class":102},[92,43049,148],{"class":98},[92,43051,31437],{"class":102},[92,43053,31445],{"class":207},[92,43055,31448],{"class":102},[92,43057,43058,43060,43062,43064],{"class":94,"line":1653},[92,43059,31953],{"class":5196},[92,43061,148],{"class":98},[92,43063,31458],{"class":151},[92,43065,31448],{"class":102},[92,43067,43068,43070,43072,43074,43076,43078,43080],{"class":94,"line":1658},[92,43069,31964],{"class":5196},[92,43071,148],{"class":98},[92,43073,31475],{"class":102},[92,43075,31478],{"class":5196},[92,43077,148],{"class":98},[92,43079,35431],{"class":151},[92,43081,31486],{"class":102},[92,43083,43084,43086,43088,43090],{"class":94,"line":1672},[92,43085,31981],{"class":5196},[92,43087,148],{"class":98},[92,43089,31458],{"class":151},[92,43091,109],{"class":102},[92,43093,43094,43096,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122],{"class":94,"line":1677},[92,43095,31992],{"class":102},[92,43097,148],{"class":98},[92,43099,31997],{"class":102},[92,43101,32000],{"class":151},[92,43103,103],{"class":102},[92,43105,32005],{"class":151},[92,43107,558],{"class":98},[92,43109,7338],{"class":151},[92,43111,32012],{"class":102},[92,43113,32000],{"class":151},[92,43115,103],{"class":102},[92,43117,32019],{"class":151},[92,43119,558],{"class":98},[92,43121,7338],{"class":151},[92,43123,32026],{"class":102},[92,43125,43126,43128,43130,43132,43134,43136],{"class":94,"line":1706},[92,43127,32031],{"class":102},[92,43129,148],{"class":98},[92,43131,32036],{"class":102},[92,43133,31519],{"class":5196},[92,43135,148],{"class":98},[92,43137,31524],{"class":102},[92,43139,43140,43142,43144,43146],{"class":94,"line":1711},[92,43141,32047],{"class":5196},[92,43143,148],{"class":98},[92,43145,300],{"class":151},[92,43147,31448],{"class":102},[92,43149,43150,43152,43154,43156],{"class":94,"line":1728},[92,43151,32059],{"class":5196},[92,43153,148],{"class":98},[92,43155,31458],{"class":151},[92,43157,31448],{"class":102},[92,43159,43160],{"class":94,"line":1733},[92,43161,32070],{"class":161},[92,43163,43164,43166,43168,43170],{"class":94,"line":1738},[92,43165,32075],{"class":5196},[92,43167,148],{"class":98},[92,43169,498],{"class":151},[92,43171,109],{"class":102},[92,43173,43174,43176,43178,43180,43182,43184],{"class":94,"line":1743},[92,43175,32086],{"class":102},[92,43177,148],{"class":98},[92,43179,31516],{"class":102},[92,43181,31519],{"class":5196},[92,43183,148],{"class":98},[92,43185,32097],{"class":102},[92,43187,43188,43190,43192,43194],{"class":94,"line":1757},[92,43189,32102],{"class":5196},[92,43191,148],{"class":98},[92,43193,300],{"class":151},[92,43195,31448],{"class":102},[92,43197,43198,43200,43202,43204],{"class":94,"line":1762},[92,43199,32113],{"class":5196},[92,43201,148],{"class":98},[92,43203,31458],{"class":151},[92,43205,31448],{"class":102},[92,43207,43208,43210,43212,43214],{"class":94,"line":2556},[92,43209,32124],{"class":5196},[92,43211,148],{"class":98},[92,43213,498],{"class":151},[92,43215,109],{"class":102},[92,43217,43218,43220],{"class":94,"line":2570},[92,43219,4069],{"class":98},[92,43221,32137],{"class":102},[92,43223,43224],{"class":94,"line":2578},[92,43225,2379],{"emptyLinePlaceholder":17},[92,43227,43228],{"class":94,"line":2583},[92,43229,32146],{"class":161},[92,43231,43232],{"class":94,"line":2589},[92,43233,32151],{"class":161},[92,43235,43236],{"class":94,"line":2595},[92,43237,2379],{"emptyLinePlaceholder":17},[92,43239,43240],{"class":94,"line":2600},[92,43241,32160],{"class":161},[92,43243,43244,43246,43248],{"class":94,"line":7928},[92,43245,31929],{"class":98},[92,43247,32167],{"class":1942},[92,43249,32170],{"class":102},[92,43251,43252,43254,43256,43258,43260,43262,43264,43266,43268],{"class":94,"line":7952},[92,43253,31219],{"class":102},[92,43255,148],{"class":98},[92,43257,30433],{"class":102},[92,43259,31226],{"class":207},[92,43261,1683],{"class":98},[92,43263,31231],{"class":102},[92,43265,1680],{"class":98},[92,43267,32189],{"class":207},[92,43269,109],{"class":102},[92,43271,43272],{"class":94,"line":7957},[92,43273,2379],{"emptyLinePlaceholder":17},[92,43275,43276],{"class":94,"line":7963},[92,43277,2379],{"emptyLinePlaceholder":17},[92,43279,43280],{"class":94,"line":7990},[92,43281,32204],{"class":161},[92,43283,43284],{"class":94,"line":7995},[92,43285,32209],{"class":161},[92,43287,43288],{"class":94,"line":8001},[92,43289,32214],{"class":161},[92,43291,43292,43294,43296,43298,43300,43302,43304],{"class":94,"line":8013},[92,43293,32219],{"class":102},[92,43295,148],{"class":98},[92,43297,32224],{"class":102},[92,43299,32227],{"class":5196},[92,43301,148],{"class":98},[92,43303,32232],{"class":151},[92,43305,109],{"class":102},[92,43307,43308],{"class":94,"line":8025},[92,43309,2379],{"emptyLinePlaceholder":17},[92,43311,43312],{"class":94,"line":8037},[92,43313,32243],{"class":161},[92,43315,43316,43318,43320],{"class":94,"line":9696},[92,43317,32248],{"class":102},[92,43319,148],{"class":98},[92,43321,32253],{"class":102},[92,43323,43324],{"class":94,"line":9721},[92,43325,2379],{"emptyLinePlaceholder":17},[92,43327,43328],{"class":94,"line":9744},[92,43329,32262],{"class":161},[92,43331,43332,43334,43336],{"class":94,"line":9768},[92,43333,31271],{"class":102},[92,43335,148],{"class":98},[92,43337,32271],{"class":102},[92,43339,43340],{"class":94,"line":9773},[92,43341,32276],{"class":161},[92,43343,43344],{"class":94,"line":9778},[92,43345,32281],{"class":161},[92,43347,43348],{"class":94,"line":9783},[92,43349,32286],{"class":161},[92,43351,43352,43354,43356],{"class":94,"line":9792},[92,43353,32291],{"class":102},[92,43355,148],{"class":98},[92,43357,32296],{"class":102},[92,43359,43360],{"class":94,"line":9797},[92,43361,2379],{"emptyLinePlaceholder":17},[92,43363,43364],{"class":94,"line":9803},[92,43365,2379],{"emptyLinePlaceholder":17},[92,43367,43368],{"class":94,"line":9824},[92,43369,32309],{"class":161},[92,43371,43372],{"class":94,"line":9830},[92,43373,32314],{"class":161},[92,43375,43376,43378,43380],{"class":94,"line":9844},[92,43377,32319],{"class":102},[92,43379,148],{"class":98},[92,43381,32324],{"class":151},[92,43383,43384],{"class":94,"line":9850},[92,43385,32329],{"class":161},[92,43387,43388,43390,43392],{"class":94,"line":9877},[92,43389,32334],{"class":102},[92,43391,148],{"class":98},[92,43393,32339],{"class":102},[92,43395,43396],{"class":94,"line":9886},[92,43397,32344],{"class":161},[92,43399,43400,43402,43404],{"class":94,"line":9892},[92,43401,32349],{"class":102},[92,43403,148],{"class":98},[92,43405,32339],{"class":102},[92,43407,43408],{"class":94,"line":9900},[92,43409,32358],{"class":161},[92,43411,43412,43414,43416],{"class":94,"line":9905},[92,43413,32363],{"class":102},[92,43415,148],{"class":98},[92,43417,32339],{"class":102},[92,43419,43420],{"class":94,"line":16584},[92,43421,32372],{"class":161},[92,43423,43424,43426,43428],{"class":94,"line":16590},[92,43425,32377],{"class":102},[92,43427,148],{"class":98},[92,43429,32339],{"class":102},[92,43431,43432],{"class":94,"line":16613},[92,43433,2379],{"emptyLinePlaceholder":17},[92,43435,43436],{"class":94,"line":16619},[92,43437,32390],{"class":161},[92,43439,43440,43442,43444],{"class":94,"line":16642},[92,43441,32395],{"class":102},[92,43443,148],{"class":98},[92,43445,32400],{"class":102},[92,43447,43448],{"class":94,"line":16656},[92,43449,2379],{"emptyLinePlaceholder":17},[92,43451,43452],{"class":94,"line":16676},[92,43453,2379],{"emptyLinePlaceholder":17},[92,43455,43456],{"class":94,"line":16682},[92,43457,32413],{"class":161},[92,43459,43460,43462,43464,43466,43468],{"class":94,"line":16693},[92,43461,3180],{"class":98},[92,43463,32420],{"class":102},[92,43465,26025],{"class":98},[92,43467,32425],{"class":151},[92,43469,32428],{"class":102},[92,43471,43472,43474,43476,43478,43480,43482,43484,43486,43488,43490,43492],{"class":94,"line":16716},[92,43473,32433],{"class":151},[92,43475,103],{"class":102},[92,43477,32438],{"class":207},[92,43479,32441],{"class":151},[92,43481,687],{"class":207},[92,43483,32441],{"class":151},[92,43485,354],{"class":207},[92,43487,32450],{"class":102},[92,43489,635],{"class":98},[92,43491,320],{"class":151},[92,43493,30479],{"class":102},[92,43495,43496,43498,43500,43502,43504,43506],{"class":94,"line":16738},[92,43497,32433],{"class":151},[92,43499,103],{"class":102},[92,43501,32465],{"class":207},[92,43503,558],{"class":98},[92,43505,549],{"class":151},[92,43507,109],{"class":102},[92,43509,43510],{"class":94,"line":16743},[92,43511,2379],{"emptyLinePlaceholder":17},[92,43513,43514],{"class":94,"line":16749},[92,43515,32480],{"class":161},[92,43517,43518],{"class":94,"line":16763},[92,43519,32485],{"class":161},[92,43521,43522,43524,43526],{"class":94,"line":16776},[92,43523,32490],{"class":102},[92,43525,148],{"class":98},[92,43527,32324],{"class":151},[92,43529,43530],{"class":94,"line":16781},[92,43531,32499],{"class":161},[92,43533,43534,43536,43538],{"class":94,"line":16795},[92,43535,32504],{"class":102},[92,43537,148],{"class":98},[92,43539,3064],{"class":151},[92,43541,43542],{"class":94,"line":16800},[92,43543,32513],{"class":161},[92,43545,43546,43548,43550],{"class":94,"line":16806},[92,43547,32518],{"class":102},[92,43549,148],{"class":98},[92,43551,32324],{"class":151},[92,43553,43554],{"class":94,"line":16811},[92,43555,32527],{"class":161},[92,43557,43558,43560,43562],{"class":94,"line":16825},[92,43559,32532],{"class":102},[92,43561,148],{"class":98},[92,43563,3064],{"class":151},[92,43565,43566],{"class":94,"line":16830},[92,43567,32541],{"class":161},[92,43569,43570,43572,43574],{"class":94,"line":16835},[92,43571,32546],{"class":102},[92,43573,148],{"class":98},[92,43575,3064],{"class":151},[92,43577,43578],{"class":94,"line":16849},[92,43579,32555],{"class":161},[92,43581,43582,43584,43586],{"class":94,"line":16861},[92,43583,32560],{"class":102},[92,43585,148],{"class":98},[92,43587,3064],{"class":151},[92,43589,43590],{"class":94,"line":16866},[92,43591,32569],{"class":161},[92,43593,43594,43596,43598,43600,43602],{"class":94,"line":16879},[92,43595,3382],{"class":98},[92,43597,31583],{"class":102},[92,43599,26025],{"class":98},[92,43601,31588],{"class":151},[92,43603,32582],{"class":102},[92,43605,43606],{"class":94,"line":16884},[92,43607,32587],{"class":161},[92,43609,43610,43612,43614],{"class":94,"line":16889},[92,43611,32592],{"class":102},[92,43613,148],{"class":98},[92,43615,32597],{"class":102},[92,43617,43618],{"class":94,"line":16894},[92,43619,32602],{"class":161},[92,43621,43622,43624,43626],{"class":94,"line":16907},[92,43623,32607],{"class":102},[92,43625,148],{"class":98},[92,43627,32612],{"class":102},[92,43629,43630],{"class":94,"line":16912},[92,43631,32618],{"class":161},[92,43633,43634],{"class":94,"line":32615},[92,43635,32624],{"class":102},[92,43637,43638],{"class":94,"line":32621},[92,43639,32630],{"class":161},[92,43641,43642],{"class":94,"line":32627},[92,43643,32636],{"class":161},[92,43645,43646,43648,43650],{"class":94,"line":32633},[92,43647,32642],{"class":102},[92,43649,148],{"class":98},[92,43651,32647],{"class":102},[92,43653,43654],{"class":94,"line":32639},[92,43655,32653],{"class":161},[92,43657,43658,43660,43662,43664,43666,43668,43670],{"class":94,"line":32650},[92,43659,32659],{"class":102},[92,43661,148],{"class":98},[92,43663,32664],{"class":102},[92,43665,32667],{"class":5196},[92,43667,148],{"class":98},[92,43669,320],{"class":151},[92,43671,109],{"class":102},[92,43673,43674],{"class":94,"line":32656},[92,43675,32679],{"class":161},[92,43677,43678,43680,43682],{"class":94,"line":32676},[92,43679,32685],{"class":102},[92,43681,148],{"class":98},[92,43683,32690],{"class":102},[92,43685,43686],{"class":94,"line":32682},[92,43687,32696],{"class":161},[92,43689,43690],{"class":94,"line":32693},[92,43691,32702],{"class":102},[92,43693,43694],{"class":94,"line":32699},[92,43695,32708],{"class":161},[92,43697,43698],{"class":94,"line":32705},[92,43699,32714],{"class":102},[92,43701,43702],{"class":94,"line":32711},[92,43703,32720],{"class":161},[92,43705,43706],{"class":94,"line":32717},[92,43707,32726],{"class":102},[92,43709,43710],{"class":94,"line":32723},[92,43711,32732],{"class":161},[92,43713,43714,43716,43718,43720,43722,43724,43726],{"class":94,"line":32729},[92,43715,32738],{"class":102},[92,43717,9457],{"class":98},[92,43719,32743],{"class":102},[92,43721,558],{"class":98},[92,43723,32748],{"class":102},[92,43725,294],{"class":151},[92,43727,109],{"class":102},[92,43729,43730],{"class":94,"line":32735},[92,43731,32758],{"class":161},[92,43733,43734,43736,43738,43740,43742],{"class":94,"line":32755},[92,43735,32764],{"class":102},[92,43737,9457],{"class":98},[92,43739,32769],{"class":102},[92,43741,2928],{"class":98},[92,43743,32774],{"class":102},[92,43745,43746],{"class":94,"line":32761},[92,43747,32780],{"class":161},[92,43749,43750,43752,43754,43756,43758],{"class":94,"line":32777},[92,43751,32786],{"class":102},[92,43753,9457],{"class":98},[92,43755,32748],{"class":102},[92,43757,294],{"class":151},[92,43759,109],{"class":102},[92,43761,43762],{"class":94,"line":32783},[92,43763,32800],{"class":161},[92,43765,43766,43768,43770,43772,43774],{"class":94,"line":32797},[92,43767,3382],{"class":98},[92,43769,32808],{"class":102},[92,43771,26025],{"class":98},[92,43773,31588],{"class":151},[92,43775,32815],{"class":102},[92,43777,43778],{"class":94,"line":32803},[92,43779,32821],{"class":161},[92,43781,43782,43784,43786],{"class":94,"line":32818},[92,43783,32592],{"class":102},[92,43785,148],{"class":98},[92,43787,32597],{"class":102},[92,43789,43790],{"class":94,"line":32824},[92,43791,32836],{"class":161},[92,43793,43794,43796,43798],{"class":94,"line":32833},[92,43795,32607],{"class":102},[92,43797,148],{"class":98},[92,43799,32612],{"class":102},[92,43801,43802],{"class":94,"line":32839},[92,43803,32851],{"class":161},[92,43805,43806],{"class":94,"line":32848},[92,43807,32857],{"class":102},[92,43809,43810],{"class":94,"line":32854},[92,43811,36338],{"class":161},[92,43813,43814,43816],{"class":94,"line":32860},[92,43815,32863],{"class":98},[92,43817,32866],{"class":102},[92,43819,43820],{"class":94,"line":32869},[92,43821,32872],{"class":161},[92,43823,43824,43826,43828],{"class":94,"line":32875},[92,43825,36353],{"class":102},[92,43827,148],{"class":98},[92,43829,32647],{"class":102},[92,43831,43832],{"class":94,"line":32886},[92,43833,32889],{"class":161},[92,43835,43836,43838,43840,43842,43844,43846,43848],{"class":94,"line":32892},[92,43837,36366],{"class":102},[92,43839,148],{"class":98},[92,43841,32664],{"class":102},[92,43843,32667],{"class":5196},[92,43845,148],{"class":98},[92,43847,320],{"class":151},[92,43849,109],{"class":102},[92,43851,43852],{"class":94,"line":32911},[92,43853,32914],{"class":161},[92,43855,43856,43858,43860],{"class":94,"line":32917},[92,43857,36387],{"class":102},[92,43859,148],{"class":98},[92,43861,32690],{"class":102},[92,43863,43864],{"class":94,"line":32928},[92,43865,32931],{"class":161},[92,43867,43868,43870,43872,43874,43876,43878,43880],{"class":94,"line":32934},[92,43869,36400],{"class":102},[92,43871,9457],{"class":98},[92,43873,36405],{"class":102},[92,43875,558],{"class":98},[92,43877,32748],{"class":102},[92,43879,294],{"class":151},[92,43881,109],{"class":102},[92,43883,43884,43886,43888,43890,43892],{"class":94,"line":32954},[92,43885,36418],{"class":102},[92,43887,9457],{"class":98},[92,43889,32769],{"class":102},[92,43891,2928],{"class":98},[92,43893,32774],{"class":102},[92,43895,43896],{"class":94,"line":32970},[92,43897,36431],{"class":161},[92,43899,43900,43902,43904,43906,43908],{"class":94,"line":32976},[92,43901,36436],{"class":102},[92,43903,9457],{"class":98},[92,43905,32748],{"class":102},[92,43907,294],{"class":151},[92,43909,109],{"class":102},[92,43911,43912],{"class":94,"line":32990},[92,43913,32993],{"class":161},[92,43915,43916],{"class":94,"line":32996},[92,43917,32999],{"class":161},[92,43919,43920,43922,43924],{"class":94,"line":33002},[92,43921,33005],{"class":102},[92,43923,687],{"class":98},[92,43925,33010],{"class":102},[92,43927,43928],{"class":94,"line":33013},[92,43929,33016],{"class":161},[92,43931,43932],{"class":94,"line":33019},[92,43933,33022],{"class":161},[92,43935,43936,43938,43940],{"class":94,"line":33025},[92,43937,33028],{"class":102},[92,43939,687],{"class":98},[92,43941,33010],{"class":102},[92,43943,43944],{"class":94,"line":33035},[92,43945,33038],{"class":161},[92,43947,43948,43950,43952],{"class":94,"line":33041},[92,43949,33044],{"class":102},[92,43951,687],{"class":98},[92,43953,33049],{"class":102},[92,43955,43956],{"class":94,"line":33052},[92,43957,33055],{"class":161},[92,43959,43960,43962,43964],{"class":94,"line":33058},[92,43961,33061],{"class":102},[92,43963,687],{"class":98},[92,43965,33049],{"class":102},[92,43967,43968],{"class":94,"line":33068},[92,43969,2379],{"emptyLinePlaceholder":17},[92,43971,43972],{"class":94,"line":33073},[92,43973,33076],{"class":161},[92,43975,43976,43978,43980,43982,43984,43986,43988,43990,43992,43994,43996,43998,44000,44002,44004,44006,44008,44010,44012,44014],{"class":94,"line":33079},[92,43977,32433],{"class":151},[92,43979,103],{"class":102},[92,43981,3571],{"class":207},[92,43983,32441],{"class":151},[92,43985,33090],{"class":207},[92,43987,999],{"class":151},[92,43989,33095],{"class":98},[92,43991,1049],{"class":151},[92,43993,33100],{"class":207},[92,43995,999],{"class":151},[92,43997,33095],{"class":98},[92,43999,1049],{"class":151},[92,44001,3571],{"class":207},[92,44003,33111],{"class":102},[92,44005,635],{"class":98},[92,44007,320],{"class":151},[92,44009,33118],{"class":102},[92,44011,635],{"class":98},[92,44013,320],{"class":151},[92,44015,33125],{"class":102},[92,44017,44018,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038,44040,44042,44044,44046,44048,44050,44052,44054,44056],{"class":94,"line":33128},[92,44019,32433],{"class":151},[92,44021,103],{"class":102},[92,44023,3571],{"class":207},[92,44025,32441],{"class":151},[92,44027,33139],{"class":207},[92,44029,999],{"class":151},[92,44031,33095],{"class":98},[92,44033,1049],{"class":151},[92,44035,33148],{"class":207},[92,44037,999],{"class":151},[92,44039,33095],{"class":98},[92,44041,1049],{"class":151},[92,44043,3571],{"class":207},[92,44045,33159],{"class":102},[92,44047,635],{"class":98},[92,44049,320],{"class":151},[92,44051,33166],{"class":102},[92,44053,635],{"class":98},[92,44055,320],{"class":151},[92,44057,33125],{"class":102},[92,44059,44060],{"class":94,"line":33175},[92,44061,2379],{"emptyLinePlaceholder":17},[92,44063,44064],{"class":94,"line":33180},[92,44065,33183],{"class":161},[92,44067,44068,44070,44072,44074,44076,44078,44080],{"class":94,"line":33186},[92,44069,2476],{"class":98},[92,44071,33191],{"class":102},[92,44073,635],{"class":98},[92,44075,320],{"class":151},[92,44077,1043],{"class":102},[92,44079,1063],{"class":98},[92,44081,33202],{"class":102},[92,44083,44084],{"class":94,"line":33205},[92,44085,33208],{"class":161},[92,44087,44088,44090,44092,44094,44096,44098,44100],{"class":94,"line":33211},[92,44089,33214],{"class":102},[92,44091,142],{"class":151},[92,44093,148],{"class":98},[92,44095,33221],{"class":102},[92,44097,635],{"class":98},[92,44099,320],{"class":151},[92,44101,33228],{"class":102},[92,44103,44104],{"class":94,"line":33231},[92,44105,33234],{"class":161},[92,44107,44108],{"class":94,"line":33237},[92,44109,33240],{"class":161},[92,44111,44112,44114,44116],{"class":94,"line":33243},[92,44113,33246],{"class":102},[92,44115,148],{"class":98},[92,44117,32296],{"class":102},[92,44119,44120],{"class":94,"line":33253},[92,44121,2379],{"emptyLinePlaceholder":17},[92,44123,44124],{"class":94,"line":33258},[92,44125,33261],{"class":161},[92,44127,44128,44130,44132,44134,44136],{"class":94,"line":33264},[92,44129,33267],{"class":102},[92,44131,148],{"class":98},[92,44133,33272],{"class":102},[92,44135,635],{"class":98},[92,44137,33277],{"class":102},[92,44139,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174],{"class":94,"line":33280},[92,44141,32433],{"class":151},[92,44143,103],{"class":102},[92,44145,33287],{"class":207},[92,44147,999],{"class":151},[92,44149,33292],{"class":98},[92,44151,1049],{"class":151},[92,44153,647],{"class":207},[92,44155,999],{"class":151},[92,44157,33292],{"class":98},[92,44159,1049],{"class":151},[92,44161,33305],{"class":207},[92,44163,33308],{"class":102},[92,44165,33311],{"class":98},[92,44167,1010],{"class":151},[92,44169,33316],{"class":102},[92,44171,431],{"class":98},[92,44173,1010],{"class":151},[92,44175,30479],{"class":102},[92,44177,44178],{"class":94,"line":33325},[92,44179,36715],{"class":161},[92,44181,44182],{"class":94,"line":33331},[92,44183,36720],{"class":161},[92,44185,44186,44188,44190],{"class":94,"line":33337},[92,44187,36725],{"class":102},[92,44189,33349],{"class":207},[92,44191,109],{"class":102},[92,44193,44194],{"class":94,"line":33343},[92,44195,33369],{"class":161},[92,44197,44198,44200,44202,44204,44206,44208],{"class":94,"line":33354},[92,44199,33375],{"class":102},[92,44201,148],{"class":98},[92,44203,33380],{"class":102},[92,44205,33383],{"class":5196},[92,44207,148],{"class":98},[92,44209,1525],{"class":102},[92,44211,44212,44214,44216,44218],{"class":94,"line":33360},[92,44213,33393],{"class":207},[92,44215,962],{"class":102},[92,44217,33398],{"class":151},[92,44219,33401],{"class":102},[92,44221,44222,44224],{"class":94,"line":33366},[92,44223,33407],{"class":207},[92,44225,33410],{"class":102},[92,44227,44228,44230],{"class":94,"line":33372},[92,44229,33416],{"class":207},[92,44231,33419],{"class":102},[92,44233,44234,44236],{"class":94,"line":33390},[92,44235,33425],{"class":207},[92,44237,33428],{"class":102},[92,44239,44240,44242],{"class":94,"line":33404},[92,44241,33434],{"class":207},[92,44243,33437],{"class":102},[92,44245,44246],{"class":94,"line":33413},[92,44247,33443],{"class":102},[92,44249,44250],{"class":94,"line":33422},[92,44251,33449],{"class":161},[92,44253,44254,44256],{"class":94,"line":33431},[92,44255,4069],{"class":98},[92,44257,33457],{"class":102},[92,44259,44260],{"class":94,"line":33440},[92,44261,2379],{"emptyLinePlaceholder":17},[92,44263,44264],{"class":94,"line":33446},[92,44265,33468],{"class":161},[92,44267,44268,44270,44272],{"class":94,"line":33452},[92,44269,31929],{"class":98},[92,44271,33476],{"class":1942},[92,44273,33479],{"class":102},[92,44275,44276],{"class":94,"line":33460},[92,44277,33485],{"class":161},[92,44279,44280,44282,44284,44286,44288,44290,44292,44294],{"class":94,"line":33465},[92,44281,33491],{"class":102},[92,44283,31675],{"class":5196},[92,44285,148],{"class":98},[92,44287,103],{"class":102},[92,44289,601],{"class":151},[92,44291,481],{"class":102},[92,44293,396],{"class":151},[92,44295,30479],{"class":102},[92,44297,44298],{"class":94,"line":33471},[92,44299,33511],{"class":161},[92,44301,44302],{"class":94,"line":33482},[92,44303,33517],{"class":161},[92,44305,44306],{"class":94,"line":33488},[92,44307,33523],{"class":161},[92,44309,44310,44312,44314,44316,44318,44320,44322],{"class":94,"line":33508},[92,44311,31709],{"class":102},[92,44313,320],{"class":151},[92,44315,481],{"class":102},[92,44317,180],{"class":151},[92,44319,481],{"class":102},[92,44321,320],{"class":151},[92,44323,109],{"class":102},[92,44325,44326],{"class":94,"line":33514},[92,44327,33546],{"class":161},[92,44329,44330],{"class":94,"line":33520},[92,44331,33552],{"class":161},[92,44333,44334],{"class":94,"line":33526},[92,44335,33558],{"class":161},[92,44337,44338],{"class":94,"line":33543},[92,44339,33564],{"class":161},[92,44341,44342],{"class":94,"line":33549},[92,44343,33570],{"class":161},[92,44345,44346,44348,44350,44352,44354,44356,44358,44360,44362],{"class":94,"line":33555},[92,44347,33576],{"class":102},[92,44349,33579],{"class":207},[92,44351,33582],{"class":102},[92,44353,33585],{"class":207},[92,44355,481],{"class":102},[92,44357,33590],{"class":5196},[92,44359,148],{"class":98},[92,44361,33595],{"class":207},[92,44363,109],{"class":102},[92,44365,44366,44368,44370,44372,44374,44376,44378,44380,44382],{"class":94,"line":33561},[92,44367,33576],{"class":102},[92,44369,33579],{"class":207},[92,44371,33607],{"class":102},[92,44373,33610],{"class":207},[92,44375,481],{"class":102},[92,44377,33590],{"class":5196},[92,44379,148],{"class":98},[92,44381,33619],{"class":207},[92,44383,109],{"class":102},[92,44385,44386],{"class":94,"line":33567},[92,44387,33627],{"class":161},[92,44389,44390],{"class":94,"line":33573},[92,44391,33633],{"class":102},[92,44393,44394],{"class":94,"line":33600},[92,44395,33639],{"class":161},[92,44397,44398,44400,44402],{"class":94,"line":33624},[92,44399,33645],{"class":102},[92,44401,33648],{"class":207},[92,44403,109],{"class":102},[92,44405,44406,44408,44410],{"class":94,"line":33630},[92,44407,33656],{"class":102},[92,44409,33659],{"class":207},[92,44411,109],{"class":102},[92,44413,44414],{"class":94,"line":33636},[92,44415,33667],{"class":161},[92,44417,44418,44420,44422,44424,44426,44428,44430],{"class":94,"line":33642},[92,44419,31709],{"class":102},[92,44421,320],{"class":151},[92,44423,481],{"class":102},[92,44425,180],{"class":151},[92,44427,481],{"class":102},[92,44429,180],{"class":151},[92,44431,109],{"class":102},[92,44433,44434,44436,44438,44440,44442,44444,44446,44448,44450],{"class":94,"line":33653},[92,44435,33576],{"class":102},[92,44437,33579],{"class":207},[92,44439,33694],{"class":102},[92,44441,33585],{"class":207},[92,44443,481],{"class":102},[92,44445,33590],{"class":5196},[92,44447,148],{"class":98},[92,44449,33705],{"class":207},[92,44451,109],{"class":102},[92,44453,44454,44456,44458,44460,44462,44464,44466,44468,44470],{"class":94,"line":33664},[92,44455,33576],{"class":102},[92,44457,33579],{"class":207},[92,44459,33717],{"class":102},[92,44461,33610],{"class":207},[92,44463,481],{"class":102},[92,44465,33590],{"class":5196},[92,44467,148],{"class":98},[92,44469,33728],{"class":207},[92,44471,109],{"class":102},[92,44473,44474],{"class":94,"line":33670},[92,44475,33736],{"class":161},[92,44477,44478],{"class":94,"line":33687},[92,44479,33633],{"class":102},[92,44481,44482,44484,44486],{"class":94,"line":33710},[92,44483,33645],{"class":102},[92,44485,33579],{"class":207},[92,44487,109],{"class":102},[92,44489,44490,44492,44494],{"class":94,"line":33733},[92,44491,33656],{"class":102},[92,44493,33758],{"class":207},[92,44495,109],{"class":102},[92,44497,44498],{"class":94,"line":33739},[92,44499,33766],{"class":102},[92,44501,44502],{"class":94,"line":33744},[92,44503,2379],{"emptyLinePlaceholder":17},[92,44505,44506],{"class":94,"line":33753},[92,44507,33777],{"class":161},[92,44509,44510,44512,44514,44516,44518],{"class":94,"line":33763},[92,44511,1510],{"class":98},[92,44513,31202],{"class":151},[92,44515,2928],{"class":98},[92,44517,31207],{"class":207},[92,44519,3718],{"class":102},[92,44521,44522],{"class":94,"line":33769},[92,44523,33796],{"class":161},[92,44525,44526,44529,44531],{"class":94,"line":33774},[92,44527,44528],{"class":102},"    GoogLeNet",[92,44530,148],{"class":98},[92,44532,44533],{"class":102},"GoogLeNet(Inception)\n",[92,44535,44536,44538,44540],{"class":94,"line":33780},[92,44537,33813],{"class":102},[92,44539,148],{"class":98},[92,44541,33818],{"class":102},[92,44543,44544,44546,44548,44551,44553,44555,44557],{"class":94,"line":33793},[92,44545,33375],{"class":102},[92,44547,148],{"class":98},[92,44549,44550],{"class":102},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[92,44552,33831],{"class":5196},[92,44554,148],{"class":98},[92,44556,1054],{"class":151},[92,44558,109],{"class":102},[92,44560,44561],{"class":94,"line":33799},[92,44562,33843],{"class":102},[46,44564,44565],{"start":1158},[49,44566,40556],{},[83,44568,44570],{"className":30360,"code":44569,"language":30362,"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,44571,44572,44578,44588,44598,44602,44612,44623,44627,44631,44635,44643,44659,44669,44685,44695,44709,44713,44723,44733,44743,44749,44753,44757,44765,44769,44785,44793,44797,44801,44809,44817,44821,44825,44829,44833,44839,44843,44853,44861,44869,44873,44877,44881,44889,44893,44909,44913,44917,44921,44933,44937,44949,44953,44957,44969,44973,44983,44987,44991,45003,45007,45015,45019,45023,45031,45035,45043,45047,45051,45055,45059,45063,45079,45087,45091,45095,45143,45149,45153,45163,45171,45179,45183,45187,45191,45195,45203,45207,45223,45227,45235,45243],{"__ignoreMap":10},[92,44573,44574,44576],{"class":94,"line":95},[92,44575,30374],{"class":98},[92,44577,30377],{"class":102},[92,44579,44580,44582,44584,44586],{"class":94,"line":11},[92,44581,30374],{"class":98},[92,44583,31397],{"class":102},[92,44585,31365],{"class":98},[92,44587,31402],{"class":102},[92,44589,44590,44592,44594,44596],{"class":94,"line":1158},[92,44591,30719],{"class":98},[92,44593,31380],{"class":102},[92,44595,30374],{"class":98},[92,44597,31385],{"class":102},[92,44599,44600],{"class":94,"line":1173},[92,44601,33904],{"class":161},[92,44603,44604,44606,44608,44610],{"class":94,"line":1179},[92,44605,30719],{"class":98},[92,44607,31350],{"class":102},[92,44609,30374],{"class":98},[92,44611,31355],{"class":102},[92,44613,44614,44616,44618,44620],{"class":94,"line":1193},[92,44615,30719],{"class":98},[92,44617,31896],{"class":102},[92,44619,30374],{"class":98},[92,44621,44622],{"class":102}," GoogLeNet,Inception\n",[92,44624,44625],{"class":94,"line":1199},[92,44626,2379],{"emptyLinePlaceholder":17},[92,44628,44629],{"class":94,"line":1290},[92,44630,2379],{"emptyLinePlaceholder":17},[92,44632,44633],{"class":94,"line":1296},[92,44634,33933],{"class":161},[92,44636,44637,44639,44641],{"class":94,"line":1308},[92,44638,31929],{"class":98},[92,44640,33940],{"class":1942},[92,44642,31935],{"class":102},[92,44644,44645,44647,44649,44651,44653,44655,44657],{"class":94,"line":1591},[92,44646,33947],{"class":102},[92,44648,148],{"class":98},[92,44650,31437],{"class":102},[92,44652,31440],{"class":5196},[92,44654,148],{"class":98},[92,44656,31445],{"class":207},[92,44658,31448],{"class":102},[92,44660,44661,44663,44665,44667],{"class":94,"line":1596},[92,44662,33964],{"class":5196},[92,44664,148],{"class":98},[92,44666,33969],{"class":151},[92,44668,31448],{"class":102},[92,44670,44671,44673,44675,44677,44679,44681,44683],{"class":94,"line":1602},[92,44672,33976],{"class":5196},[92,44674,148],{"class":98},[92,44676,31475],{"class":102},[92,44678,31478],{"class":5196},[92,44680,148],{"class":98},[92,44682,35431],{"class":151},[92,44684,31486],{"class":102},[92,44686,44687,44689,44691,44693],{"class":94,"line":1607},[92,44688,33993],{"class":5196},[92,44690,148],{"class":98},[92,44692,31458],{"class":151},[92,44694,109],{"class":102},[92,44696,44697,44699,44701,44703,44705,44707],{"class":94,"line":1621},[92,44698,34004],{"class":102},[92,44700,148],{"class":98},[92,44702,31516],{"class":102},[92,44704,31519],{"class":5196},[92,44706,148],{"class":98},[92,44708,34015],{"class":102},[92,44710,44711],{"class":94,"line":1626},[92,44712,34020],{"class":161},[92,44714,44715,44717,44719,44721],{"class":94,"line":1632},[92,44716,34025],{"class":5196},[92,44718,148],{"class":98},[92,44720,320],{"class":151},[92,44722,31448],{"class":102},[92,44724,44725,44727,44729,44731],{"class":94,"line":1653},[92,44726,34036],{"class":5196},[92,44728,148],{"class":98},[92,44730,31458],{"class":151},[92,44732,31448],{"class":102},[92,44734,44735,44737,44739,44741],{"class":94,"line":1658},[92,44736,34047],{"class":5196},[92,44738,148],{"class":98},[92,44740,294],{"class":151},[92,44742,109],{"class":102},[92,44744,44745,44747],{"class":94,"line":1672},[92,44746,4069],{"class":98},[92,44748,34060],{"class":102},[92,44750,44751],{"class":94,"line":1677},[92,44752,2379],{"emptyLinePlaceholder":17},[92,44754,44755],{"class":94,"line":1706},[92,44756,34069],{"class":161},[92,44758,44759,44761,44763],{"class":94,"line":1711},[92,44760,31929],{"class":98},[92,44762,34076],{"class":1942},[92,44764,34079],{"class":102},[92,44766,44767],{"class":94,"line":1728},[92,44768,34084],{"class":161},[92,44770,44771,44773,44775,44777,44779,44781,44783],{"class":94,"line":1733},[92,44772,31219],{"class":102},[92,44774,148],{"class":98},[92,44776,31226],{"class":207},[92,44778,1683],{"class":98},[92,44780,31231],{"class":102},[92,44782,1680],{"class":98},[92,44784,34101],{"class":207},[92,44786,44787,44789,44791],{"class":94,"line":1738},[92,44788,31271],{"class":102},[92,44790,148],{"class":98},[92,44792,32271],{"class":102},[92,44794,44795],{"class":94,"line":1743},[92,44796,2379],{"emptyLinePlaceholder":17},[92,44798,44799],{"class":94,"line":1757},[92,44800,34118],{"class":161},[92,44802,44803,44805,44807],{"class":94,"line":1762},[92,44804,34123],{"class":102},[92,44806,148],{"class":98},[92,44808,32324],{"class":151},[92,44810,44811,44813,44815],{"class":94,"line":2556},[92,44812,34132],{"class":102},[92,44814,148],{"class":98},[92,44816,3064],{"class":151},[92,44818,44819],{"class":94,"line":2570},[92,44820,2379],{"emptyLinePlaceholder":17},[92,44822,44823],{"class":94,"line":2578},[92,44824,34145],{"class":161},[92,44826,44827],{"class":94,"line":2583},[92,44828,34150],{"class":161},[92,44830,44831],{"class":94,"line":2589},[92,44832,34155],{"class":161},[92,44834,44835,44837],{"class":94,"line":2595},[92,44836,34160],{"class":98},[92,44838,32866],{"class":102},[92,44840,44841],{"class":94,"line":2600},[92,44842,34167],{"class":161},[92,44844,44845,44847,44849,44851],{"class":94,"line":7928},[92,44846,3382],{"class":98},[92,44848,34174],{"class":102},[92,44850,26025],{"class":98},[92,44852,34179],{"class":102},[92,44854,44855,44857,44859],{"class":94,"line":7952},[92,44856,34184],{"class":102},[92,44858,148],{"class":98},[92,44860,34189],{"class":102},[92,44862,44863,44865,44867],{"class":94,"line":7957},[92,44864,34194],{"class":102},[92,44866,148],{"class":98},[92,44868,34199],{"class":102},[92,44870,44871],{"class":94,"line":7963},[92,44872,34204],{"class":161},[92,44874,44875],{"class":94,"line":7990},[92,44876,32857],{"class":102},[92,44878,44879],{"class":94,"line":7995},[92,44880,34213],{"class":161},[92,44882,44883,44885,44887],{"class":94,"line":8001},[92,44884,32642],{"class":102},[92,44886,148],{"class":98},[92,44888,34222],{"class":102},[92,44890,44891],{"class":94,"line":8013},[92,44892,34227],{"class":161},[92,44894,44895,44897,44899,44901,44903,44905,44907],{"class":94,"line":8025},[92,44896,32659],{"class":102},[92,44898,148],{"class":98},[92,44900,32664],{"class":102},[92,44902,32667],{"class":5196},[92,44904,148],{"class":98},[92,44906,320],{"class":151},[92,44908,109],{"class":102},[92,44910,44911],{"class":94,"line":8037},[92,44912,34248],{"class":161},[92,44914,44915],{"class":94,"line":9696},[92,44916,34253],{"class":161},[92,44918,44919],{"class":94,"line":9721},[92,44920,34258],{"class":161},[92,44922,44923,44925,44927,44929,44931],{"class":94,"line":9744},[92,44924,34263],{"class":102},[92,44926,9457],{"class":98},[92,44928,32769],{"class":102},[92,44930,2928],{"class":98},[92,44932,34272],{"class":102},[92,44934,44935],{"class":94,"line":9768},[92,44936,34277],{"class":161},[92,44938,44939,44941,44943,44945,44947],{"class":94,"line":9773},[92,44940,34282],{"class":102},[92,44942,9457],{"class":98},[92,44944,34287],{"class":102},[92,44946,294],{"class":151},[92,44948,109],{"class":102},[92,44950,44951],{"class":94,"line":9778},[92,44952,2379],{"emptyLinePlaceholder":17},[92,44954,44955],{"class":94,"line":9783},[92,44956,34300],{"class":161},[92,44958,44959,44961,44963,44965,44967],{"class":94,"line":9792},[92,44960,34305],{"class":102},[92,44962,148],{"class":98},[92,44964,34310],{"class":102},[92,44966,687],{"class":98},[92,44968,34315],{"class":102},[92,44970,44971],{"class":94,"line":9797},[92,44972,34320],{"class":161},[92,44974,44975,44977,44979,44981],{"class":94,"line":9803},[92,44976,32433],{"class":151},[92,44978,103],{"class":102},[92,44980,34329],{"class":207},[92,44982,34332],{"class":102},[92,44984,44985],{"class":94,"line":9824},[92,44986,2379],{"emptyLinePlaceholder":17},[92,44988,44989],{"class":94,"line":9830},[92,44990,34341],{"class":161},[92,44992,44993,44995,44997,44999,45001],{"class":94,"line":9844},[92,44994,1510],{"class":98},[92,44996,31202],{"class":151},[92,44998,2928],{"class":98},[92,45000,31207],{"class":207},[92,45002,3718],{"class":102},[92,45004,45005],{"class":94,"line":9850},[92,45006,34358],{"class":161},[92,45008,45009,45011,45013],{"class":94,"line":9877},[92,45010,31271],{"class":102},[92,45012,148],{"class":98},[92,45014,44533],{"class":102},[92,45016,45017],{"class":94,"line":9886},[92,45018,34371],{"class":161},[92,45020,45021],{"class":94,"line":9892},[92,45022,34376],{"class":161},[92,45024,45025,45027,45029],{"class":94,"line":9900},[92,45026,34381],{"class":102},[92,45028,34384],{"class":207},[92,45030,30479],{"class":102},[92,45032,45033],{"class":94,"line":9905},[92,45034,34391],{"class":161},[92,45036,45037,45039,45041],{"class":94,"line":16584},[92,45038,34004],{"class":102},[92,45040,148],{"class":98},[92,45042,34400],{"class":102},[92,45044,45045],{"class":94,"line":16590},[92,45046,34405],{"class":161},[92,45048,45049],{"class":94,"line":16613},[92,45050,34410],{"class":102},[92,45052,45053],{"class":94,"line":16619},[92,45054,2379],{"emptyLinePlaceholder":17},[92,45056,45057],{"class":94,"line":16642},[92,45058,34419],{"class":161},[92,45060,45061],{"class":94,"line":16656},[92,45062,34424],{"class":161},[92,45064,45065,45067,45069,45071,45073,45075,45077],{"class":94,"line":16676},[92,45066,31219],{"class":102},[92,45068,148],{"class":98},[92,45070,31226],{"class":207},[92,45072,1683],{"class":98},[92,45074,31231],{"class":102},[92,45076,1680],{"class":98},[92,45078,34101],{"class":207},[92,45080,45081,45083,45085],{"class":94,"line":16682},[92,45082,31271],{"class":102},[92,45084,148],{"class":98},[92,45086,32271],{"class":102},[92,45088,45089],{"class":94,"line":16693},[92,45090,34453],{"class":161},[92,45092,45093],{"class":94,"line":16716},[92,45094,34458],{"class":161},[92,45096,45097,45099,45101,45103,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135,45137,45139,45141],{"class":94,"line":16738},[92,45098,34463],{"class":102},[92,45100,148],{"class":98},[92,45102,993],{"class":102},[92,45104,34470],{"class":207},[92,45106,481],{"class":102},[92,45108,34475],{"class":207},[92,45110,481],{"class":102},[92,45112,34480],{"class":207},[92,45114,481],{"class":102},[92,45116,34485],{"class":207},[92,45118,481],{"class":102},[92,45120,34490],{"class":207},[92,45122,481],{"class":102},[92,45124,34495],{"class":207},[92,45126,481],{"class":102},[92,45128,34500],{"class":207},[92,45130,481],{"class":102},[92,45132,34505],{"class":207},[92,45134,481],{"class":102},[92,45136,34510],{"class":207},[92,45138,481],{"class":102},[92,45140,34515],{"class":207},[92,45142,33228],{"class":102},[92,45144,45145,45147],{"class":94,"line":16743},[92,45146,34160],{"class":98},[92,45148,32866],{"class":102},[92,45150,45151],{"class":94,"line":16749},[92,45152,34528],{"class":161},[92,45154,45155,45157,45159,45161],{"class":94,"line":16763},[92,45156,3382],{"class":98},[92,45158,34535],{"class":102},[92,45160,26025],{"class":98},[92,45162,34179],{"class":102},[92,45164,45165,45167,45169],{"class":94,"line":16776},[92,45166,32592],{"class":102},[92,45168,148],{"class":98},[92,45170,32597],{"class":102},[92,45172,45173,45175,45177],{"class":94,"line":16781},[92,45174,32607],{"class":102},[92,45176,148],{"class":98},[92,45178,32612],{"class":102},[92,45180,45181],{"class":94,"line":16795},[92,45182,2379],{"emptyLinePlaceholder":17},[92,45184,45185],{"class":94,"line":16800},[92,45186,34564],{"class":161},[92,45188,45189],{"class":94,"line":16806},[92,45190,32857],{"class":102},[92,45192,45193],{"class":94,"line":16811},[92,45194,34573],{"class":161},[92,45196,45197,45199,45201],{"class":94,"line":16825},[92,45198,32642],{"class":102},[92,45200,148],{"class":98},[92,45202,32647],{"class":102},[92,45204,45205],{"class":94,"line":16830},[92,45206,34586],{"class":161},[92,45208,45209,45211,45213,45215,45217,45219,45221],{"class":94,"line":16835},[92,45210,32659],{"class":102},[92,45212,148],{"class":98},[92,45214,32664],{"class":102},[92,45216,32667],{"class":5196},[92,45218,148],{"class":98},[92,45220,320],{"class":151},[92,45222,109],{"class":102},[92,45224,45225],{"class":94,"line":16849},[92,45226,34607],{"class":161},[92,45228,45229,45231,45233],{"class":94,"line":16861},[92,45230,34612],{"class":102},[92,45232,148],{"class":98},[92,45234,34617],{"class":102},[92,45236,45237,45239,45241],{"class":94,"line":16866},[92,45238,34622],{"class":102},[92,45240,148],{"class":98},[92,45242,34627],{"class":102},[92,45244,45245,45247,45249,45251,45253,45255,45257,45259],{"class":94,"line":16879},[92,45246,34632],{"class":151},[92,45248,103],{"class":102},[92,45250,34637],{"class":207},[92,45252,34640],{"class":102},[92,45254,34643],{"class":207},[92,45256,481],{"class":102},[92,45258,34648],{"class":207},[92,45260,34651],{"class":102},[63,45262,45264],{"id":45263},"_24训练自己的数据集","2.4.训练自己的数据集",[38,45266,45267],{},"猫狗分类任务",[38,45269,45270],{},"划分数据集和验证集",[83,45272,45274],{"className":30360,"code":45273,"language":30362,"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,45275,45276,45281,45288,45293,45304,45311,45315,45325,45339,45348,45352,45357,45367,45387,45391,45396,45406,45417,45430,45434,45439,45448,45458,45469,45473,45478,45488,45492,45497,45502,45507,45512,45517,45521,45531,45558,45571,45583,45610,45615,45620,45634,45639,45651,45666,45681,45689,45693,45698,45704,45716,45729,45734,45739,45744,45794,45800,45804],{"__ignoreMap":10},[92,45277,45278],{"class":94,"line":95},[92,45279,45280],{"class":161},"# 创建脚本，用于划分数据集和验证集\n",[92,45282,45283,45285],{"class":94,"line":11},[92,45284,30374],{"class":98},[92,45286,45287],{"class":102}," os\n",[92,45289,45290],{"class":94,"line":1158},[92,45291,45292],{"class":161},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[92,45294,45295,45297,45300,45302],{"class":94,"line":1173},[92,45296,30719],{"class":98},[92,45298,45299],{"class":102}," shutil ",[92,45301,30374],{"class":98},[92,45303,31804],{"class":102},[92,45305,45306,45308],{"class":94,"line":1179},[92,45307,30374],{"class":98},[92,45309,45310],{"class":102}," random\n",[92,45312,45313],{"class":94,"line":1193},[92,45314,2379],{"emptyLinePlaceholder":17},[92,45316,45317,45319,45322],{"class":94,"line":1199},[92,45318,31929],{"class":98},[92,45320,45321],{"class":1942}," mkfile",[92,45323,45324],{"class":102},"(file):\n",[92,45326,45327,45329,45331,45334,45337],{"class":94,"line":1290},[92,45328,3080],{"class":98},[92,45330,38912],{"class":98},[92,45332,45333],{"class":102}," os.path.exists(",[92,45335,45336],{"class":5196},"file",[92,45338,30768],{"class":102},[92,45340,45341,45344,45346],{"class":94,"line":1296},[92,45342,45343],{"class":102},"        os.makedirs(",[92,45345,45336],{"class":5196},[92,45347,109],{"class":102},[92,45349,45350],{"class":94,"line":1308},[92,45351,2379],{"emptyLinePlaceholder":17},[92,45353,45354],{"class":94,"line":1591},[92,45355,45356],{"class":161},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[92,45358,45359,45362,45364],{"class":94,"line":1596},[92,45360,45361],{"class":102},"file_path",[92,45363,148],{"class":98},[92,45365,45366],{"class":207},"'data_cat_dog'\n",[92,45368,45369,45372,45374,45377,45379,45382,45384],{"class":94,"line":1602},[92,45370,45371],{"class":102},"flower_class",[92,45373,148],{"class":98},[92,45375,45376],{"class":102},"[cla ",[92,45378,3004],{"class":98},[92,45380,45381],{"class":102}," cla ",[92,45383,26025],{"class":98},[92,45385,45386],{"class":102}," os.listdir(file_path)]\n",[92,45388,45389],{"class":94,"line":1607},[92,45390,2379],{"emptyLinePlaceholder":17},[92,45392,45393],{"class":94,"line":1621},[92,45394,45395],{"class":161},"# 创建训练集train文件夹\n",[92,45397,45398,45401,45404],{"class":94,"line":1626},[92,45399,45400],{"class":102},"mkfile(",[92,45402,45403],{"class":207},"'data\u002Ftrain'",[92,45405,109],{"class":102},[92,45407,45408,45410,45412,45414],{"class":94,"line":1632},[92,45409,3004],{"class":98},[92,45411,45381],{"class":102},[92,45413,26025],{"class":98},[92,45415,45416],{"class":102}," flower_class:\n",[92,45418,45419,45422,45425,45427],{"class":94,"line":1653},[92,45420,45421],{"class":102},"    mkfile(",[92,45423,45424],{"class":207},"'data\u002Ftrain\u002F'",[92,45426,584],{"class":98},[92,45428,45429],{"class":102},"cla)\n",[92,45431,45432],{"class":94,"line":1658},[92,45433,2379],{"emptyLinePlaceholder":17},[92,45435,45436],{"class":94,"line":1672},[92,45437,45438],{"class":161},"# 创建验证集val文件夹\n",[92,45440,45441,45443,45446],{"class":94,"line":1677},[92,45442,45400],{"class":102},[92,45444,45445],{"class":207},"'data\u002Ftest'",[92,45447,109],{"class":102},[92,45449,45450,45452,45454,45456],{"class":94,"line":1706},[92,45451,3004],{"class":98},[92,45453,45381],{"class":102},[92,45455,26025],{"class":98},[92,45457,45416],{"class":102},[92,45459,45460,45462,45465,45467],{"class":94,"line":1711},[92,45461,45421],{"class":102},[92,45463,45464],{"class":207},"'data\u002Ftest\u002F'",[92,45466,584],{"class":98},[92,45468,45429],{"class":102},[92,45470,45471],{"class":94,"line":1728},[92,45472,2379],{"emptyLinePlaceholder":17},[92,45474,45475],{"class":94,"line":1733},[92,45476,45477],{"class":161},"# 划分比例，训练集：测试集=9：1\n",[92,45479,45480,45483,45485],{"class":94,"line":1738},[92,45481,45482],{"class":102},"split_rate",[92,45484,148],{"class":98},[92,45486,45487],{"class":151},"0.1\n",[92,45489,45490],{"class":94,"line":1743},[92,45491,2379],{"emptyLinePlaceholder":17},[92,45493,45494],{"class":94,"line":1757},[92,45495,45496],{"class":161},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[92,45498,45499],{"class":94,"line":1762},[92,45500,45501],{"class":161},"# cla_path：当前类别的原始图片路径\n",[92,45503,45504],{"class":94,"line":2556},[92,45505,45506],{"class":161},"# images：当前类别下所有图片的文件名列表\n",[92,45508,45509],{"class":94,"line":2570},[92,45510,45511],{"class":161},"# num：该类别图片总数\n",[92,45513,45514],{"class":94,"line":2578},[92,45515,45516],{"class":161},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[92,45518,45519],{"class":94,"line":2583},[92,45520,2379],{"emptyLinePlaceholder":17},[92,45522,45523,45525,45527,45529],{"class":94,"line":2589},[92,45524,3004],{"class":98},[92,45526,45381],{"class":102},[92,45528,26025],{"class":98},[92,45530,45416],{"class":102},[92,45532,45533,45536,45538,45541,45543,45546,45549,45551,45553,45555],{"class":94,"line":2595},[92,45534,45535],{"class":102},"    cla_path ",[92,45537,148],{"class":98},[92,45539,45540],{"class":102}," file_path ",[92,45542,584],{"class":98},[92,45544,45545],{"class":207}," '\u002F'",[92,45547,45548],{"class":98}," +",[92,45550,45381],{"class":102},[92,45552,584],{"class":98},[92,45554,45545],{"class":207},[92,45556,45557],{"class":161},"  # 某一类别的子目录\n",[92,45559,45560,45563,45565,45568],{"class":94,"line":2600},[92,45561,45562],{"class":102},"    images ",[92,45564,148],{"class":98},[92,45566,45567],{"class":102}," os.listdir(cla_path)  ",[92,45569,45570],{"class":161},"# iamges 列表存储了该目录下所有图像的名称\n",[92,45572,45573,45576,45578,45580],{"class":94,"line":7928},[92,45574,45575],{"class":102},"    num ",[92,45577,148],{"class":98},[92,45579,7311],{"class":151},[92,45581,45582],{"class":102},"(images)\n",[92,45584,45585,45588,45590,45593,45595,45597,45599,45602,45604,45607],{"class":94,"line":7952},[92,45586,45587],{"class":102},"    eval_index ",[92,45589,148],{"class":98},[92,45591,45592],{"class":102}," random.sample(images, ",[92,45594,596],{"class":5196},[92,45596,148],{"class":98},[92,45598,106],{"class":151},[92,45600,45601],{"class":102},"(num ",[92,45603,558],{"class":98},[92,45605,45606],{"class":102}," split_rate))  ",[92,45608,45609],{"class":161},"# 从images列表中随机抽取 k 个图像名称\n",[92,45611,45612],{"class":94,"line":7957},[92,45613,45614],{"class":161},"    # 遍历该类别下的所有图片\n",[92,45616,45617],{"class":94,"line":7963},[92,45618,45619],{"class":161},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[92,45621,45622,45624,45627,45629,45631],{"class":94,"line":7990},[92,45623,3180],{"class":98},[92,45625,45626],{"class":102}," index, image ",[92,45628,26025],{"class":98},[92,45630,31588],{"class":151},[92,45632,45633],{"class":102},"(images):\n",[92,45635,45636],{"class":94,"line":7995},[92,45637,45638],{"class":161},"        # eval_index 中保存验证集val的图像名称\n",[92,45640,45641,45643,45646,45648],{"class":94,"line":8001},[92,45642,2476],{"class":98},[92,45644,45645],{"class":102}," image ",[92,45647,26025],{"class":98},[92,45649,45650],{"class":102}," eval_index:\n",[92,45652,45653,45656,45658,45661,45663],{"class":94,"line":8013},[92,45654,45655],{"class":102},"            image_path ",[92,45657,148],{"class":98},[92,45659,45660],{"class":102}," cla_path ",[92,45662,584],{"class":98},[92,45664,45665],{"class":102}," image\n",[92,45667,45668,45671,45673,45676,45678],{"class":94,"line":8025},[92,45669,45670],{"class":102},"            new_path ",[92,45672,148],{"class":98},[92,45674,45675],{"class":207}," 'data\u002Ftest\u002F'",[92,45677,45548],{"class":98},[92,45679,45680],{"class":102}," cla\n",[92,45682,45683,45686],{"class":94,"line":8037},[92,45684,45685],{"class":102},"            copy(image_path, new_path)  ",[92,45687,45688],{"class":161},"# 将选中的图像复制到新路径\n",[92,45690,45691],{"class":94,"line":9696},[92,45692,2379],{"emptyLinePlaceholder":17},[92,45694,45695],{"class":94,"line":9721},[92,45696,45697],{"class":161},"        # 其余的图像保存在训练集train中\n",[92,45699,45700,45702],{"class":94,"line":9744},[92,45701,2513],{"class":98},[92,45703,3718],{"class":102},[92,45705,45706,45708,45710,45712,45714],{"class":94,"line":9768},[92,45707,45655],{"class":102},[92,45709,148],{"class":98},[92,45711,45660],{"class":102},[92,45713,584],{"class":98},[92,45715,45665],{"class":102},[92,45717,45718,45720,45722,45725,45727],{"class":94,"line":9773},[92,45719,45670],{"class":102},[92,45721,148],{"class":98},[92,45723,45724],{"class":207}," 'data\u002Ftrain\u002F'",[92,45726,45548],{"class":98},[92,45728,45680],{"class":102},[92,45730,45731],{"class":94,"line":9778},[92,45732,45733],{"class":102},"            copy(image_path, new_path)\n",[92,45735,45736],{"class":94,"line":9783},[92,45737,45738],{"class":161},"            # 打印进度条信息\n",[92,45740,45741],{"class":94,"line":9792},[92,45742,45743],{"class":161},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[92,45745,45746,45748,45750,45752,45755,45757,45759,45762,45764,45766,45768,45771,45774,45776,45778,45781,45784,45786,45788,45791],{"class":94,"line":9797},[92,45747,32433],{"class":151},[92,45749,103],{"class":102},[92,45751,354],{"class":207},[92,45753,45754],{"class":151},"\\r",[92,45756,993],{"class":207},[92,45758,32441],{"class":151},[92,45760,45761],{"class":207},"] processing [",[92,45763,32441],{"class":151},[92,45765,687],{"class":207},[92,45767,32441],{"class":151},[92,45769,45770],{"class":207},"]\"",[92,45772,45773],{"class":102},".format(cla, index ",[92,45775,584],{"class":98},[92,45777,25100],{"class":151},[92,45779,45780],{"class":102},", num), ",[92,45782,45783],{"class":5196},"end",[92,45785,148],{"class":98},[92,45787,7632],{"class":207},[92,45789,45790],{"class":102},")  ",[92,45792,45793],{"class":161},"# processing bar\n",[92,45795,45796,45798],{"class":94,"line":9803},[92,45797,31281],{"class":151},[92,45799,1955],{"class":102},[92,45801,45802],{"class":94,"line":9824},[92,45803,2379],{"emptyLinePlaceholder":17},[92,45805,45806,45808,45810,45813],{"class":94,"line":9830},[92,45807,30397],{"class":151},[92,45809,103],{"class":102},[92,45811,45812],{"class":207},"\"processing done!\"",[92,45814,109],{"class":102},[38,45816,45817],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21978,45819,45821],{"id":45820},"_242模型代码","2.4.2.模型代码",[38,45823,45824],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[83,45826,45828],{"className":30360,"code":45827,"language":30362,"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,45829,45830,45836,45846,45856,45860,45876,45884,45898,45908,45912,45942,45946,45980,46026,46030,46064,46110,46114,46118,46152,46182,46186,46194,46208,46230,46252,46270,46274,46288,46292,46296,46312,46316,46324,46338,46348,46392,46396,46424,46428,46438,46466,46470,46506,46510,46538,46542,46552,46584,46616,46644,46648,46658,46690,46722,46754,46786,46818,46846,46850,46860,46892,46924,46936,46940,46952,46956,46960,46972,46980,47000,47004,47008,47012,47016,47020,47024,47038,47046,47054,47066,47080,47088,47092,47100,47110,47120,47130,47140,47150,47156,47160,47164,47176,47196,47204],{"__ignoreMap":10},[92,45831,45832,45834],{"class":94,"line":95},[92,45833,30374],{"class":98},[92,45835,30377],{"class":102},[92,45837,45838,45840,45842,45844],{"class":94,"line":11},[92,45839,30719],{"class":98},[92,45841,30722],{"class":102},[92,45843,30374],{"class":98},[92,45845,30727],{"class":102},[92,45847,45848,45850,45852,45854],{"class":94,"line":1158},[92,45849,30719],{"class":98},[92,45851,30739],{"class":102},[92,45853,30374],{"class":98},[92,45855,30744],{"class":102},[92,45857,45858],{"class":94,"line":1173},[92,45859,2379],{"emptyLinePlaceholder":17},[92,45861,45862,45864,45866,45868,45870,45872,45874],{"class":94,"line":1179},[92,45863,14674],{"class":98},[92,45865,41475],{"class":1942},[92,45867,103],{"class":102},[92,45869,30760],{"class":1942},[92,45871,661],{"class":102},[92,45873,30765],{"class":1942},[92,45875,30768],{"class":102},[92,45877,45878,45880,45882],{"class":94,"line":1193},[92,45879,30783],{"class":98},[92,45881,30786],{"class":151},[92,45883,41494],{"class":102},[92,45885,45886,45888,45890,45892,45894,45896],{"class":94,"line":1199},[92,45887,30799],{"class":151},[92,45889,41501],{"class":102},[92,45891,30805],{"class":151},[92,45893,30808],{"class":102},[92,45895,30811],{"class":151},[92,45897,1955],{"class":102},[92,45899,45900,45902,45904,45906],{"class":94,"line":1290},[92,45901,30827],{"class":151},[92,45903,34753],{"class":102},[92,45905,148],{"class":98},[92,45907,34758],{"class":102},[92,45909,45910],{"class":94,"line":1296},[92,45911,41524],{"class":161},[92,45913,45914,45916,45918,45920,45922,45924,45926,45928,45930,45932,45934,45936,45938,45940],{"class":94,"line":1308},[92,45915,30827],{"class":151},[92,45917,41531],{"class":102},[92,45919,148],{"class":98},[92,45921,30835],{"class":102},[92,45923,30838],{"class":5196},[92,45925,148],{"class":98},[92,45927,41542],{"class":102},[92,45929,30847],{"class":5196},[92,45931,148],{"class":98},[92,45933,41549],{"class":102},[92,45935,30856],{"class":5196},[92,45937,148],{"class":98},[92,45939,320],{"class":151},[92,45941,109],{"class":102},[92,45943,45944],{"class":94,"line":1591},[92,45945,41562],{"class":161},[92,45947,45948,45950,45952,45954,45956,45958,45960,45962,45964,45966,45968,45970,45972,45974,45976,45978],{"class":94,"line":1596},[92,45949,30827],{"class":151},[92,45951,41569],{"class":102},[92,45953,148],{"class":98},[92,45955,30835],{"class":102},[92,45957,30838],{"class":5196},[92,45959,148],{"class":98},[92,45961,41542],{"class":102},[92,45963,30847],{"class":5196},[92,45965,148],{"class":98},[92,45967,41586],{"class":102},[92,45969,294],{"class":151},[92,45971,41591],{"class":102},[92,45973,30856],{"class":5196},[92,45975,148],{"class":98},[92,45977,320],{"class":151},[92,45979,109],{"class":102},[92,45981,45982,45984,45986,45988,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024],{"class":94,"line":1602},[92,45983,30827],{"class":151},[92,45985,41606],{"class":102},[92,45987,148],{"class":98},[92,45989,30835],{"class":102},[92,45991,30838],{"class":5196},[92,45993,148],{"class":98},[92,45995,41586],{"class":102},[92,45997,294],{"class":151},[92,45999,41591],{"class":102},[92,46001,30847],{"class":5196},[92,46003,148],{"class":98},[92,46005,41586],{"class":102},[92,46007,320],{"class":151},[92,46009,41591],{"class":102},[92,46011,30856],{"class":5196},[92,46013,148],{"class":98},[92,46015,174],{"class":151},[92,46017,481],{"class":102},[92,46019,30865],{"class":5196},[92,46021,148],{"class":98},[92,46023,320],{"class":151},[92,46025,109],{"class":102},[92,46027,46028],{"class":94,"line":1607},[92,46029,41651],{"class":161},[92,46031,46032,46034,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062],{"class":94,"line":1621},[92,46033,30827],{"class":151},[92,46035,41658],{"class":102},[92,46037,148],{"class":98},[92,46039,30835],{"class":102},[92,46041,30838],{"class":5196},[92,46043,148],{"class":98},[92,46045,41542],{"class":102},[92,46047,30847],{"class":5196},[92,46049,148],{"class":98},[92,46051,41675],{"class":102},[92,46053,294],{"class":151},[92,46055,41591],{"class":102},[92,46057,30856],{"class":5196},[92,46059,148],{"class":98},[92,46061,320],{"class":151},[92,46063,109],{"class":102},[92,46065,46066,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108],{"class":94,"line":1626},[92,46067,30827],{"class":151},[92,46069,41694],{"class":102},[92,46071,148],{"class":98},[92,46073,30835],{"class":102},[92,46075,30838],{"class":5196},[92,46077,148],{"class":98},[92,46079,41675],{"class":102},[92,46081,294],{"class":151},[92,46083,41591],{"class":102},[92,46085,30847],{"class":5196},[92,46087,148],{"class":98},[92,46089,41675],{"class":102},[92,46091,320],{"class":151},[92,46093,41591],{"class":102},[92,46095,30856],{"class":5196},[92,46097,148],{"class":98},[92,46099,422],{"class":151},[92,46101,481],{"class":102},[92,46103,30865],{"class":5196},[92,46105,148],{"class":98},[92,46107,180],{"class":151},[92,46109,109],{"class":102},[92,46111,46112],{"class":94,"line":1632},[92,46113,41739],{"class":161},[92,46115,46116],{"class":94,"line":1653},[92,46117,41744],{"class":161},[92,46119,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148,46150],{"class":94,"line":1658},[92,46121,30827],{"class":151},[92,46123,41751],{"class":102},[92,46125,148],{"class":98},[92,46127,34811],{"class":102},[92,46129,30856],{"class":5196},[92,46131,148],{"class":98},[92,46133,174],{"class":151},[92,46135,481],{"class":102},[92,46137,30911],{"class":5196},[92,46139,148],{"class":98},[92,46141,320],{"class":151},[92,46143,481],{"class":102},[92,46145,30865],{"class":5196},[92,46147,148],{"class":98},[92,46149,320],{"class":151},[92,46151,109],{"class":102},[92,46153,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180],{"class":94,"line":1672},[92,46155,30827],{"class":151},[92,46157,41786],{"class":102},[92,46159,148],{"class":98},[92,46161,30835],{"class":102},[92,46163,30838],{"class":5196},[92,46165,148],{"class":98},[92,46167,41542],{"class":102},[92,46169,30847],{"class":5196},[92,46171,148],{"class":98},[92,46173,41803],{"class":102},[92,46175,30856],{"class":5196},[92,46177,148],{"class":98},[92,46179,320],{"class":151},[92,46181,109],{"class":102},[92,46183,46184],{"class":94,"line":1677},[92,46185,2379],{"emptyLinePlaceholder":17},[92,46187,46188,46190,46192],{"class":94,"line":1706},[92,46189,30783],{"class":98},[92,46191,31075],{"class":1942},[92,46193,31078],{"class":102},[92,46195,46196,46198,46200,46202,46204,46206],{"class":94,"line":1711},[92,46197,41828],{"class":102},[92,46199,148],{"class":98},[92,46201,30805],{"class":151},[92,46203,35166],{"class":102},[92,46205,30805],{"class":151},[92,46207,41839],{"class":102},[92,46209,46210,46212,46214,46216,46218,46220,46222,46224,46226,46228],{"class":94,"line":1728},[92,46211,7065],{"class":102},[92,46213,148],{"class":98},[92,46215,30805],{"class":151},[92,46217,35166],{"class":102},[92,46219,30805],{"class":151},[92,46221,41854],{"class":102},[92,46223,30805],{"class":151},[92,46225,35166],{"class":102},[92,46227,30805],{"class":151},[92,46229,41863],{"class":102},[92,46231,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250],{"class":94,"line":1733},[92,46233,41868],{"class":102},[92,46235,148],{"class":98},[92,46237,30805],{"class":151},[92,46239,35166],{"class":102},[92,46241,30805],{"class":151},[92,46243,41879],{"class":102},[92,46245,30805],{"class":151},[92,46247,35166],{"class":102},[92,46249,30805],{"class":151},[92,46251,41888],{"class":102},[92,46253,46254,46256,46258,46260,46262,46264,46266,46268],{"class":94,"line":1738},[92,46255,41893],{"class":102},[92,46257,148],{"class":98},[92,46259,30805],{"class":151},[92,46261,35166],{"class":102},[92,46263,30805],{"class":151},[92,46265,41904],{"class":102},[92,46267,30805],{"class":151},[92,46269,41909],{"class":102},[92,46271,46272],{"class":94,"line":1743},[92,46273,41914],{"class":161},[92,46275,46276,46278,46280,46282,46284,46286],{"class":94,"line":1757},[92,46277,14732],{"class":98},[92,46279,41921],{"class":102},[92,46281,32667],{"class":5196},[92,46283,148],{"class":98},[92,46285,320],{"class":151},[92,46287,109],{"class":102},[92,46289,46290],{"class":94,"line":1762},[92,46291,2379],{"emptyLinePlaceholder":17},[92,46293,46294],{"class":94,"line":2556},[92,46295,41942],{"class":161},[92,46297,46298,46300,46302,46304,46306,46308,46310],{"class":94,"line":2570},[92,46299,14674],{"class":98},[92,46301,41949],{"class":1942},[92,46303,103],{"class":102},[92,46305,30760],{"class":1942},[92,46307,661],{"class":102},[92,46309,30765],{"class":1942},[92,46311,30768],{"class":102},[92,46313,46314],{"class":94,"line":2578},[92,46315,41964],{"class":161},[92,46317,46318,46320,46322],{"class":94,"line":2583},[92,46319,30783],{"class":98},[92,46321,30786],{"class":151},[92,46323,41973],{"class":102},[92,46325,46326,46328,46330,46332,46334,46336],{"class":94,"line":2589},[92,46327,30799],{"class":151},[92,46329,41980],{"class":102},[92,46331,30805],{"class":151},[92,46333,30808],{"class":102},[92,46335,30811],{"class":151},[92,46337,1955],{"class":102},[92,46339,46340,46342,46344,46346],{"class":94,"line":2595},[92,46341,30827],{"class":151},[92,46343,41995],{"class":102},[92,46345,148],{"class":98},[92,46347,37991],{"class":102},[92,46349,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390],{"class":94,"line":2600},[92,46351,37996],{"class":102},[92,46353,30838],{"class":5196},[92,46355,148],{"class":98},[92,46357,174],{"class":151},[92,46359,481],{"class":102},[92,46361,30847],{"class":5196},[92,46363,148],{"class":98},[92,46365,306],{"class":151},[92,46367,481],{"class":102},[92,46369,30856],{"class":5196},[92,46371,148],{"class":98},[92,46373,472],{"class":151},[92,46375,481],{"class":102},[92,46377,30911],{"class":5196},[92,46379,148],{"class":98},[92,46381,180],{"class":151},[92,46383,481],{"class":102},[92,46385,30865],{"class":5196},[92,46387,148],{"class":98},[92,46389,174],{"class":151},[92,46391,38029],{"class":102},[92,46393,46394],{"class":94,"line":7928},[92,46395,38034],{"class":102},[92,46397,46398,46400,46402,46404,46406,46408,46410,46412,46414,46416,46418,46420,46422],{"class":94,"line":7952},[92,46399,38079],{"class":102},[92,46401,30856],{"class":5196},[92,46403,148],{"class":98},[92,46405,174],{"class":151},[92,46407,481],{"class":102},[92,46409,30911],{"class":5196},[92,46411,148],{"class":98},[92,46413,180],{"class":151},[92,46415,481],{"class":102},[92,46417,30865],{"class":5196},[92,46419,148],{"class":98},[92,46421,320],{"class":151},[92,46423,109],{"class":102},[92,46425,46426],{"class":94,"line":7957},[92,46427,38108],{"class":102},[92,46429,46430,46432,46434,46436],{"class":94,"line":7963},[92,46431,30827],{"class":151},[92,46433,42086],{"class":102},[92,46435,148],{"class":98},[92,46437,37991],{"class":102},[92,46439,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464],{"class":94,"line":7990},[92,46441,37996],{"class":102},[92,46443,30838],{"class":5196},[92,46445,148],{"class":98},[92,46447,306],{"class":151},[92,46449,481],{"class":102},[92,46451,30847],{"class":5196},[92,46453,148],{"class":98},[92,46455,306],{"class":151},[92,46457,481],{"class":102},[92,46459,30856],{"class":5196},[92,46461,148],{"class":98},[92,46463,320],{"class":151},[92,46465,38029],{"class":102},[92,46467,46468],{"class":94,"line":7995},[92,46469,38034],{"class":102},[92,46471,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504],{"class":94,"line":8001},[92,46473,37996],{"class":102},[92,46475,30838],{"class":5196},[92,46477,148],{"class":98},[92,46479,306],{"class":151},[92,46481,481],{"class":102},[92,46483,30847],{"class":5196},[92,46485,148],{"class":98},[92,46487,42141],{"class":151},[92,46489,481],{"class":102},[92,46491,30856],{"class":5196},[92,46493,148],{"class":98},[92,46495,174],{"class":151},[92,46497,481],{"class":102},[92,46499,30865],{"class":5196},[92,46501,148],{"class":98},[92,46503,320],{"class":151},[92,46505,38029],{"class":102},[92,46507,46508],{"class":94,"line":8013},[92,46509,38034],{"class":102},[92,46511,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536],{"class":94,"line":8025},[92,46513,38079],{"class":102},[92,46515,30856],{"class":5196},[92,46517,148],{"class":98},[92,46519,174],{"class":151},[92,46521,481],{"class":102},[92,46523,30911],{"class":5196},[92,46525,148],{"class":98},[92,46527,180],{"class":151},[92,46529,481],{"class":102},[92,46531,30865],{"class":5196},[92,46533,148],{"class":98},[92,46535,320],{"class":151},[92,46537,109],{"class":102},[92,46539,46540],{"class":94,"line":8037},[92,46541,38108],{"class":102},[92,46543,46544,46546,46548,46550],{"class":94,"line":9696},[92,46545,30827],{"class":151},[92,46547,42202],{"class":102},[92,46549,148],{"class":98},[92,46551,37991],{"class":102},[92,46553,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582],{"class":94,"line":9721},[92,46555,42211],{"class":102},[92,46557,42141],{"class":151},[92,46559,481],{"class":102},[92,46561,306],{"class":151},[92,46563,42220],{"class":102},[92,46565,312],{"class":151},[92,46567,481],{"class":102},[92,46569,32052],{"class":151},[92,46571,42229],{"class":102},[92,46573,704],{"class":151},[92,46575,481],{"class":102},[92,46577,300],{"class":151},[92,46579,42238],{"class":102},[92,46581,300],{"class":151},[92,46583,38029],{"class":102},[92,46585,46586,46588,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614],{"class":94,"line":9744},[92,46587,42211],{"class":102},[92,46589,34852],{"class":151},[92,46591,481],{"class":102},[92,46593,32052],{"class":151},[92,46595,42220],{"class":102},[92,46597,32052],{"class":151},[92,46599,481],{"class":102},[92,46601,42141],{"class":151},[92,46603,42229],{"class":102},[92,46605,300],{"class":151},[92,46607,481],{"class":102},[92,46609,312],{"class":151},[92,46611,42238],{"class":102},[92,46613,306],{"class":151},[92,46615,38029],{"class":102},[92,46617,46618,46620,46622,46624,46626,46628,46630,46632,46634,46636,46638,46640,46642],{"class":94,"line":9768},[92,46619,38079],{"class":102},[92,46621,30856],{"class":5196},[92,46623,148],{"class":98},[92,46625,174],{"class":151},[92,46627,481],{"class":102},[92,46629,30911],{"class":5196},[92,46631,148],{"class":98},[92,46633,180],{"class":151},[92,46635,481],{"class":102},[92,46637,30865],{"class":5196},[92,46639,148],{"class":98},[92,46641,320],{"class":151},[92,46643,109],{"class":102},[92,46645,46646],{"class":94,"line":9773},[92,46647,38108],{"class":102},[92,46649,46650,46652,46654,46656],{"class":94,"line":9778},[92,46651,30827],{"class":151},[92,46653,42313],{"class":102},[92,46655,148],{"class":98},[92,46657,37991],{"class":102},[92,46659,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688],{"class":94,"line":9783},[92,46661,42211],{"class":102},[92,46663,42324],{"class":151},[92,46665,481],{"class":102},[92,46667,42141],{"class":151},[92,46669,42220],{"class":102},[92,46671,312],{"class":151},[92,46673,481],{"class":102},[92,46675,42337],{"class":151},[92,46677,42229],{"class":102},[92,46679,704],{"class":151},[92,46681,481],{"class":102},[92,46683,710],{"class":151},[92,46685,42238],{"class":102},[92,46687,306],{"class":151},[92,46689,38029],{"class":102},[92,46691,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718,46720],{"class":94,"line":9792},[92,46693,42211],{"class":102},[92,46695,38439],{"class":151},[92,46697,481],{"class":102},[92,46699,21028],{"class":151},[92,46701,42220],{"class":102},[92,46703,721],{"class":151},[92,46705,481],{"class":102},[92,46707,31483],{"class":151},[92,46709,42229],{"class":102},[92,46711,903],{"class":151},[92,46713,481],{"class":102},[92,46715,306],{"class":151},[92,46717,42238],{"class":102},[92,46719,306],{"class":151},[92,46721,38029],{"class":102},[92,46723,46724,46726,46728,46730,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752],{"class":94,"line":9797},[92,46725,42211],{"class":102},[92,46727,38439],{"class":151},[92,46729,481],{"class":102},[92,46731,32052],{"class":151},[92,46733,42220],{"class":102},[92,46735,32052],{"class":151},[92,46737,481],{"class":102},[92,46739,34852],{"class":151},[92,46741,42229],{"class":102},[92,46743,903],{"class":151},[92,46745,481],{"class":102},[92,46747,306],{"class":151},[92,46749,42238],{"class":102},[92,46751,306],{"class":151},[92,46753,38029],{"class":102},[92,46755,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784],{"class":94,"line":9803},[92,46757,42211],{"class":102},[92,46759,38439],{"class":151},[92,46761,481],{"class":102},[92,46763,721],{"class":151},[92,46765,42220],{"class":102},[92,46767,32052],{"class":151},[92,46769,481],{"class":102},[92,46771,42434],{"class":151},[92,46773,42229],{"class":102},[92,46775,300],{"class":151},[92,46777,481],{"class":102},[92,46779,306],{"class":151},[92,46781,42238],{"class":102},[92,46783,306],{"class":151},[92,46785,38029],{"class":102},[92,46787,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816],{"class":94,"line":9824},[92,46789,42211],{"class":102},[92,46791,42455],{"class":151},[92,46793,481],{"class":102},[92,46795,34852],{"class":151},[92,46797,42220],{"class":102},[92,46799,21028],{"class":151},[92,46801,481],{"class":102},[92,46803,42468],{"class":151},[92,46805,42229],{"class":102},[92,46807,300],{"class":151},[92,46809,481],{"class":102},[92,46811,32052],{"class":151},[92,46813,42238],{"class":102},[92,46815,32052],{"class":151},[92,46817,38029],{"class":102},[92,46819,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844],{"class":94,"line":9830},[92,46821,38079],{"class":102},[92,46823,30856],{"class":5196},[92,46825,148],{"class":98},[92,46827,174],{"class":151},[92,46829,481],{"class":102},[92,46831,30911],{"class":5196},[92,46833,148],{"class":98},[92,46835,180],{"class":151},[92,46837,481],{"class":102},[92,46839,30865],{"class":5196},[92,46841,148],{"class":98},[92,46843,320],{"class":151},[92,46845,109],{"class":102},[92,46847,46848],{"class":94,"line":9844},[92,46849,38108],{"class":102},[92,46851,46852,46854,46856,46858],{"class":94,"line":9850},[92,46853,30827],{"class":151},[92,46855,42521],{"class":102},[92,46857,148],{"class":98},[92,46859,37991],{"class":102},[92,46861,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890],{"class":94,"line":9877},[92,46863,42211],{"class":102},[92,46865,42532],{"class":151},[92,46867,481],{"class":102},[92,46869,34852],{"class":151},[92,46871,42220],{"class":102},[92,46873,21028],{"class":151},[92,46875,481],{"class":102},[92,46877,42468],{"class":151},[92,46879,42229],{"class":102},[92,46881,300],{"class":151},[92,46883,481],{"class":102},[92,46885,32052],{"class":151},[92,46887,42238],{"class":102},[92,46889,32052],{"class":151},[92,46891,38029],{"class":102},[92,46893,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922],{"class":94,"line":9886},[92,46895,42211],{"class":102},[92,46897,42532],{"class":151},[92,46899,481],{"class":102},[92,46901,34922],{"class":151},[92,46903,42220],{"class":102},[92,46905,42141],{"class":151},[92,46907,481],{"class":102},[92,46909,34922],{"class":151},[92,46911,42229],{"class":102},[92,46913,710],{"class":151},[92,46915,481],{"class":102},[92,46917,32052],{"class":151},[92,46919,42238],{"class":102},[92,46921,32052],{"class":151},[92,46923,38029],{"class":102},[92,46925,46926,46928,46930,46932,46934],{"class":94,"line":9892},[92,46927,42595],{"class":102},[92,46929,320],{"class":151},[92,46931,481],{"class":102},[92,46933,320],{"class":151},[92,46935,42604],{"class":102},[92,46937,46938],{"class":94,"line":9900},[92,46939,38772],{"class":102},[92,46941,46942,46944,46946,46948,46950],{"class":94,"line":9905},[92,46943,38777],{"class":102},[92,46945,42615],{"class":151},[92,46947,481],{"class":102},[92,46949,180],{"class":151},[92,46951,109],{"class":102},[92,46953,46954],{"class":94,"line":16584},[92,46955,38108],{"class":102},[92,46957,46958],{"class":94,"line":16590},[92,46959,42630],{"class":161},[92,46961,46962,46964,46966,46968,46970],{"class":94,"line":16613},[92,46963,3382],{"class":98},[92,46965,38850],{"class":102},[92,46967,26025],{"class":98},[92,46969,38855],{"class":151},[92,46971,38858],{"class":102},[92,46973,46974,46976,46978],{"class":94,"line":16619},[92,46975,4621],{"class":98},[92,46977,38870],{"class":151},[92,46979,38873],{"class":102},[92,46981,46982,46984,46986,46988,46990,46992,46994,46996,46998],{"class":94,"line":16642},[92,46983,38883],{"class":102},[92,46985,42657],{"class":5196},[92,46987,148],{"class":98},[92,46989,42662],{"class":207},[92,46991,481],{"class":102},[92,46993,38886],{"class":5196},[92,46995,148],{"class":98},[92,46997,38891],{"class":207},[92,46999,109],{"class":102},[92,47001,47002],{"class":94,"line":16656},[92,47003,42677],{"class":161},[92,47005,47006],{"class":94,"line":16676},[92,47007,42682],{"class":161},[92,47009,47010],{"class":94,"line":16682},[92,47011,42687],{"class":161},[92,47013,47014],{"class":94,"line":16693},[92,47015,42692],{"class":161},[92,47017,47018],{"class":94,"line":16716},[92,47019,42697],{"class":161},[92,47021,47022],{"class":94,"line":16738},[92,47023,42702],{"class":161},[92,47025,47026,47028,47030,47032,47034,47036],{"class":94,"line":16743},[92,47027,38903],{"class":98},[92,47029,38906],{"class":102},[92,47031,38909],{"class":98},[92,47033,38912],{"class":98},[92,47035,38915],{"class":151},[92,47037,3718],{"class":102},[92,47039,47040,47042,47044],{"class":94,"line":16749},[92,47041,38927],{"class":102},[92,47043,294],{"class":151},[92,47045,109],{"class":102},[92,47047,47048,47050,47052],{"class":94,"line":16763},[92,47049,42729],{"class":98},[92,47051,38870],{"class":151},[92,47053,38946],{"class":102},[92,47055,47056,47058,47060,47062,47064],{"class":94,"line":16776},[92,47057,42738],{"class":102},[92,47059,294],{"class":151},[92,47061,481],{"class":102},[92,47063,38968],{"class":151},[92,47065,109],{"class":102},[92,47067,47068,47070,47072,47074,47076,47078],{"class":94,"line":16781},[92,47069,42751],{"class":98},[92,47071,38906],{"class":102},[92,47073,38909],{"class":98},[92,47075,38912],{"class":98},[92,47077,38915],{"class":151},[92,47079,3718],{"class":102},[92,47081,47082,47084,47086],{"class":94,"line":16795},[92,47083,42766],{"class":102},[92,47085,294],{"class":151},[92,47087,109],{"class":102},[92,47089,47090],{"class":94,"line":16800},[92,47091,35147],{"class":161},[92,47093,47094,47096,47098],{"class":94,"line":16806},[92,47095,30783],{"class":98},[92,47097,31075],{"class":1942},[92,47099,31078],{"class":102},[92,47101,47102,47104,47106,47108],{"class":94,"line":16811},[92,47103,31083],{"class":102},[92,47105,148],{"class":98},[92,47107,30805],{"class":151},[92,47109,42793],{"class":102},[92,47111,47112,47114,47116,47118],{"class":94,"line":16825},[92,47113,31083],{"class":102},[92,47115,148],{"class":98},[92,47117,30805],{"class":151},[92,47119,42804],{"class":102},[92,47121,47122,47124,47126,47128],{"class":94,"line":16830},[92,47123,31083],{"class":102},[92,47125,148],{"class":98},[92,47127,30805],{"class":151},[92,47129,42815],{"class":102},[92,47131,47132,47134,47136,47138],{"class":94,"line":16835},[92,47133,31083],{"class":102},[92,47135,148],{"class":98},[92,47137,30805],{"class":151},[92,47139,42826],{"class":102},[92,47141,47142,47144,47146,47148],{"class":94,"line":16849},[92,47143,31083],{"class":102},[92,47145,148],{"class":98},[92,47147,30805],{"class":151},[92,47149,42837],{"class":102},[92,47151,47152,47154],{"class":94,"line":16861},[92,47153,14732],{"class":98},[92,47155,31191],{"class":102},[92,47157,47158],{"class":94,"line":16866},[92,47159,2379],{"emptyLinePlaceholder":17},[92,47161,47162],{"class":94,"line":16879},[92,47163,42852],{"class":161},[92,47165,47166,47168,47170,47172,47174],{"class":94,"line":16884},[92,47167,1510],{"class":98},[92,47169,31202],{"class":151},[92,47171,2928],{"class":98},[92,47173,31207],{"class":207},[92,47175,3718],{"class":102},[92,47177,47178,47180,47182,47184,47186,47188,47190,47192,47194],{"class":94,"line":16889},[92,47179,31219],{"class":102},[92,47181,148],{"class":98},[92,47183,30433],{"class":102},[92,47185,31226],{"class":207},[92,47187,1683],{"class":98},[92,47189,31231],{"class":102},[92,47191,1680],{"class":98},[92,47193,30458],{"class":207},[92,47195,109],{"class":102},[92,47197,47198,47200,47202],{"class":94,"line":16894},[92,47199,31271],{"class":102},[92,47201,148],{"class":98},[92,47203,42893],{"class":102},[92,47205,47206,47208,47210,47212,47214,47216,47218,47220],{"class":94,"line":16907},[92,47207,31281],{"class":151},[92,47209,31284],{"class":102},[92,47211,320],{"class":151},[92,47213,481],{"class":102},[92,47215,31483],{"class":151},[92,47217,481],{"class":102},[92,47219,31483],{"class":151},[92,47221,31297],{"class":102},[21978,47223,47225],{"id":47224},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[38,47227,47228],{},"计算图片的均值与方差，用于训练中归一化处理操作",[83,47230,47232],{"className":30360,"code":47231,"language":30362,"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,47233,47234,47239,47252,47257,47263,47268,47278,47282,47287,47297,47301,47306,47316,47333,47337,47342,47354,47366,47397,47406,47416,47426,47430,47435,47450,47454,47459,47464,47469,47479,47484,47509,47513,47518,47533,47537,47550,47554,47559,47564,47569,47574,47579,47589,47599,47622,47630,47638,47646,47650,47662,47666,47671,47675,47679,47686,47706,47730,47737,47751,47756,47761,47765,47779,47783,47795],{"__ignoreMap":10},[92,47235,47236],{"class":94,"line":95},[92,47237,47238],{"class":161},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[92,47240,47241,47243,47246,47249],{"class":94,"line":11},[92,47242,30719],{"class":98},[92,47244,47245],{"class":151}," PIL",[92,47247,47248],{"class":98}," import",[92,47250,47251],{"class":102}," Image\n",[92,47253,47254],{"class":94,"line":1158},[92,47255,47256],{"class":161},"# os 用来处理文件夹和文件路径\n",[92,47258,47259,47261],{"class":94,"line":1173},[92,47260,30374],{"class":98},[92,47262,45287],{"class":102},[92,47264,47265],{"class":94,"line":1179},[92,47266,47267],{"class":161},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[92,47269,47270,47272,47274,47276],{"class":94,"line":1193},[92,47271,30374],{"class":98},[92,47273,31362],{"class":102},[92,47275,31365],{"class":98},[92,47277,31368],{"class":102},[92,47279,47280],{"class":94,"line":1199},[92,47281,2379],{"emptyLinePlaceholder":17},[92,47283,47284],{"class":94,"line":1290},[92,47285,47286],{"class":161},"# 文件夹路径，包含所有图片文件\n",[92,47288,47289,47292,47294],{"class":94,"line":1296},[92,47290,47291],{"class":102},"folder_path ",[92,47293,148],{"class":98},[92,47295,47296],{"class":207}," 'data_cat_dog'\n",[92,47298,47299],{"class":94,"line":1308},[92,47300,2379],{"emptyLinePlaceholder":17},[92,47302,47303],{"class":94,"line":1591},[92,47304,47305],{"class":161},"# 初始化累积变量\n",[92,47307,47308,47311,47313],{"class":94,"line":1596},[92,47309,47310],{"class":102},"total_pixels ",[92,47312,148],{"class":98},[92,47314,47315],{"class":151}," 0\n",[92,47317,47318,47321,47323,47326,47328,47330],{"class":94,"line":1602},[92,47319,47320],{"class":102},"sum_normalized_pixel_values ",[92,47322,148],{"class":98},[92,47324,47325],{"class":102}," np.zeros(",[92,47327,174],{"class":151},[92,47329,45790],{"class":102},[92,47331,47332],{"class":161},"# 如果是RGB图像，需要三个通道的均值和方差\n",[92,47334,47335],{"class":94,"line":1607},[92,47336,2379],{"emptyLinePlaceholder":17},[92,47338,47339],{"class":94,"line":1621},[92,47340,47341],{"class":161},"# 遍历文件夹中的图片文件\n",[92,47343,47344,47346,47349,47351],{"class":94,"line":1626},[92,47345,3004],{"class":98},[92,47347,47348],{"class":102}," root, dirs, files ",[92,47350,26025],{"class":98},[92,47352,47353],{"class":102}," os.walk(folder_path):\n",[92,47355,47356,47358,47361,47363],{"class":94,"line":1632},[92,47357,3180],{"class":98},[92,47359,47360],{"class":102}," filename ",[92,47362,26025],{"class":98},[92,47364,47365],{"class":102}," files:\n",[92,47367,47368,47370,47373,47376,47378,47381,47383,47386,47388,47391,47394],{"class":94,"line":1653},[92,47369,2476],{"class":98},[92,47371,47372],{"class":102}," filename.endswith((",[92,47374,47375],{"class":207},"'.jpg'",[92,47377,12415],{"class":102},[92,47379,47380],{"class":207},"'.jpeg'",[92,47382,12415],{"class":102},[92,47384,47385],{"class":207},"'.png'",[92,47387,12415],{"class":102},[92,47389,47390],{"class":207},"'.bmp'",[92,47392,47393],{"class":102},")):  ",[92,47395,47396],{"class":161},"# 可根据实际情况添加其他格式\n",[92,47398,47399,47401,47403],{"class":94,"line":1658},[92,47400,45655],{"class":102},[92,47402,148],{"class":98},[92,47404,47405],{"class":102}," os.path.join(root, filename)\n",[92,47407,47408,47411,47413],{"class":94,"line":1672},[92,47409,47410],{"class":102},"            image ",[92,47412,148],{"class":98},[92,47414,47415],{"class":102}," Image.open(image_path)\n",[92,47417,47418,47421,47423],{"class":94,"line":1677},[92,47419,47420],{"class":102},"            image_array ",[92,47422,148],{"class":98},[92,47424,47425],{"class":102}," np.array(image)\n",[92,47427,47428],{"class":94,"line":1706},[92,47429,2379],{"emptyLinePlaceholder":17},[92,47431,47432],{"class":94,"line":1711},[92,47433,47434],{"class":161},"            # 归一化像素值到0-1之间\n",[92,47436,47437,47440,47442,47445,47447],{"class":94,"line":1728},[92,47438,47439],{"class":102},"            normalized_image_array ",[92,47441,148],{"class":98},[92,47443,47444],{"class":102}," image_array ",[92,47446,687],{"class":98},[92,47448,47449],{"class":151}," 255.0\n",[92,47451,47452],{"class":94,"line":1733},[92,47453,2379],{"emptyLinePlaceholder":17},[92,47455,47456],{"class":94,"line":1738},[92,47457,47458],{"class":161},"            # print(image_path)\n",[92,47460,47461],{"class":94,"line":1743},[92,47462,47463],{"class":161},"            # print(normalized_image_array.shape)\n",[92,47465,47466],{"class":94,"line":1757},[92,47467,47468],{"class":161},"            # 累积归一化后的像素值和像素数量\n",[92,47470,47471,47474,47476],{"class":94,"line":1762},[92,47472,47473],{"class":102},"            total_pixels ",[92,47475,9457],{"class":98},[92,47477,47478],{"class":102}," normalized_image_array.size\n",[92,47480,47481],{"class":94,"line":2556},[92,47482,47483],{"class":161},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[92,47485,47486,47489,47491,47494,47497,47499,47501,47503,47505,47507],{"class":94,"line":2570},[92,47487,47488],{"class":102},"            sum_normalized_pixel_values ",[92,47490,9457],{"class":98},[92,47492,47493],{"class":102}," np.sum(normalized_image_array, ",[92,47495,47496],{"class":5196},"axis",[92,47498,148],{"class":98},[92,47500,103],{"class":102},[92,47502,294],{"class":151},[92,47504,12415],{"class":102},[92,47506,320],{"class":151},[92,47508,30479],{"class":102},[92,47510,47511],{"class":94,"line":2578},[92,47512,2379],{"emptyLinePlaceholder":17},[92,47514,47515],{"class":94,"line":2583},[92,47516,47517],{"class":161},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[92,47519,47520,47523,47525,47528,47530],{"class":94,"line":2589},[92,47521,47522],{"class":102},"mean ",[92,47524,148],{"class":98},[92,47526,47527],{"class":102}," sum_normalized_pixel_values ",[92,47529,687],{"class":98},[92,47531,47532],{"class":102}," total_pixels\n",[92,47534,47535],{"class":94,"line":2595},[92,47536,2379],{"emptyLinePlaceholder":17},[92,47538,47539,47542,47544,47546,47548],{"class":94,"line":2600},[92,47540,47541],{"class":102},"sum_squared_diff ",[92,47543,148],{"class":98},[92,47545,47325],{"class":102},[92,47547,174],{"class":151},[92,47549,109],{"class":102},[92,47551,47552],{"class":94,"line":7928},[92,47553,2379],{"emptyLinePlaceholder":17},[92,47555,47556],{"class":94,"line":7952},[92,47557,47558],{"class":161},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[92,47560,47561],{"class":94,"line":7957},[92,47562,47563],{"class":161},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[92,47565,47566],{"class":94,"line":7963},[92,47567,47568],{"class":161},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[92,47570,47571],{"class":94,"line":7990},[92,47572,47573],{"class":161},"# Image.open(image_path)：打开图片\n",[92,47575,47576],{"class":94,"line":7995},[92,47577,47578],{"class":161},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[92,47580,47581,47583,47585,47587],{"class":94,"line":8001},[92,47582,3004],{"class":98},[92,47584,47348],{"class":102},[92,47586,26025],{"class":98},[92,47588,47353],{"class":102},[92,47590,47591,47593,47595,47597],{"class":94,"line":8013},[92,47592,3180],{"class":98},[92,47594,47360],{"class":102},[92,47596,26025],{"class":98},[92,47598,47365],{"class":102},[92,47600,47601,47603,47605,47607,47609,47611,47613,47615,47617,47619],{"class":94,"line":8025},[92,47602,2476],{"class":98},[92,47604,47372],{"class":102},[92,47606,47375],{"class":207},[92,47608,12415],{"class":102},[92,47610,47380],{"class":207},[92,47612,12415],{"class":102},[92,47614,47385],{"class":207},[92,47616,12415],{"class":102},[92,47618,47390],{"class":207},[92,47620,47621],{"class":102},")):\n",[92,47623,47624,47626,47628],{"class":94,"line":8037},[92,47625,45655],{"class":102},[92,47627,148],{"class":98},[92,47629,47405],{"class":102},[92,47631,47632,47634,47636],{"class":94,"line":9696},[92,47633,47410],{"class":102},[92,47635,148],{"class":98},[92,47637,47415],{"class":102},[92,47639,47640,47642,47644],{"class":94,"line":9721},[92,47641,47420],{"class":102},[92,47643,148],{"class":98},[92,47645,47425],{"class":102},[92,47647,47648],{"class":94,"line":9744},[92,47649,47434],{"class":161},[92,47651,47652,47654,47656,47658,47660],{"class":94,"line":9768},[92,47653,47439],{"class":102},[92,47655,148],{"class":98},[92,47657,47444],{"class":102},[92,47659,687],{"class":98},[92,47661,47449],{"class":151},[92,47663,47664],{"class":94,"line":9773},[92,47665,47463],{"class":161},[92,47667,47668],{"class":94,"line":9778},[92,47669,47670],{"class":161},"            # print(mean.shape)\n",[92,47672,47673],{"class":94,"line":9783},[92,47674,47458],{"class":161},[92,47676,47677],{"class":94,"line":9792},[92,47678,2379],{"emptyLinePlaceholder":17},[92,47680,47681,47684],{"class":94,"line":9797},[92,47682,47683],{"class":98},"            try",[92,47685,3718],{"class":102},[92,47687,47688,47691,47693,47696,47698,47701,47703],{"class":94,"line":9803},[92,47689,47690],{"class":102},"                diff ",[92,47692,148],{"class":98},[92,47694,47695],{"class":102}," (normalized_image_array ",[92,47697,635],{"class":98},[92,47699,47700],{"class":102}," mean) ",[92,47702,10641],{"class":98},[92,47704,47705],{"class":151}," 2\n",[92,47707,47708,47711,47713,47716,47718,47720,47722,47724,47726,47728],{"class":94,"line":9824},[92,47709,47710],{"class":102},"                sum_squared_diff ",[92,47712,9457],{"class":98},[92,47714,47715],{"class":102}," np.sum(diff, ",[92,47717,47496],{"class":5196},[92,47719,148],{"class":98},[92,47721,103],{"class":102},[92,47723,294],{"class":151},[92,47725,12415],{"class":102},[92,47727,320],{"class":151},[92,47729,30479],{"class":102},[92,47731,47732,47735],{"class":94,"line":9830},[92,47733,47734],{"class":98},"            except",[92,47736,3718],{"class":102},[92,47738,47739,47742,47744,47746,47749],{"class":94,"line":9844},[92,47740,47741],{"class":151},"                print",[92,47743,103],{"class":102},[92,47745,155],{"class":98},[92,47747,47748],{"class":207},"\"捕获到自定义异常\"",[92,47750,109],{"class":102},[92,47752,47753],{"class":94,"line":9850},[92,47754,47755],{"class":161},"            # diff = (normalized_image_array - mean) ** 2\n",[92,47757,47758],{"class":94,"line":9877},[92,47759,47760],{"class":161},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[92,47762,47763],{"class":94,"line":9886},[92,47764,2379],{"emptyLinePlaceholder":17},[92,47766,47767,47770,47772,47775,47777],{"class":94,"line":9892},[92,47768,47769],{"class":102},"variance ",[92,47771,148],{"class":98},[92,47773,47774],{"class":102}," sum_squared_diff ",[92,47776,687],{"class":98},[92,47778,47532],{"class":102},[92,47780,47781],{"class":94,"line":9900},[92,47782,2379],{"emptyLinePlaceholder":17},[92,47784,47785,47787,47789,47792],{"class":94,"line":9905},[92,47786,30397],{"class":151},[92,47788,103],{"class":102},[92,47790,47791],{"class":207},"\"Mean:\"",[92,47793,47794],{"class":102},", mean)\n",[92,47796,47797,47799,47801,47804],{"class":94,"line":16584},[92,47798,30397],{"class":151},[92,47800,103],{"class":102},[92,47802,47803],{"class":207},"\"Variance:\"",[92,47805,47806],{"class":102},", variance)\n",[83,47808,47810],{"className":30360,"code":47809,"language":30362,"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,47811,47812,47818,47824,47834,47840,47850,47864,47874,47884,47894,47898,47908,47918,47922,47926,47934,47939,47944,47963,47967,47972,47977,47982,47987,48028,48033,48043,48048,48061,48066,48071,48076,48081,48086,48090,48095,48100,48122,48126,48158,48172,48182,48192,48196,48206,48220,48230,48240,48250,48256,48260,48264,48268,48272,48276,48284,48304,48308,48312,48316,48320,48336,48340,48344,48352,48356,48360,48368,48372,48376,48380,48388,48392,48396,48400,48408,48412,48420,48424,48432,48436,48444,48448,48456,48460,48464,48472,48476,48480,48492,48516,48530,48534,48538,48542,48550,48554,48562,48566,48574,48578,48586,48590,48598,48602,48610,48614,48626,48630,48638,48642,48650,48654,48658,48662,48666,48674,48678,48694,48698,48706,48710,48714,48718,48722,48726,48730,48734,48750,48754,48766,48770,48782,48786,48798,48802,48810,48814,48822,48826,48830,48834,48840,48844,48852,48856,48872,48876,48884,48888,48904,48916,48920,48932,48936,48940,48948,48952,48956,48964,48968,48976,48980,48988,48992,48996,49038,49080,49084,49088,49104,49108,49124,49128,49132,49140,49144,49148,49160,49198,49202,49206,49214,49218,49232,49242,49248,49254,49260,49266,49270,49274,49280,49284,49288,49296,49300,49318,49322,49326,49330,49346,49350,49354,49358,49362,49366,49386,49406,49410,49414,49418,49426,49434,49438,49454,49474,49494,49498,49503,49512,49521,49526,49531,49536,49549,49554,49563,49572,49589],{"__ignoreMap":10},[92,47813,47814,47816],{"class":94,"line":95},[92,47815,30374],{"class":98},[92,47817,31804],{"class":102},[92,47819,47820,47822],{"class":94,"line":11},[92,47821,30374],{"class":98},[92,47823,31811],{"class":102},[92,47825,47826,47828,47830,47832],{"class":94,"line":1158},[92,47827,30374],{"class":98},[92,47829,31822],{"class":102},[92,47831,31365],{"class":98},[92,47833,31827],{"class":102},[92,47835,47836,47838],{"class":94,"line":1173},[92,47837,30374],{"class":98},[92,47839,30377],{"class":102},[92,47841,47842,47844,47846,47848],{"class":94,"line":1179},[92,47843,30719],{"class":98},[92,47845,31397],{"class":102},[92,47847,30374],{"class":98},[92,47849,31844],{"class":102},[92,47851,47852,47854,47856,47858,47861],{"class":94,"line":1193},[92,47853,30719],{"class":98},[92,47855,31350],{"class":102},[92,47857,30374],{"class":98},[92,47859,47860],{"class":102}," ImageFolder ",[92,47862,47863],{"class":161},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[92,47865,47866,47868,47870,47872],{"class":94,"line":1199},[92,47867,30719],{"class":98},[92,47869,31380],{"class":102},[92,47871,30374],{"class":98},[92,47873,31385],{"class":102},[92,47875,47876,47878,47880,47882],{"class":94,"line":1290},[92,47877,30374],{"class":98},[92,47879,31397],{"class":102},[92,47881,31365],{"class":98},[92,47883,31402],{"class":102},[92,47885,47886,47888,47890,47892],{"class":94,"line":1296},[92,47887,30374],{"class":98},[92,47889,31414],{"class":102},[92,47891,31365],{"class":98},[92,47893,31419],{"class":102},[92,47895,47896],{"class":94,"line":1308},[92,47897,31889],{"class":161},[92,47899,47900,47902,47904,47906],{"class":94,"line":1591},[92,47901,30719],{"class":98},[92,47903,31896],{"class":102},[92,47905,30374],{"class":98},[92,47907,43013],{"class":102},[92,47909,47910,47912,47914,47916],{"class":94,"line":1596},[92,47911,30719],{"class":98},[92,47913,30722],{"class":102},[92,47915,30374],{"class":98},[92,47917,30727],{"class":102},[92,47919,47920],{"class":94,"line":1602},[92,47921,2379],{"emptyLinePlaceholder":17},[92,47923,47924],{"class":94,"line":1607},[92,47925,31924],{"class":161},[92,47927,47928,47930,47932],{"class":94,"line":1621},[92,47929,31929],{"class":98},[92,47931,31932],{"class":1942},[92,47933,31935],{"class":102},[92,47935,47936],{"class":94,"line":1626},[92,47937,47938],{"class":161},"    # 导入自己的数据集，并进行数据处理\n",[92,47940,47941],{"class":94,"line":1632},[92,47942,47943],{"class":161},"    # 定义数据集的路径\n",[92,47945,47946,47949,47951,47953,47955,47957,47961],{"class":94,"line":1653},[92,47947,47948],{"class":151},"    ROOT_PATH",[92,47950,148],{"class":98},[92,47952,773],{"class":98},[92,47954,354],{"class":207},[92,47956,661],{"class":151},[92,47958,47960],{"class":47959},"sA_wV","\u002Fdata\u002Ftrain",[92,47962,25115],{"class":207},[92,47964,47965],{"class":94,"line":1658},[92,47966,2379],{"emptyLinePlaceholder":17},[92,47968,47969],{"class":94,"line":1672},[92,47970,47971],{"class":161},"    # 定义归一化方法\n",[92,47973,47974],{"class":94,"line":1677},[92,47975,47976],{"class":161},"    # 这里需要先计算一下数据集的均值和方差\n",[92,47978,47979],{"class":94,"line":1706},[92,47980,47981],{"class":161},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[92,47983,47984],{"class":94,"line":1711},[92,47985,47986],{"class":161},"    # 第一个参数是均值，第二个参数是方差\n",[92,47988,47989,47992,47994,47997,48000,48002,48005,48007,48010,48013,48016,48018,48021,48023,48026],{"class":94,"line":1728},[92,47990,47991],{"class":102},"    normalize",[92,47993,148],{"class":98},[92,47995,47996],{"class":102},"transforms.Normalize([",[92,47998,47999],{"class":151},"0.162",[92,48001,481],{"class":102},[92,48003,48004],{"class":151},"0.151",[92,48006,481],{"class":102},[92,48008,48009],{"class":151},"0.138",[92,48011,48012],{"class":102},"],[",[92,48014,48015],{"class":151},"0.058",[92,48017,481],{"class":102},[92,48019,48020],{"class":151},"0.052",[92,48022,481],{"class":102},[92,48024,48025],{"class":151},"0.048",[92,48027,4636],{"class":102},[92,48029,48030],{"class":94,"line":1733},[92,48031,48032],{"class":161},"    # 定义数据集处理方法变量\n",[92,48034,48035,48038,48040],{"class":94,"line":1738},[92,48036,48037],{"class":102},"    train_transform",[92,48039,148],{"class":98},[92,48041,48042],{"class":102},"transforms.Compose([\n",[92,48044,48045],{"class":94,"line":1743},[92,48046,48047],{"class":161},"        # 调整图像大小为224*224\n",[92,48049,48050,48053,48055,48057,48059],{"class":94,"line":1757},[92,48051,48052],{"class":102},"        transforms.Resize((",[92,48054,31483],{"class":151},[92,48056,481],{"class":102},[92,48058,31483],{"class":151},[92,48060,42604],{"class":102},[92,48062,48063],{"class":94,"line":1762},[92,48064,48065],{"class":161},"        # 将图像转换为张量\n",[92,48067,48068],{"class":94,"line":2556},[92,48069,48070],{"class":102},"        transforms.ToTensor(),\n",[92,48072,48073],{"class":94,"line":2570},[92,48074,48075],{"class":102},"        normalize])\n",[92,48077,48078],{"class":94,"line":2578},[92,48079,48080],{"class":161},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[92,48082,48083],{"class":94,"line":2583},[92,48084,48085],{"class":161},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[92,48087,48088],{"class":94,"line":2589},[92,48089,2379],{"emptyLinePlaceholder":17},[92,48091,48092],{"class":94,"line":2595},[92,48093,48094],{"class":161},"    # 加载数据集\n",[92,48096,48097],{"class":94,"line":2600},[92,48098,48099],{"class":161},"    # 传入数据集路径与处理方法\n",[92,48101,48102,48104,48106,48109,48112,48114,48117,48119],{"class":94,"line":7928},[92,48103,31940],{"class":102},[92,48105,148],{"class":98},[92,48107,48108],{"class":102},"ImageFolder(",[92,48110,48111],{"class":151},"ROOT_PATH",[92,48113,481],{"class":102},[92,48115,48116],{"class":5196},"transform",[92,48118,148],{"class":98},[92,48120,48121],{"class":102},"train_transform)\n",[92,48123,48124],{"class":94,"line":7952},[92,48125,2379],{"emptyLinePlaceholder":17},[92,48127,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154,48156],{"class":94,"line":7957},[92,48129,31992],{"class":102},[92,48131,148],{"class":98},[92,48133,31997],{"class":102},[92,48135,32000],{"class":151},[92,48137,103],{"class":102},[92,48139,32005],{"class":151},[92,48141,558],{"class":98},[92,48143,7338],{"class":151},[92,48145,32012],{"class":102},[92,48147,32000],{"class":151},[92,48149,103],{"class":102},[92,48151,32019],{"class":151},[92,48153,558],{"class":98},[92,48155,7338],{"class":151},[92,48157,32026],{"class":102},[92,48159,48160,48162,48164,48166,48168,48170],{"class":94,"line":7963},[92,48161,32031],{"class":102},[92,48163,148],{"class":98},[92,48165,32036],{"class":102},[92,48167,31519],{"class":5196},[92,48169,148],{"class":98},[92,48171,31524],{"class":102},[92,48173,48174,48176,48178,48180],{"class":94,"line":7990},[92,48175,32047],{"class":5196},[92,48177,148],{"class":98},[92,48179,300],{"class":151},[92,48181,31448],{"class":102},[92,48183,48184,48186,48188,48190],{"class":94,"line":7995},[92,48185,32059],{"class":5196},[92,48187,148],{"class":98},[92,48189,31458],{"class":151},[92,48191,31448],{"class":102},[92,48193,48194],{"class":94,"line":8001},[92,48195,32070],{"class":161},[92,48197,48198,48200,48202,48204],{"class":94,"line":8013},[92,48199,32075],{"class":5196},[92,48201,148],{"class":98},[92,48203,498],{"class":151},[92,48205,109],{"class":102},[92,48207,48208,48210,48212,48214,48216,48218],{"class":94,"line":8025},[92,48209,32086],{"class":102},[92,48211,148],{"class":98},[92,48213,31516],{"class":102},[92,48215,31519],{"class":5196},[92,48217,148],{"class":98},[92,48219,32097],{"class":102},[92,48221,48222,48224,48226,48228],{"class":94,"line":8037},[92,48223,32102],{"class":5196},[92,48225,148],{"class":98},[92,48227,300],{"class":151},[92,48229,31448],{"class":102},[92,48231,48232,48234,48236,48238],{"class":94,"line":9696},[92,48233,32113],{"class":5196},[92,48235,148],{"class":98},[92,48237,31458],{"class":151},[92,48239,31448],{"class":102},[92,48241,48242,48244,48246,48248],{"class":94,"line":9721},[92,48243,32124],{"class":5196},[92,48245,148],{"class":98},[92,48247,498],{"class":151},[92,48249,109],{"class":102},[92,48251,48252,48254],{"class":94,"line":9744},[92,48253,4069],{"class":98},[92,48255,32137],{"class":102},[92,48257,48258],{"class":94,"line":9768},[92,48259,2379],{"emptyLinePlaceholder":17},[92,48261,48262],{"class":94,"line":9773},[92,48263,32146],{"class":161},[92,48265,48266],{"class":94,"line":9778},[92,48267,32151],{"class":161},[92,48269,48270],{"class":94,"line":9783},[92,48271,2379],{"emptyLinePlaceholder":17},[92,48273,48274],{"class":94,"line":9792},[92,48275,32160],{"class":161},[92,48277,48278,48280,48282],{"class":94,"line":9797},[92,48279,31929],{"class":98},[92,48281,32167],{"class":1942},[92,48283,32170],{"class":102},[92,48285,48286,48288,48290,48292,48294,48296,48298,48300,48302],{"class":94,"line":9803},[92,48287,31219],{"class":102},[92,48289,148],{"class":98},[92,48291,30433],{"class":102},[92,48293,31226],{"class":207},[92,48295,1683],{"class":98},[92,48297,31231],{"class":102},[92,48299,1680],{"class":98},[92,48301,32189],{"class":207},[92,48303,109],{"class":102},[92,48305,48306],{"class":94,"line":9824},[92,48307,2379],{"emptyLinePlaceholder":17},[92,48309,48310],{"class":94,"line":9830},[92,48311,32204],{"class":161},[92,48313,48314],{"class":94,"line":9844},[92,48315,32209],{"class":161},[92,48317,48318],{"class":94,"line":9850},[92,48319,32214],{"class":161},[92,48321,48322,48324,48326,48328,48330,48332,48334],{"class":94,"line":9877},[92,48323,32219],{"class":102},[92,48325,148],{"class":98},[92,48327,32224],{"class":102},[92,48329,32227],{"class":5196},[92,48331,148],{"class":98},[92,48333,32232],{"class":151},[92,48335,109],{"class":102},[92,48337,48338],{"class":94,"line":9886},[92,48339,2379],{"emptyLinePlaceholder":17},[92,48341,48342],{"class":94,"line":9892},[92,48343,32243],{"class":161},[92,48345,48346,48348,48350],{"class":94,"line":9900},[92,48347,32248],{"class":102},[92,48349,148],{"class":98},[92,48351,32253],{"class":102},[92,48353,48354],{"class":94,"line":9905},[92,48355,2379],{"emptyLinePlaceholder":17},[92,48357,48358],{"class":94,"line":16584},[92,48359,32262],{"class":161},[92,48361,48362,48364,48366],{"class":94,"line":16590},[92,48363,31271],{"class":102},[92,48365,148],{"class":98},[92,48367,32271],{"class":102},[92,48369,48370],{"class":94,"line":16613},[92,48371,32276],{"class":161},[92,48373,48374],{"class":94,"line":16619},[92,48375,32281],{"class":161},[92,48377,48378],{"class":94,"line":16642},[92,48379,32286],{"class":161},[92,48381,48382,48384,48386],{"class":94,"line":16656},[92,48383,32291],{"class":102},[92,48385,148],{"class":98},[92,48387,32296],{"class":102},[92,48389,48390],{"class":94,"line":16676},[92,48391,2379],{"emptyLinePlaceholder":17},[92,48393,48394],{"class":94,"line":16682},[92,48395,32309],{"class":161},[92,48397,48398],{"class":94,"line":16693},[92,48399,32314],{"class":161},[92,48401,48402,48404,48406],{"class":94,"line":16716},[92,48403,32319],{"class":102},[92,48405,148],{"class":98},[92,48407,32324],{"class":151},[92,48409,48410],{"class":94,"line":16738},[92,48411,32329],{"class":161},[92,48413,48414,48416,48418],{"class":94,"line":16743},[92,48415,32334],{"class":102},[92,48417,148],{"class":98},[92,48419,32339],{"class":102},[92,48421,48422],{"class":94,"line":16749},[92,48423,32344],{"class":161},[92,48425,48426,48428,48430],{"class":94,"line":16763},[92,48427,32349],{"class":102},[92,48429,148],{"class":98},[92,48431,32339],{"class":102},[92,48433,48434],{"class":94,"line":16776},[92,48435,32358],{"class":161},[92,48437,48438,48440,48442],{"class":94,"line":16781},[92,48439,32363],{"class":102},[92,48441,148],{"class":98},[92,48443,32339],{"class":102},[92,48445,48446],{"class":94,"line":16795},[92,48447,32372],{"class":161},[92,48449,48450,48452,48454],{"class":94,"line":16800},[92,48451,32377],{"class":102},[92,48453,148],{"class":98},[92,48455,32339],{"class":102},[92,48457,48458],{"class":94,"line":16806},[92,48459,2379],{"emptyLinePlaceholder":17},[92,48461,48462],{"class":94,"line":16811},[92,48463,32390],{"class":161},[92,48465,48466,48468,48470],{"class":94,"line":16825},[92,48467,32395],{"class":102},[92,48469,148],{"class":98},[92,48471,32400],{"class":102},[92,48473,48474],{"class":94,"line":16830},[92,48475,2379],{"emptyLinePlaceholder":17},[92,48477,48478],{"class":94,"line":16835},[92,48479,32413],{"class":161},[92,48481,48482,48484,48486,48488,48490],{"class":94,"line":16849},[92,48483,3180],{"class":98},[92,48485,32420],{"class":102},[92,48487,26025],{"class":98},[92,48489,32425],{"class":151},[92,48491,32428],{"class":102},[92,48493,48494,48496,48498,48500,48502,48504,48506,48508,48510,48512,48514],{"class":94,"line":16861},[92,48495,32433],{"class":151},[92,48497,103],{"class":102},[92,48499,32438],{"class":207},[92,48501,32441],{"class":151},[92,48503,687],{"class":207},[92,48505,32441],{"class":151},[92,48507,354],{"class":207},[92,48509,32450],{"class":102},[92,48511,635],{"class":98},[92,48513,320],{"class":151},[92,48515,30479],{"class":102},[92,48517,48518,48520,48522,48524,48526,48528],{"class":94,"line":16866},[92,48519,32433],{"class":151},[92,48521,103],{"class":102},[92,48523,32465],{"class":207},[92,48525,558],{"class":98},[92,48527,549],{"class":151},[92,48529,109],{"class":102},[92,48531,48532],{"class":94,"line":16879},[92,48533,2379],{"emptyLinePlaceholder":17},[92,48535,48536],{"class":94,"line":16884},[92,48537,32480],{"class":161},[92,48539,48540],{"class":94,"line":16889},[92,48541,32485],{"class":161},[92,48543,48544,48546,48548],{"class":94,"line":16894},[92,48545,32490],{"class":102},[92,48547,148],{"class":98},[92,48549,32324],{"class":151},[92,48551,48552],{"class":94,"line":16907},[92,48553,32499],{"class":161},[92,48555,48556,48558,48560],{"class":94,"line":16912},[92,48557,32504],{"class":102},[92,48559,148],{"class":98},[92,48561,3064],{"class":151},[92,48563,48564],{"class":94,"line":32615},[92,48565,32513],{"class":161},[92,48567,48568,48570,48572],{"class":94,"line":32621},[92,48569,32518],{"class":102},[92,48571,148],{"class":98},[92,48573,32324],{"class":151},[92,48575,48576],{"class":94,"line":32627},[92,48577,32527],{"class":161},[92,48579,48580,48582,48584],{"class":94,"line":32633},[92,48581,32532],{"class":102},[92,48583,148],{"class":98},[92,48585,3064],{"class":151},[92,48587,48588],{"class":94,"line":32639},[92,48589,32541],{"class":161},[92,48591,48592,48594,48596],{"class":94,"line":32650},[92,48593,32546],{"class":102},[92,48595,148],{"class":98},[92,48597,3064],{"class":151},[92,48599,48600],{"class":94,"line":32656},[92,48601,32555],{"class":161},[92,48603,48604,48606,48608],{"class":94,"line":32676},[92,48605,32560],{"class":102},[92,48607,148],{"class":98},[92,48609,3064],{"class":151},[92,48611,48612],{"class":94,"line":32682},[92,48613,32569],{"class":161},[92,48615,48616,48618,48620,48622,48624],{"class":94,"line":32693},[92,48617,3382],{"class":98},[92,48619,31583],{"class":102},[92,48621,26025],{"class":98},[92,48623,31588],{"class":151},[92,48625,32582],{"class":102},[92,48627,48628],{"class":94,"line":32699},[92,48629,32587],{"class":161},[92,48631,48632,48634,48636],{"class":94,"line":32705},[92,48633,32592],{"class":102},[92,48635,148],{"class":98},[92,48637,32597],{"class":102},[92,48639,48640],{"class":94,"line":32711},[92,48641,32602],{"class":161},[92,48643,48644,48646,48648],{"class":94,"line":32717},[92,48645,32607],{"class":102},[92,48647,148],{"class":98},[92,48649,32612],{"class":102},[92,48651,48652],{"class":94,"line":32723},[92,48653,32618],{"class":161},[92,48655,48656],{"class":94,"line":32729},[92,48657,32624],{"class":102},[92,48659,48660],{"class":94,"line":32735},[92,48661,32630],{"class":161},[92,48663,48664],{"class":94,"line":32755},[92,48665,32636],{"class":161},[92,48667,48668,48670,48672],{"class":94,"line":32761},[92,48669,32642],{"class":102},[92,48671,148],{"class":98},[92,48673,32647],{"class":102},[92,48675,48676],{"class":94,"line":32777},[92,48677,32653],{"class":161},[92,48679,48680,48682,48684,48686,48688,48690,48692],{"class":94,"line":32783},[92,48681,32659],{"class":102},[92,48683,148],{"class":98},[92,48685,32664],{"class":102},[92,48687,32667],{"class":5196},[92,48689,148],{"class":98},[92,48691,320],{"class":151},[92,48693,109],{"class":102},[92,48695,48696],{"class":94,"line":32797},[92,48697,32679],{"class":161},[92,48699,48700,48702,48704],{"class":94,"line":32803},[92,48701,32685],{"class":102},[92,48703,148],{"class":98},[92,48705,32690],{"class":102},[92,48707,48708],{"class":94,"line":32818},[92,48709,32696],{"class":161},[92,48711,48712],{"class":94,"line":32824},[92,48713,32702],{"class":102},[92,48715,48716],{"class":94,"line":32833},[92,48717,32708],{"class":161},[92,48719,48720],{"class":94,"line":32839},[92,48721,32714],{"class":102},[92,48723,48724],{"class":94,"line":32848},[92,48725,32720],{"class":161},[92,48727,48728],{"class":94,"line":32854},[92,48729,32726],{"class":102},[92,48731,48732],{"class":94,"line":32860},[92,48733,32732],{"class":161},[92,48735,48736,48738,48740,48742,48744,48746,48748],{"class":94,"line":32869},[92,48737,32738],{"class":102},[92,48739,9457],{"class":98},[92,48741,32743],{"class":102},[92,48743,558],{"class":98},[92,48745,32748],{"class":102},[92,48747,294],{"class":151},[92,48749,109],{"class":102},[92,48751,48752],{"class":94,"line":32875},[92,48753,32758],{"class":161},[92,48755,48756,48758,48760,48762,48764],{"class":94,"line":32886},[92,48757,32764],{"class":102},[92,48759,9457],{"class":98},[92,48761,32769],{"class":102},[92,48763,2928],{"class":98},[92,48765,32774],{"class":102},[92,48767,48768],{"class":94,"line":32892},[92,48769,32780],{"class":161},[92,48771,48772,48774,48776,48778,48780],{"class":94,"line":32911},[92,48773,32786],{"class":102},[92,48775,9457],{"class":98},[92,48777,32748],{"class":102},[92,48779,294],{"class":151},[92,48781,109],{"class":102},[92,48783,48784],{"class":94,"line":32917},[92,48785,32800],{"class":161},[92,48787,48788,48790,48792,48794,48796],{"class":94,"line":32928},[92,48789,3382],{"class":98},[92,48791,32808],{"class":102},[92,48793,26025],{"class":98},[92,48795,31588],{"class":151},[92,48797,32815],{"class":102},[92,48799,48800],{"class":94,"line":32934},[92,48801,32821],{"class":161},[92,48803,48804,48806,48808],{"class":94,"line":32954},[92,48805,32592],{"class":102},[92,48807,148],{"class":98},[92,48809,32597],{"class":102},[92,48811,48812],{"class":94,"line":32970},[92,48813,32836],{"class":161},[92,48815,48816,48818,48820],{"class":94,"line":32976},[92,48817,32607],{"class":102},[92,48819,148],{"class":98},[92,48821,32612],{"class":102},[92,48823,48824],{"class":94,"line":32990},[92,48825,32851],{"class":161},[92,48827,48828],{"class":94,"line":32996},[92,48829,32857],{"class":102},[92,48831,48832],{"class":94,"line":33002},[92,48833,36338],{"class":161},[92,48835,48836,48838],{"class":94,"line":33013},[92,48837,32863],{"class":98},[92,48839,32866],{"class":102},[92,48841,48842],{"class":94,"line":33019},[92,48843,32872],{"class":161},[92,48845,48846,48848,48850],{"class":94,"line":33025},[92,48847,36353],{"class":102},[92,48849,148],{"class":98},[92,48851,32647],{"class":102},[92,48853,48854],{"class":94,"line":33035},[92,48855,32889],{"class":161},[92,48857,48858,48860,48862,48864,48866,48868,48870],{"class":94,"line":33041},[92,48859,36366],{"class":102},[92,48861,148],{"class":98},[92,48863,32664],{"class":102},[92,48865,32667],{"class":5196},[92,48867,148],{"class":98},[92,48869,320],{"class":151},[92,48871,109],{"class":102},[92,48873,48874],{"class":94,"line":33052},[92,48875,32914],{"class":161},[92,48877,48878,48880,48882],{"class":94,"line":33058},[92,48879,36387],{"class":102},[92,48881,148],{"class":98},[92,48883,32690],{"class":102},[92,48885,48886],{"class":94,"line":33068},[92,48887,32931],{"class":161},[92,48889,48890,48892,48894,48896,48898,48900,48902],{"class":94,"line":33073},[92,48891,36400],{"class":102},[92,48893,9457],{"class":98},[92,48895,36405],{"class":102},[92,48897,558],{"class":98},[92,48899,32748],{"class":102},[92,48901,294],{"class":151},[92,48903,109],{"class":102},[92,48905,48906,48908,48910,48912,48914],{"class":94,"line":33079},[92,48907,36418],{"class":102},[92,48909,9457],{"class":98},[92,48911,32769],{"class":102},[92,48913,2928],{"class":98},[92,48915,32774],{"class":102},[92,48917,48918],{"class":94,"line":33128},[92,48919,36431],{"class":161},[92,48921,48922,48924,48926,48928,48930],{"class":94,"line":33175},[92,48923,36436],{"class":102},[92,48925,9457],{"class":98},[92,48927,32748],{"class":102},[92,48929,294],{"class":151},[92,48931,109],{"class":102},[92,48933,48934],{"class":94,"line":33180},[92,48935,32993],{"class":161},[92,48937,48938],{"class":94,"line":33186},[92,48939,32999],{"class":161},[92,48941,48942,48944,48946],{"class":94,"line":33205},[92,48943,33005],{"class":102},[92,48945,687],{"class":98},[92,48947,33010],{"class":102},[92,48949,48950],{"class":94,"line":33211},[92,48951,33016],{"class":161},[92,48953,48954],{"class":94,"line":33231},[92,48955,33022],{"class":161},[92,48957,48958,48960,48962],{"class":94,"line":33237},[92,48959,33028],{"class":102},[92,48961,687],{"class":98},[92,48963,33010],{"class":102},[92,48965,48966],{"class":94,"line":33243},[92,48967,33038],{"class":161},[92,48969,48970,48972,48974],{"class":94,"line":33253},[92,48971,33044],{"class":102},[92,48973,687],{"class":98},[92,48975,33049],{"class":102},[92,48977,48978],{"class":94,"line":33258},[92,48979,33055],{"class":161},[92,48981,48982,48984,48986],{"class":94,"line":33264},[92,48983,33061],{"class":102},[92,48985,687],{"class":98},[92,48987,33049],{"class":102},[92,48989,48990],{"class":94,"line":33280},[92,48991,2379],{"emptyLinePlaceholder":17},[92,48993,48994],{"class":94,"line":33325},[92,48995,33076],{"class":161},[92,48997,48998,49000,49002,49004,49006,49008,49010,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036],{"class":94,"line":33331},[92,48999,32433],{"class":151},[92,49001,103],{"class":102},[92,49003,3571],{"class":207},[92,49005,32441],{"class":151},[92,49007,33090],{"class":207},[92,49009,999],{"class":151},[92,49011,33095],{"class":98},[92,49013,1049],{"class":151},[92,49015,33100],{"class":207},[92,49017,999],{"class":151},[92,49019,33095],{"class":98},[92,49021,1049],{"class":151},[92,49023,3571],{"class":207},[92,49025,33111],{"class":102},[92,49027,635],{"class":98},[92,49029,320],{"class":151},[92,49031,33118],{"class":102},[92,49033,635],{"class":98},[92,49035,320],{"class":151},[92,49037,33125],{"class":102},[92,49039,49040,49042,49044,49046,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072,49074,49076,49078],{"class":94,"line":33337},[92,49041,32433],{"class":151},[92,49043,103],{"class":102},[92,49045,3571],{"class":207},[92,49047,32441],{"class":151},[92,49049,33139],{"class":207},[92,49051,999],{"class":151},[92,49053,33095],{"class":98},[92,49055,1049],{"class":151},[92,49057,33148],{"class":207},[92,49059,999],{"class":151},[92,49061,33095],{"class":98},[92,49063,1049],{"class":151},[92,49065,3571],{"class":207},[92,49067,33159],{"class":102},[92,49069,635],{"class":98},[92,49071,320],{"class":151},[92,49073,33166],{"class":102},[92,49075,635],{"class":98},[92,49077,320],{"class":151},[92,49079,33125],{"class":102},[92,49081,49082],{"class":94,"line":33343},[92,49083,2379],{"emptyLinePlaceholder":17},[92,49085,49086],{"class":94,"line":33354},[92,49087,33183],{"class":161},[92,49089,49090,49092,49094,49096,49098,49100,49102],{"class":94,"line":33360},[92,49091,2476],{"class":98},[92,49093,33191],{"class":102},[92,49095,635],{"class":98},[92,49097,320],{"class":151},[92,49099,1043],{"class":102},[92,49101,1063],{"class":98},[92,49103,33202],{"class":102},[92,49105,49106],{"class":94,"line":33366},[92,49107,33208],{"class":161},[92,49109,49110,49112,49114,49116,49118,49120,49122],{"class":94,"line":33372},[92,49111,33214],{"class":102},[92,49113,142],{"class":151},[92,49115,148],{"class":98},[92,49117,33221],{"class":102},[92,49119,635],{"class":98},[92,49121,320],{"class":151},[92,49123,33228],{"class":102},[92,49125,49126],{"class":94,"line":33390},[92,49127,33234],{"class":161},[92,49129,49130],{"class":94,"line":33404},[92,49131,33240],{"class":161},[92,49133,49134,49136,49138],{"class":94,"line":33413},[92,49135,33246],{"class":102},[92,49137,148],{"class":98},[92,49139,32296],{"class":102},[92,49141,49142],{"class":94,"line":33422},[92,49143,2379],{"emptyLinePlaceholder":17},[92,49145,49146],{"class":94,"line":33431},[92,49147,33261],{"class":161},[92,49149,49150,49152,49154,49156,49158],{"class":94,"line":33440},[92,49151,33267],{"class":102},[92,49153,148],{"class":98},[92,49155,33272],{"class":102},[92,49157,635],{"class":98},[92,49159,33277],{"class":102},[92,49161,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196],{"class":94,"line":33446},[92,49163,32433],{"class":151},[92,49165,103],{"class":102},[92,49167,33287],{"class":207},[92,49169,999],{"class":151},[92,49171,33292],{"class":98},[92,49173,1049],{"class":151},[92,49175,647],{"class":207},[92,49177,999],{"class":151},[92,49179,33292],{"class":98},[92,49181,1049],{"class":151},[92,49183,33305],{"class":207},[92,49185,33308],{"class":102},[92,49187,33311],{"class":98},[92,49189,1010],{"class":151},[92,49191,33316],{"class":102},[92,49193,431],{"class":98},[92,49195,1010],{"class":151},[92,49197,30479],{"class":102},[92,49199,49200],{"class":94,"line":33452},[92,49201,36715],{"class":161},[92,49203,49204],{"class":94,"line":33460},[92,49205,36720],{"class":161},[92,49207,49208,49210,49212],{"class":94,"line":33465},[92,49209,36725],{"class":102},[92,49211,33349],{"class":207},[92,49213,109],{"class":102},[92,49215,49216],{"class":94,"line":33471},[92,49217,33369],{"class":161},[92,49219,49220,49222,49224,49226,49228,49230],{"class":94,"line":33482},[92,49221,33375],{"class":102},[92,49223,148],{"class":98},[92,49225,33380],{"class":102},[92,49227,33383],{"class":5196},[92,49229,148],{"class":98},[92,49231,1525],{"class":102},[92,49233,49234,49236,49238,49240],{"class":94,"line":33488},[92,49235,33393],{"class":207},[92,49237,962],{"class":102},[92,49239,33398],{"class":151},[92,49241,33401],{"class":102},[92,49243,49244,49246],{"class":94,"line":33508},[92,49245,33407],{"class":207},[92,49247,33410],{"class":102},[92,49249,49250,49252],{"class":94,"line":33514},[92,49251,33416],{"class":207},[92,49253,33419],{"class":102},[92,49255,49256,49258],{"class":94,"line":33520},[92,49257,33425],{"class":207},[92,49259,33428],{"class":102},[92,49261,49262,49264],{"class":94,"line":33526},[92,49263,33434],{"class":207},[92,49265,33437],{"class":102},[92,49267,49268],{"class":94,"line":33543},[92,49269,33443],{"class":102},[92,49271,49272],{"class":94,"line":33549},[92,49273,33449],{"class":161},[92,49275,49276,49278],{"class":94,"line":33555},[92,49277,4069],{"class":98},[92,49279,33457],{"class":102},[92,49281,49282],{"class":94,"line":33561},[92,49283,2379],{"emptyLinePlaceholder":17},[92,49285,49286],{"class":94,"line":33567},[92,49287,33468],{"class":161},[92,49289,49290,49292,49294],{"class":94,"line":33573},[92,49291,31929],{"class":98},[92,49293,33476],{"class":1942},[92,49295,33479],{"class":102},[92,49297,49298],{"class":94,"line":33600},[92,49299,33485],{"class":161},[92,49301,49302,49304,49306,49308,49310,49312,49314,49316],{"class":94,"line":33624},[92,49303,33491],{"class":102},[92,49305,31675],{"class":5196},[92,49307,148],{"class":98},[92,49309,103],{"class":102},[92,49311,601],{"class":151},[92,49313,481],{"class":102},[92,49315,396],{"class":151},[92,49317,30479],{"class":102},[92,49319,49320],{"class":94,"line":33630},[92,49321,33511],{"class":161},[92,49323,49324],{"class":94,"line":33636},[92,49325,33517],{"class":161},[92,49327,49328],{"class":94,"line":33642},[92,49329,33523],{"class":161},[92,49331,49332,49334,49336,49338,49340,49342,49344],{"class":94,"line":33653},[92,49333,31709],{"class":102},[92,49335,320],{"class":151},[92,49337,481],{"class":102},[92,49339,180],{"class":151},[92,49341,481],{"class":102},[92,49343,320],{"class":151},[92,49345,109],{"class":102},[92,49347,49348],{"class":94,"line":33664},[92,49349,33546],{"class":161},[92,49351,49352],{"class":94,"line":33670},[92,49353,33552],{"class":161},[92,49355,49356],{"class":94,"line":33687},[92,49357,33558],{"class":161},[92,49359,49360],{"class":94,"line":33710},[92,49361,33564],{"class":161},[92,49363,49364],{"class":94,"line":33733},[92,49365,33570],{"class":161},[92,49367,49368,49370,49372,49374,49376,49378,49380,49382,49384],{"class":94,"line":33739},[92,49369,33576],{"class":102},[92,49371,33579],{"class":207},[92,49373,33582],{"class":102},[92,49375,33585],{"class":207},[92,49377,481],{"class":102},[92,49379,33590],{"class":5196},[92,49381,148],{"class":98},[92,49383,33595],{"class":207},[92,49385,109],{"class":102},[92,49387,49388,49390,49392,49394,49396,49398,49400,49402,49404],{"class":94,"line":33744},[92,49389,33576],{"class":102},[92,49391,33579],{"class":207},[92,49393,33607],{"class":102},[92,49395,33610],{"class":207},[92,49397,481],{"class":102},[92,49399,33590],{"class":5196},[92,49401,148],{"class":98},[92,49403,33619],{"class":207},[92,49405,109],{"class":102},[92,49407,49408],{"class":94,"line":33753},[92,49409,33627],{"class":161},[92,49411,49412],{"class":94,"line":33763},[92,49413,33633],{"class":102},[92,49415,49416],{"class":94,"line":33769},[92,49417,33639],{"class":161},[92,49419,49420,49422,49424],{"class":94,"line":33774},[92,49421,33645],{"class":102},[92,49423,33648],{"class":207},[92,49425,109],{"class":102},[92,49427,49428,49430,49432],{"class":94,"line":33780},[92,49429,33656],{"class":102},[92,49431,33659],{"class":207},[92,49433,109],{"class":102},[92,49435,49436],{"class":94,"line":33793},[92,49437,33667],{"class":161},[92,49439,49440,49442,49444,49446,49448,49450,49452],{"class":94,"line":33799},[92,49441,31709],{"class":102},[92,49443,320],{"class":151},[92,49445,481],{"class":102},[92,49447,180],{"class":151},[92,49449,481],{"class":102},[92,49451,180],{"class":151},[92,49453,109],{"class":102},[92,49455,49456,49458,49460,49462,49464,49466,49468,49470,49472],{"class":94,"line":33810},[92,49457,33576],{"class":102},[92,49459,33579],{"class":207},[92,49461,33694],{"class":102},[92,49463,33585],{"class":207},[92,49465,481],{"class":102},[92,49467,33590],{"class":5196},[92,49469,148],{"class":98},[92,49471,33705],{"class":207},[92,49473,109],{"class":102},[92,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492],{"class":94,"line":33821},[92,49477,33576],{"class":102},[92,49479,33579],{"class":207},[92,49481,33717],{"class":102},[92,49483,33610],{"class":207},[92,49485,481],{"class":102},[92,49487,33590],{"class":5196},[92,49489,148],{"class":98},[92,49491,33728],{"class":207},[92,49493,109],{"class":102},[92,49495,49496],{"class":94,"line":33840},[92,49497,33736],{"class":161},[92,49499,49501],{"class":94,"line":49500},219,[92,49502,33633],{"class":102},[92,49504,49506,49508,49510],{"class":94,"line":49505},220,[92,49507,33645],{"class":102},[92,49509,33579],{"class":207},[92,49511,109],{"class":102},[92,49513,49515,49517,49519],{"class":94,"line":49514},221,[92,49516,33656],{"class":102},[92,49518,33758],{"class":207},[92,49520,109],{"class":102},[92,49522,49524],{"class":94,"line":49523},222,[92,49525,33766],{"class":102},[92,49527,49529],{"class":94,"line":49528},223,[92,49530,2379],{"emptyLinePlaceholder":17},[92,49532,49534],{"class":94,"line":49533},224,[92,49535,33777],{"class":161},[92,49537,49539,49541,49543,49545,49547],{"class":94,"line":49538},225,[92,49540,1510],{"class":98},[92,49542,31202],{"class":151},[92,49544,2928],{"class":98},[92,49546,31207],{"class":207},[92,49548,3718],{"class":102},[92,49550,49552],{"class":94,"line":49551},226,[92,49553,33796],{"class":161},[92,49555,49557,49559,49561],{"class":94,"line":49556},227,[92,49558,44528],{"class":102},[92,49560,148],{"class":98},[92,49562,44533],{"class":102},[92,49564,49566,49568,49570],{"class":94,"line":49565},228,[92,49567,33813],{"class":102},[92,49569,148],{"class":98},[92,49571,33818],{"class":102},[92,49573,49575,49577,49579,49581,49583,49585,49587],{"class":94,"line":49574},229,[92,49576,33375],{"class":102},[92,49578,148],{"class":98},[92,49580,44550],{"class":102},[92,49582,33831],{"class":5196},[92,49584,148],{"class":98},[92,49586,1010],{"class":151},[92,49588,109],{"class":102},[92,49590,49592],{"class":94,"line":49591},230,[92,49593,33843],{"class":102},[21978,49595,49597],{"id":49596},"_242测试代码","2.4.2.测试代码",[38,49599,49600],{},"使用测试集进行测试与推理",[83,49602,49604],{"className":30360,"code":49603,"language":30362,"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,49605,49606,49612,49622,49632,49643,49653,49657,49661,49669,49674,49678,49695,49699,49703,49707,49711,49715,49747,49751,49759,49763,49775,49779,49783,49787,49791,49795,49799,49803,49807,49825,49839,49843,49853,49863,49873,49879,49883,49887,49895,49899,49915,49923,49927,49931,49939,49947,49951,49955,49959,49963,49969,49973,49983,49991,49999,50003,50007,50011,50019,50023,50039,50043,50047,50051,50063,50067,50079,50083,50087,50099,50103,50113,50117,50121,50133,50137,50145,50149,50153,50161,50165,50173,50177,50181,50185,50189,50193,50209,50217,50221,50225,50243,50249,50253,50263,50271,50279,50283,50287,50291,50295,50303,50307,50323,50327,50335,50343],{"__ignoreMap":10},[92,49607,49608,49610],{"class":94,"line":95},[92,49609,30374],{"class":98},[92,49611,30377],{"class":102},[92,49613,49614,49616,49618,49620],{"class":94,"line":11},[92,49615,30374],{"class":98},[92,49617,31397],{"class":102},[92,49619,31365],{"class":98},[92,49621,31402],{"class":102},[92,49623,49624,49626,49628,49630],{"class":94,"line":1158},[92,49625,30719],{"class":98},[92,49627,31380],{"class":102},[92,49629,30374],{"class":98},[92,49631,31385],{"class":102},[92,49633,49634,49636,49638,49640],{"class":94,"line":1173},[92,49635,30719],{"class":98},[92,49637,31350],{"class":102},[92,49639,30374],{"class":98},[92,49641,49642],{"class":102}," ImageFolder\n",[92,49644,49645,49647,49649,49651],{"class":94,"line":1179},[92,49646,30719],{"class":98},[92,49648,31896],{"class":102},[92,49650,30374],{"class":98},[92,49652,44622],{"class":102},[92,49654,49655],{"class":94,"line":1193},[92,49656,2379],{"emptyLinePlaceholder":17},[92,49658,49659],{"class":94,"line":1199},[92,49660,33933],{"class":161},[92,49662,49663,49665,49667],{"class":94,"line":1290},[92,49664,31929],{"class":98},[92,49666,33940],{"class":1942},[92,49668,31935],{"class":102},[92,49670,49671],{"class":94,"line":1296},[92,49672,49673],{"class":161},"   # 导入自己的数据集，并进行数据处理\n",[92,49675,49676],{"class":94,"line":1308},[92,49677,47943],{"class":161},[92,49679,49680,49682,49684,49686,49688,49690,49693],{"class":94,"line":1591},[92,49681,47948],{"class":151},[92,49683,148],{"class":98},[92,49685,773],{"class":98},[92,49687,354],{"class":207},[92,49689,661],{"class":151},[92,49691,49692],{"class":47959},"\u002Fdata\u002Ftest",[92,49694,25115],{"class":207},[92,49696,49697],{"class":94,"line":1596},[92,49698,2379],{"emptyLinePlaceholder":17},[92,49700,49701],{"class":94,"line":1602},[92,49702,47971],{"class":161},[92,49704,49705],{"class":94,"line":1607},[92,49706,47976],{"class":161},[92,49708,49709],{"class":94,"line":1621},[92,49710,47981],{"class":161},[92,49712,49713],{"class":94,"line":1626},[92,49714,47986],{"class":161},[92,49716,49717,49719,49721,49723,49725,49727,49729,49731,49733,49735,49737,49739,49741,49743,49745],{"class":94,"line":1632},[92,49718,47991],{"class":102},[92,49720,148],{"class":98},[92,49722,47996],{"class":102},[92,49724,47999],{"class":151},[92,49726,481],{"class":102},[92,49728,48004],{"class":151},[92,49730,481],{"class":102},[92,49732,48009],{"class":151},[92,49734,48012],{"class":102},[92,49736,48015],{"class":151},[92,49738,481],{"class":102},[92,49740,48020],{"class":151},[92,49742,481],{"class":102},[92,49744,48025],{"class":151},[92,49746,4636],{"class":102},[92,49748,49749],{"class":94,"line":1653},[92,49750,48032],{"class":161},[92,49752,49753,49755,49757],{"class":94,"line":1658},[92,49754,48037],{"class":102},[92,49756,148],{"class":98},[92,49758,48042],{"class":102},[92,49760,49761],{"class":94,"line":1672},[92,49762,48047],{"class":161},[92,49764,49765,49767,49769,49771,49773],{"class":94,"line":1677},[92,49766,48052],{"class":102},[92,49768,31483],{"class":151},[92,49770,481],{"class":102},[92,49772,31483],{"class":151},[92,49774,42604],{"class":102},[92,49776,49777],{"class":94,"line":1706},[92,49778,48065],{"class":161},[92,49780,49781],{"class":94,"line":1711},[92,49782,48070],{"class":102},[92,49784,49785],{"class":94,"line":1728},[92,49786,48075],{"class":102},[92,49788,49789],{"class":94,"line":1733},[92,49790,48080],{"class":161},[92,49792,49793],{"class":94,"line":1738},[92,49794,48085],{"class":161},[92,49796,49797],{"class":94,"line":1743},[92,49798,2379],{"emptyLinePlaceholder":17},[92,49800,49801],{"class":94,"line":1757},[92,49802,48094],{"class":161},[92,49804,49805],{"class":94,"line":1762},[92,49806,48099],{"class":161},[92,49808,49809,49811,49813,49815,49817,49819,49821,49823],{"class":94,"line":2556},[92,49810,33947],{"class":102},[92,49812,148],{"class":98},[92,49814,48108],{"class":102},[92,49816,48111],{"class":151},[92,49818,481],{"class":102},[92,49820,48116],{"class":5196},[92,49822,148],{"class":98},[92,49824,48121],{"class":102},[92,49826,49827,49829,49831,49833,49835,49837],{"class":94,"line":2570},[92,49828,34004],{"class":102},[92,49830,148],{"class":98},[92,49832,31516],{"class":102},[92,49834,31519],{"class":5196},[92,49836,148],{"class":98},[92,49838,34015],{"class":102},[92,49840,49841],{"class":94,"line":2578},[92,49842,34020],{"class":161},[92,49844,49845,49847,49849,49851],{"class":94,"line":2583},[92,49846,34025],{"class":5196},[92,49848,148],{"class":98},[92,49850,320],{"class":151},[92,49852,31448],{"class":102},[92,49854,49855,49857,49859,49861],{"class":94,"line":2589},[92,49856,34036],{"class":5196},[92,49858,148],{"class":98},[92,49860,31458],{"class":151},[92,49862,31448],{"class":102},[92,49864,49865,49867,49869,49871],{"class":94,"line":2595},[92,49866,34047],{"class":5196},[92,49868,148],{"class":98},[92,49870,294],{"class":151},[92,49872,109],{"class":102},[92,49874,49875,49877],{"class":94,"line":2600},[92,49876,4069],{"class":98},[92,49878,34060],{"class":102},[92,49880,49881],{"class":94,"line":7928},[92,49882,2379],{"emptyLinePlaceholder":17},[92,49884,49885],{"class":94,"line":7952},[92,49886,34069],{"class":161},[92,49888,49889,49891,49893],{"class":94,"line":7957},[92,49890,31929],{"class":98},[92,49892,34076],{"class":1942},[92,49894,34079],{"class":102},[92,49896,49897],{"class":94,"line":7963},[92,49898,34084],{"class":161},[92,49900,49901,49903,49905,49907,49909,49911,49913],{"class":94,"line":7990},[92,49902,31219],{"class":102},[92,49904,148],{"class":98},[92,49906,31226],{"class":207},[92,49908,1683],{"class":98},[92,49910,31231],{"class":102},[92,49912,1680],{"class":98},[92,49914,34101],{"class":207},[92,49916,49917,49919,49921],{"class":94,"line":7995},[92,49918,31271],{"class":102},[92,49920,148],{"class":98},[92,49922,32271],{"class":102},[92,49924,49925],{"class":94,"line":8001},[92,49926,2379],{"emptyLinePlaceholder":17},[92,49928,49929],{"class":94,"line":8013},[92,49930,34118],{"class":161},[92,49932,49933,49935,49937],{"class":94,"line":8025},[92,49934,34123],{"class":102},[92,49936,148],{"class":98},[92,49938,32324],{"class":151},[92,49940,49941,49943,49945],{"class":94,"line":8037},[92,49942,34132],{"class":102},[92,49944,148],{"class":98},[92,49946,3064],{"class":151},[92,49948,49949],{"class":94,"line":9696},[92,49950,2379],{"emptyLinePlaceholder":17},[92,49952,49953],{"class":94,"line":9721},[92,49954,34145],{"class":161},[92,49956,49957],{"class":94,"line":9744},[92,49958,34150],{"class":161},[92,49960,49961],{"class":94,"line":9768},[92,49962,34155],{"class":161},[92,49964,49965,49967],{"class":94,"line":9773},[92,49966,34160],{"class":98},[92,49968,32866],{"class":102},[92,49970,49971],{"class":94,"line":9778},[92,49972,34167],{"class":161},[92,49974,49975,49977,49979,49981],{"class":94,"line":9783},[92,49976,3382],{"class":98},[92,49978,34174],{"class":102},[92,49980,26025],{"class":98},[92,49982,34179],{"class":102},[92,49984,49985,49987,49989],{"class":94,"line":9792},[92,49986,34184],{"class":102},[92,49988,148],{"class":98},[92,49990,34189],{"class":102},[92,49992,49993,49995,49997],{"class":94,"line":9797},[92,49994,34194],{"class":102},[92,49996,148],{"class":98},[92,49998,34199],{"class":102},[92,50000,50001],{"class":94,"line":9803},[92,50002,34204],{"class":161},[92,50004,50005],{"class":94,"line":9824},[92,50006,32857],{"class":102},[92,50008,50009],{"class":94,"line":9830},[92,50010,34213],{"class":161},[92,50012,50013,50015,50017],{"class":94,"line":9844},[92,50014,32642],{"class":102},[92,50016,148],{"class":98},[92,50018,34222],{"class":102},[92,50020,50021],{"class":94,"line":9850},[92,50022,34227],{"class":161},[92,50024,50025,50027,50029,50031,50033,50035,50037],{"class":94,"line":9877},[92,50026,32659],{"class":102},[92,50028,148],{"class":98},[92,50030,32664],{"class":102},[92,50032,32667],{"class":5196},[92,50034,148],{"class":98},[92,50036,320],{"class":151},[92,50038,109],{"class":102},[92,50040,50041],{"class":94,"line":9886},[92,50042,34248],{"class":161},[92,50044,50045],{"class":94,"line":9892},[92,50046,34253],{"class":161},[92,50048,50049],{"class":94,"line":9900},[92,50050,34258],{"class":161},[92,50052,50053,50055,50057,50059,50061],{"class":94,"line":9905},[92,50054,34263],{"class":102},[92,50056,9457],{"class":98},[92,50058,32769],{"class":102},[92,50060,2928],{"class":98},[92,50062,34272],{"class":102},[92,50064,50065],{"class":94,"line":16584},[92,50066,34277],{"class":161},[92,50068,50069,50071,50073,50075,50077],{"class":94,"line":16590},[92,50070,34282],{"class":102},[92,50072,9457],{"class":98},[92,50074,34287],{"class":102},[92,50076,294],{"class":151},[92,50078,109],{"class":102},[92,50080,50081],{"class":94,"line":16613},[92,50082,2379],{"emptyLinePlaceholder":17},[92,50084,50085],{"class":94,"line":16619},[92,50086,34300],{"class":161},[92,50088,50089,50091,50093,50095,50097],{"class":94,"line":16642},[92,50090,34305],{"class":102},[92,50092,148],{"class":98},[92,50094,34310],{"class":102},[92,50096,687],{"class":98},[92,50098,34315],{"class":102},[92,50100,50101],{"class":94,"line":16656},[92,50102,34320],{"class":161},[92,50104,50105,50107,50109,50111],{"class":94,"line":16676},[92,50106,32433],{"class":151},[92,50108,103],{"class":102},[92,50110,34329],{"class":207},[92,50112,34332],{"class":102},[92,50114,50115],{"class":94,"line":16682},[92,50116,2379],{"emptyLinePlaceholder":17},[92,50118,50119],{"class":94,"line":16693},[92,50120,34341],{"class":161},[92,50122,50123,50125,50127,50129,50131],{"class":94,"line":16716},[92,50124,1510],{"class":98},[92,50126,31202],{"class":151},[92,50128,2928],{"class":98},[92,50130,31207],{"class":207},[92,50132,3718],{"class":102},[92,50134,50135],{"class":94,"line":16738},[92,50136,34358],{"class":161},[92,50138,50139,50141,50143],{"class":94,"line":16743},[92,50140,31271],{"class":102},[92,50142,148],{"class":98},[92,50144,44533],{"class":102},[92,50146,50147],{"class":94,"line":16749},[92,50148,34371],{"class":161},[92,50150,50151],{"class":94,"line":16763},[92,50152,34376],{"class":161},[92,50154,50155,50157,50159],{"class":94,"line":16776},[92,50156,34381],{"class":102},[92,50158,34384],{"class":207},[92,50160,30479],{"class":102},[92,50162,50163],{"class":94,"line":16781},[92,50164,34391],{"class":161},[92,50166,50167,50169,50171],{"class":94,"line":16795},[92,50168,34004],{"class":102},[92,50170,148],{"class":98},[92,50172,34400],{"class":102},[92,50174,50175],{"class":94,"line":16800},[92,50176,34405],{"class":161},[92,50178,50179],{"class":94,"line":16806},[92,50180,34410],{"class":102},[92,50182,50183],{"class":94,"line":16811},[92,50184,2379],{"emptyLinePlaceholder":17},[92,50186,50187],{"class":94,"line":16825},[92,50188,34419],{"class":161},[92,50190,50191],{"class":94,"line":16830},[92,50192,34424],{"class":161},[92,50194,50195,50197,50199,50201,50203,50205,50207],{"class":94,"line":16835},[92,50196,31219],{"class":102},[92,50198,148],{"class":98},[92,50200,31226],{"class":207},[92,50202,1683],{"class":98},[92,50204,31231],{"class":102},[92,50206,1680],{"class":98},[92,50208,34101],{"class":207},[92,50210,50211,50213,50215],{"class":94,"line":16849},[92,50212,31271],{"class":102},[92,50214,148],{"class":98},[92,50216,32271],{"class":102},[92,50218,50219],{"class":94,"line":16861},[92,50220,34453],{"class":161},[92,50222,50223],{"class":94,"line":16866},[92,50224,34458],{"class":161},[92,50226,50227,50229,50231,50233,50236,50238,50241],{"class":94,"line":16879},[92,50228,34463],{"class":102},[92,50230,148],{"class":98},[92,50232,993],{"class":102},[92,50234,50235],{"class":207},"'猫'",[92,50237,481],{"class":102},[92,50239,50240],{"class":207},"'狗'",[92,50242,33228],{"class":102},[92,50244,50245,50247],{"class":94,"line":16884},[92,50246,34160],{"class":98},[92,50248,32866],{"class":102},[92,50250,50251],{"class":94,"line":16889},[92,50252,34528],{"class":161},[92,50254,50255,50257,50259,50261],{"class":94,"line":16894},[92,50256,3382],{"class":98},[92,50258,34535],{"class":102},[92,50260,26025],{"class":98},[92,50262,34179],{"class":102},[92,50264,50265,50267,50269],{"class":94,"line":16907},[92,50266,32592],{"class":102},[92,50268,148],{"class":98},[92,50270,32597],{"class":102},[92,50272,50273,50275,50277],{"class":94,"line":16912},[92,50274,32607],{"class":102},[92,50276,148],{"class":98},[92,50278,32612],{"class":102},[92,50280,50281],{"class":94,"line":32615},[92,50282,2379],{"emptyLinePlaceholder":17},[92,50284,50285],{"class":94,"line":32621},[92,50286,34564],{"class":161},[92,50288,50289],{"class":94,"line":32627},[92,50290,32857],{"class":102},[92,50292,50293],{"class":94,"line":32633},[92,50294,34573],{"class":161},[92,50296,50297,50299,50301],{"class":94,"line":32639},[92,50298,32642],{"class":102},[92,50300,148],{"class":98},[92,50302,32647],{"class":102},[92,50304,50305],{"class":94,"line":32650},[92,50306,34586],{"class":161},[92,50308,50309,50311,50313,50315,50317,50319,50321],{"class":94,"line":32656},[92,50310,32659],{"class":102},[92,50312,148],{"class":98},[92,50314,32664],{"class":102},[92,50316,32667],{"class":5196},[92,50318,148],{"class":98},[92,50320,320],{"class":151},[92,50322,109],{"class":102},[92,50324,50325],{"class":94,"line":32676},[92,50326,34607],{"class":161},[92,50328,50329,50331,50333],{"class":94,"line":32682},[92,50330,34612],{"class":102},[92,50332,148],{"class":98},[92,50334,34617],{"class":102},[92,50336,50337,50339,50341],{"class":94,"line":32693},[92,50338,34622],{"class":102},[92,50340,148],{"class":98},[92,50342,34627],{"class":102},[92,50344,50345,50347,50349,50351,50353,50355,50357,50359],{"class":94,"line":32699},[92,50346,34632],{"class":151},[92,50348,103],{"class":102},[92,50350,34637],{"class":207},[92,50352,34640],{"class":102},[92,50354,34643],{"class":207},[92,50356,481],{"class":102},[92,50358,34648],{"class":207},[92,50360,34651],{"class":102},[5106,50362,50363],{},"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":50365},[50366,50367,50368,50369],{"id":30573,"depth":1158,"text":30574},{"id":37821,"depth":1158,"text":37822},{"id":41254,"depth":1158,"text":41255},{"id":45263,"depth":1158,"text":45264},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30565,"description":23357},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50376,"title":50377,"body":50378,"description":23357,"extension":14,"meta":50385,"navigation":17,"path":50386,"seo":50387,"stem":50388,"__hash__":50389},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50379,"toc":50383},[50380],[29,50381,50377],{"id":50382},"_3yolo模型学习",{"title":10,"searchDepth":11,"depth":11,"links":50384},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50377,"description":23357},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50391,"title":50392,"body":50393,"description":50400,"extension":14,"meta":50401,"navigation":17,"path":50403,"seo":50404,"stem":50405,"__hash__":50406},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50394,"toc":50398},[50395],[38,50396,50397],{},"yolo模型还未补充",{"title":10,"searchDepth":11,"depth":11,"links":50399},[],"深度学习学习",{"category":50402},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50392,"description":50400},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50408,"title":50409,"body":50410,"description":23357,"extension":14,"meta":50435,"navigation":17,"path":50436,"seo":50437,"stem":50438,"__hash__":50439},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50411,"toc":50433},[50412,50415,50418,50423,50430],[29,50413,50409],{"id":50414},"_1工具",[38,50416,50417],{},"提示错误插件：有问题会提前报错",[38,50419,50420],{},[1441,50421],{"alt":10,"src":50422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[38,50424,50425],{},[341,50426,50429],{"href":50427,"rel":50428},"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",[23846],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[38,50431,50432],{},"alt键加上下箭头可以实现语句的移动",{"title":10,"searchDepth":11,"depth":11,"links":50434},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50409,"description":23357},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50441,"title":50442,"body":50443,"description":23357,"extension":14,"meta":53307,"navigation":17,"path":53308,"seo":53309,"stem":53310,"__hash__":53311},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50444,"toc":53258},[50445,50448,50452,50456,50461,50464,50469,50473,50480,50485,50492,50497,50504,50509,50513,50518,50521,50525,50530,50534,50539,50542,50545,50548,50551,50554,50557,50560,50563,50568,50573,50578,50582,50585,50588,50592,50597,50600,50608,50613,50630,50638,50643,50648,50653,50658,50663,50666,50671,50676,50680,50689,50694,50699,50703,50708,50711,50715,50720,50728,50733,50738,50741,50746,50751,50756,50759,50762,50765,50770,50775,50778,50783,50786,50791,50794,50797,50800,50805,50808,50811,50826,50831,50836,50841,50844,50847,50850,50864,50867,50872,50877,50880,50883,50886,50889,50892,50895,50898,50902,50906,50911,50915,50918,50923,50928,50931,50936,50939,50943,50948,50951,50954,50957,50960,50963,50966,50969,50972,50975,50979,50984,50989,50994,50997,51000,51004,51009,51012,51016,51019,51022,51027,51030,51033,51037,51041,51044,51049,51054,51057,51086,51091,51096,51101,51106,51110,51115,51119,51124,51127,51131,51135,51140,51144,51149,51154,51158,51163,51166,51168,51171,51176,51180,51185,51189,51193,51198,51203,51208,51213,51217,51222,51227,51232,51235,51238,51243,51246,51251,51256,51261,51266,51270,52077,52081,52424,52429,52432,52435,52438,52441,52444,52447,52450,52453,52455,52458,52460,52463,52467,52472,52475,52478,52481,52485,52490,52495,52515,52518,52522,52527,52532,52549,52553,52582,52586,52608,52610,52649,52657,52663,52667,52670,52673,52678,52683,52686,52689,52692,52697,52702,52705,52708,52711,52714,52717,52720,52723,52726,52729,52732,52735,52737,52740,52743,52746,52749,52752,52755,52758,52761,52765,52770,52773,52778,52781,52784,52787,52790,52793,52796,52799,52801,52804,52807,52810,52813,52816,52819,52823,52826,52835,52838,52843,52846,52851,52854,52857,52860,52863,52866,52869,52872,52876,52880,52883,52886,52891,52896,52901,52905,52910,52915,52918,52921,52924,52927,52930,52935,52938,52943,52945,52950,52953,52957,52962,52965,52968,52973,52977,52980,52985,52988,52991,53020,53025,53028,53031,53034,53037,53040,53044,53047,53133,53137,53140,53145,53150,53157,53160,53163,53166,53169,53172,53177,53182,53185,53188,53191,53194,53197,53200,53203,53206,53209,53211,53214,53218,53223,53228,53233,53236,53241,53246,53249,53252,53255],[29,50446,50442],{"id":50447},"_2基础语法",[33,50449,50451],{"id":50450},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[63,50453,50455],{"id":50454},"_211-js组成","2.1.1 js组成",[46,50457,50458],{},[49,50459,50460],{},"js是编程语言，html和css不是编程语言，是标记语言",[38,50462,50463],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[46,50465,50466],{"start":11},[49,50467,50468],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[63,50470,50472],{"id":50471},"_212-js书写位置","2.1.2 js书写位置",[46,50474,50475],{},[49,50476,50477],{},[252,50478,50479],{},"内部 JavaScript",[38,50481,50482],{},[1441,50483],{"alt":10,"src":50484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[46,50486,50487],{"start":11},[49,50488,50489],{},[252,50490,50491],{},"外部 JavaScript",[38,50493,50494],{},[1441,50495],{"alt":10,"src":50496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[46,50498,50499],{"start":1158},[49,50500,50501],{},[252,50502,50503],{},"内联 JavaScript",[38,50505,50506],{},[1441,50507],{"alt":10,"src":50508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[63,50510,50512],{"id":50511},"_213-javascript注释","2.1.3 JavaScript注释",[38,50514,50515],{},[1441,50516],{"alt":10,"src":50517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[38,50519,50520],{},"alt+shift+a一定要记住！",[63,50522,50524],{"id":50523},"_214-javascript结束符","2.1.4 JavaScript结束符",[38,50526,50527],{},[1441,50528],{"alt":10,"src":50529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[63,50531,50533],{"id":50532},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[46,50535,50536],{},[49,50537,50538],{},"输出语法：",[38,50540,50541],{},"①document.write('要出的内容')",[38,50543,50544],{},"向body内输出内容；",[38,50546,50547],{},"如果输出的内容写的是标签，也会被解析cheng",[38,50549,50550],{},"②alert('要出的内容')",[38,50552,50553],{},"页面弹出警告对话框",[38,50555,50556],{},"③console.log('控制台打印')",[38,50558,50559],{},"控制台输出语法，程序员调试使用",[38,50561,50562],{},"输入log就行，自动生成：",[38,50564,50565],{},[1441,50566],{"alt":10,"src":50567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[46,50569,50570],{"start":11},[49,50571,50572],{},"输入语法：",[38,50574,50575],{},[1441,50576],{"alt":10,"src":50577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[63,50579,50581],{"id":50580},"_2116-字面量","21.1.6 字面量",[38,50583,50584],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[38,50586,50587],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[33,50589,50591],{"id":50590},"_22-变量","2.2 变量",[46,50593,50594],{},[49,50595,50596],{},"变量声明",[38,50598,50599],{},"let 变量名",[1110,50601,50602,50605],{},[49,50603,50604],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[49,50606,50607],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[46,50609,50610],{"start":11},[49,50611,50612],{},"变量赋值",[83,50614,50618],{"className":50615,"code":50616,"language":50617,"meta":10,"style":10},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[89,50619,50620,50625],{"__ignoreMap":10},[92,50621,50622],{"class":94,"line":95},[92,50623,50624],{"class":102},"let age\n",[92,50626,50627],{"class":94,"line":11},[92,50628,50629],{"class":102},"age=18\n",[46,50631,50632,50635],{"start":1158},[49,50633,50634],{},"连这些（变量的初始化）：let age=18",[49,50636,50637],{},"更新变量",[38,50639,50640],{},[1441,50641],{"alt":10,"src":50642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[46,50644,50645],{"start":1179},[49,50646,50647],{},"声明多个变量",[38,50649,50650],{},[1441,50651],{"alt":10,"src":50652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[46,50654,50655],{"start":1193},[49,50656,50657],{},"变量命名规则与规范",[38,50659,50660],{},[1441,50661],{"alt":10,"src":50662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[38,50664,50665],{},"遵守小驼峰！",[46,50667,50668],{"start":1199},[49,50669,50670],{},"变量拓展-let和var的区别",[38,50672,50673],{},[1441,50674],{"alt":10,"src":50675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[33,50677,50679],{"id":50678},"_23-数组","2.3 数组",[83,50681,50683],{"className":50615,"code":50682,"language":50617,"meta":10,"style":10},"let arr = []\n",[89,50684,50685],{"__ignoreMap":10},[92,50686,50687],{"class":94,"line":95},[92,50688,50682],{"class":102},[38,50690,50691],{},[1441,50692],{"alt":10,"src":50693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[38,50695,50696],{},[1441,50697],{"alt":10,"src":50698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[33,50700,50702],{"id":50701},"_24-常量","2.4 常量",[38,50704,50705],{},[1441,50706],{"alt":10,"src":50707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[38,50709,50710],{},"const — 类似于 let ，但是变量的值无法被修改",[33,50712,50714],{"id":50713},"_25-数据类型","2.5 数据类型",[38,50716,50717],{},[1441,50718],{"alt":10,"src":50719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[46,50721,50722,50725],{},[49,50723,50724],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[49,50726,50727],{},"算数运算符：",[38,50729,50730],{},[1441,50731],{"alt":10,"src":50732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[46,50734,50735],{"start":1158},[49,50736,50737],{},"数字类型（Number）",[38,50739,50740],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[38,50742,50743],{},[1441,50744],{"alt":10,"src":50745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[46,50747,50748],{"start":1173},[49,50749,50750],{},"字符串类型（string）",[38,50752,50753],{},[1441,50754],{"alt":10,"src":50755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[38,50757,50758],{},"反引号也是可以使用的",[38,50760,50761],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[38,50763,50764],{},"例如：document.write(\"我今年\"+age+\"岁\")",[46,50766,50767],{"start":1179},[49,50768,50769],{},"模板字符串",[38,50771,50772],{},[1441,50773],{"alt":10,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[38,50776,50777],{},"类似于python的字符串格式化",[46,50779,50780],{"start":1193},[49,50781,50782],{},"布尔类型",[38,50784,50785],{},"true 和 false",[46,50787,50788],{"start":1199},[49,50789,50790],{},"未定义类型（underfined）",[38,50792,50793],{},"表示没有赋值",[38,50795,50796],{},"未定义类型是比较特殊的类型，只有一个值undefined",[38,50798,50799],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[46,50801,50802],{"start":1290},[49,50803,50804],{},"null（空类型）",[38,50806,50807],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[38,50809,50810],{},"赋值了，但是内容为空",[83,50812,50814],{"className":50615,"code":50813,"language":50617,"meta":10,"style":10},"typeof null\n输出的是'object'，是一个对象数据类型\n",[89,50815,50816,50821],{"__ignoreMap":10},[92,50817,50818],{"class":94,"line":95},[92,50819,50820],{"class":102},"typeof null\n",[92,50822,50823],{"class":94,"line":11},[92,50824,50825],{"class":102},"输出的是'object'，是一个对象数据类型\n",[46,50827,50828],{"start":1296},[49,50829,50830],{},"控制台检测数据类型",[38,50832,50833],{},[1441,50834],{"alt":10,"src":50835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[46,50837,50838],{"start":1308},[49,50839,50840],{},"类型转换",[38,50842,50843],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[38,50845,50846],{},"转换方式：隐式转换和显示转换",[38,50848,50849],{},"①隐式转换",[1110,50851,50852,50855,50858,50861],{},[49,50853,50854],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[49,50856,50857],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[49,50859,50860],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[49,50862,50863],{},"任何数据和字符串相加结果都是字符串",[38,50865,50866],{},"②显示转换",[38,50868,50869],{},[1441,50870],{"alt":10,"src":50871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[38,50873,50874],{},[1441,50875],{"alt":10,"src":50876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[38,50878,50879],{},"在输入的时候要用好隐式转换，简单写起来",[38,50881,50882],{},"let num = +prompt(’请输入数字：‘)",[38,50884,50885],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[38,50887,50888],{},"console.log(parseInt('12.333px'))",[38,50890,50891],{},"输出为：12",[38,50893,50894],{},"console.log(parseInt('a'a'a12.333px'))",[38,50896,50897],{},"输出：NaN",[33,50899,50901],{"id":50900},"_26-运算符","2.6 运算符",[63,50903,50905],{"id":50904},"_261-赋值运算符","2.6.1 赋值运算符",[38,50907,50908],{},[1441,50909],{"alt":10,"src":50910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[63,50912,50914],{"id":50913},"_262-一元运算符","2.6.2 一元运算符",[38,50916,50917],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[38,50919,50920],{},[1441,50921],{"alt":10,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[38,50924,50925],{},[1441,50926],{"alt":10,"src":50927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[38,50929,50930],{},"两者的区别：",[38,50932,50933],{},[1441,50934],{"alt":10,"src":50935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[38,50937,50938],{},"前置先自加；后置后加，代码执行完之后再加",[63,50940,50942],{"id":50941},"_263-比较运算符","2.6.3 比较运算符",[38,50944,50945],{},[1441,50946],{"alt":10,"src":50947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[38,50949,50950],{},"比较运算符也有隐式转换",[38,50952,50953],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[38,50955,50956],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[38,50958,50959],{},"要使用三等，开发的时候",[38,50961,50962],{},"NaN不等于任何人，包括它自己",[38,50964,50965],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[38,50967,50968],{},"7\u002F10=0.7",[38,50970,50971],{},"最后：0.5+0.2=0.7",[38,50973,50974],{},"字符串比较，比较的是字符对应的ASCII码",[63,50976,50978],{"id":50977},"_264-逻辑运算符","2.6.4 逻辑运算符",[38,50980,50981],{},[1441,50982],{"alt":10,"src":50983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[38,50985,50986],{},[1441,50987],{"alt":10,"src":50988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[38,50990,50991],{},[1441,50992],{"alt":10,"src":50993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[38,50995,50996],{},"上述题目选D",[38,50998,50999],{},"与真2假1；或真1假2",[63,51001,51003],{"id":51002},"_265-运算符优先级","2.6.5 运算符优先级",[38,51005,51006],{},[1441,51007],{"alt":10,"src":51008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[38,51010,51011],{},"先算逻辑与，后算逻辑或",[33,51013,51015],{"id":51014},"_27-语句","2.7 语句",[38,51017,51018],{},"表达式：是可以被求值的代码，会有结果给我们",[38,51020,51021],{},"语句：语句是可以被执行的代码，例如prompt()",[38,51023,51024],{},[1441,51025],{"alt":10,"src":51026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[38,51028,51029],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[38,51031,51032],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[63,51034,51036],{"id":51035},"_271-分支语句","2.7.1 分支语句",[21978,51038,51040],{"id":51039},"_2711-if分支语句","2.7.1.1 if分支语句",[38,51042,51043],{},"if语句单行简单的话，可以不写{}，写在一行就行",[46,51045,51046],{},[49,51047,51048],{},"单分支语句",[38,51050,51051],{},[1441,51052],{"alt":10,"src":51053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[38,51055,51056],{},"除了0，所有数字都为真",[83,51058,51060],{"className":50615,"code":51059,"language":50617,"meta":10,"style":10},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[89,51061,51062,51067,51072,51077,51081],{"__ignoreMap":10},[92,51063,51064],{"class":94,"line":95},[92,51065,51066],{"class":102},"if（0) {\n",[92,51068,51069],{"class":94,"line":11},[92,51070,51071],{"class":102},"    let a=1\n",[92,51073,51074],{"class":94,"line":1158},[92,51075,51076],{"class":102},"    alert(typeof a)\n",[92,51078,51079],{"class":94,"line":1173},[92,51080,1544],{"class":102},[92,51082,51083],{"class":94,"line":1179},[92,51084,51085],{"class":102},"不输出，括号为假\n",[46,51087,51088],{"start":11},[49,51089,51090],{},"双分支语句",[38,51092,51093],{},[1441,51094],{"alt":10,"src":51095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[46,51097,51098],{"start":1158},[49,51099,51100],{},"多分支语句",[38,51102,51103],{},[1441,51104],{"alt":10,"src":51105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21978,51107,51109],{"id":51108},"_2712-三元运算符","2.7.1.2 三元运算符",[38,51111,51112],{},[1441,51113],{"alt":10,"src":51114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21978,51116,51118],{"id":51117},"_2713-switch语句","2.7.1.3 switch语句",[38,51120,51121],{},[1441,51122],{"alt":10,"src":51123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[38,51125,51126],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[63,51128,51130],{"id":51129},"_272-循环语句","2.7.2 循环语句",[21978,51132,51134],{"id":51133},"_2721-断点演示","2.7.2.1 断点演示",[38,51136,51137],{},[1441,51138],{"alt":10,"src":51139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21978,51141,51143],{"id":51142},"_2722-while循环","2.7.2.2 while循环",[38,51145,51146],{},[1441,51147],{"alt":10,"src":51148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[38,51150,51151],{},[1441,51152],{"alt":10,"src":51153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21978,51155,51157],{"id":51156},"_2723-for循环","2.7.2.3 for循环",[38,51159,51160],{},[1441,51161],{"alt":10,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[38,51164,51165],{},"for(;;) {",[38,51167,1049],{},[38,51169,51170],{},"表示无限循环",[38,51172,51173],{},[1441,51174],{"alt":10,"src":51175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21978,51177,51179],{"id":51178},"_2724-循环的退出","2.7.2.4 循环的退出",[38,51181,51182],{},[1441,51183],{"alt":10,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[33,51186,51188],{"id":51187},"_28-数组","2.8 数组",[63,51190,51192],{"id":51191},"_281-基础认识","2.8.1 基础认识",[38,51194,51195],{},[1441,51196],{"alt":10,"src":51197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[38,51199,51200],{},[1441,51201],{"alt":10,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[38,51204,51205],{},[1441,51206],{"alt":10,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[38,51209,51210],{},[1441,51211],{"alt":10,"src":51212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[63,51214,51216],{"id":51215},"_282-操作数组","2.8.2 操作数组",[38,51218,51219],{},[1441,51220],{"alt":10,"src":51221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[46,51223,51224],{},[49,51225,51226],{},"添加元素",[38,51228,51229],{},[1441,51230],{"alt":10,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[38,51233,51234],{},"console.log(arr.push('green'))",[38,51236,51237],{},"输出结果：为新数组的长度",[38,51239,51240],{},[1441,51241],{"alt":10,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[38,51244,51245],{},"push用的非常多，一定要记住",[46,51247,51248],{},[49,51249,51250],{},"删除元素",[38,51252,51253],{},[1441,51254],{"alt":10,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[38,51257,51258],{},[1441,51259],{"alt":10,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[38,51262,51263],{},[1441,51264],{"alt":10,"src":51265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[63,51267,51269],{"id":51268},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[83,51271,51273],{"className":50615,"code":51272,"language":50617,"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,51274,51275,51290,51306,51310,51319,51337,51361,51383,51397,51405,51412,51424,51435,51439,51443,51450,51462,51477,51490,51509,51526,51541,51553,51565,51577,51581,51585,51596,51606,51618,51630,51642,51653,51657,51661,51673,51677,51691,51695,51699,51710,51724,51736,51750,51754,51763,51772,51776,51785,51789,51798,51803,51808,51821,51849,51854,51859,51884,51889,51893,51898,51903,51918,51922,51927,51957,51969,51985,52001,52015,52020,52027,52031,52036,52049,52057,52065,52069],{"__ignoreMap":10},[92,51276,51277,51280,51284,51287],{"class":94,"line":95},[92,51278,51279],{"class":102},"\u003C!",[92,51281,51283],{"class":51282},"s9eBZ","DOCTYPE",[92,51285,51286],{"class":1942}," html",[92,51288,51289],{"class":102},">\n",[92,51291,51292,51294,51296,51299,51301,51304],{"class":94,"line":11},[92,51293,1013],{"class":102},[92,51295,50617],{"class":51282},[92,51297,51298],{"class":1942}," lang",[92,51300,148],{"class":102},[92,51302,51303],{"class":207},"\"en\"",[92,51305,51289],{"class":102},[92,51307,51308],{"class":94,"line":1158},[92,51309,2379],{"emptyLinePlaceholder":17},[92,51311,51312,51314,51317],{"class":94,"line":1173},[92,51313,1013],{"class":102},[92,51315,51316],{"class":51282},"head",[92,51318,51289],{"class":102},[92,51320,51321,51324,51327,51330,51332,51335],{"class":94,"line":1179},[92,51322,51323],{"class":102},"    \u003C",[92,51325,51326],{"class":51282},"meta",[92,51328,51329],{"class":1942}," charset",[92,51331,148],{"class":102},[92,51333,51334],{"class":207},"\"UTF-8\"",[92,51336,51289],{"class":102},[92,51338,51339,51341,51343,51346,51348,51351,51354,51356,51359],{"class":94,"line":1193},[92,51340,51323],{"class":102},[92,51342,51326],{"class":51282},[92,51344,51345],{"class":1942}," http-equiv",[92,51347,148],{"class":102},[92,51349,51350],{"class":207},"\"X-UA-Compatible\"",[92,51352,51353],{"class":1942}," content",[92,51355,148],{"class":102},[92,51357,51358],{"class":207},"\"IE=edge\"",[92,51360,51289],{"class":102},[92,51362,51363,51365,51367,51369,51371,51374,51376,51378,51381],{"class":94,"line":1199},[92,51364,51323],{"class":102},[92,51366,51326],{"class":51282},[92,51368,14900],{"class":1942},[92,51370,148],{"class":102},[92,51372,51373],{"class":207},"\"viewport\"",[92,51375,51353],{"class":1942},[92,51377,148],{"class":102},[92,51379,51380],{"class":207},"\"width=device-width, initial-scale=1.0\"",[92,51382,51289],{"class":102},[92,51384,51385,51387,51390,51393,51395],{"class":94,"line":1290},[92,51386,51323],{"class":102},[92,51388,51389],{"class":51282},"title",[92,51391,51392],{"class":102},">Document\u003C\u002F",[92,51394,51389],{"class":51282},[92,51396,51289],{"class":102},[92,51398,51399,51401,51403],{"class":94,"line":1296},[92,51400,51323],{"class":102},[92,51402,5106],{"class":51282},[92,51404,51289],{"class":102},[92,51406,51407,51410],{"class":94,"line":1308},[92,51408,51409],{"class":51282},"        *",[92,51411,15552],{"class":102},[92,51413,51414,51417,51420,51422],{"class":94,"line":1591},[92,51415,51416],{"class":151},"            margin",[92,51418,51419],{"class":102},": ",[92,51421,294],{"class":151},[92,51423,1269],{"class":102},[92,51425,51426,51429,51431,51433],{"class":94,"line":1596},[92,51427,51428],{"class":151},"            padding",[92,51430,51419],{"class":102},[92,51432,294],{"class":151},[92,51434,1269],{"class":102},[92,51436,51437],{"class":94,"line":1602},[92,51438,2508],{"class":102},[92,51440,51441],{"class":94,"line":1607},[92,51442,2379],{"emptyLinePlaceholder":17},[92,51444,51445,51448],{"class":94,"line":1621},[92,51446,51447],{"class":1942},"        .box",[92,51449,15552],{"class":102},[92,51451,51452,51455,51457,51460],{"class":94,"line":1626},[92,51453,51454],{"class":151},"            display",[92,51456,51419],{"class":102},[92,51458,51459],{"class":151},"flex",[92,51461,1269],{"class":102},[92,51463,51464,51467,51469,51472,51475],{"class":94,"line":1632},[92,51465,51466],{"class":151},"            width",[92,51468,51419],{"class":102},[92,51470,51471],{"class":151},"700",[92,51473,51474],{"class":98},"px",[92,51476,1269],{"class":102},[92,51478,51479,51482,51484,51486,51488],{"class":94,"line":1653},[92,51480,51481],{"class":151},"            height",[92,51483,51419],{"class":102},[92,51485,3952],{"class":151},[92,51487,51474],{"class":98},[92,51489,1269],{"class":102},[92,51491,51492,51495,51497,51499,51501,51504,51507],{"class":94,"line":1658},[92,51493,51494],{"class":151},"            border-left",[92,51496,51419],{"class":102},[92,51498,320],{"class":151},[92,51500,51474],{"class":98},[92,51502,51503],{"class":151}," solid",[92,51505,51506],{"class":151}," pink",[92,51508,1269],{"class":102},[92,51510,51511,51514,51516,51518,51520,51522,51524],{"class":94,"line":1672},[92,51512,51513],{"class":151},"            border-bottom",[92,51515,51419],{"class":102},[92,51517,320],{"class":151},[92,51519,51474],{"class":98},[92,51521,51503],{"class":151},[92,51523,51506],{"class":151},[92,51525,1269],{"class":102},[92,51527,51528,51530,51532,51534,51536,51539],{"class":94,"line":1677},[92,51529,51416],{"class":151},[92,51531,51419],{"class":102},[92,51533,759],{"class":151},[92,51535,51474],{"class":98},[92,51537,51538],{"class":151}," auto",[92,51540,1269],{"class":102},[92,51542,51543,51546,51548,51551],{"class":94,"line":1706},[92,51544,51545],{"class":151},"            justify-content",[92,51547,51419],{"class":102},[92,51549,51550],{"class":151},"space-around",[92,51552,1269],{"class":102},[92,51554,51555,51558,51560,51563],{"class":94,"line":1711},[92,51556,51557],{"class":151},"            align-items",[92,51559,51419],{"class":102},[92,51561,51562],{"class":151},"flex-end",[92,51564,1269],{"class":102},[92,51566,51567,51570,51572,51575],{"class":94,"line":1728},[92,51568,51569],{"class":151},"            text-align",[92,51571,51419],{"class":102},[92,51573,51574],{"class":151},"center",[92,51576,1269],{"class":102},[92,51578,51579],{"class":94,"line":1733},[92,51580,2508],{"class":102},[92,51582,51583],{"class":94,"line":1738},[92,51584,2379],{"emptyLinePlaceholder":17},[92,51586,51587,51589,51591,51594],{"class":94,"line":1743},[92,51588,51447],{"class":1942},[92,51590,1063],{"class":98},[92,51592,51593],{"class":51282},"div",[92,51595,15552],{"class":102},[92,51597,51598,51600,51602,51604],{"class":94,"line":1757},[92,51599,51454],{"class":151},[92,51601,51419],{"class":102},[92,51603,51459],{"class":151},[92,51605,1269],{"class":102},[92,51607,51608,51610,51612,51614,51616],{"class":94,"line":1762},[92,51609,51466],{"class":151},[92,51611,51419],{"class":102},[92,51613,759],{"class":151},[92,51615,51474],{"class":98},[92,51617,1269],{"class":102},[92,51619,51620,51623,51625,51628],{"class":94,"line":2556},[92,51621,51622],{"class":151},"            background-color",[92,51624,51419],{"class":102},[92,51626,51627],{"class":151},"pink",[92,51629,1269],{"class":102},[92,51631,51632,51635,51637,51640],{"class":94,"line":2570},[92,51633,51634],{"class":151},"            flex-direction",[92,51636,51419],{"class":102},[92,51638,51639],{"class":151},"column",[92,51641,1269],{"class":102},[92,51643,51644,51646,51648,51651],{"class":94,"line":2578},[92,51645,51545],{"class":151},[92,51647,51419],{"class":102},[92,51649,51650],{"class":151},"space-between",[92,51652,1269],{"class":102},[92,51654,51655],{"class":94,"line":2583},[92,51656,2508],{"class":102},[92,51658,51659],{"class":94,"line":2589},[92,51660,2379],{"emptyLinePlaceholder":17},[92,51662,51663,51665,51668,51671],{"class":94,"line":2595},[92,51664,51447],{"class":1942},[92,51666,51667],{"class":51282}," div",[92,51669,51670],{"class":51282}," span",[92,51672,15552],{"class":102},[92,51674,51675],{"class":94,"line":2600},[92,51676,2379],{"emptyLinePlaceholder":17},[92,51678,51679,51682,51684,51687,51689],{"class":94,"line":7928},[92,51680,51681],{"class":151},"            margin-top",[92,51683,51419],{"class":102},[92,51685,51686],{"class":151},"-20",[92,51688,51474],{"class":98},[92,51690,1269],{"class":102},[92,51692,51693],{"class":94,"line":7952},[92,51694,2508],{"class":102},[92,51696,51697],{"class":94,"line":7957},[92,51698,2379],{"emptyLinePlaceholder":17},[92,51700,51701,51703,51705,51708],{"class":94,"line":7963},[92,51702,51447],{"class":1942},[92,51704,51667],{"class":51282},[92,51706,51707],{"class":51282}," h4",[92,51709,15552],{"class":102},[92,51711,51712,51715,51717,51720,51722],{"class":94,"line":7990},[92,51713,51714],{"class":151},"            margin-bottom",[92,51716,51419],{"class":102},[92,51718,51719],{"class":151},"-35",[92,51721,51474],{"class":98},[92,51723,1269],{"class":102},[92,51725,51726,51728,51730,51732,51734],{"class":94,"line":7995},[92,51727,51466],{"class":151},[92,51729,51419],{"class":102},[92,51731,459],{"class":151},[92,51733,51474],{"class":98},[92,51735,1269],{"class":102},[92,51737,51738,51741,51743,51746,51748],{"class":94,"line":8001},[92,51739,51740],{"class":151},"            margin-left",[92,51742,51419],{"class":102},[92,51744,51745],{"class":151},"-10",[92,51747,51474],{"class":98},[92,51749,1269],{"class":102},[92,51751,51752],{"class":94,"line":8013},[92,51753,2508],{"class":102},[92,51755,51756,51759,51761],{"class":94,"line":8025},[92,51757,51758],{"class":102},"    \u003C\u002F",[92,51760,5106],{"class":51282},[92,51762,51289],{"class":102},[92,51764,51765,51768,51770],{"class":94,"line":8037},[92,51766,51767],{"class":102},"\u003C\u002F",[92,51769,51316],{"class":51282},[92,51771,51289],{"class":102},[92,51773,51774],{"class":94,"line":9696},[92,51775,2379],{"emptyLinePlaceholder":17},[92,51777,51778,51780,51783],{"class":94,"line":9721},[92,51779,1013],{"class":102},[92,51781,51782],{"class":51282},"body",[92,51784,51289],{"class":102},[92,51786,51787],{"class":94,"line":9744},[92,51788,2379],{"emptyLinePlaceholder":17},[92,51790,51791,51793,51796],{"class":94,"line":9768},[92,51792,51323],{"class":102},[92,51794,51795],{"class":51282},"script",[92,51797,51289],{"class":102},[92,51799,51800],{"class":94,"line":9773},[92,51801,51802],{"class":161},"        \u002F\u002F 1. 四次弹框效果\n",[92,51804,51805],{"class":94,"line":9778},[92,51806,51807],{"class":161},"        \u002F\u002F 声明一个新的数组\n",[92,51809,51810,51813,51816,51818],{"class":94,"line":9783},[92,51811,51812],{"class":98},"        let",[92,51814,51815],{"class":102}," arr ",[92,51817,148],{"class":98},[92,51819,51820],{"class":102}," []\n",[92,51822,51823,51825,51827,51830,51832,51834,51836,51838,51840,51843,51845,51847],{"class":94,"line":9792},[92,51824,3382],{"class":98},[92,51826,1637],{"class":102},[92,51828,51829],{"class":98},"let",[92,51831,9418],{"class":102},[92,51833,148],{"class":98},[92,51835,25100],{"class":151},[92,51837,9425],{"class":102},[92,51839,1567],{"class":98},[92,51841,51842],{"class":151}," 4",[92,51844,3193],{"class":102},[92,51846,2271],{"class":98},[92,51848,12422],{"class":102},[92,51850,51851],{"class":94,"line":9797},[92,51852,51853],{"class":161},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[92,51855,51856],{"class":94,"line":9803},[92,51857,51858],{"class":161},"            \u002F\u002F arr.push(num)\n",[92,51860,51861,51864,51867,51869,51872,51874,51877,51879,51882],{"class":94,"line":9824},[92,51862,51863],{"class":102},"            arr.",[92,51865,51866],{"class":1942},"push",[92,51868,103],{"class":102},[92,51870,51871],{"class":1942},"prompt",[92,51873,103],{"class":102},[92,51875,51876],{"class":207},"`请输入第${",[92,51878,544],{"class":102},[92,51880,51881],{"class":207},"}季度的数据:`",[92,51883,30479],{"class":102},[92,51885,51886],{"class":94,"line":9830},[92,51887,51888],{"class":161},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[92,51890,51891],{"class":94,"line":9844},[92,51892,2508],{"class":102},[92,51894,51895],{"class":94,"line":9850},[92,51896,51897],{"class":161},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[92,51899,51900],{"class":94,"line":9877},[92,51901,51902],{"class":161},"        \u002F\u002F 盒子开头\n",[92,51904,51905,51908,51911,51913,51916],{"class":94,"line":9886},[92,51906,51907],{"class":102},"        document.",[92,51909,51910],{"class":1942},"write",[92,51912,103],{"class":102},[92,51914,51915],{"class":207},"` \u003Cdiv class=\"box\">`",[92,51917,109],{"class":102},[92,51919,51920],{"class":94,"line":9892},[92,51921,2379],{"emptyLinePlaceholder":17},[92,51923,51924],{"class":94,"line":9900},[92,51925,51926],{"class":161},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[92,51928,51929,51931,51933,51935,51937,51939,51941,51943,51945,51948,51951,51953,51955],{"class":94,"line":9905},[92,51930,3382],{"class":98},[92,51932,1637],{"class":102},[92,51934,51829],{"class":98},[92,51936,9418],{"class":102},[92,51938,148],{"class":98},[92,51940,4072],{"class":151},[92,51942,9425],{"class":102},[92,51944,1013],{"class":98},[92,51946,51947],{"class":102}," arr.",[92,51949,51950],{"class":151},"length",[92,51952,3193],{"class":102},[92,51954,2271],{"class":98},[92,51956,12422],{"class":102},[92,51958,51959,51962,51964,51966],{"class":94,"line":16584},[92,51960,51961],{"class":102},"            document.",[92,51963,51910],{"class":1942},[92,51965,103],{"class":102},[92,51967,51968],{"class":207},"`\n",[92,51970,51971,51974,51976,51978,51980,51982],{"class":94,"line":16590},[92,51972,51973],{"class":207},"              \u003Cdiv style=\"height: ${",[92,51975,3859],{"class":102},[92,51977,993],{"class":207},[92,51979,544],{"class":102},[92,51981,1043],{"class":207},[92,51983,51984],{"class":207},"}px;\">\n",[92,51986,51987,51990,51992,51994,51996,51998],{"class":94,"line":16613},[92,51988,51989],{"class":207},"                \u003Cspan>${",[92,51991,3859],{"class":102},[92,51993,993],{"class":207},[92,51995,544],{"class":102},[92,51997,1043],{"class":207},[92,51999,52000],{"class":207},"}\u003C\u002Fspan>\n",[92,52002,52003,52006,52008,52010,52012],{"class":94,"line":16619},[92,52004,52005],{"class":207},"                \u003Ch4>第${",[92,52007,544],{"class":102},[92,52009,45548],{"class":98},[92,52011,25100],{"class":151},[92,52013,52014],{"class":207},"}季度\u003C\u002Fh4>\n",[92,52016,52017],{"class":94,"line":16642},[92,52018,52019],{"class":207},"              \u003C\u002Fdiv>          \n",[92,52021,52022,52025],{"class":94,"line":16656},[92,52023,52024],{"class":207},"            `",[92,52026,109],{"class":102},[92,52028,52029],{"class":94,"line":16676},[92,52030,2508],{"class":102},[92,52032,52033],{"class":94,"line":16682},[92,52034,52035],{"class":161},"        \u002F\u002F 盒子结尾\n",[92,52037,52038,52040,52042,52044,52047],{"class":94,"line":16693},[92,52039,51907],{"class":102},[92,52041,51910],{"class":1942},[92,52043,103],{"class":102},[92,52045,52046],{"class":207},"` \u003C\u002Fdiv>`",[92,52048,109],{"class":102},[92,52050,52051,52053,52055],{"class":94,"line":16716},[92,52052,51758],{"class":102},[92,52054,51795],{"class":51282},[92,52056,51289],{"class":102},[92,52058,52059,52061,52063],{"class":94,"line":16738},[92,52060,51767],{"class":102},[92,52062,51782],{"class":51282},[92,52064,51289],{"class":102},[92,52066,52067],{"class":94,"line":16743},[92,52068,2379],{"emptyLinePlaceholder":17},[92,52070,52071,52073,52075],{"class":94,"line":16749},[92,52072,51767],{"class":102},[92,52074,50617],{"class":51282},[92,52076,51289],{"class":102},[63,52078,52080],{"id":52079},"_284-冒泡排序","2.8.4 冒泡排序",[83,52082,52084],{"className":50615,"code":52083,"language":50617,"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,52085,52086,52096,52110,52114,52122,52137,52157,52169,52177,52181,52189,52197,52229,52262,52299,52304,52323,52328,52341,52356,52372,52376,52381,52385,52395,52404,52412,52416],{"__ignoreMap":10},[92,52087,52088,52090,52092,52094],{"class":94,"line":95},[92,52089,51279],{"class":102},[92,52091,51283],{"class":51282},[92,52093,51286],{"class":1942},[92,52095,51289],{"class":102},[92,52097,52098,52100,52102,52104,52106,52108],{"class":94,"line":11},[92,52099,1013],{"class":102},[92,52101,50617],{"class":51282},[92,52103,51298],{"class":1942},[92,52105,148],{"class":102},[92,52107,51303],{"class":207},[92,52109,51289],{"class":102},[92,52111,52112],{"class":94,"line":1158},[92,52113,2379],{"emptyLinePlaceholder":17},[92,52115,52116,52118,52120],{"class":94,"line":1173},[92,52117,1013],{"class":102},[92,52119,51316],{"class":51282},[92,52121,51289],{"class":102},[92,52123,52124,52127,52129,52131,52133,52135],{"class":94,"line":1179},[92,52125,52126],{"class":102},"  \u003C",[92,52128,51326],{"class":51282},[92,52130,51329],{"class":1942},[92,52132,148],{"class":102},[92,52134,51334],{"class":207},[92,52136,51289],{"class":102},[92,52138,52139,52141,52143,52145,52147,52149,52151,52153,52155],{"class":94,"line":1193},[92,52140,52126],{"class":102},[92,52142,51326],{"class":51282},[92,52144,14900],{"class":1942},[92,52146,148],{"class":102},[92,52148,51373],{"class":207},[92,52150,51353],{"class":1942},[92,52152,148],{"class":102},[92,52154,51380],{"class":207},[92,52156,51289],{"class":102},[92,52158,52159,52161,52163,52165,52167],{"class":94,"line":1199},[92,52160,52126],{"class":102},[92,52162,51389],{"class":51282},[92,52164,51392],{"class":102},[92,52166,51389],{"class":51282},[92,52168,51289],{"class":102},[92,52170,52171,52173,52175],{"class":94,"line":1290},[92,52172,51767],{"class":102},[92,52174,51316],{"class":51282},[92,52176,51289],{"class":102},[92,52178,52179],{"class":94,"line":1296},[92,52180,2379],{"emptyLinePlaceholder":17},[92,52182,52183,52185,52187],{"class":94,"line":1308},[92,52184,1013],{"class":102},[92,52186,51782],{"class":51282},[92,52188,51289],{"class":102},[92,52190,52191,52193,52195],{"class":94,"line":1591},[92,52192,52126],{"class":102},[92,52194,51795],{"class":51282},[92,52196,51289],{"class":102},[92,52198,52199,52202,52204,52206,52209,52211,52213,52215,52217,52219,52221,52223,52225,52227],{"class":94,"line":1596},[92,52200,52201],{"class":98},"    let",[92,52203,51815],{"class":102},[92,52205,148],{"class":98},[92,52207,52208],{"class":102}," [",[92,52210,422],{"class":151},[92,52212,12415],{"class":102},[92,52214,396],{"class":151},[92,52216,12415],{"class":102},[92,52218,174],{"class":151},[92,52220,12415],{"class":102},[92,52222,180],{"class":151},[92,52224,12415],{"class":102},[92,52226,320],{"class":151},[92,52228,33228],{"class":102},[92,52230,52231,52233,52235,52237,52239,52241,52243,52245,52247,52249,52251,52254,52256,52258,52260],{"class":94,"line":1602},[92,52232,3180],{"class":98},[92,52234,1637],{"class":102},[92,52236,51829],{"class":98},[92,52238,9418],{"class":102},[92,52240,148],{"class":98},[92,52242,4072],{"class":151},[92,52244,9425],{"class":102},[92,52246,1013],{"class":98},[92,52248,51947],{"class":102},[92,52250,51950],{"class":151},[92,52252,52253],{"class":98}," -",[92,52255,25100],{"class":151},[92,52257,3193],{"class":102},[92,52259,2271],{"class":98},[92,52261,12422],{"class":102},[92,52263,52264,52267,52269,52271,52273,52275,52277,52279,52281,52283,52285,52287,52289,52291,52293,52295,52297],{"class":94,"line":1607},[92,52265,52266],{"class":98},"      for",[92,52268,1637],{"class":102},[92,52270,51829],{"class":98},[92,52272,9480],{"class":102},[92,52274,148],{"class":98},[92,52276,4072],{"class":151},[92,52278,9487],{"class":102},[92,52280,1013],{"class":98},[92,52282,51947],{"class":102},[92,52284,51950],{"class":151},[92,52286,52253],{"class":98},[92,52288,9418],{"class":102},[92,52290,635],{"class":98},[92,52292,25100],{"class":151},[92,52294,9494],{"class":102},[92,52296,2271],{"class":98},[92,52298,12422],{"class":102},[92,52300,52301],{"class":94,"line":1621},[92,52302,52303],{"class":161},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[92,52305,52306,52308,52311,52313,52316,52318,52320],{"class":94,"line":1626},[92,52307,2476],{"class":98},[92,52309,52310],{"class":102}," (arr[j] ",[92,52312,1063],{"class":98},[92,52314,52315],{"class":102}," arr[j ",[92,52317,584],{"class":98},[92,52319,25100],{"class":151},[92,52321,52322],{"class":102},"]) {\n",[92,52324,52325],{"class":94,"line":1632},[92,52326,52327],{"class":161},"          \u002F\u002F 交换两个变量\n",[92,52329,52330,52333,52336,52338],{"class":94,"line":1653},[92,52331,52332],{"class":98},"          let",[92,52334,52335],{"class":102}," tmp ",[92,52337,148],{"class":98},[92,52339,52340],{"class":102}," arr[j]\n",[92,52342,52343,52346,52348,52350,52352,52354],{"class":94,"line":1658},[92,52344,52345],{"class":102},"          arr[j] ",[92,52347,148],{"class":98},[92,52349,52315],{"class":102},[92,52351,584],{"class":98},[92,52353,25100],{"class":151},[92,52355,33228],{"class":102},[92,52357,52358,52361,52363,52365,52367,52369],{"class":94,"line":1672},[92,52359,52360],{"class":102},"          arr[j ",[92,52362,584],{"class":98},[92,52364,25100],{"class":151},[92,52366,4422],{"class":102},[92,52368,148],{"class":98},[92,52370,52371],{"class":102}," tmp\n",[92,52373,52374],{"class":94,"line":1677},[92,52375,2508],{"class":102},[92,52377,52378],{"class":94,"line":1706},[92,52379,52380],{"class":102},"      }\n",[92,52382,52383],{"class":94,"line":1711},[92,52384,2166],{"class":102},[92,52386,52387,52390,52392],{"class":94,"line":1728},[92,52388,52389],{"class":102},"    document.",[92,52391,51910],{"class":1942},[92,52393,52394],{"class":102},"(arr)\n",[92,52396,52397,52400,52402],{"class":94,"line":1733},[92,52398,52399],{"class":102},"  \u003C\u002F",[92,52401,51795],{"class":51282},[92,52403,51289],{"class":102},[92,52405,52406,52408,52410],{"class":94,"line":1738},[92,52407,51767],{"class":102},[92,52409,51782],{"class":51282},[92,52411,51289],{"class":102},[92,52413,52414],{"class":94,"line":1743},[92,52415,2379],{"emptyLinePlaceholder":17},[92,52417,52418,52420,52422],{"class":94,"line":1757},[92,52419,51767],{"class":102},[92,52421,50617],{"class":51282},[92,52423,51289],{"class":102},[38,52425,52426],{},[1441,52427],{"alt":10,"src":52428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[38,52430,52431],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[38,52433,52434],{},"let arr = [4, 2, 5, 1, 3]",[38,52436,52437],{},"\u002F\u002F 1.升序排列写法",[38,52439,52440],{},"arr.sort(function (a, b) {",[38,52442,52443],{},"return a - b",[38,52445,52446],{},"})",[38,52448,52449],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[38,52451,52452],{},"\u002F\u002F 降序排列写法",[38,52454,52440],{},[38,52456,52457],{},"return b - a",[38,52459,52446],{},[38,52461,52462],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[33,52464,52466],{"id":52465},"_29-函数","2.9 函数",[38,52468,52469],{},[1441,52470],{"alt":10,"src":52471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[38,52473,52474],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[38,52476,52477],{},"函数的声明用function",[38,52479,52480],{},"函数里边可以嵌套函数",[63,52482,52484],{"id":52483},"_291-函数传参","2.9.1 函数传参",[38,52486,52487],{},[1441,52488],{"alt":10,"src":52489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[38,52491,52492],{},[1441,52493],{"alt":10,"src":52494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1110,52496,52497,52500,52503,52506,52509,52512],{},[49,52498,52499],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[49,52501,52502],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[49,52504,52505],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[49,52507,52508],{},"开发中尽量保持形参和实参个数一致",[49,52510,52511],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[49,52513,52514],{},"形参只在函数中有用，所以不需要进行声明这个变量",[38,52516,52517],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[63,52519,52521],{"id":52520},"_292-函数的返回值","2.9.2 函数的返回值",[38,52523,52524],{},[1441,52525],{"alt":10,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[38,52528,52529],{},[1441,52530],{"alt":10,"src":52531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1110,52533,52534,52537,52540,52543,52546],{},[49,52535,52536],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[49,52538,52539],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[49,52541,52542],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[49,52544,52545],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[49,52547,52548],{},"断点调试:进入函数内部看执行过程F11",[63,52550,52552],{"id":52551},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[83,52554,52556],{"className":50615,"code":52555,"language":50617,"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,52557,52558,52563,52568,52572,52577],{"__ignoreMap":10},[92,52559,52560],{"class":94,"line":95},[92,52561,52562],{"class":102},"    function fn(a, b) {\n",[92,52564,52565],{"class":94,"line":11},[92,52566,52567],{"class":102},"      console.log(a + b);\n",[92,52569,52570],{"class":94,"line":1158},[92,52571,2166],{"class":102},[92,52573,52574],{"class":94,"line":1173},[92,52575,52576],{"class":102},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[92,52578,52579],{"class":94,"line":1179},[92,52580,52581],{"class":102},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[63,52583,52585],{"id":52584},"_294-作用域","2.9.4 作用域",[1110,52587,52588,52594,52599,52602,52605],{},[49,52589,52590,52591],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[252,52592,52593],{},"作用域",[49,52595,52596],{},[252,52597,52598],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[49,52600,52601],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[49,52603,52604],{},"函数内部可以直接所使用全局变量",[49,52606,52607],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[38,52609,14613],{},[83,52611,52613],{"className":50615,"code":52612,"language":50617,"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,52614,52615,52620,52625,52629,52634,52639,52644],{"__ignoreMap":10},[92,52616,52617],{"class":94,"line":95},[92,52618,52619],{"class":102},"    function fun() {\n",[92,52621,52622],{"class":94,"line":11},[92,52623,52624],{"class":102},"      num = 10\n",[92,52626,52627],{"class":94,"line":1158},[92,52628,2166],{"class":102},[92,52630,52631],{"class":94,"line":1173},[92,52632,52633],{"class":102},"    fun()\n",[92,52635,52636],{"class":94,"line":1179},[92,52637,52638],{"class":102},"    console.log(num)\n",[92,52640,52641],{"class":94,"line":1193},[92,52642,52643],{"class":102},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[92,52645,52646],{"class":94,"line":1199},[92,52647,52648],{"class":102},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1110,52650,52651,52654],{},[49,52652,52653],{},"函数内部的形参可以看做是局部变量",[49,52655,52656],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[38,52658,52659,52660],{},"变量访问原则： ",[252,52661,52662],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[63,52664,52666],{"id":52665},"_295-匿名函数","2.9.5 匿名函数",[38,52668,52669],{},"函数可以分为具名函数和匿名函数",[38,52671,52672],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[46,52674,52675],{},[49,52676,52677],{},"函数表达式",[38,52679,52680],{},[1441,52681],{"alt":10,"src":52682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[38,52684,52685],{},"里边也可以写参数",[38,52687,52688],{},"具名函数调用位置可以随意调整；",[38,52690,52691],{},"匿名函数函数表达式形式只能在声明后才可以使用",[46,52693,52694],{"start":11},[49,52695,52696],{},"立即执行函数",[38,52698,52699],{},[1441,52700],{"alt":10,"src":52701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[38,52703,52704],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[38,52706,52707],{},"写法：两个小括号，然后在第一个小括号中写function",[38,52709,52710],{},"(function () {})();",[38,52712,52713],{},"不要落下最后的;",[38,52715,52716],{},"立即执行函数必须要加;",[38,52718,52719],{},"分号写前写后都没问题",[38,52721,52722],{},"写前：",[38,52724,52725],{},"(function() {})()",[38,52727,52728],{},";(function () {})();",[38,52730,52731],{},"写后:",[38,52733,52734],{},"(function() {})();",[38,52736,52710],{},[38,52738,52739],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[38,52741,52742],{},"还有一种写法：",[38,52744,52745],{},"(function(){}());",[38,52747,52748],{},"或者:",[38,52750,52751],{},"!function(){}();",[38,52753,52754],{},"立即执行函数有时候也是可以加名字的：",[38,52756,52757],{},"(function flexible(window,document) {}(window,document));",[38,52759,52760],{},"省一些调用方法",[63,52762,52764],{"id":52763},"_296-逻辑中断","2.9.6 逻辑中断!!!",[38,52766,52767],{},[1441,52768],{"alt":10,"src":52769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[38,52771,52772],{},"这样就不用非得给x,y初始化了",[38,52774,52775],{},[1441,52776],{"alt":10,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[38,52779,52780],{},"代码执行时先看左边",[38,52782,52783],{},"例如：console.log(false && 3+5)",[38,52785,52786],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[38,52788,52789],{},"&&都是真时，就返回最后一个真值",[38,52791,52792],{},"console.log(11 && 22)",[38,52794,52795],{},"输出22",[38,52797,52798],{},"逻辑与：遇真则真",[38,52800,14613],{},[38,52802,52803],{},"let age=1",[38,52805,52806],{},"console.log(11 || age++)",[38,52808,52809],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[38,52811,52812],{},"console.log(11 || 22)",[38,52814,52815],{},"||逻辑或遇到真就直接输出，输出结果为11",[38,52817,52818],{},"||如果都是假的话，就取最后一个假的值了",[63,52820,52822],{"id":52821},"_297-转换为boolean型","2.9.7 转换为Boolean型",[38,52824,52825],{},"显示转换：",[38,52827,52828,52831,52832],{},[252,52829,52830],{},"记忆","： ",[252,52833,52834],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[38,52836,52837],{},"空字符串为假，其他字符串全为真",[38,52839,52840],{},[1441,52841],{"alt":10,"src":52842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[38,52844,52845],{},"隐式转换：",[38,52847,52848],{},[1441,52849],{"alt":10,"src":52850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[38,52852,52853],{},"隐式转换:",[38,52855,52856],{},"null+3=3",[38,52858,52859],{},"undefined+3=NaN",[38,52861,52862],{},"null==undefined 输出true,他两个都当0看",[38,52864,52865],{},"null===undefined 输出false",[38,52867,52868],{},"undefined做任何操作都是NaN",[38,52870,52871],{},"NaN不等于NaN，NaN表示计算错误",[33,52873,52875],{"id":52874},"_210-对象","2.10 对象",[63,52877,52879],{"id":52878},"_2101-对象的介绍","2.10.1 对象的介绍",[38,52881,52882],{},"对象也是一种数据类型，里边的数据是无序的",[38,52884,52885],{},"对象由属性和方法组成",[38,52887,52888],{},[1441,52889],{"alt":10,"src":52890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[38,52892,52893],{},[1441,52894],{"alt":10,"src":52895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[38,52897,52898],{},[1441,52899],{"alt":10,"src":52900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[63,52902,52904],{"id":52903},"_2102-对象属性","2.10.2 对象属性",[38,52906,52907],{},[1441,52908],{"alt":10,"src":52909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[46,52911,52912],{},[49,52913,52914],{},"查询对象",[38,52916,52917],{},"对象名.属性 goods.uname",[38,52919,52920],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[38,52922,52923],{},"不带字符串的属性名也可以使用 对象名['属性名']",[38,52925,52926],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[38,52928,52929],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[46,52931,52932],{"start":11},[49,52933,52934],{},"重新赋值",[38,52936,52937],{},"对象名.属性=新值",[46,52939,52940],{"start":1158},[49,52941,52942],{},"增加新数据",[38,52944,52937],{},[46,52946,52947],{"start":1173},[49,52948,52949],{},"删除对象中的属性",[38,52951,52952],{},"delete 对象名.属性",[63,52954,52956],{"id":52955},"_2103-对象方法","2.10.3 对象方法",[38,52958,52959],{},[1441,52960],{"alt":10,"src":52961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[38,52963,52964],{},"后边跟的是匿名函数",[38,52966,52967],{},"对象外面的叫函数；对象内部的叫方法",[38,52969,52970],{},[1441,52971],{"alt":10,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[63,52974,52976],{"id":52975},"_2104-遍历对象","2.10.4 遍历对象",[38,52978,52979],{},"理解为加括号的python字典遍历",[38,52981,52982],{},[1441,52983],{"alt":10,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[38,52986,52987],{},"k是字符串类型",[38,52989,52990],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[83,52992,52994],{"className":50615,"code":52993,"language":50617,"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,52995,52996,53001,53006,53011,53016],{"__ignoreMap":10},[92,52997,52998],{"class":94,"line":95},[92,52999,53000],{"class":102},"   let arr = [1, 2, 3]\n",[92,53002,53003],{"class":94,"line":11},[92,53004,53005],{"class":102},"    for (let k in arr) {\n",[92,53007,53008],{"class":94,"line":1158},[92,53009,53010],{"class":102},"      console.log(k)\n",[92,53012,53013],{"class":94,"line":1173},[92,53014,53015],{"class":102},"      console.log(arr[k])\n",[92,53017,53018],{"class":94,"line":1179},[92,53019,2166],{"class":102},[38,53021,53022],{},[1441,53023],{"alt":10,"src":53024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[38,53026,53027],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[38,53029,53030],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[38,53032,53033],{},"for in 得到的k是属性名",[51795,53035,53036],{},"\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,53038,53039],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[63,53041,53043],{"id":53042},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[38,53045,53046],{},"数组中放对象信息",[83,53048,53052],{"className":53049,"code":53050,"language":53051,"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,53053,53054,53062,53067,53072,53077,53082,53087,53092,53097,53102,53107,53112,53117,53121,53125],{"__ignoreMap":10},[92,53055,53056,53058,53060],{"class":94,"line":95},[92,53057,1013],{"class":102},[92,53059,51795],{"class":51282},[92,53061,51289],{"class":102},[92,53063,53064],{"class":94,"line":11},[92,53065,53066],{"class":102},"    let students = [\n",[92,53068,53069],{"class":94,"line":1158},[92,53070,53071],{"class":102},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[92,53073,53074],{"class":94,"line":1173},[92,53075,53076],{"class":102},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[92,53078,53079],{"class":94,"line":1179},[92,53080,53081],{"class":102},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[92,53083,53084],{"class":94,"line":1193},[92,53085,53086],{"class":102},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[92,53088,53089],{"class":94,"line":1199},[92,53090,53091],{"class":102},"    ]\n",[92,53093,53094],{"class":94,"line":1290},[92,53095,53096],{"class":102},"    for (let i = 0; i \u003C students.length; i++) {\n",[92,53098,53099],{"class":94,"line":1296},[92,53100,53101],{"class":102},"      for (let k in students[i]) {\n",[92,53103,53104],{"class":94,"line":1308},[92,53105,53106],{"class":102},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[92,53108,53109],{"class":94,"line":1591},[92,53110,53111],{"class":102},"        \u002F\u002F输出每个人的名字：\n",[92,53113,53114],{"class":94,"line":1596},[92,53115,53116],{"class":102},"        \u002F\u002Fconsole.log(students[i].name)\n",[92,53118,53119],{"class":94,"line":1602},[92,53120,52380],{"class":102},[92,53122,53123],{"class":94,"line":1607},[92,53124,2166],{"class":102},[92,53126,53127,53129,53131],{"class":94,"line":1621},[92,53128,52399],{"class":102},[92,53130,51795],{"class":51282},[92,53132,51289],{"class":102},[63,53134,53136],{"id":53135},"_2106-内置对象","2.10.6 内置对象",[38,53138,53139],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[46,53141,53142],{},[49,53143,53144],{},"数学对象Math",[38,53146,53147],{},[1441,53148],{"alt":10,"src":53149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[38,53151,53152],{},[341,53153,53156],{"href":53154,"rel":53155},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23846],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[38,53158,53159],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[38,53161,53162],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[38,53164,53165],{},"数组不可以使用Math中的max,min来求最大值与最小值",[38,53167,53168],{},"null是一个空对象，可以认为：null类似于let obj={}",[38,53170,53171],{},"null属于对象数据类型",[46,53173,53174],{"start":11},[49,53175,53176],{},"生成任意范围随机数",[38,53178,53179],{},[1441,53180],{"alt":10,"src":53181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[38,53183,53184],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[38,53186,53187],{},"乘以几就取不到几",[38,53189,53190],{},"取数组中的随机元素：",[38,53192,53193],{},"let arr = ['red', 'green', 'blue']",[38,53195,53196],{},"let random = Math.floor(Math.random() * arr.length)",[38,53198,53199],{},"console.log(arr[random])",[38,53201,53202],{},"这个函数得到的是全闭区间",[38,53204,53205],{},"function getRandom(N, M) {",[38,53207,53208],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[38,53210,1049],{},[38,53212,53213],{},"console.log(getRandom(4, 8))",[63,53215,53217],{"id":53216},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[38,53219,53220],{},[1441,53221],{"alt":10,"src":53222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[38,53224,53225],{},[1441,53226],{"alt":10,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[38,53229,53230],{},[1441,53231],{"alt":10,"src":53232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[38,53234,53235],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[38,53237,53238],{},[1441,53239],{"alt":10,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[38,53242,53243],{},[1441,53244],{"alt":10,"src":53245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[38,53247,53248],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[38,53250,53251],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[38,53253,53254],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5106,53256,53257],{},"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":53259},[53260,53268,53269,53270,53271,53272,53279,53283,53289,53298],{"id":50450,"depth":11,"text":50451,"children":53261},[53262,53263,53264,53265,53266,53267],{"id":50454,"depth":1158,"text":50455},{"id":50471,"depth":1158,"text":50472},{"id":50511,"depth":1158,"text":50512},{"id":50523,"depth":1158,"text":50524},{"id":50532,"depth":1158,"text":50533},{"id":50580,"depth":1158,"text":50581},{"id":50590,"depth":11,"text":50591},{"id":50678,"depth":11,"text":50679},{"id":50701,"depth":11,"text":50702},{"id":50713,"depth":11,"text":50714},{"id":50900,"depth":11,"text":50901,"children":53273},[53274,53275,53276,53277,53278],{"id":50904,"depth":1158,"text":50905},{"id":50913,"depth":1158,"text":50914},{"id":50941,"depth":1158,"text":50942},{"id":50977,"depth":1158,"text":50978},{"id":51002,"depth":1158,"text":51003},{"id":51014,"depth":11,"text":51015,"children":53280},[53281,53282],{"id":51035,"depth":1158,"text":51036},{"id":51129,"depth":1158,"text":51130},{"id":51187,"depth":11,"text":51188,"children":53284},[53285,53286,53287,53288],{"id":51191,"depth":1158,"text":51192},{"id":51215,"depth":1158,"text":51216},{"id":51268,"depth":1158,"text":51269},{"id":52079,"depth":1158,"text":52080},{"id":52465,"depth":11,"text":52466,"children":53290},[53291,53292,53293,53294,53295,53296,53297],{"id":52483,"depth":1158,"text":52484},{"id":52520,"depth":1158,"text":52521},{"id":52551,"depth":1158,"text":52552},{"id":52584,"depth":1158,"text":52585},{"id":52665,"depth":1158,"text":52666},{"id":52763,"depth":1158,"text":52764},{"id":52821,"depth":1158,"text":52822},{"id":52874,"depth":11,"text":52875,"children":53299},[53300,53301,53302,53303,53304,53305,53306],{"id":52878,"depth":1158,"text":52879},{"id":52903,"depth":1158,"text":52904},{"id":52955,"depth":1158,"text":52956},{"id":52975,"depth":1158,"text":52976},{"id":53042,"depth":1158,"text":53043},{"id":53135,"depth":1158,"text":53136},{"id":53216,"depth":1158,"text":53217},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50442,"description":23357},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53313,"title":53314,"body":53315,"description":23357,"extension":14,"meta":76655,"navigation":17,"path":76656,"seo":76657,"stem":76658,"__hash__":76659},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53316,"toc":76595},[53317,53320,53323,53326,53331,53334,53337,53340,53344,53348,53354,53359,53367,53374,53377,53381,53386,53391,53396,53399,53402,53413,53416,53420,53423,53426,53431,53436,53441,53444,53447,53539,53542,53547,53550,53555,53558,53561,53566,53569,53574,53578,53581,53595,53599,53604,53607,53610,53614,53619,53622,53626,53630,53635,53639,53644,53647,53650,53653,53656,53659,53662,53667,53672,53700,53703,53706,53709,53714,53717,53720,53723,53726,53730,53759,53763,53768,53773,53776,53779,53782,53787,53902,53907,53912,54073,54078,54081,54085,54090,54095,54098,54101,54104,54107,54110,54113,54116,54119,54122,54125,54128,54131,54134,54137,54139,54142,54145,54148,54153,54157,54554,54557,54563,54567,54572,55854,55859,55862,55865,55868,55873,57069,57073,57079,57084,57087,57092,57097,57101,57105,57110,57113,57118,57121,57124,57128,58036,58039,58043,58264,58267,58270,58273,58499,58502,58726,58729,58733,58738,58741,58744,58972,58975,59008,59011,59015,59020,59024,59027,59030,59033,59036,59039,59042,59045,59050,60330,60334,60337,61430,61434,61437,61440,61443,61446,61450,61453,61456,61458,61466,62947,62951,62954,62957,62960,63169,63172,63176,63180,63185,63190,63193,63196,63201,63205,63210,63213,63322,63326,63331,63336,63339,63342,63346,63351,63356,63361,63364,63367,63378,63381,63386,63391,63394,63397,63470,63474,63479,63482,63484,63495,63499,63504,64830,64833,64836,64839,64841,64844,64847,64850,64853,64856,64859,64862,64865,64868,64871,64874,64877,64879,64881,64884,64888,65982,65985,65988,66004,66018,66021,66026,66032,66037,66041,66045,66050,66054,66059,66501,66506,66509,66513,66518,66521,66524,66528,66533,66537,66542,66547,66551,66556,66561,66564,66569,66574,66578,66583,66588,66692,66695,66699,66704,67070,67073,67076,67079,67082,67085,67088,67091,67094,68390,68394,68399,68404,68407,68410,68413,68416,68418,68423,68428,68431,68435,68440,68445,68450,68453,68456,68459,68462,68465,68470,68473,68477,68482,68487,68491,68496,68499,68504,68507,68510,68513,68516,68519,68524,68527,68530,68533,68536,68540,68545,68548,68552,68557,68560,68563,68567,68596,68599,68603,68607,68612,68616,68621,68624,68627,68630,68633,68636,68639,68642,68645,68648,68651,68654,68657,68660,68663,68667,68672,68677,68680,68684,68688,68693,68696,68700,68703,68706,68711,68716,68721,68726,68731,68734,68737,68742,68747,68751,68756,68759,68764,68767,68770,68773,68776,68781,68784,68793,68797,68802,68805,68808,68812,68815,68820,68824,68827,68833,68839,68843,68869,68872,70433,70436,70932,70935,70940,70945,70950,70954,70959,70964,70969,70973,70978,70981,70984,70987,70990,70994,70997,71002,71005,71010,71014,71019,71022,71027,71032,71037,71040,71043,71048,71053,71056,71059,71063,71066,71071,71074,71079,71082,71087,71092,71097,71100,71105,71170,71173,71184,71188,71193,71365,71369,71374,71377,71380,71383,71387,71398,71402,71405,71410,71415,71418,71421,71424,71427,71430,71432,71435,71438,71441,71446,71449,71454,71457,71461,71464,71467,71481,71485,71488,71543,71548,71551,71554,71559,71562,71566,71571,71701,71705,71710,71715,71796,71801,71805,71808,71813,71818,71824,71827,71830,71833,71837,71842,71845,71856,71860,71877,74924,74928,74931,74934,74937,74958,74962,74965,74973,74976,74981,74984,74987,74992,74997,75001,75022,75026,75031,75034,75037,75040,75043,75047,75052,75055,75059,75064,75067,75072,75075,75080,75083,75088,76291,76295,76300,76303,76308,76592],[29,53318,53314],{"id":53319},"_3web-apis",[38,53321,53322],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[38,53324,53325],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[38,53327,53328],{},[1441,53329],{"alt":10,"src":53330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[38,53332,53333],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[38,53335,53336],{},"建议数组和对象使用 const 来声明",[38,53338,53339],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[33,53341,53343],{"id":53342},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[63,53345,53347],{"id":53346},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[38,53349,53350,53353],{},[89,53351,53352],{},"document"," = HTML 文件解析后的对象化表示；",[38,53355,53356,53358],{},[89,53357,53352],{}," ≠ HTML 文件本身",[38,53360,53361,53366],{},[252,53362,53363],{},[89,53364,53365],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[38,53368,53369,53373],{},[252,53370,53371],{},[89,53372,53352],{}," ：容器里的内容，代表当前加载的网页（DOM）",[38,53375,53376],{},"document实际上为window.document的简写",[63,53378,53380],{"id":53379},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[38,53382,53383],{},[1441,53384],{"alt":10,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[38,53387,53388],{},[1441,53389],{"alt":10,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[38,53392,53393],{},[1441,53394],{"alt":10,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[38,53397,53398],{},"console.dir()",[38,53400,53401],{},"dir用来打印对象",[1110,53403,53404,53407,53410],{},[49,53405,53406],{},"任何一个标签，都是一个对象",[49,53408,53409],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[49,53411,53412],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[38,53414,53415],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[63,53417,53419],{"id":53418},"_312-获取dom对象","3.1.2 获取DoM对象",[38,53421,53422],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[38,53424,53425],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[38,53427,53428],{},[252,53429,53430],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[46,53432,53433],{},[49,53434,53435],{},"利用CSS选择器来获取标签元素",[38,53437,53438],{},[1441,53439],{"alt":10,"src":53440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[38,53442,53443],{},"里边的选择器必须必须加引号！！！",[38,53445,53446],{},"只选择第一个元素",[83,53448,53450],{"className":53049,"code":53449,"language":53051,"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,53451,53452,53460,53481,53500,53508,53513,53518,53523,53531],{"__ignoreMap":10},[92,53453,53454,53456,53458],{"class":94,"line":95},[92,53455,1013],{"class":102},[92,53457,51782],{"class":51282},[92,53459,51289],{"class":102},[92,53461,53462,53464,53466,53469,53471,53474,53477,53479],{"class":94,"line":11},[92,53463,52126],{"class":102},[92,53465,51593],{"class":51282},[92,53467,53468],{"class":1942}," class",[92,53470,148],{"class":102},[92,53472,53473],{"class":207},"\"box\"",[92,53475,53476],{"class":102},">123\u003C\u002F",[92,53478,51593],{"class":51282},[92,53480,51289],{"class":102},[92,53482,53483,53485,53487,53489,53491,53493,53496,53498],{"class":94,"line":1158},[92,53484,52126],{"class":102},[92,53486,51593],{"class":51282},[92,53488,53468],{"class":1942},[92,53490,148],{"class":102},[92,53492,53473],{"class":207},[92,53494,53495],{"class":102},">456\u003C\u002F",[92,53497,51593],{"class":51282},[92,53499,51289],{"class":102},[92,53501,53502,53504,53506],{"class":94,"line":1173},[92,53503,52126],{"class":102},[92,53505,51795],{"class":51282},[92,53507,51289],{"class":102},[92,53509,53510],{"class":94,"line":1179},[92,53511,53512],{"class":102},"    \u002F\u002F 1.获取匹配的第一个元素\n",[92,53514,53515],{"class":94,"line":1193},[92,53516,53517],{"class":102},"    const box = document.querySelector('div')\n",[92,53519,53520],{"class":94,"line":1199},[92,53521,53522],{"class":102},"    console.dir(box)\n",[92,53524,53525,53527,53529],{"class":94,"line":1290},[92,53526,52399],{"class":102},[92,53528,51795],{"class":51282},[92,53530,51289],{"class":102},[92,53532,53533,53535,53537],{"class":94,"line":1296},[92,53534,51767],{"class":102},[92,53536,51782],{"class":51282},[92,53538,51289],{"class":102},[38,53540,53541],{},"只选123，不选456",[38,53543,53544],{},[1441,53545],{"alt":10,"src":53546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[38,53548,53549],{},"返回的是一个数组的集合，不能对其进行直接修改",[38,53551,53552],{},[1441,53553],{"alt":10,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[38,53556,53557],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[38,53559,53560],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[46,53562,53563],{"start":11},[49,53564,53565],{},"其他方法来获取标签元素",[38,53567,53568],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[38,53570,53571],{},[1441,53572],{"alt":10,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[63,53575,53577],{"id":53576},"_313-操作元素的内容","3.1.3 操作元素的内容",[38,53579,53580],{},"设置修改DOM元素内容有两种方式：",[1110,53582,53583,53586,53589,53592],{},[49,53584,53585],{},"元素.innerText=''",[49,53587,53588],{},"元素.innerHTML=''",[49,53590,53591],{},"不写字符串输出数字也是可以的",[49,53593,53594],{},"元素.innerHtml=1",[21978,53596,53598],{"id":53597},"_3131-innertext","3.1.3.1 innerText",[38,53600,53601],{},[1441,53602],{"alt":10,"src":53603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[38,53605,53606],{},"思路：实现了修改盒子中的内容！",[38,53608,53609],{},"它只显示纯文本，不解析标签",[21978,53611,53613],{"id":53612},"_3132-innerhtml","3.1.3.2 innerHTML",[38,53615,53616],{},[1441,53617],{"alt":10,"src":53618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[38,53620,53621],{},"相比于innerText，他的强大之处在于可以解析标签",[63,53623,53625],{"id":53624},"_314-操作元素属性","3.1.4 操作元素属性",[21978,53627,53629],{"id":53628},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[38,53631,53632],{},[1441,53633],{"alt":10,"src":53634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21978,53636,53638],{"id":53637},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[38,53640,53641],{},[1441,53642],{"alt":10,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[38,53645,53646],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[38,53648,53649],{},"div.style.backgroundColor = 'hotpink'",[38,53651,53652],{},"如果按照css的写法，-表示减，就会出错",[38,53654,53655],{},"body元素不需要再获取，直接用就行！！！！！！",[38,53657,53658],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[38,53660,53661],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[38,53663,53664],{},[1441,53665],{"alt":10,"src":53666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[38,53668,53669],{},[1441,53670],{"alt":10,"src":53671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[46,53673,53674,53677,53680,53683,53686,53689],{},[49,53675,53676],{},"className这个方式就是修改很多样式的时候来使用的！",[49,53678,53679],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[49,53681,53682],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[49,53684,53685],{},"className为属性名，如果还用class的话就导致与关键字冲突",[49,53687,53688],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[49,53690,53691,53692,53697],{},"解析标签的时候就变为了",[51593,53693],{"className":53694},[53695,53696],"nav","box",[53698,53699],"br",{},[38,53701,53702],{},"例子：",[51593,53704],{"className":53705},[53695],[51795,53707,53708],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[38,53710,53711],{},[1441,53712],{"alt":10,"src":53713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[38,53715,53716],{},"追加和删除类名用classList",[38,53718,53719],{},"常用于类似于开关的操作",[38,53721,53722],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[38,53724,53725],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21978,53727,53729],{"id":53728},"_3143-牢记点","3.1.4.3 牢记点",[46,53731,53732,53735,53738,53741,53744,53747,53750,53753,53756],{},[49,53733,53734],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[49,53736,53737],{},"使用style属性操作css时不要忘记引号",[49,53739,53740],{},"使用className或者classList时也不要忘记引号",[49,53742,53743],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[49,53745,53746],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[49,53748,53749],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[49,53751,53752],{},"若： let arr=['1','2',3] arr[0]=1",[49,53754,53755],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[49,53757,53758],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[63,53760,53762],{"id":53761},"_315-操作表单元素","3.1.5 操作表单元素",[46,53764,53765],{},[49,53766,53767],{},"天生的属性",[38,53769,53770],{},[1441,53771],{"alt":10,"src":53772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[38,53774,53775],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[38,53777,53778],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[38,53780,53781],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[38,53783,53784],{},[1441,53785],{"alt":10,"src":53786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[83,53788,53790],{"className":50615,"code":53789,"language":50617,"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,53791,53792,53797,53829,53834,53839,53844,53849,53853,53858,53863,53880,53892,53897],{"__ignoreMap":10},[92,53793,53794],{"class":94,"line":95},[92,53795,53796],{"class":102},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[92,53798,53799,53801,53804,53807,53809,53812,53814,53816,53818,53820,53822,53824,53827],{"class":94,"line":11},[92,53800,1013],{"class":102},[92,53802,53803],{"class":51282},"input",[92,53805,53806],{"class":1942}," type",[92,53808,148],{"class":102},[92,53810,53811],{"class":207},"\"checkbox\"",[92,53813,14900],{"class":1942},[92,53815,148],{"class":102},[92,53817,7632],{"class":207},[92,53819,14939],{"class":1942},[92,53821,148],{"class":102},[92,53823,7632],{"class":207},[92,53825,53826],{"class":1942}," checked",[92,53828,51289],{"class":102},[92,53830,53831],{"class":94,"line":1158},[92,53832,53833],{"class":102},"不选的话：\n",[92,53835,53836],{"class":94,"line":1173},[92,53837,53838],{"class":102},"const input = document.querySelector('input')\n",[92,53840,53841],{"class":94,"line":1179},[92,53842,53843],{"class":102},"input.checked=false\n",[92,53845,53846],{"class":94,"line":1193},[92,53847,53848],{"class":102},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[92,53850,53851],{"class":94,"line":1199},[92,53852,2379],{"emptyLinePlaceholder":17},[92,53854,53855],{"class":94,"line":1290},[92,53856,53857],{"class":102},"禁用按钮：\n",[92,53859,53860],{"class":94,"line":1296},[92,53861,53862],{"class":102},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[92,53864,53865,53867,53870,53873,53876,53878],{"class":94,"line":1308},[92,53866,1013],{"class":102},[92,53868,53869],{"class":51282},"button",[92,53871,53872],{"class":1942}," disabled",[92,53874,53875],{"class":102},">点击\u003C\u002F",[92,53877,53869],{"class":51282},[92,53879,51289],{"class":102},[92,53881,53882,53884,53886,53888,53890],{"class":94,"line":1591},[92,53883,1013],{"class":102},[92,53885,53869],{"class":51282},[92,53887,53875],{"class":102},[92,53889,53869],{"class":51282},[92,53891,51289],{"class":102},[92,53893,53894],{"class":94,"line":1596},[92,53895,53896],{"class":102},"const bt = document.querySelector('button')\n",[92,53898,53899],{"class":94,"line":1602},[92,53900,53901],{"class":102},"bt.disabled = false\n",[46,53903,53904],{"start":11},[49,53905,53906],{},"自定义属性",[38,53908,53909],{},[1441,53910],{"alt":10,"src":53911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[83,53913,53915],{"className":53049,"code":53914,"language":53051,"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,53916,53917,53925,53953,53972,53991,54010,54029,54037,54042,54047,54052,54057,54065],{"__ignoreMap":10},[92,53918,53919,53921,53923],{"class":94,"line":95},[92,53920,1013],{"class":102},[92,53922,51782],{"class":51282},[92,53924,51289],{"class":102},[92,53926,53927,53929,53931,53934,53936,53938,53941,53943,53946,53949,53951],{"class":94,"line":11},[92,53928,52126],{"class":102},[92,53930,51593],{"class":51282},[92,53932,53933],{"class":1942}," data-id",[92,53935,148],{"class":102},[92,53937,3657],{"class":207},[92,53939,53940],{"class":1942}," data-spm",[92,53942,148],{"class":102},[92,53944,53945],{"class":207},"\"我不知道\"",[92,53947,53948],{"class":102},">1\u003C\u002F",[92,53950,51593],{"class":51282},[92,53952,51289],{"class":102},[92,53954,53955,53957,53959,53961,53963,53965,53968,53970],{"class":94,"line":1158},[92,53956,52126],{"class":102},[92,53958,51593],{"class":51282},[92,53960,53933],{"class":1942},[92,53962,148],{"class":102},[92,53964,3680],{"class":207},[92,53966,53967],{"class":102},">2\u003C\u002F",[92,53969,51593],{"class":51282},[92,53971,51289],{"class":102},[92,53973,53974,53976,53978,53980,53982,53984,53987,53989],{"class":94,"line":1173},[92,53975,52126],{"class":102},[92,53977,51593],{"class":51282},[92,53979,53933],{"class":1942},[92,53981,148],{"class":102},[92,53983,3693],{"class":207},[92,53985,53986],{"class":102},">3\u003C\u002F",[92,53988,51593],{"class":51282},[92,53990,51289],{"class":102},[92,53992,53993,53995,53997,53999,54001,54003,54006,54008],{"class":94,"line":1179},[92,53994,52126],{"class":102},[92,53996,51593],{"class":51282},[92,53998,53933],{"class":1942},[92,54000,148],{"class":102},[92,54002,3706],{"class":207},[92,54004,54005],{"class":102},">4\u003C\u002F",[92,54007,51593],{"class":51282},[92,54009,51289],{"class":102},[92,54011,54012,54014,54016,54018,54020,54022,54025,54027],{"class":94,"line":1193},[92,54013,52126],{"class":102},[92,54015,51593],{"class":51282},[92,54017,53933],{"class":1942},[92,54019,148],{"class":102},[92,54021,3727],{"class":207},[92,54023,54024],{"class":102},">5\u003C\u002F",[92,54026,51593],{"class":51282},[92,54028,51289],{"class":102},[92,54030,54031,54033,54035],{"class":94,"line":1199},[92,54032,52126],{"class":102},[92,54034,51795],{"class":51282},[92,54036,51289],{"class":102},[92,54038,54039],{"class":94,"line":1290},[92,54040,54041],{"class":102},"    const one = document.querySelector('div')\n",[92,54043,54044],{"class":94,"line":1296},[92,54045,54046],{"class":102},"    console.log(one.dataset)\n",[92,54048,54049],{"class":94,"line":1308},[92,54050,54051],{"class":102},"    console.log(one.dataset.id)\n",[92,54053,54054],{"class":94,"line":1591},[92,54055,54056],{"class":102},"    console.log(one.dataset.spm)\n",[92,54058,54059,54061,54063],{"class":94,"line":1596},[92,54060,52399],{"class":102},[92,54062,51795],{"class":51282},[92,54064,51289],{"class":102},[92,54066,54067,54069,54071],{"class":94,"line":1602},[92,54068,51767],{"class":102},[92,54070,51782],{"class":51282},[92,54072,51289],{"class":102},[38,54074,54075],{},[1441,54076],{"alt":10,"src":54077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[38,54079,54080],{},"document.querySelector选择的是第一个对象（元素）",[63,54082,54084],{"id":54083},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[38,54086,54087],{},[1441,54088],{"alt":10,"src":54089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[38,54091,54092],{},[1441,54093],{"alt":10,"src":54094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[38,54096,54097],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51795,54099,54100],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[38,54102,54103],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51795,54105,54106],{},"\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,54108,54109],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[38,54111,54112],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[38,54114,54115],{},"单位为毫秒！！！",[38,54117,54118],{},"可以搭配匿名函数来用！！！",[38,54120,54121],{},"setInterval(function () {",[38,54123,54124],{},"alert('两秒执行一次')",[38,54126,54127],{},"}, 2000)",[38,54129,54130],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[38,54132,54133],{},"function fn() {",[38,54135,54136],{},"document.write(1)",[38,54138,1049],{},[38,54140,54141],{},"setInterval(fn, 1000)",[38,54143,54144],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[38,54146,54147],{},"setInterval('fn()', 1000)",[38,54149,54150],{},[1441,54151],{"alt":10,"src":54152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21978,54154,54156],{"id":54155},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[83,54158,54160],{"className":50615,"code":54159,"language":50617,"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,54161,54162,54172,54186,54190,54198,54212,54232,54244,54252,54256,54264,54301,54306,54311,54316,54324,54332,54354,54362,54367,54389,54394,54399,54410,54415,54435,54443,54458,54473,54484,54489,54499,54509,54513,54522,54526,54534,54542,54546],{"__ignoreMap":10},[92,54163,54164,54166,54168,54170],{"class":94,"line":95},[92,54165,51279],{"class":102},[92,54167,51283],{"class":51282},[92,54169,51286],{"class":1942},[92,54171,51289],{"class":102},[92,54173,54174,54176,54178,54180,54182,54184],{"class":94,"line":11},[92,54175,1013],{"class":102},[92,54177,50617],{"class":51282},[92,54179,51298],{"class":1942},[92,54181,148],{"class":102},[92,54183,51303],{"class":207},[92,54185,51289],{"class":102},[92,54187,54188],{"class":94,"line":1158},[92,54189,2379],{"emptyLinePlaceholder":17},[92,54191,54192,54194,54196],{"class":94,"line":1173},[92,54193,1013],{"class":102},[92,54195,51316],{"class":51282},[92,54197,51289],{"class":102},[92,54199,54200,54202,54204,54206,54208,54210],{"class":94,"line":1179},[92,54201,52126],{"class":102},[92,54203,51326],{"class":51282},[92,54205,51329],{"class":1942},[92,54207,148],{"class":102},[92,54209,51334],{"class":207},[92,54211,51289],{"class":102},[92,54213,54214,54216,54218,54220,54222,54224,54226,54228,54230],{"class":94,"line":1193},[92,54215,52126],{"class":102},[92,54217,51326],{"class":51282},[92,54219,14900],{"class":1942},[92,54221,148],{"class":102},[92,54223,51373],{"class":207},[92,54225,51353],{"class":1942},[92,54227,148],{"class":102},[92,54229,51380],{"class":207},[92,54231,51289],{"class":102},[92,54233,54234,54236,54238,54240,54242],{"class":94,"line":1199},[92,54235,52126],{"class":102},[92,54237,51389],{"class":51282},[92,54239,51392],{"class":102},[92,54241,51389],{"class":51282},[92,54243,51289],{"class":102},[92,54245,54246,54248,54250],{"class":94,"line":1290},[92,54247,51767],{"class":102},[92,54249,51316],{"class":51282},[92,54251,51289],{"class":102},[92,54253,54254],{"class":94,"line":1296},[92,54255,2379],{"emptyLinePlaceholder":17},[92,54257,54258,54260,54262],{"class":94,"line":1308},[92,54259,1013],{"class":102},[92,54261,51782],{"class":51282},[92,54263,51289],{"class":102},[92,54265,54266,54268,54271,54273,54275,54277,54279,54281,54283,54286,54288,54291,54294,54296,54299],{"class":94,"line":1591},[92,54267,52126],{"class":102},[92,54269,54270],{"class":51282},"textarea",[92,54272,14900],{"class":1942},[92,54274,148],{"class":102},[92,54276,7632],{"class":207},[92,54278,14939],{"class":1942},[92,54280,148],{"class":102},[92,54282,7632],{"class":207},[92,54284,54285],{"class":1942}," cols",[92,54287,148],{"class":102},[92,54289,54290],{"class":207},"\"30\"",[92,54292,54293],{"class":1942}," rows",[92,54295,148],{"class":102},[92,54297,54298],{"class":207},"\"10\"",[92,54300,51289],{"class":102},[92,54302,54303],{"class":94,"line":1596},[92,54304,54305],{"class":102},"        用户注册协议\n",[92,54307,54308],{"class":94,"line":1602},[92,54309,54310],{"class":102},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[92,54312,54313],{"class":94,"line":1607},[92,54314,54315],{"class":102},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[92,54317,54318,54320,54322],{"class":94,"line":1621},[92,54319,51758],{"class":102},[92,54321,54270],{"class":51282},[92,54323,51289],{"class":102},[92,54325,54326,54328,54330],{"class":94,"line":1626},[92,54327,52126],{"class":102},[92,54329,53698],{"class":51282},[92,54331,51289],{"class":102},[92,54333,54334,54336,54338,54340,54342,54345,54347,54350,54352],{"class":94,"line":1632},[92,54335,52126],{"class":102},[92,54337,53869],{"class":51282},[92,54339,53468],{"class":1942},[92,54341,148],{"class":102},[92,54343,54344],{"class":207},"\"btn\"",[92,54346,53872],{"class":1942},[92,54348,54349],{"class":102},">我已经阅读用户协议(5)\u003C\u002F",[92,54351,53869],{"class":51282},[92,54353,51289],{"class":102},[92,54355,54356,54358,54360],{"class":94,"line":1653},[92,54357,52126],{"class":102},[92,54359,51795],{"class":51282},[92,54361,51289],{"class":102},[92,54363,54364],{"class":94,"line":1658},[92,54365,54366],{"class":161},"    \u002F\u002F 1. 获取元素\n",[92,54368,54369,54371,54374,54376,54379,54382,54384,54387],{"class":94,"line":1672},[92,54370,11201],{"class":98},[92,54372,54373],{"class":151}," btn",[92,54375,13544],{"class":98},[92,54377,54378],{"class":102}," document.",[92,54380,54381],{"class":1942},"querySelector",[92,54383,103],{"class":102},[92,54385,54386],{"class":207},"'.btn'",[92,54388,109],{"class":102},[92,54390,54391],{"class":94,"line":1677},[92,54392,54393],{"class":161},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[92,54395,54396],{"class":94,"line":1706},[92,54397,54398],{"class":161},"    \u002F\u002F 2. 倒计时\n",[92,54400,54401,54403,54405,54407],{"class":94,"line":1711},[92,54402,52201],{"class":98},[92,54404,9418],{"class":102},[92,54406,148],{"class":98},[92,54408,54409],{"class":151}," 5\n",[92,54411,54412],{"class":94,"line":1728},[92,54413,54414],{"class":161},"    \u002F\u002F 2.1 开启定时器\n",[92,54416,54417,54419,54422,54424,54427,54429,54432],{"class":94,"line":1733},[92,54418,52201],{"class":98},[92,54420,54421],{"class":102}," n ",[92,54423,148],{"class":98},[92,54425,54426],{"class":1942}," setInterval",[92,54428,103],{"class":102},[92,54430,54431],{"class":98},"function",[92,54433,54434],{"class":102}," () {\n",[92,54436,54437,54440],{"class":94,"line":1738},[92,54438,54439],{"class":102},"      i",[92,54441,54442],{"class":98},"--\n",[92,54444,54445,54448,54450,54453,54455],{"class":94,"line":1743},[92,54446,54447],{"class":102},"      btn.innerHTML ",[92,54449,148],{"class":98},[92,54451,54452],{"class":207}," `我已经阅读用户协议(${",[92,54454,544],{"class":102},[92,54456,54457],{"class":207},"})`\n",[92,54459,54460,54463,54466,54469,54471],{"class":94,"line":1757},[92,54461,54462],{"class":98},"      if",[92,54464,54465],{"class":102}," (i ",[92,54467,54468],{"class":98},"===",[92,54470,4072],{"class":151},[92,54472,12422],{"class":102},[92,54474,54475,54478,54481],{"class":94,"line":1762},[92,54476,54477],{"class":1942},"        clearInterval",[92,54479,54480],{"class":102},"(n)  ",[92,54482,54483],{"class":161},"\u002F\u002F 关闭定时器\n",[92,54485,54486],{"class":94,"line":2556},[92,54487,54488],{"class":161},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[92,54490,54491,54494,54496],{"class":94,"line":2570},[92,54492,54493],{"class":102},"        btn.disabled ",[92,54495,148],{"class":98},[92,54497,54498],{"class":151}," false\n",[92,54500,54501,54504,54506],{"class":94,"line":2578},[92,54502,54503],{"class":102},"        btn.innerHTML ",[92,54505,148],{"class":98},[92,54507,54508],{"class":207}," '同意'\n",[92,54510,54511],{"class":94,"line":2583},[92,54512,52380],{"class":102},[92,54514,54515,54518,54520],{"class":94,"line":2589},[92,54516,54517],{"class":102},"    }, ",[92,54519,6390],{"class":151},[92,54521,109],{"class":102},[92,54523,54524],{"class":94,"line":2595},[92,54525,2379],{"emptyLinePlaceholder":17},[92,54527,54528,54530,54532],{"class":94,"line":2600},[92,54529,52399],{"class":102},[92,54531,51795],{"class":51282},[92,54533,51289],{"class":102},[92,54535,54536,54538,54540],{"class":94,"line":7928},[92,54537,51767],{"class":102},[92,54539,51782],{"class":51282},[92,54541,51289],{"class":102},[92,54543,54544],{"class":94,"line":7952},[92,54545,2379],{"emptyLinePlaceholder":17},[92,54547,54548,54550,54552],{"class":94,"line":7957},[92,54549,51767],{"class":102},[92,54551,50617],{"class":51282},[92,54553,51289],{"class":102},[38,54555,54556],{},"不要一直想着用死循环,避免死循环",[38,54558,54559,54562],{},[89,54560,54561],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21978,54564,54566],{"id":54565},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[46,54568,54569],{},[49,54570,54571],{},"法1",[83,54573,54575],{"className":50615,"code":54574,"language":50617,"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,54576,54577,54587,54601,54605,54613,54627,54647,54659,54667,54673,54684,54695,54699,54703,54710,54722,54726,54730,54737,54749,54763,54776,54790,54794,54798,54805,54816,54827,54838,54850,54862,54874,54878,54882,54890,54900,54913,54925,54938,54942,54946,54953,54963,54975,54987,54998,55009,55019,55031,55043,55047,55051,55060,55072,55084,55112,55125,55129,55133,55140,55151,55155,55163,55171,55175,55183,55197,55212,55236,55244,55259,55272,55280,55301,55313,55325,55337,55349,55361,55373,55385,55394,55402,55410,55418,55430,55453,55472,55491,55510,55529,55548,55567,55587,55591,55611,55630,55650,55671,55682,55699,55709,55719,55729,55734,55739,55744,55749,55774,55787,55791,55814,55818,55826,55834,55842,55846],{"__ignoreMap":10},[92,54578,54579,54581,54583,54585],{"class":94,"line":95},[92,54580,51279],{"class":102},[92,54582,51283],{"class":51282},[92,54584,51286],{"class":1942},[92,54586,51289],{"class":102},[92,54588,54589,54591,54593,54595,54597,54599],{"class":94,"line":11},[92,54590,1013],{"class":102},[92,54592,50617],{"class":51282},[92,54594,51298],{"class":1942},[92,54596,148],{"class":102},[92,54598,51303],{"class":207},[92,54600,51289],{"class":102},[92,54602,54603],{"class":94,"line":1158},[92,54604,2379],{"emptyLinePlaceholder":17},[92,54606,54607,54609,54611],{"class":94,"line":1173},[92,54608,1013],{"class":102},[92,54610,51316],{"class":51282},[92,54612,51289],{"class":102},[92,54614,54615,54617,54619,54621,54623,54625],{"class":94,"line":1179},[92,54616,52126],{"class":102},[92,54618,51326],{"class":51282},[92,54620,51329],{"class":1942},[92,54622,148],{"class":102},[92,54624,51334],{"class":207},[92,54626,51289],{"class":102},[92,54628,54629,54631,54633,54635,54637,54639,54641,54643,54645],{"class":94,"line":1193},[92,54630,52126],{"class":102},[92,54632,51326],{"class":51282},[92,54634,14900],{"class":1942},[92,54636,148],{"class":102},[92,54638,51373],{"class":207},[92,54640,51353],{"class":1942},[92,54642,148],{"class":102},[92,54644,51380],{"class":207},[92,54646,51289],{"class":102},[92,54648,54649,54651,54653,54655,54657],{"class":94,"line":1199},[92,54650,52126],{"class":102},[92,54652,51389],{"class":51282},[92,54654,51392],{"class":102},[92,54656,51389],{"class":51282},[92,54658,51289],{"class":102},[92,54660,54661,54663,54665],{"class":94,"line":1290},[92,54662,52126],{"class":102},[92,54664,5106],{"class":51282},[92,54666,51289],{"class":102},[92,54668,54669,54671],{"class":94,"line":1296},[92,54670,6383],{"class":51282},[92,54672,15552],{"class":102},[92,54674,54675,54678,54680,54682],{"class":94,"line":1308},[92,54676,54677],{"class":151},"      padding",[92,54679,51419],{"class":102},[92,54681,294],{"class":151},[92,54683,1269],{"class":102},[92,54685,54686,54689,54691,54693],{"class":94,"line":1591},[92,54687,54688],{"class":151},"      margin",[92,54690,51419],{"class":102},[92,54692,294],{"class":151},[92,54694,1269],{"class":102},[92,54696,54697],{"class":94,"line":1596},[92,54698,2166],{"class":102},[92,54700,54701],{"class":94,"line":1602},[92,54702,2379],{"emptyLinePlaceholder":17},[92,54704,54705,54708],{"class":94,"line":1607},[92,54706,54707],{"class":51282},"    li",[92,54709,15552],{"class":102},[92,54711,54712,54715,54717,54720],{"class":94,"line":1621},[92,54713,54714],{"class":151},"      list-style",[92,54716,51419],{"class":102},[92,54718,54719],{"class":151},"none",[92,54721,1269],{"class":102},[92,54723,54724],{"class":94,"line":1626},[92,54725,2166],{"class":102},[92,54727,54728],{"class":94,"line":1632},[92,54729,2379],{"emptyLinePlaceholder":17},[92,54731,54732,54735],{"class":94,"line":1653},[92,54733,54734],{"class":1942},"    .box",[92,54736,15552],{"class":102},[92,54738,54739,54742,54744,54747],{"class":94,"line":1658},[92,54740,54741],{"class":151},"      position",[92,54743,51419],{"class":102},[92,54745,54746],{"class":151},"relative",[92,54748,1269],{"class":102},[92,54750,54751,54754,54756,54759,54761],{"class":94,"line":1672},[92,54752,54753],{"class":151},"      width",[92,54755,51419],{"class":102},[92,54757,54758],{"class":151},"976",[92,54760,51474],{"class":98},[92,54762,1269],{"class":102},[92,54764,54765,54768,54770,54772,54774],{"class":94,"line":1677},[92,54766,54767],{"class":151},"      height",[92,54769,51419],{"class":102},[92,54771,1518],{"class":151},[92,54773,51474],{"class":98},[92,54775,1269],{"class":102},[92,54777,54778,54780,54782,54784,54786,54788],{"class":94,"line":1706},[92,54779,54688],{"class":151},[92,54781,51419],{"class":102},[92,54783,414],{"class":151},[92,54785,51474],{"class":98},[92,54787,51538],{"class":151},[92,54789,1269],{"class":102},[92,54791,54792],{"class":94,"line":1711},[92,54793,2166],{"class":102},[92,54795,54796],{"class":94,"line":1728},[92,54797,2379],{"emptyLinePlaceholder":17},[92,54799,54800,54803],{"class":94,"line":1733},[92,54801,54802],{"class":1942},"    .slider-footer",[92,54804,15552],{"class":102},[92,54806,54807,54809,54811,54814],{"class":94,"line":1738},[92,54808,54741],{"class":151},[92,54810,51419],{"class":102},[92,54812,54813],{"class":151},"absolute",[92,54815,1269],{"class":102},[92,54817,54818,54821,54823,54825],{"class":94,"line":1743},[92,54819,54820],{"class":151},"      left",[92,54822,51419],{"class":102},[92,54824,294],{"class":151},[92,54826,1269],{"class":102},[92,54828,54829,54832,54834,54836],{"class":94,"line":1757},[92,54830,54831],{"class":151},"      bottom",[92,54833,51419],{"class":102},[92,54835,294],{"class":151},[92,54837,1269],{"class":102},[92,54839,54840,54842,54844,54846,54848],{"class":94,"line":1762},[92,54841,54753],{"class":151},[92,54843,51419],{"class":102},[92,54845,414],{"class":151},[92,54847,431],{"class":98},[92,54849,1269],{"class":102},[92,54851,54852,54854,54856,54858,54860],{"class":94,"line":2556},[92,54853,54767],{"class":151},[92,54855,51419],{"class":102},[92,54857,678],{"class":151},[92,54859,431],{"class":98},[92,54861,1269],{"class":102},[92,54863,54864,54867,54869,54872],{"class":94,"line":2570},[92,54865,54866],{"class":151},"      background-color",[92,54868,51419],{"class":102},[92,54870,54871],{"class":151},"skyblue",[92,54873,1269],{"class":102},[92,54875,54876],{"class":94,"line":2578},[92,54877,2166],{"class":102},[92,54879,54880],{"class":94,"line":2583},[92,54881,2379],{"emptyLinePlaceholder":17},[92,54883,54884,54886,54888],{"class":94,"line":2589},[92,54885,54802],{"class":1942},[92,54887,6805],{"class":51282},[92,54889,15552],{"class":102},[92,54891,54892,54894,54896,54898],{"class":94,"line":2595},[92,54893,54741],{"class":151},[92,54895,51419],{"class":102},[92,54897,54813],{"class":151},[92,54899,1269],{"class":102},[92,54901,54902,54905,54907,54909,54911],{"class":94,"line":2600},[92,54903,54904],{"class":151},"      font-size",[92,54906,51419],{"class":102},[92,54908,1004],{"class":151},[92,54910,51474],{"class":98},[92,54912,1269],{"class":102},[92,54914,54915,54917,54919,54921,54923],{"class":94,"line":7928},[92,54916,54820],{"class":151},[92,54918,51419],{"class":102},[92,54920,803],{"class":151},[92,54922,51474],{"class":98},[92,54924,1269],{"class":102},[92,54926,54927,54930,54932,54934,54936],{"class":94,"line":7952},[92,54928,54929],{"class":151},"      top",[92,54931,51419],{"class":102},[92,54933,422],{"class":151},[92,54935,51474],{"class":98},[92,54937,1269],{"class":102},[92,54939,54940],{"class":94,"line":7957},[92,54941,2166],{"class":102},[92,54943,54944],{"class":94,"line":7963},[92,54945,2379],{"emptyLinePlaceholder":17},[92,54947,54948,54951],{"class":94,"line":7990},[92,54949,54950],{"class":51282},"    ul",[92,54952,15552],{"class":102},[92,54954,54955,54957,54959,54961],{"class":94,"line":7995},[92,54956,54741],{"class":151},[92,54958,51419],{"class":102},[92,54960,54813],{"class":151},[92,54962,1269],{"class":102},[92,54964,54965,54967,54969,54971,54973],{"class":94,"line":8001},[92,54966,54929],{"class":151},[92,54968,51419],{"class":102},[92,54970,884],{"class":151},[92,54972,51474],{"class":98},[92,54974,1269],{"class":102},[92,54976,54977,54979,54981,54983,54985],{"class":94,"line":8013},[92,54978,54820],{"class":151},[92,54980,51419],{"class":102},[92,54982,803],{"class":151},[92,54984,51474],{"class":98},[92,54986,1269],{"class":102},[92,54988,54989,54992,54994,54996],{"class":94,"line":8025},[92,54990,54991],{"class":151},"      display",[92,54993,51419],{"class":102},[92,54995,51459],{"class":151},[92,54997,1269],{"class":102},[92,54999,55000,55003,55005,55007],{"class":94,"line":8037},[92,55001,55002],{"class":151},"      justify-content",[92,55004,51419],{"class":102},[92,55006,51650],{"class":151},[92,55008,1269],{"class":102},[92,55010,55011,55013,55015,55017],{"class":94,"line":9696},[92,55012,54741],{"class":151},[92,55014,51419],{"class":102},[92,55016,54813],{"class":151},[92,55018,1269],{"class":102},[92,55020,55021,55023,55025,55027,55029],{"class":94,"line":9721},[92,55022,54753],{"class":151},[92,55024,51419],{"class":102},[92,55026,3971],{"class":151},[92,55028,51474],{"class":98},[92,55030,1269],{"class":102},[92,55032,55033,55035,55037,55039,55041],{"class":94,"line":9744},[92,55034,54767],{"class":151},[92,55036,51419],{"class":102},[92,55038,803],{"class":151},[92,55040,51474],{"class":98},[92,55042,1269],{"class":102},[92,55044,55045],{"class":94,"line":9768},[92,55046,2166],{"class":102},[92,55048,55049],{"class":94,"line":9773},[92,55050,2379],{"emptyLinePlaceholder":17},[92,55052,55053,55055,55058],{"class":94,"line":9778},[92,55054,54950],{"class":51282},[92,55056,55057],{"class":51282}," li",[92,55059,15552],{"class":102},[92,55061,55062,55064,55066,55068,55070],{"class":94,"line":9783},[92,55063,54753],{"class":151},[92,55065,51419],{"class":102},[92,55067,803],{"class":151},[92,55069,51474],{"class":98},[92,55071,1269],{"class":102},[92,55073,55074,55076,55078,55080,55082],{"class":94,"line":9792},[92,55075,54767],{"class":151},[92,55077,51419],{"class":102},[92,55079,803],{"class":151},[92,55081,51474],{"class":98},[92,55083,1269],{"class":102},[92,55085,55086,55088,55090,55093,55095,55097,55099,55101,55103,55105,55107,55110],{"class":94,"line":9797},[92,55087,54866],{"class":151},[92,55089,51419],{"class":102},[92,55091,55092],{"class":151},"rgba",[92,55094,103],{"class":102},[92,55096,294],{"class":151},[92,55098,12415],{"class":102},[92,55100,294],{"class":151},[92,55102,12415],{"class":102},[92,55104,294],{"class":151},[92,55106,12415],{"class":102},[92,55108,55109],{"class":151},".4",[92,55111,2698],{"class":102},[92,55113,55114,55117,55119,55121,55123],{"class":94,"line":9803},[92,55115,55116],{"class":151},"      border-radius",[92,55118,51419],{"class":102},[92,55120,549],{"class":151},[92,55122,51474],{"class":98},[92,55124,1269],{"class":102},[92,55126,55127],{"class":94,"line":9824},[92,55128,2166],{"class":102},[92,55130,55131],{"class":94,"line":9830},[92,55132,2379],{"emptyLinePlaceholder":17},[92,55134,55135,55138],{"class":94,"line":9844},[92,55136,55137],{"class":1942},"    .activate",[92,55139,15552],{"class":102},[92,55141,55142,55144,55146,55149],{"class":94,"line":9850},[92,55143,54866],{"class":151},[92,55145,51419],{"class":102},[92,55147,55148],{"class":151},"#f7f7f7",[92,55150,1269],{"class":102},[92,55152,55153],{"class":94,"line":9877},[92,55154,2166],{"class":102},[92,55156,55157,55159,55161],{"class":94,"line":9886},[92,55158,52399],{"class":102},[92,55160,5106],{"class":51282},[92,55162,51289],{"class":102},[92,55164,55165,55167,55169],{"class":94,"line":9892},[92,55166,51767],{"class":102},[92,55168,51316],{"class":51282},[92,55170,51289],{"class":102},[92,55172,55173],{"class":94,"line":9900},[92,55174,2379],{"emptyLinePlaceholder":17},[92,55176,55177,55179,55181],{"class":94,"line":9905},[92,55178,1013],{"class":102},[92,55180,51782],{"class":51282},[92,55182,51289],{"class":102},[92,55184,55185,55187,55189,55191,55193,55195],{"class":94,"line":16584},[92,55186,52126],{"class":102},[92,55188,51593],{"class":51282},[92,55190,53468],{"class":1942},[92,55192,148],{"class":102},[92,55194,53473],{"class":207},[92,55196,51289],{"class":102},[92,55198,55199,55201,55203,55205,55207,55210],{"class":94,"line":16590},[92,55200,51323],{"class":102},[92,55202,51593],{"class":51282},[92,55204,53468],{"class":1942},[92,55206,148],{"class":102},[92,55208,55209],{"class":207},"\"slider-wrapper\"",[92,55211,51289],{"class":102},[92,55213,55214,55217,55219,55222,55224,55227,55230,55232,55234],{"class":94,"line":16613},[92,55215,55216],{"class":102},"      \u003C",[92,55218,1441],{"class":51282},[92,55220,55221],{"class":1942}," src",[92,55223,148],{"class":102},[92,55225,55226],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[92,55228,55229],{"class":1942}," alt",[92,55231,148],{"class":102},[92,55233,7632],{"class":207},[92,55235,51289],{"class":102},[92,55237,55238,55240,55242],{"class":94,"line":16619},[92,55239,51758],{"class":102},[92,55241,51593],{"class":51282},[92,55243,51289],{"class":102},[92,55245,55246,55248,55250,55252,55254,55257],{"class":94,"line":16642},[92,55247,51323],{"class":102},[92,55249,51593],{"class":51282},[92,55251,53468],{"class":1942},[92,55253,148],{"class":102},[92,55255,55256],{"class":207},"\"slider-footer\"",[92,55258,51289],{"class":102},[92,55260,55261,55263,55265,55268,55270],{"class":94,"line":16656},[92,55262,55216],{"class":102},[92,55264,38],{"class":51282},[92,55266,55267],{"class":102},">对人类来说会不会太超前了?\u003C\u002F",[92,55269,38],{"class":51282},[92,55271,51289],{"class":102},[92,55273,55274,55276,55278],{"class":94,"line":16676},[92,55275,55216],{"class":102},[92,55277,1110],{"class":51282},[92,55279,51289],{"class":102},[92,55281,55282,55285,55287,55289,55291,55294,55297,55299],{"class":94,"line":16682},[92,55283,55284],{"class":102},"        \u003C",[92,55286,49],{"class":51282},[92,55288,53468],{"class":1942},[92,55290,148],{"class":102},[92,55292,55293],{"class":207},"\"activate\"",[92,55295,55296],{"class":102},">\u003C\u002F",[92,55298,49],{"class":51282},[92,55300,51289],{"class":102},[92,55302,55303,55305,55307,55309,55311],{"class":94,"line":16693},[92,55304,55284],{"class":102},[92,55306,49],{"class":51282},[92,55308,55296],{"class":102},[92,55310,49],{"class":51282},[92,55312,51289],{"class":102},[92,55314,55315,55317,55319,55321,55323],{"class":94,"line":16716},[92,55316,55284],{"class":102},[92,55318,49],{"class":51282},[92,55320,55296],{"class":102},[92,55322,49],{"class":51282},[92,55324,51289],{"class":102},[92,55326,55327,55329,55331,55333,55335],{"class":94,"line":16738},[92,55328,55284],{"class":102},[92,55330,49],{"class":51282},[92,55332,55296],{"class":102},[92,55334,49],{"class":51282},[92,55336,51289],{"class":102},[92,55338,55339,55341,55343,55345,55347],{"class":94,"line":16743},[92,55340,55284],{"class":102},[92,55342,49],{"class":51282},[92,55344,55296],{"class":102},[92,55346,49],{"class":51282},[92,55348,51289],{"class":102},[92,55350,55351,55353,55355,55357,55359],{"class":94,"line":16749},[92,55352,55284],{"class":102},[92,55354,49],{"class":51282},[92,55356,55296],{"class":102},[92,55358,49],{"class":51282},[92,55360,51289],{"class":102},[92,55362,55363,55365,55367,55369,55371],{"class":94,"line":16763},[92,55364,55284],{"class":102},[92,55366,49],{"class":51282},[92,55368,55296],{"class":102},[92,55370,49],{"class":51282},[92,55372,51289],{"class":102},[92,55374,55375,55377,55379,55381,55383],{"class":94,"line":16776},[92,55376,55284],{"class":102},[92,55378,49],{"class":51282},[92,55380,55296],{"class":102},[92,55382,49],{"class":51282},[92,55384,51289],{"class":102},[92,55386,55387,55390,55392],{"class":94,"line":16781},[92,55388,55389],{"class":102},"      \u003C\u002F",[92,55391,1110],{"class":51282},[92,55393,51289],{"class":102},[92,55395,55396,55398,55400],{"class":94,"line":16795},[92,55397,51758],{"class":102},[92,55399,51593],{"class":51282},[92,55401,51289],{"class":102},[92,55403,55404,55406,55408],{"class":94,"line":16800},[92,55405,52399],{"class":102},[92,55407,51593],{"class":51282},[92,55409,51289],{"class":102},[92,55411,55412,55414,55416],{"class":94,"line":16806},[92,55413,52126],{"class":102},[92,55415,51795],{"class":51282},[92,55417,51289],{"class":102},[92,55419,55420,55422,55425,55427],{"class":94,"line":16811},[92,55421,11201],{"class":98},[92,55423,55424],{"class":151}," arrImage",[92,55426,13544],{"class":98},[92,55428,55429],{"class":102}," [\n",[92,55431,55432,55435,55438,55441,55444,55447,55450],{"class":94,"line":16825},[92,55433,55434],{"class":102},"      { url: ",[92,55436,55437],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[92,55439,55440],{"class":102},", title: ",[92,55442,55443],{"class":207},"'对人类来说会不会太超前了?'",[92,55445,55446],{"class":102},", color: ",[92,55448,55449],{"class":207},"'rgba(100,67,68)'",[92,55451,55452],{"class":102}," },\n",[92,55454,55455,55457,55460,55462,55465,55467,55470],{"class":94,"line":16830},[92,55456,55434],{"class":102},[92,55458,55459],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[92,55461,55440],{"class":102},[92,55463,55464],{"class":207},"'开启剑与雪的黑暗传说!'",[92,55466,55446],{"class":102},[92,55468,55469],{"class":207},"'rgba(43,35,26)'",[92,55471,55452],{"class":102},[92,55473,55474,55476,55479,55481,55484,55486,55489],{"class":94,"line":16835},[92,55475,55434],{"class":102},[92,55477,55478],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[92,55480,55440],{"class":102},[92,55482,55483],{"class":207},"'真正的jo厨出现了!'",[92,55485,55446],{"class":102},[92,55487,55488],{"class":207},"'rgba(36,31,33)'",[92,55490,55452],{"class":102},[92,55492,55493,55495,55498,55500,55503,55505,55508],{"class":94,"line":16849},[92,55494,55434],{"class":102},[92,55496,55497],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[92,55499,55440],{"class":102},[92,55501,55502],{"class":207},"'李玉刚:让世界通过b站看到东方大国文化'",[92,55504,55446],{"class":102},[92,55506,55507],{"class":207},"'rgba(139,98,66)'",[92,55509,55452],{"class":102},[92,55511,55512,55514,55517,55519,55522,55524,55527],{"class":94,"line":16861},[92,55513,55434],{"class":102},[92,55515,55516],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[92,55518,55440],{"class":102},[92,55520,55521],{"class":207},"'快来分享你的寒假日常吧'",[92,55523,55446],{"class":102},[92,55525,55526],{"class":207},"'rgba(67,90,92)'",[92,55528,55452],{"class":102},[92,55530,55531,55533,55536,55538,55541,55543,55546],{"class":94,"line":16866},[92,55532,55434],{"class":102},[92,55534,55535],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[92,55537,55440],{"class":102},[92,55539,55540],{"class":207},"'哔哩哔哩小年YEAR'",[92,55542,55446],{"class":102},[92,55544,55545],{"class":207},"'rgba(166,131,143)'",[92,55547,55452],{"class":102},[92,55549,55550,55552,55555,55557,55560,55562,55565],{"class":94,"line":16879},[92,55551,55434],{"class":102},[92,55553,55554],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[92,55556,55440],{"class":102},[92,55558,55559],{"class":207},"'一站式解决你的电脑配置问题'",[92,55561,55446],{"class":102},[92,55563,55564],{"class":207},"'rgba(53,29,25)'",[92,55566,55452],{"class":102},[92,55568,55569,55571,55574,55576,55579,55581,55584],{"class":94,"line":16884},[92,55570,55434],{"class":102},[92,55572,55573],{"class":207},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[92,55575,55440],{"class":102},[92,55577,55578],{"class":207},"'谁不想和小猫咪贴贴呢?'",[92,55580,55446],{"class":102},[92,55582,55583],{"class":207},"'rgba(99,72,114)'",[92,55585,55586],{"class":102}," }\n",[92,55588,55589],{"class":94,"line":16889},[92,55590,53091],{"class":102},[92,55592,55593,55595,55598,55600,55602,55604,55606,55609],{"class":94,"line":16894},[92,55594,11201],{"class":98},[92,55596,55597],{"class":151}," img",[92,55599,13544],{"class":98},[92,55601,54378],{"class":102},[92,55603,54381],{"class":1942},[92,55605,103],{"class":102},[92,55607,55608],{"class":207},"'.slider-wrapper img'",[92,55610,109],{"class":102},[92,55612,55613,55615,55617,55619,55621,55623,55625,55628],{"class":94,"line":16907},[92,55614,11201],{"class":98},[92,55616,6805],{"class":151},[92,55618,13544],{"class":98},[92,55620,54378],{"class":102},[92,55622,54381],{"class":1942},[92,55624,103],{"class":102},[92,55626,55627],{"class":207},"'.slider-footer p'",[92,55629,109],{"class":102},[92,55631,55632,55634,55637,55639,55641,55643,55645,55648],{"class":94,"line":16912},[92,55633,11201],{"class":98},[92,55635,55636],{"class":151}," color",[92,55638,13544],{"class":98},[92,55640,54378],{"class":102},[92,55642,54381],{"class":1942},[92,55644,103],{"class":102},[92,55646,55647],{"class":207},"'.slider-footer'",[92,55649,109],{"class":102},[92,55651,55652,55654,55657,55659,55661,55664,55666,55669],{"class":94,"line":32615},[92,55653,11201],{"class":98},[92,55655,55656],{"class":151}," lis",[92,55658,13544],{"class":98},[92,55660,54378],{"class":102},[92,55662,55663],{"class":1942},"querySelectorAll",[92,55665,103],{"class":102},[92,55667,55668],{"class":207},"'.slider-footer ul li'",[92,55670,109],{"class":102},[92,55672,55673,55675,55677,55679],{"class":94,"line":32621},[92,55674,52201],{"class":98},[92,55676,9418],{"class":102},[92,55678,148],{"class":98},[92,55680,55681],{"class":151}," 1\n",[92,55683,55684,55686,55689,55691,55693,55695,55697],{"class":94,"line":32627},[92,55685,52201],{"class":98},[92,55687,55688],{"class":102}," timer ",[92,55690,148],{"class":98},[92,55692,54426],{"class":1942},[92,55694,103],{"class":102},[92,55696,54431],{"class":98},[92,55698,54434],{"class":102},[92,55700,55701,55704,55706],{"class":94,"line":32633},[92,55702,55703],{"class":102},"      img.src ",[92,55705,148],{"class":98},[92,55707,55708],{"class":102}," arrImage[i].url\n",[92,55710,55711,55714,55716],{"class":94,"line":32639},[92,55712,55713],{"class":102},"      p.innerHTML ",[92,55715,148],{"class":98},[92,55717,55718],{"class":102}," arrImage[i].title\n",[92,55720,55721,55724,55726],{"class":94,"line":32650},[92,55722,55723],{"class":102},"      color.style.backgroundColor ",[92,55725,148],{"class":98},[92,55727,55728],{"class":102}," arrImage[i].color\n",[92,55730,55731],{"class":94,"line":32656},[92,55732,55733],{"class":161},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[92,55735,55736],{"class":94,"line":32676},[92,55737,55738],{"class":161},"      \u002F\u002F li.classList.add('activate')\n",[92,55740,55741],{"class":94,"line":32682},[92,55742,55743],{"class":161},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[92,55745,55746],{"class":94,"line":32693},[92,55747,55748],{"class":161},"      \u002F\u002F lis[i].classList.remove('activate')\n",[92,55750,55751,55754,55756,55758,55761,55764,55767,55769,55772],{"class":94,"line":32699},[92,55752,55753],{"class":102},"      document.",[92,55755,54381],{"class":1942},[92,55757,103],{"class":102},[92,55759,55760],{"class":207},"'.activate'",[92,55762,55763],{"class":102},")?.classList.",[92,55765,55766],{"class":1942},"toggle",[92,55768,103],{"class":102},[92,55770,55771],{"class":207},"'activate'",[92,55773,109],{"class":102},[92,55775,55776,55779,55781,55783,55785],{"class":94,"line":32705},[92,55777,55778],{"class":102},"      lis[i].classList.",[92,55780,5314],{"class":1942},[92,55782,103],{"class":102},[92,55784,55771],{"class":207},[92,55786,109],{"class":102},[92,55788,55789],{"class":94,"line":32711},[92,55790,2379],{"emptyLinePlaceholder":17},[92,55792,55793,55796,55798,55800,55802,55804,55806,55808,55811],{"class":94,"line":32717},[92,55794,55795],{"class":102},"      i ",[92,55797,148],{"class":98},[92,55799,54465],{"class":102},[92,55801,584],{"class":98},[92,55803,25100],{"class":151},[92,55805,13694],{"class":102},[92,55807,431],{"class":98},[92,55809,55810],{"class":102}," arrImage.",[92,55812,55813],{"class":151},"length\n",[92,55815,55816],{"class":94,"line":32723},[92,55817,2379],{"emptyLinePlaceholder":17},[92,55819,55820,55822,55824],{"class":94,"line":32729},[92,55821,54517],{"class":102},[92,55823,6390],{"class":151},[92,55825,109],{"class":102},[92,55827,55828,55830,55832],{"class":94,"line":32735},[92,55829,52399],{"class":102},[92,55831,51795],{"class":51282},[92,55833,51289],{"class":102},[92,55835,55836,55838,55840],{"class":94,"line":32755},[92,55837,51767],{"class":102},[92,55839,51782],{"class":51282},[92,55841,51289],{"class":102},[92,55843,55844],{"class":94,"line":32761},[92,55845,2379],{"emptyLinePlaceholder":17},[92,55847,55848,55850,55852],{"class":94,"line":32777},[92,55849,51767],{"class":102},[92,55851,50617],{"class":51282},[92,55853,51289],{"class":102},[38,55855,55856],{},[1441,55857],{"alt":10,"src":55858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[38,55860,55861],{},"?.就是短路保护,确保输出正常进行",[38,55863,55864],{},"不要忘记取余%,有时候可以用",[38,55866,55867],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[46,55869,55870],{"start":11},[49,55871,55872],{},"法2",[83,55874,55876],{"className":50615,"code":55875,"language":50617,"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,55877,55878,55888,55902,55906,55914,55928,55948,55960,55968,55974,55984,55994,55998,56002,56008,56018,56022,56026,56032,56042,56054,56066,56080,56084,56088,56094,56104,56114,56124,56136,56148,56158,56162,56166,56174,56184,56196,56208,56220,56224,56228,56234,56244,56256,56268,56278,56288,56298,56310,56322,56326,56330,56338,56350,56362,56388,56400,56404,56408,56414,56424,56428,56436,56444,56448,56456,56470,56484,56504,56512,56526,56538,56546,56564,56576,56588,56600,56612,56624,56636,56648,56656,56664,56672,56680,56691,56707,56723,56739,56755,56771,56787,56803,56819,56823,56828,56846,56864,56874,56879,56884,56895,56901,56916,56925,56929,56934,56943,56948,56957,56962,56967,56972,56995,57025,57029,57037,57041,57049,57057,57061],{"__ignoreMap":10},[92,55879,55880,55882,55884,55886],{"class":94,"line":95},[92,55881,51279],{"class":102},[92,55883,51283],{"class":51282},[92,55885,51286],{"class":1942},[92,55887,51289],{"class":102},[92,55889,55890,55892,55894,55896,55898,55900],{"class":94,"line":11},[92,55891,1013],{"class":102},[92,55893,50617],{"class":51282},[92,55895,51298],{"class":1942},[92,55897,148],{"class":102},[92,55899,51303],{"class":207},[92,55901,51289],{"class":102},[92,55903,55904],{"class":94,"line":1158},[92,55905,2379],{"emptyLinePlaceholder":17},[92,55907,55908,55910,55912],{"class":94,"line":1173},[92,55909,1013],{"class":102},[92,55911,51316],{"class":51282},[92,55913,51289],{"class":102},[92,55915,55916,55918,55920,55922,55924,55926],{"class":94,"line":1179},[92,55917,52126],{"class":102},[92,55919,51326],{"class":51282},[92,55921,51329],{"class":1942},[92,55923,148],{"class":102},[92,55925,51334],{"class":207},[92,55927,51289],{"class":102},[92,55929,55930,55932,55934,55936,55938,55940,55942,55944,55946],{"class":94,"line":1193},[92,55931,52126],{"class":102},[92,55933,51326],{"class":51282},[92,55935,14900],{"class":1942},[92,55937,148],{"class":102},[92,55939,51373],{"class":207},[92,55941,51353],{"class":1942},[92,55943,148],{"class":102},[92,55945,51380],{"class":207},[92,55947,51289],{"class":102},[92,55949,55950,55952,55954,55956,55958],{"class":94,"line":1199},[92,55951,52126],{"class":102},[92,55953,51389],{"class":51282},[92,55955,51392],{"class":102},[92,55957,51389],{"class":51282},[92,55959,51289],{"class":102},[92,55961,55962,55964,55966],{"class":94,"line":1290},[92,55963,52126],{"class":102},[92,55965,5106],{"class":51282},[92,55967,51289],{"class":102},[92,55969,55970,55972],{"class":94,"line":1296},[92,55971,6383],{"class":51282},[92,55973,15552],{"class":102},[92,55975,55976,55978,55980,55982],{"class":94,"line":1308},[92,55977,54677],{"class":151},[92,55979,51419],{"class":102},[92,55981,294],{"class":151},[92,55983,1269],{"class":102},[92,55985,55986,55988,55990,55992],{"class":94,"line":1591},[92,55987,54688],{"class":151},[92,55989,51419],{"class":102},[92,55991,294],{"class":151},[92,55993,1269],{"class":102},[92,55995,55996],{"class":94,"line":1596},[92,55997,2166],{"class":102},[92,55999,56000],{"class":94,"line":1602},[92,56001,2379],{"emptyLinePlaceholder":17},[92,56003,56004,56006],{"class":94,"line":1607},[92,56005,54707],{"class":51282},[92,56007,15552],{"class":102},[92,56009,56010,56012,56014,56016],{"class":94,"line":1621},[92,56011,54714],{"class":151},[92,56013,51419],{"class":102},[92,56015,54719],{"class":151},[92,56017,1269],{"class":102},[92,56019,56020],{"class":94,"line":1626},[92,56021,2166],{"class":102},[92,56023,56024],{"class":94,"line":1632},[92,56025,2379],{"emptyLinePlaceholder":17},[92,56027,56028,56030],{"class":94,"line":1653},[92,56029,54734],{"class":1942},[92,56031,15552],{"class":102},[92,56033,56034,56036,56038,56040],{"class":94,"line":1658},[92,56035,54741],{"class":151},[92,56037,51419],{"class":102},[92,56039,54746],{"class":151},[92,56041,1269],{"class":102},[92,56043,56044,56046,56048,56050,56052],{"class":94,"line":1672},[92,56045,54753],{"class":151},[92,56047,51419],{"class":102},[92,56049,54758],{"class":151},[92,56051,51474],{"class":98},[92,56053,1269],{"class":102},[92,56055,56056,56058,56060,56062,56064],{"class":94,"line":1677},[92,56057,54767],{"class":151},[92,56059,51419],{"class":102},[92,56061,1518],{"class":151},[92,56063,51474],{"class":98},[92,56065,1269],{"class":102},[92,56067,56068,56070,56072,56074,56076,56078],{"class":94,"line":1706},[92,56069,54688],{"class":151},[92,56071,51419],{"class":102},[92,56073,414],{"class":151},[92,56075,51474],{"class":98},[92,56077,51538],{"class":151},[92,56079,1269],{"class":102},[92,56081,56082],{"class":94,"line":1711},[92,56083,2166],{"class":102},[92,56085,56086],{"class":94,"line":1728},[92,56087,2379],{"emptyLinePlaceholder":17},[92,56089,56090,56092],{"class":94,"line":1733},[92,56091,54802],{"class":1942},[92,56093,15552],{"class":102},[92,56095,56096,56098,56100,56102],{"class":94,"line":1738},[92,56097,54741],{"class":151},[92,56099,51419],{"class":102},[92,56101,54813],{"class":151},[92,56103,1269],{"class":102},[92,56105,56106,56108,56110,56112],{"class":94,"line":1743},[92,56107,54820],{"class":151},[92,56109,51419],{"class":102},[92,56111,294],{"class":151},[92,56113,1269],{"class":102},[92,56115,56116,56118,56120,56122],{"class":94,"line":1757},[92,56117,54831],{"class":151},[92,56119,51419],{"class":102},[92,56121,294],{"class":151},[92,56123,1269],{"class":102},[92,56125,56126,56128,56130,56132,56134],{"class":94,"line":1762},[92,56127,54753],{"class":151},[92,56129,51419],{"class":102},[92,56131,414],{"class":151},[92,56133,431],{"class":98},[92,56135,1269],{"class":102},[92,56137,56138,56140,56142,56144,56146],{"class":94,"line":2556},[92,56139,54767],{"class":151},[92,56141,51419],{"class":102},[92,56143,678],{"class":151},[92,56145,431],{"class":98},[92,56147,1269],{"class":102},[92,56149,56150,56152,56154,56156],{"class":94,"line":2570},[92,56151,54866],{"class":151},[92,56153,51419],{"class":102},[92,56155,54871],{"class":151},[92,56157,1269],{"class":102},[92,56159,56160],{"class":94,"line":2578},[92,56161,2166],{"class":102},[92,56163,56164],{"class":94,"line":2583},[92,56165,2379],{"emptyLinePlaceholder":17},[92,56167,56168,56170,56172],{"class":94,"line":2589},[92,56169,54802],{"class":1942},[92,56171,6805],{"class":51282},[92,56173,15552],{"class":102},[92,56175,56176,56178,56180,56182],{"class":94,"line":2595},[92,56177,54741],{"class":151},[92,56179,51419],{"class":102},[92,56181,54813],{"class":151},[92,56183,1269],{"class":102},[92,56185,56186,56188,56190,56192,56194],{"class":94,"line":2600},[92,56187,54904],{"class":151},[92,56189,51419],{"class":102},[92,56191,1004],{"class":151},[92,56193,51474],{"class":98},[92,56195,1269],{"class":102},[92,56197,56198,56200,56202,56204,56206],{"class":94,"line":7928},[92,56199,54820],{"class":151},[92,56201,51419],{"class":102},[92,56203,803],{"class":151},[92,56205,51474],{"class":98},[92,56207,1269],{"class":102},[92,56209,56210,56212,56214,56216,56218],{"class":94,"line":7952},[92,56211,54929],{"class":151},[92,56213,51419],{"class":102},[92,56215,422],{"class":151},[92,56217,51474],{"class":98},[92,56219,1269],{"class":102},[92,56221,56222],{"class":94,"line":7957},[92,56223,2166],{"class":102},[92,56225,56226],{"class":94,"line":7963},[92,56227,2379],{"emptyLinePlaceholder":17},[92,56229,56230,56232],{"class":94,"line":7990},[92,56231,54950],{"class":51282},[92,56233,15552],{"class":102},[92,56235,56236,56238,56240,56242],{"class":94,"line":7995},[92,56237,54741],{"class":151},[92,56239,51419],{"class":102},[92,56241,54813],{"class":151},[92,56243,1269],{"class":102},[92,56245,56246,56248,56250,56252,56254],{"class":94,"line":8001},[92,56247,54929],{"class":151},[92,56249,51419],{"class":102},[92,56251,884],{"class":151},[92,56253,51474],{"class":98},[92,56255,1269],{"class":102},[92,56257,56258,56260,56262,56264,56266],{"class":94,"line":8013},[92,56259,54820],{"class":151},[92,56261,51419],{"class":102},[92,56263,803],{"class":151},[92,56265,51474],{"class":98},[92,56267,1269],{"class":102},[92,56269,56270,56272,56274,56276],{"class":94,"line":8025},[92,56271,54991],{"class":151},[92,56273,51419],{"class":102},[92,56275,51459],{"class":151},[92,56277,1269],{"class":102},[92,56279,56280,56282,56284,56286],{"class":94,"line":8037},[92,56281,55002],{"class":151},[92,56283,51419],{"class":102},[92,56285,51650],{"class":151},[92,56287,1269],{"class":102},[92,56289,56290,56292,56294,56296],{"class":94,"line":9696},[92,56291,54741],{"class":151},[92,56293,51419],{"class":102},[92,56295,54813],{"class":151},[92,56297,1269],{"class":102},[92,56299,56300,56302,56304,56306,56308],{"class":94,"line":9721},[92,56301,54753],{"class":151},[92,56303,51419],{"class":102},[92,56305,3971],{"class":151},[92,56307,51474],{"class":98},[92,56309,1269],{"class":102},[92,56311,56312,56314,56316,56318,56320],{"class":94,"line":9744},[92,56313,54767],{"class":151},[92,56315,51419],{"class":102},[92,56317,803],{"class":151},[92,56319,51474],{"class":98},[92,56321,1269],{"class":102},[92,56323,56324],{"class":94,"line":9768},[92,56325,2166],{"class":102},[92,56327,56328],{"class":94,"line":9773},[92,56329,2379],{"emptyLinePlaceholder":17},[92,56331,56332,56334,56336],{"class":94,"line":9778},[92,56333,54950],{"class":51282},[92,56335,55057],{"class":51282},[92,56337,15552],{"class":102},[92,56339,56340,56342,56344,56346,56348],{"class":94,"line":9783},[92,56341,54753],{"class":151},[92,56343,51419],{"class":102},[92,56345,803],{"class":151},[92,56347,51474],{"class":98},[92,56349,1269],{"class":102},[92,56351,56352,56354,56356,56358,56360],{"class":94,"line":9792},[92,56353,54767],{"class":151},[92,56355,51419],{"class":102},[92,56357,803],{"class":151},[92,56359,51474],{"class":98},[92,56361,1269],{"class":102},[92,56363,56364,56366,56368,56370,56372,56374,56376,56378,56380,56382,56384,56386],{"class":94,"line":9797},[92,56365,54866],{"class":151},[92,56367,51419],{"class":102},[92,56369,55092],{"class":151},[92,56371,103],{"class":102},[92,56373,294],{"class":151},[92,56375,12415],{"class":102},[92,56377,294],{"class":151},[92,56379,12415],{"class":102},[92,56381,294],{"class":151},[92,56383,12415],{"class":102},[92,56385,55109],{"class":151},[92,56387,2698],{"class":102},[92,56389,56390,56392,56394,56396,56398],{"class":94,"line":9803},[92,56391,55116],{"class":151},[92,56393,51419],{"class":102},[92,56395,549],{"class":151},[92,56397,51474],{"class":98},[92,56399,1269],{"class":102},[92,56401,56402],{"class":94,"line":9824},[92,56403,2166],{"class":102},[92,56405,56406],{"class":94,"line":9830},[92,56407,2379],{"emptyLinePlaceholder":17},[92,56409,56410,56412],{"class":94,"line":9844},[92,56411,55137],{"class":1942},[92,56413,15552],{"class":102},[92,56415,56416,56418,56420,56422],{"class":94,"line":9850},[92,56417,54866],{"class":151},[92,56419,51419],{"class":102},[92,56421,55148],{"class":151},[92,56423,1269],{"class":102},[92,56425,56426],{"class":94,"line":9877},[92,56427,2166],{"class":102},[92,56429,56430,56432,56434],{"class":94,"line":9886},[92,56431,52399],{"class":102},[92,56433,5106],{"class":51282},[92,56435,51289],{"class":102},[92,56437,56438,56440,56442],{"class":94,"line":9892},[92,56439,51767],{"class":102},[92,56441,51316],{"class":51282},[92,56443,51289],{"class":102},[92,56445,56446],{"class":94,"line":9900},[92,56447,2379],{"emptyLinePlaceholder":17},[92,56449,56450,56452,56454],{"class":94,"line":9905},[92,56451,1013],{"class":102},[92,56453,51782],{"class":51282},[92,56455,51289],{"class":102},[92,56457,56458,56460,56462,56464,56466,56468],{"class":94,"line":16584},[92,56459,52126],{"class":102},[92,56461,51593],{"class":51282},[92,56463,53468],{"class":1942},[92,56465,148],{"class":102},[92,56467,53473],{"class":207},[92,56469,51289],{"class":102},[92,56471,56472,56474,56476,56478,56480,56482],{"class":94,"line":16590},[92,56473,51323],{"class":102},[92,56475,51593],{"class":51282},[92,56477,53468],{"class":1942},[92,56479,148],{"class":102},[92,56481,55209],{"class":207},[92,56483,51289],{"class":102},[92,56485,56486,56488,56490,56492,56494,56496,56498,56500,56502],{"class":94,"line":16613},[92,56487,55216],{"class":102},[92,56489,1441],{"class":51282},[92,56491,55221],{"class":1942},[92,56493,148],{"class":102},[92,56495,55226],{"class":207},[92,56497,55229],{"class":1942},[92,56499,148],{"class":102},[92,56501,7632],{"class":207},[92,56503,51289],{"class":102},[92,56505,56506,56508,56510],{"class":94,"line":16619},[92,56507,51758],{"class":102},[92,56509,51593],{"class":51282},[92,56511,51289],{"class":102},[92,56513,56514,56516,56518,56520,56522,56524],{"class":94,"line":16642},[92,56515,51323],{"class":102},[92,56517,51593],{"class":51282},[92,56519,53468],{"class":1942},[92,56521,148],{"class":102},[92,56523,55256],{"class":207},[92,56525,51289],{"class":102},[92,56527,56528,56530,56532,56534,56536],{"class":94,"line":16656},[92,56529,55216],{"class":102},[92,56531,38],{"class":51282},[92,56533,55267],{"class":102},[92,56535,38],{"class":51282},[92,56537,51289],{"class":102},[92,56539,56540,56542,56544],{"class":94,"line":16676},[92,56541,55216],{"class":102},[92,56543,1110],{"class":51282},[92,56545,51289],{"class":102},[92,56547,56548,56550,56552,56554,56556,56558,56560,56562],{"class":94,"line":16682},[92,56549,55284],{"class":102},[92,56551,49],{"class":51282},[92,56553,53468],{"class":1942},[92,56555,148],{"class":102},[92,56557,55293],{"class":207},[92,56559,55296],{"class":102},[92,56561,49],{"class":51282},[92,56563,51289],{"class":102},[92,56565,56566,56568,56570,56572,56574],{"class":94,"line":16693},[92,56567,55284],{"class":102},[92,56569,49],{"class":51282},[92,56571,55296],{"class":102},[92,56573,49],{"class":51282},[92,56575,51289],{"class":102},[92,56577,56578,56580,56582,56584,56586],{"class":94,"line":16716},[92,56579,55284],{"class":102},[92,56581,49],{"class":51282},[92,56583,55296],{"class":102},[92,56585,49],{"class":51282},[92,56587,51289],{"class":102},[92,56589,56590,56592,56594,56596,56598],{"class":94,"line":16738},[92,56591,55284],{"class":102},[92,56593,49],{"class":51282},[92,56595,55296],{"class":102},[92,56597,49],{"class":51282},[92,56599,51289],{"class":102},[92,56601,56602,56604,56606,56608,56610],{"class":94,"line":16743},[92,56603,55284],{"class":102},[92,56605,49],{"class":51282},[92,56607,55296],{"class":102},[92,56609,49],{"class":51282},[92,56611,51289],{"class":102},[92,56613,56614,56616,56618,56620,56622],{"class":94,"line":16749},[92,56615,55284],{"class":102},[92,56617,49],{"class":51282},[92,56619,55296],{"class":102},[92,56621,49],{"class":51282},[92,56623,51289],{"class":102},[92,56625,56626,56628,56630,56632,56634],{"class":94,"line":16763},[92,56627,55284],{"class":102},[92,56629,49],{"class":51282},[92,56631,55296],{"class":102},[92,56633,49],{"class":51282},[92,56635,51289],{"class":102},[92,56637,56638,56640,56642,56644,56646],{"class":94,"line":16776},[92,56639,55284],{"class":102},[92,56641,49],{"class":51282},[92,56643,55296],{"class":102},[92,56645,49],{"class":51282},[92,56647,51289],{"class":102},[92,56649,56650,56652,56654],{"class":94,"line":16781},[92,56651,55389],{"class":102},[92,56653,1110],{"class":51282},[92,56655,51289],{"class":102},[92,56657,56658,56660,56662],{"class":94,"line":16795},[92,56659,51758],{"class":102},[92,56661,51593],{"class":51282},[92,56663,51289],{"class":102},[92,56665,56666,56668,56670],{"class":94,"line":16800},[92,56667,52399],{"class":102},[92,56669,51593],{"class":51282},[92,56671,51289],{"class":102},[92,56673,56674,56676,56678],{"class":94,"line":16806},[92,56675,52126],{"class":102},[92,56677,51795],{"class":51282},[92,56679,51289],{"class":102},[92,56681,56682,56684,56687,56689],{"class":94,"line":16811},[92,56683,11201],{"class":98},[92,56685,56686],{"class":151}," sliderData",[92,56688,13544],{"class":98},[92,56690,55429],{"class":102},[92,56692,56693,56695,56697,56699,56701,56703,56705],{"class":94,"line":16825},[92,56694,55434],{"class":102},[92,56696,55437],{"class":207},[92,56698,55440],{"class":102},[92,56700,55443],{"class":207},[92,56702,55446],{"class":102},[92,56704,55449],{"class":207},[92,56706,55452],{"class":102},[92,56708,56709,56711,56713,56715,56717,56719,56721],{"class":94,"line":16830},[92,56710,55434],{"class":102},[92,56712,55459],{"class":207},[92,56714,55440],{"class":102},[92,56716,55464],{"class":207},[92,56718,55446],{"class":102},[92,56720,55469],{"class":207},[92,56722,55452],{"class":102},[92,56724,56725,56727,56729,56731,56733,56735,56737],{"class":94,"line":16835},[92,56726,55434],{"class":102},[92,56728,55478],{"class":207},[92,56730,55440],{"class":102},[92,56732,55483],{"class":207},[92,56734,55446],{"class":102},[92,56736,55488],{"class":207},[92,56738,55452],{"class":102},[92,56740,56741,56743,56745,56747,56749,56751,56753],{"class":94,"line":16849},[92,56742,55434],{"class":102},[92,56744,55497],{"class":207},[92,56746,55440],{"class":102},[92,56748,55502],{"class":207},[92,56750,55446],{"class":102},[92,56752,55507],{"class":207},[92,56754,55452],{"class":102},[92,56756,56757,56759,56761,56763,56765,56767,56769],{"class":94,"line":16861},[92,56758,55434],{"class":102},[92,56760,55516],{"class":207},[92,56762,55440],{"class":102},[92,56764,55521],{"class":207},[92,56766,55446],{"class":102},[92,56768,55526],{"class":207},[92,56770,55452],{"class":102},[92,56772,56773,56775,56777,56779,56781,56783,56785],{"class":94,"line":16866},[92,56774,55434],{"class":102},[92,56776,55535],{"class":207},[92,56778,55440],{"class":102},[92,56780,55540],{"class":207},[92,56782,55446],{"class":102},[92,56784,55545],{"class":207},[92,56786,55452],{"class":102},[92,56788,56789,56791,56793,56795,56797,56799,56801],{"class":94,"line":16879},[92,56790,55434],{"class":102},[92,56792,55554],{"class":207},[92,56794,55440],{"class":102},[92,56796,55559],{"class":207},[92,56798,55446],{"class":102},[92,56800,55564],{"class":207},[92,56802,55452],{"class":102},[92,56804,56805,56807,56809,56811,56813,56815,56817],{"class":94,"line":16884},[92,56806,55434],{"class":102},[92,56808,55573],{"class":207},[92,56810,55440],{"class":102},[92,56812,55578],{"class":207},[92,56814,55446],{"class":102},[92,56816,55583],{"class":207},[92,56818,55586],{"class":102},[92,56820,56821],{"class":94,"line":16889},[92,56822,53091],{"class":102},[92,56824,56825],{"class":94,"line":16894},[92,56826,56827],{"class":161},"    \u002F\u002F 1.获取元素\n",[92,56829,56830,56832,56834,56836,56838,56840,56842,56844],{"class":94,"line":16907},[92,56831,11201],{"class":98},[92,56833,55597],{"class":151},[92,56835,13544],{"class":98},[92,56837,54378],{"class":102},[92,56839,54381],{"class":1942},[92,56841,103],{"class":102},[92,56843,55608],{"class":207},[92,56845,109],{"class":102},[92,56847,56848,56850,56852,56854,56856,56858,56860,56862],{"class":94,"line":16912},[92,56849,11201],{"class":98},[92,56851,6805],{"class":151},[92,56853,13544],{"class":98},[92,56855,54378],{"class":102},[92,56857,54381],{"class":1942},[92,56859,103],{"class":102},[92,56861,55627],{"class":207},[92,56863,109],{"class":102},[92,56865,56866,56868,56870,56872],{"class":94,"line":32615},[92,56867,52201],{"class":98},[92,56869,9418],{"class":102},[92,56871,148],{"class":98},[92,56873,47315],{"class":151},[92,56875,56876],{"class":94,"line":32621},[92,56877,56878],{"class":161},"    \u002F\u002F 2.开启定时器\n",[92,56880,56881],{"class":94,"line":32627},[92,56882,56883],{"class":161},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[92,56885,56886,56889,56891,56893],{"class":94,"line":32633},[92,56887,56888],{"class":1942},"    setInterval",[92,56890,103],{"class":102},[92,56892,54431],{"class":98},[92,56894,54434],{"class":102},[92,56896,56897,56899],{"class":94,"line":32639},[92,56898,54439],{"class":102},[92,56900,2681],{"class":98},[92,56902,56903,56905,56907,56909,56912,56914],{"class":94,"line":32650},[92,56904,54462],{"class":98},[92,56906,54465],{"class":102},[92,56908,1689],{"class":98},[92,56910,56911],{"class":102}," sliderData.",[92,56913,51950],{"class":151},[92,56915,12422],{"class":102},[92,56917,56918,56921,56923],{"class":94,"line":32656},[92,56919,56920],{"class":102},"        i ",[92,56922,148],{"class":98},[92,56924,47315],{"class":151},[92,56926,56927],{"class":94,"line":32676},[92,56928,52380],{"class":102},[92,56930,56931],{"class":94,"line":32682},[92,56932,56933],{"class":161},"      \u002F\u002F 更换图片路径\n",[92,56935,56936,56938,56940],{"class":94,"line":32693},[92,56937,55703],{"class":102},[92,56939,148],{"class":98},[92,56941,56942],{"class":102}," sliderData[i].url\n",[92,56944,56945],{"class":94,"line":32699},[92,56946,56947],{"class":161},"      \u002F\u002F 把文字写到p里面\n",[92,56949,56950,56952,56954],{"class":94,"line":32705},[92,56951,55713],{"class":102},[92,56953,148],{"class":98},[92,56955,56956],{"class":102}," sliderData[i].title\n",[92,56958,56959],{"class":94,"line":32711},[92,56960,56961],{"class":161},"      \u002F\u002F 小圆点\n",[92,56963,56964],{"class":94,"line":32717},[92,56965,56966],{"class":161},"      \u002F\u002F 先删除以前的active\n",[92,56968,56969],{"class":94,"line":32723},[92,56970,56971],{"class":161},"      \u002F\u002F 只让当前li添加active\n",[92,56973,56974,56976,56978,56980,56983,56986,56989,56991,56993],{"class":94,"line":32729},[92,56975,55753],{"class":102},[92,56977,54381],{"class":1942},[92,56979,103],{"class":102},[92,56981,56982],{"class":207},"'.slider-footer .activate'",[92,56984,56985],{"class":102},").classList.",[92,56987,56988],{"class":1942},"remove",[92,56990,103],{"class":102},[92,56992,55771],{"class":207},[92,56994,109],{"class":102},[92,56996,56997,56999,57001,57003,57006,57008,57010,57012,57015,57017,57019,57021,57023],{"class":94,"line":32735},[92,56998,55753],{"class":102},[92,57000,54381],{"class":1942},[92,57002,103],{"class":102},[92,57004,57005],{"class":207},"`.slider-footer ul li:nth-child(${",[92,57007,544],{"class":102},[92,57009,45548],{"class":98},[92,57011,25100],{"class":151},[92,57013,57014],{"class":207},"})`",[92,57016,56985],{"class":102},[92,57018,5314],{"class":1942},[92,57020,103],{"class":102},[92,57022,55771],{"class":207},[92,57024,109],{"class":102},[92,57026,57027],{"class":94,"line":32755},[92,57028,2379],{"emptyLinePlaceholder":17},[92,57030,57031,57033,57035],{"class":94,"line":32761},[92,57032,54517],{"class":102},[92,57034,6390],{"class":151},[92,57036,109],{"class":102},[92,57038,57039],{"class":94,"line":32777},[92,57040,2379],{"emptyLinePlaceholder":17},[92,57042,57043,57045,57047],{"class":94,"line":32783},[92,57044,52399],{"class":102},[92,57046,51795],{"class":51282},[92,57048,51289],{"class":102},[92,57050,57051,57053,57055],{"class":94,"line":32797},[92,57052,51767],{"class":102},[92,57054,51782],{"class":51282},[92,57056,51289],{"class":102},[92,57058,57059],{"class":94,"line":32803},[92,57060,2379],{"emptyLinePlaceholder":17},[92,57062,57063,57065,57067],{"class":94,"line":32818},[92,57064,51767],{"class":102},[92,57066,50617],{"class":51282},[92,57068,51289],{"class":102},[63,57070,57072],{"id":57071},"_317-重要知识点","3.1.7 重要知识点",[38,57074,57075,57076],{},"浏览器在渲染文本时， ",[252,57077,57078],{},"没有空格或换行符就没有“断行点”",[38,57080,57081],{},[1441,57082],{"alt":10,"src":57083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[38,57085,57086],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[38,57088,57089],{},[1441,57090],{"alt":10,"src":57091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[38,57093,57094],{},[1441,57095],{"alt":10,"src":57096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[33,57098,57100],{"id":57099},"_32-dom事件基础","3.2 DOM事件基础",[63,57102,57104],{"id":57103},"_321-事件监听","3.2.1 事件监听",[38,57106,57107],{},[1441,57108],{"alt":10,"src":57109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[38,57111,57112],{},"事件监听有响应的发生",[38,57114,57115],{},[1441,57116],{"alt":10,"src":57117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[38,57119,57120],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[38,57122,57123],{},"对于有名函数,要执行的函数名后边不要加()",[63,57125,57127],{"id":57126},"_322-随机点名案例","3.2.2 随机点名案例",[83,57129,57131],{"className":50615,"code":57130,"language":50617,"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,57132,57133,57143,57157,57161,57169,57183,57203,57215,57223,57229,57239,57249,57253,57257,57264,57275,57279,57283,57289,57301,57315,57325,57337,57350,57354,57358,57365,57369,57382,57394,57406,57410,57414,57418,57425,57435,57439,57443,57452,57464,57476,57491,57495,57503,57511,57515,57523,57536,57550,57563,57583,57591,57606,57626,57646,57654,57658,57666,57671,57707,57727,57732,57751,57756,57767,57772,57783,57788,57807,57822,57827,57853,57863,57872,57877,57893,57898,57903,57908,57923,57927,57931,57936,57955,57972,57980,57985,58000,58004,58008,58016,58024,58028],{"__ignoreMap":10},[92,57134,57135,57137,57139,57141],{"class":94,"line":95},[92,57136,51279],{"class":102},[92,57138,51283],{"class":51282},[92,57140,51286],{"class":1942},[92,57142,51289],{"class":102},[92,57144,57145,57147,57149,57151,57153,57155],{"class":94,"line":11},[92,57146,1013],{"class":102},[92,57148,50617],{"class":51282},[92,57150,51298],{"class":1942},[92,57152,148],{"class":102},[92,57154,51303],{"class":207},[92,57156,51289],{"class":102},[92,57158,57159],{"class":94,"line":1158},[92,57160,2379],{"emptyLinePlaceholder":17},[92,57162,57163,57165,57167],{"class":94,"line":1173},[92,57164,1013],{"class":102},[92,57166,51316],{"class":51282},[92,57168,51289],{"class":102},[92,57170,57171,57173,57175,57177,57179,57181],{"class":94,"line":1179},[92,57172,52126],{"class":102},[92,57174,51326],{"class":51282},[92,57176,51329],{"class":1942},[92,57178,148],{"class":102},[92,57180,51334],{"class":207},[92,57182,51289],{"class":102},[92,57184,57185,57187,57189,57191,57193,57195,57197,57199,57201],{"class":94,"line":1193},[92,57186,52126],{"class":102},[92,57188,51326],{"class":51282},[92,57190,14900],{"class":1942},[92,57192,148],{"class":102},[92,57194,51373],{"class":207},[92,57196,51353],{"class":1942},[92,57198,148],{"class":102},[92,57200,51380],{"class":207},[92,57202,51289],{"class":102},[92,57204,57205,57207,57209,57211,57213],{"class":94,"line":1199},[92,57206,52126],{"class":102},[92,57208,51389],{"class":51282},[92,57210,51392],{"class":102},[92,57212,51389],{"class":51282},[92,57214,51289],{"class":102},[92,57216,57217,57219,57221],{"class":94,"line":1290},[92,57218,52126],{"class":102},[92,57220,5106],{"class":51282},[92,57222,51289],{"class":102},[92,57224,57225,57227],{"class":94,"line":1296},[92,57226,6383],{"class":51282},[92,57228,15552],{"class":102},[92,57230,57231,57233,57235,57237],{"class":94,"line":1308},[92,57232,54688],{"class":151},[92,57234,51419],{"class":102},[92,57236,294],{"class":151},[92,57238,1269],{"class":102},[92,57240,57241,57243,57245,57247],{"class":94,"line":1591},[92,57242,54677],{"class":151},[92,57244,51419],{"class":102},[92,57246,294],{"class":151},[92,57248,1269],{"class":102},[92,57250,57251],{"class":94,"line":1596},[92,57252,2166],{"class":102},[92,57254,57255],{"class":94,"line":1602},[92,57256,2379],{"emptyLinePlaceholder":17},[92,57258,57259,57262],{"class":94,"line":1607},[92,57260,57261],{"class":51282},"    h2",[92,57263,15552],{"class":102},[92,57265,57266,57269,57271,57273],{"class":94,"line":1621},[92,57267,57268],{"class":151},"      text-align",[92,57270,51419],{"class":102},[92,57272,51574],{"class":151},[92,57274,1269],{"class":102},[92,57276,57277],{"class":94,"line":1626},[92,57278,2166],{"class":102},[92,57280,57281],{"class":94,"line":1632},[92,57282,2379],{"emptyLinePlaceholder":17},[92,57284,57285,57287],{"class":94,"line":1653},[92,57286,54734],{"class":1942},[92,57288,15552],{"class":102},[92,57290,57291,57293,57295,57297,57299],{"class":94,"line":1658},[92,57292,54753],{"class":151},[92,57294,51419],{"class":102},[92,57296,1518],{"class":151},[92,57298,51474],{"class":98},[92,57300,1269],{"class":102},[92,57302,57303,57305,57307,57309,57311,57313],{"class":94,"line":1672},[92,57304,54688],{"class":151},[92,57306,51419],{"class":102},[92,57308,759],{"class":151},[92,57310,51474],{"class":98},[92,57312,51538],{"class":151},[92,57314,1269],{"class":102},[92,57316,57317,57319,57321,57323],{"class":94,"line":1677},[92,57318,54991],{"class":151},[92,57320,51419],{"class":102},[92,57322,51459],{"class":151},[92,57324,1269],{"class":102},[92,57326,57327,57329,57331,57333,57335],{"class":94,"line":1706},[92,57328,54904],{"class":151},[92,57330,51419],{"class":102},[92,57332,928],{"class":151},[92,57334,51474],{"class":98},[92,57336,1269],{"class":102},[92,57338,57339,57342,57344,57346,57348],{"class":94,"line":1711},[92,57340,57341],{"class":151},"      line-height",[92,57343,51419],{"class":102},[92,57345,504],{"class":151},[92,57347,51474],{"class":98},[92,57349,1269],{"class":102},[92,57351,57352],{"class":94,"line":1728},[92,57353,2166],{"class":102},[92,57355,57356],{"class":94,"line":1733},[92,57357,2379],{"emptyLinePlaceholder":17},[92,57359,57360,57363],{"class":94,"line":1738},[92,57361,57362],{"class":1942},"    .qs",[92,57364,15552],{"class":102},[92,57366,57367],{"class":94,"line":1743},[92,57368,2379],{"emptyLinePlaceholder":17},[92,57370,57371,57373,57375,57378,57380],{"class":94,"line":1757},[92,57372,54753],{"class":151},[92,57374,51419],{"class":102},[92,57376,57377],{"class":151},"450",[92,57379,51474],{"class":98},[92,57381,1269],{"class":102},[92,57383,57384,57386,57388,57390,57392],{"class":94,"line":1762},[92,57385,54767],{"class":151},[92,57387,51419],{"class":102},[92,57389,504],{"class":151},[92,57391,51474],{"class":98},[92,57393,1269],{"class":102},[92,57395,57396,57399,57401,57404],{"class":94,"line":2556},[92,57397,57398],{"class":151},"      color",[92,57400,51419],{"class":102},[92,57402,57403],{"class":151},"red",[92,57405,1269],{"class":102},[92,57407,57408],{"class":94,"line":2570},[92,57409,2379],{"emptyLinePlaceholder":17},[92,57411,57412],{"class":94,"line":2578},[92,57413,2166],{"class":102},[92,57415,57416],{"class":94,"line":2583},[92,57417,2379],{"emptyLinePlaceholder":17},[92,57419,57420,57423],{"class":94,"line":2589},[92,57421,57422],{"class":1942},"    .btns",[92,57424,15552],{"class":102},[92,57426,57427,57429,57431,57433],{"class":94,"line":2595},[92,57428,57268],{"class":151},[92,57430,51419],{"class":102},[92,57432,51574],{"class":151},[92,57434,1269],{"class":102},[92,57436,57437],{"class":94,"line":2600},[92,57438,2166],{"class":102},[92,57440,57441],{"class":94,"line":7928},[92,57442,2379],{"emptyLinePlaceholder":17},[92,57444,57445,57447,57450],{"class":94,"line":7952},[92,57446,57422],{"class":1942},[92,57448,57449],{"class":51282}," button",[92,57451,15552],{"class":102},[92,57453,57454,57456,57458,57460,57462],{"class":94,"line":7957},[92,57455,54753],{"class":151},[92,57457,51419],{"class":102},[92,57459,920],{"class":151},[92,57461,51474],{"class":98},[92,57463,1269],{"class":102},[92,57465,57466,57468,57470,57472,57474],{"class":94,"line":7963},[92,57467,54767],{"class":151},[92,57469,51419],{"class":102},[92,57471,376],{"class":151},[92,57473,51474],{"class":98},[92,57475,1269],{"class":102},[92,57477,57478,57480,57482,57484,57487,57489],{"class":94,"line":7990},[92,57479,54688],{"class":151},[92,57481,51419],{"class":102},[92,57483,294],{"class":151},[92,57485,57486],{"class":151}," 50",[92,57488,51474],{"class":98},[92,57490,1269],{"class":102},[92,57492,57493],{"class":94,"line":7995},[92,57494,2166],{"class":102},[92,57496,57497,57499,57501],{"class":94,"line":8001},[92,57498,52399],{"class":102},[92,57500,5106],{"class":51282},[92,57502,51289],{"class":102},[92,57504,57505,57507,57509],{"class":94,"line":8013},[92,57506,51767],{"class":102},[92,57508,51316],{"class":51282},[92,57510,51289],{"class":102},[92,57512,57513],{"class":94,"line":8025},[92,57514,2379],{"emptyLinePlaceholder":17},[92,57516,57517,57519,57521],{"class":94,"line":8037},[92,57518,1013],{"class":102},[92,57520,51782],{"class":51282},[92,57522,51289],{"class":102},[92,57524,57525,57527,57529,57532,57534],{"class":94,"line":9696},[92,57526,52126],{"class":102},[92,57528,33],{"class":51282},[92,57530,57531],{"class":102},">随机点名\u003C\u002F",[92,57533,33],{"class":51282},[92,57535,51289],{"class":102},[92,57537,57538,57540,57542,57544,57546,57548],{"class":94,"line":9721},[92,57539,52126],{"class":102},[92,57541,51593],{"class":51282},[92,57543,53468],{"class":1942},[92,57545,148],{"class":102},[92,57547,53473],{"class":207},[92,57549,51289],{"class":102},[92,57551,57552,57554,57556,57559,57561],{"class":94,"line":9744},[92,57553,51323],{"class":102},[92,57555,92],{"class":51282},[92,57557,57558],{"class":102},">名字是：\u003C\u002F",[92,57560,92],{"class":51282},[92,57562,51289],{"class":102},[92,57564,57565,57567,57569,57571,57573,57576,57579,57581],{"class":94,"line":9768},[92,57566,51323],{"class":102},[92,57568,51593],{"class":51282},[92,57570,53468],{"class":1942},[92,57572,148],{"class":102},[92,57574,57575],{"class":207},"\"qs\"",[92,57577,57578],{"class":102},">这里显示姓名\u003C\u002F",[92,57580,51593],{"class":51282},[92,57582,51289],{"class":102},[92,57584,57585,57587,57589],{"class":94,"line":9773},[92,57586,52399],{"class":102},[92,57588,51593],{"class":51282},[92,57590,51289],{"class":102},[92,57592,57593,57595,57597,57599,57601,57604],{"class":94,"line":9778},[92,57594,52126],{"class":102},[92,57596,51593],{"class":51282},[92,57598,53468],{"class":1942},[92,57600,148],{"class":102},[92,57602,57603],{"class":207},"\"btns\"",[92,57605,51289],{"class":102},[92,57607,57608,57610,57612,57614,57616,57619,57622,57624],{"class":94,"line":9783},[92,57609,51323],{"class":102},[92,57611,53869],{"class":51282},[92,57613,53468],{"class":1942},[92,57615,148],{"class":102},[92,57617,57618],{"class":207},"\"start\"",[92,57620,57621],{"class":102},">开始\u003C\u002F",[92,57623,53869],{"class":51282},[92,57625,51289],{"class":102},[92,57627,57628,57630,57632,57634,57636,57639,57642,57644],{"class":94,"line":9792},[92,57629,51323],{"class":102},[92,57631,53869],{"class":51282},[92,57633,53468],{"class":1942},[92,57635,148],{"class":102},[92,57637,57638],{"class":207},"\"end\"",[92,57640,57641],{"class":102},">结束\u003C\u002F",[92,57643,53869],{"class":51282},[92,57645,51289],{"class":102},[92,57647,57648,57650,57652],{"class":94,"line":9797},[92,57649,52399],{"class":102},[92,57651,51593],{"class":51282},[92,57653,51289],{"class":102},[92,57655,57656],{"class":94,"line":9803},[92,57657,2379],{"emptyLinePlaceholder":17},[92,57659,57660,57662,57664],{"class":94,"line":9824},[92,57661,52126],{"class":102},[92,57663,51795],{"class":51282},[92,57665,51289],{"class":102},[92,57667,57668],{"class":94,"line":9830},[92,57669,57670],{"class":161},"    \u002F\u002F 数据数组\n",[92,57672,57673,57675,57678,57680,57682,57685,57687,57690,57692,57695,57697,57700,57702,57705],{"class":94,"line":9844},[92,57674,11201],{"class":98},[92,57676,57677],{"class":151}," arr",[92,57679,13544],{"class":98},[92,57681,52208],{"class":102},[92,57683,57684],{"class":207},"'马超'",[92,57686,12415],{"class":102},[92,57688,57689],{"class":207},"'黄忠'",[92,57691,12415],{"class":102},[92,57693,57694],{"class":207},"'赵云'",[92,57696,12415],{"class":102},[92,57698,57699],{"class":207},"'关羽'",[92,57701,12415],{"class":102},[92,57703,57704],{"class":207},"'张飞'",[92,57706,33228],{"class":102},[92,57708,57709,57711,57714,57716,57718,57720,57722,57725],{"class":94,"line":9850},[92,57710,11201],{"class":98},[92,57712,57713],{"class":151}," qs",[92,57715,13544],{"class":98},[92,57717,54378],{"class":102},[92,57719,54381],{"class":1942},[92,57721,103],{"class":102},[92,57723,57724],{"class":207},"'.qs'",[92,57726,109],{"class":102},[92,57728,57729],{"class":94,"line":9877},[92,57730,57731],{"class":161},"    \u002F\u002F 1.业务1.开始按钮模块\n",[92,57733,57734,57736,57738,57740,57742,57744,57746,57749],{"class":94,"line":9886},[92,57735,11201],{"class":98},[92,57737,4163],{"class":151},[92,57739,13544],{"class":98},[92,57741,54378],{"class":102},[92,57743,54381],{"class":1942},[92,57745,103],{"class":102},[92,57747,57748],{"class":207},"'.start'",[92,57750,109],{"class":102},[92,57752,57753],{"class":94,"line":9892},[92,57754,57755],{"class":161},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[92,57757,57758,57760,57763,57765],{"class":94,"line":9900},[92,57759,52201],{"class":98},[92,57761,57762],{"class":102}," timerId ",[92,57764,148],{"class":98},[92,57766,47315],{"class":151},[92,57768,57769],{"class":94,"line":9905},[92,57770,57771],{"class":161},"    \u002F\u002F 随机号要全局变量\n",[92,57773,57774,57776,57779,57781],{"class":94,"line":16584},[92,57775,52201],{"class":98},[92,57777,57778],{"class":102}," random ",[92,57780,148],{"class":98},[92,57782,47315],{"class":151},[92,57784,57785],{"class":94,"line":16590},[92,57786,57787],{"class":161},"    \u002F\u002F 1.1 添加点击事件\n",[92,57789,57790,57793,57796,57798,57801,57803,57805],{"class":94,"line":16613},[92,57791,57792],{"class":102},"    start.",[92,57794,57795],{"class":1942},"addEventListener",[92,57797,103],{"class":102},[92,57799,57800],{"class":207},"'click'",[92,57802,12415],{"class":102},[92,57804,54431],{"class":98},[92,57806,54434],{"class":102},[92,57808,57809,57812,57814,57816,57818,57820],{"class":94,"line":16619},[92,57810,57811],{"class":102},"      timerId ",[92,57813,148],{"class":98},[92,57815,54426],{"class":1942},[92,57817,103],{"class":102},[92,57819,54431],{"class":98},[92,57821,54434],{"class":102},[92,57823,57824],{"class":94,"line":16642},[92,57825,57826],{"class":161},"        \u002F\u002F 随机数\n",[92,57828,57829,57832,57834,57837,57840,57843,57845,57847,57849,57851],{"class":94,"line":16656},[92,57830,57831],{"class":102},"        random ",[92,57833,148],{"class":98},[92,57835,57836],{"class":1942}," parseInt",[92,57838,57839],{"class":102},"(Math.",[92,57841,57842],{"class":1942},"random",[92,57844,13030],{"class":102},[92,57846,558],{"class":98},[92,57848,51947],{"class":102},[92,57850,51950],{"class":151},[92,57852,109],{"class":102},[92,57854,57855,57858,57860],{"class":94,"line":16676},[92,57856,57857],{"class":102},"        qs.innerHTML ",[92,57859,148],{"class":98},[92,57861,57862],{"class":102}," arr[random]\n",[92,57864,57865,57868,57870],{"class":94,"line":16682},[92,57866,57867],{"class":102},"      }, ",[92,57869,376],{"class":151},[92,57871,109],{"class":102},[92,57873,57874],{"class":94,"line":16693},[92,57875,57876],{"class":161},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[92,57878,57879,57881,57884,57886,57889,57891],{"class":94,"line":16716},[92,57880,54462],{"class":98},[92,57882,57883],{"class":102}," (arr.",[92,57885,51950],{"class":151},[92,57887,57888],{"class":98}," ===",[92,57890,25100],{"class":151},[92,57892,12422],{"class":102},[92,57894,57895],{"class":94,"line":16738},[92,57896,57897],{"class":161},"        \u002F\u002F start.disabled = true\n",[92,57899,57900],{"class":94,"line":16743},[92,57901,57902],{"class":161},"        \u002F\u002F end.disabled = true\n",[92,57904,57905],{"class":94,"line":16749},[92,57906,57907],{"class":161},"        \u002F\u002F 可以合起来写\n",[92,57909,57910,57913,57915,57918,57920],{"class":94,"line":16763},[92,57911,57912],{"class":102},"        start.disabled ",[92,57914,148],{"class":98},[92,57916,57917],{"class":102}," end.disabled ",[92,57919,148],{"class":98},[92,57921,57922],{"class":151}," true\n",[92,57924,57925],{"class":94,"line":16776},[92,57926,52380],{"class":102},[92,57928,57929],{"class":94,"line":16781},[92,57930,33443],{"class":102},[92,57932,57933],{"class":94,"line":16795},[92,57934,57935],{"class":161},"    \u002F\u002F 1.2 关闭按钮模块\n",[92,57937,57938,57940,57942,57944,57946,57948,57950,57953],{"class":94,"line":16800},[92,57939,11201],{"class":98},[92,57941,4179],{"class":151},[92,57943,13544],{"class":98},[92,57945,54378],{"class":102},[92,57947,54381],{"class":1942},[92,57949,103],{"class":102},[92,57951,57952],{"class":207},"'.end'",[92,57954,109],{"class":102},[92,57956,57957,57960,57962,57964,57966,57968,57970],{"class":94,"line":16806},[92,57958,57959],{"class":102},"    end.",[92,57961,57795],{"class":1942},[92,57963,103],{"class":102},[92,57965,57800],{"class":207},[92,57967,12415],{"class":102},[92,57969,54431],{"class":98},[92,57971,54434],{"class":102},[92,57973,57974,57977],{"class":94,"line":16811},[92,57975,57976],{"class":1942},"      clearInterval",[92,57978,57979],{"class":102},"(timerId)\n",[92,57981,57982],{"class":94,"line":16825},[92,57983,57984],{"class":161},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[92,57986,57987,57990,57993,57996,57998],{"class":94,"line":16830},[92,57988,57989],{"class":102},"      arr.",[92,57991,57992],{"class":1942},"splice",[92,57994,57995],{"class":102},"(random, ",[92,57997,320],{"class":151},[92,57999,109],{"class":102},[92,58001,58002],{"class":94,"line":16835},[92,58003,33443],{"class":102},[92,58005,58006],{"class":94,"line":16849},[92,58007,2379],{"emptyLinePlaceholder":17},[92,58009,58010,58012,58014],{"class":94,"line":16861},[92,58011,52399],{"class":102},[92,58013,51795],{"class":51282},[92,58015,51289],{"class":102},[92,58017,58018,58020,58022],{"class":94,"line":16866},[92,58019,51767],{"class":102},[92,58021,51782],{"class":51282},[92,58023,51289],{"class":102},[92,58025,58026],{"class":94,"line":16879},[92,58027,2379],{"emptyLinePlaceholder":17},[92,58029,58030,58032,58034],{"class":94,"line":16884},[92,58031,51767],{"class":102},[92,58033,50617],{"class":51282},[92,58035,51289],{"class":102},[38,58037,58038],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[63,58040,58042],{"id":58041},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[83,58044,58046],{"className":50615,"code":58045,"language":50617,"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,58047,58048,58058,58072,58076,58084,58098,58118,58130,58138,58142,58150,58162,58170,58189,58206,58222,58232,58236,58244,58252,58256],{"__ignoreMap":10},[92,58049,58050,58052,58054,58056],{"class":94,"line":95},[92,58051,51279],{"class":102},[92,58053,51283],{"class":51282},[92,58055,51286],{"class":1942},[92,58057,51289],{"class":102},[92,58059,58060,58062,58064,58066,58068,58070],{"class":94,"line":11},[92,58061,1013],{"class":102},[92,58063,50617],{"class":51282},[92,58065,51298],{"class":1942},[92,58067,148],{"class":102},[92,58069,51303],{"class":207},[92,58071,51289],{"class":102},[92,58073,58074],{"class":94,"line":1158},[92,58075,2379],{"emptyLinePlaceholder":17},[92,58077,58078,58080,58082],{"class":94,"line":1173},[92,58079,1013],{"class":102},[92,58081,51316],{"class":51282},[92,58083,51289],{"class":102},[92,58085,58086,58088,58090,58092,58094,58096],{"class":94,"line":1179},[92,58087,52126],{"class":102},[92,58089,51326],{"class":51282},[92,58091,51329],{"class":1942},[92,58093,148],{"class":102},[92,58095,51334],{"class":207},[92,58097,51289],{"class":102},[92,58099,58100,58102,58104,58106,58108,58110,58112,58114,58116],{"class":94,"line":1193},[92,58101,52126],{"class":102},[92,58103,51326],{"class":51282},[92,58105,14900],{"class":1942},[92,58107,148],{"class":102},[92,58109,51373],{"class":207},[92,58111,51353],{"class":1942},[92,58113,148],{"class":102},[92,58115,51380],{"class":207},[92,58117,51289],{"class":102},[92,58119,58120,58122,58124,58126,58128],{"class":94,"line":1199},[92,58121,52126],{"class":102},[92,58123,51389],{"class":51282},[92,58125,51392],{"class":102},[92,58127,51389],{"class":51282},[92,58129,51289],{"class":102},[92,58131,58132,58134,58136],{"class":94,"line":1290},[92,58133,51767],{"class":102},[92,58135,51316],{"class":51282},[92,58137,51289],{"class":102},[92,58139,58140],{"class":94,"line":1296},[92,58141,2379],{"emptyLinePlaceholder":17},[92,58143,58144,58146,58148],{"class":94,"line":1308},[92,58145,1013],{"class":102},[92,58147,51782],{"class":51282},[92,58149,51289],{"class":102},[92,58151,58152,58154,58156,58158,58160],{"class":94,"line":1591},[92,58153,52126],{"class":102},[92,58155,53869],{"class":51282},[92,58157,53875],{"class":102},[92,58159,53869],{"class":51282},[92,58161,51289],{"class":102},[92,58163,58164,58166,58168],{"class":94,"line":1596},[92,58165,52126],{"class":102},[92,58167,51795],{"class":51282},[92,58169,51289],{"class":102},[92,58171,58172,58174,58176,58178,58180,58182,58184,58187],{"class":94,"line":1602},[92,58173,11201],{"class":98},[92,58175,54373],{"class":151},[92,58177,13544],{"class":98},[92,58179,54378],{"class":102},[92,58181,54381],{"class":1942},[92,58183,103],{"class":102},[92,58185,58186],{"class":207},"'button'",[92,58188,109],{"class":102},[92,58190,58191,58194,58196,58198,58200,58202,58204],{"class":94,"line":1607},[92,58192,58193],{"class":102},"    btn.",[92,58195,57795],{"class":1942},[92,58197,103],{"class":102},[92,58199,57800],{"class":207},[92,58201,12415],{"class":102},[92,58203,54431],{"class":98},[92,58205,54434],{"class":102},[92,58207,58208,58211,58213,58215,58218,58220],{"class":94,"line":1621},[92,58209,58210],{"class":98},"      const",[92,58212,2219],{"class":151},[92,58214,13544],{"class":98},[92,58216,58217],{"class":102}," Math.",[92,58219,57842],{"class":1942},[92,58221,1955],{"class":102},[92,58223,58224,58227,58230],{"class":94,"line":1626},[92,58225,58226],{"class":102},"      console.",[92,58228,58229],{"class":1942},"log",[92,58231,116],{"class":102},[92,58233,58234],{"class":94,"line":1632},[92,58235,33443],{"class":102},[92,58237,58238,58240,58242],{"class":94,"line":1653},[92,58239,52399],{"class":102},[92,58241,51795],{"class":51282},[92,58243,51289],{"class":102},[92,58245,58246,58248,58250],{"class":94,"line":1658},[92,58247,51767],{"class":102},[92,58249,51782],{"class":51282},[92,58251,51289],{"class":102},[92,58253,58254],{"class":94,"line":1672},[92,58255,2379],{"emptyLinePlaceholder":17},[92,58257,58258,58260,58262],{"class":94,"line":1677},[92,58259,51767],{"class":102},[92,58261,50617],{"class":51282},[92,58263,51289],{"class":102},[38,58265,58266],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[38,58268,58269],{},"常量不可以重新赋值",[38,58271,58272],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[83,58274,58276],{"className":50615,"code":58275,"language":50617,"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,58277,58278,58288,58302,58306,58314,58328,58348,58360,58368,58372,58380,58392,58400,58411,58429,58445,58459,58467,58471,58479,58487,58491],{"__ignoreMap":10},[92,58279,58280,58282,58284,58286],{"class":94,"line":95},[92,58281,51279],{"class":102},[92,58283,51283],{"class":51282},[92,58285,51286],{"class":1942},[92,58287,51289],{"class":102},[92,58289,58290,58292,58294,58296,58298,58300],{"class":94,"line":11},[92,58291,1013],{"class":102},[92,58293,50617],{"class":51282},[92,58295,51298],{"class":1942},[92,58297,148],{"class":102},[92,58299,51303],{"class":207},[92,58301,51289],{"class":102},[92,58303,58304],{"class":94,"line":1158},[92,58305,2379],{"emptyLinePlaceholder":17},[92,58307,58308,58310,58312],{"class":94,"line":1173},[92,58309,1013],{"class":102},[92,58311,51316],{"class":51282},[92,58313,51289],{"class":102},[92,58315,58316,58318,58320,58322,58324,58326],{"class":94,"line":1179},[92,58317,52126],{"class":102},[92,58319,51326],{"class":51282},[92,58321,51329],{"class":1942},[92,58323,148],{"class":102},[92,58325,51334],{"class":207},[92,58327,51289],{"class":102},[92,58329,58330,58332,58334,58336,58338,58340,58342,58344,58346],{"class":94,"line":1193},[92,58331,52126],{"class":102},[92,58333,51326],{"class":51282},[92,58335,14900],{"class":1942},[92,58337,148],{"class":102},[92,58339,51373],{"class":207},[92,58341,51353],{"class":1942},[92,58343,148],{"class":102},[92,58345,51380],{"class":207},[92,58347,51289],{"class":102},[92,58349,58350,58352,58354,58356,58358],{"class":94,"line":1199},[92,58351,52126],{"class":102},[92,58353,51389],{"class":51282},[92,58355,51392],{"class":102},[92,58357,51389],{"class":51282},[92,58359,51289],{"class":102},[92,58361,58362,58364,58366],{"class":94,"line":1290},[92,58363,51767],{"class":102},[92,58365,51316],{"class":51282},[92,58367,51289],{"class":102},[92,58369,58370],{"class":94,"line":1296},[92,58371,2379],{"emptyLinePlaceholder":17},[92,58373,58374,58376,58378],{"class":94,"line":1308},[92,58375,1013],{"class":102},[92,58377,51782],{"class":51282},[92,58379,51289],{"class":102},[92,58381,58382,58384,58386,58388,58390],{"class":94,"line":1591},[92,58383,52126],{"class":102},[92,58385,53869],{"class":51282},[92,58387,53875],{"class":102},[92,58389,53869],{"class":51282},[92,58391,51289],{"class":102},[92,58393,58394,58396,58398],{"class":94,"line":1596},[92,58395,52126],{"class":102},[92,58397,51795],{"class":51282},[92,58399,51289],{"class":102},[92,58401,58402,58404,58406,58408],{"class":94,"line":1602},[92,58403,11201],{"class":98},[92,58405,2219],{"class":151},[92,58407,13544],{"class":98},[92,58409,58410],{"class":151}," 10\n",[92,58412,58413,58415,58417,58419,58421,58423,58425,58427],{"class":94,"line":1607},[92,58414,11201],{"class":98},[92,58416,54373],{"class":151},[92,58418,13544],{"class":98},[92,58420,54378],{"class":102},[92,58422,54381],{"class":1942},[92,58424,103],{"class":102},[92,58426,58186],{"class":207},[92,58428,109],{"class":102},[92,58430,58431,58433,58435,58437,58439,58441,58443],{"class":94,"line":1621},[92,58432,58193],{"class":102},[92,58434,57795],{"class":1942},[92,58436,103],{"class":102},[92,58438,57800],{"class":207},[92,58440,12415],{"class":102},[92,58442,54431],{"class":98},[92,58444,54434],{"class":102},[92,58446,58447,58449,58451,58453,58455,58457],{"class":94,"line":1626},[92,58448,58210],{"class":98},[92,58450,2219],{"class":151},[92,58452,13544],{"class":98},[92,58454,58217],{"class":102},[92,58456,57842],{"class":1942},[92,58458,1955],{"class":102},[92,58460,58461,58463,58465],{"class":94,"line":1632},[92,58462,58226],{"class":102},[92,58464,58229],{"class":1942},[92,58466,116],{"class":102},[92,58468,58469],{"class":94,"line":1653},[92,58470,33443],{"class":102},[92,58472,58473,58475,58477],{"class":94,"line":1658},[92,58474,52399],{"class":102},[92,58476,51795],{"class":51282},[92,58478,51289],{"class":102},[92,58480,58481,58483,58485],{"class":94,"line":1672},[92,58482,51767],{"class":102},[92,58484,51782],{"class":51282},[92,58486,51289],{"class":102},[92,58488,58489],{"class":94,"line":1677},[92,58490,2379],{"emptyLinePlaceholder":17},[92,58492,58493,58495,58497],{"class":94,"line":1706},[92,58494,51767],{"class":102},[92,58496,50617],{"class":51282},[92,58498,51289],{"class":102},[38,58500,58501],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[83,58503,58505],{"className":50615,"code":58504,"language":50617,"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,58506,58507,58517,58531,58535,58543,58557,58577,58589,58597,58601,58609,58621,58629,58639,58657,58673,58686,58694,58698,58706,58714,58718],{"__ignoreMap":10},[92,58508,58509,58511,58513,58515],{"class":94,"line":95},[92,58510,51279],{"class":102},[92,58512,51283],{"class":51282},[92,58514,51286],{"class":1942},[92,58516,51289],{"class":102},[92,58518,58519,58521,58523,58525,58527,58529],{"class":94,"line":11},[92,58520,1013],{"class":102},[92,58522,50617],{"class":51282},[92,58524,51298],{"class":1942},[92,58526,148],{"class":102},[92,58528,51303],{"class":207},[92,58530,51289],{"class":102},[92,58532,58533],{"class":94,"line":1158},[92,58534,2379],{"emptyLinePlaceholder":17},[92,58536,58537,58539,58541],{"class":94,"line":1173},[92,58538,1013],{"class":102},[92,58540,51316],{"class":51282},[92,58542,51289],{"class":102},[92,58544,58545,58547,58549,58551,58553,58555],{"class":94,"line":1179},[92,58546,52126],{"class":102},[92,58548,51326],{"class":51282},[92,58550,51329],{"class":1942},[92,58552,148],{"class":102},[92,58554,51334],{"class":207},[92,58556,51289],{"class":102},[92,58558,58559,58561,58563,58565,58567,58569,58571,58573,58575],{"class":94,"line":1193},[92,58560,52126],{"class":102},[92,58562,51326],{"class":51282},[92,58564,14900],{"class":1942},[92,58566,148],{"class":102},[92,58568,51373],{"class":207},[92,58570,51353],{"class":1942},[92,58572,148],{"class":102},[92,58574,51380],{"class":207},[92,58576,51289],{"class":102},[92,58578,58579,58581,58583,58585,58587],{"class":94,"line":1199},[92,58580,52126],{"class":102},[92,58582,51389],{"class":51282},[92,58584,51392],{"class":102},[92,58586,51389],{"class":51282},[92,58588,51289],{"class":102},[92,58590,58591,58593,58595],{"class":94,"line":1290},[92,58592,51767],{"class":102},[92,58594,51316],{"class":51282},[92,58596,51289],{"class":102},[92,58598,58599],{"class":94,"line":1296},[92,58600,2379],{"emptyLinePlaceholder":17},[92,58602,58603,58605,58607],{"class":94,"line":1308},[92,58604,1013],{"class":102},[92,58606,51782],{"class":51282},[92,58608,51289],{"class":102},[92,58610,58611,58613,58615,58617,58619],{"class":94,"line":1591},[92,58612,52126],{"class":102},[92,58614,53869],{"class":51282},[92,58616,53875],{"class":102},[92,58618,53869],{"class":51282},[92,58620,51289],{"class":102},[92,58622,58623,58625,58627],{"class":94,"line":1596},[92,58624,52126],{"class":102},[92,58626,51795],{"class":51282},[92,58628,51289],{"class":102},[92,58630,58631,58633,58635,58637],{"class":94,"line":1602},[92,58632,11201],{"class":98},[92,58634,2219],{"class":151},[92,58636,13544],{"class":98},[92,58638,58410],{"class":151},[92,58640,58641,58643,58645,58647,58649,58651,58653,58655],{"class":94,"line":1607},[92,58642,11201],{"class":98},[92,58644,54373],{"class":151},[92,58646,13544],{"class":98},[92,58648,54378],{"class":102},[92,58650,54381],{"class":1942},[92,58652,103],{"class":102},[92,58654,58186],{"class":207},[92,58656,109],{"class":102},[92,58658,58659,58661,58663,58665,58667,58669,58671],{"class":94,"line":1621},[92,58660,58193],{"class":102},[92,58662,57795],{"class":1942},[92,58664,103],{"class":102},[92,58666,57800],{"class":207},[92,58668,12415],{"class":102},[92,58670,54431],{"class":98},[92,58672,54434],{"class":102},[92,58674,58675,58678,58680,58682,58684],{"class":94,"line":1626},[92,58676,58677],{"class":102},"      num ",[92,58679,148],{"class":98},[92,58681,58217],{"class":102},[92,58683,57842],{"class":1942},[92,58685,1955],{"class":102},[92,58687,58688,58690,58692],{"class":94,"line":1632},[92,58689,58226],{"class":102},[92,58691,58229],{"class":1942},[92,58693,116],{"class":102},[92,58695,58696],{"class":94,"line":1653},[92,58697,33443],{"class":102},[92,58699,58700,58702,58704],{"class":94,"line":1658},[92,58701,52399],{"class":102},[92,58703,51795],{"class":51282},[92,58705,51289],{"class":102},[92,58707,58708,58710,58712],{"class":94,"line":1672},[92,58709,51767],{"class":102},[92,58711,51782],{"class":51282},[92,58713,51289],{"class":102},[92,58715,58716],{"class":94,"line":1677},[92,58717,2379],{"emptyLinePlaceholder":17},[92,58719,58720,58722,58724],{"class":94,"line":1706},[92,58721,51767],{"class":102},[92,58723,50617],{"class":51282},[92,58725,51289],{"class":102},[38,58727,58728],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[63,58730,58732],{"id":58731},"_324-事件监听版本","3.2.4 事件监听版本",[38,58734,58735],{},[1441,58736],{"alt":10,"src":58737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[38,58739,58740],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[38,58742,58743],{},"这种方式会覆盖前边的事件监听:",[83,58745,58747],{"className":50615,"code":58746,"language":50617,"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,58748,58749,58759,58773,58777,58785,58799,58819,58831,58839,58843,58851,58863,58871,58889,58903,58914,58918,58930,58940,58944,58952,58960,58964],{"__ignoreMap":10},[92,58750,58751,58753,58755,58757],{"class":94,"line":95},[92,58752,51279],{"class":102},[92,58754,51283],{"class":51282},[92,58756,51286],{"class":1942},[92,58758,51289],{"class":102},[92,58760,58761,58763,58765,58767,58769,58771],{"class":94,"line":11},[92,58762,1013],{"class":102},[92,58764,50617],{"class":51282},[92,58766,51298],{"class":1942},[92,58768,148],{"class":102},[92,58770,51303],{"class":207},[92,58772,51289],{"class":102},[92,58774,58775],{"class":94,"line":1158},[92,58776,2379],{"emptyLinePlaceholder":17},[92,58778,58779,58781,58783],{"class":94,"line":1173},[92,58780,1013],{"class":102},[92,58782,51316],{"class":51282},[92,58784,51289],{"class":102},[92,58786,58787,58789,58791,58793,58795,58797],{"class":94,"line":1179},[92,58788,52126],{"class":102},[92,58790,51326],{"class":51282},[92,58792,51329],{"class":1942},[92,58794,148],{"class":102},[92,58796,51334],{"class":207},[92,58798,51289],{"class":102},[92,58800,58801,58803,58805,58807,58809,58811,58813,58815,58817],{"class":94,"line":1193},[92,58802,52126],{"class":102},[92,58804,51326],{"class":51282},[92,58806,14900],{"class":1942},[92,58808,148],{"class":102},[92,58810,51373],{"class":207},[92,58812,51353],{"class":1942},[92,58814,148],{"class":102},[92,58816,51380],{"class":207},[92,58818,51289],{"class":102},[92,58820,58821,58823,58825,58827,58829],{"class":94,"line":1199},[92,58822,52126],{"class":102},[92,58824,51389],{"class":51282},[92,58826,51392],{"class":102},[92,58828,51389],{"class":51282},[92,58830,51289],{"class":102},[92,58832,58833,58835,58837],{"class":94,"line":1290},[92,58834,51767],{"class":102},[92,58836,51316],{"class":51282},[92,58838,51289],{"class":102},[92,58840,58841],{"class":94,"line":1296},[92,58842,2379],{"emptyLinePlaceholder":17},[92,58844,58845,58847,58849],{"class":94,"line":1308},[92,58846,1013],{"class":102},[92,58848,51782],{"class":51282},[92,58850,51289],{"class":102},[92,58852,58853,58855,58857,58859,58861],{"class":94,"line":1591},[92,58854,52126],{"class":102},[92,58856,53869],{"class":51282},[92,58858,53875],{"class":102},[92,58860,53869],{"class":51282},[92,58862,51289],{"class":102},[92,58864,58865,58867,58869],{"class":94,"line":1596},[92,58866,52126],{"class":102},[92,58868,51795],{"class":51282},[92,58870,51289],{"class":102},[92,58872,58873,58875,58877,58879,58881,58883,58885,58887],{"class":94,"line":1602},[92,58874,11201],{"class":98},[92,58876,54373],{"class":151},[92,58878,13544],{"class":98},[92,58880,54378],{"class":102},[92,58882,54381],{"class":1942},[92,58884,103],{"class":102},[92,58886,58186],{"class":207},[92,58888,109],{"class":102},[92,58890,58891,58893,58896,58898,58901],{"class":94,"line":1607},[92,58892,58193],{"class":102},[92,58894,58895],{"class":1942},"onclick",[92,58897,13544],{"class":98},[92,58899,58900],{"class":98}," function",[92,58902,54434],{"class":102},[92,58904,58905,58908,58910,58912],{"class":94,"line":1621},[92,58906,58907],{"class":1942},"      alert",[92,58909,103],{"class":102},[92,58911,575],{"class":151},[92,58913,109],{"class":102},[92,58915,58916],{"class":94,"line":1626},[92,58917,2166],{"class":102},[92,58919,58920,58922,58924,58926,58928],{"class":94,"line":1632},[92,58921,58193],{"class":102},[92,58923,58895],{"class":1942},[92,58925,13544],{"class":98},[92,58927,58900],{"class":98},[92,58929,54434],{"class":102},[92,58931,58932,58934,58936,58938],{"class":94,"line":1653},[92,58933,58907],{"class":1942},[92,58935,103],{"class":102},[92,58937,853],{"class":151},[92,58939,109],{"class":102},[92,58941,58942],{"class":94,"line":1658},[92,58943,2166],{"class":102},[92,58945,58946,58948,58950],{"class":94,"line":1672},[92,58947,52399],{"class":102},[92,58949,51795],{"class":51282},[92,58951,51289],{"class":102},[92,58953,58954,58956,58958],{"class":94,"line":1677},[92,58955,51767],{"class":102},[92,58957,51782],{"class":51282},[92,58959,51289],{"class":102},[92,58961,58962],{"class":94,"line":1706},[92,58963,2379],{"emptyLinePlaceholder":17},[92,58965,58966,58968,58970],{"class":94,"line":1711},[92,58967,51767],{"class":102},[92,58969,50617],{"class":51282},[92,58971,51289],{"class":102},[38,58973,58974],{},"只要点击就输出结果为22,前边11被覆盖了",[83,58976,58978],{"className":50615,"code":58977,"language":50617,"meta":10,"style":10},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[89,58979,58980,58985,58990,58994,58999,59004],{"__ignoreMap":10},[92,58981,58982],{"class":94,"line":95},[92,58983,58984],{"class":102},"  btn.addEventListener('click', function () {\n",[92,58986,58987],{"class":94,"line":11},[92,58988,58989],{"class":102},"      alert(11)\n",[92,58991,58992],{"class":94,"line":1158},[92,58993,33443],{"class":102},[92,58995,58996],{"class":94,"line":1173},[92,58997,58998],{"class":102},"    btn.addEventListener('click', function () {\n",[92,59000,59001],{"class":94,"line":1179},[92,59002,59003],{"class":102},"      alert(22)\n",[92,59005,59006],{"class":94,"line":1193},[92,59007,33443],{"class":102},[38,59009,59010],{},"点击第一次输出11,第二次点击为22",[63,59012,59014],{"id":59013},"_325-事件类型","3.2.5 事件类型",[38,59016,59017],{},[1441,59018],{"alt":10,"src":59019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21978,59021,59023],{"id":59022},"_3251-鼠标事件","3.2.5.1 鼠标事件",[38,59025,59026],{},"补充知识:",[38,59028,59029],{},"轮播图自动播放模块,可以使用",[38,59031,59032],{},"let timerId = setInterval(function () {",[38,59034,59035],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[38,59037,59038],{},"用js方法模拟进行点击事件,click必须加()",[38,59040,59041],{},"next.click()",[38,59043,59044],{},"}, 1000)",[38,59046,59047],{},[1441,59048],{"alt":10,"src":59049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[83,59051,59053],{"className":53049,"code":59052,"language":53051,"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,59054,59055,59059,59069,59083,59087,59095,59110,59130,59150,59163,59171,59176,59181,59185,59189,59194,59199,59204,59209,59213,59217,59222,59227,59232,59236,59240,59245,59249,59254,59259,59263,59267,59272,59277,59282,59287,59292,59296,59300,59305,59310,59315,59320,59325,59329,59333,59338,59343,59348,59353,59358,59363,59368,59373,59378,59383,59387,59391,59396,59401,59405,59409,59414,59419,59423,59428,59433,59437,59441,59446,59450,59455,59460,59464,59469,59473,59477,59482,59487,59492,59497,59502,59507,59512,59516,59520,59524,59529,59534,59539,59544,59548,59556,59564,59568,59576,59591,59605,59626,59634,59648,59661,59676,59695,59707,59719,59731,59743,59755,59767,59779,59787,59802,59826,59850,59858,59866,59874,59882,59887,59892,59897,59902,59907,59912,59917,59922,59927,59932,59936,59941,59946,59951,59956,59961,59966,59971,59976,59981,59985,59990,59995,60000,60005,60010,60015,60020,60025,60030,60035,60040,60045,60049,60053,60058,60063,60068,60072,60077,60082,60087,60092,60097,60101,60106,60110,60114,60118,60122,60126,60130,60135,60140,60145,60150,60155,60160,60165,60170,60175,60179,60183,60188,60193,60198,60203,60208,60212,60217,60222,60227,60232,60237,60242,60246,60250,60255,60259,60264,60268,60273,60278,60283,60288,60293,60298,60302,60310,60318,60322],{"__ignoreMap":10},[92,59056,59057],{"class":94,"line":95},[92,59058,2379],{"emptyLinePlaceholder":17},[92,59060,59061,59063,59065,59067],{"class":94,"line":11},[92,59062,51279],{"class":102},[92,59064,51283],{"class":98},[92,59066,51286],{"class":151},[92,59068,51289],{"class":102},[92,59070,59071,59073,59075,59077,59079,59081],{"class":94,"line":1158},[92,59072,1013],{"class":102},[92,59074,50617],{"class":51282},[92,59076,51298],{"class":1942},[92,59078,148],{"class":102},[92,59080,51303],{"class":207},[92,59082,51289],{"class":102},[92,59084,59085],{"class":94,"line":1173},[92,59086,2379],{"emptyLinePlaceholder":17},[92,59088,59089,59091,59093],{"class":94,"line":1179},[92,59090,1013],{"class":102},[92,59092,51316],{"class":51282},[92,59094,51289],{"class":102},[92,59096,59097,59099,59101,59103,59105,59107],{"class":94,"line":1193},[92,59098,52126],{"class":102},[92,59100,51326],{"class":51282},[92,59102,51329],{"class":1942},[92,59104,148],{"class":102},[92,59106,51334],{"class":207},[92,59108,59109],{"class":102}," \u002F>\n",[92,59111,59112,59114,59116,59118,59120,59122,59124,59126,59128],{"class":94,"line":1199},[92,59113,52126],{"class":102},[92,59115,51326],{"class":51282},[92,59117,51345],{"class":1942},[92,59119,148],{"class":102},[92,59121,51350],{"class":207},[92,59123,51353],{"class":1942},[92,59125,148],{"class":102},[92,59127,51358],{"class":207},[92,59129,59109],{"class":102},[92,59131,59132,59134,59136,59138,59140,59142,59144,59146,59148],{"class":94,"line":1290},[92,59133,52126],{"class":102},[92,59135,51326],{"class":51282},[92,59137,14900],{"class":1942},[92,59139,148],{"class":102},[92,59141,51373],{"class":207},[92,59143,51353],{"class":1942},[92,59145,148],{"class":102},[92,59147,51380],{"class":207},[92,59149,59109],{"class":102},[92,59151,59152,59154,59156,59159,59161],{"class":94,"line":1296},[92,59153,52126],{"class":102},[92,59155,51389],{"class":51282},[92,59157,59158],{"class":102},">轮播图点击切换\u003C\u002F",[92,59160,51389],{"class":51282},[92,59162,51289],{"class":102},[92,59164,59165,59167,59169],{"class":94,"line":1308},[92,59166,52126],{"class":102},[92,59168,5106],{"class":51282},[92,59170,51289],{"class":102},[92,59172,59173],{"class":94,"line":1591},[92,59174,59175],{"class":102},"    * {\n",[92,59177,59178],{"class":94,"line":1596},[92,59179,59180],{"class":102},"      box-sizing: border-box;\n",[92,59182,59183],{"class":94,"line":1602},[92,59184,2166],{"class":102},[92,59186,59187],{"class":94,"line":1607},[92,59188,2379],{"emptyLinePlaceholder":17},[92,59190,59191],{"class":94,"line":1621},[92,59192,59193],{"class":102},"    .slider {\n",[92,59195,59196],{"class":94,"line":1626},[92,59197,59198],{"class":102},"      width: 560px;\n",[92,59200,59201],{"class":94,"line":1632},[92,59202,59203],{"class":102},"      height: 400px;\n",[92,59205,59206],{"class":94,"line":1653},[92,59207,59208],{"class":102},"      overflow: hidden;\n",[92,59210,59211],{"class":94,"line":1658},[92,59212,2166],{"class":102},[92,59214,59215],{"class":94,"line":1672},[92,59216,2379],{"emptyLinePlaceholder":17},[92,59218,59219],{"class":94,"line":1677},[92,59220,59221],{"class":102},"    .slider-wrapper {\n",[92,59223,59224],{"class":94,"line":1706},[92,59225,59226],{"class":102},"      width: 100%;\n",[92,59228,59229],{"class":94,"line":1711},[92,59230,59231],{"class":102},"      height: 320px;\n",[92,59233,59234],{"class":94,"line":1728},[92,59235,2166],{"class":102},[92,59237,59238],{"class":94,"line":1733},[92,59239,2379],{"emptyLinePlaceholder":17},[92,59241,59242],{"class":94,"line":1738},[92,59243,59244],{"class":102},"    .slider-wrapper img {\n",[92,59246,59247],{"class":94,"line":1743},[92,59248,59226],{"class":102},[92,59250,59251],{"class":94,"line":1757},[92,59252,59253],{"class":102},"      height: 100%;\n",[92,59255,59256],{"class":94,"line":1762},[92,59257,59258],{"class":102},"      display: block;\n",[92,59260,59261],{"class":94,"line":2556},[92,59262,2166],{"class":102},[92,59264,59265],{"class":94,"line":2570},[92,59266,2379],{"emptyLinePlaceholder":17},[92,59268,59269],{"class":94,"line":2578},[92,59270,59271],{"class":102},"    .slider-footer {\n",[92,59273,59274],{"class":94,"line":2583},[92,59275,59276],{"class":102},"      height: 80px;\n",[92,59278,59279],{"class":94,"line":2589},[92,59280,59281],{"class":102},"      background-color: rgb(100, 67, 68);\n",[92,59283,59284],{"class":94,"line":2595},[92,59285,59286],{"class":102},"      padding: 12px 12px 0 12px;\n",[92,59288,59289],{"class":94,"line":2600},[92,59290,59291],{"class":102},"      position: relative;\n",[92,59293,59294],{"class":94,"line":7928},[92,59295,2166],{"class":102},[92,59297,59298],{"class":94,"line":7952},[92,59299,2379],{"emptyLinePlaceholder":17},[92,59301,59302],{"class":94,"line":7957},[92,59303,59304],{"class":102},"    .slider-footer .toggle {\n",[92,59306,59307],{"class":94,"line":7963},[92,59308,59309],{"class":102},"      position: absolute;\n",[92,59311,59312],{"class":94,"line":7990},[92,59313,59314],{"class":102},"      right: 0;\n",[92,59316,59317],{"class":94,"line":7995},[92,59318,59319],{"class":102},"      top: 12px;\n",[92,59321,59322],{"class":94,"line":8001},[92,59323,59324],{"class":102},"      display: flex;\n",[92,59326,59327],{"class":94,"line":8013},[92,59328,2166],{"class":102},[92,59330,59331],{"class":94,"line":8025},[92,59332,2379],{"emptyLinePlaceholder":17},[92,59334,59335],{"class":94,"line":8037},[92,59336,59337],{"class":102},"    .slider-footer .toggle button {\n",[92,59339,59340],{"class":94,"line":9696},[92,59341,59342],{"class":102},"      margin-right: 12px;\n",[92,59344,59345],{"class":94,"line":9721},[92,59346,59347],{"class":102},"      width: 28px;\n",[92,59349,59350],{"class":94,"line":9744},[92,59351,59352],{"class":102},"      height: 28px;\n",[92,59354,59355],{"class":94,"line":9768},[92,59356,59357],{"class":102},"      appearance: none;\n",[92,59359,59360],{"class":94,"line":9773},[92,59361,59362],{"class":102},"      border: none;\n",[92,59364,59365],{"class":94,"line":9778},[92,59366,59367],{"class":102},"      background: rgba(255, 255, 255, 0.1);\n",[92,59369,59370],{"class":94,"line":9783},[92,59371,59372],{"class":102},"      color: #fff;\n",[92,59374,59375],{"class":94,"line":9792},[92,59376,59377],{"class":102},"      border-radius: 4px;\n",[92,59379,59380],{"class":94,"line":9797},[92,59381,59382],{"class":102},"      cursor: pointer;\n",[92,59384,59385],{"class":94,"line":9803},[92,59386,2166],{"class":102},[92,59388,59389],{"class":94,"line":9824},[92,59390,2379],{"emptyLinePlaceholder":17},[92,59392,59393],{"class":94,"line":9830},[92,59394,59395],{"class":102},"    .slider-footer .toggle button:hover {\n",[92,59397,59398],{"class":94,"line":9844},[92,59399,59400],{"class":102},"      background: rgba(255, 255, 255, 0.2);\n",[92,59402,59403],{"class":94,"line":9850},[92,59404,2166],{"class":102},[92,59406,59407],{"class":94,"line":9877},[92,59408,2379],{"emptyLinePlaceholder":17},[92,59410,59411],{"class":94,"line":9886},[92,59412,59413],{"class":102},"    .slider-footer p {\n",[92,59415,59416],{"class":94,"line":9892},[92,59417,59418],{"class":102},"      margin: 0;\n",[92,59420,59421],{"class":94,"line":9900},[92,59422,59372],{"class":102},[92,59424,59425],{"class":94,"line":9905},[92,59426,59427],{"class":102},"      font-size: 18px;\n",[92,59429,59430],{"class":94,"line":16584},[92,59431,59432],{"class":102},"      margin-bottom: 10px;\n",[92,59434,59435],{"class":94,"line":16590},[92,59436,2166],{"class":102},[92,59438,59439],{"class":94,"line":16613},[92,59440,2379],{"emptyLinePlaceholder":17},[92,59442,59443],{"class":94,"line":16619},[92,59444,59445],{"class":102},"    .slider-indicator {\n",[92,59447,59448],{"class":94,"line":16642},[92,59449,59418],{"class":102},[92,59451,59452],{"class":94,"line":16656},[92,59453,59454],{"class":102},"      padding: 0;\n",[92,59456,59457],{"class":94,"line":16676},[92,59458,59459],{"class":102},"      list-style: none;\n",[92,59461,59462],{"class":94,"line":16682},[92,59463,59324],{"class":102},[92,59465,59466],{"class":94,"line":16693},[92,59467,59468],{"class":102},"      align-items: center;\n",[92,59470,59471],{"class":94,"line":16716},[92,59472,2166],{"class":102},[92,59474,59475],{"class":94,"line":16738},[92,59476,2379],{"emptyLinePlaceholder":17},[92,59478,59479],{"class":94,"line":16743},[92,59480,59481],{"class":102},"    .slider-indicator li {\n",[92,59483,59484],{"class":94,"line":16749},[92,59485,59486],{"class":102},"      width: 8px;\n",[92,59488,59489],{"class":94,"line":16763},[92,59490,59491],{"class":102},"      height: 8px;\n",[92,59493,59494],{"class":94,"line":16776},[92,59495,59496],{"class":102},"      margin: 4px;\n",[92,59498,59499],{"class":94,"line":16781},[92,59500,59501],{"class":102},"      border-radius: 50%;\n",[92,59503,59504],{"class":94,"line":16795},[92,59505,59506],{"class":102},"      background: #fff;\n",[92,59508,59509],{"class":94,"line":16800},[92,59510,59511],{"class":102},"      opacity: 0.4;\n",[92,59513,59514],{"class":94,"line":16806},[92,59515,59382],{"class":102},[92,59517,59518],{"class":94,"line":16811},[92,59519,2166],{"class":102},[92,59521,59522],{"class":94,"line":16825},[92,59523,2379],{"emptyLinePlaceholder":17},[92,59525,59526],{"class":94,"line":16830},[92,59527,59528],{"class":102},"    .slider-indicator li.active {\n",[92,59530,59531],{"class":94,"line":16835},[92,59532,59533],{"class":102},"      width: 12px;\n",[92,59535,59536],{"class":94,"line":16849},[92,59537,59538],{"class":102},"      height: 12px;\n",[92,59540,59541],{"class":94,"line":16861},[92,59542,59543],{"class":102},"      opacity: 1;\n",[92,59545,59546],{"class":94,"line":16866},[92,59547,2166],{"class":102},[92,59549,59550,59552,59554],{"class":94,"line":16879},[92,59551,52399],{"class":102},[92,59553,5106],{"class":51282},[92,59555,51289],{"class":102},[92,59557,59558,59560,59562],{"class":94,"line":16884},[92,59559,51767],{"class":102},[92,59561,51316],{"class":51282},[92,59563,51289],{"class":102},[92,59565,59566],{"class":94,"line":16889},[92,59567,2379],{"emptyLinePlaceholder":17},[92,59569,59570,59572,59574],{"class":94,"line":16894},[92,59571,1013],{"class":102},[92,59573,51782],{"class":51282},[92,59575,51289],{"class":102},[92,59577,59578,59580,59582,59584,59586,59589],{"class":94,"line":16907},[92,59579,52126],{"class":102},[92,59581,51593],{"class":51282},[92,59583,53468],{"class":1942},[92,59585,148],{"class":102},[92,59587,59588],{"class":207},"\"slider\"",[92,59590,51289],{"class":102},[92,59592,59593,59595,59597,59599,59601,59603],{"class":94,"line":16912},[92,59594,51323],{"class":102},[92,59596,51593],{"class":51282},[92,59598,53468],{"class":1942},[92,59600,148],{"class":102},[92,59602,55209],{"class":207},[92,59604,51289],{"class":102},[92,59606,59607,59609,59611,59613,59615,59618,59620,59622,59624],{"class":94,"line":32615},[92,59608,55216],{"class":102},[92,59610,1441],{"class":51282},[92,59612,55221],{"class":1942},[92,59614,148],{"class":102},[92,59616,59617],{"class":207},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[92,59619,55229],{"class":1942},[92,59621,148],{"class":102},[92,59623,7632],{"class":207},[92,59625,59109],{"class":102},[92,59627,59628,59630,59632],{"class":94,"line":32621},[92,59629,51758],{"class":102},[92,59631,51593],{"class":51282},[92,59633,51289],{"class":102},[92,59635,59636,59638,59640,59642,59644,59646],{"class":94,"line":32627},[92,59637,51323],{"class":102},[92,59639,51593],{"class":51282},[92,59641,53468],{"class":1942},[92,59643,148],{"class":102},[92,59645,55256],{"class":207},[92,59647,51289],{"class":102},[92,59649,59650,59652,59654,59657,59659],{"class":94,"line":32633},[92,59651,55216],{"class":102},[92,59653,38],{"class":51282},[92,59655,59656],{"class":102},">对人类来说会不会太超前了？\u003C\u002F",[92,59658,38],{"class":51282},[92,59660,51289],{"class":102},[92,59662,59663,59665,59667,59669,59671,59674],{"class":94,"line":32639},[92,59664,55216],{"class":102},[92,59666,1110],{"class":51282},[92,59668,53468],{"class":1942},[92,59670,148],{"class":102},[92,59672,59673],{"class":207},"\"slider-indicator\"",[92,59675,51289],{"class":102},[92,59677,59678,59680,59682,59684,59686,59689,59691,59693],{"class":94,"line":32650},[92,59679,55284],{"class":102},[92,59681,49],{"class":51282},[92,59683,53468],{"class":1942},[92,59685,148],{"class":102},[92,59687,59688],{"class":207},"\"active\"",[92,59690,55296],{"class":102},[92,59692,49],{"class":51282},[92,59694,51289],{"class":102},[92,59696,59697,59699,59701,59703,59705],{"class":94,"line":32656},[92,59698,55284],{"class":102},[92,59700,49],{"class":51282},[92,59702,55296],{"class":102},[92,59704,49],{"class":51282},[92,59706,51289],{"class":102},[92,59708,59709,59711,59713,59715,59717],{"class":94,"line":32676},[92,59710,55284],{"class":102},[92,59712,49],{"class":51282},[92,59714,55296],{"class":102},[92,59716,49],{"class":51282},[92,59718,51289],{"class":102},[92,59720,59721,59723,59725,59727,59729],{"class":94,"line":32682},[92,59722,55284],{"class":102},[92,59724,49],{"class":51282},[92,59726,55296],{"class":102},[92,59728,49],{"class":51282},[92,59730,51289],{"class":102},[92,59732,59733,59735,59737,59739,59741],{"class":94,"line":32693},[92,59734,55284],{"class":102},[92,59736,49],{"class":51282},[92,59738,55296],{"class":102},[92,59740,49],{"class":51282},[92,59742,51289],{"class":102},[92,59744,59745,59747,59749,59751,59753],{"class":94,"line":32699},[92,59746,55284],{"class":102},[92,59748,49],{"class":51282},[92,59750,55296],{"class":102},[92,59752,49],{"class":51282},[92,59754,51289],{"class":102},[92,59756,59757,59759,59761,59763,59765],{"class":94,"line":32705},[92,59758,55284],{"class":102},[92,59760,49],{"class":51282},[92,59762,55296],{"class":102},[92,59764,49],{"class":51282},[92,59766,51289],{"class":102},[92,59768,59769,59771,59773,59775,59777],{"class":94,"line":32711},[92,59770,55284],{"class":102},[92,59772,49],{"class":51282},[92,59774,55296],{"class":102},[92,59776,49],{"class":51282},[92,59778,51289],{"class":102},[92,59780,59781,59783,59785],{"class":94,"line":32717},[92,59782,55389],{"class":102},[92,59784,1110],{"class":51282},[92,59786,51289],{"class":102},[92,59788,59789,59791,59793,59795,59797,59800],{"class":94,"line":32723},[92,59790,55216],{"class":102},[92,59792,51593],{"class":51282},[92,59794,53468],{"class":1942},[92,59796,148],{"class":102},[92,59798,59799],{"class":207},"\"toggle\"",[92,59801,51289],{"class":102},[92,59803,59804,59806,59808,59810,59812,59815,59817,59820,59822,59824],{"class":94,"line":32729},[92,59805,55284],{"class":102},[92,59807,53869],{"class":51282},[92,59809,53468],{"class":1942},[92,59811,148],{"class":102},[92,59813,59814],{"class":207},"\"prev\"",[92,59816,1063],{"class":102},[92,59818,59819],{"class":151},"&lt;",[92,59821,51767],{"class":102},[92,59823,53869],{"class":51282},[92,59825,51289],{"class":102},[92,59827,59828,59830,59832,59834,59836,59839,59841,59844,59846,59848],{"class":94,"line":32735},[92,59829,55284],{"class":102},[92,59831,53869],{"class":51282},[92,59833,53468],{"class":1942},[92,59835,148],{"class":102},[92,59837,59838],{"class":207},"\"next\"",[92,59840,1063],{"class":102},[92,59842,59843],{"class":151},"&gt;",[92,59845,51767],{"class":102},[92,59847,53869],{"class":51282},[92,59849,51289],{"class":102},[92,59851,59852,59854,59856],{"class":94,"line":32755},[92,59853,55389],{"class":102},[92,59855,51593],{"class":51282},[92,59857,51289],{"class":102},[92,59859,59860,59862,59864],{"class":94,"line":32761},[92,59861,51758],{"class":102},[92,59863,51593],{"class":51282},[92,59865,51289],{"class":102},[92,59867,59868,59870,59872],{"class":94,"line":32777},[92,59869,52399],{"class":102},[92,59871,51593],{"class":51282},[92,59873,51289],{"class":102},[92,59875,59876,59878,59880],{"class":94,"line":32783},[92,59877,52126],{"class":102},[92,59879,51795],{"class":51282},[92,59881,51289],{"class":102},[92,59883,59884],{"class":94,"line":32797},[92,59885,59886],{"class":102},"    \u002F\u002F 1. 初始数据\n",[92,59888,59889],{"class":94,"line":32803},[92,59890,59891],{"class":102},"    const data = [\n",[92,59893,59894],{"class":94,"line":32818},[92,59895,59896],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[92,59898,59899],{"class":94,"line":32824},[92,59900,59901],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[92,59903,59904],{"class":94,"line":32833},[92,59905,59906],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[92,59908,59909],{"class":94,"line":32839},[92,59910,59911],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[92,59913,59914],{"class":94,"line":32848},[92,59915,59916],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[92,59918,59919],{"class":94,"line":32854},[92,59920,59921],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[92,59923,59924],{"class":94,"line":32860},[92,59925,59926],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[92,59928,59929],{"class":94,"line":32869},[92,59930,59931],{"class":102},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[92,59933,59934],{"class":94,"line":32875},[92,59935,53091],{"class":102},[92,59937,59938],{"class":94,"line":32886},[92,59939,59940],{"class":102},"    \u002F\u002F 获取元素\n",[92,59942,59943],{"class":94,"line":32892},[92,59944,59945],{"class":102},"    const img = document.querySelector('.slider-wrapper img')\n",[92,59947,59948],{"class":94,"line":32911},[92,59949,59950],{"class":102},"    const p = document.querySelector('.slider-footer p')\n",[92,59952,59953],{"class":94,"line":32917},[92,59954,59955],{"class":102},"    const footer = document.querySelector('.slider-footer')\n",[92,59957,59958],{"class":94,"line":32928},[92,59959,59960],{"class":102},"    \u002F\u002F 1. 右按钮业务\n",[92,59962,59963],{"class":94,"line":32934},[92,59964,59965],{"class":102},"    \u002F\u002F 1.1 获取右侧按钮 \n",[92,59967,59968],{"class":94,"line":32954},[92,59969,59970],{"class":102},"    const next = document.querySelector('.next')\n",[92,59972,59973],{"class":94,"line":32970},[92,59974,59975],{"class":102},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[92,59977,59978],{"class":94,"line":32976},[92,59979,59980],{"class":102},"    \u002F\u002F 1.2 注册点击事件\n",[92,59982,59983],{"class":94,"line":32990},[92,59984,2379],{"emptyLinePlaceholder":17},[92,59986,59987],{"class":94,"line":32996},[92,59988,59989],{"class":102},"    next.addEventListener('click', function () {\n",[92,59991,59992],{"class":94,"line":33002},[92,59993,59994],{"class":102},"      \u002F\u002F console.log(11)\n",[92,59996,59997],{"class":94,"line":33013},[92,59998,59999],{"class":102},"      i++\n",[92,60001,60002],{"class":94,"line":33019},[92,60003,60004],{"class":102},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[92,60006,60007],{"class":94,"line":33025},[92,60008,60009],{"class":102},"      \u002F\u002F if (i >= 8) {\n",[92,60011,60012],{"class":94,"line":33035},[92,60013,60014],{"class":102},"      \u002F\u002F   i = 0\n",[92,60016,60017],{"class":94,"line":33041},[92,60018,60019],{"class":102},"      \u002F\u002F }\n",[92,60021,60022],{"class":94,"line":33052},[92,60023,60024],{"class":102},"      i = i >= data.length ? 0 : i\n",[92,60026,60027],{"class":94,"line":33058},[92,60028,60029],{"class":102},"      \u002F\u002F 1.3 得到对应的对象\n",[92,60031,60032],{"class":94,"line":33068},[92,60033,60034],{"class":102},"      \u002F\u002F console.log(data[i])\n",[92,60036,60037],{"class":94,"line":33073},[92,60038,60039],{"class":102},"      \u002F\u002F 调用函数\n",[92,60041,60042],{"class":94,"line":33079},[92,60043,60044],{"class":102},"      toggle()\n",[92,60046,60047],{"class":94,"line":33128},[92,60048,33443],{"class":102},[92,60050,60051],{"class":94,"line":33175},[92,60052,2379],{"emptyLinePlaceholder":17},[92,60054,60055],{"class":94,"line":33180},[92,60056,60057],{"class":102},"    \u002F\u002F 2. 左侧按钮业务\n",[92,60059,60060],{"class":94,"line":33186},[92,60061,60062],{"class":102},"    \u002F\u002F 2.1 获取左侧按钮 \n",[92,60064,60065],{"class":94,"line":33205},[92,60066,60067],{"class":102},"    const prev = document.querySelector('.prev')\n",[92,60069,60070],{"class":94,"line":33211},[92,60071,59980],{"class":102},[92,60073,60074],{"class":94,"line":33231},[92,60075,60076],{"class":102},"    prev.addEventListener('click', function () {\n",[92,60078,60079],{"class":94,"line":33237},[92,60080,60081],{"class":102},"      i--\n",[92,60083,60084],{"class":94,"line":33243},[92,60085,60086],{"class":102},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[92,60088,60089],{"class":94,"line":33253},[92,60090,60091],{"class":102},"      \u002F\u002F if (i \u003C 0) {\n",[92,60093,60094],{"class":94,"line":33258},[92,60095,60096],{"class":102},"      \u002F\u002F   i = 7\n",[92,60098,60099],{"class":94,"line":33264},[92,60100,60019],{"class":102},[92,60102,60103],{"class":94,"line":33280},[92,60104,60105],{"class":102},"      i = i \u003C 0 ? data.length - 1 : i\n",[92,60107,60108],{"class":94,"line":33325},[92,60109,60029],{"class":102},[92,60111,60112],{"class":94,"line":33331},[92,60113,60034],{"class":102},[92,60115,60116],{"class":94,"line":33337},[92,60117,60039],{"class":102},[92,60119,60120],{"class":94,"line":33343},[92,60121,60044],{"class":102},[92,60123,60124],{"class":94,"line":33354},[92,60125,33443],{"class":102},[92,60127,60128],{"class":94,"line":33360},[92,60129,2379],{"emptyLinePlaceholder":17},[92,60131,60132],{"class":94,"line":33366},[92,60133,60134],{"class":102},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[92,60136,60137],{"class":94,"line":33372},[92,60138,60139],{"class":102},"    function toggle() {\n",[92,60141,60142],{"class":94,"line":33390},[92,60143,60144],{"class":102},"      \u002F\u002F 1.4 渲染对应的数据\n",[92,60146,60147],{"class":94,"line":33404},[92,60148,60149],{"class":102},"      img.src = data[i].url\n",[92,60151,60152],{"class":94,"line":33413},[92,60153,60154],{"class":102},"      p.innerHTML = data[i].title\n",[92,60156,60157],{"class":94,"line":33422},[92,60158,60159],{"class":102},"      footer.style.backgroundColor = data[i].color\n",[92,60161,60162],{"class":94,"line":33431},[92,60163,60164],{"class":102},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[92,60166,60167],{"class":94,"line":33440},[92,60168,60169],{"class":102},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[92,60171,60172],{"class":94,"line":33446},[92,60173,60174],{"class":102},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[92,60176,60177],{"class":94,"line":33452},[92,60178,2166],{"class":102},[92,60180,60181],{"class":94,"line":33460},[92,60182,2379],{"emptyLinePlaceholder":17},[92,60184,60185],{"class":94,"line":33465},[92,60186,60187],{"class":102},"    \u002F\u002F 3. 自动播放模块\n",[92,60189,60190],{"class":94,"line":33471},[92,60191,60192],{"class":102},"    let timerId = setInterval(function () {\n",[92,60194,60195],{"class":94,"line":33482},[92,60196,60197],{"class":102},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[92,60199,60200],{"class":94,"line":33488},[92,60201,60202],{"class":102},"      next.click()\n",[92,60204,60205],{"class":94,"line":33508},[92,60206,60207],{"class":102},"    }, 1000)\n",[92,60209,60210],{"class":94,"line":33514},[92,60211,2379],{"emptyLinePlaceholder":17},[92,60213,60214],{"class":94,"line":33520},[92,60215,60216],{"class":102},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[92,60218,60219],{"class":94,"line":33526},[92,60220,60221],{"class":102},"    const slider = document.querySelector('.slider')\n",[92,60223,60224],{"class":94,"line":33543},[92,60225,60226],{"class":102},"    \u002F\u002F 注册事件\n",[92,60228,60229],{"class":94,"line":33549},[92,60230,60231],{"class":102},"    slider.addEventListener('mouseenter', function () {\n",[92,60233,60234],{"class":94,"line":33555},[92,60235,60236],{"class":102},"      \u002F\u002F 停止定时器\n",[92,60238,60239],{"class":94,"line":33561},[92,60240,60241],{"class":102},"      clearInterval(timerId)\n",[92,60243,60244],{"class":94,"line":33567},[92,60245,33443],{"class":102},[92,60247,60248],{"class":94,"line":33573},[92,60249,2379],{"emptyLinePlaceholder":17},[92,60251,60252],{"class":94,"line":33600},[92,60253,60254],{"class":102},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[92,60256,60257],{"class":94,"line":33624},[92,60258,60226],{"class":102},[92,60260,60261],{"class":94,"line":33630},[92,60262,60263],{"class":102},"    slider.addEventListener('mouseleave', function () {\n",[92,60265,60266],{"class":94,"line":33636},[92,60267,60236],{"class":102},[92,60269,60270],{"class":94,"line":33642},[92,60271,60272],{"class":102},"      if (timerId) clearInterval(timerId)\n",[92,60274,60275],{"class":94,"line":33653},[92,60276,60277],{"class":102},"      \u002F\u002F 开启定时器\n",[92,60279,60280],{"class":94,"line":33664},[92,60281,60282],{"class":102},"      timerId = setInterval(function () {\n",[92,60284,60285],{"class":94,"line":33670},[92,60286,60287],{"class":102},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[92,60289,60290],{"class":94,"line":33687},[92,60291,60292],{"class":102},"        next.click()\n",[92,60294,60295],{"class":94,"line":33710},[92,60296,60297],{"class":102},"      }, 1000)\n",[92,60299,60300],{"class":94,"line":33733},[92,60301,33443],{"class":102},[92,60303,60304,60306,60308],{"class":94,"line":33739},[92,60305,52399],{"class":102},[92,60307,51795],{"class":51282},[92,60309,51289],{"class":102},[92,60311,60312,60314,60316],{"class":94,"line":33744},[92,60313,51767],{"class":102},[92,60315,51782],{"class":51282},[92,60317,51289],{"class":102},[92,60319,60320],{"class":94,"line":33753},[92,60321,2379],{"emptyLinePlaceholder":17},[92,60323,60324,60326,60328],{"class":94,"line":33763},[92,60325,51767],{"class":102},[92,60327,50617],{"class":51282},[92,60329,51289],{"class":102},[21978,60331,60333],{"id":60332},"_3252-焦点事件","3.2.5.2 焦点事件",[38,60335,60336],{},"小米搜索框案例：",[83,60338,60340],{"className":50615,"code":60339,"language":50617,"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,60341,60342,60352,60366,60370,60378,60392,60412,60432,60444,60452,60458,60468,60478,60490,60494,60498,60505,60509,60520,60524,60528,60535,60546,60559,60573,60577,60581,60590,60602,60614,60628,60641,60654,60672,60683,60687,60691,60700,60717,60721,60725,60732,60742,60752,60763,60776,60788,60804,60815,60827,60831,60835,60843,60854,60871,60883,60895,60906,60910,60914,60925,60936,60940,60948,60952,60960,60964,60972,60987,61010,61025,61056,61083,61110,61137,61164,61191,61218,61227,61235,61243,61248,61268,61288,61293,61298,61316,61321,61331,61336,61350,61355,61360,61377,61386,61398,61402,61410,61418,61422],{"__ignoreMap":10},[92,60343,60344,60346,60348,60350],{"class":94,"line":95},[92,60345,51279],{"class":102},[92,60347,51283],{"class":51282},[92,60349,51286],{"class":1942},[92,60351,51289],{"class":102},[92,60353,60354,60356,60358,60360,60362,60364],{"class":94,"line":11},[92,60355,1013],{"class":102},[92,60357,50617],{"class":51282},[92,60359,51298],{"class":1942},[92,60361,148],{"class":102},[92,60363,51303],{"class":207},[92,60365,51289],{"class":102},[92,60367,60368],{"class":94,"line":1158},[92,60369,2379],{"emptyLinePlaceholder":17},[92,60371,60372,60374,60376],{"class":94,"line":1173},[92,60373,1013],{"class":102},[92,60375,51316],{"class":51282},[92,60377,51289],{"class":102},[92,60379,60380,60382,60384,60386,60388,60390],{"class":94,"line":1179},[92,60381,51323],{"class":102},[92,60383,51326],{"class":51282},[92,60385,51329],{"class":1942},[92,60387,148],{"class":102},[92,60389,51334],{"class":207},[92,60391,51289],{"class":102},[92,60393,60394,60396,60398,60400,60402,60404,60406,60408,60410],{"class":94,"line":1193},[92,60395,51323],{"class":102},[92,60397,51326],{"class":51282},[92,60399,51345],{"class":1942},[92,60401,148],{"class":102},[92,60403,51350],{"class":207},[92,60405,51353],{"class":1942},[92,60407,148],{"class":102},[92,60409,51358],{"class":207},[92,60411,51289],{"class":102},[92,60413,60414,60416,60418,60420,60422,60424,60426,60428,60430],{"class":94,"line":1199},[92,60415,51323],{"class":102},[92,60417,51326],{"class":51282},[92,60419,14900],{"class":1942},[92,60421,148],{"class":102},[92,60423,51373],{"class":207},[92,60425,51353],{"class":1942},[92,60427,148],{"class":102},[92,60429,51380],{"class":207},[92,60431,51289],{"class":102},[92,60433,60434,60436,60438,60440,60442],{"class":94,"line":1290},[92,60435,51323],{"class":102},[92,60437,51389],{"class":51282},[92,60439,51392],{"class":102},[92,60441,51389],{"class":51282},[92,60443,51289],{"class":102},[92,60445,60446,60448,60450],{"class":94,"line":1296},[92,60447,51323],{"class":102},[92,60449,5106],{"class":51282},[92,60451,51289],{"class":102},[92,60453,60454,60456],{"class":94,"line":1308},[92,60455,51409],{"class":51282},[92,60457,15552],{"class":102},[92,60459,60460,60462,60464,60466],{"class":94,"line":1591},[92,60461,51416],{"class":151},[92,60463,51419],{"class":102},[92,60465,294],{"class":151},[92,60467,1269],{"class":102},[92,60469,60470,60472,60474,60476],{"class":94,"line":1596},[92,60471,51428],{"class":151},[92,60473,51419],{"class":102},[92,60475,294],{"class":151},[92,60477,1269],{"class":102},[92,60479,60480,60483,60485,60488],{"class":94,"line":1602},[92,60481,60482],{"class":151},"            box-sizing",[92,60484,51419],{"class":102},[92,60486,60487],{"class":151},"border-box",[92,60489,1269],{"class":102},[92,60491,60492],{"class":94,"line":1607},[92,60493,2508],{"class":102},[92,60495,60496],{"class":94,"line":1621},[92,60497,2379],{"emptyLinePlaceholder":17},[92,60499,60500,60503],{"class":94,"line":1626},[92,60501,60502],{"class":51282},"        ul",[92,60504,15552],{"class":102},[92,60506,60507],{"class":94,"line":1632},[92,60508,2379],{"emptyLinePlaceholder":17},[92,60510,60511,60514,60516,60518],{"class":94,"line":1653},[92,60512,60513],{"class":151},"            list-style",[92,60515,51419],{"class":102},[92,60517,54719],{"class":151},[92,60519,1269],{"class":102},[92,60521,60522],{"class":94,"line":1658},[92,60523,2508],{"class":102},[92,60525,60526],{"class":94,"line":1672},[92,60527,2379],{"emptyLinePlaceholder":17},[92,60529,60530,60533],{"class":94,"line":1677},[92,60531,60532],{"class":1942},"        .mi",[92,60534,15552],{"class":102},[92,60536,60537,60540,60542,60544],{"class":94,"line":1706},[92,60538,60539],{"class":151},"            position",[92,60541,51419],{"class":102},[92,60543,54746],{"class":151},[92,60545,1269],{"class":102},[92,60547,60548,60550,60552,60555,60557],{"class":94,"line":1711},[92,60549,51466],{"class":151},[92,60551,51419],{"class":102},[92,60553,60554],{"class":151},"223",[92,60556,51474],{"class":98},[92,60558,1269],{"class":102},[92,60560,60561,60563,60565,60567,60569,60571],{"class":94,"line":1728},[92,60562,51416],{"class":151},[92,60564,51419],{"class":102},[92,60566,414],{"class":151},[92,60568,51474],{"class":98},[92,60570,51538],{"class":151},[92,60572,1269],{"class":102},[92,60574,60575],{"class":94,"line":1733},[92,60576,2508],{"class":102},[92,60578,60579],{"class":94,"line":1738},[92,60580,2379],{"emptyLinePlaceholder":17},[92,60582,60583,60585,60588],{"class":94,"line":1743},[92,60584,60532],{"class":1942},[92,60586,60587],{"class":51282}," input",[92,60589,15552],{"class":102},[92,60591,60592,60594,60596,60598,60600],{"class":94,"line":1757},[92,60593,51466],{"class":151},[92,60595,51419],{"class":102},[92,60597,60554],{"class":151},[92,60599,51474],{"class":98},[92,60601,1269],{"class":102},[92,60603,60604,60606,60608,60610,60612],{"class":94,"line":1762},[92,60605,51481],{"class":151},[92,60607,51419],{"class":102},[92,60609,710],{"class":151},[92,60611,51474],{"class":98},[92,60613,1269],{"class":102},[92,60615,60616,60618,60620,60622,60624,60626],{"class":94,"line":2556},[92,60617,51428],{"class":151},[92,60619,51419],{"class":102},[92,60621,294],{"class":151},[92,60623,2017],{"class":151},[92,60625,51474],{"class":98},[92,60627,1269],{"class":102},[92,60629,60630,60633,60635,60637,60639],{"class":94,"line":2570},[92,60631,60632],{"class":151},"            font-size",[92,60634,51419],{"class":102},[92,60636,652],{"class":151},[92,60638,51474],{"class":98},[92,60640,1269],{"class":102},[92,60642,60643,60646,60648,60650,60652],{"class":94,"line":2578},[92,60644,60645],{"class":151},"            line-height",[92,60647,51419],{"class":102},[92,60649,710],{"class":151},[92,60651,51474],{"class":98},[92,60653,1269],{"class":102},[92,60655,60656,60659,60661,60663,60665,60667,60670],{"class":94,"line":2583},[92,60657,60658],{"class":151},"            border",[92,60660,51419],{"class":102},[92,60662,320],{"class":151},[92,60664,51474],{"class":98},[92,60666,51503],{"class":151},[92,60668,60669],{"class":151}," #e0e0e0",[92,60671,1269],{"class":102},[92,60673,60674,60677,60679,60681],{"class":94,"line":2589},[92,60675,60676],{"class":151},"            outline",[92,60678,51419],{"class":102},[92,60680,54719],{"class":151},[92,60682,1269],{"class":102},[92,60684,60685],{"class":94,"line":2595},[92,60686,2508],{"class":102},[92,60688,60689],{"class":94,"line":2600},[92,60690,2379],{"emptyLinePlaceholder":17},[92,60692,60693,60695,60698],{"class":94,"line":7928},[92,60694,60532],{"class":1942},[92,60696,60697],{"class":1942}," .search",[92,60699,15552],{"class":102},[92,60701,60702,60704,60706,60708,60710,60712,60715],{"class":94,"line":7952},[92,60703,60658],{"class":151},[92,60705,51419],{"class":102},[92,60707,320],{"class":151},[92,60709,51474],{"class":98},[92,60711,51503],{"class":151},[92,60713,60714],{"class":151}," #ff6700",[92,60716,1269],{"class":102},[92,60718,60719],{"class":94,"line":7957},[92,60720,2508],{"class":102},[92,60722,60723],{"class":94,"line":7963},[92,60724,2379],{"emptyLinePlaceholder":17},[92,60726,60727,60730],{"class":94,"line":7990},[92,60728,60729],{"class":1942},"        .result-list",[92,60731,15552],{"class":102},[92,60733,60734,60736,60738,60740],{"class":94,"line":7995},[92,60735,51454],{"class":151},[92,60737,51419],{"class":102},[92,60739,54719],{"class":151},[92,60741,1269],{"class":102},[92,60743,60744,60746,60748,60750],{"class":94,"line":8001},[92,60745,60539],{"class":151},[92,60747,51419],{"class":102},[92,60749,54813],{"class":151},[92,60751,1269],{"class":102},[92,60753,60754,60757,60759,60761],{"class":94,"line":8013},[92,60755,60756],{"class":151},"            left",[92,60758,51419],{"class":102},[92,60760,294],{"class":151},[92,60762,1269],{"class":102},[92,60764,60765,60768,60770,60772,60774],{"class":94,"line":8025},[92,60766,60767],{"class":151},"            top",[92,60769,51419],{"class":102},[92,60771,710],{"class":151},[92,60773,51474],{"class":98},[92,60775,1269],{"class":102},[92,60777,60778,60780,60782,60784,60786],{"class":94,"line":8037},[92,60779,51466],{"class":151},[92,60781,51419],{"class":102},[92,60783,60554],{"class":151},[92,60785,51474],{"class":98},[92,60787,1269],{"class":102},[92,60789,60790,60792,60794,60796,60798,60800,60802],{"class":94,"line":9696},[92,60791,60658],{"class":151},[92,60793,51419],{"class":102},[92,60795,320],{"class":151},[92,60797,51474],{"class":98},[92,60799,51503],{"class":151},[92,60801,60714],{"class":151},[92,60803,1269],{"class":102},[92,60805,60806,60809,60811,60813],{"class":94,"line":9721},[92,60807,60808],{"class":151},"            border-top",[92,60810,51419],{"class":102},[92,60812,294],{"class":151},[92,60814,1269],{"class":102},[92,60816,60817,60820,60822,60825],{"class":94,"line":9744},[92,60818,60819],{"class":151},"            background",[92,60821,51419],{"class":102},[92,60823,60824],{"class":151},"#fff",[92,60826,1269],{"class":102},[92,60828,60829],{"class":94,"line":9768},[92,60830,2508],{"class":102},[92,60832,60833],{"class":94,"line":9773},[92,60834,2379],{"emptyLinePlaceholder":17},[92,60836,60837,60839,60841],{"class":94,"line":9778},[92,60838,60729],{"class":1942},[92,60840,1377],{"class":51282},[92,60842,15552],{"class":102},[92,60844,60845,60847,60849,60852],{"class":94,"line":9783},[92,60846,51454],{"class":151},[92,60848,51419],{"class":102},[92,60850,60851],{"class":151},"block",[92,60853,1269],{"class":102},[92,60855,60856,60858,60860,60862,60864,60867,60869],{"class":94,"line":9792},[92,60857,51428],{"class":151},[92,60859,51419],{"class":102},[92,60861,447],{"class":151},[92,60863,51474],{"class":98},[92,60865,60866],{"class":151}," 15",[92,60868,51474],{"class":98},[92,60870,1269],{"class":102},[92,60872,60873,60875,60877,60879,60881],{"class":94,"line":9797},[92,60874,60632],{"class":151},[92,60876,51419],{"class":102},[92,60878,601],{"class":151},[92,60880,51474],{"class":98},[92,60882,1269],{"class":102},[92,60884,60885,60888,60890,60893],{"class":94,"line":9803},[92,60886,60887],{"class":151},"            color",[92,60889,51419],{"class":102},[92,60891,60892],{"class":151},"#424242",[92,60894,1269],{"class":102},[92,60896,60897,60900,60902,60904],{"class":94,"line":9824},[92,60898,60899],{"class":151},"            text-decoration",[92,60901,51419],{"class":102},[92,60903,54719],{"class":151},[92,60905,1269],{"class":102},[92,60907,60908],{"class":94,"line":9830},[92,60909,2508],{"class":102},[92,60911,60912],{"class":94,"line":9844},[92,60913,2379],{"emptyLinePlaceholder":17},[92,60915,60916,60918,60920,60923],{"class":94,"line":9850},[92,60917,60729],{"class":1942},[92,60919,1377],{"class":51282},[92,60921,60922],{"class":1942},":hover",[92,60924,15552],{"class":102},[92,60926,60927,60929,60931,60934],{"class":94,"line":9877},[92,60928,51622],{"class":151},[92,60930,51419],{"class":102},[92,60932,60933],{"class":151},"#eee",[92,60935,1269],{"class":102},[92,60937,60938],{"class":94,"line":9886},[92,60939,2508],{"class":102},[92,60941,60942,60944,60946],{"class":94,"line":9892},[92,60943,51758],{"class":102},[92,60945,5106],{"class":51282},[92,60947,51289],{"class":102},[92,60949,60950],{"class":94,"line":9900},[92,60951,2379],{"emptyLinePlaceholder":17},[92,60953,60954,60956,60958],{"class":94,"line":9905},[92,60955,51767],{"class":102},[92,60957,51316],{"class":51282},[92,60959,51289],{"class":102},[92,60961,60962],{"class":94,"line":16584},[92,60963,2379],{"emptyLinePlaceholder":17},[92,60965,60966,60968,60970],{"class":94,"line":16590},[92,60967,1013],{"class":102},[92,60969,51782],{"class":51282},[92,60971,51289],{"class":102},[92,60973,60974,60976,60978,60980,60982,60985],{"class":94,"line":16613},[92,60975,51323],{"class":102},[92,60977,51593],{"class":51282},[92,60979,53468],{"class":1942},[92,60981,148],{"class":102},[92,60983,60984],{"class":207},"\"mi\"",[92,60986,51289],{"class":102},[92,60988,60989,60991,60993,60995,60997,61000,61003,61005,61008],{"class":94,"line":16619},[92,60990,55284],{"class":102},[92,60992,53803],{"class":51282},[92,60994,53806],{"class":1942},[92,60996,148],{"class":102},[92,60998,60999],{"class":207},"\"search\"",[92,61001,61002],{"class":1942}," placeholder",[92,61004,148],{"class":102},[92,61006,61007],{"class":207},"\"小米笔记本\"",[92,61009,51289],{"class":102},[92,61011,61012,61014,61016,61018,61020,61023],{"class":94,"line":16642},[92,61013,55284],{"class":102},[92,61015,1110],{"class":51282},[92,61017,53468],{"class":1942},[92,61019,148],{"class":102},[92,61021,61022],{"class":207},"\"result-list\"",[92,61024,51289],{"class":102},[92,61026,61027,61030,61032,61035,61037,61040,61042,61045,61048,61050,61052,61054],{"class":94,"line":16656},[92,61028,61029],{"class":102},"            \u003C",[92,61031,49],{"class":51282},[92,61033,61034],{"class":102},">\u003C",[92,61036,341],{"class":51282},[92,61038,61039],{"class":1942}," href",[92,61041,148],{"class":102},[92,61043,61044],{"class":207},"\"#\"",[92,61046,61047],{"class":102},">全部商品\u003C\u002F",[92,61049,341],{"class":51282},[92,61051,55296],{"class":102},[92,61053,49],{"class":51282},[92,61055,51289],{"class":102},[92,61057,61058,61060,61062,61064,61066,61068,61070,61072,61075,61077,61079,61081],{"class":94,"line":16676},[92,61059,61029],{"class":102},[92,61061,49],{"class":51282},[92,61063,61034],{"class":102},[92,61065,341],{"class":51282},[92,61067,61039],{"class":1942},[92,61069,148],{"class":102},[92,61071,61044],{"class":207},[92,61073,61074],{"class":102},">小米11\u003C\u002F",[92,61076,341],{"class":51282},[92,61078,55296],{"class":102},[92,61080,49],{"class":51282},[92,61082,51289],{"class":102},[92,61084,61085,61087,61089,61091,61093,61095,61097,61099,61102,61104,61106,61108],{"class":94,"line":16682},[92,61086,61029],{"class":102},[92,61088,49],{"class":51282},[92,61090,61034],{"class":102},[92,61092,341],{"class":51282},[92,61094,61039],{"class":1942},[92,61096,148],{"class":102},[92,61098,61044],{"class":207},[92,61100,61101],{"class":102},">小米10S\u003C\u002F",[92,61103,341],{"class":51282},[92,61105,55296],{"class":102},[92,61107,49],{"class":51282},[92,61109,51289],{"class":102},[92,61111,61112,61114,61116,61118,61120,61122,61124,61126,61129,61131,61133,61135],{"class":94,"line":16693},[92,61113,61029],{"class":102},[92,61115,49],{"class":51282},[92,61117,61034],{"class":102},[92,61119,341],{"class":51282},[92,61121,61039],{"class":1942},[92,61123,148],{"class":102},[92,61125,61044],{"class":207},[92,61127,61128],{"class":102},">小米笔记本\u003C\u002F",[92,61130,341],{"class":51282},[92,61132,55296],{"class":102},[92,61134,49],{"class":51282},[92,61136,51289],{"class":102},[92,61138,61139,61141,61143,61145,61147,61149,61151,61153,61156,61158,61160,61162],{"class":94,"line":16716},[92,61140,61029],{"class":102},[92,61142,49],{"class":51282},[92,61144,61034],{"class":102},[92,61146,341],{"class":51282},[92,61148,61039],{"class":1942},[92,61150,148],{"class":102},[92,61152,61044],{"class":207},[92,61154,61155],{"class":102},">小米手机\u003C\u002F",[92,61157,341],{"class":51282},[92,61159,55296],{"class":102},[92,61161,49],{"class":51282},[92,61163,51289],{"class":102},[92,61165,61166,61168,61170,61172,61174,61176,61178,61180,61183,61185,61187,61189],{"class":94,"line":16738},[92,61167,61029],{"class":102},[92,61169,49],{"class":51282},[92,61171,61034],{"class":102},[92,61173,341],{"class":51282},[92,61175,61039],{"class":1942},[92,61177,148],{"class":102},[92,61179,61044],{"class":207},[92,61181,61182],{"class":102},">黑鲨4\u003C\u002F",[92,61184,341],{"class":51282},[92,61186,55296],{"class":102},[92,61188,49],{"class":51282},[92,61190,51289],{"class":102},[92,61192,61193,61195,61197,61199,61201,61203,61205,61207,61210,61212,61214,61216],{"class":94,"line":16743},[92,61194,61029],{"class":102},[92,61196,49],{"class":51282},[92,61198,61034],{"class":102},[92,61200,341],{"class":51282},[92,61202,61039],{"class":1942},[92,61204,148],{"class":102},[92,61206,61044],{"class":207},[92,61208,61209],{"class":102},">空调\u003C\u002F",[92,61211,341],{"class":51282},[92,61213,55296],{"class":102},[92,61215,49],{"class":51282},[92,61217,51289],{"class":102},[92,61219,61220,61223,61225],{"class":94,"line":16749},[92,61221,61222],{"class":102},"        \u003C\u002F",[92,61224,1110],{"class":51282},[92,61226,51289],{"class":102},[92,61228,61229,61231,61233],{"class":94,"line":16763},[92,61230,51758],{"class":102},[92,61232,51593],{"class":51282},[92,61234,51289],{"class":102},[92,61236,61237,61239,61241],{"class":94,"line":16776},[92,61238,51323],{"class":102},[92,61240,51795],{"class":51282},[92,61242,51289],{"class":102},[92,61244,61245],{"class":94,"line":16781},[92,61246,61247],{"class":161},"        \u002F\u002F 1. 获取元素\n",[92,61249,61250,61253,61255,61257,61259,61261,61263,61266],{"class":94,"line":16795},[92,61251,61252],{"class":98},"        const",[92,61254,60587],{"class":151},[92,61256,13544],{"class":98},[92,61258,54378],{"class":102},[92,61260,54381],{"class":1942},[92,61262,103],{"class":102},[92,61264,61265],{"class":207},"'[type=search]'",[92,61267,109],{"class":102},[92,61269,61270,61272,61275,61277,61279,61281,61283,61286],{"class":94,"line":16800},[92,61271,61252],{"class":98},[92,61273,61274],{"class":151}," ul",[92,61276,13544],{"class":98},[92,61278,54378],{"class":102},[92,61280,54381],{"class":1942},[92,61282,103],{"class":102},[92,61284,61285],{"class":207},"'.result-list'",[92,61287,109],{"class":102},[92,61289,61290],{"class":94,"line":16806},[92,61291,61292],{"class":161},"        \u002F\u002F console.log(input)\n",[92,61294,61295],{"class":94,"line":16811},[92,61296,61297],{"class":161},"        \u002F\u002F 2. 监听事件 获得焦点\n",[92,61299,61300,61303,61305,61307,61310,61312,61314],{"class":94,"line":16825},[92,61301,61302],{"class":102},"        input.",[92,61304,57795],{"class":1942},[92,61306,103],{"class":102},[92,61308,61309],{"class":207},"'focus'",[92,61311,12415],{"class":102},[92,61313,54431],{"class":98},[92,61315,54434],{"class":102},[92,61317,61318],{"class":94,"line":16830},[92,61319,61320],{"class":161},"            \u002F\u002F ul显示\n",[92,61322,61323,61326,61328],{"class":94,"line":16835},[92,61324,61325],{"class":102},"            ul.style.display ",[92,61327,148],{"class":98},[92,61329,61330],{"class":207}," 'block'\n",[92,61332,61333],{"class":94,"line":16849},[92,61334,61335],{"class":161},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[92,61337,61338,61341,61343,61345,61348],{"class":94,"line":16861},[92,61339,61340],{"class":102},"            input.classList.",[92,61342,5314],{"class":1942},[92,61344,103],{"class":102},[92,61346,61347],{"class":207},"'search'",[92,61349,109],{"class":102},[92,61351,61352],{"class":94,"line":16866},[92,61353,61354],{"class":102},"        })\n",[92,61356,61357],{"class":94,"line":16879},[92,61358,61359],{"class":161},"        \u002F\u002F 3. 监听事件 失去焦点\n",[92,61361,61362,61364,61366,61368,61371,61373,61375],{"class":94,"line":16884},[92,61363,61302],{"class":102},[92,61365,57795],{"class":1942},[92,61367,103],{"class":102},[92,61369,61370],{"class":207},"'blur'",[92,61372,12415],{"class":102},[92,61374,54431],{"class":98},[92,61376,54434],{"class":102},[92,61378,61379,61381,61383],{"class":94,"line":16889},[92,61380,61325],{"class":102},[92,61382,148],{"class":98},[92,61384,61385],{"class":207}," 'none'\n",[92,61387,61388,61390,61392,61394,61396],{"class":94,"line":16894},[92,61389,61340],{"class":102},[92,61391,56988],{"class":1942},[92,61393,103],{"class":102},[92,61395,61347],{"class":207},[92,61397,109],{"class":102},[92,61399,61400],{"class":94,"line":16907},[92,61401,61354],{"class":102},[92,61403,61404,61406,61408],{"class":94,"line":16912},[92,61405,51758],{"class":102},[92,61407,51795],{"class":51282},[92,61409,51289],{"class":102},[92,61411,61412,61414,61416],{"class":94,"line":32615},[92,61413,51767],{"class":102},[92,61415,51782],{"class":51282},[92,61417,51289],{"class":102},[92,61419,61420],{"class":94,"line":32621},[92,61421,2379],{"emptyLinePlaceholder":17},[92,61423,61424,61426,61428],{"class":94,"line":32627},[92,61425,51767],{"class":102},[92,61427,50617],{"class":51282},[92,61429,51289],{"class":102},[21978,61431,61433],{"id":61432},"_3253-键盘事件","3.2.5.3 键盘事件",[38,61435,61436],{},"评论字数统计案例",[38,61438,61439],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[38,61441,61442],{},"牢记focus伪类选择器",[51326,61444],{"charSet":61445},"UTF-8",[51326,61447],{"name":61448,"content":61449},"viewport","width=device-width, initial-scale=1.0",[51389,61451,61452],{},"Document",[5106,61454,61455],{},"\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",[53803,61457],{"type":5167},[1110,61459,61460,61463],{},[49,61461,61462],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[49,61464,61465],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[83,61467,61469],{"className":50615,"code":61468,"language":50617,"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,61470,61471,61481,61495,61499,61507,61521,61541,61561,61574,61582,61589,61602,61616,61626,61636,61640,61644,61651,61663,61675,61687,61699,61728,61741,61745,61749,61758,61769,61781,61792,61803,61815,61826,61838,61854,61866,61870,61874,61885,61896,61906,61918,61922,61926,61934,61945,61955,61966,61978,61991,62003,62015,62019,62023,62032,62044,62055,62068,62079,62093,62097,62101,62108,62120,62132,62142,62146,62150,62159,62171,62181,62185,62189,62200,62210,62229,62242,62246,62250,62260,62270,62274,62278,62289,62300,62312,62324,62328,62332,62343,62354,62368,62372,62376,62387,62397,62409,62413,62421,62429,62433,62441,62456,62475,62515,62528,62536,62550,62570,62578,62593,62616,62634,62649,62669,62689,62709,62717,62725,62733,62741,62761,62781,62786,62803,62812,62816,62821,62837,62845,62849,62854,62871,62876,62901,62905,62909,62914,62919,62927,62935,62939],{"__ignoreMap":10},[92,61472,61473,61475,61477,61479],{"class":94,"line":95},[92,61474,51279],{"class":102},[92,61476,51283],{"class":51282},[92,61478,51286],{"class":1942},[92,61480,51289],{"class":102},[92,61482,61483,61485,61487,61489,61491,61493],{"class":94,"line":11},[92,61484,1013],{"class":102},[92,61486,50617],{"class":51282},[92,61488,51298],{"class":1942},[92,61490,148],{"class":102},[92,61492,51303],{"class":207},[92,61494,51289],{"class":102},[92,61496,61497],{"class":94,"line":1158},[92,61498,2379],{"emptyLinePlaceholder":17},[92,61500,61501,61503,61505],{"class":94,"line":1173},[92,61502,1013],{"class":102},[92,61504,51316],{"class":51282},[92,61506,51289],{"class":102},[92,61508,61509,61511,61513,61515,61517,61519],{"class":94,"line":1179},[92,61510,52126],{"class":102},[92,61512,51326],{"class":51282},[92,61514,51329],{"class":1942},[92,61516,148],{"class":102},[92,61518,51334],{"class":207},[92,61520,51289],{"class":102},[92,61522,61523,61525,61527,61529,61531,61533,61535,61537,61539],{"class":94,"line":1193},[92,61524,52126],{"class":102},[92,61526,51326],{"class":51282},[92,61528,51345],{"class":1942},[92,61530,148],{"class":102},[92,61532,51350],{"class":207},[92,61534,51353],{"class":1942},[92,61536,148],{"class":102},[92,61538,51358],{"class":207},[92,61540,51289],{"class":102},[92,61542,61543,61545,61547,61549,61551,61553,61555,61557,61559],{"class":94,"line":1199},[92,61544,52126],{"class":102},[92,61546,51326],{"class":51282},[92,61548,14900],{"class":1942},[92,61550,148],{"class":102},[92,61552,51373],{"class":207},[92,61554,51353],{"class":1942},[92,61556,148],{"class":102},[92,61558,51380],{"class":207},[92,61560,51289],{"class":102},[92,61562,61563,61565,61567,61570,61572],{"class":94,"line":1290},[92,61564,52126],{"class":102},[92,61566,51389],{"class":51282},[92,61568,61569],{"class":102},">评论回车发布\u003C\u002F",[92,61571,51389],{"class":51282},[92,61573,51289],{"class":102},[92,61575,61576,61578,61580],{"class":94,"line":1296},[92,61577,52126],{"class":102},[92,61579,5106],{"class":51282},[92,61581,51289],{"class":102},[92,61583,61584,61587],{"class":94,"line":1308},[92,61585,61586],{"class":1942},"    .wrapper",[92,61588,15552],{"class":102},[92,61590,61591,61594,61596,61598,61600],{"class":94,"line":1591},[92,61592,61593],{"class":151},"      min-width",[92,61595,51419],{"class":102},[92,61597,3966],{"class":151},[92,61599,51474],{"class":98},[92,61601,1269],{"class":102},[92,61603,61604,61607,61609,61612,61614],{"class":94,"line":1596},[92,61605,61606],{"class":151},"      max-width",[92,61608,51419],{"class":102},[92,61610,61611],{"class":151},"800",[92,61613,51474],{"class":98},[92,61615,1269],{"class":102},[92,61617,61618,61620,61622,61624],{"class":94,"line":1602},[92,61619,54991],{"class":151},[92,61621,51419],{"class":102},[92,61623,51459],{"class":151},[92,61625,1269],{"class":102},[92,61627,61628,61630,61632,61634],{"class":94,"line":1607},[92,61629,55002],{"class":151},[92,61631,51419],{"class":102},[92,61633,51562],{"class":151},[92,61635,1269],{"class":102},[92,61637,61638],{"class":94,"line":1621},[92,61639,2166],{"class":102},[92,61641,61642],{"class":94,"line":1626},[92,61643,2379],{"emptyLinePlaceholder":17},[92,61645,61646,61649],{"class":94,"line":1632},[92,61647,61648],{"class":1942},"    .avatar",[92,61650,15552],{"class":102},[92,61652,61653,61655,61657,61659,61661],{"class":94,"line":1653},[92,61654,54753],{"class":151},[92,61656,51419],{"class":102},[92,61658,710],{"class":151},[92,61660,51474],{"class":98},[92,61662,1269],{"class":102},[92,61664,61665,61667,61669,61671,61673],{"class":94,"line":1658},[92,61666,54767],{"class":151},[92,61668,51419],{"class":102},[92,61670,710],{"class":151},[92,61672,51474],{"class":98},[92,61674,1269],{"class":102},[92,61676,61677,61679,61681,61683,61685],{"class":94,"line":1672},[92,61678,55116],{"class":151},[92,61680,51419],{"class":102},[92,61682,759],{"class":151},[92,61684,431],{"class":98},[92,61686,1269],{"class":102},[92,61688,61689,61692,61694,61697],{"class":94,"line":1677},[92,61690,61691],{"class":151},"      overflow",[92,61693,51419],{"class":102},[92,61695,61696],{"class":151},"hidden",[92,61698,1269],{"class":102},[92,61700,61701,61704,61706,61709,61711,61714,61716,61719,61721,61723,61726],{"class":94,"line":1706},[92,61702,61703],{"class":151},"      background",[92,61705,51419],{"class":102},[92,61707,61708],{"class":151},"url",[92,61710,103],{"class":102},[92,61712,61713],{"class":5196},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[92,61715,13694],{"class":102},[92,61717,61718],{"class":151},"no-repeat",[92,61720,17124],{"class":151},[92,61722,24960],{"class":102},[92,61724,61725],{"class":151},"cover",[92,61727,1269],{"class":102},[92,61729,61730,61733,61735,61737,61739],{"class":94,"line":1711},[92,61731,61732],{"class":151},"      margin-right",[92,61734,51419],{"class":102},[92,61736,803],{"class":151},[92,61738,51474],{"class":98},[92,61740,1269],{"class":102},[92,61742,61743],{"class":94,"line":1728},[92,61744,2166],{"class":102},[92,61746,61747],{"class":94,"line":1733},[92,61748,2379],{"emptyLinePlaceholder":17},[92,61750,61751,61753,61756],{"class":94,"line":1738},[92,61752,61586],{"class":1942},[92,61754,61755],{"class":51282}," textarea",[92,61757,15552],{"class":102},[92,61759,61760,61763,61765,61767],{"class":94,"line":1743},[92,61761,61762],{"class":151},"      outline",[92,61764,51419],{"class":102},[92,61766,54719],{"class":151},[92,61768,1269],{"class":102},[92,61770,61771,61774,61776,61779],{"class":94,"line":1757},[92,61772,61773],{"class":151},"      border-color",[92,61775,51419],{"class":102},[92,61777,61778],{"class":151},"transparent",[92,61780,1269],{"class":102},[92,61782,61783,61786,61788,61790],{"class":94,"line":1762},[92,61784,61785],{"class":151},"      resize",[92,61787,51419],{"class":102},[92,61789,54719],{"class":151},[92,61791,1269],{"class":102},[92,61793,61794,61796,61798,61801],{"class":94,"line":2556},[92,61795,61703],{"class":151},[92,61797,51419],{"class":102},[92,61799,61800],{"class":151},"#f5f5f5",[92,61802,1269],{"class":102},[92,61804,61805,61807,61809,61811,61813],{"class":94,"line":2570},[92,61806,55116],{"class":151},[92,61808,51419],{"class":102},[92,61810,396],{"class":151},[92,61812,51474],{"class":98},[92,61814,1269],{"class":102},[92,61816,61817,61820,61822,61824],{"class":94,"line":2578},[92,61818,61819],{"class":151},"      flex",[92,61821,51419],{"class":102},[92,61823,320],{"class":151},[92,61825,1269],{"class":102},[92,61827,61828,61830,61832,61834,61836],{"class":94,"line":2583},[92,61829,54677],{"class":151},[92,61831,51419],{"class":102},[92,61833,549],{"class":151},[92,61835,51474],{"class":98},[92,61837,1269],{"class":102},[92,61839,61840,61843,61845,61847,61850,61852],{"class":94,"line":2589},[92,61841,61842],{"class":151},"      transition",[92,61844,51419],{"class":102},[92,61846,28103],{"class":151},[92,61848,61849],{"class":151}," 0.5",[92,61851,798],{"class":98},[92,61853,1269],{"class":102},[92,61855,61856,61858,61860,61862,61864],{"class":94,"line":2595},[92,61857,54767],{"class":151},[92,61859,51419],{"class":102},[92,61861,1054],{"class":151},[92,61863,51474],{"class":98},[92,61865,1269],{"class":102},[92,61867,61868],{"class":94,"line":2600},[92,61869,2166],{"class":102},[92,61871,61872],{"class":94,"line":7928},[92,61873,2379],{"emptyLinePlaceholder":17},[92,61875,61876,61878,61880,61883],{"class":94,"line":7952},[92,61877,61586],{"class":1942},[92,61879,61755],{"class":51282},[92,61881,61882],{"class":1942},":focus",[92,61884,15552],{"class":102},[92,61886,61887,61889,61891,61894],{"class":94,"line":7957},[92,61888,61773],{"class":151},[92,61890,51419],{"class":102},[92,61892,61893],{"class":151},"#e4e4e4",[92,61895,1269],{"class":102},[92,61897,61898,61900,61902,61904],{"class":94,"line":7963},[92,61899,61703],{"class":151},[92,61901,51419],{"class":102},[92,61903,60824],{"class":151},[92,61905,1269],{"class":102},[92,61907,61908,61910,61912,61914,61916],{"class":94,"line":7990},[92,61909,54767],{"class":151},[92,61911,51419],{"class":102},[92,61913,759],{"class":151},[92,61915,51474],{"class":98},[92,61917,1269],{"class":102},[92,61919,61920],{"class":94,"line":7995},[92,61921,2166],{"class":102},[92,61923,61924],{"class":94,"line":8001},[92,61925,2379],{"emptyLinePlaceholder":17},[92,61927,61928,61930,61932],{"class":94,"line":8013},[92,61929,61586],{"class":1942},[92,61931,57449],{"class":51282},[92,61933,15552],{"class":102},[92,61935,61936,61938,61940,61943],{"class":94,"line":8025},[92,61937,61703],{"class":151},[92,61939,51419],{"class":102},[92,61941,61942],{"class":151},"#00aeec",[92,61944,1269],{"class":102},[92,61946,61947,61949,61951,61953],{"class":94,"line":8037},[92,61948,57398],{"class":151},[92,61950,51419],{"class":102},[92,61952,60824],{"class":151},[92,61954,1269],{"class":102},[92,61956,61957,61960,61962,61964],{"class":94,"line":9696},[92,61958,61959],{"class":151},"      border",[92,61961,51419],{"class":102},[92,61963,54719],{"class":151},[92,61965,1269],{"class":102},[92,61967,61968,61970,61972,61974,61976],{"class":94,"line":9721},[92,61969,55116],{"class":151},[92,61971,51419],{"class":102},[92,61973,396],{"class":151},[92,61975,51474],{"class":98},[92,61977,1269],{"class":102},[92,61979,61980,61983,61985,61987,61989],{"class":94,"line":9744},[92,61981,61982],{"class":151},"      margin-left",[92,61984,51419],{"class":102},[92,61986,549],{"class":151},[92,61988,51474],{"class":98},[92,61990,1269],{"class":102},[92,61992,61993,61995,61997,61999,62001],{"class":94,"line":9768},[92,61994,54753],{"class":151},[92,61996,51419],{"class":102},[92,61998,459],{"class":151},[92,62000,51474],{"class":98},[92,62002,1269],{"class":102},[92,62004,62005,62008,62010,62013],{"class":94,"line":9773},[92,62006,62007],{"class":151},"      cursor",[92,62009,51419],{"class":102},[92,62011,62012],{"class":151},"pointer",[92,62014,1269],{"class":102},[92,62016,62017],{"class":94,"line":9778},[92,62018,2166],{"class":102},[92,62020,62021],{"class":94,"line":9783},[92,62022,2379],{"emptyLinePlaceholder":17},[92,62024,62025,62027,62030],{"class":94,"line":9792},[92,62026,61586],{"class":1942},[92,62028,62029],{"class":1942}," .total",[92,62031,15552],{"class":102},[92,62033,62034,62036,62038,62040,62042],{"class":94,"line":9797},[92,62035,61732],{"class":151},[92,62037,51419],{"class":102},[92,62039,715],{"class":151},[92,62041,51474],{"class":98},[92,62043,1269],{"class":102},[92,62045,62046,62048,62050,62053],{"class":94,"line":9803},[92,62047,57398],{"class":151},[92,62049,51419],{"class":102},[92,62051,62052],{"class":151},"#999",[92,62054,1269],{"class":102},[92,62056,62057,62060,62062,62064,62066],{"class":94,"line":9824},[92,62058,62059],{"class":151},"      margin-top",[92,62061,51419],{"class":102},[92,62063,422],{"class":151},[92,62065,51474],{"class":98},[92,62067,1269],{"class":102},[92,62069,62070,62073,62075,62077],{"class":94,"line":9830},[92,62071,62072],{"class":151},"      opacity",[92,62074,51419],{"class":102},[92,62076,294],{"class":151},[92,62078,1269],{"class":102},[92,62080,62081,62083,62085,62087,62089,62091],{"class":94,"line":9844},[92,62082,61842],{"class":151},[92,62084,51419],{"class":102},[92,62086,28103],{"class":151},[92,62088,61849],{"class":151},[92,62090,798],{"class":98},[92,62092,1269],{"class":102},[92,62094,62095],{"class":94,"line":9850},[92,62096,2166],{"class":102},[92,62098,62099],{"class":94,"line":9877},[92,62100,2379],{"emptyLinePlaceholder":17},[92,62102,62103,62106],{"class":94,"line":9886},[92,62104,62105],{"class":1942},"    .list",[92,62107,15552],{"class":102},[92,62109,62110,62112,62114,62116,62118],{"class":94,"line":9892},[92,62111,61593],{"class":151},[92,62113,51419],{"class":102},[92,62115,3966],{"class":151},[92,62117,51474],{"class":98},[92,62119,1269],{"class":102},[92,62121,62122,62124,62126,62128,62130],{"class":94,"line":9900},[92,62123,61606],{"class":151},[92,62125,51419],{"class":102},[92,62127,61611],{"class":151},[92,62129,51474],{"class":98},[92,62131,1269],{"class":102},[92,62133,62134,62136,62138,62140],{"class":94,"line":9905},[92,62135,54991],{"class":151},[92,62137,51419],{"class":102},[92,62139,51459],{"class":151},[92,62141,1269],{"class":102},[92,62143,62144],{"class":94,"line":16584},[92,62145,2166],{"class":102},[92,62147,62148],{"class":94,"line":16590},[92,62149,2379],{"emptyLinePlaceholder":17},[92,62151,62152,62154,62157],{"class":94,"line":16613},[92,62153,62105],{"class":1942},[92,62155,62156],{"class":1942}," .item",[92,62158,15552],{"class":102},[92,62160,62161,62163,62165,62167,62169],{"class":94,"line":16619},[92,62162,54753],{"class":151},[92,62164,51419],{"class":102},[92,62166,414],{"class":151},[92,62168,431],{"class":98},[92,62170,1269],{"class":102},[92,62172,62173,62175,62177,62179],{"class":94,"line":16642},[92,62174,54991],{"class":151},[92,62176,51419],{"class":102},[92,62178,51459],{"class":151},[92,62180,1269],{"class":102},[92,62182,62183],{"class":94,"line":16656},[92,62184,2166],{"class":102},[92,62186,62187],{"class":94,"line":16676},[92,62188,2379],{"emptyLinePlaceholder":17},[92,62190,62191,62193,62195,62198],{"class":94,"line":16682},[92,62192,62105],{"class":1942},[92,62194,62156],{"class":1942},[92,62196,62197],{"class":1942}," .info",[92,62199,15552],{"class":102},[92,62201,62202,62204,62206,62208],{"class":94,"line":16693},[92,62203,61819],{"class":151},[92,62205,51419],{"class":102},[92,62207,320],{"class":151},[92,62209,1269],{"class":102},[92,62211,62212,62215,62217,62219,62221,62224,62227],{"class":94,"line":16716},[92,62213,62214],{"class":151},"      border-bottom",[92,62216,51419],{"class":102},[92,62218,320],{"class":151},[92,62220,51474],{"class":98},[92,62222,62223],{"class":151}," dashed",[92,62225,62226],{"class":151}," #e4e4e4",[92,62228,1269],{"class":102},[92,62230,62231,62234,62236,62238,62240],{"class":94,"line":16738},[92,62232,62233],{"class":151},"      padding-bottom",[92,62235,51419],{"class":102},[92,62237,549],{"class":151},[92,62239,51474],{"class":98},[92,62241,1269],{"class":102},[92,62243,62244],{"class":94,"line":16743},[92,62245,2166],{"class":102},[92,62247,62248],{"class":94,"line":16749},[92,62249,2379],{"emptyLinePlaceholder":17},[92,62251,62252,62254,62256,62258],{"class":94,"line":16763},[92,62253,62105],{"class":1942},[92,62255,62156],{"class":1942},[92,62257,6805],{"class":51282},[92,62259,15552],{"class":102},[92,62261,62262,62264,62266,62268],{"class":94,"line":16776},[92,62263,54688],{"class":151},[92,62265,51419],{"class":102},[92,62267,294],{"class":151},[92,62269,1269],{"class":102},[92,62271,62272],{"class":94,"line":16781},[92,62273,2166],{"class":102},[92,62275,62276],{"class":94,"line":16795},[92,62277,2379],{"emptyLinePlaceholder":17},[92,62279,62280,62282,62284,62287],{"class":94,"line":16800},[92,62281,62105],{"class":1942},[92,62283,62156],{"class":1942},[92,62285,62286],{"class":1942}," .name",[92,62288,15552],{"class":102},[92,62290,62291,62293,62295,62298],{"class":94,"line":16806},[92,62292,57398],{"class":151},[92,62294,51419],{"class":102},[92,62296,62297],{"class":151},"#FB7299",[92,62299,1269],{"class":102},[92,62301,62302,62304,62306,62308,62310],{"class":94,"line":16811},[92,62303,54904],{"class":151},[92,62305,51419],{"class":102},[92,62307,652],{"class":151},[92,62309,51474],{"class":98},[92,62311,1269],{"class":102},[92,62313,62314,62317,62319,62322],{"class":94,"line":16825},[92,62315,62316],{"class":151},"      font-weight",[92,62318,51419],{"class":102},[92,62320,62321],{"class":151},"bold",[92,62323,1269],{"class":102},[92,62325,62326],{"class":94,"line":16830},[92,62327,2166],{"class":102},[92,62329,62330],{"class":94,"line":16835},[92,62331,2379],{"emptyLinePlaceholder":17},[92,62333,62334,62336,62338,62341],{"class":94,"line":16849},[92,62335,62105],{"class":1942},[92,62337,62156],{"class":1942},[92,62339,62340],{"class":1942}," .text",[92,62342,15552],{"class":102},[92,62344,62345,62347,62349,62352],{"class":94,"line":16861},[92,62346,57398],{"class":151},[92,62348,51419],{"class":102},[92,62350,62351],{"class":151},"#333",[92,62353,1269],{"class":102},[92,62355,62356,62358,62360,62362,62364,62366],{"class":94,"line":16866},[92,62357,54677],{"class":151},[92,62359,51419],{"class":102},[92,62361,549],{"class":151},[92,62363,51474],{"class":98},[92,62365,4072],{"class":151},[92,62367,1269],{"class":102},[92,62369,62370],{"class":94,"line":16879},[92,62371,2166],{"class":102},[92,62373,62374],{"class":94,"line":16884},[92,62375,2379],{"emptyLinePlaceholder":17},[92,62377,62378,62380,62382,62385],{"class":94,"line":16889},[92,62379,62105],{"class":1942},[92,62381,62156],{"class":1942},[92,62383,62384],{"class":1942}," .time",[92,62386,15552],{"class":102},[92,62388,62389,62391,62393,62395],{"class":94,"line":16894},[92,62390,57398],{"class":151},[92,62392,51419],{"class":102},[92,62394,62052],{"class":151},[92,62396,1269],{"class":102},[92,62398,62399,62401,62403,62405,62407],{"class":94,"line":16907},[92,62400,54904],{"class":151},[92,62402,51419],{"class":102},[92,62404,601],{"class":151},[92,62406,51474],{"class":98},[92,62408,1269],{"class":102},[92,62410,62411],{"class":94,"line":16912},[92,62412,2166],{"class":102},[92,62414,62415,62417,62419],{"class":94,"line":32615},[92,62416,52399],{"class":102},[92,62418,5106],{"class":51282},[92,62420,51289],{"class":102},[92,62422,62423,62425,62427],{"class":94,"line":32621},[92,62424,51767],{"class":102},[92,62426,51316],{"class":51282},[92,62428,51289],{"class":102},[92,62430,62431],{"class":94,"line":32627},[92,62432,2379],{"emptyLinePlaceholder":17},[92,62434,62435,62437,62439],{"class":94,"line":32633},[92,62436,1013],{"class":102},[92,62438,51782],{"class":51282},[92,62440,51289],{"class":102},[92,62442,62443,62445,62447,62449,62451,62454],{"class":94,"line":32639},[92,62444,52126],{"class":102},[92,62446,51593],{"class":51282},[92,62448,53468],{"class":1942},[92,62450,148],{"class":102},[92,62452,62453],{"class":207},"\"wrapper\"",[92,62455,51289],{"class":102},[92,62457,62458,62460,62462,62464,62466,62469,62471,62473],{"class":94,"line":32650},[92,62459,51323],{"class":102},[92,62461,544],{"class":51282},[92,62463,53468],{"class":1942},[92,62465,148],{"class":102},[92,62467,62468],{"class":207},"\"avatar\"",[92,62470,55296],{"class":102},[92,62472,544],{"class":51282},[92,62474,51289],{"class":102},[92,62476,62477,62479,62481,62483,62485,62488,62490,62492,62495,62497,62499,62501,62504,62506,62509,62511,62513],{"class":94,"line":32656},[92,62478,51323],{"class":102},[92,62480,54270],{"class":51282},[92,62482,14939],{"class":1942},[92,62484,148],{"class":102},[92,62486,62487],{"class":207},"\"tx\"",[92,62489,61002],{"class":1942},[92,62491,148],{"class":102},[92,62493,62494],{"class":207},"\"发一条友善的评论\"",[92,62496,54293],{"class":1942},[92,62498,148],{"class":102},[92,62500,3680],{"class":207},[92,62502,62503],{"class":1942}," maxlength",[92,62505,148],{"class":102},[92,62507,62508],{"class":207},"\"200\"",[92,62510,55296],{"class":102},[92,62512,54270],{"class":51282},[92,62514,51289],{"class":102},[92,62516,62517,62519,62521,62524,62526],{"class":94,"line":32676},[92,62518,51323],{"class":102},[92,62520,53869],{"class":51282},[92,62522,62523],{"class":102},">发布\u003C\u002F",[92,62525,53869],{"class":51282},[92,62527,51289],{"class":102},[92,62529,62530,62532,62534],{"class":94,"line":32682},[92,62531,52399],{"class":102},[92,62533,51593],{"class":51282},[92,62535,51289],{"class":102},[92,62537,62538,62540,62542,62544,62546,62548],{"class":94,"line":32693},[92,62539,52126],{"class":102},[92,62541,51593],{"class":51282},[92,62543,53468],{"class":1942},[92,62545,148],{"class":102},[92,62547,62453],{"class":207},[92,62549,51289],{"class":102},[92,62551,62552,62554,62556,62558,62560,62563,62566,62568],{"class":94,"line":32699},[92,62553,51323],{"class":102},[92,62555,92],{"class":51282},[92,62557,53468],{"class":1942},[92,62559,148],{"class":102},[92,62561,62562],{"class":207},"\"total\"",[92,62564,62565],{"class":102},">0\u002F200字\u003C\u002F",[92,62567,92],{"class":51282},[92,62569,51289],{"class":102},[92,62571,62572,62574,62576],{"class":94,"line":32705},[92,62573,52399],{"class":102},[92,62575,51593],{"class":51282},[92,62577,51289],{"class":102},[92,62579,62580,62582,62584,62586,62588,62591],{"class":94,"line":32711},[92,62581,52126],{"class":102},[92,62583,51593],{"class":51282},[92,62585,53468],{"class":1942},[92,62587,148],{"class":102},[92,62589,62590],{"class":207},"\"list\"",[92,62592,51289],{"class":102},[92,62594,62595,62597,62599,62601,62603,62606,62609,62611,62614],{"class":94,"line":32717},[92,62596,51323],{"class":102},[92,62598,51593],{"class":51282},[92,62600,53468],{"class":1942},[92,62602,148],{"class":102},[92,62604,62605],{"class":207},"\"item\"",[92,62607,62608],{"class":1942}," style",[92,62610,148],{"class":102},[92,62612,62613],{"class":207},"\"display: none;\"",[92,62615,51289],{"class":102},[92,62617,62618,62620,62622,62624,62626,62628,62630,62632],{"class":94,"line":32723},[92,62619,55216],{"class":102},[92,62621,544],{"class":51282},[92,62623,53468],{"class":1942},[92,62625,148],{"class":102},[92,62627,62468],{"class":207},[92,62629,55296],{"class":102},[92,62631,544],{"class":51282},[92,62633,51289],{"class":102},[92,62635,62636,62638,62640,62642,62644,62647],{"class":94,"line":32729},[92,62637,55216],{"class":102},[92,62639,51593],{"class":51282},[92,62641,53468],{"class":1942},[92,62643,148],{"class":102},[92,62645,62646],{"class":207},"\"info\"",[92,62648,51289],{"class":102},[92,62650,62651,62653,62655,62657,62659,62662,62665,62667],{"class":94,"line":32735},[92,62652,55284],{"class":102},[92,62654,38],{"class":51282},[92,62656,53468],{"class":1942},[92,62658,148],{"class":102},[92,62660,62661],{"class":207},"\"name\"",[92,62663,62664],{"class":102},">清风徐来\u003C\u002F",[92,62666,38],{"class":51282},[92,62668,51289],{"class":102},[92,62670,62671,62673,62675,62677,62679,62682,62685,62687],{"class":94,"line":32755},[92,62672,55284],{"class":102},[92,62674,38],{"class":51282},[92,62676,53468],{"class":1942},[92,62678,148],{"class":102},[92,62680,62681],{"class":207},"\"text\"",[92,62683,62684],{"class":102},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[92,62686,38],{"class":51282},[92,62688,51289],{"class":102},[92,62690,62691,62693,62695,62697,62699,62702,62705,62707],{"class":94,"line":32761},[92,62692,55284],{"class":102},[92,62694,38],{"class":51282},[92,62696,53468],{"class":1942},[92,62698,148],{"class":102},[92,62700,62701],{"class":207},"\"time\"",[92,62703,62704],{"class":102},">2022-10-10 20:29:21\u003C\u002F",[92,62706,38],{"class":51282},[92,62708,51289],{"class":102},[92,62710,62711,62713,62715],{"class":94,"line":32777},[92,62712,55389],{"class":102},[92,62714,51593],{"class":51282},[92,62716,51289],{"class":102},[92,62718,62719,62721,62723],{"class":94,"line":32783},[92,62720,51758],{"class":102},[92,62722,51593],{"class":51282},[92,62724,51289],{"class":102},[92,62726,62727,62729,62731],{"class":94,"line":32797},[92,62728,52399],{"class":102},[92,62730,51593],{"class":51282},[92,62732,51289],{"class":102},[92,62734,62735,62737,62739],{"class":94,"line":32803},[92,62736,52126],{"class":102},[92,62738,51795],{"class":51282},[92,62740,51289],{"class":102},[92,62742,62743,62745,62748,62750,62752,62754,62756,62759],{"class":94,"line":32818},[92,62744,11201],{"class":98},[92,62746,62747],{"class":151}," tx",[92,62749,13544],{"class":98},[92,62751,54378],{"class":102},[92,62753,54381],{"class":1942},[92,62755,103],{"class":102},[92,62757,62758],{"class":207},"'#tx'",[92,62760,109],{"class":102},[92,62762,62763,62765,62768,62770,62772,62774,62776,62779],{"class":94,"line":32824},[92,62764,11201],{"class":98},[92,62766,62767],{"class":151}," total",[92,62769,13544],{"class":98},[92,62771,54378],{"class":102},[92,62773,54381],{"class":1942},[92,62775,103],{"class":102},[92,62777,62778],{"class":207},"'.total'",[92,62780,109],{"class":102},[92,62782,62783],{"class":94,"line":32833},[92,62784,62785],{"class":161},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[92,62787,62788,62791,62793,62795,62797,62799,62801],{"class":94,"line":32839},[92,62789,62790],{"class":102},"    tx.",[92,62792,57795],{"class":1942},[92,62794,103],{"class":102},[92,62796,61309],{"class":207},[92,62798,12415],{"class":102},[92,62800,54431],{"class":98},[92,62802,54434],{"class":102},[92,62804,62805,62808,62810],{"class":94,"line":32848},[92,62806,62807],{"class":102},"      total.style.opacity ",[92,62809,148],{"class":98},[92,62811,55681],{"class":151},[92,62813,62814],{"class":94,"line":32854},[92,62815,33443],{"class":102},[92,62817,62818],{"class":94,"line":32860},[92,62819,62820],{"class":161},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[92,62822,62823,62825,62827,62829,62831,62833,62835],{"class":94,"line":32869},[92,62824,62790],{"class":102},[92,62826,57795],{"class":1942},[92,62828,103],{"class":102},[92,62830,61370],{"class":207},[92,62832,12415],{"class":102},[92,62834,54431],{"class":98},[92,62836,54434],{"class":102},[92,62838,62839,62841,62843],{"class":94,"line":32875},[92,62840,62807],{"class":102},[92,62842,148],{"class":98},[92,62844,47315],{"class":151},[92,62846,62847],{"class":94,"line":32886},[92,62848,33443],{"class":102},[92,62850,62851],{"class":94,"line":32892},[92,62852,62853],{"class":161},"    \u002F\u002F 3. 检测用户输入\n",[92,62855,62856,62858,62860,62862,62865,62867,62869],{"class":94,"line":32911},[92,62857,62790],{"class":102},[92,62859,57795],{"class":1942},[92,62861,103],{"class":102},[92,62863,62864],{"class":207},"'input'",[92,62866,12415],{"class":102},[92,62868,54431],{"class":98},[92,62870,54434],{"class":102},[92,62872,62873],{"class":94,"line":32917},[92,62874,62875],{"class":161},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[92,62877,62878,62881,62883,62886,62889,62891,62894,62896,62898],{"class":94,"line":32928},[92,62879,62880],{"class":102},"      total.innerHTML ",[92,62882,148],{"class":98},[92,62884,62885],{"class":207}," `${",[92,62887,62888],{"class":102},"tx",[92,62890,661],{"class":207},[92,62892,62893],{"class":102},"value",[92,62895,661],{"class":207},[92,62897,51950],{"class":151},[92,62899,62900],{"class":207},"}\u002F200字`\n",[92,62902,62903],{"class":94,"line":32934},[92,62904,33443],{"class":102},[92,62906,62907],{"class":94,"line":32954},[92,62908,2379],{"emptyLinePlaceholder":17},[92,62910,62911],{"class":94,"line":32970},[92,62912,62913],{"class":161},"    \u002F\u002F const str = 'andy'\n",[92,62915,62916],{"class":94,"line":32976},[92,62917,62918],{"class":161},"    \u002F\u002F console.log(str.length)\n",[92,62920,62921,62923,62925],{"class":94,"line":32990},[92,62922,52399],{"class":102},[92,62924,51795],{"class":51282},[92,62926,51289],{"class":102},[92,62928,62929,62931,62933],{"class":94,"line":32996},[92,62930,51767],{"class":102},[92,62932,51782],{"class":51282},[92,62934,51289],{"class":102},[92,62936,62937],{"class":94,"line":33002},[92,62938,2379],{"emptyLinePlaceholder":17},[92,62940,62941,62943,62945],{"class":94,"line":33013},[92,62942,51767],{"class":102},[92,62944,50617],{"class":51282},[92,62946,51289],{"class":102},[21978,62948,62950],{"id":62949},"_3254-change事件","3.2.5.4 change事件",[38,62952,62953],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[38,62955,62956],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[38,62958,62959],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[83,62961,62963],{"className":50615,"code":62962,"language":50617,"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,62964,62965,62975,62989,62993,63001,63015,63035,63047,63055,63059,63067,63081,63089,63107,63125,63137,63141,63149,63157,63161],{"__ignoreMap":10},[92,62966,62967,62969,62971,62973],{"class":94,"line":95},[92,62968,51279],{"class":102},[92,62970,51283],{"class":51282},[92,62972,51286],{"class":1942},[92,62974,51289],{"class":102},[92,62976,62977,62979,62981,62983,62985,62987],{"class":94,"line":11},[92,62978,1013],{"class":102},[92,62980,50617],{"class":51282},[92,62982,51298],{"class":1942},[92,62984,148],{"class":102},[92,62986,51303],{"class":207},[92,62988,51289],{"class":102},[92,62990,62991],{"class":94,"line":1158},[92,62992,2379],{"emptyLinePlaceholder":17},[92,62994,62995,62997,62999],{"class":94,"line":1173},[92,62996,1013],{"class":102},[92,62998,51316],{"class":51282},[92,63000,51289],{"class":102},[92,63002,63003,63005,63007,63009,63011,63013],{"class":94,"line":1179},[92,63004,52126],{"class":102},[92,63006,51326],{"class":51282},[92,63008,51329],{"class":1942},[92,63010,148],{"class":102},[92,63012,51334],{"class":207},[92,63014,51289],{"class":102},[92,63016,63017,63019,63021,63023,63025,63027,63029,63031,63033],{"class":94,"line":1193},[92,63018,52126],{"class":102},[92,63020,51326],{"class":51282},[92,63022,14900],{"class":1942},[92,63024,148],{"class":102},[92,63026,51373],{"class":207},[92,63028,51353],{"class":1942},[92,63030,148],{"class":102},[92,63032,51380],{"class":207},[92,63034,51289],{"class":102},[92,63036,63037,63039,63041,63043,63045],{"class":94,"line":1199},[92,63038,52126],{"class":102},[92,63040,51389],{"class":51282},[92,63042,51392],{"class":102},[92,63044,51389],{"class":51282},[92,63046,51289],{"class":102},[92,63048,63049,63051,63053],{"class":94,"line":1290},[92,63050,51767],{"class":102},[92,63052,51316],{"class":51282},[92,63054,51289],{"class":102},[92,63056,63057],{"class":94,"line":1296},[92,63058,2379],{"emptyLinePlaceholder":17},[92,63060,63061,63063,63065],{"class":94,"line":1308},[92,63062,1013],{"class":102},[92,63064,51782],{"class":51282},[92,63066,51289],{"class":102},[92,63068,63069,63071,63073,63075,63077,63079],{"class":94,"line":1591},[92,63070,52126],{"class":102},[92,63072,53803],{"class":51282},[92,63074,53806],{"class":1942},[92,63076,148],{"class":102},[92,63078,62681],{"class":207},[92,63080,51289],{"class":102},[92,63082,63083,63085,63087],{"class":94,"line":1596},[92,63084,52126],{"class":102},[92,63086,51795],{"class":51282},[92,63088,51289],{"class":102},[92,63090,63091,63093,63095,63097,63099,63101,63103,63105],{"class":94,"line":1602},[92,63092,11201],{"class":98},[92,63094,60587],{"class":151},[92,63096,13544],{"class":98},[92,63098,54378],{"class":102},[92,63100,54381],{"class":1942},[92,63102,103],{"class":102},[92,63104,62864],{"class":207},[92,63106,109],{"class":102},[92,63108,63109,63112,63114,63116,63119,63121,63123],{"class":94,"line":1607},[92,63110,63111],{"class":102},"    input.",[92,63113,57795],{"class":1942},[92,63115,103],{"class":102},[92,63117,63118],{"class":207},"'change'",[92,63120,12415],{"class":102},[92,63122,54431],{"class":98},[92,63124,54434],{"class":102},[92,63126,63127,63129,63131,63133,63135],{"class":94,"line":1621},[92,63128,58226],{"class":102},[92,63130,58229],{"class":1942},[92,63132,103],{"class":102},[92,63134,696],{"class":151},[92,63136,109],{"class":102},[92,63138,63139],{"class":94,"line":1626},[92,63140,33443],{"class":102},[92,63142,63143,63145,63147],{"class":94,"line":1632},[92,63144,52399],{"class":102},[92,63146,51795],{"class":51282},[92,63148,51289],{"class":102},[92,63150,63151,63153,63155],{"class":94,"line":1653},[92,63152,51767],{"class":102},[92,63154,51782],{"class":51282},[92,63156,51289],{"class":102},[92,63158,63159],{"class":94,"line":1658},[92,63160,2379],{"emptyLinePlaceholder":17},[92,63162,63163,63165,63167],{"class":94,"line":1672},[92,63164,51767],{"class":102},[92,63166,50617],{"class":51282},[92,63168,51289],{"class":102},[38,63170,63171],{},"总结：内容发生改变才回去触发",[63,63173,63175],{"id":63174},"_326-事件对象","3.2.6 事件对象",[21978,63177,63179],{"id":63178},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[38,63181,63182],{},[1441,63183],{"alt":10,"src":63184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[38,63186,63187],{},[1441,63188],{"alt":10,"src":63189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[38,63191,63192],{},"点击一次，就输出了事件对象，它是个对象",[38,63194,63195],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[38,63197,63198],{},[1441,63199],{"alt":10,"src":63200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21978,63202,63204],{"id":63203},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[38,63206,63207],{},[1441,63208],{"alt":10,"src":63209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[38,63211,63212],{},"实现按特殊字符才是实现打印输出效果：",[83,63214,63216],{"className":53049,"code":63215,"language":53051,"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,63217,63218,63226,63231,63245,63253,63258,63263,63268,63273,63278,63283,63288,63293,63298,63302,63306,63314],{"__ignoreMap":10},[92,63219,63220,63222,63224],{"class":94,"line":95},[92,63221,1013],{"class":102},[92,63223,51782],{"class":51282},[92,63225,51289],{"class":102},[92,63227,63228],{"class":94,"line":11},[92,63229,63230],{"class":161},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[92,63232,63233,63235,63237,63239,63241,63243],{"class":94,"line":1158},[92,63234,52126],{"class":102},[92,63236,53803],{"class":51282},[92,63238,53806],{"class":1942},[92,63240,148],{"class":102},[92,63242,62681],{"class":207},[92,63244,51289],{"class":102},[92,63246,63247,63249,63251],{"class":94,"line":1173},[92,63248,52126],{"class":102},[92,63250,51795],{"class":51282},[92,63252,51289],{"class":102},[92,63254,63255],{"class":94,"line":1179},[92,63256,63257],{"class":102},"    \u002F\u002F const btn = document.querySelector('button')\n",[92,63259,63260],{"class":94,"line":1193},[92,63261,63262],{"class":102},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[92,63264,63265],{"class":94,"line":1199},[92,63266,63267],{"class":102},"    \u002F\u002F   console.log(e);\n",[92,63269,63270],{"class":94,"line":1290},[92,63271,63272],{"class":102},"    \u002F\u002F })\n",[92,63274,63275],{"class":94,"line":1296},[92,63276,63277],{"class":102},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[92,63279,63280],{"class":94,"line":1308},[92,63281,63282],{"class":102},"    const input = document.querySelector('input')\n",[92,63284,63285],{"class":94,"line":1591},[92,63286,63287],{"class":102},"    input.addEventListener('keyup', function (e) {\n",[92,63289,63290],{"class":94,"line":1596},[92,63291,63292],{"class":102},"      if (e.key === 'Enter') {\n",[92,63294,63295],{"class":94,"line":1602},[92,63296,63297],{"class":102},"        console.log('我按下了回车键')\n",[92,63299,63300],{"class":94,"line":1607},[92,63301,52380],{"class":102},[92,63303,63304],{"class":94,"line":1621},[92,63305,33443],{"class":102},[92,63307,63308,63310,63312],{"class":94,"line":1626},[92,63309,52399],{"class":102},[92,63311,51795],{"class":51282},[92,63313,51289],{"class":102},[92,63315,63316,63318,63320],{"class":94,"line":1632},[92,63317,51767],{"class":102},[92,63319,51782],{"class":51282},[92,63321,51289],{"class":102},[21978,63323,63325],{"id":63324},"_3263-trim方法","3.2.6.3 trim方法",[38,63327,63328],{},[1441,63329],{"alt":10,"src":63330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[38,63332,63333],{},[1441,63334],{"alt":10,"src":63335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[38,63337,63338],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[38,63340,63341],{},"str.trim()",[63,63343,63345],{"id":63344},"_327-环境对象","3.2.7 环境对象",[38,63347,63348],{},[1441,63349],{"alt":10,"src":63350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[38,63352,63353],{},[1441,63354],{"alt":10,"src":63355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[38,63357,63358],{},[1441,63359],{"alt":10,"src":63360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[38,63362,63363],{},"实际函数调用是window.fn()",[38,63365,63366],{},"普通函数里面this指向的是window",[1110,63368,63369,63372,63375],{},[49,63370,63371],{},"在普通函数下，this指向的是window",[49,63373,63374],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[49,63376,63377],{},"箭头函数没有this",[38,63379,63380],{},"粗略记法就是：谁调用，this就指向谁",[38,63382,63383],{},[1441,63384],{"alt":10,"src":63385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[38,63387,63388],{},[1441,63389],{"alt":10,"src":63390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[38,63392,63393],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[38,63395,63396],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[83,63398,63400],{"className":53049,"code":63399,"language":53051,"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,63401,63402,63410,63422,63430,63435,63440,63445,63450,63454,63462],{"__ignoreMap":10},[92,63403,63404,63406,63408],{"class":94,"line":95},[92,63405,1013],{"class":102},[92,63407,51782],{"class":51282},[92,63409,51289],{"class":102},[92,63411,63412,63414,63416,63418,63420],{"class":94,"line":11},[92,63413,52126],{"class":102},[92,63415,53869],{"class":51282},[92,63417,53875],{"class":102},[92,63419,53869],{"class":51282},[92,63421,51289],{"class":102},[92,63423,63424,63426,63428],{"class":94,"line":1158},[92,63425,52126],{"class":102},[92,63427,51795],{"class":51282},[92,63429,51289],{"class":102},[92,63431,63432],{"class":94,"line":1173},[92,63433,63434],{"class":102},"    const button = document.querySelector('button')\n",[92,63436,63437],{"class":94,"line":1179},[92,63438,63439],{"class":102},"    button.addEventListener('click', function () {\n",[92,63441,63442],{"class":94,"line":1193},[92,63443,63444],{"class":102},"      \u002F\u002F console.log(this);\n",[92,63446,63447],{"class":94,"line":1199},[92,63448,63449],{"class":102},"      this.style.color = 'pink'\n",[92,63451,63452],{"class":94,"line":1290},[92,63453,33443],{"class":102},[92,63455,63456,63458,63460],{"class":94,"line":1296},[92,63457,52399],{"class":102},[92,63459,51795],{"class":51282},[92,63461,51289],{"class":102},[92,63463,63464,63466,63468],{"class":94,"line":1308},[92,63465,51767],{"class":102},[92,63467,51782],{"class":51282},[92,63469,51289],{"class":102},[63,63471,63473],{"id":63472},"_328-回调函数","3.2.8 回调函数",[38,63475,63476],{},[1441,63477],{"alt":10,"src":63478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[38,63480,63481],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[38,63483,11312],{},[1110,63485,63486,63489,63492],{},[49,63487,63488],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[49,63490,63491],{},"回调函数本质还是函数，只不过把它当成参数使用",[49,63493,63494],{},"使用匿名函数做为回调函数比较常见",[63,63496,63498],{"id":63497},"_329-tab栏切换","3.2.9 tab栏切换",[38,63500,63501],{},[1441,63502],{"alt":10,"src":63503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[83,63505,63507],{"className":50615,"code":63506,"language":50617,"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,63508,63509,63519,63533,63537,63545,63559,63579,63599,63612,63620,63626,63636,63646,63650,63654,63661,63674,63687,63699,63715,63719,63723,63730,63742,63754,63766,63776,63786,63790,63794,63803,63815,63826,63838,63842,63846,63854,63864,63874,63884,63888,63892,63902,63916,63928,63932,63936,63948,63959,63976,63986,63990,63994,64009,64020,64030,64034,64038,64045,64060,64064,64068,64076,64086,64090,64094,64103,64113,64117,64125,64133,64137,64145,64160,64175,64188,64196,64230,64257,64284,64311,64338,64346,64354,64369,64406,64441,64476,64511,64546,64554,64562,64570,64575,64580,64600,64605,64634,64639,64644,64662,64667,64672,64677,64699,64704,64720,64724,64729,64734,64755,64760,64789,64793,64798,64802,64810,64818,64822],{"__ignoreMap":10},[92,63510,63511,63513,63515,63517],{"class":94,"line":95},[92,63512,51279],{"class":102},[92,63514,51283],{"class":51282},[92,63516,51286],{"class":1942},[92,63518,51289],{"class":102},[92,63520,63521,63523,63525,63527,63529,63531],{"class":94,"line":11},[92,63522,1013],{"class":102},[92,63524,50617],{"class":51282},[92,63526,51298],{"class":1942},[92,63528,148],{"class":102},[92,63530,51303],{"class":207},[92,63532,51289],{"class":102},[92,63534,63535],{"class":94,"line":1158},[92,63536,2379],{"emptyLinePlaceholder":17},[92,63538,63539,63541,63543],{"class":94,"line":1173},[92,63540,1013],{"class":102},[92,63542,51316],{"class":51282},[92,63544,51289],{"class":102},[92,63546,63547,63549,63551,63553,63555,63557],{"class":94,"line":1179},[92,63548,52126],{"class":102},[92,63550,51326],{"class":51282},[92,63552,51329],{"class":1942},[92,63554,148],{"class":102},[92,63556,51334],{"class":207},[92,63558,59109],{"class":102},[92,63560,63561,63563,63565,63567,63569,63571,63573,63575,63577],{"class":94,"line":1193},[92,63562,52126],{"class":102},[92,63564,51326],{"class":51282},[92,63566,51345],{"class":1942},[92,63568,148],{"class":102},[92,63570,51350],{"class":207},[92,63572,51353],{"class":1942},[92,63574,148],{"class":102},[92,63576,51358],{"class":207},[92,63578,59109],{"class":102},[92,63580,63581,63583,63585,63587,63589,63591,63593,63595,63597],{"class":94,"line":1199},[92,63582,52126],{"class":102},[92,63584,51326],{"class":51282},[92,63586,14900],{"class":1942},[92,63588,148],{"class":102},[92,63590,51373],{"class":207},[92,63592,51353],{"class":1942},[92,63594,148],{"class":102},[92,63596,51380],{"class":207},[92,63598,59109],{"class":102},[92,63600,63601,63603,63605,63608,63610],{"class":94,"line":1290},[92,63602,52126],{"class":102},[92,63604,51389],{"class":51282},[92,63606,63607],{"class":102},">tab栏切换\u003C\u002F",[92,63609,51389],{"class":51282},[92,63611,51289],{"class":102},[92,63613,63614,63616,63618],{"class":94,"line":1296},[92,63615,52126],{"class":102},[92,63617,5106],{"class":51282},[92,63619,51289],{"class":102},[92,63621,63622,63624],{"class":94,"line":1308},[92,63623,6383],{"class":51282},[92,63625,15552],{"class":102},[92,63627,63628,63630,63632,63634],{"class":94,"line":1591},[92,63629,54688],{"class":151},[92,63631,51419],{"class":102},[92,63633,294],{"class":151},[92,63635,1269],{"class":102},[92,63637,63638,63640,63642,63644],{"class":94,"line":1596},[92,63639,54677],{"class":151},[92,63641,51419],{"class":102},[92,63643,294],{"class":151},[92,63645,1269],{"class":102},[92,63647,63648],{"class":94,"line":1602},[92,63649,2166],{"class":102},[92,63651,63652],{"class":94,"line":1607},[92,63653,2379],{"emptyLinePlaceholder":17},[92,63655,63656,63659],{"class":94,"line":1621},[92,63657,63658],{"class":1942},"    .tab",[92,63660,15552],{"class":102},[92,63662,63663,63665,63667,63670,63672],{"class":94,"line":1626},[92,63664,54753],{"class":151},[92,63666,51419],{"class":102},[92,63668,63669],{"class":151},"590",[92,63671,51474],{"class":98},[92,63673,1269],{"class":102},[92,63675,63676,63678,63680,63683,63685],{"class":94,"line":1632},[92,63677,54767],{"class":151},[92,63679,51419],{"class":102},[92,63681,63682],{"class":151},"340",[92,63684,51474],{"class":98},[92,63686,1269],{"class":102},[92,63688,63689,63691,63693,63695,63697],{"class":94,"line":1653},[92,63690,54688],{"class":151},[92,63692,51419],{"class":102},[92,63694,803],{"class":151},[92,63696,51474],{"class":98},[92,63698,1269],{"class":102},[92,63700,63701,63703,63705,63707,63709,63711,63713],{"class":94,"line":1658},[92,63702,61959],{"class":151},[92,63704,51419],{"class":102},[92,63706,320],{"class":151},[92,63708,51474],{"class":98},[92,63710,51503],{"class":151},[92,63712,62226],{"class":151},[92,63714,1269],{"class":102},[92,63716,63717],{"class":94,"line":1672},[92,63718,2166],{"class":102},[92,63720,63721],{"class":94,"line":1677},[92,63722,2379],{"emptyLinePlaceholder":17},[92,63724,63725,63728],{"class":94,"line":1706},[92,63726,63727],{"class":1942},"    .tab-nav",[92,63729,15552],{"class":102},[92,63731,63732,63734,63736,63738,63740],{"class":94,"line":1711},[92,63733,54753],{"class":151},[92,63735,51419],{"class":102},[92,63737,414],{"class":151},[92,63739,431],{"class":98},[92,63741,1269],{"class":102},[92,63743,63744,63746,63748,63750,63752],{"class":94,"line":1728},[92,63745,54767],{"class":151},[92,63747,51419],{"class":102},[92,63749,1010],{"class":151},[92,63751,51474],{"class":98},[92,63753,1269],{"class":102},[92,63755,63756,63758,63760,63762,63764],{"class":94,"line":1733},[92,63757,57341],{"class":151},[92,63759,51419],{"class":102},[92,63761,1010],{"class":151},[92,63763,51474],{"class":98},[92,63765,1269],{"class":102},[92,63767,63768,63770,63772,63774],{"class":94,"line":1738},[92,63769,54991],{"class":151},[92,63771,51419],{"class":102},[92,63773,51459],{"class":151},[92,63775,1269],{"class":102},[92,63777,63778,63780,63782,63784],{"class":94,"line":1743},[92,63779,55002],{"class":151},[92,63781,51419],{"class":102},[92,63783,51650],{"class":151},[92,63785,1269],{"class":102},[92,63787,63788],{"class":94,"line":1757},[92,63789,2166],{"class":102},[92,63791,63792],{"class":94,"line":1762},[92,63793,2379],{"emptyLinePlaceholder":17},[92,63795,63796,63798,63801],{"class":94,"line":2556},[92,63797,63727],{"class":1942},[92,63799,63800],{"class":51282}," h3",[92,63802,15552],{"class":102},[92,63804,63805,63807,63809,63811,63813],{"class":94,"line":2570},[92,63806,54904],{"class":151},[92,63808,51419],{"class":102},[92,63810,903],{"class":151},[92,63812,51474],{"class":98},[92,63814,1269],{"class":102},[92,63816,63817,63819,63821,63824],{"class":94,"line":2578},[92,63818,62316],{"class":151},[92,63820,51419],{"class":102},[92,63822,63823],{"class":151},"normal",[92,63825,1269],{"class":102},[92,63827,63828,63830,63832,63834,63836],{"class":94,"line":2583},[92,63829,61982],{"class":151},[92,63831,51419],{"class":102},[92,63833,803],{"class":151},[92,63835,51474],{"class":98},[92,63837,1269],{"class":102},[92,63839,63840],{"class":94,"line":2589},[92,63841,2166],{"class":102},[92,63843,63844],{"class":94,"line":2595},[92,63845,2379],{"emptyLinePlaceholder":17},[92,63847,63848,63850,63852],{"class":94,"line":2600},[92,63849,63727],{"class":1942},[92,63851,61274],{"class":51282},[92,63853,15552],{"class":102},[92,63855,63856,63858,63860,63862],{"class":94,"line":7928},[92,63857,54714],{"class":151},[92,63859,51419],{"class":102},[92,63861,54719],{"class":151},[92,63863,1269],{"class":102},[92,63865,63866,63868,63870,63872],{"class":94,"line":7952},[92,63867,54991],{"class":151},[92,63869,51419],{"class":102},[92,63871,51459],{"class":151},[92,63873,1269],{"class":102},[92,63875,63876,63878,63880,63882],{"class":94,"line":7957},[92,63877,55002],{"class":151},[92,63879,51419],{"class":102},[92,63881,51562],{"class":151},[92,63883,1269],{"class":102},[92,63885,63886],{"class":94,"line":7963},[92,63887,2166],{"class":102},[92,63889,63890],{"class":94,"line":7990},[92,63891,2379],{"emptyLinePlaceholder":17},[92,63893,63894,63896,63898,63900],{"class":94,"line":7995},[92,63895,63727],{"class":1942},[92,63897,61274],{"class":51282},[92,63899,55057],{"class":51282},[92,63901,15552],{"class":102},[92,63903,63904,63906,63908,63910,63912,63914],{"class":94,"line":8001},[92,63905,54688],{"class":151},[92,63907,51419],{"class":102},[92,63909,294],{"class":151},[92,63911,8930],{"class":151},[92,63913,51474],{"class":98},[92,63915,1269],{"class":102},[92,63917,63918,63920,63922,63924,63926],{"class":94,"line":8013},[92,63919,54904],{"class":151},[92,63921,51419],{"class":102},[92,63923,652],{"class":151},[92,63925,51474],{"class":98},[92,63927,1269],{"class":102},[92,63929,63930],{"class":94,"line":8025},[92,63931,2166],{"class":102},[92,63933,63934],{"class":94,"line":8037},[92,63935,2379],{"emptyLinePlaceholder":17},[92,63937,63938,63940,63942,63944,63946],{"class":94,"line":9696},[92,63939,63727],{"class":1942},[92,63941,61274],{"class":51282},[92,63943,55057],{"class":51282},[92,63945,1377],{"class":51282},[92,63947,15552],{"class":102},[92,63949,63950,63953,63955,63957],{"class":94,"line":9721},[92,63951,63952],{"class":151},"      text-decoration",[92,63954,51419],{"class":102},[92,63956,54719],{"class":151},[92,63958,1269],{"class":102},[92,63960,63961,63963,63965,63967,63969,63971,63974],{"class":94,"line":9744},[92,63962,62214],{"class":151},[92,63964,51419],{"class":102},[92,63966,180],{"class":151},[92,63968,51474],{"class":98},[92,63970,51503],{"class":151},[92,63972,63973],{"class":151}," transparent",[92,63975,1269],{"class":102},[92,63977,63978,63980,63982,63984],{"class":94,"line":9768},[92,63979,57398],{"class":151},[92,63981,51419],{"class":102},[92,63983,62351],{"class":151},[92,63985,1269],{"class":102},[92,63987,63988],{"class":94,"line":9773},[92,63989,2166],{"class":102},[92,63991,63992],{"class":94,"line":9778},[92,63993,2379],{"emptyLinePlaceholder":17},[92,63995,63996,63998,64000,64002,64004,64007],{"class":94,"line":9783},[92,63997,63727],{"class":1942},[92,63999,61274],{"class":51282},[92,64001,55057],{"class":51282},[92,64003,1377],{"class":51282},[92,64005,64006],{"class":1942},".active",[92,64008,15552],{"class":102},[92,64010,64011,64013,64015,64018],{"class":94,"line":9792},[92,64012,61773],{"class":151},[92,64014,51419],{"class":102},[92,64016,64017],{"class":151},"#e1251b",[92,64019,1269],{"class":102},[92,64021,64022,64024,64026,64028],{"class":94,"line":9797},[92,64023,57398],{"class":151},[92,64025,51419],{"class":102},[92,64027,64017],{"class":151},[92,64029,1269],{"class":102},[92,64031,64032],{"class":94,"line":9803},[92,64033,2166],{"class":102},[92,64035,64036],{"class":94,"line":9824},[92,64037,2379],{"emptyLinePlaceholder":17},[92,64039,64040,64043],{"class":94,"line":9830},[92,64041,64042],{"class":1942},"    .tab-content",[92,64044,15552],{"class":102},[92,64046,64047,64049,64051,64053,64056,64058],{"class":94,"line":9844},[92,64048,54677],{"class":151},[92,64050,51419],{"class":102},[92,64052,294],{"class":151},[92,64054,64055],{"class":151}," 16",[92,64057,51474],{"class":98},[92,64059,1269],{"class":102},[92,64061,64062],{"class":94,"line":9850},[92,64063,2166],{"class":102},[92,64065,64066],{"class":94,"line":9877},[92,64067,2379],{"emptyLinePlaceholder":17},[92,64069,64070,64072,64074],{"class":94,"line":9886},[92,64071,64042],{"class":1942},[92,64073,62156],{"class":1942},[92,64075,15552],{"class":102},[92,64077,64078,64080,64082,64084],{"class":94,"line":9892},[92,64079,54991],{"class":151},[92,64081,51419],{"class":102},[92,64083,54719],{"class":151},[92,64085,1269],{"class":102},[92,64087,64088],{"class":94,"line":9900},[92,64089,2166],{"class":102},[92,64091,64092],{"class":94,"line":9905},[92,64093,2379],{"emptyLinePlaceholder":17},[92,64095,64096,64098,64101],{"class":94,"line":16584},[92,64097,64042],{"class":1942},[92,64099,64100],{"class":1942}," .item.active",[92,64102,15552],{"class":102},[92,64104,64105,64107,64109,64111],{"class":94,"line":16590},[92,64106,54991],{"class":151},[92,64108,51419],{"class":102},[92,64110,60851],{"class":151},[92,64112,1269],{"class":102},[92,64114,64115],{"class":94,"line":16613},[92,64116,2166],{"class":102},[92,64118,64119,64121,64123],{"class":94,"line":16619},[92,64120,52399],{"class":102},[92,64122,5106],{"class":51282},[92,64124,51289],{"class":102},[92,64126,64127,64129,64131],{"class":94,"line":16642},[92,64128,51767],{"class":102},[92,64130,51316],{"class":51282},[92,64132,51289],{"class":102},[92,64134,64135],{"class":94,"line":16656},[92,64136,2379],{"emptyLinePlaceholder":17},[92,64138,64139,64141,64143],{"class":94,"line":16676},[92,64140,1013],{"class":102},[92,64142,51782],{"class":51282},[92,64144,51289],{"class":102},[92,64146,64147,64149,64151,64153,64155,64158],{"class":94,"line":16682},[92,64148,52126],{"class":102},[92,64150,51593],{"class":51282},[92,64152,53468],{"class":1942},[92,64154,148],{"class":102},[92,64156,64157],{"class":207},"\"tab\"",[92,64159,51289],{"class":102},[92,64161,64162,64164,64166,64168,64170,64173],{"class":94,"line":16693},[92,64163,51323],{"class":102},[92,64165,51593],{"class":51282},[92,64167,53468],{"class":1942},[92,64169,148],{"class":102},[92,64171,64172],{"class":207},"\"tab-nav\"",[92,64174,51289],{"class":102},[92,64176,64177,64179,64181,64184,64186],{"class":94,"line":16716},[92,64178,55216],{"class":102},[92,64180,63],{"class":51282},[92,64182,64183],{"class":102},">每日特价\u003C\u002F",[92,64185,63],{"class":51282},[92,64187,51289],{"class":102},[92,64189,64190,64192,64194],{"class":94,"line":16738},[92,64191,55216],{"class":102},[92,64193,1110],{"class":51282},[92,64195,51289],{"class":102},[92,64197,64198,64200,64202,64204,64206,64208,64210,64212,64214,64216,64219,64222,64224,64226,64228],{"class":94,"line":16743},[92,64199,55284],{"class":102},[92,64201,49],{"class":51282},[92,64203,61034],{"class":102},[92,64205,341],{"class":51282},[92,64207,53468],{"class":1942},[92,64209,148],{"class":102},[92,64211,59688],{"class":207},[92,64213,61039],{"class":1942},[92,64215,148],{"class":102},[92,64217,64218],{"class":207},"\"javascript:;\"",[92,64220,64221],{"class":102},">精选\u003C\u002F",[92,64223,341],{"class":51282},[92,64225,55296],{"class":102},[92,64227,49],{"class":51282},[92,64229,51289],{"class":102},[92,64231,64232,64234,64236,64238,64240,64242,64244,64246,64249,64251,64253,64255],{"class":94,"line":16749},[92,64233,55284],{"class":102},[92,64235,49],{"class":51282},[92,64237,61034],{"class":102},[92,64239,341],{"class":51282},[92,64241,61039],{"class":1942},[92,64243,148],{"class":102},[92,64245,64218],{"class":207},[92,64247,64248],{"class":102},">美食\u003C\u002F",[92,64250,341],{"class":51282},[92,64252,55296],{"class":102},[92,64254,49],{"class":51282},[92,64256,51289],{"class":102},[92,64258,64259,64261,64263,64265,64267,64269,64271,64273,64276,64278,64280,64282],{"class":94,"line":16763},[92,64260,55284],{"class":102},[92,64262,49],{"class":51282},[92,64264,61034],{"class":102},[92,64266,341],{"class":51282},[92,64268,61039],{"class":1942},[92,64270,148],{"class":102},[92,64272,64218],{"class":207},[92,64274,64275],{"class":102},">百货\u003C\u002F",[92,64277,341],{"class":51282},[92,64279,55296],{"class":102},[92,64281,49],{"class":51282},[92,64283,51289],{"class":102},[92,64285,64286,64288,64290,64292,64294,64296,64298,64300,64303,64305,64307,64309],{"class":94,"line":16776},[92,64287,55284],{"class":102},[92,64289,49],{"class":51282},[92,64291,61034],{"class":102},[92,64293,341],{"class":51282},[92,64295,61039],{"class":1942},[92,64297,148],{"class":102},[92,64299,64218],{"class":207},[92,64301,64302],{"class":102},">个护\u003C\u002F",[92,64304,341],{"class":51282},[92,64306,55296],{"class":102},[92,64308,49],{"class":51282},[92,64310,51289],{"class":102},[92,64312,64313,64315,64317,64319,64321,64323,64325,64327,64330,64332,64334,64336],{"class":94,"line":16781},[92,64314,55284],{"class":102},[92,64316,49],{"class":51282},[92,64318,61034],{"class":102},[92,64320,341],{"class":51282},[92,64322,61039],{"class":1942},[92,64324,148],{"class":102},[92,64326,64218],{"class":207},[92,64328,64329],{"class":102},">预告\u003C\u002F",[92,64331,341],{"class":51282},[92,64333,55296],{"class":102},[92,64335,49],{"class":51282},[92,64337,51289],{"class":102},[92,64339,64340,64342,64344],{"class":94,"line":16795},[92,64341,55389],{"class":102},[92,64343,1110],{"class":51282},[92,64345,51289],{"class":102},[92,64347,64348,64350,64352],{"class":94,"line":16800},[92,64349,51758],{"class":102},[92,64351,51593],{"class":51282},[92,64353,51289],{"class":102},[92,64355,64356,64358,64360,64362,64364,64367],{"class":94,"line":16806},[92,64357,51323],{"class":102},[92,64359,51593],{"class":51282},[92,64361,53468],{"class":1942},[92,64363,148],{"class":102},[92,64365,64366],{"class":207},"\"tab-content\"",[92,64368,51289],{"class":102},[92,64370,64371,64373,64375,64377,64379,64382,64384,64386,64388,64390,64393,64395,64397,64399,64402,64404],{"class":94,"line":16811},[92,64372,55216],{"class":102},[92,64374,51593],{"class":51282},[92,64376,53468],{"class":1942},[92,64378,148],{"class":102},[92,64380,64381],{"class":207},"\"item active\"",[92,64383,61034],{"class":102},[92,64385,1441],{"class":51282},[92,64387,55221],{"class":1942},[92,64389,148],{"class":102},[92,64391,64392],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[92,64394,55229],{"class":1942},[92,64396,148],{"class":102},[92,64398,7632],{"class":207},[92,64400,64401],{"class":102}," \u002F>\u003C\u002F",[92,64403,51593],{"class":51282},[92,64405,51289],{"class":102},[92,64407,64408,64410,64412,64414,64416,64418,64420,64422,64424,64426,64429,64431,64433,64435,64437,64439],{"class":94,"line":16825},[92,64409,55216],{"class":102},[92,64411,51593],{"class":51282},[92,64413,53468],{"class":1942},[92,64415,148],{"class":102},[92,64417,62605],{"class":207},[92,64419,61034],{"class":102},[92,64421,1441],{"class":51282},[92,64423,55221],{"class":1942},[92,64425,148],{"class":102},[92,64427,64428],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[92,64430,55229],{"class":1942},[92,64432,148],{"class":102},[92,64434,7632],{"class":207},[92,64436,64401],{"class":102},[92,64438,51593],{"class":51282},[92,64440,51289],{"class":102},[92,64442,64443,64445,64447,64449,64451,64453,64455,64457,64459,64461,64464,64466,64468,64470,64472,64474],{"class":94,"line":16830},[92,64444,55216],{"class":102},[92,64446,51593],{"class":51282},[92,64448,53468],{"class":1942},[92,64450,148],{"class":102},[92,64452,62605],{"class":207},[92,64454,61034],{"class":102},[92,64456,1441],{"class":51282},[92,64458,55221],{"class":1942},[92,64460,148],{"class":102},[92,64462,64463],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[92,64465,55229],{"class":1942},[92,64467,148],{"class":102},[92,64469,7632],{"class":207},[92,64471,64401],{"class":102},[92,64473,51593],{"class":51282},[92,64475,51289],{"class":102},[92,64477,64478,64480,64482,64484,64486,64488,64490,64492,64494,64496,64499,64501,64503,64505,64507,64509],{"class":94,"line":16835},[92,64479,55216],{"class":102},[92,64481,51593],{"class":51282},[92,64483,53468],{"class":1942},[92,64485,148],{"class":102},[92,64487,62605],{"class":207},[92,64489,61034],{"class":102},[92,64491,1441],{"class":51282},[92,64493,55221],{"class":1942},[92,64495,148],{"class":102},[92,64497,64498],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[92,64500,55229],{"class":1942},[92,64502,148],{"class":102},[92,64504,7632],{"class":207},[92,64506,64401],{"class":102},[92,64508,51593],{"class":51282},[92,64510,51289],{"class":102},[92,64512,64513,64515,64517,64519,64521,64523,64525,64527,64529,64531,64534,64536,64538,64540,64542,64544],{"class":94,"line":16849},[92,64514,55216],{"class":102},[92,64516,51593],{"class":51282},[92,64518,53468],{"class":1942},[92,64520,148],{"class":102},[92,64522,62605],{"class":207},[92,64524,61034],{"class":102},[92,64526,1441],{"class":51282},[92,64528,55221],{"class":1942},[92,64530,148],{"class":102},[92,64532,64533],{"class":207},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[92,64535,55229],{"class":1942},[92,64537,148],{"class":102},[92,64539,7632],{"class":207},[92,64541,64401],{"class":102},[92,64543,51593],{"class":51282},[92,64545,51289],{"class":102},[92,64547,64548,64550,64552],{"class":94,"line":16861},[92,64549,51758],{"class":102},[92,64551,51593],{"class":51282},[92,64553,51289],{"class":102},[92,64555,64556,64558,64560],{"class":94,"line":16866},[92,64557,52399],{"class":102},[92,64559,51593],{"class":51282},[92,64561,51289],{"class":102},[92,64563,64564,64566,64568],{"class":94,"line":16879},[92,64565,52126],{"class":102},[92,64567,51795],{"class":51282},[92,64569,51289],{"class":102},[92,64571,64572],{"class":94,"line":16884},[92,64573,64574],{"class":161},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[92,64576,64577],{"class":94,"line":16889},[92,64578,64579],{"class":161},"    \u002F\u002F 1.1 获取 a 元素 \n",[92,64581,64582,64584,64587,64589,64591,64593,64595,64598],{"class":94,"line":16894},[92,64583,11201],{"class":98},[92,64585,64586],{"class":151}," as",[92,64588,13544],{"class":98},[92,64590,54378],{"class":102},[92,64592,55663],{"class":1942},[92,64594,103],{"class":102},[92,64596,64597],{"class":207},"'.tab-nav a'",[92,64599,109],{"class":102},[92,64601,64602],{"class":94,"line":16907},[92,64603,64604],{"class":161},"    \u002F\u002F console.log(as) \n",[92,64606,64607,64609,64611,64613,64615,64617,64619,64621,64623,64626,64628,64630,64632],{"class":94,"line":16912},[92,64608,3180],{"class":98},[92,64610,1637],{"class":102},[92,64612,51829],{"class":98},[92,64614,9418],{"class":102},[92,64616,148],{"class":98},[92,64618,4072],{"class":151},[92,64620,9425],{"class":102},[92,64622,1013],{"class":98},[92,64624,64625],{"class":102}," as.",[92,64627,51950],{"class":151},[92,64629,3193],{"class":102},[92,64631,2271],{"class":98},[92,64633,12422],{"class":102},[92,64635,64636],{"class":94,"line":32615},[92,64637,64638],{"class":161},"      \u002F\u002F console.log(as[i])\n",[92,64640,64641],{"class":94,"line":32621},[92,64642,64643],{"class":161},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[92,64645,64646,64649,64651,64653,64656,64658,64660],{"class":94,"line":32627},[92,64647,64648],{"class":102},"      as[i].",[92,64650,57795],{"class":1942},[92,64652,103],{"class":102},[92,64654,64655],{"class":207},"'mouseenter'",[92,64657,12415],{"class":102},[92,64659,54431],{"class":98},[92,64661,54434],{"class":102},[92,64663,64664],{"class":94,"line":32633},[92,64665,64666],{"class":161},"        \u002F\u002F console.log('鼠标经过')\n",[92,64668,64669],{"class":94,"line":32639},[92,64670,64671],{"class":161},"        \u002F\u002F 排他思想  \n",[92,64673,64674],{"class":94,"line":32650},[92,64675,64676],{"class":161},"        \u002F\u002F 干掉别人 移除类active\n",[92,64678,64679,64681,64683,64685,64688,64690,64692,64694,64697],{"class":94,"line":32656},[92,64680,51907],{"class":102},[92,64682,54381],{"class":1942},[92,64684,103],{"class":102},[92,64686,64687],{"class":207},"'.tab-nav .active'",[92,64689,56985],{"class":102},[92,64691,56988],{"class":1942},[92,64693,103],{"class":102},[92,64695,64696],{"class":207},"'active'",[92,64698,109],{"class":102},[92,64700,64701],{"class":94,"line":32676},[92,64702,64703],{"class":161},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[92,64705,64706,64709,64712,64714,64716,64718],{"class":94,"line":32682},[92,64707,64708],{"class":151},"        this",[92,64710,64711],{"class":102},".classList.",[92,64713,5314],{"class":1942},[92,64715,103],{"class":102},[92,64717,64696],{"class":207},[92,64719,109],{"class":102},[92,64721,64722],{"class":94,"line":32693},[92,64723,2379],{"emptyLinePlaceholder":17},[92,64725,64726],{"class":94,"line":32699},[92,64727,64728],{"class":161},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[92,64730,64731],{"class":94,"line":32705},[92,64732,64733],{"class":161},"        \u002F\u002F 干掉别人\n",[92,64735,64736,64738,64740,64742,64745,64747,64749,64751,64753],{"class":94,"line":32711},[92,64737,51907],{"class":102},[92,64739,54381],{"class":1942},[92,64741,103],{"class":102},[92,64743,64744],{"class":207},"'.tab-content .active'",[92,64746,56985],{"class":102},[92,64748,56988],{"class":1942},[92,64750,103],{"class":102},[92,64752,64696],{"class":207},[92,64754,109],{"class":102},[92,64756,64757],{"class":94,"line":32717},[92,64758,64759],{"class":161},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[92,64761,64762,64764,64766,64768,64771,64773,64775,64777,64779,64781,64783,64785,64787],{"class":94,"line":32723},[92,64763,51907],{"class":102},[92,64765,54381],{"class":1942},[92,64767,103],{"class":102},[92,64769,64770],{"class":207},"`.tab-content .item:nth-child(${",[92,64772,544],{"class":102},[92,64774,45548],{"class":98},[92,64776,25100],{"class":151},[92,64778,57014],{"class":207},[92,64780,56985],{"class":102},[92,64782,5314],{"class":1942},[92,64784,103],{"class":102},[92,64786,64696],{"class":207},[92,64788,109],{"class":102},[92,64790,64791],{"class":94,"line":32729},[92,64792,2379],{"emptyLinePlaceholder":17},[92,64794,64795],{"class":94,"line":32735},[92,64796,64797],{"class":102},"      })\n",[92,64799,64800],{"class":94,"line":32755},[92,64801,2166],{"class":102},[92,64803,64804,64806,64808],{"class":94,"line":32761},[92,64805,52399],{"class":102},[92,64807,51795],{"class":51282},[92,64809,51289],{"class":102},[92,64811,64812,64814,64816],{"class":94,"line":32777},[92,64813,51767],{"class":102},[92,64815,51782],{"class":51282},[92,64817,51289],{"class":102},[92,64819,64820],{"class":94,"line":32783},[92,64821,2379],{"emptyLinePlaceholder":17},[92,64823,64824,64826,64828],{"class":94,"line":32797},[92,64825,51767],{"class":102},[92,64827,50617],{"class":51282},[92,64829,51289],{"class":102},[38,64831,64832],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[38,64834,64835],{},"在监听事件中，this指向的就是他的调用者",[38,64837,64838],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[38,64840,53702],{},[38,64842,64843],{},"(function () {",[38,64845,64846],{},"const list = document.querySelector('.xtx-elevator-list')",[38,64848,64849],{},"list.addEventListener('click', function (e) {",[38,64851,64852],{},"if (e.target.tagName === 'A') {",[38,64854,64855],{},"\u002F\u002F 排他思想",[38,64857,64858],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[38,64860,64861],{},"const old = document.querySelector('.xtx-elevator-list .active')",[38,64863,64864],{},"\u002F\u002F console.log(old);",[38,64866,64867],{},"\u002F\u002F 判断",[38,64869,64870],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[38,64872,64873],{},"if (old) old.classList.remove('active')",[38,64875,64876],{},"e.target.classList.add('active')",[38,64878,1049],{},[38,64880,52446],{},[38,64882,64883],{},"})();",[63,64885,64887],{"id":64886},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[83,64889,64891],{"className":50615,"code":64890,"language":50617,"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,64892,64893,64903,64907,64915,64919,64933,64947,64959,64967,64973,64983,64993,64997,65001,65008,65020,65031,65048,65061,65075,65085,65089,65093,65100,65111,65129,65139,65151,65155,65159,65166,65183,65194,65206,65210,65214,65221,65233,65237,65245,65253,65257,65265,65273,65281,65296,65340,65348,65361,65374,65387,65395,65403,65411,65439,65447,65459,65472,65485,65493,65501,65509,65535,65543,65556,65568,65581,65589,65597,65605,65631,65639,65652,65664,65677,65685,65693,65701,65706,65726,65731,65751,65756,65773,65778,65786,65791,65820,65833,65837,65841,65846,65850,65878,65883,65900,65905,65910,65915,65920,65946,65950,65954,65962,65970,65974],{"__ignoreMap":10},[92,64894,64895,64897,64899,64901],{"class":94,"line":95},[92,64896,51279],{"class":102},[92,64898,51283],{"class":51282},[92,64900,51286],{"class":1942},[92,64902,51289],{"class":102},[92,64904,64905],{"class":94,"line":11},[92,64906,2379],{"emptyLinePlaceholder":17},[92,64908,64909,64911,64913],{"class":94,"line":1158},[92,64910,1013],{"class":102},[92,64912,50617],{"class":51282},[92,64914,51289],{"class":102},[92,64916,64917],{"class":94,"line":1173},[92,64918,2379],{"emptyLinePlaceholder":17},[92,64920,64921,64923,64925,64927,64929,64931],{"class":94,"line":1179},[92,64922,1013],{"class":102},[92,64924,51316],{"class":51282},[92,64926,51298],{"class":1942},[92,64928,148],{"class":102},[92,64930,51303],{"class":207},[92,64932,51289],{"class":102},[92,64934,64935,64937,64939,64941,64943,64945],{"class":94,"line":1193},[92,64936,52126],{"class":102},[92,64938,51326],{"class":51282},[92,64940,51329],{"class":1942},[92,64942,148],{"class":102},[92,64944,51334],{"class":207},[92,64946,51289],{"class":102},[92,64948,64949,64951,64953,64955,64957],{"class":94,"line":1199},[92,64950,52126],{"class":102},[92,64952,51389],{"class":51282},[92,64954,55296],{"class":102},[92,64956,51389],{"class":51282},[92,64958,51289],{"class":102},[92,64960,64961,64963,64965],{"class":94,"line":1290},[92,64962,52126],{"class":102},[92,64964,5106],{"class":51282},[92,64966,51289],{"class":102},[92,64968,64969,64971],{"class":94,"line":1296},[92,64970,6383],{"class":51282},[92,64972,15552],{"class":102},[92,64974,64975,64977,64979,64981],{"class":94,"line":1308},[92,64976,54688],{"class":151},[92,64978,51419],{"class":102},[92,64980,294],{"class":151},[92,64982,1269],{"class":102},[92,64984,64985,64987,64989,64991],{"class":94,"line":1591},[92,64986,54677],{"class":151},[92,64988,51419],{"class":102},[92,64990,294],{"class":151},[92,64992,1269],{"class":102},[92,64994,64995],{"class":94,"line":1596},[92,64996,2166],{"class":102},[92,64998,64999],{"class":94,"line":1602},[92,65000,2379],{"emptyLinePlaceholder":17},[92,65002,65003,65006],{"class":94,"line":1607},[92,65004,65005],{"class":51282},"    table",[92,65007,15552],{"class":102},[92,65009,65010,65013,65015,65018],{"class":94,"line":1621},[92,65011,65012],{"class":151},"      border-collapse",[92,65014,51419],{"class":102},[92,65016,65017],{"class":151},"collapse",[92,65019,1269],{"class":102},[92,65021,65022,65025,65027,65029],{"class":94,"line":1626},[92,65023,65024],{"class":151},"      border-spacing",[92,65026,51419],{"class":102},[92,65028,294],{"class":151},[92,65030,1269],{"class":102},[92,65032,65033,65035,65037,65039,65041,65043,65046],{"class":94,"line":1632},[92,65034,61959],{"class":151},[92,65036,51419],{"class":102},[92,65038,320],{"class":151},[92,65040,51474],{"class":98},[92,65042,51503],{"class":151},[92,65044,65045],{"class":151}," #c0c0c0",[92,65047,1269],{"class":102},[92,65049,65050,65052,65054,65057,65059],{"class":94,"line":1653},[92,65051,54753],{"class":151},[92,65053,51419],{"class":102},[92,65055,65056],{"class":151},"500",[92,65058,51474],{"class":98},[92,65060,1269],{"class":102},[92,65062,65063,65065,65067,65069,65071,65073],{"class":94,"line":1658},[92,65064,54688],{"class":151},[92,65066,51419],{"class":102},[92,65068,414],{"class":151},[92,65070,51474],{"class":98},[92,65072,51538],{"class":151},[92,65074,1269],{"class":102},[92,65076,65077,65079,65081,65083],{"class":94,"line":1672},[92,65078,57268],{"class":151},[92,65080,51419],{"class":102},[92,65082,51574],{"class":151},[92,65084,1269],{"class":102},[92,65086,65087],{"class":94,"line":1677},[92,65088,2166],{"class":102},[92,65090,65091],{"class":94,"line":1706},[92,65092,2379],{"emptyLinePlaceholder":17},[92,65094,65095,65098],{"class":94,"line":1711},[92,65096,65097],{"class":51282},"    th",[92,65099,15552],{"class":102},[92,65101,65102,65104,65106,65109],{"class":94,"line":1728},[92,65103,54866],{"class":151},[92,65105,51419],{"class":102},[92,65107,65108],{"class":151},"#09c",[92,65110,1269],{"class":102},[92,65112,65113,65116,65118,65120,65122,65124,65127],{"class":94,"line":1733},[92,65114,65115],{"class":151},"      font",[92,65117,51419],{"class":102},[92,65119,62321],{"class":151},[92,65121,64055],{"class":151},[92,65123,51474],{"class":98},[92,65125,65126],{"class":207}," \"微软雅黑\"",[92,65128,1269],{"class":102},[92,65130,65131,65133,65135,65137],{"class":94,"line":1738},[92,65132,57398],{"class":151},[92,65134,51419],{"class":102},[92,65136,60824],{"class":151},[92,65138,1269],{"class":102},[92,65140,65141,65143,65145,65147,65149],{"class":94,"line":1743},[92,65142,54767],{"class":151},[92,65144,51419],{"class":102},[92,65146,903],{"class":151},[92,65148,51474],{"class":98},[92,65150,1269],{"class":102},[92,65152,65153],{"class":94,"line":1757},[92,65154,2166],{"class":102},[92,65156,65157],{"class":94,"line":1762},[92,65158,2379],{"emptyLinePlaceholder":17},[92,65160,65161,65164],{"class":94,"line":2556},[92,65162,65163],{"class":51282},"    td",[92,65165,15552],{"class":102},[92,65167,65168,65170,65172,65174,65176,65178,65181],{"class":94,"line":2570},[92,65169,61959],{"class":151},[92,65171,51419],{"class":102},[92,65173,320],{"class":151},[92,65175,51474],{"class":98},[92,65177,51503],{"class":151},[92,65179,65180],{"class":151}," #d0d0d0",[92,65182,1269],{"class":102},[92,65184,65185,65187,65189,65192],{"class":94,"line":2578},[92,65186,57398],{"class":151},[92,65188,51419],{"class":102},[92,65190,65191],{"class":151},"#404060",[92,65193,1269],{"class":102},[92,65195,65196,65198,65200,65202,65204],{"class":94,"line":2583},[92,65197,54677],{"class":151},[92,65199,51419],{"class":102},[92,65201,549],{"class":151},[92,65203,51474],{"class":98},[92,65205,1269],{"class":102},[92,65207,65208],{"class":94,"line":2589},[92,65209,2166],{"class":102},[92,65211,65212],{"class":94,"line":2595},[92,65213,2379],{"emptyLinePlaceholder":17},[92,65215,65216,65219],{"class":94,"line":2600},[92,65217,65218],{"class":1942},"    .allCheck",[92,65220,15552],{"class":102},[92,65222,65223,65225,65227,65229,65231],{"class":94,"line":7928},[92,65224,54753],{"class":151},[92,65226,51419],{"class":102},[92,65228,715],{"class":151},[92,65230,51474],{"class":98},[92,65232,1269],{"class":102},[92,65234,65235],{"class":94,"line":7952},[92,65236,2166],{"class":102},[92,65238,65239,65241,65243],{"class":94,"line":7957},[92,65240,52399],{"class":102},[92,65242,5106],{"class":51282},[92,65244,51289],{"class":102},[92,65246,65247,65249,65251],{"class":94,"line":7963},[92,65248,51767],{"class":102},[92,65250,51316],{"class":51282},[92,65252,51289],{"class":102},[92,65254,65255],{"class":94,"line":7990},[92,65256,2379],{"emptyLinePlaceholder":17},[92,65258,65259,65261,65263],{"class":94,"line":7995},[92,65260,1013],{"class":102},[92,65262,51782],{"class":51282},[92,65264,51289],{"class":102},[92,65266,65267,65269,65271],{"class":94,"line":8001},[92,65268,52126],{"class":102},[92,65270,240],{"class":51282},[92,65272,51289],{"class":102},[92,65274,65275,65277,65279],{"class":94,"line":8013},[92,65276,51323],{"class":102},[92,65278,246],{"class":51282},[92,65280,51289],{"class":102},[92,65282,65283,65285,65287,65289,65291,65294],{"class":94,"line":8025},[92,65284,55216],{"class":102},[92,65286,249],{"class":51282},[92,65288,53468],{"class":1942},[92,65290,148],{"class":102},[92,65292,65293],{"class":207},"\"allCheck\"",[92,65295,51289],{"class":102},[92,65297,65298,65300,65302,65304,65306,65308,65310,65312,65314,65316,65318,65321,65324,65326,65328,65330,65333,65336,65338],{"class":94,"line":8037},[92,65299,55284],{"class":102},[92,65301,53803],{"class":51282},[92,65303,53806],{"class":1942},[92,65305,148],{"class":102},[92,65307,53811],{"class":207},[92,65309,14900],{"class":1942},[92,65311,148],{"class":102},[92,65313,7632],{"class":207},[92,65315,14939],{"class":1942},[92,65317,148],{"class":102},[92,65319,65320],{"class":207},"\"checkAll\"",[92,65322,65323],{"class":102},"> \u003C",[92,65325,92],{"class":51282},[92,65327,53468],{"class":1942},[92,65329,148],{"class":102},[92,65331,65332],{"class":207},"\"all\"",[92,65334,65335],{"class":102},">全选\u003C\u002F",[92,65337,92],{"class":51282},[92,65339,51289],{"class":102},[92,65341,65342,65344,65346],{"class":94,"line":9696},[92,65343,55389],{"class":102},[92,65345,249],{"class":51282},[92,65347,51289],{"class":102},[92,65349,65350,65352,65354,65357,65359],{"class":94,"line":9721},[92,65351,55216],{"class":102},[92,65353,249],{"class":51282},[92,65355,65356],{"class":102},">商品\u003C\u002F",[92,65358,249],{"class":51282},[92,65360,51289],{"class":102},[92,65362,65363,65365,65367,65370,65372],{"class":94,"line":9744},[92,65364,55216],{"class":102},[92,65366,249],{"class":51282},[92,65368,65369],{"class":102},">商家\u003C\u002F",[92,65371,249],{"class":51282},[92,65373,51289],{"class":102},[92,65375,65376,65378,65380,65383,65385],{"class":94,"line":9768},[92,65377,55216],{"class":102},[92,65379,249],{"class":51282},[92,65381,65382],{"class":102},">价格\u003C\u002F",[92,65384,249],{"class":51282},[92,65386,51289],{"class":102},[92,65388,65389,65391,65393],{"class":94,"line":9773},[92,65390,51758],{"class":102},[92,65392,246],{"class":51282},[92,65394,51289],{"class":102},[92,65396,65397,65399,65401],{"class":94,"line":9778},[92,65398,51323],{"class":102},[92,65400,246],{"class":51282},[92,65402,51289],{"class":102},[92,65404,65405,65407,65409],{"class":94,"line":9783},[92,65406,55216],{"class":102},[92,65408,292],{"class":51282},[92,65410,51289],{"class":102},[92,65412,65413,65415,65417,65419,65421,65423,65425,65427,65430,65432,65434,65437],{"class":94,"line":9792},[92,65414,55284],{"class":102},[92,65416,53803],{"class":51282},[92,65418,53806],{"class":1942},[92,65420,148],{"class":102},[92,65422,53811],{"class":207},[92,65424,14900],{"class":1942},[92,65426,148],{"class":102},[92,65428,65429],{"class":207},"\"check\"",[92,65431,53468],{"class":1942},[92,65433,148],{"class":102},[92,65435,65436],{"class":207},"\"ck\"",[92,65438,51289],{"class":102},[92,65440,65441,65443,65445],{"class":94,"line":9797},[92,65442,55389],{"class":102},[92,65444,292],{"class":51282},[92,65446,51289],{"class":102},[92,65448,65449,65451,65453,65455,65457],{"class":94,"line":9803},[92,65450,55216],{"class":102},[92,65452,292],{"class":51282},[92,65454,61155],{"class":102},[92,65456,292],{"class":51282},[92,65458,51289],{"class":102},[92,65460,65461,65463,65465,65468,65470],{"class":94,"line":9824},[92,65462,55216],{"class":102},[92,65464,292],{"class":51282},[92,65466,65467],{"class":102},">小米\u003C\u002F",[92,65469,292],{"class":51282},[92,65471,51289],{"class":102},[92,65473,65474,65476,65478,65481,65483],{"class":94,"line":9830},[92,65475,55216],{"class":102},[92,65477,292],{"class":51282},[92,65479,65480],{"class":102},">￥1999\u003C\u002F",[92,65482,292],{"class":51282},[92,65484,51289],{"class":102},[92,65486,65487,65489,65491],{"class":94,"line":9844},[92,65488,51758],{"class":102},[92,65490,246],{"class":51282},[92,65492,51289],{"class":102},[92,65494,65495,65497,65499],{"class":94,"line":9850},[92,65496,51323],{"class":102},[92,65498,246],{"class":51282},[92,65500,51289],{"class":102},[92,65502,65503,65505,65507],{"class":94,"line":9877},[92,65504,55216],{"class":102},[92,65506,292],{"class":51282},[92,65508,51289],{"class":102},[92,65510,65511,65513,65515,65517,65519,65521,65523,65525,65527,65529,65531,65533],{"class":94,"line":9886},[92,65512,55284],{"class":102},[92,65514,53803],{"class":51282},[92,65516,53806],{"class":1942},[92,65518,148],{"class":102},[92,65520,53811],{"class":207},[92,65522,14900],{"class":1942},[92,65524,148],{"class":102},[92,65526,65429],{"class":207},[92,65528,53468],{"class":1942},[92,65530,148],{"class":102},[92,65532,65436],{"class":207},[92,65534,51289],{"class":102},[92,65536,65537,65539,65541],{"class":94,"line":9892},[92,65538,55389],{"class":102},[92,65540,292],{"class":51282},[92,65542,51289],{"class":102},[92,65544,65545,65547,65549,65552,65554],{"class":94,"line":9900},[92,65546,55216],{"class":102},[92,65548,292],{"class":51282},[92,65550,65551],{"class":102},">小米净水器\u003C\u002F",[92,65553,292],{"class":51282},[92,65555,51289],{"class":102},[92,65557,65558,65560,65562,65564,65566],{"class":94,"line":9905},[92,65559,55216],{"class":102},[92,65561,292],{"class":51282},[92,65563,65467],{"class":102},[92,65565,292],{"class":51282},[92,65567,51289],{"class":102},[92,65569,65570,65572,65574,65577,65579],{"class":94,"line":16584},[92,65571,55216],{"class":102},[92,65573,292],{"class":51282},[92,65575,65576],{"class":102},">￥4999\u003C\u002F",[92,65578,292],{"class":51282},[92,65580,51289],{"class":102},[92,65582,65583,65585,65587],{"class":94,"line":16590},[92,65584,51758],{"class":102},[92,65586,246],{"class":51282},[92,65588,51289],{"class":102},[92,65590,65591,65593,65595],{"class":94,"line":16613},[92,65592,51323],{"class":102},[92,65594,246],{"class":51282},[92,65596,51289],{"class":102},[92,65598,65599,65601,65603],{"class":94,"line":16619},[92,65600,55216],{"class":102},[92,65602,292],{"class":51282},[92,65604,51289],{"class":102},[92,65606,65607,65609,65611,65613,65615,65617,65619,65621,65623,65625,65627,65629],{"class":94,"line":16642},[92,65608,55284],{"class":102},[92,65610,53803],{"class":51282},[92,65612,53806],{"class":1942},[92,65614,148],{"class":102},[92,65616,53811],{"class":207},[92,65618,14900],{"class":1942},[92,65620,148],{"class":102},[92,65622,65429],{"class":207},[92,65624,53468],{"class":1942},[92,65626,148],{"class":102},[92,65628,65436],{"class":207},[92,65630,51289],{"class":102},[92,65632,65633,65635,65637],{"class":94,"line":16656},[92,65634,55389],{"class":102},[92,65636,292],{"class":51282},[92,65638,51289],{"class":102},[92,65640,65641,65643,65645,65648,65650],{"class":94,"line":16676},[92,65642,55216],{"class":102},[92,65644,292],{"class":51282},[92,65646,65647],{"class":102},">小米电视\u003C\u002F",[92,65649,292],{"class":51282},[92,65651,51289],{"class":102},[92,65653,65654,65656,65658,65660,65662],{"class":94,"line":16682},[92,65655,55216],{"class":102},[92,65657,292],{"class":51282},[92,65659,65467],{"class":102},[92,65661,292],{"class":51282},[92,65663,51289],{"class":102},[92,65665,65666,65668,65670,65673,65675],{"class":94,"line":16693},[92,65667,55216],{"class":102},[92,65669,292],{"class":51282},[92,65671,65672],{"class":102},">￥5999\u003C\u002F",[92,65674,292],{"class":51282},[92,65676,51289],{"class":102},[92,65678,65679,65681,65683],{"class":94,"line":16716},[92,65680,51758],{"class":102},[92,65682,246],{"class":51282},[92,65684,51289],{"class":102},[92,65686,65687,65689,65691],{"class":94,"line":16738},[92,65688,52399],{"class":102},[92,65690,240],{"class":51282},[92,65692,51289],{"class":102},[92,65694,65695,65697,65699],{"class":94,"line":16743},[92,65696,52126],{"class":102},[92,65698,51795],{"class":51282},[92,65700,51289],{"class":102},[92,65702,65703],{"class":94,"line":16749},[92,65704,65705],{"class":161},"    \u002F\u002F 1. 获取大复选框\n",[92,65707,65708,65710,65713,65715,65717,65719,65721,65724],{"class":94,"line":16763},[92,65709,11201],{"class":98},[92,65711,65712],{"class":151}," checkAll",[92,65714,13544],{"class":98},[92,65716,54378],{"class":102},[92,65718,54381],{"class":1942},[92,65720,103],{"class":102},[92,65722,65723],{"class":207},"'#checkAll'",[92,65725,109],{"class":102},[92,65727,65728],{"class":94,"line":16776},[92,65729,65730],{"class":161},"    \u002F\u002F 2. 获取所有的小复选框\n",[92,65732,65733,65735,65738,65740,65742,65744,65746,65749],{"class":94,"line":16781},[92,65734,11201],{"class":98},[92,65736,65737],{"class":151}," cks",[92,65739,13544],{"class":98},[92,65741,54378],{"class":102},[92,65743,55663],{"class":1942},[92,65745,103],{"class":102},[92,65747,65748],{"class":207},"'.ck'",[92,65750,109],{"class":102},[92,65752,65753],{"class":94,"line":16795},[92,65754,65755],{"class":161},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[92,65757,65758,65761,65763,65765,65767,65769,65771],{"class":94,"line":16800},[92,65759,65760],{"class":102},"    checkAll.",[92,65762,57795],{"class":1942},[92,65764,103],{"class":102},[92,65766,57800],{"class":207},[92,65768,12415],{"class":102},[92,65770,54431],{"class":98},[92,65772,54434],{"class":102},[92,65774,65775],{"class":94,"line":16806},[92,65776,65777],{"class":161},"      \u002F\u002F 得到当前大复选框的选中状态\n",[92,65779,65780,65783],{"class":94,"line":16811},[92,65781,65782],{"class":161},"      \u002F\u002F console.log(checkAll.checked)",[92,65784,65785],{"class":161},"  \u002F\u002F 得到 是 true 或者是 false\n",[92,65787,65788],{"class":94,"line":16825},[92,65789,65790],{"class":161},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[92,65792,65793,65795,65797,65799,65801,65803,65805,65807,65809,65812,65814,65816,65818],{"class":94,"line":16830},[92,65794,52266],{"class":98},[92,65796,1637],{"class":102},[92,65798,51829],{"class":98},[92,65800,9418],{"class":102},[92,65802,148],{"class":98},[92,65804,4072],{"class":151},[92,65806,9425],{"class":102},[92,65808,1013],{"class":98},[92,65810,65811],{"class":102}," cks.",[92,65813,51950],{"class":151},[92,65815,3193],{"class":102},[92,65817,2271],{"class":98},[92,65819,12422],{"class":102},[92,65821,65822,65825,65827,65830],{"class":94,"line":16835},[92,65823,65824],{"class":102},"        cks[i].checked ",[92,65826,148],{"class":98},[92,65828,65829],{"class":151}," this",[92,65831,65832],{"class":102},".checked\n",[92,65834,65835],{"class":94,"line":16849},[92,65836,52380],{"class":102},[92,65838,65839],{"class":94,"line":16861},[92,65840,33443],{"class":102},[92,65842,65843],{"class":94,"line":16866},[92,65844,65845],{"class":161},"    \u002F\u002F 5. 小复选框控制大复选框\n",[92,65847,65848],{"class":94,"line":16879},[92,65849,2379],{"emptyLinePlaceholder":17},[92,65851,65852,65854,65856,65858,65860,65862,65864,65866,65868,65870,65872,65874,65876],{"class":94,"line":16884},[92,65853,3180],{"class":98},[92,65855,1637],{"class":102},[92,65857,51829],{"class":98},[92,65859,9418],{"class":102},[92,65861,148],{"class":98},[92,65863,4072],{"class":151},[92,65865,9425],{"class":102},[92,65867,1013],{"class":98},[92,65869,65811],{"class":102},[92,65871,51950],{"class":151},[92,65873,3193],{"class":102},[92,65875,2271],{"class":98},[92,65877,12422],{"class":102},[92,65879,65880],{"class":94,"line":16889},[92,65881,65882],{"class":161},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[92,65884,65885,65888,65890,65892,65894,65896,65898],{"class":94,"line":16894},[92,65886,65887],{"class":102},"      cks[i].",[92,65889,57795],{"class":1942},[92,65891,103],{"class":102},[92,65893,57800],{"class":207},[92,65895,12415],{"class":102},[92,65897,54431],{"class":98},[92,65899,54434],{"class":102},[92,65901,65902],{"class":94,"line":16907},[92,65903,65904],{"class":161},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[92,65906,65907],{"class":94,"line":16912},[92,65908,65909],{"class":161},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[92,65911,65912],{"class":94,"line":32615},[92,65913,65914],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[92,65916,65917],{"class":94,"line":32621},[92,65918,65919],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[92,65921,65922,65925,65927,65929,65931,65933,65936,65938,65940,65942,65944],{"class":94,"line":32627},[92,65923,65924],{"class":102},"        checkAll.checked ",[92,65926,148],{"class":98},[92,65928,54378],{"class":102},[92,65930,55663],{"class":1942},[92,65932,103],{"class":102},[92,65934,65935],{"class":207},"'.ck:checked'",[92,65937,30808],{"class":102},[92,65939,51950],{"class":151},[92,65941,57888],{"class":98},[92,65943,65811],{"class":102},[92,65945,55813],{"class":151},[92,65947,65948],{"class":94,"line":32633},[92,65949,64797],{"class":102},[92,65951,65952],{"class":94,"line":32639},[92,65953,2166],{"class":102},[92,65955,65956,65958,65960],{"class":94,"line":32650},[92,65957,52399],{"class":102},[92,65959,51795],{"class":51282},[92,65961,51289],{"class":102},[92,65963,65964,65966,65968],{"class":94,"line":32656},[92,65965,51767],{"class":102},[92,65967,51782],{"class":51282},[92,65969,51289],{"class":102},[92,65971,65972],{"class":94,"line":32676},[92,65973,2379],{"emptyLinePlaceholder":17},[92,65975,65976,65978,65980],{"class":94,"line":32682},[92,65977,51767],{"class":102},[92,65979,50617],{"class":51282},[92,65981,51289],{"class":102},[38,65983,65984],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[38,65986,65987],{},"用好之间比较得到的布尔值！！！",[38,65989,65990,65991,65994,65995,1637,65998,687,66000,66003],{},"在 JS 里访问的时候，",[89,65992,65993],{},"checkbox.checked"," 是一个 ",[252,65996,65997],{},"布尔值",[89,65999,1341],{},[89,66001,66002],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[38,66005,66006,66007,66010,66011],{},"HTML 的 ",[89,66008,66009],{},"checked=\"checked\""," 只是 ",[252,66012,66013,66014,66017],{},"初始值；JS 的 ",[89,66015,66016],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[38,66019,66020],{},"：checked是一个伪类选择器",[38,66022,66023],{},[1441,66024],{"alt":10,"src":66025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[38,66027,66028,66031],{},[66029,66030],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[38,66033,66034],{},[1441,66035],{"alt":10,"src":66036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[33,66038,66040],{"id":66039},"_33-dom事件进阶","3.3 DOM事件进阶",[63,66042,66044],{"id":66043},"_331-事件流","3.3.1 事件流",[38,66046,66047],{},[1441,66048],{"alt":10,"src":66049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21978,66051,66053],{"id":66052},"_3311-事件捕获","3.3.1.1 事件捕获",[38,66055,66056],{},[1441,66057],{"alt":10,"src":66058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[83,66060,66062],{"className":50615,"code":66061,"language":50617,"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,66063,66064,66074,66088,66092,66100,66114,66134,66146,66154,66161,66173,66185,66195,66199,66203,66210,66222,66234,66244,66248,66256,66264,66268,66276,66291,66310,66318,66326,66346,66366,66382,66393,66401,66418,66429,66437,66454,66465,66473,66481,66489,66493],{"__ignoreMap":10},[92,66065,66066,66068,66070,66072],{"class":94,"line":95},[92,66067,51279],{"class":102},[92,66069,51283],{"class":51282},[92,66071,51286],{"class":1942},[92,66073,51289],{"class":102},[92,66075,66076,66078,66080,66082,66084,66086],{"class":94,"line":11},[92,66077,1013],{"class":102},[92,66079,50617],{"class":51282},[92,66081,51298],{"class":1942},[92,66083,148],{"class":102},[92,66085,51303],{"class":207},[92,66087,51289],{"class":102},[92,66089,66090],{"class":94,"line":1158},[92,66091,2379],{"emptyLinePlaceholder":17},[92,66093,66094,66096,66098],{"class":94,"line":1173},[92,66095,1013],{"class":102},[92,66097,51316],{"class":51282},[92,66099,51289],{"class":102},[92,66101,66102,66104,66106,66108,66110,66112],{"class":94,"line":1179},[92,66103,52126],{"class":102},[92,66105,51326],{"class":51282},[92,66107,51329],{"class":1942},[92,66109,148],{"class":102},[92,66111,51334],{"class":207},[92,66113,51289],{"class":102},[92,66115,66116,66118,66120,66122,66124,66126,66128,66130,66132],{"class":94,"line":1193},[92,66117,52126],{"class":102},[92,66119,51326],{"class":51282},[92,66121,14900],{"class":1942},[92,66123,148],{"class":102},[92,66125,51373],{"class":207},[92,66127,51353],{"class":1942},[92,66129,148],{"class":102},[92,66131,51380],{"class":207},[92,66133,51289],{"class":102},[92,66135,66136,66138,66140,66142,66144],{"class":94,"line":1199},[92,66137,52126],{"class":102},[92,66139,51389],{"class":51282},[92,66141,51392],{"class":102},[92,66143,51389],{"class":51282},[92,66145,51289],{"class":102},[92,66147,66148,66150,66152],{"class":94,"line":1290},[92,66149,52126],{"class":102},[92,66151,5106],{"class":51282},[92,66153,51289],{"class":102},[92,66155,66156,66159],{"class":94,"line":1296},[92,66157,66158],{"class":1942},"    .father",[92,66160,15552],{"class":102},[92,66162,66163,66165,66167,66169,66171],{"class":94,"line":1308},[92,66164,54753],{"class":151},[92,66166,51419],{"class":102},[92,66168,65056],{"class":151},[92,66170,51474],{"class":98},[92,66172,1269],{"class":102},[92,66174,66175,66177,66179,66181,66183],{"class":94,"line":1591},[92,66176,54767],{"class":151},[92,66178,51419],{"class":102},[92,66180,65056],{"class":151},[92,66182,51474],{"class":98},[92,66184,1269],{"class":102},[92,66186,66187,66189,66191,66193],{"class":94,"line":1596},[92,66188,54866],{"class":151},[92,66190,51419],{"class":102},[92,66192,51627],{"class":151},[92,66194,1269],{"class":102},[92,66196,66197],{"class":94,"line":1602},[92,66198,2166],{"class":102},[92,66200,66201],{"class":94,"line":1607},[92,66202,2379],{"emptyLinePlaceholder":17},[92,66204,66205,66208],{"class":94,"line":1621},[92,66206,66207],{"class":1942},"    .son",[92,66209,15552],{"class":102},[92,66211,66212,66214,66216,66218,66220],{"class":94,"line":1626},[92,66213,54753],{"class":151},[92,66215,51419],{"class":102},[92,66217,1701],{"class":151},[92,66219,51474],{"class":98},[92,66221,1269],{"class":102},[92,66223,66224,66226,66228,66230,66232],{"class":94,"line":1632},[92,66225,54767],{"class":151},[92,66227,51419],{"class":102},[92,66229,1701],{"class":151},[92,66231,51474],{"class":98},[92,66233,1269],{"class":102},[92,66235,66236,66238,66240,66242],{"class":94,"line":1653},[92,66237,54866],{"class":151},[92,66239,51419],{"class":102},[92,66241,54871],{"class":151},[92,66243,1269],{"class":102},[92,66245,66246],{"class":94,"line":1658},[92,66247,2166],{"class":102},[92,66249,66250,66252,66254],{"class":94,"line":1672},[92,66251,52399],{"class":102},[92,66253,5106],{"class":51282},[92,66255,51289],{"class":102},[92,66257,66258,66260,66262],{"class":94,"line":1677},[92,66259,51767],{"class":102},[92,66261,51316],{"class":51282},[92,66263,51289],{"class":102},[92,66265,66266],{"class":94,"line":1706},[92,66267,2379],{"emptyLinePlaceholder":17},[92,66269,66270,66272,66274],{"class":94,"line":1711},[92,66271,1013],{"class":102},[92,66273,51782],{"class":51282},[92,66275,51289],{"class":102},[92,66277,66278,66280,66282,66284,66286,66289],{"class":94,"line":1728},[92,66279,52126],{"class":102},[92,66281,51593],{"class":51282},[92,66283,53468],{"class":1942},[92,66285,148],{"class":102},[92,66287,66288],{"class":207},"\"father\"",[92,66290,51289],{"class":102},[92,66292,66293,66295,66297,66299,66301,66304,66306,66308],{"class":94,"line":1733},[92,66294,51323],{"class":102},[92,66296,51593],{"class":51282},[92,66298,53468],{"class":1942},[92,66300,148],{"class":102},[92,66302,66303],{"class":207},"\"son\"",[92,66305,55296],{"class":102},[92,66307,51593],{"class":51282},[92,66309,51289],{"class":102},[92,66311,66312,66314,66316],{"class":94,"line":1738},[92,66313,52399],{"class":102},[92,66315,51593],{"class":51282},[92,66317,51289],{"class":102},[92,66319,66320,66322,66324],{"class":94,"line":1743},[92,66321,52126],{"class":102},[92,66323,51795],{"class":51282},[92,66325,51289],{"class":102},[92,66327,66328,66330,66333,66335,66337,66339,66341,66344],{"class":94,"line":1757},[92,66329,11201],{"class":98},[92,66331,66332],{"class":151}," fa",[92,66334,13544],{"class":98},[92,66336,54378],{"class":102},[92,66338,54381],{"class":1942},[92,66340,103],{"class":102},[92,66342,66343],{"class":207},"'.father'",[92,66345,109],{"class":102},[92,66347,66348,66350,66353,66355,66357,66359,66361,66364],{"class":94,"line":1762},[92,66349,11201],{"class":98},[92,66351,66352],{"class":151}," son",[92,66354,13544],{"class":98},[92,66356,54378],{"class":102},[92,66358,54381],{"class":1942},[92,66360,103],{"class":102},[92,66362,66363],{"class":207},"'.son'",[92,66365,109],{"class":102},[92,66367,66368,66370,66372,66374,66376,66378,66380],{"class":94,"line":2556},[92,66369,52389],{"class":102},[92,66371,57795],{"class":1942},[92,66373,103],{"class":102},[92,66375,57800],{"class":207},[92,66377,12415],{"class":102},[92,66379,54431],{"class":98},[92,66381,54434],{"class":102},[92,66383,66384,66386,66388,66391],{"class":94,"line":2570},[92,66385,58907],{"class":1942},[92,66387,103],{"class":102},[92,66389,66390],{"class":207},"'woshiu1'",[92,66392,109],{"class":102},[92,66394,66395,66397,66399],{"class":94,"line":2578},[92,66396,54517],{"class":102},[92,66398,1341],{"class":151},[92,66400,109],{"class":102},[92,66402,66403,66406,66408,66410,66412,66414,66416],{"class":94,"line":2583},[92,66404,66405],{"class":102},"    fa.",[92,66407,57795],{"class":1942},[92,66409,103],{"class":102},[92,66411,57800],{"class":207},[92,66413,12415],{"class":102},[92,66415,54431],{"class":98},[92,66417,54434],{"class":102},[92,66419,66420,66422,66424,66427],{"class":94,"line":2589},[92,66421,58907],{"class":1942},[92,66423,103],{"class":102},[92,66425,66426],{"class":207},"'1'",[92,66428,109],{"class":102},[92,66430,66431,66433,66435],{"class":94,"line":2595},[92,66432,54517],{"class":102},[92,66434,1341],{"class":151},[92,66436,109],{"class":102},[92,66438,66439,66442,66444,66446,66448,66450,66452],{"class":94,"line":2600},[92,66440,66441],{"class":102},"    son.",[92,66443,57795],{"class":1942},[92,66445,103],{"class":102},[92,66447,57800],{"class":207},[92,66449,12415],{"class":102},[92,66451,54431],{"class":98},[92,66453,54434],{"class":102},[92,66455,66456,66458,66460,66463],{"class":94,"line":7928},[92,66457,58907],{"class":1942},[92,66459,103],{"class":102},[92,66461,66462],{"class":207},"'2'",[92,66464,109],{"class":102},[92,66466,66467,66469,66471],{"class":94,"line":7952},[92,66468,54517],{"class":102},[92,66470,1341],{"class":151},[92,66472,109],{"class":102},[92,66474,66475,66477,66479],{"class":94,"line":7957},[92,66476,52399],{"class":102},[92,66478,51795],{"class":51282},[92,66480,51289],{"class":102},[92,66482,66483,66485,66487],{"class":94,"line":7963},[92,66484,51767],{"class":102},[92,66486,51782],{"class":51282},[92,66488,51289],{"class":102},[92,66490,66491],{"class":94,"line":7990},[92,66492,2379],{"emptyLinePlaceholder":17},[92,66494,66495,66497,66499],{"class":94,"line":7995},[92,66496,51767],{"class":102},[92,66498,50617],{"class":51282},[92,66500,51289],{"class":102},[38,66502,66503],{},[1441,66504],{"alt":10,"src":66505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[38,66507,66508],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21978,66510,66512],{"id":66511},"_3312-事件冒泡","3.3.1.2 事件冒泡",[38,66514,66515],{},[1441,66516],{"alt":10,"src":66517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[38,66519,66520],{},"反着来",[38,66522,66523],{},"注意是同名事件，比如都是‘click’",[21978,66525,66527],{"id":66526},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[38,66529,66530],{},[1441,66531],{"alt":10,"src":66532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21978,66534,66536],{"id":66535},"_3314-解绑事件","3.3.1.4 解绑事件",[38,66538,66539],{},[1441,66540],{"alt":10,"src":66541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[38,66543,66544],{},[1441,66545],{"alt":10,"src":66546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21978,66548,66550],{"id":66549},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[46,66552,66553],{},[49,66554,66555],{},"事件类型的区别",[38,66557,66558],{},[1441,66559],{"alt":10,"src":66560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[38,66562,66563],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[46,66565,66566],{"start":11},[49,66567,66568],{},"注册事件的区别",[38,66570,66571],{},[1441,66572],{"alt":10,"src":66573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21978,66575,66577],{"id":66576},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[38,66579,66580],{},[1441,66581],{"alt":10,"src":66582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[38,66584,66585],{},[1441,66586],{"alt":10,"src":66587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[83,66589,66591],{"className":53049,"code":66590,"language":53051,"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,66592,66593,66601,66618,66641,66649,66654,66659,66664,66668,66676,66684],{"__ignoreMap":10},[92,66594,66595,66597,66599],{"class":94,"line":95},[92,66596,1013],{"class":102},[92,66598,51782],{"class":51282},[92,66600,51289],{"class":102},[92,66602,66603,66605,66608,66611,66613,66616],{"class":94,"line":11},[92,66604,52126],{"class":102},[92,66606,66607],{"class":51282},"form",[92,66609,66610],{"class":1942}," action",[92,66612,148],{"class":102},[92,66614,66615],{"class":207},"\"http:\u002F\u002Fwww.itcast.cn\"",[92,66617,51289],{"class":102},[92,66619,66620,66622,66624,66626,66628,66631,66634,66636,66639],{"class":94,"line":1158},[92,66621,51323],{"class":102},[92,66623,53803],{"class":51282},[92,66625,53806],{"class":1942},[92,66627,148],{"class":102},[92,66629,66630],{"class":207},"\"submit\"",[92,66632,66633],{"class":1942}," value",[92,66635,148],{"class":102},[92,66637,66638],{"class":207},"\"免费注册\"",[92,66640,51289],{"class":102},[92,66642,66643,66645,66647],{"class":94,"line":1173},[92,66644,51323],{"class":102},[92,66646,51795],{"class":51282},[92,66648,51289],{"class":102},[92,66650,66651],{"class":94,"line":1179},[92,66652,66653],{"class":102},"      const form = document.querySelector('form')\n",[92,66655,66656],{"class":94,"line":1193},[92,66657,66658],{"class":102},"      form.addEventListener('submit', function (e) {\n",[92,66660,66661],{"class":94,"line":1199},[92,66662,66663],{"class":102},"        e.preventDefault()\n",[92,66665,66666],{"class":94,"line":1290},[92,66667,64797],{"class":102},[92,66669,66670,66672,66674],{"class":94,"line":1296},[92,66671,51758],{"class":102},[92,66673,51795],{"class":51282},[92,66675,51289],{"class":102},[92,66677,66678,66680,66682],{"class":94,"line":1308},[92,66679,52399],{"class":102},[92,66681,66607],{"class":51282},[92,66683,51289],{"class":102},[92,66685,66686,66688,66690],{"class":94,"line":1591},[92,66687,51767],{"class":102},[92,66689,51782],{"class":51282},[92,66691,51289],{"class":102},[38,66693,66694],{},"点击不在跳转！！！",[63,66696,66698],{"id":66697},"_332-事件委托","3.3.2 事件委托",[38,66700,66701],{},[1441,66702],{"alt":10,"src":66703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[83,66705,66707],{"className":50615,"code":66706,"language":50617,"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,66708,66709,66719,66733,66737,66745,66759,66779,66791,66799,66803,66811,66819,66831,66843,66855,66867,66879,66892,66900,66908,66913,66932,66953,66958,66963,66968,66973,66982,66986,66996,67000,67005,67010,67024,67034,67038,67042,67050,67058,67062],{"__ignoreMap":10},[92,66710,66711,66713,66715,66717],{"class":94,"line":95},[92,66712,51279],{"class":102},[92,66714,51283],{"class":51282},[92,66716,51286],{"class":1942},[92,66718,51289],{"class":102},[92,66720,66721,66723,66725,66727,66729,66731],{"class":94,"line":11},[92,66722,1013],{"class":102},[92,66724,50617],{"class":51282},[92,66726,51298],{"class":1942},[92,66728,148],{"class":102},[92,66730,51303],{"class":207},[92,66732,51289],{"class":102},[92,66734,66735],{"class":94,"line":1158},[92,66736,2379],{"emptyLinePlaceholder":17},[92,66738,66739,66741,66743],{"class":94,"line":1173},[92,66740,1013],{"class":102},[92,66742,51316],{"class":51282},[92,66744,51289],{"class":102},[92,66746,66747,66749,66751,66753,66755,66757],{"class":94,"line":1179},[92,66748,52126],{"class":102},[92,66750,51326],{"class":51282},[92,66752,51329],{"class":1942},[92,66754,148],{"class":102},[92,66756,51334],{"class":207},[92,66758,51289],{"class":102},[92,66760,66761,66763,66765,66767,66769,66771,66773,66775,66777],{"class":94,"line":1193},[92,66762,52126],{"class":102},[92,66764,51326],{"class":51282},[92,66766,14900],{"class":1942},[92,66768,148],{"class":102},[92,66770,51373],{"class":207},[92,66772,51353],{"class":1942},[92,66774,148],{"class":102},[92,66776,51380],{"class":207},[92,66778,51289],{"class":102},[92,66780,66781,66783,66785,66787,66789],{"class":94,"line":1199},[92,66782,52126],{"class":102},[92,66784,51389],{"class":51282},[92,66786,51392],{"class":102},[92,66788,51389],{"class":51282},[92,66790,51289],{"class":102},[92,66792,66793,66795,66797],{"class":94,"line":1290},[92,66794,51767],{"class":102},[92,66796,51316],{"class":51282},[92,66798,51289],{"class":102},[92,66800,66801],{"class":94,"line":1296},[92,66802,2379],{"emptyLinePlaceholder":17},[92,66804,66805,66807,66809],{"class":94,"line":1308},[92,66806,1013],{"class":102},[92,66808,51782],{"class":51282},[92,66810,51289],{"class":102},[92,66812,66813,66815,66817],{"class":94,"line":1591},[92,66814,52126],{"class":102},[92,66816,1110],{"class":51282},[92,66818,51289],{"class":102},[92,66820,66821,66823,66825,66827,66829],{"class":94,"line":1596},[92,66822,51323],{"class":102},[92,66824,49],{"class":51282},[92,66826,53948],{"class":102},[92,66828,49],{"class":51282},[92,66830,51289],{"class":102},[92,66832,66833,66835,66837,66839,66841],{"class":94,"line":1602},[92,66834,51323],{"class":102},[92,66836,49],{"class":51282},[92,66838,53967],{"class":102},[92,66840,49],{"class":51282},[92,66842,51289],{"class":102},[92,66844,66845,66847,66849,66851,66853],{"class":94,"line":1607},[92,66846,51323],{"class":102},[92,66848,49],{"class":51282},[92,66850,53986],{"class":102},[92,66852,49],{"class":51282},[92,66854,51289],{"class":102},[92,66856,66857,66859,66861,66863,66865],{"class":94,"line":1621},[92,66858,51323],{"class":102},[92,66860,49],{"class":51282},[92,66862,54005],{"class":102},[92,66864,49],{"class":51282},[92,66866,51289],{"class":102},[92,66868,66869,66871,66873,66875,66877],{"class":94,"line":1626},[92,66870,51323],{"class":102},[92,66872,49],{"class":51282},[92,66874,54024],{"class":102},[92,66876,49],{"class":51282},[92,66878,51289],{"class":102},[92,66880,66881,66883,66885,66888,66890],{"class":94,"line":1632},[92,66882,51323],{"class":102},[92,66884,38],{"class":51282},[92,66886,66887],{"class":102},">我不需要变色\u003C\u002F",[92,66889,38],{"class":51282},[92,66891,51289],{"class":102},[92,66893,66894,66896,66898],{"class":94,"line":1653},[92,66895,52399],{"class":102},[92,66897,1110],{"class":51282},[92,66899,51289],{"class":102},[92,66901,66902,66904,66906],{"class":94,"line":1658},[92,66903,52126],{"class":102},[92,66905,51795],{"class":51282},[92,66907,51289],{"class":102},[92,66909,66910],{"class":94,"line":1672},[92,66911,66912],{"class":161},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[92,66914,66915,66917,66919,66921,66923,66925,66927,66930],{"class":94,"line":1677},[92,66916,11201],{"class":98},[92,66918,61274],{"class":151},[92,66920,13544],{"class":98},[92,66922,54378],{"class":102},[92,66924,54381],{"class":1942},[92,66926,103],{"class":102},[92,66928,66929],{"class":207},"'ul'",[92,66931,109],{"class":102},[92,66933,66934,66937,66939,66941,66943,66945,66947,66949,66951],{"class":94,"line":1706},[92,66935,66936],{"class":102},"    ul.",[92,66938,57795],{"class":1942},[92,66940,103],{"class":102},[92,66942,57800],{"class":207},[92,66944,12415],{"class":102},[92,66946,54431],{"class":98},[92,66948,1637],{"class":102},[92,66950,177],{"class":5196},[92,66952,12422],{"class":102},[92,66954,66955],{"class":94,"line":1711},[92,66956,66957],{"class":161},"      \u002F\u002F alert(1)\n",[92,66959,66960],{"class":94,"line":1728},[92,66961,66962],{"class":161},"      \u002F\u002F e.target就是我们点击的对象\n",[92,66964,66965],{"class":94,"line":1733},[92,66966,66967],{"class":161},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[92,66969,66970],{"class":94,"line":1738},[92,66971,66972],{"class":161},"      \u002F\u002F e.target.style.color = 'red'\n",[92,66974,66975,66977,66979],{"class":94,"line":1743},[92,66976,58226],{"class":102},[92,66978,58229],{"class":1942},[92,66980,66981],{"class":102},"(e)\n",[92,66983,66984],{"class":94,"line":1757},[92,66985,2379],{"emptyLinePlaceholder":17},[92,66987,66988,66990,66993],{"class":94,"line":1762},[92,66989,58226],{"class":102},[92,66991,66992],{"class":1942},"dir",[92,66994,66995],{"class":102},"(e.target)\n",[92,66997,66998],{"class":94,"line":2556},[92,66999,2379],{"emptyLinePlaceholder":17},[92,67001,67002],{"class":94,"line":2570},[92,67003,67004],{"class":161},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[92,67006,67007],{"class":94,"line":2578},[92,67008,67009],{"class":161},"      \u002F\u002F 通过tagName来进行判断\n",[92,67011,67012,67014,67017,67019,67022],{"class":94,"line":2583},[92,67013,54462],{"class":98},[92,67015,67016],{"class":102}," (e.target.tagName ",[92,67018,54468],{"class":98},[92,67020,67021],{"class":207}," 'LI'",[92,67023,12422],{"class":102},[92,67025,67026,67029,67031],{"class":94,"line":2589},[92,67027,67028],{"class":102},"        e.target.style.color ",[92,67030,148],{"class":98},[92,67032,67033],{"class":207}," 'red'\n",[92,67035,67036],{"class":94,"line":2595},[92,67037,52380],{"class":102},[92,67039,67040],{"class":94,"line":2600},[92,67041,33443],{"class":102},[92,67043,67044,67046,67048],{"class":94,"line":7928},[92,67045,52399],{"class":102},[92,67047,51795],{"class":51282},[92,67049,51289],{"class":102},[92,67051,67052,67054,67056],{"class":94,"line":7952},[92,67053,51767],{"class":102},[92,67055,51782],{"class":51282},[92,67057,51289],{"class":102},[92,67059,67060],{"class":94,"line":7957},[92,67061,2379],{"emptyLinePlaceholder":17},[92,67063,67064,67066,67068],{"class":94,"line":7963},[92,67065,51767],{"class":102},[92,67067,50617],{"class":51282},[92,67069,51289],{"class":102},[38,67071,67072],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[38,67074,67075],{},"if(e.target.ragName==='P') {}",[38,67077,67078],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[38,67080,67081],{},"通过事件委托的方式实现tab栏切换改造：",[38,67083,67084],{},"一定要记住自定义属性！！！！！！",[38,67086,67087],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[38,67089,67090],{},"id是自定义的属性名",[38,67092,67093],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[83,67095,67097],{"className":50615,"code":67096,"language":50617,"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,67098,67099,67109,67123,67127,67135,67149,67169,67189,67201,67209,67215,67225,67235,67239,67243,67249,67261,67273,67285,67301,67305,67309,67315,67327,67339,67351,67361,67371,67375,67379,67387,67399,67409,67421,67425,67429,67437,67447,67457,67467,67471,67475,67485,67499,67511,67515,67519,67531,67541,67557,67567,67571,67575,67589,67599,67609,67613,67617,67623,67637,67641,67645,67653,67663,67667,67671,67680,67690,67694,67702,67710,67714,67722,67736,67750,67762,67770,67809,67841,67873,67905,67937,67945,67953,67967,68001,68035,68069,68103,68137,68145,68153,68161,68166,68171,68190,68195,68215,68223,68228,68241,68262,68275,68279,68284,68289,68302,68322,68350,68354,68358,68362,68370,68378,68382],{"__ignoreMap":10},[92,67100,67101,67103,67105,67107],{"class":94,"line":95},[92,67102,51279],{"class":102},[92,67104,51283],{"class":51282},[92,67106,51286],{"class":1942},[92,67108,51289],{"class":102},[92,67110,67111,67113,67115,67117,67119,67121],{"class":94,"line":11},[92,67112,1013],{"class":102},[92,67114,50617],{"class":51282},[92,67116,51298],{"class":1942},[92,67118,148],{"class":102},[92,67120,51303],{"class":207},[92,67122,51289],{"class":102},[92,67124,67125],{"class":94,"line":1158},[92,67126,2379],{"emptyLinePlaceholder":17},[92,67128,67129,67131,67133],{"class":94,"line":1173},[92,67130,1013],{"class":102},[92,67132,51316],{"class":51282},[92,67134,51289],{"class":102},[92,67136,67137,67139,67141,67143,67145,67147],{"class":94,"line":1179},[92,67138,52126],{"class":102},[92,67140,51326],{"class":51282},[92,67142,51329],{"class":1942},[92,67144,148],{"class":102},[92,67146,51334],{"class":207},[92,67148,59109],{"class":102},[92,67150,67151,67153,67155,67157,67159,67161,67163,67165,67167],{"class":94,"line":1193},[92,67152,52126],{"class":102},[92,67154,51326],{"class":51282},[92,67156,51345],{"class":1942},[92,67158,148],{"class":102},[92,67160,51350],{"class":207},[92,67162,51353],{"class":1942},[92,67164,148],{"class":102},[92,67166,51358],{"class":207},[92,67168,59109],{"class":102},[92,67170,67171,67173,67175,67177,67179,67181,67183,67185,67187],{"class":94,"line":1199},[92,67172,52126],{"class":102},[92,67174,51326],{"class":51282},[92,67176,14900],{"class":1942},[92,67178,148],{"class":102},[92,67180,51373],{"class":207},[92,67182,51353],{"class":1942},[92,67184,148],{"class":102},[92,67186,51380],{"class":207},[92,67188,59109],{"class":102},[92,67190,67191,67193,67195,67197,67199],{"class":94,"line":1290},[92,67192,52126],{"class":102},[92,67194,51389],{"class":51282},[92,67196,63607],{"class":102},[92,67198,51389],{"class":51282},[92,67200,51289],{"class":102},[92,67202,67203,67205,67207],{"class":94,"line":1296},[92,67204,52126],{"class":102},[92,67206,5106],{"class":51282},[92,67208,51289],{"class":102},[92,67210,67211,67213],{"class":94,"line":1308},[92,67212,6383],{"class":51282},[92,67214,15552],{"class":102},[92,67216,67217,67219,67221,67223],{"class":94,"line":1591},[92,67218,54688],{"class":151},[92,67220,51419],{"class":102},[92,67222,294],{"class":151},[92,67224,1269],{"class":102},[92,67226,67227,67229,67231,67233],{"class":94,"line":1596},[92,67228,54677],{"class":151},[92,67230,51419],{"class":102},[92,67232,294],{"class":151},[92,67234,1269],{"class":102},[92,67236,67237],{"class":94,"line":1602},[92,67238,2166],{"class":102},[92,67240,67241],{"class":94,"line":1607},[92,67242,2379],{"emptyLinePlaceholder":17},[92,67244,67245,67247],{"class":94,"line":1621},[92,67246,63658],{"class":1942},[92,67248,15552],{"class":102},[92,67250,67251,67253,67255,67257,67259],{"class":94,"line":1626},[92,67252,54753],{"class":151},[92,67254,51419],{"class":102},[92,67256,63669],{"class":151},[92,67258,51474],{"class":98},[92,67260,1269],{"class":102},[92,67262,67263,67265,67267,67269,67271],{"class":94,"line":1632},[92,67264,54767],{"class":151},[92,67266,51419],{"class":102},[92,67268,63682],{"class":151},[92,67270,51474],{"class":98},[92,67272,1269],{"class":102},[92,67274,67275,67277,67279,67281,67283],{"class":94,"line":1653},[92,67276,54688],{"class":151},[92,67278,51419],{"class":102},[92,67280,803],{"class":151},[92,67282,51474],{"class":98},[92,67284,1269],{"class":102},[92,67286,67287,67289,67291,67293,67295,67297,67299],{"class":94,"line":1658},[92,67288,61959],{"class":151},[92,67290,51419],{"class":102},[92,67292,320],{"class":151},[92,67294,51474],{"class":98},[92,67296,51503],{"class":151},[92,67298,62226],{"class":151},[92,67300,1269],{"class":102},[92,67302,67303],{"class":94,"line":1672},[92,67304,2166],{"class":102},[92,67306,67307],{"class":94,"line":1677},[92,67308,2379],{"emptyLinePlaceholder":17},[92,67310,67311,67313],{"class":94,"line":1706},[92,67312,63727],{"class":1942},[92,67314,15552],{"class":102},[92,67316,67317,67319,67321,67323,67325],{"class":94,"line":1711},[92,67318,54753],{"class":151},[92,67320,51419],{"class":102},[92,67322,414],{"class":151},[92,67324,431],{"class":98},[92,67326,1269],{"class":102},[92,67328,67329,67331,67333,67335,67337],{"class":94,"line":1728},[92,67330,54767],{"class":151},[92,67332,51419],{"class":102},[92,67334,1010],{"class":151},[92,67336,51474],{"class":98},[92,67338,1269],{"class":102},[92,67340,67341,67343,67345,67347,67349],{"class":94,"line":1733},[92,67342,57341],{"class":151},[92,67344,51419],{"class":102},[92,67346,1010],{"class":151},[92,67348,51474],{"class":98},[92,67350,1269],{"class":102},[92,67352,67353,67355,67357,67359],{"class":94,"line":1738},[92,67354,54991],{"class":151},[92,67356,51419],{"class":102},[92,67358,51459],{"class":151},[92,67360,1269],{"class":102},[92,67362,67363,67365,67367,67369],{"class":94,"line":1743},[92,67364,55002],{"class":151},[92,67366,51419],{"class":102},[92,67368,51650],{"class":151},[92,67370,1269],{"class":102},[92,67372,67373],{"class":94,"line":1757},[92,67374,2166],{"class":102},[92,67376,67377],{"class":94,"line":1762},[92,67378,2379],{"emptyLinePlaceholder":17},[92,67380,67381,67383,67385],{"class":94,"line":2556},[92,67382,63727],{"class":1942},[92,67384,63800],{"class":51282},[92,67386,15552],{"class":102},[92,67388,67389,67391,67393,67395,67397],{"class":94,"line":2570},[92,67390,54904],{"class":151},[92,67392,51419],{"class":102},[92,67394,903],{"class":151},[92,67396,51474],{"class":98},[92,67398,1269],{"class":102},[92,67400,67401,67403,67405,67407],{"class":94,"line":2578},[92,67402,62316],{"class":151},[92,67404,51419],{"class":102},[92,67406,63823],{"class":151},[92,67408,1269],{"class":102},[92,67410,67411,67413,67415,67417,67419],{"class":94,"line":2583},[92,67412,61982],{"class":151},[92,67414,51419],{"class":102},[92,67416,803],{"class":151},[92,67418,51474],{"class":98},[92,67420,1269],{"class":102},[92,67422,67423],{"class":94,"line":2589},[92,67424,2166],{"class":102},[92,67426,67427],{"class":94,"line":2595},[92,67428,2379],{"emptyLinePlaceholder":17},[92,67430,67431,67433,67435],{"class":94,"line":2600},[92,67432,63727],{"class":1942},[92,67434,61274],{"class":51282},[92,67436,15552],{"class":102},[92,67438,67439,67441,67443,67445],{"class":94,"line":7928},[92,67440,54714],{"class":151},[92,67442,51419],{"class":102},[92,67444,54719],{"class":151},[92,67446,1269],{"class":102},[92,67448,67449,67451,67453,67455],{"class":94,"line":7952},[92,67450,54991],{"class":151},[92,67452,51419],{"class":102},[92,67454,51459],{"class":151},[92,67456,1269],{"class":102},[92,67458,67459,67461,67463,67465],{"class":94,"line":7957},[92,67460,55002],{"class":151},[92,67462,51419],{"class":102},[92,67464,51562],{"class":151},[92,67466,1269],{"class":102},[92,67468,67469],{"class":94,"line":7963},[92,67470,2166],{"class":102},[92,67472,67473],{"class":94,"line":7990},[92,67474,2379],{"emptyLinePlaceholder":17},[92,67476,67477,67479,67481,67483],{"class":94,"line":7995},[92,67478,63727],{"class":1942},[92,67480,61274],{"class":51282},[92,67482,55057],{"class":51282},[92,67484,15552],{"class":102},[92,67486,67487,67489,67491,67493,67495,67497],{"class":94,"line":8001},[92,67488,54688],{"class":151},[92,67490,51419],{"class":102},[92,67492,294],{"class":151},[92,67494,8930],{"class":151},[92,67496,51474],{"class":98},[92,67498,1269],{"class":102},[92,67500,67501,67503,67505,67507,67509],{"class":94,"line":8013},[92,67502,54904],{"class":151},[92,67504,51419],{"class":102},[92,67506,652],{"class":151},[92,67508,51474],{"class":98},[92,67510,1269],{"class":102},[92,67512,67513],{"class":94,"line":8025},[92,67514,2166],{"class":102},[92,67516,67517],{"class":94,"line":8037},[92,67518,2379],{"emptyLinePlaceholder":17},[92,67520,67521,67523,67525,67527,67529],{"class":94,"line":9696},[92,67522,63727],{"class":1942},[92,67524,61274],{"class":51282},[92,67526,55057],{"class":51282},[92,67528,1377],{"class":51282},[92,67530,15552],{"class":102},[92,67532,67533,67535,67537,67539],{"class":94,"line":9721},[92,67534,63952],{"class":151},[92,67536,51419],{"class":102},[92,67538,54719],{"class":151},[92,67540,1269],{"class":102},[92,67542,67543,67545,67547,67549,67551,67553,67555],{"class":94,"line":9744},[92,67544,62214],{"class":151},[92,67546,51419],{"class":102},[92,67548,180],{"class":151},[92,67550,51474],{"class":98},[92,67552,51503],{"class":151},[92,67554,63973],{"class":151},[92,67556,1269],{"class":102},[92,67558,67559,67561,67563,67565],{"class":94,"line":9768},[92,67560,57398],{"class":151},[92,67562,51419],{"class":102},[92,67564,62351],{"class":151},[92,67566,1269],{"class":102},[92,67568,67569],{"class":94,"line":9773},[92,67570,2166],{"class":102},[92,67572,67573],{"class":94,"line":9778},[92,67574,2379],{"emptyLinePlaceholder":17},[92,67576,67577,67579,67581,67583,67585,67587],{"class":94,"line":9783},[92,67578,63727],{"class":1942},[92,67580,61274],{"class":51282},[92,67582,55057],{"class":51282},[92,67584,1377],{"class":51282},[92,67586,64006],{"class":1942},[92,67588,15552],{"class":102},[92,67590,67591,67593,67595,67597],{"class":94,"line":9792},[92,67592,61773],{"class":151},[92,67594,51419],{"class":102},[92,67596,64017],{"class":151},[92,67598,1269],{"class":102},[92,67600,67601,67603,67605,67607],{"class":94,"line":9797},[92,67602,57398],{"class":151},[92,67604,51419],{"class":102},[92,67606,64017],{"class":151},[92,67608,1269],{"class":102},[92,67610,67611],{"class":94,"line":9803},[92,67612,2166],{"class":102},[92,67614,67615],{"class":94,"line":9824},[92,67616,2379],{"emptyLinePlaceholder":17},[92,67618,67619,67621],{"class":94,"line":9830},[92,67620,64042],{"class":1942},[92,67622,15552],{"class":102},[92,67624,67625,67627,67629,67631,67633,67635],{"class":94,"line":9844},[92,67626,54677],{"class":151},[92,67628,51419],{"class":102},[92,67630,294],{"class":151},[92,67632,64055],{"class":151},[92,67634,51474],{"class":98},[92,67636,1269],{"class":102},[92,67638,67639],{"class":94,"line":9850},[92,67640,2166],{"class":102},[92,67642,67643],{"class":94,"line":9877},[92,67644,2379],{"emptyLinePlaceholder":17},[92,67646,67647,67649,67651],{"class":94,"line":9886},[92,67648,64042],{"class":1942},[92,67650,62156],{"class":1942},[92,67652,15552],{"class":102},[92,67654,67655,67657,67659,67661],{"class":94,"line":9892},[92,67656,54991],{"class":151},[92,67658,51419],{"class":102},[92,67660,54719],{"class":151},[92,67662,1269],{"class":102},[92,67664,67665],{"class":94,"line":9900},[92,67666,2166],{"class":102},[92,67668,67669],{"class":94,"line":9905},[92,67670,2379],{"emptyLinePlaceholder":17},[92,67672,67673,67675,67678],{"class":94,"line":16584},[92,67674,64042],{"class":1942},[92,67676,67677],{"class":1942}," .active",[92,67679,15552],{"class":102},[92,67681,67682,67684,67686,67688],{"class":94,"line":16590},[92,67683,54991],{"class":151},[92,67685,51419],{"class":102},[92,67687,60851],{"class":151},[92,67689,1269],{"class":102},[92,67691,67692],{"class":94,"line":16613},[92,67693,2166],{"class":102},[92,67695,67696,67698,67700],{"class":94,"line":16619},[92,67697,52399],{"class":102},[92,67699,5106],{"class":51282},[92,67701,51289],{"class":102},[92,67703,67704,67706,67708],{"class":94,"line":16642},[92,67705,51767],{"class":102},[92,67707,51316],{"class":51282},[92,67709,51289],{"class":102},[92,67711,67712],{"class":94,"line":16656},[92,67713,2379],{"emptyLinePlaceholder":17},[92,67715,67716,67718,67720],{"class":94,"line":16676},[92,67717,1013],{"class":102},[92,67719,51782],{"class":51282},[92,67721,51289],{"class":102},[92,67723,67724,67726,67728,67730,67732,67734],{"class":94,"line":16682},[92,67725,52126],{"class":102},[92,67727,51593],{"class":51282},[92,67729,53468],{"class":1942},[92,67731,148],{"class":102},[92,67733,64157],{"class":207},[92,67735,51289],{"class":102},[92,67737,67738,67740,67742,67744,67746,67748],{"class":94,"line":16693},[92,67739,51323],{"class":102},[92,67741,51593],{"class":51282},[92,67743,53468],{"class":1942},[92,67745,148],{"class":102},[92,67747,64172],{"class":207},[92,67749,51289],{"class":102},[92,67751,67752,67754,67756,67758,67760],{"class":94,"line":16716},[92,67753,55216],{"class":102},[92,67755,63],{"class":51282},[92,67757,64183],{"class":102},[92,67759,63],{"class":51282},[92,67761,51289],{"class":102},[92,67763,67764,67766,67768],{"class":94,"line":16738},[92,67765,55216],{"class":102},[92,67767,1110],{"class":51282},[92,67769,51289],{"class":102},[92,67771,67772,67774,67776,67778,67780,67782,67784,67786,67788,67790,67792,67794,67796,67799,67801,67803,67805,67807],{"class":94,"line":16743},[92,67773,55284],{"class":102},[92,67775,49],{"class":51282},[92,67777,61034],{"class":102},[92,67779,341],{"class":51282},[92,67781,53468],{"class":1942},[92,67783,148],{"class":102},[92,67785,59688],{"class":207},[92,67787,61039],{"class":1942},[92,67789,148],{"class":102},[92,67791,64218],{"class":207},[92,67793,53933],{"class":1942},[92,67795,148],{"class":102},[92,67797,67798],{"class":207},"\"0\"",[92,67800,64221],{"class":102},[92,67802,341],{"class":51282},[92,67804,55296],{"class":102},[92,67806,49],{"class":51282},[92,67808,51289],{"class":102},[92,67810,67811,67813,67815,67817,67819,67821,67823,67825,67827,67829,67831,67833,67835,67837,67839],{"class":94,"line":16749},[92,67812,55284],{"class":102},[92,67814,49],{"class":51282},[92,67816,61034],{"class":102},[92,67818,341],{"class":51282},[92,67820,61039],{"class":1942},[92,67822,148],{"class":102},[92,67824,64218],{"class":207},[92,67826,53933],{"class":1942},[92,67828,148],{"class":102},[92,67830,3657],{"class":207},[92,67832,64248],{"class":102},[92,67834,341],{"class":51282},[92,67836,55296],{"class":102},[92,67838,49],{"class":51282},[92,67840,51289],{"class":102},[92,67842,67843,67845,67847,67849,67851,67853,67855,67857,67859,67861,67863,67865,67867,67869,67871],{"class":94,"line":16763},[92,67844,55284],{"class":102},[92,67846,49],{"class":51282},[92,67848,61034],{"class":102},[92,67850,341],{"class":51282},[92,67852,61039],{"class":1942},[92,67854,148],{"class":102},[92,67856,64218],{"class":207},[92,67858,53933],{"class":1942},[92,67860,148],{"class":102},[92,67862,3680],{"class":207},[92,67864,64275],{"class":102},[92,67866,341],{"class":51282},[92,67868,55296],{"class":102},[92,67870,49],{"class":51282},[92,67872,51289],{"class":102},[92,67874,67875,67877,67879,67881,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901,67903],{"class":94,"line":16776},[92,67876,55284],{"class":102},[92,67878,49],{"class":51282},[92,67880,61034],{"class":102},[92,67882,341],{"class":51282},[92,67884,61039],{"class":1942},[92,67886,148],{"class":102},[92,67888,64218],{"class":207},[92,67890,53933],{"class":1942},[92,67892,148],{"class":102},[92,67894,3693],{"class":207},[92,67896,64302],{"class":102},[92,67898,341],{"class":51282},[92,67900,55296],{"class":102},[92,67902,49],{"class":51282},[92,67904,51289],{"class":102},[92,67906,67907,67909,67911,67913,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933,67935],{"class":94,"line":16781},[92,67908,55284],{"class":102},[92,67910,49],{"class":51282},[92,67912,61034],{"class":102},[92,67914,341],{"class":51282},[92,67916,61039],{"class":1942},[92,67918,148],{"class":102},[92,67920,64218],{"class":207},[92,67922,53933],{"class":1942},[92,67924,148],{"class":102},[92,67926,3706],{"class":207},[92,67928,64329],{"class":102},[92,67930,341],{"class":51282},[92,67932,55296],{"class":102},[92,67934,49],{"class":51282},[92,67936,51289],{"class":102},[92,67938,67939,67941,67943],{"class":94,"line":16795},[92,67940,55389],{"class":102},[92,67942,1110],{"class":51282},[92,67944,51289],{"class":102},[92,67946,67947,67949,67951],{"class":94,"line":16800},[92,67948,51758],{"class":102},[92,67950,51593],{"class":51282},[92,67952,51289],{"class":102},[92,67954,67955,67957,67959,67961,67963,67965],{"class":94,"line":16806},[92,67956,51323],{"class":102},[92,67958,51593],{"class":51282},[92,67960,53468],{"class":1942},[92,67962,148],{"class":102},[92,67964,64366],{"class":207},[92,67966,51289],{"class":102},[92,67968,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999],{"class":94,"line":16811},[92,67970,55216],{"class":102},[92,67972,51593],{"class":51282},[92,67974,53468],{"class":1942},[92,67976,148],{"class":102},[92,67978,64381],{"class":207},[92,67980,61034],{"class":102},[92,67982,1441],{"class":51282},[92,67984,55221],{"class":1942},[92,67986,148],{"class":102},[92,67988,64392],{"class":207},[92,67990,55229],{"class":1942},[92,67992,148],{"class":102},[92,67994,7632],{"class":207},[92,67996,64401],{"class":102},[92,67998,51593],{"class":51282},[92,68000,51289],{"class":102},[92,68002,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033],{"class":94,"line":16825},[92,68004,55216],{"class":102},[92,68006,51593],{"class":51282},[92,68008,53468],{"class":1942},[92,68010,148],{"class":102},[92,68012,62605],{"class":207},[92,68014,61034],{"class":102},[92,68016,1441],{"class":51282},[92,68018,55221],{"class":1942},[92,68020,148],{"class":102},[92,68022,64428],{"class":207},[92,68024,55229],{"class":1942},[92,68026,148],{"class":102},[92,68028,7632],{"class":207},[92,68030,64401],{"class":102},[92,68032,51593],{"class":51282},[92,68034,51289],{"class":102},[92,68036,68037,68039,68041,68043,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067],{"class":94,"line":16830},[92,68038,55216],{"class":102},[92,68040,51593],{"class":51282},[92,68042,53468],{"class":1942},[92,68044,148],{"class":102},[92,68046,62605],{"class":207},[92,68048,61034],{"class":102},[92,68050,1441],{"class":51282},[92,68052,55221],{"class":1942},[92,68054,148],{"class":102},[92,68056,64463],{"class":207},[92,68058,55229],{"class":1942},[92,68060,148],{"class":102},[92,68062,7632],{"class":207},[92,68064,64401],{"class":102},[92,68066,51593],{"class":51282},[92,68068,51289],{"class":102},[92,68070,68071,68073,68075,68077,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101],{"class":94,"line":16835},[92,68072,55216],{"class":102},[92,68074,51593],{"class":51282},[92,68076,53468],{"class":1942},[92,68078,148],{"class":102},[92,68080,62605],{"class":207},[92,68082,61034],{"class":102},[92,68084,1441],{"class":51282},[92,68086,55221],{"class":1942},[92,68088,148],{"class":102},[92,68090,64498],{"class":207},[92,68092,55229],{"class":1942},[92,68094,148],{"class":102},[92,68096,7632],{"class":207},[92,68098,64401],{"class":102},[92,68100,51593],{"class":51282},[92,68102,51289],{"class":102},[92,68104,68105,68107,68109,68111,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135],{"class":94,"line":16849},[92,68106,55216],{"class":102},[92,68108,51593],{"class":51282},[92,68110,53468],{"class":1942},[92,68112,148],{"class":102},[92,68114,62605],{"class":207},[92,68116,61034],{"class":102},[92,68118,1441],{"class":51282},[92,68120,55221],{"class":1942},[92,68122,148],{"class":102},[92,68124,64533],{"class":207},[92,68126,55229],{"class":1942},[92,68128,148],{"class":102},[92,68130,7632],{"class":207},[92,68132,64401],{"class":102},[92,68134,51593],{"class":51282},[92,68136,51289],{"class":102},[92,68138,68139,68141,68143],{"class":94,"line":16861},[92,68140,51758],{"class":102},[92,68142,51593],{"class":51282},[92,68144,51289],{"class":102},[92,68146,68147,68149,68151],{"class":94,"line":16866},[92,68148,52399],{"class":102},[92,68150,51593],{"class":51282},[92,68152,51289],{"class":102},[92,68154,68155,68157,68159],{"class":94,"line":16879},[92,68156,52126],{"class":102},[92,68158,51795],{"class":51282},[92,68160,51289],{"class":102},[92,68162,68163],{"class":94,"line":16884},[92,68164,68165],{"class":161},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[92,68167,68168],{"class":94,"line":16889},[92,68169,68170],{"class":161},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[92,68172,68173,68175,68177,68179,68181,68183,68185,68188],{"class":94,"line":16894},[92,68174,11201],{"class":98},[92,68176,61274],{"class":151},[92,68178,13544],{"class":98},[92,68180,54378],{"class":102},[92,68182,54381],{"class":1942},[92,68184,103],{"class":102},[92,68186,68187],{"class":207},"'.tab-nav ul'",[92,68189,109],{"class":102},[92,68191,68192],{"class":94,"line":16907},[92,68193,68194],{"class":161},"    \u002F\u002F 2.添加事件\n",[92,68196,68197,68199,68201,68203,68205,68207,68209,68211,68213],{"class":94,"line":16912},[92,68198,66936],{"class":102},[92,68200,57795],{"class":1942},[92,68202,103],{"class":102},[92,68204,57800],{"class":207},[92,68206,12415],{"class":102},[92,68208,54431],{"class":98},[92,68210,1637],{"class":102},[92,68212,177],{"class":5196},[92,68214,12422],{"class":102},[92,68216,68217,68219,68221],{"class":94,"line":32615},[92,68218,58226],{"class":102},[92,68220,66992],{"class":1942},[92,68222,66995],{"class":102},[92,68224,68225],{"class":94,"line":32621},[92,68226,68227],{"class":161},"      \u002F\u002Fe.targer是我们点击的对象\n",[92,68229,68230,68232,68234,68236,68239],{"class":94,"line":32627},[92,68231,54462],{"class":98},[92,68233,67016],{"class":102},[92,68235,54468],{"class":98},[92,68237,68238],{"class":207}," 'A'",[92,68240,12422],{"class":102},[92,68242,68243,68245,68247,68249,68252,68254,68256,68258,68260],{"class":94,"line":32633},[92,68244,51907],{"class":102},[92,68246,54381],{"class":1942},[92,68248,103],{"class":102},[92,68250,68251],{"class":207},"'.active'",[92,68253,56985],{"class":102},[92,68255,56988],{"class":1942},[92,68257,103],{"class":102},[92,68259,64696],{"class":207},[92,68261,109],{"class":102},[92,68263,68264,68267,68269,68271,68273],{"class":94,"line":32639},[92,68265,68266],{"class":102},"        e.target.classList.",[92,68268,5314],{"class":1942},[92,68270,103],{"class":102},[92,68272,64696],{"class":207},[92,68274,109],{"class":102},[92,68276,68277],{"class":94,"line":32650},[92,68278,2379],{"emptyLinePlaceholder":17},[92,68280,68281],{"class":94,"line":32656},[92,68282,68283],{"class":161},"        \u002F\u002F 下面大盒子模块\n",[92,68285,68286],{"class":94,"line":32676},[92,68287,68288],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id)\n",[92,68290,68291,68293,68295,68297,68299],{"class":94,"line":32682},[92,68292,61252],{"class":98},[92,68294,3011],{"class":151},[92,68296,13544],{"class":98},[92,68298,45548],{"class":98},[92,68300,68301],{"class":102},"e.target.dataset.id\n",[92,68303,68304,68306,68308,68310,68312,68314,68316,68318,68320],{"class":94,"line":32693},[92,68305,51907],{"class":102},[92,68307,54381],{"class":1942},[92,68309,103],{"class":102},[92,68311,64744],{"class":207},[92,68313,56985],{"class":102},[92,68315,56988],{"class":1942},[92,68317,103],{"class":102},[92,68319,64696],{"class":207},[92,68321,109],{"class":102},[92,68323,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346,68348],{"class":94,"line":32699},[92,68325,51907],{"class":102},[92,68327,54381],{"class":1942},[92,68329,103],{"class":102},[92,68331,64770],{"class":207},[92,68333,544],{"class":102},[92,68335,45548],{"class":98},[92,68337,25100],{"class":151},[92,68339,57014],{"class":207},[92,68341,56985],{"class":102},[92,68343,5314],{"class":1942},[92,68345,103],{"class":102},[92,68347,64696],{"class":207},[92,68349,109],{"class":102},[92,68351,68352],{"class":94,"line":32705},[92,68353,2379],{"emptyLinePlaceholder":17},[92,68355,68356],{"class":94,"line":32711},[92,68357,52380],{"class":102},[92,68359,68360],{"class":94,"line":32717},[92,68361,33443],{"class":102},[92,68363,68364,68366,68368],{"class":94,"line":32723},[92,68365,52399],{"class":102},[92,68367,51795],{"class":51282},[92,68369,51289],{"class":102},[92,68371,68372,68374,68376],{"class":94,"line":32729},[92,68373,51767],{"class":102},[92,68375,51782],{"class":51282},[92,68377,51289],{"class":102},[92,68379,68380],{"class":94,"line":32735},[92,68381,2379],{"emptyLinePlaceholder":17},[92,68383,68384,68386,68388],{"class":94,"line":32755},[92,68385,51767],{"class":102},[92,68387,50617],{"class":51282},[92,68389,51289],{"class":102},[63,68391,68393],{"id":68392},"_333-页面加载事件","3.3.3 页面加载事件",[46,68395,68396],{},[49,68397,68398],{},"load",[38,68400,68401],{},[1441,68402],{"alt":10,"src":68403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[38,68405,68406],{},"window代表整个窗口，比document还要大",[38,68408,68409],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[38,68411,68412],{},"img.addEventListener('load', function () {",[38,68414,68415],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[38,68417,52446],{},[46,68419,68420],{"start":11},[49,68421,68422],{},"DOMContentLoaded",[38,68424,68425],{},[1441,68426],{"alt":10,"src":68427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[38,68429,68430],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[63,68432,68434],{"id":68433},"_334-元素滚动事件","3.3.4 元素滚动事件",[38,68436,68437],{},[1441,68438],{"alt":10,"src":68439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[38,68441,68442],{},[1441,68443],{"alt":10,"src":68444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[38,68446,68447],{},[1441,68448],{"alt":10,"src":68449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[38,68451,68452],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[38,68454,68455],{},"获得的是数字型数据，不带单位",[38,68457,68458],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[38,68460,68461],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[38,68463,68464],{},"它是通过document.documentElement来获取",[38,68466,68467],{},[1441,68468],{"alt":10,"src":68469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[38,68471,68472],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[63,68474,68476],{"id":68475},"_335-页面缩放事件","3.3.5 页面缩放事件",[38,68478,68479],{},[1441,68480],{"alt":10,"src":68481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[38,68483,68484],{},[1441,68485],{"alt":10,"src":68486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[63,68488,68490],{"id":68489},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[38,68492,68493],{},[1441,68494],{"alt":10,"src":68495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[38,68497,68498],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[38,68500,68501],{},[1441,68502],{"alt":10,"src":68503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[38,68505,68506],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[38,68508,68509],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[38,68511,68512],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[38,68514,68515],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[38,68517,68518],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[38,68520,68521],{},[1441,68522],{"alt":10,"src":68523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[38,68525,68526],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[38,68528,68529],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[38,68531,68532],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[38,68534,68535],{},"e.pageX-box.getBoundingClientRect()",[63,68537,68539],{"id":68538},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[38,68541,68542],{},[1441,68543],{"alt":10,"src":68544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[38,68546,68547],{},"这个是相对于视口来说的，它是个方法，不是属性值",[63,68549,68551],{"id":68550},"_338-总结","3.3.8 总结",[38,68553,68554],{},[1441,68555],{"alt":10,"src":68556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[38,68558,68559],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[38,68561,68562],{},"修改盒子的宽高只能通过width和height来实现",[63,68564,68566],{"id":68565},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[83,68568,68570],{"className":50615,"code":68569,"language":50617,"meta":10,"style":10},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[89,68571,68572,68577,68582,68587,68592],{"__ignoreMap":10},[92,68573,68574],{"class":94,"line":95},[92,68575,68576],{"class":102},"\u002F* 页面滑动 *\u002F\n",[92,68578,68579],{"class":94,"line":11},[92,68580,68581],{"class":102},"html {\n",[92,68583,68584],{"class":94,"line":1158},[92,68585,68586],{"class":102},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[92,68588,68589],{"class":94,"line":1173},[92,68590,68591],{"class":102},"  scroll-behavior: smooth;\n",[92,68593,68594],{"class":94,"line":1179},[92,68595,1544],{"class":102},[38,68597,68598],{},"默认是auto",[63,68600,68602],{"id":68601},"_3310-日期对象","3.3.10 日期对象",[21978,68604,68606],{"id":68605},"_33101-实例化","3.3.10.1 实例化",[38,68608,68609],{},[1441,68610],{"alt":10,"src":68611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21978,68613,68615],{"id":68614},"_33102-时期对象方法","3.3.10.2 时期对象方法",[38,68617,68618],{},[1441,68619],{"alt":10,"src":68620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[38,68622,68623],{},"月份+1",[38,68625,68626],{},"老外认为第一天为0，星期天",[38,68628,68629],{},"方法使用的时候必须要跟括号",[38,68631,68632],{},"快速获得日期",[38,68634,68635],{},"\u002F\u002F 得到年月日",[38,68637,68638],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[38,68640,68641],{},"\u002F\u002F 得到当地日期",[38,68643,68644],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[38,68646,68647],{},"\u002F\u002F 得到当地时间",[38,68649,68650],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[38,68652,68653],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[38,68655,68656],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51795,68658,68659],{},"\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,68661,68662],{},"学会去封装函数！",[21978,68664,68666],{"id":68665},"_33103-时间戳","3.3.10.3 时间戳",[38,68668,68669],{},[1441,68670],{"alt":10,"src":68671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[38,68673,68674],{},[1441,68675],{"alt":10,"src":68676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[38,68678,68679],{},"三种方法记住一个就可以",[63,68681,68683],{"id":68682},"_3311-节点操作","3.3.11 节点操作",[21978,68685,68687],{"id":68686},"_33111-dom节点","3.3.11.1 DOM节点",[38,68689,68690],{},[1441,68691],{"alt":10,"src":68692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[38,68694,68695],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21978,68697,68699],{"id":68698},"_33112-查找节点","3.3.11.2 查找节点",[38,68701,68702],{},"前边的document.querySelector()是获取的元素",[38,68704,68705],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[38,68707,68708],{},[1441,68709],{"alt":10,"src":68710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[46,68712,68713],{},[49,68714,68715],{},"父节点",[38,68717,68718],{},[1441,68719],{"alt":10,"src":68720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[46,68722,68723],{"start":11},[49,68724,68725],{},"子节点",[38,68727,68728],{},[1441,68729],{"alt":10,"src":68730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[38,68732,68733],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[38,68735,68736],{},"children获得的是伪数组，是亲儿子",[46,68738,68739],{"start":1158},[49,68740,68741],{},"兄弟节点",[38,68743,68744],{},[1441,68745],{"alt":10,"src":68746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21978,68748,68750],{"id":68749},"_33113-增加节点","3.3.11.3 增加节点",[38,68752,68753],{},[1441,68754],{"alt":10,"src":68755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[38,68757,68758],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[38,68760,68761],{},[1441,68762],{"alt":10,"src":68763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[38,68765,68766],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[38,68768,68769],{},"下面是写法的部分展示，就按照下边的格式来写",[38,68771,68772],{},"例：",[51795,68774,68775],{},"\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,68777,68778],{},[1441,68779],{"alt":10,"src":68780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[38,68782,68783],{},"false只克隆标签，里边的内容不会克隆过来",[83,68785,68787],{"className":50615,"code":68786,"language":50617,"meta":10,"style":10},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[89,68788,68789],{"__ignoreMap":10},[92,68790,68791],{"class":94,"line":95},[92,68792,68786],{"class":102},[21978,68794,68796],{"id":68795},"_33114-删除节点","3.3.11.4 删除节点",[38,68798,68799],{},[1441,68800],{"alt":10,"src":68801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[38,68803,68804],{},"父亲删儿子",[38,68806,68807],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[63,68809,68811],{"id":68810},"_3312-m端事件","3.3.12 M端事件",[38,68813,68814],{},"M端就是移动端",[38,68816,68817],{},[1441,68818],{"alt":10,"src":68819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[63,68821,68823],{"id":68822},"_3313-插件","3.3.13 插件",[38,68825,68826],{},"要熟悉官网！！！",[38,68828,68829],{},[341,68830,68831],{"href":68831,"rel":68832},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23846],[38,68834,68835],{},[341,68836,68837],{"href":68837,"rel":68838},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23846],[63,68840,68842],{"id":68841},"_3314-学生信息表","3.3.14 学生信息表",[46,68844,68845,68848,68851,68854,68857,68860,68863,68866],{},[49,68846,68847],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[49,68849,68850],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[49,68852,68853],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[49,68855,68856],{},"用好表单元素自带的属性，value,name等",[49,68858,68859],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[49,68861,68862],{},"不要忘记事件对象",[49,68864,68865],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[49,68867,68868],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[38,68870,68871],{},"结构：",[83,68873,68875],{"className":50615,"code":68874,"language":50617,"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,68876,68877,68887,68901,68905,68913,68927,68947,68968,68981,69005,69013,69017,69025,69038,69059,69087,69115,69120,69142,69162,69181,69189,69217,69239,69259,69279,69299,69319,69339,69347,69367,69375,69379,69392,69400,69408,69416,69429,69442,69455,69468,69481,69494,69507,69515,69523,69531,69536,69541,69546,69551,69556,69561,69566,69571,69576,69581,69586,69591,69596,69604,69612,69620,69624,69644,69663,69683,69703,69723,69743,69747,69752,69772,69777,69787,69792,69797,69817,69839,69844,69854,69858,69862,69867,69872,69901,69915,69930,69934,69938,69942,69947,69958,69971,69976,69981,69986,69991,69996,70000,70005,70010,70019,70024,70029,70041,70046,70053,70057,70062,70072,70077,70087,70092,70120,70141,70151,70171,70189,70206,70223,70240,70257,70261,70271,70276,70281,70286,70297,70301,70305,70309,70314,70319,70340,70352,70357,70362,70367,70381,70386,70393,70397,70401,70409,70413,70421,70425],{"__ignoreMap":10},[92,68878,68879,68881,68883,68885],{"class":94,"line":95},[92,68880,51279],{"class":102},[92,68882,51283],{"class":51282},[92,68884,51286],{"class":1942},[92,68886,51289],{"class":102},[92,68888,68889,68891,68893,68895,68897,68899],{"class":94,"line":11},[92,68890,1013],{"class":102},[92,68892,50617],{"class":51282},[92,68894,51298],{"class":1942},[92,68896,148],{"class":102},[92,68898,51303],{"class":207},[92,68900,51289],{"class":102},[92,68902,68903],{"class":94,"line":1158},[92,68904,2379],{"emptyLinePlaceholder":17},[92,68906,68907,68909,68911],{"class":94,"line":1173},[92,68908,1013],{"class":102},[92,68910,51316],{"class":51282},[92,68912,51289],{"class":102},[92,68914,68915,68917,68919,68921,68923,68925],{"class":94,"line":1179},[92,68916,52126],{"class":102},[92,68918,51326],{"class":51282},[92,68920,51329],{"class":1942},[92,68922,148],{"class":102},[92,68924,51334],{"class":207},[92,68926,59109],{"class":102},[92,68928,68929,68931,68933,68935,68937,68939,68941,68943,68945],{"class":94,"line":1193},[92,68930,52126],{"class":102},[92,68932,51326],{"class":51282},[92,68934,14900],{"class":1942},[92,68936,148],{"class":102},[92,68938,51373],{"class":207},[92,68940,51353],{"class":1942},[92,68942,148],{"class":102},[92,68944,51380],{"class":207},[92,68946,59109],{"class":102},[92,68948,68949,68951,68953,68955,68957,68959,68961,68963,68966],{"class":94,"line":1199},[92,68950,52126],{"class":102},[92,68952,51326],{"class":51282},[92,68954,51345],{"class":1942},[92,68956,148],{"class":102},[92,68958,51350],{"class":207},[92,68960,51353],{"class":1942},[92,68962,148],{"class":102},[92,68964,68965],{"class":207},"\"ie=edge\"",[92,68967,59109],{"class":102},[92,68969,68970,68972,68974,68977,68979],{"class":94,"line":1290},[92,68971,52126],{"class":102},[92,68973,51389],{"class":51282},[92,68975,68976],{"class":102},">学生信息管理\u003C\u002F",[92,68978,51389],{"class":51282},[92,68980,51289],{"class":102},[92,68982,68983,68985,68988,68991,68993,68996,68998,69000,69003],{"class":94,"line":1296},[92,68984,52126],{"class":102},[92,68986,68987],{"class":51282},"link",[92,68989,68990],{"class":1942}," rel",[92,68992,148],{"class":102},[92,68994,68995],{"class":207},"\"stylesheet\"",[92,68997,61039],{"class":1942},[92,68999,148],{"class":102},[92,69001,69002],{"class":207},"\"css\u002Findex.css\"",[92,69004,59109],{"class":102},[92,69006,69007,69009,69011],{"class":94,"line":1308},[92,69008,51767],{"class":102},[92,69010,51316],{"class":51282},[92,69012,51289],{"class":102},[92,69014,69015],{"class":94,"line":1591},[92,69016,2379],{"emptyLinePlaceholder":17},[92,69018,69019,69021,69023],{"class":94,"line":1596},[92,69020,1013],{"class":102},[92,69022,51782],{"class":51282},[92,69024,51289],{"class":102},[92,69026,69027,69029,69031,69034,69036],{"class":94,"line":1602},[92,69028,52126],{"class":102},[92,69030,29],{"class":51282},[92,69032,69033],{"class":102},">新增学员\u003C\u002F",[92,69035,29],{"class":51282},[92,69037,51289],{"class":102},[92,69039,69040,69042,69044,69046,69048,69050,69053,69055,69057],{"class":94,"line":1607},[92,69041,52126],{"class":102},[92,69043,66607],{"class":51282},[92,69045,53468],{"class":1942},[92,69047,148],{"class":102},[92,69049,62646],{"class":207},[92,69051,69052],{"class":1942}," autocomplete",[92,69054,148],{"class":102},[92,69056,31758],{"class":207},[92,69058,51289],{"class":102},[92,69060,69061,69064,69066,69068,69070,69072,69074,69076,69079,69081,69083,69085],{"class":94,"line":1621},[92,69062,69063],{"class":102},"    姓名：\u003C",[92,69065,53803],{"class":51282},[92,69067,53806],{"class":1942},[92,69069,148],{"class":102},[92,69071,62681],{"class":207},[92,69073,53468],{"class":1942},[92,69075,148],{"class":102},[92,69077,69078],{"class":207},"\"uname\"",[92,69080,14900],{"class":1942},[92,69082,148],{"class":102},[92,69084,69078],{"class":207},[92,69086,59109],{"class":102},[92,69088,69089,69092,69094,69096,69098,69100,69102,69104,69107,69109,69111,69113],{"class":94,"line":1626},[92,69090,69091],{"class":102},"    年龄：\u003C",[92,69093,53803],{"class":51282},[92,69095,53806],{"class":1942},[92,69097,148],{"class":102},[92,69099,62681],{"class":207},[92,69101,53468],{"class":1942},[92,69103,148],{"class":102},[92,69105,69106],{"class":207},"\"age\"",[92,69108,14900],{"class":1942},[92,69110,148],{"class":102},[92,69112,69106],{"class":207},[92,69114,59109],{"class":102},[92,69116,69117],{"class":94,"line":1632},[92,69118,69119],{"class":102},"    性别:\n",[92,69121,69122,69124,69127,69129,69131,69134,69136,69138,69140],{"class":94,"line":1653},[92,69123,51323],{"class":102},[92,69125,69126],{"class":51282},"select",[92,69128,14900],{"class":1942},[92,69130,148],{"class":102},[92,69132,69133],{"class":207},"\"gender\"",[92,69135,53468],{"class":1942},[92,69137,148],{"class":102},[92,69139,69133],{"class":207},[92,69141,51289],{"class":102},[92,69143,69144,69146,69149,69151,69153,69155,69158,69160],{"class":94,"line":1658},[92,69145,55216],{"class":102},[92,69147,69148],{"class":51282},"option",[92,69150,66633],{"class":1942},[92,69152,148],{"class":102},[92,69154,9941],{"class":207},[92,69156,69157],{"class":102},">男\u003C\u002F",[92,69159,69148],{"class":51282},[92,69161,51289],{"class":102},[92,69163,69164,69166,69168,69170,69172,69174,69177,69179],{"class":94,"line":1672},[92,69165,55216],{"class":102},[92,69167,69148],{"class":51282},[92,69169,66633],{"class":1942},[92,69171,148],{"class":102},[92,69173,10010],{"class":207},[92,69175,69176],{"class":102},">女\u003C\u002F",[92,69178,69148],{"class":51282},[92,69180,51289],{"class":102},[92,69182,69183,69185,69187],{"class":94,"line":1677},[92,69184,51758],{"class":102},[92,69186,69126],{"class":51282},[92,69188,51289],{"class":102},[92,69190,69191,69194,69196,69198,69200,69202,69204,69206,69209,69211,69213,69215],{"class":94,"line":1706},[92,69192,69193],{"class":102},"    薪资：\u003C",[92,69195,53803],{"class":51282},[92,69197,53806],{"class":1942},[92,69199,148],{"class":102},[92,69201,62681],{"class":207},[92,69203,53468],{"class":1942},[92,69205,148],{"class":102},[92,69207,69208],{"class":207},"\"salary\"",[92,69210,14900],{"class":1942},[92,69212,148],{"class":102},[92,69214,69208],{"class":207},[92,69216,59109],{"class":102},[92,69218,69219,69222,69224,69226,69228,69231,69233,69235,69237],{"class":94,"line":1711},[92,69220,69221],{"class":102},"    就业城市：\u003C",[92,69223,69126],{"class":51282},[92,69225,14900],{"class":1942},[92,69227,148],{"class":102},[92,69229,69230],{"class":207},"\"city\"",[92,69232,53468],{"class":1942},[92,69234,148],{"class":102},[92,69236,69230],{"class":207},[92,69238,51289],{"class":102},[92,69240,69241,69243,69245,69247,69249,69252,69255,69257],{"class":94,"line":1728},[92,69242,55216],{"class":102},[92,69244,69148],{"class":51282},[92,69246,66633],{"class":1942},[92,69248,148],{"class":102},[92,69250,69251],{"class":207},"\"北京\"",[92,69253,69254],{"class":102},">北京\u003C\u002F",[92,69256,69148],{"class":51282},[92,69258,51289],{"class":102},[92,69260,69261,69263,69265,69267,69269,69272,69275,69277],{"class":94,"line":1733},[92,69262,55216],{"class":102},[92,69264,69148],{"class":51282},[92,69266,66633],{"class":1942},[92,69268,148],{"class":102},[92,69270,69271],{"class":207},"\"上海\"",[92,69273,69274],{"class":102},">上海\u003C\u002F",[92,69276,69148],{"class":51282},[92,69278,51289],{"class":102},[92,69280,69281,69283,69285,69287,69289,69292,69295,69297],{"class":94,"line":1738},[92,69282,55216],{"class":102},[92,69284,69148],{"class":51282},[92,69286,66633],{"class":1942},[92,69288,148],{"class":102},[92,69290,69291],{"class":207},"\"广州\"",[92,69293,69294],{"class":102},">广州\u003C\u002F",[92,69296,69148],{"class":51282},[92,69298,51289],{"class":102},[92,69300,69301,69303,69305,69307,69309,69312,69315,69317],{"class":94,"line":1743},[92,69302,55216],{"class":102},[92,69304,69148],{"class":51282},[92,69306,66633],{"class":1942},[92,69308,148],{"class":102},[92,69310,69311],{"class":207},"\"深圳\"",[92,69313,69314],{"class":102},">深圳\u003C\u002F",[92,69316,69148],{"class":51282},[92,69318,51289],{"class":102},[92,69320,69321,69323,69325,69327,69329,69332,69335,69337],{"class":94,"line":1757},[92,69322,55216],{"class":102},[92,69324,69148],{"class":51282},[92,69326,66633],{"class":1942},[92,69328,148],{"class":102},[92,69330,69331],{"class":207},"\"曹县\"",[92,69333,69334],{"class":102},">曹县\u003C\u002F",[92,69336,69148],{"class":51282},[92,69338,51289],{"class":102},[92,69340,69341,69343,69345],{"class":94,"line":1762},[92,69342,51758],{"class":102},[92,69344,69126],{"class":51282},[92,69346,51289],{"class":102},[92,69348,69349,69351,69353,69355,69357,69360,69363,69365],{"class":94,"line":2556},[92,69350,51323],{"class":102},[92,69352,53869],{"class":51282},[92,69354,53468],{"class":1942},[92,69356,148],{"class":102},[92,69358,69359],{"class":207},"\"add\"",[92,69361,69362],{"class":102},">录入\u003C\u002F",[92,69364,53869],{"class":51282},[92,69366,51289],{"class":102},[92,69368,69369,69371,69373],{"class":94,"line":2570},[92,69370,52399],{"class":102},[92,69372,66607],{"class":51282},[92,69374,51289],{"class":102},[92,69376,69377],{"class":94,"line":2578},[92,69378,2379],{"emptyLinePlaceholder":17},[92,69380,69381,69383,69385,69388,69390],{"class":94,"line":2583},[92,69382,52126],{"class":102},[92,69384,29],{"class":51282},[92,69386,69387],{"class":102},">就业榜\u003C\u002F",[92,69389,29],{"class":51282},[92,69391,51289],{"class":102},[92,69393,69394,69396,69398],{"class":94,"line":2589},[92,69395,52126],{"class":102},[92,69397,240],{"class":51282},[92,69399,51289],{"class":102},[92,69401,69402,69404,69406],{"class":94,"line":2595},[92,69403,51323],{"class":102},[92,69405,243],{"class":51282},[92,69407,51289],{"class":102},[92,69409,69410,69412,69414],{"class":94,"line":2600},[92,69411,55216],{"class":102},[92,69413,246],{"class":51282},[92,69415,51289],{"class":102},[92,69417,69418,69420,69422,69425,69427],{"class":94,"line":7928},[92,69419,55284],{"class":102},[92,69421,249],{"class":51282},[92,69423,69424],{"class":102},">序号\u003C\u002F",[92,69426,249],{"class":51282},[92,69428,51289],{"class":102},[92,69430,69431,69433,69435,69438,69440],{"class":94,"line":7952},[92,69432,55284],{"class":102},[92,69434,249],{"class":51282},[92,69436,69437],{"class":102},">姓名\u003C\u002F",[92,69439,249],{"class":51282},[92,69441,51289],{"class":102},[92,69443,69444,69446,69448,69451,69453],{"class":94,"line":7957},[92,69445,55284],{"class":102},[92,69447,249],{"class":51282},[92,69449,69450],{"class":102},">年龄\u003C\u002F",[92,69452,249],{"class":51282},[92,69454,51289],{"class":102},[92,69456,69457,69459,69461,69464,69466],{"class":94,"line":7963},[92,69458,55284],{"class":102},[92,69460,249],{"class":51282},[92,69462,69463],{"class":102},">性别\u003C\u002F",[92,69465,249],{"class":51282},[92,69467,51289],{"class":102},[92,69469,69470,69472,69474,69477,69479],{"class":94,"line":7990},[92,69471,55284],{"class":102},[92,69473,249],{"class":51282},[92,69475,69476],{"class":102},">薪资\u003C\u002F",[92,69478,249],{"class":51282},[92,69480,51289],{"class":102},[92,69482,69483,69485,69487,69490,69492],{"class":94,"line":7995},[92,69484,55284],{"class":102},[92,69486,249],{"class":51282},[92,69488,69489],{"class":102},">就业城市\u003C\u002F",[92,69491,249],{"class":51282},[92,69493,51289],{"class":102},[92,69495,69496,69498,69500,69503,69505],{"class":94,"line":8001},[92,69497,55284],{"class":102},[92,69499,249],{"class":51282},[92,69501,69502],{"class":102},">操作\u003C\u002F",[92,69504,249],{"class":51282},[92,69506,51289],{"class":102},[92,69508,69509,69511,69513],{"class":94,"line":8013},[92,69510,55389],{"class":102},[92,69512,246],{"class":51282},[92,69514,51289],{"class":102},[92,69516,69517,69519,69521],{"class":94,"line":8025},[92,69518,51758],{"class":102},[92,69520,243],{"class":51282},[92,69522,51289],{"class":102},[92,69524,69525,69527,69529],{"class":94,"line":8037},[92,69526,51323],{"class":102},[92,69528,287],{"class":51282},[92,69530,51289],{"class":102},[92,69532,69533],{"class":94,"line":9696},[92,69534,69535],{"class":161},"      \u003C!-- \n",[92,69537,69538],{"class":94,"line":9721},[92,69539,69540],{"class":161},"        \u003Ctr>\n",[92,69542,69543],{"class":94,"line":9744},[92,69544,69545],{"class":161},"          \u003Ctd>1001\u003C\u002Ftd>\n",[92,69547,69548],{"class":94,"line":9768},[92,69549,69550],{"class":161},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[92,69552,69553],{"class":94,"line":9773},[92,69554,69555],{"class":161},"          \u003Ctd>19\u003C\u002Ftd>\n",[92,69557,69558],{"class":94,"line":9778},[92,69559,69560],{"class":161},"          \u003Ctd>男\u003C\u002Ftd>\n",[92,69562,69563],{"class":94,"line":9783},[92,69564,69565],{"class":161},"          \u003Ctd>15000\u003C\u002Ftd>\n",[92,69567,69568],{"class":94,"line":9792},[92,69569,69570],{"class":161},"          \u003Ctd>上海\u003C\u002Ftd>\n",[92,69572,69573],{"class":94,"line":9797},[92,69574,69575],{"class":161},"          \u003Ctd>\n",[92,69577,69578],{"class":94,"line":9803},[92,69579,69580],{"class":161},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[92,69582,69583],{"class":94,"line":9824},[92,69584,69585],{"class":161},"          \u003C\u002Ftd>\n",[92,69587,69588],{"class":94,"line":9830},[92,69589,69590],{"class":161},"        \u003C\u002Ftr> \n",[92,69592,69593],{"class":94,"line":9844},[92,69594,69595],{"class":161},"        -->\n",[92,69597,69598,69600,69602],{"class":94,"line":9850},[92,69599,51758],{"class":102},[92,69601,287],{"class":51282},[92,69603,51289],{"class":102},[92,69605,69606,69608,69610],{"class":94,"line":9877},[92,69607,52399],{"class":102},[92,69609,240],{"class":51282},[92,69611,51289],{"class":102},[92,69613,69614,69616,69618],{"class":94,"line":9886},[92,69615,52126],{"class":102},[92,69617,51795],{"class":51282},[92,69619,51289],{"class":102},[92,69621,69622],{"class":94,"line":9892},[92,69623,59940],{"class":161},[92,69625,69626,69628,69631,69633,69635,69637,69639,69642],{"class":94,"line":9900},[92,69627,11201],{"class":98},[92,69629,69630],{"class":151}," uname",[92,69632,13544],{"class":98},[92,69634,54378],{"class":102},[92,69636,54381],{"class":1942},[92,69638,103],{"class":102},[92,69640,69641],{"class":207},"'.uname'",[92,69643,109],{"class":102},[92,69645,69646,69648,69650,69652,69654,69656,69658,69661],{"class":94,"line":9905},[92,69647,11201],{"class":98},[92,69649,15669],{"class":151},[92,69651,13544],{"class":98},[92,69653,54378],{"class":102},[92,69655,54381],{"class":1942},[92,69657,103],{"class":102},[92,69659,69660],{"class":207},"'.age'",[92,69662,109],{"class":102},[92,69664,69665,69667,69670,69672,69674,69676,69678,69681],{"class":94,"line":16584},[92,69666,11201],{"class":98},[92,69668,69669],{"class":151}," gender",[92,69671,13544],{"class":98},[92,69673,54378],{"class":102},[92,69675,54381],{"class":1942},[92,69677,103],{"class":102},[92,69679,69680],{"class":207},"'.gender'",[92,69682,109],{"class":102},[92,69684,69685,69687,69690,69692,69694,69696,69698,69701],{"class":94,"line":16590},[92,69686,11201],{"class":98},[92,69688,69689],{"class":151}," salary",[92,69691,13544],{"class":98},[92,69693,54378],{"class":102},[92,69695,54381],{"class":1942},[92,69697,103],{"class":102},[92,69699,69700],{"class":207},"'.salary'",[92,69702,109],{"class":102},[92,69704,69705,69707,69710,69712,69714,69716,69718,69721],{"class":94,"line":16613},[92,69706,11201],{"class":98},[92,69708,69709],{"class":151}," city",[92,69711,13544],{"class":98},[92,69713,54378],{"class":102},[92,69715,54381],{"class":1942},[92,69717,103],{"class":102},[92,69719,69720],{"class":207},"'.city'",[92,69722,109],{"class":102},[92,69724,69725,69727,69730,69732,69734,69736,69738,69741],{"class":94,"line":16619},[92,69726,11201],{"class":98},[92,69728,69729],{"class":151}," tbody",[92,69731,13544],{"class":98},[92,69733,54378],{"class":102},[92,69735,54381],{"class":1942},[92,69737,103],{"class":102},[92,69739,69740],{"class":207},"'tbody'",[92,69742,109],{"class":102},[92,69744,69745],{"class":94,"line":16642},[92,69746,2379],{"emptyLinePlaceholder":17},[92,69748,69749],{"class":94,"line":16656},[92,69750,69751],{"class":161},"    \u002F\u002F 获取所有带有name属性的元素\n",[92,69753,69754,69756,69759,69761,69763,69765,69767,69770],{"class":94,"line":16676},[92,69755,11201],{"class":98},[92,69757,69758],{"class":151}," items",[92,69760,13544],{"class":98},[92,69762,54378],{"class":102},[92,69764,55663],{"class":1942},[92,69766,103],{"class":102},[92,69768,69769],{"class":207},"'[name]'",[92,69771,109],{"class":102},[92,69773,69774],{"class":94,"line":16682},[92,69775,69776],{"class":161},"    \u002F\u002F 声明一个空的数组\n",[92,69778,69779,69781,69783,69785],{"class":94,"line":16693},[92,69780,11201],{"class":98},[92,69782,57677],{"class":151},[92,69784,13544],{"class":98},[92,69786,51820],{"class":102},[92,69788,69789],{"class":94,"line":16716},[92,69790,69791],{"class":161},"    \u002F\u002F 1.录入模块\n",[92,69793,69794],{"class":94,"line":16738},[92,69795,69796],{"class":161},"    \u002F\u002F 1.1这是一个表单提交事件\n",[92,69798,69799,69801,69804,69806,69808,69810,69812,69815],{"class":94,"line":16743},[92,69800,11201],{"class":98},[92,69802,69803],{"class":151}," info",[92,69805,13544],{"class":98},[92,69807,54378],{"class":102},[92,69809,54381],{"class":1942},[92,69811,103],{"class":102},[92,69813,69814],{"class":207},"'.info'",[92,69816,109],{"class":102},[92,69818,69819,69822,69824,69826,69829,69831,69833,69835,69837],{"class":94,"line":16749},[92,69820,69821],{"class":102},"    info.",[92,69823,57795],{"class":1942},[92,69825,103],{"class":102},[92,69827,69828],{"class":207},"'submit'",[92,69830,12415],{"class":102},[92,69832,54431],{"class":98},[92,69834,1637],{"class":102},[92,69836,177],{"class":5196},[92,69838,12422],{"class":102},[92,69840,69841],{"class":94,"line":16763},[92,69842,69843],{"class":161},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[92,69845,69846,69849,69852],{"class":94,"line":16776},[92,69847,69848],{"class":102},"      e.",[92,69850,69851],{"class":1942},"preventDefault",[92,69853,1955],{"class":102},[92,69855,69856],{"class":94,"line":16781},[92,69857,59994],{"class":161},[92,69859,69860],{"class":94,"line":16795},[92,69861,2379],{"emptyLinePlaceholder":17},[92,69863,69864],{"class":94,"line":16800},[92,69865,69866],{"class":161},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[92,69868,69869],{"class":94,"line":16806},[92,69870,69871],{"class":161},"      \u002F\u002F 先遍历循环\n",[92,69873,69874,69876,69878,69880,69882,69884,69886,69888,69890,69893,69895,69897,69899],{"class":94,"line":16811},[92,69875,52266],{"class":98},[92,69877,1637],{"class":102},[92,69879,51829],{"class":98},[92,69881,9418],{"class":102},[92,69883,148],{"class":98},[92,69885,4072],{"class":151},[92,69887,9425],{"class":102},[92,69889,1013],{"class":98},[92,69891,69892],{"class":102}," items.",[92,69894,51950],{"class":151},[92,69896,3193],{"class":102},[92,69898,2271],{"class":98},[92,69900,12422],{"class":102},[92,69902,69903,69905,69908,69910,69913],{"class":94,"line":16825},[92,69904,2476],{"class":98},[92,69906,69907],{"class":102}," (items[i].value ",[92,69909,54468],{"class":98},[92,69911,69912],{"class":207}," ''",[92,69914,12422],{"class":102},[92,69916,69917,69920,69923,69925,69928],{"class":94,"line":16830},[92,69918,69919],{"class":98},"          return",[92,69921,69922],{"class":1942}," alert",[92,69924,103],{"class":102},[92,69926,69927],{"class":207},"'输入内容不能为空'",[92,69929,109],{"class":102},[92,69931,69932],{"class":94,"line":16835},[92,69933,2508],{"class":102},[92,69935,69936],{"class":94,"line":16849},[92,69937,52380],{"class":102},[92,69939,69940],{"class":94,"line":16861},[92,69941,2379],{"emptyLinePlaceholder":17},[92,69943,69944],{"class":94,"line":16866},[92,69945,69946],{"class":161},"      \u002F\u002F 创建新的对象\n",[92,69948,69949,69951,69954,69956],{"class":94,"line":16879},[92,69950,58210],{"class":98},[92,69952,69953],{"class":151}," obj",[92,69955,13544],{"class":98},[92,69957,15552],{"class":102},[92,69959,69960,69963,69965,69967,69969],{"class":94,"line":16884},[92,69961,69962],{"class":102},"        stuID: arr.",[92,69964,51950],{"class":151},[92,69966,45548],{"class":98},[92,69968,25100],{"class":151},[92,69970,31448],{"class":102},[92,69972,69973],{"class":94,"line":16889},[92,69974,69975],{"class":102},"        uname: uname.value,\n",[92,69977,69978],{"class":94,"line":16894},[92,69979,69980],{"class":102},"        age: age.value,\n",[92,69982,69983],{"class":94,"line":16907},[92,69984,69985],{"class":102},"        gender: gender.value,\n",[92,69987,69988],{"class":94,"line":16912},[92,69989,69990],{"class":102},"        salary: salary.value,\n",[92,69992,69993],{"class":94,"line":32615},[92,69994,69995],{"class":102},"        city: city.value\n",[92,69997,69998],{"class":94,"line":32621},[92,69999,52380],{"class":102},[92,70001,70002],{"class":94,"line":32627},[92,70003,70004],{"class":161},"      \u002F\u002F console.log(obj);\n",[92,70006,70007],{"class":94,"line":32633},[92,70008,70009],{"class":161},"      \u002F\u002F 追加到数组里面\n",[92,70011,70012,70014,70016],{"class":94,"line":32639},[92,70013,57989],{"class":102},[92,70015,51866],{"class":1942},[92,70017,70018],{"class":102},"(obj)\n",[92,70020,70021],{"class":94,"line":32650},[92,70022,70023],{"class":161},"      \u002F\u002F console.log(arr);\n",[92,70025,70026],{"class":94,"line":32656},[92,70027,70028],{"class":161},"      \u002F\u002F 清空表单  reset重置表单\n",[92,70030,70031,70034,70036,70039],{"class":94,"line":32676},[92,70032,70033],{"class":151},"      this",[92,70035,661],{"class":102},[92,70037,70038],{"class":1942},"reset",[92,70040,1955],{"class":102},[92,70042,70043],{"class":94,"line":32682},[92,70044,70045],{"class":161},"      \u002F\u002F 调用渲染函数\n",[92,70047,70048,70051],{"class":94,"line":32693},[92,70049,70050],{"class":1942},"      render",[92,70052,1955],{"class":102},[92,70054,70055],{"class":94,"line":32699},[92,70056,33443],{"class":102},[92,70058,70059],{"class":94,"line":32705},[92,70060,70061],{"class":161},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[92,70063,70064,70067,70070],{"class":94,"line":32711},[92,70065,70066],{"class":98},"    function",[92,70068,70069],{"class":1942}," render",[92,70071,10833],{"class":102},[92,70073,70074],{"class":94,"line":32717},[92,70075,70076],{"class":161},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[92,70078,70079,70082,70084],{"class":94,"line":32723},[92,70080,70081],{"class":102},"      tbody.innerHTML ",[92,70083,148],{"class":98},[92,70085,70086],{"class":207}," ''\n",[92,70088,70089],{"class":94,"line":32729},[92,70090,70091],{"class":161},"      \u002F\u002F 遍历数组\n",[92,70093,70094,70096,70098,70100,70102,70104,70106,70108,70110,70112,70114,70116,70118],{"class":94,"line":32735},[92,70095,52266],{"class":98},[92,70097,1637],{"class":102},[92,70099,51829],{"class":98},[92,70101,9418],{"class":102},[92,70103,148],{"class":98},[92,70105,4072],{"class":151},[92,70107,9425],{"class":102},[92,70109,1013],{"class":98},[92,70111,51947],{"class":102},[92,70113,51950],{"class":151},[92,70115,3193],{"class":102},[92,70117,2271],{"class":98},[92,70119,12422],{"class":102},[92,70121,70122,70124,70127,70129,70131,70134,70136,70139],{"class":94,"line":32755},[92,70123,61252],{"class":98},[92,70125,70126],{"class":151}," tr",[92,70128,13544],{"class":98},[92,70130,54378],{"class":102},[92,70132,70133],{"class":1942},"createElement",[92,70135,103],{"class":102},[92,70137,70138],{"class":207},"'tr'",[92,70140,109],{"class":102},[92,70142,70143,70146,70148],{"class":94,"line":32761},[92,70144,70145],{"class":102},"        tr.innerHTML ",[92,70147,148],{"class":98},[92,70149,70150],{"class":207}," `\n",[92,70152,70153,70156,70158,70160,70162,70165,70168],{"class":94,"line":32777},[92,70154,70155],{"class":207},"        \u003Ctd>${",[92,70157,3859],{"class":102},[92,70159,993],{"class":207},[92,70161,544],{"class":102},[92,70163,70164],{"class":207},"].",[92,70166,70167],{"class":102},"stuID",[92,70169,70170],{"class":207},"}\u003C\u002Ftd>\n",[92,70172,70173,70176,70178,70180,70182,70184,70187],{"class":94,"line":32783},[92,70174,70175],{"class":207},"          \u003Ctd>${",[92,70177,3859],{"class":102},[92,70179,993],{"class":207},[92,70181,544],{"class":102},[92,70183,70164],{"class":207},[92,70185,70186],{"class":102},"uname",[92,70188,70170],{"class":207},[92,70190,70191,70193,70195,70197,70199,70201,70204],{"class":94,"line":32797},[92,70192,70175],{"class":207},[92,70194,3859],{"class":102},[92,70196,993],{"class":207},[92,70198,544],{"class":102},[92,70200,70164],{"class":207},[92,70202,70203],{"class":102},"age",[92,70205,70170],{"class":207},[92,70207,70208,70210,70212,70214,70216,70218,70221],{"class":94,"line":32803},[92,70209,70175],{"class":207},[92,70211,3859],{"class":102},[92,70213,993],{"class":207},[92,70215,544],{"class":102},[92,70217,70164],{"class":207},[92,70219,70220],{"class":102},"gender",[92,70222,70170],{"class":207},[92,70224,70225,70227,70229,70231,70233,70235,70238],{"class":94,"line":32818},[92,70226,70175],{"class":207},[92,70228,3859],{"class":102},[92,70230,993],{"class":207},[92,70232,544],{"class":102},[92,70234,70164],{"class":207},[92,70236,70237],{"class":102},"salary",[92,70239,70170],{"class":207},[92,70241,70242,70244,70246,70248,70250,70252,70255],{"class":94,"line":32824},[92,70243,70175],{"class":207},[92,70245,3859],{"class":102},[92,70247,993],{"class":207},[92,70249,544],{"class":102},[92,70251,70164],{"class":207},[92,70253,70254],{"class":102},"city",[92,70256,70170],{"class":207},[92,70258,70259],{"class":94,"line":32833},[92,70260,69575],{"class":207},[92,70262,70263,70266,70268],{"class":94,"line":32839},[92,70264,70265],{"class":207},"            \u003Ca href=\"javascript:\" data-id=${",[92,70267,544],{"class":102},[92,70269,70270],{"class":207},"}>删除\u003C\u002Fa>\n",[92,70272,70273],{"class":94,"line":32848},[92,70274,70275],{"class":207},"          \u003C\u002Ftd> \n",[92,70277,70278],{"class":94,"line":32854},[92,70279,70280],{"class":207},"          `\n",[92,70282,70283],{"class":94,"line":32860},[92,70284,70285],{"class":161},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[92,70287,70288,70291,70294],{"class":94,"line":32869},[92,70289,70290],{"class":102},"        tbody.",[92,70292,70293],{"class":1942},"appendChild",[92,70295,70296],{"class":102},"(tr)\n",[92,70298,70299],{"class":94,"line":32875},[92,70300,52380],{"class":102},[92,70302,70303],{"class":94,"line":32886},[92,70304,2166],{"class":102},[92,70306,70307],{"class":94,"line":32892},[92,70308,2379],{"emptyLinePlaceholder":17},[92,70310,70311],{"class":94,"line":32911},[92,70312,70313],{"class":161},"    \u002F\u002F 3.删除委托\n",[92,70315,70316],{"class":94,"line":32917},[92,70317,70318],{"class":161},"    \u002F\u002F 3.1 事件委托 tbody\n",[92,70320,70321,70324,70326,70328,70330,70332,70334,70336,70338],{"class":94,"line":32928},[92,70322,70323],{"class":102},"    tbody.",[92,70325,57795],{"class":1942},[92,70327,103],{"class":102},[92,70329,57800],{"class":207},[92,70331,12415],{"class":102},[92,70333,54431],{"class":98},[92,70335,1637],{"class":102},[92,70337,177],{"class":5196},[92,70339,12422],{"class":102},[92,70341,70342,70344,70346,70348,70350],{"class":94,"line":32934},[92,70343,54462],{"class":98},[92,70345,67016],{"class":102},[92,70347,54468],{"class":98},[92,70349,68238],{"class":207},[92,70351,12422],{"class":102},[92,70353,70354],{"class":94,"line":32954},[92,70355,70356],{"class":161},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[92,70358,70359],{"class":94,"line":32970},[92,70360,70361],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id);\n",[92,70363,70364],{"class":94,"line":32976},[92,70365,70366],{"class":161},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[92,70368,70369,70372,70374,70377,70379],{"class":94,"line":32990},[92,70370,70371],{"class":102},"        arr.",[92,70373,57992],{"class":1942},[92,70375,70376],{"class":102},"(e.target.dataset.id, ",[92,70378,320],{"class":151},[92,70380,109],{"class":102},[92,70382,70383],{"class":94,"line":32996},[92,70384,70385],{"class":161},"        \u002F\u002F 重新渲染一次\n",[92,70387,70388,70391],{"class":94,"line":33002},[92,70389,70390],{"class":1942},"        render",[92,70392,1955],{"class":102},[92,70394,70395],{"class":94,"line":33013},[92,70396,52380],{"class":102},[92,70398,70399],{"class":94,"line":33019},[92,70400,33443],{"class":102},[92,70402,70403,70405,70407],{"class":94,"line":33025},[92,70404,52399],{"class":102},[92,70406,51795],{"class":51282},[92,70408,51289],{"class":102},[92,70410,70411],{"class":94,"line":33035},[92,70412,2379],{"emptyLinePlaceholder":17},[92,70414,70415,70417,70419],{"class":94,"line":33041},[92,70416,51767],{"class":102},[92,70418,51782],{"class":51282},[92,70420,51289],{"class":102},[92,70422,70423],{"class":94,"line":33052},[92,70424,2379],{"emptyLinePlaceholder":17},[92,70426,70427,70429,70431],{"class":94,"line":33058},[92,70428,51767],{"class":102},[92,70430,50617],{"class":51282},[92,70432,51289],{"class":102},[38,70434,70435],{},"样式：",[83,70437,70441],{"className":70438,"code":70439,"language":70440,"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,70442,70443,70448,70458,70467,70471,70475,70480,70490,70495,70499,70504,70514,70519,70528,70532,70536,70541,70546,70556,70566,70571,70575,70580,70589,70599,70604,70614,70624,70628,70633,70641,70645,70650,70655,70660,70668,70677,70681,70686,70695,70699,70704,70713,70717,70722,70731,70740,70748,70752,70757,70766,70776,70785,70795,70801,70810,70820,70830,70834,70839,70848,70856,70866,70874,70883,70892,70902,70910,70914,70919,70928],{"__ignoreMap":10},[92,70444,70445],{"class":94,"line":95},[92,70446,70447],{"class":102},"* {\n",[92,70449,70450,70453,70455],{"class":94,"line":11},[92,70451,70452],{"class":51282},"  margin",[92,70454,51419],{"class":102},[92,70456,70457],{"class":207},"0;\n",[92,70459,70460,70463,70465],{"class":94,"line":1158},[92,70461,70462],{"class":207},"  padding",[92,70464,51419],{"class":102},[92,70466,70457],{"class":207},[92,70468,70469],{"class":94,"line":1173},[92,70470,1544],{"class":102},[92,70472,70473],{"class":94,"line":1179},[92,70474,2379],{"emptyLinePlaceholder":17},[92,70476,70477],{"class":94,"line":1193},[92,70478,70479],{"class":207},"a {\n",[92,70481,70482,70485,70487],{"class":94,"line":1199},[92,70483,70484],{"class":51282},"  text-decoration",[92,70486,51419],{"class":102},[92,70488,70489],{"class":207},"none;\n",[92,70491,70492],{"class":94,"line":1290},[92,70493,70494],{"class":207},"  color:#721c24;\n",[92,70496,70497],{"class":94,"line":1296},[92,70498,1544],{"class":102},[92,70500,70501],{"class":94,"line":1308},[92,70502,70503],{"class":207},"h1 {\n",[92,70505,70506,70509,70511],{"class":94,"line":1591},[92,70507,70508],{"class":51282},"  text-align",[92,70510,51419],{"class":102},[92,70512,70513],{"class":207},"center;\n",[92,70515,70516],{"class":94,"line":1596},[92,70517,70518],{"class":207},"  color:#333;\n",[92,70520,70521,70523,70525],{"class":94,"line":1602},[92,70522,70452],{"class":51282},[92,70524,51419],{"class":102},[92,70526,70527],{"class":207},"20px 0;\n",[92,70529,70530],{"class":94,"line":1607},[92,70531,2653],{"class":102},[92,70533,70534],{"class":94,"line":1621},[92,70535,1544],{"class":102},[92,70537,70538],{"class":94,"line":1626},[92,70539,70540],{"class":207},"table {\n",[92,70542,70543],{"class":94,"line":1632},[92,70544,70545],{"class":207},"  margin:0 auto;\n",[92,70547,70548,70551,70553],{"class":94,"line":1653},[92,70549,70550],{"class":51282},"  width",[92,70552,51419],{"class":102},[92,70554,70555],{"class":207},"800px;\n",[92,70557,70558,70561,70563],{"class":94,"line":1658},[92,70559,70560],{"class":51282},"  border-collapse",[92,70562,51419],{"class":102},[92,70564,70565],{"class":207},"collapse;\n",[92,70567,70568],{"class":94,"line":1672},[92,70569,70570],{"class":207},"  color:#004085;\n",[92,70572,70573],{"class":94,"line":1677},[92,70574,1544],{"class":102},[92,70576,70577],{"class":94,"line":1706},[92,70578,70579],{"class":207},"th {\n",[92,70581,70582,70584,70586],{"class":94,"line":1711},[92,70583,70462],{"class":51282},[92,70585,51419],{"class":102},[92,70587,70588],{"class":207},"10px;\n",[92,70590,70591,70594,70596],{"class":94,"line":1728},[92,70592,70593],{"class":51282},"  background",[92,70595,51419],{"class":102},[92,70597,70598],{"class":161},"#cfe5ff;\n",[92,70600,70601],{"class":94,"line":1733},[92,70602,70603],{"class":102},"  \n",[92,70605,70606,70609,70611],{"class":94,"line":1738},[92,70607,70608],{"class":51282},"  font-size",[92,70610,51419],{"class":102},[92,70612,70613],{"class":207},"20px;\n",[92,70615,70616,70619,70621],{"class":94,"line":1743},[92,70617,70618],{"class":51282},"  font-weight",[92,70620,51419],{"class":102},[92,70622,70623],{"class":207},"400;\n",[92,70625,70626],{"class":94,"line":1757},[92,70627,1544],{"class":102},[92,70629,70630],{"class":94,"line":1762},[92,70631,70632],{"class":207},"td,th {\n",[92,70634,70635,70638],{"class":94,"line":2556},[92,70636,70637],{"class":207},"  border:1px solid",[92,70639,70640],{"class":161}," #b8daff;\n",[92,70642,70643],{"class":94,"line":2570},[92,70644,1544],{"class":102},[92,70646,70647],{"class":94,"line":2578},[92,70648,70649],{"class":207},"td {\n",[92,70651,70652],{"class":94,"line":2583},[92,70653,70654],{"class":207},"  padding:10px;\n",[92,70656,70657],{"class":94,"line":2589},[92,70658,70659],{"class":207},"  color:#666;\n",[92,70661,70662,70664,70666],{"class":94,"line":2595},[92,70663,70508],{"class":51282},[92,70665,51419],{"class":102},[92,70667,70513],{"class":207},[92,70669,70670,70672,70674],{"class":94,"line":2600},[92,70671,70608],{"class":51282},[92,70673,51419],{"class":102},[92,70675,70676],{"class":207},"16px;\n",[92,70678,70679],{"class":94,"line":7928},[92,70680,1544],{"class":102},[92,70682,70683],{"class":94,"line":7952},[92,70684,70685],{"class":207},"tbody tr {\n",[92,70687,70688,70690,70692],{"class":94,"line":7957},[92,70689,70593],{"class":51282},[92,70691,51419],{"class":102},[92,70693,70694],{"class":161},"#fff;\n",[92,70696,70697],{"class":94,"line":7963},[92,70698,1544],{"class":102},[92,70700,70701],{"class":94,"line":7990},[92,70702,70703],{"class":207},"tbody tr:hover {\n",[92,70705,70706,70708,70710],{"class":94,"line":7995},[92,70707,70593],{"class":51282},[92,70709,51419],{"class":102},[92,70711,70712],{"class":161},"#e1ecf8;\n",[92,70714,70715],{"class":94,"line":8001},[92,70716,1544],{"class":102},[92,70718,70719],{"class":94,"line":8013},[92,70720,70721],{"class":207},".info {\n",[92,70723,70724,70726,70728],{"class":94,"line":8025},[92,70725,70550],{"class":51282},[92,70727,51419],{"class":102},[92,70729,70730],{"class":207},"900px;\n",[92,70732,70733,70735,70737],{"class":94,"line":8037},[92,70734,70452],{"class":51282},[92,70736,51419],{"class":102},[92,70738,70739],{"class":207},"50px auto;\n",[92,70741,70742,70744,70746],{"class":94,"line":9696},[92,70743,70508],{"class":51282},[92,70745,51419],{"class":102},[92,70747,70513],{"class":207},[92,70749,70750],{"class":94,"line":9721},[92,70751,1544],{"class":102},[92,70753,70754],{"class":94,"line":9744},[92,70755,70756],{"class":207},".info  input, .info select {\n",[92,70758,70759,70761,70763],{"class":94,"line":9768},[92,70760,70550],{"class":51282},[92,70762,51419],{"class":102},[92,70764,70765],{"class":207},"80px;\n",[92,70767,70768,70771,70773],{"class":94,"line":9773},[92,70769,70770],{"class":51282},"  height",[92,70772,51419],{"class":102},[92,70774,70775],{"class":207},"27px;\n",[92,70777,70778,70781,70783],{"class":94,"line":9778},[92,70779,70780],{"class":51282},"  outline",[92,70782,51419],{"class":102},[92,70784,70489],{"class":207},[92,70786,70787,70790,70792],{"class":94,"line":9783},[92,70788,70789],{"class":51282},"  border-radius",[92,70791,51419],{"class":102},[92,70793,70794],{"class":207},"5px;\n",[92,70796,70797,70799],{"class":94,"line":9792},[92,70798,70637],{"class":207},[92,70800,70640],{"class":161},[92,70802,70803,70806,70808],{"class":94,"line":9797},[92,70804,70805],{"class":51282},"  padding-left",[92,70807,51419],{"class":102},[92,70809,70794],{"class":207},[92,70811,70812,70815,70817],{"class":94,"line":9803},[92,70813,70814],{"class":51282},"  box-sizing",[92,70816,51419],{"class":102},[92,70818,70819],{"class":207},"border-box;\n",[92,70821,70822,70825,70827],{"class":94,"line":9824},[92,70823,70824],{"class":51282},"  margin-right",[92,70826,51419],{"class":102},[92,70828,70829],{"class":207},"15px;\n",[92,70831,70832],{"class":94,"line":9830},[92,70833,1544],{"class":102},[92,70835,70836],{"class":94,"line":9844},[92,70837,70838],{"class":207},".info button {\n",[92,70840,70841,70843,70845],{"class":94,"line":9850},[92,70842,70550],{"class":51282},[92,70844,51419],{"class":102},[92,70846,70847],{"class":207},"60px;\n",[92,70849,70850,70852,70854],{"class":94,"line":9877},[92,70851,70770],{"class":51282},[92,70853,51419],{"class":102},[92,70855,70775],{"class":207},[92,70857,70858,70861,70863],{"class":94,"line":9886},[92,70859,70860],{"class":51282},"  background-color",[92,70862,51419],{"class":102},[92,70864,70865],{"class":161},"#004085;\n",[92,70867,70868,70870,70872],{"class":94,"line":9892},[92,70869,70780],{"class":51282},[92,70871,51419],{"class":102},[92,70873,70489],{"class":207},[92,70875,70876,70879,70881],{"class":94,"line":9900},[92,70877,70878],{"class":51282},"  border",[92,70880,51419],{"class":102},[92,70882,70457],{"class":207},[92,70884,70885,70888,70890],{"class":94,"line":9905},[92,70886,70887],{"class":51282},"  color",[92,70889,51419],{"class":102},[92,70891,70694],{"class":161},[92,70893,70894,70897,70899],{"class":94,"line":16584},[92,70895,70896],{"class":51282},"  cursor",[92,70898,51419],{"class":102},[92,70900,70901],{"class":207},"pointer;\n",[92,70903,70904,70906,70908],{"class":94,"line":16590},[92,70905,70789],{"class":51282},[92,70907,51419],{"class":102},[92,70909,70794],{"class":207},[92,70911,70912],{"class":94,"line":16613},[92,70913,1544],{"class":102},[92,70915,70916],{"class":94,"line":16619},[92,70917,70918],{"class":207},".info .age {\n",[92,70920,70921,70923,70925],{"class":94,"line":16642},[92,70922,70550],{"class":51282},[92,70924,51419],{"class":102},[92,70926,70927],{"class":207},"50px;\n",[92,70929,70930],{"class":94,"line":16656},[92,70931,1544],{"class":102},[38,70933,70934],{},"思路：",[38,70936,70937],{},[1441,70938],{"alt":10,"src":70939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[38,70941,70942],{},[1441,70943],{"alt":10,"src":70944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[38,70946,70947],{},[1441,70948],{"alt":10,"src":70949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[63,70951,70953],{"id":70952},"_3315-重绘回流","3.3.15 重绘回流",[38,70955,70956],{},[1441,70957],{"alt":10,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[38,70960,70961],{},[1441,70962],{"alt":10,"src":70963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[38,70965,70966],{},[1441,70967],{"alt":10,"src":70968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[33,70970,70972],{"id":70971},"_34-bom","3.4 BOM",[38,70974,70975],{},[1441,70976],{"alt":10,"src":70977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[38,70979,70980],{},"平时写的document省略了window而已，实际上是window.document",[38,70982,70983],{},"函数也是这样，调用的时候实际为window.fn()",[38,70985,70986],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[38,70988,70989],{},"window大部分情况下可以省略",[63,70991,70993],{"id":70992},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[38,70995,70996],{},"只执行一次",[38,70998,70999],{},[1441,71000],{"alt":10,"src":71001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[38,71003,71004],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[38,71006,71007],{},[1441,71008],{"alt":10,"src":71009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[63,71011,71013],{"id":71012},"_342-js执行机制","3.4.2 JS执行机制",[38,71015,71016],{},[1441,71017],{"alt":10,"src":71018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[38,71020,71021],{},"两个的结果都是1111 3333 2222",[38,71023,71024],{},[1441,71025],{"alt":10,"src":71026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[38,71028,71029],{},[1441,71030],{"alt":10,"src":71031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[38,71033,71034],{},[1441,71035],{"alt":10,"src":71036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[38,71038,71039],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[38,71041,71042],{},"工作流程：",[38,71044,71045],{},[1441,71046],{"alt":10,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[38,71049,71050],{},[1441,71051],{"alt":10,"src":71052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[38,71054,71055],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[38,71057,71058],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[63,71060,71062],{"id":71061},"_343-location对象","3.4.3 location对象",[38,71064,71065],{},"location对象属于window这个全局对象下的，可以 省略window",[38,71067,71068],{},[1441,71069],{"alt":10,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[38,71072,71073],{},"href可以跳转页面",[46,71075,71076],{},[49,71077,71078],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[38,71080,71081],{},"search得到提交信息之后网站后边的地址",[38,71083,71084],{},[1441,71085],{"alt":10,"src":71086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[38,71088,71089],{},[1441,71090],{"alt":10,"src":71091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[46,71093,71094],{"start":11},[49,71095,71096],{},"hash:这个获取单页面应用#后边的地址",[38,71098,71099],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[38,71101,71102],{},[1441,71103],{"alt":10,"src":71104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[83,71106,71108],{"className":53049,"code":71107,"language":53051,"meta":10,"style":10},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[89,71109,71110,71130,71150],{"__ignoreMap":10},[92,71111,71112,71114,71116,71118,71120,71123,71126,71128],{"class":94,"line":95},[92,71113,52126],{"class":102},[92,71115,341],{"class":51282},[92,71117,61039],{"class":1942},[92,71119,148],{"class":102},[92,71121,71122],{"class":207},"\"#\u002Fmy\"",[92,71124,71125],{"class":102},">我的\u003C\u002F",[92,71127,341],{"class":51282},[92,71129,51289],{"class":102},[92,71131,71132,71134,71136,71138,71140,71143,71146,71148],{"class":94,"line":11},[92,71133,52126],{"class":102},[92,71135,341],{"class":51282},[92,71137,61039],{"class":1942},[92,71139,148],{"class":102},[92,71141,71142],{"class":207},"\"#\u002Ffriend\"",[92,71144,71145],{"class":102},">关注\u003C\u002F",[92,71147,341],{"class":51282},[92,71149,51289],{"class":102},[92,71151,71152,71154,71156,71158,71160,71163,71166,71168],{"class":94,"line":1158},[92,71153,52126],{"class":102},[92,71155,341],{"class":51282},[92,71157,61039],{"class":1942},[92,71159,148],{"class":102},[92,71161,71162],{"class":207},"\"#\u002Fdownload\"",[92,71164,71165],{"class":102},">下载\u003C\u002F",[92,71167,341],{"class":51282},[92,71169,51289],{"class":102},[38,71171,71172],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[46,71174,71175],{"start":1158},[49,71176,71177,71178,71180,71181,71183],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53698,71179],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53698,71182],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[63,71185,71187],{"id":71186},"_345-navigator对象","3.4.5 navigator对象",[38,71189,71190],{},[1441,71191],{"alt":10,"src":71192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[83,71194,71198],{"className":71195,"code":71196,"language":71197,"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,71199,71200,71205,71216,71228,71233,71284,71325,71330,71343,71355,71360],{"__ignoreMap":10},[92,71201,71202],{"class":94,"line":95},[92,71203,71204],{"class":161},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[92,71206,71207,71209,71211,71213],{"class":94,"line":11},[92,71208,329],{"class":98},[92,71210,103],{"class":102},[92,71212,54431],{"class":98},[92,71214,71215],{"class":102}," () { \n",[92,71217,71218,71220,71223,71225],{"class":94,"line":1158},[92,71219,6772],{"class":98},[92,71221,71222],{"class":151}," userAgent",[92,71224,13544],{"class":98},[92,71226,71227],{"class":102}," navigator.userAgent \n",[92,71229,71230],{"class":94,"line":1173},[92,71231,71232],{"class":161},"\u002F\u002F 验证是否为Android或iPhone \n",[92,71234,71235,71237,71240,71242,71245,71248,71250,71252,71255,71257,71260,71264,71266,71268,71270,71273,71275,71277,71279,71281],{"class":94,"line":1179},[92,71236,6772],{"class":98},[92,71238,71239],{"class":151}," android",[92,71241,13544],{"class":98},[92,71243,71244],{"class":102}," userAgent.",[92,71246,71247],{"class":1942},"match",[92,71249,103],{"class":102},[92,71251,687],{"class":207},[92,71253,71254],{"class":47959},"(Android);",[92,71256,1089],{"class":98},[92,71258,71259],{"class":151},"[\\s",[92,71261,71263],{"class":71262},"snhLl","\\\u002F",[92,71265,1043],{"class":151},[92,71267,584],{"class":98},[92,71269,103],{"class":47959},[92,71271,71272],{"class":151},"[\\d.]",[92,71274,584],{"class":98},[92,71276,532],{"class":47959},[92,71278,1089],{"class":98},[92,71280,687],{"class":207},[92,71282,71283],{"class":102},") \n",[92,71285,71286,71288,71291,71293,71295,71297,71299,71301,71304,71307,71310,71312,71314,71317,71319,71321,71323],{"class":94,"line":1193},[92,71287,6772],{"class":98},[92,71289,71290],{"class":151}," iphone",[92,71292,13544],{"class":98},[92,71294,71244],{"class":102},[92,71296,71247],{"class":1942},[92,71298,103],{"class":102},[92,71300,687],{"class":207},[92,71302,71303],{"class":47959},"(iPhone",[92,71305,71306],{"class":151},"\\s",[92,71308,71309],{"class":47959},"OS)",[92,71311,71306],{"class":151},[92,71313,103],{"class":47959},[92,71315,71316],{"class":151},"[\\d_]",[92,71318,584],{"class":98},[92,71320,532],{"class":47959},[92,71322,687],{"class":207},[92,71324,71283],{"class":102},[92,71326,71327],{"class":94,"line":1199},[92,71328,71329],{"class":161},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[92,71331,71332,71334,71337,71340],{"class":94,"line":1290},[92,71333,1510],{"class":98},[92,71335,71336],{"class":102}," (android ",[92,71338,71339],{"class":98},"||",[92,71341,71342],{"class":102}," iphone) { \n",[92,71344,71345,71348,71350,71353],{"class":94,"line":1296},[92,71346,71347],{"class":102},"location.href ",[92,71349,148],{"class":98},[92,71351,71352],{"class":207}," 'http:\u002F\u002Fm.itcast.cn'",[92,71354,2653],{"class":102},[92,71356,71357],{"class":94,"line":1308},[92,71358,71359],{"class":102},"} \n",[92,71361,71362],{"class":94,"line":1591},[92,71363,71364],{"class":102},"})()\n",[63,71366,71368],{"id":71367},"_346-histroy对象","3.4.6 histroy对象",[38,71370,71371],{},[1441,71372],{"alt":10,"src":71373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[38,71375,71376],{},"浏览器地址的前进与后退!!!",[38,71378,71379],{},"history.back() 等效于 history.go(-1)",[38,71381,71382],{},"history.forward() 等效于 history.go(1)",[33,71384,71386],{"id":71385},"_35-本地存储","3.5 本地存储",[46,71388,71389,71392,71395],{},[49,71390,71391],{},"数据存储在用户浏览器中",[49,71393,71394],{},"设置、读取方便、甚至页面刷新不丢失数据",[49,71396,71397],{},"容量较大，sessionStorage和localStorage约 5M 左右",[63,71399,71401],{"id":71400},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[38,71403,71404],{},"只能存储字符串",[38,71406,71407],{},[1441,71408],{"alt":10,"src":71409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[38,71411,71412],{},[1441,71413],{"alt":10,"src":71414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[38,71416,71417],{},"键值对要加引号,不然就会当变量来看了",[38,71419,71420],{},"localStorage.setItem('uname', 'pink')",[38,71422,71423],{},"刷新之后信息不再丢失",[38,71425,71426],{},"操作key,value会跟着变",[38,71428,71429],{},"删除只删除键就可以,即名字",[38,71431,71420],{},[38,71433,71434],{},"改:",[38,71436,71437],{},"localStorage.setItem('uname','red')",[38,71439,71440],{},"有这个键就是改,没有这个键就是改",[38,71442,71443],{},[1441,71444],{"alt":10,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[38,71447,71448],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[38,71450,71451],{},[1441,71452],{"alt":10,"src":71453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[38,71455,71456],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[63,71458,71460],{"id":71459},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[38,71462,71463],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[38,71465,71466],{},"特性:",[46,71468,71469,71472,71475,71478],{},[49,71470,71471],{},"生命周期为关闭浏览器窗口",[49,71473,71474],{},"在同一个窗口(页面)下数据可以共享",[49,71476,71477],{},"以键值对的形式存储使用",[49,71479,71480],{},"用法跟localStorage 基本相同",[63,71482,71484],{"id":71483},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[38,71486,71487],{},"本地只能存储字符串,无法直接存储复杂数据类型",[83,71489,71491],{"className":53049,"code":71490,"language":53051,"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,71492,71493,71501,71506,71511,71516,71521,71525,71530,71535],{"__ignoreMap":10},[92,71494,71495,71497,71499],{"class":94,"line":95},[92,71496,1013],{"class":102},[92,71498,51795],{"class":51282},[92,71500,51289],{"class":102},[92,71502,71503],{"class":94,"line":11},[92,71504,71505],{"class":102},"    const obj = {\n",[92,71507,71508],{"class":94,"line":1158},[92,71509,71510],{"class":102},"      uname: 'pink老师',\n",[92,71512,71513],{"class":94,"line":1173},[92,71514,71515],{"class":102},"      age: 18,\n",[92,71517,71518],{"class":94,"line":1179},[92,71519,71520],{"class":102},"      gender: '女'\n",[92,71522,71523],{"class":94,"line":1193},[92,71524,2166],{"class":102},[92,71526,71527],{"class":94,"line":1199},[92,71528,71529],{"class":102},"    \u002F\u002F 存储复杂数据类型\n",[92,71531,71532],{"class":94,"line":1290},[92,71533,71534],{"class":102},"    localStorage.setItem('obj', obj)\n",[92,71536,71537,71539,71541],{"class":94,"line":1296},[92,71538,52399],{"class":102},[92,71540,51795],{"class":51282},[92,71542,51289],{"class":102},[38,71544,71545],{},[1441,71546],{"alt":10,"src":71547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[38,71549,71550],{},"如果获取一下数据:",[38,71552,71553],{},"log(localStorage.getItem('obj'))",[38,71555,71556],{},[1441,71557],{"alt":10,"src":71558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[38,71560,71561],{},"发现直接存对象是使用不了的!!!",[21978,71563,71565],{"id":71564},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[38,71567,71568],{},[1441,71569],{"alt":10,"src":71570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[83,71572,71574],{"className":50615,"code":71573,"language":50617,"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,71575,71576,71584,71594,71604,71613,71621,71625,71629,71655,71674,71682,71686,71691,71696],{"__ignoreMap":10},[92,71577,71578,71580,71582],{"class":94,"line":95},[92,71579,1013],{"class":102},[92,71581,51795],{"class":51282},[92,71583,51289],{"class":102},[92,71585,71586,71588,71590,71592],{"class":94,"line":11},[92,71587,11201],{"class":98},[92,71589,69953],{"class":151},[92,71591,13544],{"class":98},[92,71593,15552],{"class":102},[92,71595,71596,71599,71602],{"class":94,"line":1158},[92,71597,71598],{"class":102},"      uname: ",[92,71600,71601],{"class":207},"'pink老师'",[92,71603,31448],{"class":102},[92,71605,71606,71609,71611],{"class":94,"line":1173},[92,71607,71608],{"class":102},"      age: ",[92,71610,753],{"class":151},[92,71612,31448],{"class":102},[92,71614,71615,71618],{"class":94,"line":1179},[92,71616,71617],{"class":102},"      gender: ",[92,71619,71620],{"class":207},"'女'\n",[92,71622,71623],{"class":94,"line":1193},[92,71624,2166],{"class":102},[92,71626,71627],{"class":94,"line":1199},[92,71628,71529],{"class":161},[92,71630,71631,71634,71637,71639,71642,71644,71647,71649,71652],{"class":94,"line":1290},[92,71632,71633],{"class":102},"  localStorage.",[92,71635,71636],{"class":1942},"setItem",[92,71638,103],{"class":102},[92,71640,71641],{"class":207},"'obj'",[92,71643,12415],{"class":102},[92,71645,71646],{"class":151},"JSON",[92,71648,661],{"class":102},[92,71650,71651],{"class":1942},"stringify",[92,71653,71654],{"class":102},"(obj))\n",[92,71656,71657,71660,71662,71665,71668,71670,71672],{"class":94,"line":1296},[92,71658,71659],{"class":102},"  console.",[92,71661,58229],{"class":1942},[92,71663,71664],{"class":102},"(localStorage.",[92,71666,71667],{"class":1942},"getItem",[92,71669,103],{"class":102},[92,71671,71641],{"class":207},[92,71673,30479],{"class":102},[92,71675,71676,71678,71680],{"class":94,"line":1308},[92,71677,52399],{"class":102},[92,71679,51795],{"class":51282},[92,71681,51289],{"class":102},[92,71683,71684],{"class":94,"line":1591},[92,71685,70603],{"class":102},[92,71687,71688],{"class":94,"line":1596},[92,71689,71690],{"class":102},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[92,71692,71693],{"class":94,"line":1602},[92,71694,71695],{"class":102},"  类型是字符串的\n",[92,71697,71698],{"class":94,"line":1607},[92,71699,71700],{"class":102},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21978,71702,71704],{"id":71703},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[38,71706,71707],{},[1441,71708],{"alt":10,"src":71709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[38,71711,71712],{},[1441,71713],{"alt":10,"src":71714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[83,71716,71718],{"className":53049,"code":71717,"language":53051,"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,71719,71720,71728,71732,71736,71740,71744,71748,71753,71758,71763,71768,71773,71778,71783,71788],{"__ignoreMap":10},[92,71721,71722,71724,71726],{"class":94,"line":95},[92,71723,52126],{"class":102},[92,71725,51795],{"class":51282},[92,71727,51289],{"class":102},[92,71729,71730],{"class":94,"line":11},[92,71731,71505],{"class":102},[92,71733,71734],{"class":94,"line":1158},[92,71735,71510],{"class":102},[92,71737,71738],{"class":94,"line":1173},[92,71739,71515],{"class":102},[92,71741,71742],{"class":94,"line":1179},[92,71743,71520],{"class":102},[92,71745,71746],{"class":94,"line":1193},[92,71747,2166],{"class":102},[92,71749,71750],{"class":94,"line":1199},[92,71751,71752],{"class":102},"    \u002F\u002F 1.存储复杂数据类型\n",[92,71754,71755],{"class":94,"line":1290},[92,71756,71757],{"class":102},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[92,71759,71760],{"class":94,"line":1296},[92,71761,71762],{"class":102},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[92,71764,71765],{"class":94,"line":1308},[92,71766,71767],{"class":102},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[92,71769,71770],{"class":94,"line":1591},[92,71771,71772],{"class":102},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[92,71774,71775],{"class":94,"line":1596},[92,71776,71777],{"class":102},"    \u002F\u002F 取\n",[92,71779,71780],{"class":94,"line":1602},[92,71781,71782],{"class":102},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[92,71784,71785],{"class":94,"line":1607},[92,71786,71787],{"class":102},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[92,71789,71790,71792,71794],{"class":94,"line":1621},[92,71791,52399],{"class":102},[92,71793,51795],{"class":51282},[92,71795,51289],{"class":102},[38,71797,71798],{},[1441,71799],{"alt":10,"src":71800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[63,71802,71804],{"id":71803},"_356-数组map方法","3.5.6 数组map方法",[38,71806,71807],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[38,71809,71810],{},[1441,71811],{"alt":10,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[38,71814,71815],{},[1441,71816],{"alt":10,"src":71817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[38,71819,71820,71823],{},[252,71821,71822],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[38,71825,71826],{},"map有返回值，但是forEach没有返回值",[38,71828,71829],{},"map是个方法。用的时候要加 ()",[38,71831,71832],{},"map返回的是一个数组",[63,71834,71836],{"id":71835},"_357-数组中join方法","3.5.7 数组中join方法",[38,71838,71839],{},[1441,71840],{"alt":10,"src":71841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[38,71843,71844],{},"类似于python中拼接字符串一样！",[46,71846,71847,71850,71853],{},[49,71848,71849],{},"小括号为空则逗号分开",[49,71851,71852],{},"小括号为空字符串 ''，则元素之间没有分隔符",[49,71854,71855],{},"小括号用啥符号就用进行分割",[63,71857,71859],{"id":71858},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[46,71861,71862,71865,71868,71871,71874],{},[49,71863,71864],{},"记住本地时间获取快速方式：new Date().toDateString()",[49,71866,71867],{},"尽量减少DOM操作，用好map+join的渲染方式",[49,71869,71870],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[49,71872,71873],{},"return可以实现函数的结束",[49,71875,71876],{},"禁止跳转是 preventDefault() 不要忘记",[83,71878,71880],{"className":50615,"code":71879,"language":50617,"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,71881,71882,71892,71906,71910,71918,71932,71952,71964,71972,71978,71988,71998,72002,72006,72012,72022,72034,72038,72042,72049,72061,72075,72085,72089,72093,72100,72107,72114,72126,72138,72148,72160,72164,72168,72175,72182,72194,72206,72216,72228,72258,72262,72266,72273,72285,72297,72321,72331,72341,72345,72349,72357,72368,72380,72392,72404,72421,72433,72445,72449,72453,72460,72472,72484,72496,72507,72525,72538,72550,72574,72585,72589,72593,72601,72611,72615,72619,72625,72637,72648,72658,72662,72666,72672,72694,72698,72702,72708,72714,72726,72736,72748,72778,72791,72808,72812,72816,72827,72849,72859,72863,72867,72880,72890,72902,72914,72926,72938,72948,72958,72968,72979,72992,72996,73004,73012,73016,73024,73037,73057,73090,73123,73156,73182,73200,73218,73226,73252,73270,73288,73306,73324,73342,73350,73358,73376,73384,73413,73421,73429,73437,73450,73462,73474,73486,73498,73510,73523,73535,73543,73551,73559,73564,73569,73573,73577,73581,73585,73589,73593,73598,73603,73608,73613,73621,73629,73637,73642,73647,73652,73657,73662,73667,73672,73677,73682,73687,73692,73697,73702,73707,73711,73716,73721,73731,73740,73744,73749,73758,73774,73816,73856,73895,73960,73968,73972,73977,73995,74003,74008,74013,74043,74049,74054,74067,74079,74091,74103,74115,74127,74139,74143,74153,74157,74162,74167,74171,74180,74184,74189,74194,74213,74218,74238,74242,74247,74251,74256,74274,74292,74310,74329,74348,74367,74372,74378,74399,74405,74414,74420,74426,74432,74459,74472,74477,74487,74493,74499,74505,74511,74516,74522,74528,74534,74540,74573,74578,74583,74588,74593,74599,74605,74611,74622,74627,74633,74640,74654,74660,74684,74689,74694,74700,74706,74727,74733,74746,74752,74758,74764,74770,74775,74781,74787,74793,74811,74825,74831,74839,74845,74867,74872,74877,74882,74887,74892,74901,74910,74915],{"__ignoreMap":10},[92,71883,71884,71886,71888,71890],{"class":94,"line":95},[92,71885,51279],{"class":102},[92,71887,51283],{"class":51282},[92,71889,51286],{"class":1942},[92,71891,51289],{"class":102},[92,71893,71894,71896,71898,71900,71902,71904],{"class":94,"line":11},[92,71895,1013],{"class":102},[92,71897,50617],{"class":51282},[92,71899,51298],{"class":1942},[92,71901,148],{"class":102},[92,71903,51303],{"class":207},[92,71905,51289],{"class":102},[92,71907,71908],{"class":94,"line":1158},[92,71909,2379],{"emptyLinePlaceholder":17},[92,71911,71912,71914,71916],{"class":94,"line":1173},[92,71913,1013],{"class":102},[92,71915,51316],{"class":51282},[92,71917,51289],{"class":102},[92,71919,71920,71922,71924,71926,71928,71930],{"class":94,"line":1179},[92,71921,52126],{"class":102},[92,71923,51326],{"class":51282},[92,71925,51329],{"class":1942},[92,71927,148],{"class":102},[92,71929,51334],{"class":207},[92,71931,51289],{"class":102},[92,71933,71934,71936,71938,71940,71942,71944,71946,71948,71950],{"class":94,"line":1193},[92,71935,52126],{"class":102},[92,71937,51326],{"class":51282},[92,71939,14900],{"class":1942},[92,71941,148],{"class":102},[92,71943,51373],{"class":207},[92,71945,51353],{"class":1942},[92,71947,148],{"class":102},[92,71949,51380],{"class":207},[92,71951,51289],{"class":102},[92,71953,71954,71956,71958,71960,71962],{"class":94,"line":1199},[92,71955,52126],{"class":102},[92,71957,51389],{"class":51282},[92,71959,51392],{"class":102},[92,71961,51389],{"class":51282},[92,71963,51289],{"class":102},[92,71965,71966,71968,71970],{"class":94,"line":1290},[92,71967,52126],{"class":102},[92,71969,5106],{"class":51282},[92,71971,51289],{"class":102},[92,71973,71974,71976],{"class":94,"line":1296},[92,71975,6383],{"class":51282},[92,71977,15552],{"class":102},[92,71979,71980,71982,71984,71986],{"class":94,"line":1308},[92,71981,54677],{"class":151},[92,71983,51419],{"class":102},[92,71985,294],{"class":151},[92,71987,1269],{"class":102},[92,71989,71990,71992,71994,71996],{"class":94,"line":1591},[92,71991,54688],{"class":151},[92,71993,51419],{"class":102},[92,71995,294],{"class":151},[92,71997,1269],{"class":102},[92,71999,72000],{"class":94,"line":1596},[92,72001,2166],{"class":102},[92,72003,72004],{"class":94,"line":1602},[92,72005,2379],{"emptyLinePlaceholder":17},[92,72007,72008,72010],{"class":94,"line":1607},[92,72009,57261],{"class":51282},[92,72011,15552],{"class":102},[92,72013,72014,72016,72018,72020],{"class":94,"line":1621},[92,72015,57268],{"class":151},[92,72017,51419],{"class":102},[92,72019,51574],{"class":151},[92,72021,1269],{"class":102},[92,72023,72024,72026,72028,72030,72032],{"class":94,"line":1626},[92,72025,62059],{"class":151},[92,72027,51419],{"class":102},[92,72029,803],{"class":151},[92,72031,51474],{"class":98},[92,72033,1269],{"class":102},[92,72035,72036],{"class":94,"line":1632},[92,72037,2166],{"class":102},[92,72039,72040],{"class":94,"line":1653},[92,72041,2379],{"emptyLinePlaceholder":17},[92,72043,72044,72047],{"class":94,"line":1658},[92,72045,72046],{"class":1942},"    .info",[92,72048,15552],{"class":102},[92,72050,72051,72053,72055,72057,72059],{"class":94,"line":1672},[92,72052,54753],{"class":151},[92,72054,51419],{"class":102},[92,72056,51471],{"class":151},[92,72058,51474],{"class":98},[92,72060,1269],{"class":102},[92,72062,72063,72065,72067,72069,72071,72073],{"class":94,"line":1677},[92,72064,54688],{"class":151},[92,72066,51419],{"class":102},[92,72068,549],{"class":151},[92,72070,51474],{"class":98},[92,72072,51538],{"class":151},[92,72074,1269],{"class":102},[92,72076,72077,72079,72081,72083],{"class":94,"line":1706},[92,72078,57268],{"class":151},[92,72080,51419],{"class":102},[92,72082,51574],{"class":151},[92,72084,1269],{"class":102},[92,72086,72087],{"class":94,"line":1711},[92,72088,2166],{"class":102},[92,72090,72091],{"class":94,"line":1728},[92,72092,2379],{"emptyLinePlaceholder":17},[92,72094,72095,72098],{"class":94,"line":1733},[92,72096,72097],{"class":1942},"    .uname",[92,72099,31448],{"class":102},[92,72101,72102,72105],{"class":94,"line":1738},[92,72103,72104],{"class":1942},"    .age",[92,72106,31448],{"class":102},[92,72108,72109,72112],{"class":94,"line":1743},[92,72110,72111],{"class":1942},"    .salary",[92,72113,15552],{"class":102},[92,72115,72116,72118,72120,72122,72124],{"class":94,"line":1757},[92,72117,54753],{"class":151},[92,72119,51419],{"class":102},[92,72121,414],{"class":151},[92,72123,51474],{"class":98},[92,72125,1269],{"class":102},[92,72127,72128,72130,72132,72134,72136],{"class":94,"line":1762},[92,72129,54767],{"class":151},[92,72131,51419],{"class":102},[92,72133,803],{"class":151},[92,72135,51474],{"class":98},[92,72137,1269],{"class":102},[92,72139,72140,72142,72144,72146],{"class":94,"line":2556},[92,72141,61762],{"class":151},[92,72143,51419],{"class":102},[92,72145,54719],{"class":151},[92,72147,1269],{"class":102},[92,72149,72150,72152,72154,72156,72158],{"class":94,"line":2570},[92,72151,61732],{"class":151},[92,72153,51419],{"class":102},[92,72155,678],{"class":151},[92,72157,51474],{"class":98},[92,72159,1269],{"class":102},[92,72161,72162],{"class":94,"line":2578},[92,72163,2166],{"class":102},[92,72165,72166],{"class":94,"line":2583},[92,72167,2379],{"emptyLinePlaceholder":17},[92,72169,72170,72173],{"class":94,"line":2589},[92,72171,72172],{"class":1942},"    .gender",[92,72174,31448],{"class":102},[92,72176,72177,72180],{"class":94,"line":2595},[92,72178,72179],{"class":1942},"    .city",[92,72181,15552],{"class":102},[92,72183,72184,72186,72188,72190,72192],{"class":94,"line":2600},[92,72185,54753],{"class":151},[92,72187,51419],{"class":102},[92,72189,414],{"class":151},[92,72191,51474],{"class":98},[92,72193,1269],{"class":102},[92,72195,72196,72198,72200,72202,72204],{"class":94,"line":7928},[92,72197,54767],{"class":151},[92,72199,51419],{"class":102},[92,72201,928],{"class":151},[92,72203,51474],{"class":98},[92,72205,1269],{"class":102},[92,72207,72208,72210,72212,72214],{"class":94,"line":7952},[92,72209,61762],{"class":151},[92,72211,51419],{"class":102},[92,72213,54719],{"class":151},[92,72215,1269],{"class":102},[92,72217,72218,72220,72222,72224,72226],{"class":94,"line":7957},[92,72219,61732],{"class":151},[92,72221,51419],{"class":102},[92,72223,678],{"class":151},[92,72225,51474],{"class":98},[92,72227,1269],{"class":102},[92,72229,72230,72232,72234,72236,72238,72240,72243,72245,72247,72249,72252,72254,72256],{"class":94,"line":7963},[92,72231,61959],{"class":151},[92,72233,51419],{"class":102},[92,72235,320],{"class":151},[92,72237,51474],{"class":98},[92,72239,51503],{"class":151},[92,72241,72242],{"class":151}," rgb",[92,72244,103],{"class":102},[92,72246,1701],{"class":151},[92,72248,12415],{"class":102},[92,72250,72251],{"class":151},"197",[92,72253,12415],{"class":102},[92,72255,72251],{"class":151},[92,72257,2698],{"class":102},[92,72259,72260],{"class":94,"line":7990},[92,72261,2166],{"class":102},[92,72263,72264],{"class":94,"line":7995},[92,72265,2379],{"emptyLinePlaceholder":17},[92,72267,72268,72271],{"class":94,"line":8001},[92,72269,72270],{"class":51282},"    button",[92,72272,15552],{"class":102},[92,72274,72275,72277,72279,72281,72283],{"class":94,"line":8013},[92,72276,54767],{"class":151},[92,72278,51419],{"class":102},[92,72280,928],{"class":151},[92,72282,51474],{"class":98},[92,72284,1269],{"class":102},[92,72286,72287,72289,72291,72293,72295],{"class":94,"line":8025},[92,72288,54753],{"class":151},[92,72290,51419],{"class":102},[92,72292,587],{"class":151},[92,72294,51474],{"class":98},[92,72296,1269],{"class":102},[92,72298,72299,72301,72303,72306,72308,72310,72312,72315,72317,72319],{"class":94,"line":8037},[92,72300,54866],{"class":151},[92,72302,51419],{"class":102},[92,72304,72305],{"class":151},"rgb",[92,72307,103],{"class":102},[92,72309,1072],{"class":151},[92,72311,12415],{"class":102},[92,72313,72314],{"class":151},"187",[92,72316,12415],{"class":102},[92,72318,402],{"class":151},[92,72320,2698],{"class":102},[92,72322,72323,72325,72327,72329],{"class":94,"line":9696},[92,72324,57398],{"class":151},[92,72326,51419],{"class":102},[92,72328,60824],{"class":151},[92,72330,1269],{"class":102},[92,72332,72333,72335,72337,72339],{"class":94,"line":9721},[92,72334,61959],{"class":151},[92,72336,51419],{"class":102},[92,72338,294],{"class":151},[92,72340,1269],{"class":102},[92,72342,72343],{"class":94,"line":9744},[92,72344,2166],{"class":102},[92,72346,72347],{"class":94,"line":9768},[92,72348,2379],{"emptyLinePlaceholder":17},[92,72350,72351,72353,72355],{"class":94,"line":9773},[92,72352,72270],{"class":51282},[92,72354,51670],{"class":51282},[92,72356,15552],{"class":102},[92,72358,72359,72361,72363,72366],{"class":94,"line":9778},[92,72360,54991],{"class":151},[92,72362,51419],{"class":102},[92,72364,72365],{"class":151},"inline-block",[92,72367,1269],{"class":102},[92,72369,72370,72372,72374,72376,72378],{"class":94,"line":9783},[92,72371,54753],{"class":151},[92,72373,51419],{"class":102},[92,72375,549],{"class":151},[92,72377,51474],{"class":98},[92,72379,1269],{"class":102},[92,72381,72382,72384,72386,72388,72390],{"class":94,"line":9792},[92,72383,54767],{"class":151},[92,72385,51419],{"class":102},[92,72387,549],{"class":151},[92,72389,51474],{"class":98},[92,72391,1269],{"class":102},[92,72393,72394,72396,72398,72400,72402],{"class":94,"line":9797},[92,72395,57341],{"class":151},[92,72397,51419],{"class":102},[92,72399,575],{"class":151},[92,72401,51474],{"class":98},[92,72403,1269],{"class":102},[92,72405,72406,72408,72410,72412,72414,72416,72419],{"class":94,"line":9803},[92,72407,61959],{"class":151},[92,72409,51419],{"class":102},[92,72411,320],{"class":151},[92,72413,51474],{"class":98},[92,72415,51503],{"class":151},[92,72417,72418],{"class":151}," #fff",[92,72420,1269],{"class":102},[92,72422,72423,72425,72427,72429,72431],{"class":94,"line":9824},[92,72424,55116],{"class":151},[92,72426,51419],{"class":102},[92,72428,422],{"class":151},[92,72430,51474],{"class":98},[92,72432,1269],{"class":102},[92,72434,72435,72437,72439,72441,72443],{"class":94,"line":9830},[92,72436,61732],{"class":151},[92,72438,51419],{"class":102},[92,72440,320],{"class":151},[92,72442,51474],{"class":98},[92,72444,1269],{"class":102},[92,72446,72447],{"class":94,"line":9844},[92,72448,2166],{"class":102},[92,72450,72451],{"class":94,"line":9850},[92,72452,2379],{"emptyLinePlaceholder":17},[92,72454,72455,72458],{"class":94,"line":9877},[92,72456,72457],{"class":1942},"    .total",[92,72459,15552],{"class":102},[92,72461,72462,72464,72466,72468,72470],{"class":94,"line":9886},[92,72463,54753],{"class":151},[92,72465,51419],{"class":102},[92,72467,61611],{"class":151},[92,72469,51474],{"class":98},[92,72471,1269],{"class":102},[92,72473,72474,72476,72478,72480,72482],{"class":94,"line":9892},[92,72475,54767],{"class":151},[92,72477,51419],{"class":102},[92,72479,504],{"class":151},[92,72481,51474],{"class":98},[92,72483,1269],{"class":102},[92,72485,72486,72488,72490,72492,72494],{"class":94,"line":9900},[92,72487,57341],{"class":151},[92,72489,51419],{"class":102},[92,72491,504],{"class":151},[92,72493,51474],{"class":98},[92,72495,1269],{"class":102},[92,72497,72498,72500,72502,72505],{"class":94,"line":9905},[92,72499,57268],{"class":151},[92,72501,51419],{"class":102},[92,72503,72504],{"class":151},"right",[92,72506,1269],{"class":102},[92,72508,72509,72511,72513,72515,72517,72519,72521,72523],{"class":94,"line":16584},[92,72510,54688],{"class":151},[92,72512,51419],{"class":102},[92,72514,504],{"class":151},[92,72516,51474],{"class":98},[92,72518,51538],{"class":151},[92,72520,2017],{"class":151},[92,72522,51474],{"class":98},[92,72524,1269],{"class":102},[92,72526,72527,72530,72532,72534,72536],{"class":94,"line":16590},[92,72528,72529],{"class":151},"      padding-right",[92,72531,51419],{"class":102},[92,72533,549],{"class":151},[92,72535,51474],{"class":98},[92,72537,1269],{"class":102},[92,72539,72540,72542,72544,72546,72548],{"class":94,"line":16613},[92,72541,54904],{"class":151},[92,72543,51419],{"class":102},[92,72545,626],{"class":151},[92,72547,51474],{"class":98},[92,72549,1269],{"class":102},[92,72551,72552,72554,72556,72558,72560,72563,72565,72568,72570,72572],{"class":94,"line":16619},[92,72553,54866],{"class":151},[92,72555,51419],{"class":102},[92,72557,72305],{"class":151},[92,72559,103],{"class":102},[92,72561,72562],{"class":151},"237",[92,72564,12415],{"class":102},[92,72566,72567],{"class":151},"235",[92,72569,12415],{"class":102},[92,72571,72567],{"class":151},[92,72573,2698],{"class":102},[92,72575,72576,72579,72581,72583],{"class":94,"line":16642},[92,72577,72578],{"class":151},"      box-sizing",[92,72580,51419],{"class":102},[92,72582,60487],{"class":151},[92,72584,1269],{"class":102},[92,72586,72587],{"class":94,"line":16656},[92,72588,2166],{"class":102},[92,72590,72591],{"class":94,"line":16676},[92,72592,2379],{"emptyLinePlaceholder":17},[92,72594,72595,72597,72599],{"class":94,"line":16682},[92,72596,72457],{"class":1942},[92,72598,51670],{"class":51282},[92,72600,15552],{"class":102},[92,72602,72603,72605,72607,72609],{"class":94,"line":16693},[92,72604,57398],{"class":151},[92,72606,51419],{"class":102},[92,72608,57403],{"class":151},[92,72610,1269],{"class":102},[92,72612,72613],{"class":94,"line":16716},[92,72614,2166],{"class":102},[92,72616,72617],{"class":94,"line":16738},[92,72618,2379],{"emptyLinePlaceholder":17},[92,72620,72621,72623],{"class":94,"line":16743},[92,72622,65005],{"class":51282},[92,72624,15552],{"class":102},[92,72626,72627,72629,72631,72633,72635],{"class":94,"line":16749},[92,72628,54753],{"class":151},[92,72630,51419],{"class":102},[92,72632,61611],{"class":151},[92,72634,51474],{"class":98},[92,72636,1269],{"class":102},[92,72638,72639,72641,72643,72646],{"class":94,"line":16763},[92,72640,54688],{"class":151},[92,72642,51419],{"class":102},[92,72644,72645],{"class":151},"auto",[92,72647,1269],{"class":102},[92,72649,72650,72652,72654,72656],{"class":94,"line":16776},[92,72651,65012],{"class":151},[92,72653,51419],{"class":102},[92,72655,65017],{"class":151},[92,72657,1269],{"class":102},[92,72659,72660],{"class":94,"line":16781},[92,72661,2166],{"class":102},[92,72663,72664],{"class":94,"line":16795},[92,72665,2379],{"emptyLinePlaceholder":17},[92,72667,72668,72670],{"class":94,"line":16800},[92,72669,65097],{"class":51282},[92,72671,15552],{"class":102},[92,72673,72674,72676,72678,72680,72682,72684,72686,72688,72690,72692],{"class":94,"line":16806},[92,72675,54866],{"class":151},[92,72677,51419],{"class":102},[92,72679,72305],{"class":151},[92,72681,103],{"class":102},[92,72683,72562],{"class":151},[92,72685,12415],{"class":102},[92,72687,72567],{"class":151},[92,72689,12415],{"class":102},[92,72691,72567],{"class":151},[92,72693,2698],{"class":102},[92,72695,72696],{"class":94,"line":16811},[92,72697,2166],{"class":102},[92,72699,72700],{"class":94,"line":16825},[92,72701,2379],{"emptyLinePlaceholder":17},[92,72703,72704,72706],{"class":94,"line":16830},[92,72705,65097],{"class":51282},[92,72707,31448],{"class":102},[92,72709,72710,72712],{"class":94,"line":16835},[92,72711,65163],{"class":51282},[92,72713,15552],{"class":102},[92,72715,72716,72718,72720,72722,72724],{"class":94,"line":16849},[92,72717,54767],{"class":151},[92,72719,51419],{"class":102},[92,72721,376],{"class":151},[92,72723,51474],{"class":98},[92,72725,1269],{"class":102},[92,72727,72728,72730,72732,72734],{"class":94,"line":16861},[92,72729,57268],{"class":151},[92,72731,51419],{"class":102},[92,72733,23717],{"class":151},[92,72735,1269],{"class":102},[92,72737,72738,72740,72742,72744,72746],{"class":94,"line":16866},[92,72739,54904],{"class":151},[92,72741,51419],{"class":102},[92,72743,652],{"class":151},[92,72745,51474],{"class":98},[92,72747,1269],{"class":102},[92,72749,72750,72752,72754,72756,72758,72760,72762,72764,72767,72769,72772,72774,72776],{"class":94,"line":16879},[92,72751,61959],{"class":151},[92,72753,51419],{"class":102},[92,72755,320],{"class":151},[92,72757,51474],{"class":98},[92,72759,51503],{"class":151},[92,72761,72242],{"class":151},[92,72763,103],{"class":102},[92,72765,72766],{"class":151},"228",[92,72768,12415],{"class":102},[92,72770,72771],{"class":151},"225",[92,72773,12415],{"class":102},[92,72775,72771],{"class":151},[92,72777,2698],{"class":102},[92,72779,72780,72783,72785,72787,72789],{"class":94,"line":16884},[92,72781,72782],{"class":151},"      padding-left",[92,72784,51419],{"class":102},[92,72786,422],{"class":151},[92,72788,51474],{"class":98},[92,72790,1269],{"class":102},[92,72792,72793,72795,72797,72799,72802,72804,72806],{"class":94,"line":16889},[92,72794,61842],{"class":151},[92,72796,51419],{"class":102},[92,72798,28103],{"class":151},[92,72800,72801],{"class":151}," linear",[92,72803,61849],{"class":151},[92,72805,798],{"class":98},[92,72807,1269],{"class":102},[92,72809,72810],{"class":94,"line":16894},[92,72811,2166],{"class":102},[92,72813,72814],{"class":94,"line":16907},[92,72815,2379],{"emptyLinePlaceholder":17},[92,72817,72818,72821,72823,72825],{"class":94,"line":16912},[92,72819,72820],{"class":51282},"    tbody",[92,72822,70126],{"class":51282},[92,72824,60922],{"class":1942},[92,72826,15552],{"class":102},[92,72828,72829,72831,72833,72835,72837,72839,72841,72843,72845,72847],{"class":94,"line":32615},[92,72830,54866],{"class":151},[92,72832,51419],{"class":102},[92,72834,72305],{"class":151},[92,72836,103],{"class":102},[92,72838,72562],{"class":151},[92,72840,12415],{"class":102},[92,72842,72567],{"class":151},[92,72844,12415],{"class":102},[92,72846,72567],{"class":151},[92,72848,2698],{"class":102},[92,72850,72851,72853,72855,72857],{"class":94,"line":32621},[92,72852,62007],{"class":151},[92,72854,51419],{"class":102},[92,72856,62012],{"class":151},[92,72858,1269],{"class":102},[92,72860,72861],{"class":94,"line":32627},[92,72862,2166],{"class":102},[92,72864,72865],{"class":94,"line":32633},[92,72866,2379],{"emptyLinePlaceholder":17},[92,72868,72869,72871,72873,72876,72878],{"class":94,"line":32639},[92,72870,72820],{"class":51282},[92,72872,70126],{"class":51282},[92,72874,72875],{"class":51282}," td",[92,72877,1377],{"class":51282},[92,72879,15552],{"class":102},[92,72881,72882,72884,72886,72888],{"class":94,"line":32650},[92,72883,54991],{"class":151},[92,72885,51419],{"class":102},[92,72887,60851],{"class":151},[92,72889,1269],{"class":102},[92,72891,72892,72894,72896,72898,72900],{"class":94,"line":32656},[92,72893,54753],{"class":151},[92,72895,51419],{"class":102},[92,72897,1010],{"class":151},[92,72899,51474],{"class":98},[92,72901,1269],{"class":102},[92,72903,72904,72906,72908,72910,72912],{"class":94,"line":32676},[92,72905,54767],{"class":151},[92,72907,51419],{"class":102},[92,72909,928],{"class":151},[92,72911,51474],{"class":98},[92,72913,1269],{"class":102},[92,72915,72916,72918,72920,72922,72924],{"class":94,"line":32682},[92,72917,57341],{"class":151},[92,72919,51419],{"class":102},[92,72921,928],{"class":151},[92,72923,51474],{"class":98},[92,72925,1269],{"class":102},[92,72927,72928,72930,72932,72934,72936],{"class":94,"line":32693},[92,72929,62059],{"class":151},[92,72931,51419],{"class":102},[92,72933,180],{"class":151},[92,72935,51474],{"class":98},[92,72937,1269],{"class":102},[92,72939,72940,72942,72944,72946],{"class":94,"line":32699},[92,72941,57398],{"class":151},[92,72943,51419],{"class":102},[92,72945,60824],{"class":151},[92,72947,1269],{"class":102},[92,72949,72950,72952,72954,72956],{"class":94,"line":32705},[92,72951,57268],{"class":151},[92,72953,51419],{"class":102},[92,72955,51574],{"class":151},[92,72957,1269],{"class":102},[92,72959,72960,72962,72964,72966],{"class":94,"line":32711},[92,72961,63952],{"class":151},[92,72963,51419],{"class":102},[92,72965,54719],{"class":151},[92,72967,1269],{"class":102},[92,72969,72970,72972,72974,72977],{"class":94,"line":32717},[92,72971,54866],{"class":151},[92,72973,51419],{"class":102},[92,72975,72976],{"class":151},"orange",[92,72978,1269],{"class":102},[92,72980,72981,72983,72985,72988,72990],{"class":94,"line":32723},[92,72982,55116],{"class":151},[92,72984,51419],{"class":102},[92,72986,72987],{"class":151},"12.5",[92,72989,51474],{"class":98},[92,72991,1269],{"class":102},[92,72993,72994],{"class":94,"line":32729},[92,72995,2166],{"class":102},[92,72997,72998,73000,73002],{"class":94,"line":32735},[92,72999,52399],{"class":102},[92,73001,5106],{"class":51282},[92,73003,51289],{"class":102},[92,73005,73006,73008,73010],{"class":94,"line":32755},[92,73007,51767],{"class":102},[92,73009,51316],{"class":51282},[92,73011,51289],{"class":102},[92,73013,73014],{"class":94,"line":32761},[92,73015,2379],{"emptyLinePlaceholder":17},[92,73017,73018,73020,73022],{"class":94,"line":32777},[92,73019,1013],{"class":102},[92,73021,51782],{"class":51282},[92,73023,51289],{"class":102},[92,73025,73026,73028,73030,73033,73035],{"class":94,"line":32783},[92,73027,52126],{"class":102},[92,73029,33],{"class":51282},[92,73031,73032],{"class":102},">学生就业统计表\u003C\u002F",[92,73034,33],{"class":51282},[92,73036,51289],{"class":102},[92,73038,73039,73041,73043,73045,73047,73049,73051,73053,73055],{"class":94,"line":32797},[92,73040,52126],{"class":102},[92,73042,66607],{"class":51282},[92,73044,53468],{"class":1942},[92,73046,148],{"class":102},[92,73048,62646],{"class":207},[92,73050,69052],{"class":1942},[92,73052,148],{"class":102},[92,73054,31758],{"class":207},[92,73056,51289],{"class":102},[92,73058,73059,73061,73063,73065,73067,73069,73071,73073,73075,73077,73079,73082,73084,73086,73088],{"class":94,"line":32803},[92,73060,51323],{"class":102},[92,73062,53803],{"class":51282},[92,73064,53806],{"class":1942},[92,73066,148],{"class":102},[92,73068,62681],{"class":207},[92,73070,14900],{"class":1942},[92,73072,148],{"class":102},[92,73074,69078],{"class":207},[92,73076,61002],{"class":1942},[92,73078,148],{"class":102},[92,73080,73081],{"class":207},"\"姓名\"",[92,73083,53468],{"class":1942},[92,73085,148],{"class":102},[92,73087,69078],{"class":207},[92,73089,51289],{"class":102},[92,73091,73092,73094,73096,73098,73100,73102,73104,73106,73108,73110,73112,73115,73117,73119,73121],{"class":94,"line":32818},[92,73093,51323],{"class":102},[92,73095,53803],{"class":51282},[92,73097,53806],{"class":1942},[92,73099,148],{"class":102},[92,73101,62681],{"class":207},[92,73103,14900],{"class":1942},[92,73105,148],{"class":102},[92,73107,69106],{"class":207},[92,73109,61002],{"class":1942},[92,73111,148],{"class":102},[92,73113,73114],{"class":207},"\"年龄\"",[92,73116,53468],{"class":1942},[92,73118,148],{"class":102},[92,73120,69106],{"class":207},[92,73122,51289],{"class":102},[92,73124,73125,73127,73129,73131,73133,73135,73137,73139,73141,73143,73145,73148,73150,73152,73154],{"class":94,"line":32824},[92,73126,51323],{"class":102},[92,73128,53803],{"class":51282},[92,73130,53806],{"class":1942},[92,73132,148],{"class":102},[92,73134,62681],{"class":207},[92,73136,14900],{"class":1942},[92,73138,148],{"class":102},[92,73140,69208],{"class":207},[92,73142,61002],{"class":1942},[92,73144,148],{"class":102},[92,73146,73147],{"class":207},"\"薪资\"",[92,73149,53468],{"class":1942},[92,73151,148],{"class":102},[92,73153,69208],{"class":207},[92,73155,51289],{"class":102},[92,73157,73158,73160,73162,73164,73166,73168,73170,73172,73174,73176,73178,73180],{"class":94,"line":32833},[92,73159,51323],{"class":102},[92,73161,69126],{"class":51282},[92,73163,14900],{"class":1942},[92,73165,148],{"class":102},[92,73167,69133],{"class":207},[92,73169,14939],{"class":1942},[92,73171,148],{"class":102},[92,73173,7632],{"class":207},[92,73175,53468],{"class":1942},[92,73177,148],{"class":102},[92,73179,69133],{"class":207},[92,73181,51289],{"class":102},[92,73183,73184,73186,73188,73190,73192,73194,73196,73198],{"class":94,"line":32839},[92,73185,55216],{"class":102},[92,73187,69148],{"class":51282},[92,73189,66633],{"class":1942},[92,73191,148],{"class":102},[92,73193,9941],{"class":207},[92,73195,69157],{"class":102},[92,73197,69148],{"class":51282},[92,73199,51289],{"class":102},[92,73201,73202,73204,73206,73208,73210,73212,73214,73216],{"class":94,"line":32848},[92,73203,55216],{"class":102},[92,73205,69148],{"class":51282},[92,73207,66633],{"class":1942},[92,73209,148],{"class":102},[92,73211,10010],{"class":207},[92,73213,69176],{"class":102},[92,73215,69148],{"class":51282},[92,73217,51289],{"class":102},[92,73219,73220,73222,73224],{"class":94,"line":32854},[92,73221,51758],{"class":102},[92,73223,69126],{"class":51282},[92,73225,51289],{"class":102},[92,73227,73228,73230,73232,73234,73236,73238,73240,73242,73244,73246,73248,73250],{"class":94,"line":32860},[92,73229,51323],{"class":102},[92,73231,69126],{"class":51282},[92,73233,14900],{"class":1942},[92,73235,148],{"class":102},[92,73237,69230],{"class":207},[92,73239,14939],{"class":1942},[92,73241,148],{"class":102},[92,73243,7632],{"class":207},[92,73245,53468],{"class":1942},[92,73247,148],{"class":102},[92,73249,69230],{"class":207},[92,73251,51289],{"class":102},[92,73253,73254,73256,73258,73260,73262,73264,73266,73268],{"class":94,"line":32869},[92,73255,55216],{"class":102},[92,73257,69148],{"class":51282},[92,73259,66633],{"class":1942},[92,73261,148],{"class":102},[92,73263,69251],{"class":207},[92,73265,69254],{"class":102},[92,73267,69148],{"class":51282},[92,73269,51289],{"class":102},[92,73271,73272,73274,73276,73278,73280,73282,73284,73286],{"class":94,"line":32875},[92,73273,55216],{"class":102},[92,73275,69148],{"class":51282},[92,73277,66633],{"class":1942},[92,73279,148],{"class":102},[92,73281,69271],{"class":207},[92,73283,69274],{"class":102},[92,73285,69148],{"class":51282},[92,73287,51289],{"class":102},[92,73289,73290,73292,73294,73296,73298,73300,73302,73304],{"class":94,"line":32886},[92,73291,55216],{"class":102},[92,73293,69148],{"class":51282},[92,73295,66633],{"class":1942},[92,73297,148],{"class":102},[92,73299,69291],{"class":207},[92,73301,69294],{"class":102},[92,73303,69148],{"class":51282},[92,73305,51289],{"class":102},[92,73307,73308,73310,73312,73314,73316,73318,73320,73322],{"class":94,"line":32892},[92,73309,55216],{"class":102},[92,73311,69148],{"class":51282},[92,73313,66633],{"class":1942},[92,73315,148],{"class":102},[92,73317,69311],{"class":207},[92,73319,69314],{"class":102},[92,73321,69148],{"class":51282},[92,73323,51289],{"class":102},[92,73325,73326,73328,73330,73332,73334,73336,73338,73340],{"class":94,"line":32911},[92,73327,55216],{"class":102},[92,73329,69148],{"class":51282},[92,73331,66633],{"class":1942},[92,73333,148],{"class":102},[92,73335,69331],{"class":207},[92,73337,69334],{"class":102},[92,73339,69148],{"class":51282},[92,73341,51289],{"class":102},[92,73343,73344,73346,73348],{"class":94,"line":32917},[92,73345,51758],{"class":102},[92,73347,69126],{"class":51282},[92,73349,51289],{"class":102},[92,73351,73352,73354,73356],{"class":94,"line":32928},[92,73353,51323],{"class":102},[92,73355,53869],{"class":51282},[92,73357,51289],{"class":102},[92,73359,73360,73362,73364,73367,73369,73372,73374],{"class":94,"line":32934},[92,73361,55216],{"class":102},[92,73363,92],{"class":51282},[92,73365,73366],{"class":102},">+\u003C\u002F",[92,73368,92],{"class":51282},[92,73370,73371],{"class":102},">添加\u003C\u002F",[92,73373,53869],{"class":51282},[92,73375,51289],{"class":102},[92,73377,73378,73380,73382],{"class":94,"line":32954},[92,73379,52399],{"class":102},[92,73381,66607],{"class":51282},[92,73383,51289],{"class":102},[92,73385,73386,73388,73390,73392,73394,73396,73399,73401,73404,73406,73409,73411],{"class":94,"line":32970},[92,73387,52126],{"class":102},[92,73389,51593],{"class":51282},[92,73391,53468],{"class":1942},[92,73393,148],{"class":102},[92,73395,62562],{"class":207},[92,73397,73398],{"class":102},">共有数据 \u003C",[92,73400,92],{"class":51282},[92,73402,73403],{"class":102},">0\u003C\u002F",[92,73405,92],{"class":51282},[92,73407,73408],{"class":102},"> 条\u003C\u002F",[92,73410,51593],{"class":51282},[92,73412,51289],{"class":102},[92,73414,73415,73417,73419],{"class":94,"line":32976},[92,73416,52126],{"class":102},[92,73418,240],{"class":51282},[92,73420,51289],{"class":102},[92,73422,73423,73425,73427],{"class":94,"line":32990},[92,73424,51323],{"class":102},[92,73426,243],{"class":51282},[92,73428,51289],{"class":102},[92,73430,73431,73433,73435],{"class":94,"line":32996},[92,73432,55216],{"class":102},[92,73434,246],{"class":51282},[92,73436,51289],{"class":102},[92,73438,73439,73441,73443,73446,73448],{"class":94,"line":33002},[92,73440,55284],{"class":102},[92,73442,249],{"class":51282},[92,73444,73445],{"class":102},">ID\u003C\u002F",[92,73447,249],{"class":51282},[92,73449,51289],{"class":102},[92,73451,73452,73454,73456,73458,73460],{"class":94,"line":33013},[92,73453,55284],{"class":102},[92,73455,249],{"class":51282},[92,73457,69437],{"class":102},[92,73459,249],{"class":51282},[92,73461,51289],{"class":102},[92,73463,73464,73466,73468,73470,73472],{"class":94,"line":33019},[92,73465,55284],{"class":102},[92,73467,249],{"class":51282},[92,73469,69450],{"class":102},[92,73471,249],{"class":51282},[92,73473,51289],{"class":102},[92,73475,73476,73478,73480,73482,73484],{"class":94,"line":33025},[92,73477,55284],{"class":102},[92,73479,249],{"class":51282},[92,73481,69463],{"class":102},[92,73483,249],{"class":51282},[92,73485,51289],{"class":102},[92,73487,73488,73490,73492,73494,73496],{"class":94,"line":33035},[92,73489,55284],{"class":102},[92,73491,249],{"class":51282},[92,73493,69476],{"class":102},[92,73495,249],{"class":51282},[92,73497,51289],{"class":102},[92,73499,73500,73502,73504,73506,73508],{"class":94,"line":33041},[92,73501,55284],{"class":102},[92,73503,249],{"class":51282},[92,73505,69489],{"class":102},[92,73507,249],{"class":51282},[92,73509,51289],{"class":102},[92,73511,73512,73514,73516,73519,73521],{"class":94,"line":33052},[92,73513,55284],{"class":102},[92,73515,249],{"class":51282},[92,73517,73518],{"class":102},">录入时间\u003C\u002F",[92,73520,249],{"class":51282},[92,73522,51289],{"class":102},[92,73524,73525,73527,73529,73531,73533],{"class":94,"line":33058},[92,73526,55284],{"class":102},[92,73528,249],{"class":51282},[92,73530,69502],{"class":102},[92,73532,249],{"class":51282},[92,73534,51289],{"class":102},[92,73536,73537,73539,73541],{"class":94,"line":33068},[92,73538,55389],{"class":102},[92,73540,246],{"class":51282},[92,73542,51289],{"class":102},[92,73544,73545,73547,73549],{"class":94,"line":33073},[92,73546,51758],{"class":102},[92,73548,243],{"class":51282},[92,73550,51289],{"class":102},[92,73552,73553,73555,73557],{"class":94,"line":33079},[92,73554,51323],{"class":102},[92,73556,287],{"class":51282},[92,73558,51289],{"class":102},[92,73560,73561],{"class":94,"line":33128},[92,73562,73563],{"class":161},"      \u003C!-- \u003Ctr>\n",[92,73565,73566],{"class":94,"line":33175},[92,73567,73568],{"class":161},"        \u003Ctd>1\u003C\u002Ftd>\n",[92,73570,73571],{"class":94,"line":33180},[92,73572,73568],{"class":161},[92,73574,73575],{"class":94,"line":33186},[92,73576,73568],{"class":161},[92,73578,73579],{"class":94,"line":33205},[92,73580,73568],{"class":161},[92,73582,73583],{"class":94,"line":33211},[92,73584,73568],{"class":161},[92,73586,73587],{"class":94,"line":33231},[92,73588,73568],{"class":161},[92,73590,73591],{"class":94,"line":33237},[92,73592,73568],{"class":161},[92,73594,73595],{"class":94,"line":33243},[92,73596,73597],{"class":161},"        \u003Ctd>\n",[92,73599,73600],{"class":94,"line":33253},[92,73601,73602],{"class":161},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[92,73604,73605],{"class":94,"line":33258},[92,73606,73607],{"class":161},"        \u003C\u002Ftd>\n",[92,73609,73610],{"class":94,"line":33264},[92,73611,73612],{"class":161},"      \u003C\u002Ftr> -->\n",[92,73614,73615,73617,73619],{"class":94,"line":33280},[92,73616,51758],{"class":102},[92,73618,287],{"class":51282},[92,73620,51289],{"class":102},[92,73622,73623,73625,73627],{"class":94,"line":33325},[92,73624,52399],{"class":102},[92,73626,240],{"class":51282},[92,73628,51289],{"class":102},[92,73630,73631,73633,73635],{"class":94,"line":33331},[92,73632,52126],{"class":102},[92,73634,51795],{"class":51282},[92,73636,51289],{"class":102},[92,73638,73639],{"class":94,"line":33337},[92,73640,73641],{"class":161},"    \u002F\u002F const initData = [{\n",[92,73643,73644],{"class":94,"line":33343},[92,73645,73646],{"class":161},"    \u002F\u002F   unameId: 1,\n",[92,73648,73649],{"class":94,"line":33354},[92,73650,73651],{"class":161},"    \u002F\u002F   uname: '华晨宇',\n",[92,73653,73654],{"class":94,"line":33360},[92,73655,73656],{"class":161},"    \u002F\u002F   age: 22,\n",[92,73658,73659],{"class":94,"line":33366},[92,73660,73661],{"class":161},"    \u002F\u002F   salary: 12000,\n",[92,73663,73664],{"class":94,"line":33372},[92,73665,73666],{"class":161},"    \u002F\u002F   gender: '男',\n",[92,73668,73669],{"class":94,"line":33390},[92,73670,73671],{"class":161},"    \u002F\u002F   city: '北京',\n",[92,73673,73674],{"class":94,"line":33404},[92,73675,73676],{"class":161},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[92,73678,73679],{"class":94,"line":33413},[92,73680,73681],{"class":161},"    \u002F\u002F }]\n",[92,73683,73684],{"class":94,"line":33422},[92,73685,73686],{"class":161},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[92,73688,73689],{"class":94,"line":33431},[92,73690,73691],{"class":161},"    \u002F\u002F 1.渲染业务\n",[92,73693,73694],{"class":94,"line":33440},[92,73695,73696],{"class":161},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[92,73698,73699],{"class":94,"line":33446},[92,73700,73701],{"class":161},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[92,73703,73704],{"class":94,"line":33452},[92,73705,73706],{"class":161},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[92,73708,73709],{"class":94,"line":33460},[92,73710,2379],{"emptyLinePlaceholder":17},[92,73712,73713],{"class":94,"line":33465},[92,73714,73715],{"class":161},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[92,73717,73718],{"class":94,"line":33471},[92,73719,73720],{"class":161},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[92,73722,73723,73725,73727,73729],{"class":94,"line":33482},[92,73724,11201],{"class":98},[92,73726,57677],{"class":151},[92,73728,13544],{"class":98},[92,73730,51820],{"class":102},[92,73732,73733,73736,73738],{"class":94,"line":33488},[92,73734,73735],{"class":102},"    console.",[92,73737,58229],{"class":1942},[92,73739,52394],{"class":102},[92,73741,73742],{"class":94,"line":33508},[92,73743,2379],{"emptyLinePlaceholder":17},[92,73745,73746],{"class":94,"line":33514},[92,73747,73748],{"class":161},"    \u002F\u002F 时间函数\n",[92,73750,73751,73753,73756],{"class":94,"line":33520},[92,73752,70066],{"class":98},[92,73754,73755],{"class":1942}," getTime",[92,73757,10833],{"class":102},[92,73759,73760,73762,73765,73767,73769,73772],{"class":94,"line":33526},[92,73761,58210],{"class":98},[92,73763,73764],{"class":151}," date",[92,73766,13544],{"class":98},[92,73768,11558],{"class":98},[92,73770,73771],{"class":1942}," Date",[92,73773,1955],{"class":102},[92,73775,73776,73778,73780,73782,73785,73788,73790,73792,73794,73797,73800,73802,73804,73806,73808,73810,73812,73814],{"class":94,"line":33543},[92,73777,58210],{"class":98},[92,73779,16071],{"class":151},[92,73781,13544],{"class":98},[92,73783,73784],{"class":102}," date.",[92,73786,73787],{"class":1942},"getHours",[92,73789,13030],{"class":102},[92,73791,1013],{"class":98},[92,73793,2017],{"class":151},[92,73795,73796],{"class":98}," ?",[92,73798,73799],{"class":207}," '0'",[92,73801,45548],{"class":98},[92,73803,73784],{"class":102},[92,73805,73787],{"class":1942},[92,73807,13030],{"class":102},[92,73809,962],{"class":98},[92,73811,73784],{"class":102},[92,73813,73787],{"class":1942},[92,73815,1955],{"class":102},[92,73817,73818,73820,73823,73825,73827,73830,73832,73834,73836,73838,73840,73842,73844,73846,73848,73850,73852,73854],{"class":94,"line":33549},[92,73819,58210],{"class":98},[92,73821,73822],{"class":151}," m",[92,73824,13544],{"class":98},[92,73826,73784],{"class":102},[92,73828,73829],{"class":1942},"getMinutes",[92,73831,13030],{"class":102},[92,73833,1013],{"class":98},[92,73835,2017],{"class":151},[92,73837,73796],{"class":98},[92,73839,73799],{"class":207},[92,73841,45548],{"class":98},[92,73843,73784],{"class":102},[92,73845,73829],{"class":1942},[92,73847,13030],{"class":102},[92,73849,962],{"class":98},[92,73851,73784],{"class":102},[92,73853,73829],{"class":1942},[92,73855,1955],{"class":102},[92,73857,73858,73860,73862,73864,73866,73869,73871,73873,73875,73877,73879,73881,73883,73885,73887,73889,73891,73893],{"class":94,"line":33555},[92,73859,58210],{"class":98},[92,73861,8408],{"class":151},[92,73863,13544],{"class":98},[92,73865,73784],{"class":102},[92,73867,73868],{"class":1942},"getSeconds",[92,73870,13030],{"class":102},[92,73872,1013],{"class":98},[92,73874,2017],{"class":151},[92,73876,73796],{"class":98},[92,73878,73799],{"class":207},[92,73880,45548],{"class":98},[92,73882,73784],{"class":102},[92,73884,73868],{"class":1942},[92,73886,13030],{"class":102},[92,73888,962],{"class":98},[92,73890,73784],{"class":102},[92,73892,73868],{"class":1942},[92,73894,1955],{"class":102},[92,73896,73897,73899,73902,73904,73906,73909,73911,73914,73916,73919,73921,73923,73926,73928,73930,73932,73934,73936,73938,73941,73943,73946,73948,73951,73953,73955,73957],{"class":94,"line":33561},[92,73898,58210],{"class":98},[92,73900,73901],{"class":151}," str",[92,73903,13544],{"class":98},[92,73905,62885],{"class":207},[92,73907,73908],{"class":102},"date",[92,73910,661],{"class":207},[92,73912,73913],{"class":1942},"getFullYear",[92,73915,2406],{"class":207},[92,73917,73918],{"class":207},"}\u002F${",[92,73920,73908],{"class":102},[92,73922,661],{"class":207},[92,73924,73925],{"class":1942},"getMonth",[92,73927,13030],{"class":207},[92,73929,584],{"class":98},[92,73931,25100],{"class":151},[92,73933,73918],{"class":207},[92,73935,73908],{"class":102},[92,73937,661],{"class":207},[92,73939,73940],{"class":1942},"getDate",[92,73942,2406],{"class":207},[92,73944,73945],{"class":207},"} ${",[92,73947,518],{"class":102},[92,73949,73950],{"class":207},"}:${",[92,73952,647],{"class":102},[92,73954,73950],{"class":207},[92,73956,798],{"class":102},[92,73958,73959],{"class":207},"}`\n",[92,73961,73962,73965],{"class":94,"line":33567},[92,73963,73964],{"class":98},"      return",[92,73966,73967],{"class":102}," str\n",[92,73969,73970],{"class":94,"line":33573},[92,73971,2166],{"class":102},[92,73973,73974],{"class":94,"line":33600},[92,73975,73976],{"class":161},"    \u002F\u002F 渲染函数\n",[92,73978,73979,73981,73983,73985,73987,73989,73991,73993],{"class":94,"line":33624},[92,73980,11201],{"class":98},[92,73982,69729],{"class":151},[92,73984,13544],{"class":98},[92,73986,54378],{"class":102},[92,73988,54381],{"class":1942},[92,73990,103],{"class":102},[92,73992,69740],{"class":207},[92,73994,109],{"class":102},[92,73996,73997,73999,74001],{"class":94,"line":33630},[92,73998,70066],{"class":98},[92,74000,70069],{"class":1942},[92,74002,10833],{"class":102},[92,74004,74005],{"class":94,"line":33636},[92,74006,74007],{"class":161},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[92,74009,74010],{"class":94,"line":33642},[92,74011,74012],{"class":161},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[92,74014,74015,74017,74020,74022,74024,74027,74029,74031,74033,74036,74038,74041],{"class":94,"line":33653},[92,74016,58210],{"class":98},[92,74018,74019],{"class":151}," trArr",[92,74021,13544],{"class":98},[92,74023,51947],{"class":102},[92,74025,74026],{"class":1942},"map",[92,74028,103],{"class":102},[92,74030,54431],{"class":98},[92,74032,1637],{"class":102},[92,74034,74035],{"class":5196},"ele",[92,74037,12415],{"class":102},[92,74039,74040],{"class":5196},"index",[92,74042,12422],{"class":102},[92,74044,74045,74047],{"class":94,"line":33664},[92,74046,14732],{"class":98},[92,74048,70150],{"class":207},[92,74050,74051],{"class":94,"line":33670},[92,74052,74053],{"class":207},"      \u003Ctr>\n",[92,74055,74056,74058,74060,74062,74065],{"class":94,"line":33687},[92,74057,70155],{"class":207},[92,74059,74035],{"class":102},[92,74061,661],{"class":207},[92,74063,74064],{"class":102},"unameId",[92,74066,70170],{"class":207},[92,74068,74069,74071,74073,74075,74077],{"class":94,"line":33710},[92,74070,70155],{"class":207},[92,74072,74035],{"class":102},[92,74074,661],{"class":207},[92,74076,70186],{"class":102},[92,74078,70170],{"class":207},[92,74080,74081,74083,74085,74087,74089],{"class":94,"line":33733},[92,74082,70155],{"class":207},[92,74084,74035],{"class":102},[92,74086,661],{"class":207},[92,74088,70203],{"class":102},[92,74090,70170],{"class":207},[92,74092,74093,74095,74097,74099,74101],{"class":94,"line":33739},[92,74094,70155],{"class":207},[92,74096,74035],{"class":102},[92,74098,661],{"class":207},[92,74100,70220],{"class":102},[92,74102,70170],{"class":207},[92,74104,74105,74107,74109,74111,74113],{"class":94,"line":33744},[92,74106,70155],{"class":207},[92,74108,74035],{"class":102},[92,74110,661],{"class":207},[92,74112,70237],{"class":102},[92,74114,70170],{"class":207},[92,74116,74117,74119,74121,74123,74125],{"class":94,"line":33753},[92,74118,70155],{"class":207},[92,74120,74035],{"class":102},[92,74122,661],{"class":207},[92,74124,70254],{"class":102},[92,74126,70170],{"class":207},[92,74128,74129,74131,74133,74135,74137],{"class":94,"line":33763},[92,74130,70155],{"class":207},[92,74132,74035],{"class":102},[92,74134,661],{"class":207},[92,74136,2366],{"class":102},[92,74138,70170],{"class":207},[92,74140,74141],{"class":94,"line":33769},[92,74142,73597],{"class":207},[92,74144,74145,74148,74150],{"class":94,"line":33774},[92,74146,74147],{"class":207},"          \u003Ca href=\"#\" data-id=\"${",[92,74149,74040],{"class":102},[92,74151,74152],{"class":207},"}\">删除\u003C\u002Fa>\n",[92,74154,74155],{"class":94,"line":33780},[92,74156,73607],{"class":207},[92,74158,74159],{"class":94,"line":33793},[92,74160,74161],{"class":207},"      \u003C\u002Ftr>\n",[92,74163,74164],{"class":94,"line":33799},[92,74165,74166],{"class":207},"  `\n",[92,74168,74169],{"class":94,"line":33810},[92,74170,64797],{"class":102},[92,74172,74173,74175,74177],{"class":94,"line":33821},[92,74174,58226],{"class":102},[92,74176,58229],{"class":1942},[92,74178,74179],{"class":102},"(trArr)\n",[92,74181,74182],{"class":94,"line":33840},[92,74183,2379],{"emptyLinePlaceholder":17},[92,74185,74186],{"class":94,"line":49500},[92,74187,74188],{"class":161},"      \u002F\u002F (2) 把数组转换为字符串join\n",[92,74190,74191],{"class":94,"line":49505},[92,74192,74193],{"class":161},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[92,74195,74196,74198,74200,74203,74206,74208,74211],{"class":94,"line":49514},[92,74197,70081],{"class":102},[92,74199,148],{"class":98},[92,74201,74202],{"class":102}," trArr.",[92,74204,74205],{"class":1942},"join",[92,74207,103],{"class":102},[92,74209,74210],{"class":207},"''",[92,74212,109],{"class":102},[92,74214,74215],{"class":94,"line":49523},[92,74216,74217],{"class":161},"      \u002F\u002F 显示共有几条\n",[92,74219,74220,74222,74224,74226,74229,74232,74234,74236],{"class":94,"line":49528},[92,74221,55753],{"class":102},[92,74223,54381],{"class":1942},[92,74225,103],{"class":102},[92,74227,74228],{"class":207},"'.total span'",[92,74230,74231],{"class":102},").innerHTML ",[92,74233,148],{"class":98},[92,74235,51947],{"class":102},[92,74237,55813],{"class":151},[92,74239,74240],{"class":94,"line":49533},[92,74241,2166],{"class":102},[92,74243,74244],{"class":94,"line":49538},[92,74245,74246],{"class":161},"    \u002F\u002F render()\n",[92,74248,74249],{"class":94,"line":49551},[92,74250,2379],{"emptyLinePlaceholder":17},[92,74252,74253],{"class":94,"line":49556},[92,74254,74255],{"class":161},"    \u002F\u002F 获取DOM对象\n",[92,74257,74258,74260,74262,74264,74266,74268,74270,74272],{"class":94,"line":49565},[92,74259,11201],{"class":98},[92,74261,69803],{"class":151},[92,74263,13544],{"class":98},[92,74265,54378],{"class":102},[92,74267,54381],{"class":1942},[92,74269,103],{"class":102},[92,74271,69814],{"class":207},[92,74273,109],{"class":102},[92,74275,74276,74278,74280,74282,74284,74286,74288,74290],{"class":94,"line":49574},[92,74277,11201],{"class":98},[92,74279,69630],{"class":151},[92,74281,13544],{"class":98},[92,74283,54378],{"class":102},[92,74285,54381],{"class":1942},[92,74287,103],{"class":102},[92,74289,69641],{"class":207},[92,74291,109],{"class":102},[92,74293,74294,74296,74298,74300,74302,74304,74306,74308],{"class":94,"line":49591},[92,74295,11201],{"class":98},[92,74297,15669],{"class":151},[92,74299,13544],{"class":98},[92,74301,54378],{"class":102},[92,74303,54381],{"class":1942},[92,74305,103],{"class":102},[92,74307,69660],{"class":207},[92,74309,109],{"class":102},[92,74311,74313,74315,74317,74319,74321,74323,74325,74327],{"class":94,"line":74312},231,[92,74314,11201],{"class":98},[92,74316,69689],{"class":151},[92,74318,13544],{"class":98},[92,74320,54378],{"class":102},[92,74322,54381],{"class":1942},[92,74324,103],{"class":102},[92,74326,69700],{"class":207},[92,74328,109],{"class":102},[92,74330,74332,74334,74336,74338,74340,74342,74344,74346],{"class":94,"line":74331},232,[92,74333,11201],{"class":98},[92,74335,69669],{"class":151},[92,74337,13544],{"class":98},[92,74339,54378],{"class":102},[92,74341,54381],{"class":1942},[92,74343,103],{"class":102},[92,74345,69680],{"class":207},[92,74347,109],{"class":102},[92,74349,74351,74353,74355,74357,74359,74361,74363,74365],{"class":94,"line":74350},233,[92,74352,11201],{"class":98},[92,74354,69709],{"class":151},[92,74356,13544],{"class":98},[92,74358,54378],{"class":102},[92,74360,54381],{"class":1942},[92,74362,103],{"class":102},[92,74364,69720],{"class":207},[92,74366,109],{"class":102},[92,74368,74370],{"class":94,"line":74369},234,[92,74371,2379],{"emptyLinePlaceholder":17},[92,74373,74375],{"class":94,"line":74374},235,[92,74376,74377],{"class":161},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[92,74379,74381,74383,74385,74387,74389,74391,74393,74395,74397],{"class":94,"line":74380},236,[92,74382,69821],{"class":102},[92,74384,57795],{"class":1942},[92,74386,103],{"class":102},[92,74388,69828],{"class":207},[92,74390,12415],{"class":102},[92,74392,54431],{"class":98},[92,74394,1637],{"class":102},[92,74396,177],{"class":5196},[92,74398,12422],{"class":102},[92,74400,74402],{"class":94,"line":74401},237,[92,74403,74404],{"class":161},"      \u002F\u002F 禁止浏览器跳转\n",[92,74406,74408,74410,74412],{"class":94,"line":74407},238,[92,74409,69848],{"class":102},[92,74411,69851],{"class":1942},[92,74413,1955],{"class":102},[92,74415,74417],{"class":94,"line":74416},239,[92,74418,74419],{"class":161},"      \u002F\u002F 非空判断\n",[92,74421,74423],{"class":94,"line":74422},240,[92,74424,74425],{"class":161},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[92,74427,74429],{"class":94,"line":74428},241,[92,74430,74431],{"class":161},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[92,74433,74435,74437,74439,74441,74444,74446,74449,74452,74454,74456],{"class":94,"line":74434},242,[92,74436,54462],{"class":98},[92,74438,1637],{"class":102},[92,74440,329],{"class":98},[92,74442,74443],{"class":102},"uname.value ",[92,74445,71339],{"class":98},[92,74447,74448],{"class":98}," !",[92,74450,74451],{"class":102},"age.value ",[92,74453,71339],{"class":98},[92,74455,74448],{"class":98},[92,74457,74458],{"class":102},"salary.value) {\n",[92,74460,74462,74464,74466,74468,74470],{"class":94,"line":74461},243,[92,74463,14732],{"class":98},[92,74465,69922],{"class":1942},[92,74467,103],{"class":102},[92,74469,69927],{"class":207},[92,74471,109],{"class":102},[92,74473,74475],{"class":94,"line":74474},244,[92,74476,52380],{"class":102},[92,74478,74480,74482,74484],{"class":94,"line":74479},245,[92,74481,57989],{"class":102},[92,74483,51866],{"class":1942},[92,74485,74486],{"class":102},"({\n",[92,74488,74490],{"class":94,"line":74489},246,[92,74491,74492],{"class":161},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[92,74494,74496],{"class":94,"line":74495},247,[92,74497,74498],{"class":161},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[92,74500,74502],{"class":94,"line":74501},248,[92,74503,74504],{"class":161},"        \u002F\u002F 对象的序号应为数组长度+1\n",[92,74506,74508],{"class":94,"line":74507},249,[92,74509,74510],{"class":161},"        \u002F\u002F unameId: arr.length + 1,\n",[92,74512,74514],{"class":94,"line":74513},250,[92,74515,2379],{"emptyLinePlaceholder":17},[92,74517,74519],{"class":94,"line":74518},251,[92,74520,74521],{"class":161},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[92,74523,74525],{"class":94,"line":74524},252,[92,74526,74527],{"class":161},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[92,74529,74531],{"class":94,"line":74530},253,[92,74532,74533],{"class":161},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[92,74535,74537],{"class":94,"line":74536},254,[92,74538,74539],{"class":161},"        \u002F\u002F 0当假看\n",[92,74541,74543,74546,74548,74550,74553,74555,74557,74559,74562,74564,74566,74569,74571],{"class":94,"line":74542},255,[92,74544,74545],{"class":102},"        unameId: arr.",[92,74547,51950],{"class":151},[92,74549,73796],{"class":98},[92,74551,74552],{"class":102}," arr[arr.",[92,74554,51950],{"class":151},[92,74556,52253],{"class":98},[92,74558,25100],{"class":151},[92,74560,74561],{"class":102},"].unameId ",[92,74563,584],{"class":98},[92,74565,25100],{"class":151},[92,74567,74568],{"class":98}," :",[92,74570,25100],{"class":151},[92,74572,31448],{"class":102},[92,74574,74576],{"class":94,"line":74575},256,[92,74577,69975],{"class":102},[92,74579,74581],{"class":94,"line":74580},257,[92,74582,69980],{"class":102},[92,74584,74586],{"class":94,"line":74585},258,[92,74587,69990],{"class":102},[92,74589,74591],{"class":94,"line":74590},259,[92,74592,69985],{"class":102},[92,74594,74596],{"class":94,"line":74595},260,[92,74597,74598],{"class":102},"        city: city.value,\n",[92,74600,74602],{"class":94,"line":74601},261,[92,74603,74604],{"class":161},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[92,74606,74608],{"class":94,"line":74607},262,[92,74609,74610],{"class":161},"        \u002F\u002F time: new Date().toDateString()\n",[92,74612,74614,74617,74620],{"class":94,"line":74613},263,[92,74615,74616],{"class":102},"        time: ",[92,74618,74619],{"class":1942},"getTime",[92,74621,1955],{"class":102},[92,74623,74625],{"class":94,"line":74624},264,[92,74626,64797],{"class":102},[92,74628,74630],{"class":94,"line":74629},265,[92,74631,74632],{"class":161},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[92,74634,74636,74638],{"class":94,"line":74635},266,[92,74637,70050],{"class":1942},[92,74639,1955],{"class":102},[92,74641,74643,74645,74647,74649,74651],{"class":94,"line":74642},267,[92,74644,70033],{"class":151},[92,74646,661],{"class":102},[92,74648,70038],{"class":1942},[92,74650,13030],{"class":102},[92,74652,74653],{"class":161},"\u002F\u002F重置表单\n",[92,74655,74657],{"class":94,"line":74656},268,[92,74658,74659],{"class":161},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[92,74661,74663,74666,74668,74670,74673,74675,74677,74679,74681],{"class":94,"line":74662},269,[92,74664,74665],{"class":102},"      localStorage.",[92,74667,71636],{"class":1942},[92,74669,103],{"class":102},[92,74671,74672],{"class":207},"'data'",[92,74674,12415],{"class":102},[92,74676,71646],{"class":151},[92,74678,661],{"class":102},[92,74680,71651],{"class":1942},[92,74682,74683],{"class":102},"(arr))\n",[92,74685,74687],{"class":94,"line":74686},270,[92,74688,33443],{"class":102},[92,74690,74692],{"class":94,"line":74691},271,[92,74693,2379],{"emptyLinePlaceholder":17},[92,74695,74697],{"class":94,"line":74696},272,[92,74698,74699],{"class":161},"    \u002F\u002F 3.删除业务\n",[92,74701,74703],{"class":94,"line":74702},273,[92,74704,74705],{"class":161},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[92,74707,74709,74711,74713,74715,74717,74719,74721,74723,74725],{"class":94,"line":74708},274,[92,74710,70323],{"class":102},[92,74712,57795],{"class":1942},[92,74714,103],{"class":102},[92,74716,57800],{"class":207},[92,74718,12415],{"class":102},[92,74720,54431],{"class":98},[92,74722,1637],{"class":102},[92,74724,177],{"class":5196},[92,74726,12422],{"class":102},[92,74728,74730],{"class":94,"line":74729},275,[92,74731,74732],{"class":161},"      \u002F\u002F 判断是否点击的是删除按钮\n",[92,74734,74736,74738,74740,74742,74744],{"class":94,"line":74735},276,[92,74737,54462],{"class":98},[92,74739,67016],{"class":102},[92,74741,54468],{"class":98},[92,74743,68238],{"class":207},[92,74745,12422],{"class":102},[92,74747,74749],{"class":94,"line":74748},277,[92,74750,74751],{"class":161},"        \u002F\u002F alert(1)\n",[92,74753,74755],{"class":94,"line":74754},278,[92,74756,74757],{"class":161},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[92,74759,74761],{"class":94,"line":74760},279,[92,74762,74763],{"class":161},"        \u002F\u002F console.log(e.target)\n",[92,74765,74767],{"class":94,"line":74766},280,[92,74768,74769],{"class":161},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[92,74771,74773],{"class":94,"line":74772},281,[92,74774,2379],{"emptyLinePlaceholder":17},[92,74776,74778],{"class":94,"line":74777},282,[92,74779,74780],{"class":161},"        \u002F\u002F 确认框，确然是否真的要删除\n",[92,74782,74784],{"class":94,"line":74783},283,[92,74785,74786],{"class":161},"        \u002F\u002F confirm()为确认框\n",[92,74788,74790],{"class":94,"line":74789},284,[92,74791,74792],{"class":161},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[92,74794,74796,74798,74800,74803,74805,74808],{"class":94,"line":74795},285,[92,74797,2476],{"class":98},[92,74799,1637],{"class":102},[92,74801,74802],{"class":1942},"confirm",[92,74804,103],{"class":102},[92,74806,74807],{"class":207},"'您确定要删除这条数据吗？'",[92,74809,74810],{"class":102},")) {\n",[92,74812,74814,74817,74819,74821,74823],{"class":94,"line":74813},286,[92,74815,74816],{"class":102},"          arr.",[92,74818,57992],{"class":1942},[92,74820,70376],{"class":102},[92,74822,320],{"class":151},[92,74824,109],{"class":102},[92,74826,74828],{"class":94,"line":74827},287,[92,74829,74830],{"class":161},"          \u002F\u002F 3.4 重新渲染页面\n",[92,74832,74834,74837],{"class":94,"line":74833},288,[92,74835,74836],{"class":1942},"          render",[92,74838,1955],{"class":102},[92,74840,74842],{"class":94,"line":74841},289,[92,74843,74844],{"class":161},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[92,74846,74848,74851,74853,74855,74857,74859,74861,74863,74865],{"class":94,"line":74847},290,[92,74849,74850],{"class":102},"          localStorage.",[92,74852,71636],{"class":1942},[92,74854,103],{"class":102},[92,74856,74672],{"class":207},[92,74858,12415],{"class":102},[92,74860,71646],{"class":151},[92,74862,661],{"class":102},[92,74864,71651],{"class":1942},[92,74866,74683],{"class":102},[92,74868,74870],{"class":94,"line":74869},291,[92,74871,2508],{"class":102},[92,74873,74875],{"class":94,"line":74874},292,[92,74876,52380],{"class":102},[92,74878,74880],{"class":94,"line":74879},293,[92,74881,2379],{"emptyLinePlaceholder":17},[92,74883,74885],{"class":94,"line":74884},294,[92,74886,33443],{"class":102},[92,74888,74890],{"class":94,"line":74889},295,[92,74891,2379],{"emptyLinePlaceholder":17},[92,74893,74895,74897,74899],{"class":94,"line":74894},296,[92,74896,52399],{"class":102},[92,74898,51795],{"class":51282},[92,74900,51289],{"class":102},[92,74902,74904,74906,74908],{"class":94,"line":74903},297,[92,74905,51767],{"class":102},[92,74907,51782],{"class":51282},[92,74909,51289],{"class":102},[92,74911,74913],{"class":94,"line":74912},298,[92,74914,2379],{"emptyLinePlaceholder":17},[92,74916,74918,74920,74922],{"class":94,"line":74917},299,[92,74919,51767],{"class":102},[92,74921,50617],{"class":51282},[92,74923,51289],{"class":102},[33,74925,74927],{"id":74926},"_36-正则表达式","3.6 正则表达式",[38,74929,74930],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[38,74932,74933],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[38,74935,74936],{},"正则表达式的作用：",[1110,74938,74939,74946,74952],{},[49,74940,74941,74942,74945],{},"表单验证（ ",[252,74943,74944],{},"匹配"," ）",[49,74947,74948,74949,74945],{},"过滤敏感词（ ",[252,74950,74951],{},"替换",[49,74953,74954,74955,74945],{},"字符串中提取我们想要的部分（ ",[252,74956,74957],{},"提取",[63,74959,74961],{"id":74960},"_361-语法","3.6.1 语法",[38,74963,74964],{},"正则表达式使用步骤：",[46,74966,74967,74970],{},[49,74968,74969],{},"定义规则",[49,74971,74972],{},"查找是否匹配",[38,74974,74975],{},"正则表达式里边不需要写引号",[38,74977,74978],{},[1441,74979],{"alt":10,"src":74980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[38,74982,74983],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[38,74985,74986],{},"reg.test(str)",[38,74988,74989],{},[1441,74990],{"alt":10,"src":74991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[38,74993,74994],{},[1441,74995],{"alt":10,"src":74996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[63,74998,75000],{"id":74999},"_362-元字符","3.6.2 元字符",[46,75002,75003,75006,75009,75012,75019],{},[49,75004,75005],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[49,75007,75008],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[49,75010,75011],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[49,75013,75014,75015],{},"正则验证工具：",[341,75016,75017],{"href":75017,"rel":75018},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23846],[49,75020,75021],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21978,75023,75025],{"id":75024},"_3621-边界符","3.6.2.1 边界符",[38,75027,75028],{},[1441,75029],{"alt":10,"src":75030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[38,75032,75033],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[38,75035,75036],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[38,75038,75039],{},"只匹配一次",[38,75041,75042],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21978,75044,75046],{"id":75045},"_3622-量词","3.6.2.2 量词",[38,75048,75049],{},[1441,75050],{"alt":10,"src":75051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[38,75053,75054],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21978,75056,75058],{"id":75057},"_3623-元字符","3.6.2.3 元字符",[38,75060,75061],{},[1441,75062],{"alt":10,"src":75063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[38,75065,75066],{},"匹配的是a或b或c []只选一个",[38,75068,75069],{},[1441,75070],{"alt":10,"src":75071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[38,75073,75074],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[38,75076,75077],{},[1441,75078],{"alt":10,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[38,75081,75082],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[38,75084,75085],{},[1441,75086],{"alt":10,"src":75087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[83,75089,75091],{"className":50615,"code":75090,"language":50617,"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,75092,75093,75103,75117,75121,75129,75143,75163,75175,75183,75187,75195,75203,75208,75239,75266,75294,75298,75303,75331,75362,75367,75372,75403,75435,75467,75471,75476,75507,75537,75567,75571,75576,75607,75638,75668,75698,75702,75707,75740,75744,75749,75780,75811,75815,75820,75851,75881,75912,75916,75921,75953,75984,76015,76042,76073,76105,76138,76169,76200,76232,76263,76271,76279,76283],{"__ignoreMap":10},[92,75094,75095,75097,75099,75101],{"class":94,"line":95},[92,75096,51279],{"class":102},[92,75098,51283],{"class":51282},[92,75100,51286],{"class":1942},[92,75102,51289],{"class":102},[92,75104,75105,75107,75109,75111,75113,75115],{"class":94,"line":11},[92,75106,1013],{"class":102},[92,75108,50617],{"class":51282},[92,75110,51298],{"class":1942},[92,75112,148],{"class":102},[92,75114,51303],{"class":207},[92,75116,51289],{"class":102},[92,75118,75119],{"class":94,"line":1158},[92,75120,2379],{"emptyLinePlaceholder":17},[92,75122,75123,75125,75127],{"class":94,"line":1173},[92,75124,1013],{"class":102},[92,75126,51316],{"class":51282},[92,75128,51289],{"class":102},[92,75130,75131,75133,75135,75137,75139,75141],{"class":94,"line":1179},[92,75132,52126],{"class":102},[92,75134,51326],{"class":51282},[92,75136,51329],{"class":1942},[92,75138,148],{"class":102},[92,75140,51334],{"class":207},[92,75142,51289],{"class":102},[92,75144,75145,75147,75149,75151,75153,75155,75157,75159,75161],{"class":94,"line":1193},[92,75146,52126],{"class":102},[92,75148,51326],{"class":51282},[92,75150,14900],{"class":1942},[92,75152,148],{"class":102},[92,75154,51373],{"class":207},[92,75156,51353],{"class":1942},[92,75158,148],{"class":102},[92,75160,51380],{"class":207},[92,75162,51289],{"class":102},[92,75164,75165,75167,75169,75171,75173],{"class":94,"line":1199},[92,75166,52126],{"class":102},[92,75168,51389],{"class":51282},[92,75170,51392],{"class":102},[92,75172,51389],{"class":51282},[92,75174,51289],{"class":102},[92,75176,75177,75179,75181],{"class":94,"line":1290},[92,75178,51767],{"class":102},[92,75180,51316],{"class":51282},[92,75182,51289],{"class":102},[92,75184,75185],{"class":94,"line":1296},[92,75186,2379],{"emptyLinePlaceholder":17},[92,75188,75189,75191,75193],{"class":94,"line":1308},[92,75190,1013],{"class":102},[92,75192,51782],{"class":51282},[92,75194,51289],{"class":102},[92,75196,75197,75199,75201],{"class":94,"line":1591},[92,75198,52126],{"class":102},[92,75200,51795],{"class":51282},[92,75202,51289],{"class":102},[92,75204,75205],{"class":94,"line":1596},[92,75206,75207],{"class":161},"    \u002F\u002F 元字符中\n",[92,75209,75210,75212,75214,75216,75218,75221,75223,75225,75228,75230,75233,75236],{"class":94,"line":1602},[92,75211,73735],{"class":102},[92,75213,58229],{"class":1942},[92,75215,103],{"class":102},[92,75217,687],{"class":207},[92,75219,75220],{"class":47959},"哈",[92,75222,687],{"class":207},[92,75224,661],{"class":102},[92,75226,75227],{"class":1942},"test",[92,75229,103],{"class":102},[92,75231,75232],{"class":207},"'哈'",[92,75234,75235],{"class":102},"))  ",[92,75237,75238],{"class":161},"\u002F\u002Ftrue\n",[92,75240,75241,75243,75245,75247,75249,75251,75253,75255,75257,75259,75262,75264],{"class":94,"line":1607},[92,75242,73735],{"class":102},[92,75244,58229],{"class":1942},[92,75246,103],{"class":102},[92,75248,687],{"class":207},[92,75250,75220],{"class":47959},[92,75252,687],{"class":207},[92,75254,661],{"class":102},[92,75256,75227],{"class":1942},[92,75258,103],{"class":102},[92,75260,75261],{"class":207},"'哈哈'",[92,75263,75235],{"class":102},[92,75265,75238],{"class":161},[92,75267,75268,75270,75272,75274,75276,75278,75280,75282,75284,75286,75289,75292],{"class":94,"line":1621},[92,75269,73735],{"class":102},[92,75271,58229],{"class":1942},[92,75273,103],{"class":102},[92,75275,687],{"class":207},[92,75277,75220],{"class":47959},[92,75279,687],{"class":207},[92,75281,661],{"class":102},[92,75283,75227],{"class":1942},[92,75285,103],{"class":102},[92,75287,75288],{"class":207},"'二哈'",[92,75290,75291],{"class":102},"))   ",[92,75293,75238],{"class":161},[92,75295,75296],{"class":94,"line":1626},[92,75297,2379],{"emptyLinePlaceholder":17},[92,75299,75300],{"class":94,"line":1632},[92,75301,75302],{"class":161},"    \u002F\u002F 1.边界符\n",[92,75304,75305,75307,75309,75311,75313,75315,75317,75319,75321,75323,75325,75327,75329],{"class":94,"line":1653},[92,75306,73735],{"class":102},[92,75308,58229],{"class":1942},[92,75310,103],{"class":102},[92,75312,687],{"class":207},[92,75314,1069],{"class":98},[92,75316,75220],{"class":47959},[92,75318,687],{"class":207},[92,75320,661],{"class":102},[92,75322,75227],{"class":1942},[92,75324,103],{"class":102},[92,75326,75232],{"class":207},[92,75328,75235],{"class":102},[92,75330,75238],{"class":161},[92,75332,75333,75335,75337,75339,75341,75343,75345,75347,75349,75351,75353,75355,75357,75359],{"class":94,"line":1658},[92,75334,73735],{"class":102},[92,75336,58229],{"class":1942},[92,75338,103],{"class":102},[92,75340,687],{"class":207},[92,75342,1069],{"class":98},[92,75344,75220],{"class":47959},[92,75346,405],{"class":98},[92,75348,687],{"class":207},[92,75350,661],{"class":102},[92,75352,75227],{"class":1942},[92,75354,103],{"class":102},[92,75356,75261],{"class":207},[92,75358,75235],{"class":102},[92,75360,75361],{"class":161},"\u002F\u002Ffalse\n",[92,75363,75364],{"class":94,"line":1672},[92,75365,75366],{"class":161},"    \u002F\u002F 2.量词\n",[92,75368,75369],{"class":94,"line":1677},[92,75370,75371],{"class":161},"    \u002F\u002F 量词 * 类似于 >= 0\n",[92,75373,75374,75376,75378,75380,75382,75384,75386,75389,75391,75393,75395,75397,75399,75401],{"class":94,"line":1706},[92,75375,73735],{"class":102},[92,75377,58229],{"class":1942},[92,75379,103],{"class":102},[92,75381,687],{"class":207},[92,75383,1069],{"class":98},[92,75385,75220],{"class":47959},[92,75387,75388],{"class":98},"*$",[92,75390,687],{"class":207},[92,75392,661],{"class":102},[92,75394,75227],{"class":1942},[92,75396,103],{"class":102},[92,75398,75261],{"class":207},[92,75400,75235],{"class":102},[92,75402,75238],{"class":161},[92,75404,75405,75407,75409,75411,75413,75415,75417,75419,75421,75423,75425,75427,75430,75432],{"class":94,"line":1711},[92,75406,73735],{"class":102},[92,75408,58229],{"class":1942},[92,75410,103],{"class":102},[92,75412,687],{"class":207},[92,75414,1069],{"class":98},[92,75416,75220],{"class":47959},[92,75418,75388],{"class":98},[92,75420,687],{"class":207},[92,75422,661],{"class":102},[92,75424,75227],{"class":1942},[92,75426,103],{"class":102},[92,75428,75429],{"class":207},"'二哈好傻'",[92,75431,75235],{"class":102},[92,75433,75434],{"class":161},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[92,75436,75437,75439,75441,75443,75445,75447,75449,75451,75453,75455,75457,75459,75462,75464],{"class":94,"line":1728},[92,75438,73735],{"class":102},[92,75440,58229],{"class":1942},[92,75442,103],{"class":102},[92,75444,687],{"class":207},[92,75446,1069],{"class":98},[92,75448,75220],{"class":47959},[92,75450,75388],{"class":98},[92,75452,687],{"class":207},[92,75454,661],{"class":102},[92,75456,75227],{"class":1942},[92,75458,103],{"class":102},[92,75460,75461],{"class":207},"'哈好哈'",[92,75463,75291],{"class":102},[92,75465,75466],{"class":161},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[92,75468,75469],{"class":94,"line":1733},[92,75470,2379],{"emptyLinePlaceholder":17},[92,75472,75473],{"class":94,"line":1738},[92,75474,75475],{"class":161},"    \u002F\u002F +类似于>=1\n",[92,75477,75478,75480,75482,75484,75486,75488,75490,75493,75495,75497,75499,75501,75503,75505],{"class":94,"line":1743},[92,75479,73735],{"class":102},[92,75481,58229],{"class":1942},[92,75483,103],{"class":102},[92,75485,687],{"class":207},[92,75487,1069],{"class":98},[92,75489,75220],{"class":47959},[92,75491,75492],{"class":98},"+$",[92,75494,687],{"class":207},[92,75496,661],{"class":102},[92,75498,75227],{"class":1942},[92,75500,103],{"class":102},[92,75502,75261],{"class":207},[92,75504,75235],{"class":102},[92,75506,75238],{"class":161},[92,75508,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531,75533,75535],{"class":94,"line":1757},[92,75510,73735],{"class":102},[92,75512,58229],{"class":1942},[92,75514,103],{"class":102},[92,75516,687],{"class":207},[92,75518,1069],{"class":98},[92,75520,75220],{"class":47959},[92,75522,75492],{"class":98},[92,75524,687],{"class":207},[92,75526,661],{"class":102},[92,75528,75227],{"class":1942},[92,75530,103],{"class":102},[92,75532,75429],{"class":207},[92,75534,75235],{"class":102},[92,75536,75434],{"class":161},[92,75538,75539,75541,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561,75563,75565],{"class":94,"line":1762},[92,75540,73735],{"class":102},[92,75542,58229],{"class":1942},[92,75544,103],{"class":102},[92,75546,687],{"class":207},[92,75548,1069],{"class":98},[92,75550,75220],{"class":47959},[92,75552,75492],{"class":98},[92,75554,687],{"class":207},[92,75556,661],{"class":102},[92,75558,75227],{"class":1942},[92,75560,103],{"class":102},[92,75562,75461],{"class":207},[92,75564,75291],{"class":102},[92,75566,75361],{"class":161},[92,75568,75569],{"class":94,"line":2556},[92,75570,2379],{"emptyLinePlaceholder":17},[92,75572,75573],{"class":94,"line":2570},[92,75574,75575],{"class":161},"    \u002F\u002F ?类似于0次或一次\n",[92,75577,75578,75580,75582,75584,75586,75588,75591,75593,75595,75597,75599,75601,75603,75605],{"class":94,"line":2578},[92,75579,73735],{"class":102},[92,75581,58229],{"class":1942},[92,75583,103],{"class":102},[92,75585,687],{"class":207},[92,75587,1069],{"class":98},[92,75589,75590],{"class":47959},"哈？",[92,75592,405],{"class":98},[92,75594,687],{"class":207},[92,75596,661],{"class":102},[92,75598,75227],{"class":1942},[92,75600,103],{"class":102},[92,75602,74210],{"class":207},[92,75604,75291],{"class":102},[92,75606,75238],{"class":161},[92,75608,75609,75611,75613,75615,75617,75619,75621,75624,75626,75628,75630,75632,75634,75636],{"class":94,"line":2583},[92,75610,73735],{"class":102},[92,75612,58229],{"class":1942},[92,75614,103],{"class":102},[92,75616,687],{"class":207},[92,75618,1069],{"class":98},[92,75620,75220],{"class":47959},[92,75622,75623],{"class":98},"?$",[92,75625,687],{"class":207},[92,75627,661],{"class":102},[92,75629,75227],{"class":1942},[92,75631,103],{"class":102},[92,75633,75261],{"class":207},[92,75635,75235],{"class":102},[92,75637,75361],{"class":161},[92,75639,75640,75642,75644,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666],{"class":94,"line":2589},[92,75641,73735],{"class":102},[92,75643,58229],{"class":1942},[92,75645,103],{"class":102},[92,75647,687],{"class":207},[92,75649,1069],{"class":98},[92,75651,75220],{"class":47959},[92,75653,75623],{"class":98},[92,75655,687],{"class":207},[92,75657,661],{"class":102},[92,75659,75227],{"class":1942},[92,75661,103],{"class":102},[92,75663,75429],{"class":207},[92,75665,75235],{"class":102},[92,75667,75434],{"class":161},[92,75669,75670,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696],{"class":94,"line":2595},[92,75671,73735],{"class":102},[92,75673,58229],{"class":1942},[92,75675,103],{"class":102},[92,75677,687],{"class":207},[92,75679,1069],{"class":98},[92,75681,75220],{"class":47959},[92,75683,75623],{"class":98},[92,75685,687],{"class":207},[92,75687,661],{"class":102},[92,75689,75227],{"class":1942},[92,75691,103],{"class":102},[92,75693,75461],{"class":207},[92,75695,75235],{"class":102},[92,75697,75361],{"class":161},[92,75699,75700],{"class":94,"line":2600},[92,75701,2379],{"emptyLinePlaceholder":17},[92,75703,75704],{"class":94,"line":7928},[92,75705,75706],{"class":161},"    \u002F\u002F {n}写几，就必须出现几次\n",[92,75708,75709,75711,75713,75715,75717,75719,75721,75724,75726,75728,75730,75732,75735,75738],{"class":94,"line":7952},[92,75710,73735],{"class":102},[92,75712,58229],{"class":1942},[92,75714,103],{"class":102},[92,75716,687],{"class":207},[92,75718,1069],{"class":98},[92,75720,75220],{"class":47959},[92,75722,75723],{"class":98},"{4}$",[92,75725,687],{"class":207},[92,75727,661],{"class":102},[92,75729,75227],{"class":1942},[92,75731,103],{"class":102},[92,75733,75734],{"class":207},"'哈哈哈哈'",[92,75736,75737],{"class":102},")) ",[92,75739,75238],{"class":161},[92,75741,75742],{"class":94,"line":7957},[92,75743,2379],{"emptyLinePlaceholder":17},[92,75745,75746],{"class":94,"line":7963},[92,75747,75748],{"class":161},"    \u002F\u002F {n,}大于等于n次\n",[92,75750,75751,75753,75755,75757,75759,75761,75763,75766,75768,75770,75772,75774,75776,75778],{"class":94,"line":7990},[92,75752,73735],{"class":102},[92,75754,58229],{"class":1942},[92,75756,103],{"class":102},[92,75758,687],{"class":207},[92,75760,1069],{"class":98},[92,75762,75220],{"class":47959},[92,75764,75765],{"class":98},"{4,}$",[92,75767,687],{"class":207},[92,75769,661],{"class":102},[92,75771,75227],{"class":1942},[92,75773,103],{"class":102},[92,75775,75734],{"class":207},[92,75777,75737],{"class":102},[92,75779,75238],{"class":161},[92,75781,75782,75784,75786,75788,75790,75792,75794,75796,75798,75800,75802,75804,75807,75809],{"class":94,"line":7995},[92,75783,73735],{"class":102},[92,75785,58229],{"class":1942},[92,75787,103],{"class":102},[92,75789,687],{"class":207},[92,75791,1069],{"class":98},[92,75793,75220],{"class":47959},[92,75795,75765],{"class":98},[92,75797,687],{"class":207},[92,75799,661],{"class":102},[92,75801,75227],{"class":1942},[92,75803,103],{"class":102},[92,75805,75806],{"class":207},"'哈哈哈哈哈'",[92,75808,75737],{"class":102},[92,75810,75238],{"class":161},[92,75812,75813],{"class":94,"line":8001},[92,75814,2379],{"emptyLinePlaceholder":17},[92,75816,75817],{"class":94,"line":8013},[92,75818,75819],{"class":161},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[92,75821,75822,75824,75826,75828,75830,75832,75834,75837,75839,75841,75843,75845,75847,75849],{"class":94,"line":8025},[92,75823,73735],{"class":102},[92,75825,58229],{"class":1942},[92,75827,103],{"class":102},[92,75829,687],{"class":207},[92,75831,1069],{"class":98},[92,75833,75220],{"class":47959},[92,75835,75836],{"class":98},"{4,6}$",[92,75838,687],{"class":207},[92,75840,661],{"class":102},[92,75842,75227],{"class":1942},[92,75844,103],{"class":102},[92,75846,75734],{"class":207},[92,75848,75737],{"class":102},[92,75850,75238],{"class":161},[92,75852,75853,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879],{"class":94,"line":8037},[92,75854,73735],{"class":102},[92,75856,58229],{"class":1942},[92,75858,103],{"class":102},[92,75860,687],{"class":207},[92,75862,1069],{"class":98},[92,75864,75220],{"class":47959},[92,75866,75836],{"class":98},[92,75868,687],{"class":207},[92,75870,661],{"class":102},[92,75872,75227],{"class":1942},[92,75874,103],{"class":102},[92,75876,75806],{"class":207},[92,75878,75737],{"class":102},[92,75880,75238],{"class":161},[92,75882,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75905,75908,75910],{"class":94,"line":9696},[92,75884,73735],{"class":102},[92,75886,58229],{"class":1942},[92,75888,103],{"class":102},[92,75890,687],{"class":207},[92,75892,1069],{"class":98},[92,75894,75220],{"class":47959},[92,75896,75836],{"class":98},[92,75898,687],{"class":207},[92,75900,661],{"class":102},[92,75902,75227],{"class":1942},[92,75904,103],{"class":102},[92,75906,75907],{"class":207},"'哈哈哈哈哈哈哈'",[92,75909,75737],{"class":102},[92,75911,75361],{"class":161},[92,75913,75914],{"class":94,"line":9721},[92,75915,2379],{"emptyLinePlaceholder":17},[92,75917,75918],{"class":94,"line":9744},[92,75919,75920],{"class":161},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[92,75922,75923,75925,75927,75929,75931,75933,75936,75938,75940,75942,75944,75946,75949,75951],{"class":94,"line":9768},[92,75924,73735],{"class":102},[92,75926,58229],{"class":1942},[92,75928,103],{"class":102},[92,75930,687],{"class":207},[92,75932,1069],{"class":98},[92,75934,75935],{"class":151},"[abc]",[92,75937,405],{"class":98},[92,75939,687],{"class":207},[92,75941,661],{"class":102},[92,75943,75227],{"class":1942},[92,75945,103],{"class":102},[92,75947,75948],{"class":207},"'a'",[92,75950,75235],{"class":102},[92,75952,75238],{"class":161},[92,75954,75955,75957,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75980,75982],{"class":94,"line":9773},[92,75956,73735],{"class":102},[92,75958,58229],{"class":1942},[92,75960,103],{"class":102},[92,75962,687],{"class":207},[92,75964,1069],{"class":98},[92,75966,75935],{"class":151},[92,75968,405],{"class":98},[92,75970,687],{"class":207},[92,75972,661],{"class":102},[92,75974,75227],{"class":1942},[92,75976,103],{"class":102},[92,75978,75979],{"class":207},"'b'",[92,75981,75235],{"class":102},[92,75983,75238],{"class":161},[92,75985,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76011,76013],{"class":94,"line":9778},[92,75987,73735],{"class":102},[92,75989,58229],{"class":1942},[92,75991,103],{"class":102},[92,75993,687],{"class":207},[92,75995,1069],{"class":98},[92,75997,75935],{"class":151},[92,75999,405],{"class":98},[92,76001,687],{"class":207},[92,76003,661],{"class":102},[92,76005,75227],{"class":1942},[92,76007,103],{"class":102},[92,76009,76010],{"class":207},"'c'",[92,76012,75235],{"class":102},[92,76014,75238],{"class":161},[92,76016,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035,76038,76040],{"class":94,"line":9783},[92,76018,73735],{"class":102},[92,76020,58229],{"class":1942},[92,76022,103],{"class":102},[92,76024,687],{"class":207},[92,76026,75935],{"class":151},[92,76028,687],{"class":207},[92,76030,661],{"class":102},[92,76032,75227],{"class":1942},[92,76034,103],{"class":102},[92,76036,76037],{"class":207},"'ab'",[92,76039,75235],{"class":102},[92,76041,75238],{"class":161},[92,76043,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76068,76070],{"class":94,"line":9792},[92,76045,73735],{"class":102},[92,76047,58229],{"class":1942},[92,76049,103],{"class":102},[92,76051,687],{"class":207},[92,76053,1069],{"class":98},[92,76055,75935],{"class":151},[92,76057,405],{"class":98},[92,76059,687],{"class":207},[92,76061,661],{"class":102},[92,76063,75227],{"class":1942},[92,76065,103],{"class":102},[92,76067,76037],{"class":207},[92,76069,75235],{"class":102},[92,76071,76072],{"class":161},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[92,76074,76075,76077,76079,76081,76083,76085,76087,76090,76092,76094,76096,76098,76100,76102],{"class":94,"line":9797},[92,76076,73735],{"class":102},[92,76078,58229],{"class":1942},[92,76080,103],{"class":102},[92,76082,687],{"class":207},[92,76084,1069],{"class":98},[92,76086,75935],{"class":151},[92,76088,76089],{"class":98},"{2}$",[92,76091,687],{"class":207},[92,76093,661],{"class":102},[92,76095,75227],{"class":1942},[92,76097,103],{"class":102},[92,76099,76037],{"class":207},[92,76101,75235],{"class":102},[92,76103,76104],{"class":161},"\u002F\u002Ftrue   可以选两个\n",[92,76106,76107,76109,76111,76113,76115,76117,76120,76122,76124,76126,76128,76130,76133,76135],{"class":94,"line":9803},[92,76108,73735],{"class":102},[92,76110,58229],{"class":1942},[92,76112,103],{"class":102},[92,76114,687],{"class":207},[92,76116,1069],{"class":98},[92,76118,76119],{"class":151},"[a-z]",[92,76121,405],{"class":98},[92,76123,687],{"class":207},[92,76125,661],{"class":102},[92,76127,75227],{"class":1942},[92,76129,103],{"class":102},[92,76131,76132],{"class":207},"'p'",[92,76134,75291],{"class":102},[92,76136,76137],{"class":161},"\u002F\u002Ftrue   依然只能选一个\n",[92,76139,76140,76142,76144,76146,76148,76150,76153,76155,76157,76159,76161,76163,76165,76167],{"class":94,"line":9824},[92,76141,73735],{"class":102},[92,76143,58229],{"class":1942},[92,76145,103],{"class":102},[92,76147,687],{"class":207},[92,76149,1069],{"class":98},[92,76151,76152],{"class":151},"[A-Z]",[92,76154,405],{"class":98},[92,76156,687],{"class":207},[92,76158,661],{"class":102},[92,76160,75227],{"class":1942},[92,76162,103],{"class":102},[92,76164,76132],{"class":207},[92,76166,75291],{"class":102},[92,76168,75361],{"class":161},[92,76170,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191,76193,76196,76198],{"class":94,"line":9830},[92,76172,73735],{"class":102},[92,76174,58229],{"class":1942},[92,76176,103],{"class":102},[92,76178,687],{"class":207},[92,76180,1069],{"class":98},[92,76182,76152],{"class":151},[92,76184,405],{"class":98},[92,76186,687],{"class":207},[92,76188,661],{"class":102},[92,76190,75227],{"class":1942},[92,76192,103],{"class":102},[92,76194,76195],{"class":207},"'P'",[92,76197,75291],{"class":102},[92,76199,75238],{"class":161},[92,76201,76202,76204,76206,76208,76210,76212,76215,76217,76219,76221,76223,76225,76228,76230],{"class":94,"line":9844},[92,76203,73735],{"class":102},[92,76205,58229],{"class":1942},[92,76207,103],{"class":102},[92,76209,687],{"class":207},[92,76211,1069],{"class":98},[92,76213,76214],{"class":151},"[0-9]",[92,76216,405],{"class":98},[92,76218,687],{"class":207},[92,76220,661],{"class":102},[92,76222,75227],{"class":1942},[92,76224,103],{"class":102},[92,76226,76227],{"class":207},"'0'",[92,76229,75291],{"class":102},[92,76231,75238],{"class":161},[92,76233,76234,76236,76238,76240,76242,76244,76247,76249,76251,76253,76255,76257,76259,76261],{"class":94,"line":9850},[92,76235,73735],{"class":102},[92,76237,58229],{"class":1942},[92,76239,103],{"class":102},[92,76241,687],{"class":207},[92,76243,1069],{"class":98},[92,76245,76246],{"class":151},"[a-zA-Z0-9]",[92,76248,405],{"class":98},[92,76250,687],{"class":207},[92,76252,661],{"class":102},[92,76254,75227],{"class":1942},[92,76256,103],{"class":102},[92,76258,76132],{"class":207},[92,76260,75235],{"class":102},[92,76262,75238],{"class":161},[92,76264,76265,76267,76269],{"class":94,"line":9877},[92,76266,52399],{"class":102},[92,76268,51795],{"class":51282},[92,76270,51289],{"class":102},[92,76272,76273,76275,76277],{"class":94,"line":9886},[92,76274,51767],{"class":102},[92,76276,51782],{"class":51282},[92,76278,51289],{"class":102},[92,76280,76281],{"class":94,"line":9892},[92,76282,2379],{"emptyLinePlaceholder":17},[92,76284,76285,76287,76289],{"class":94,"line":9900},[92,76286,51767],{"class":102},[92,76288,50617],{"class":51282},[92,76290,51289],{"class":102},[21978,76292,76294],{"id":76293},"_3624-修饰符","3.6.2.4 修饰符",[38,76296,76297],{},[1441,76298],{"alt":10,"src":76299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[38,76301,76302],{},"replace是个方法，使用的时候一定不要忘记括号()",[38,76304,76305],{},[1441,76306],{"alt":10,"src":76307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[83,76309,76311],{"className":50615,"code":76310,"language":50617,"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,76312,76313,76323,76337,76345,76359,76379,76391,76399,76407,76415,76447,76478,76483,76515,76526,76559,76568,76576,76584],{"__ignoreMap":10},[92,76314,76315,76317,76319,76321],{"class":94,"line":95},[92,76316,51279],{"class":102},[92,76318,51283],{"class":51282},[92,76320,51286],{"class":1942},[92,76322,51289],{"class":102},[92,76324,76325,76327,76329,76331,76333,76335],{"class":94,"line":11},[92,76326,1013],{"class":102},[92,76328,50617],{"class":51282},[92,76330,51298],{"class":1942},[92,76332,148],{"class":102},[92,76334,51303],{"class":207},[92,76336,51289],{"class":102},[92,76338,76339,76341,76343],{"class":94,"line":1158},[92,76340,1013],{"class":102},[92,76342,51316],{"class":51282},[92,76344,51289],{"class":102},[92,76346,76347,76349,76351,76353,76355,76357],{"class":94,"line":1173},[92,76348,52126],{"class":102},[92,76350,51326],{"class":51282},[92,76352,51329],{"class":1942},[92,76354,148],{"class":102},[92,76356,51334],{"class":207},[92,76358,51289],{"class":102},[92,76360,76361,76363,76365,76367,76369,76371,76373,76375,76377],{"class":94,"line":1179},[92,76362,52126],{"class":102},[92,76364,51326],{"class":51282},[92,76366,14900],{"class":1942},[92,76368,148],{"class":102},[92,76370,51373],{"class":207},[92,76372,51353],{"class":1942},[92,76374,148],{"class":102},[92,76376,51380],{"class":207},[92,76378,51289],{"class":102},[92,76380,76381,76383,76385,76387,76389],{"class":94,"line":1193},[92,76382,52126],{"class":102},[92,76384,51389],{"class":51282},[92,76386,51392],{"class":102},[92,76388,51389],{"class":51282},[92,76390,51289],{"class":102},[92,76392,76393,76395,76397],{"class":94,"line":1199},[92,76394,51767],{"class":102},[92,76396,51316],{"class":51282},[92,76398,51289],{"class":102},[92,76400,76401,76403,76405],{"class":94,"line":1290},[92,76402,1013],{"class":102},[92,76404,51782],{"class":51282},[92,76406,51289],{"class":102},[92,76408,76409,76411,76413],{"class":94,"line":1296},[92,76410,52126],{"class":102},[92,76412,51795],{"class":51282},[92,76414,51289],{"class":102},[92,76416,76417,76419,76421,76423,76425,76427,76430,76432,76434,76436,76438,76440,76443,76445],{"class":94,"line":1308},[92,76418,73735],{"class":102},[92,76420,58229],{"class":1942},[92,76422,103],{"class":102},[92,76424,687],{"class":207},[92,76426,1069],{"class":98},[92,76428,76429],{"class":47959},"java",[92,76431,405],{"class":98},[92,76433,687],{"class":207},[92,76435,661],{"class":102},[92,76437,75227],{"class":1942},[92,76439,103],{"class":102},[92,76441,76442],{"class":207},"'java'",[92,76444,75737],{"class":102},[92,76446,75238],{"class":161},[92,76448,76449,76451,76453,76455,76457,76459,76461,76463,76465,76467,76469,76471,76474,76476],{"class":94,"line":1591},[92,76450,73735],{"class":102},[92,76452,58229],{"class":1942},[92,76454,103],{"class":102},[92,76456,687],{"class":207},[92,76458,1069],{"class":98},[92,76460,76429],{"class":47959},[92,76462,405],{"class":98},[92,76464,687],{"class":207},[92,76466,661],{"class":102},[92,76468,75227],{"class":1942},[92,76470,103],{"class":102},[92,76472,76473],{"class":207},"'Java'",[92,76475,75737],{"class":102},[92,76477,75361],{"class":161},[92,76479,76480],{"class":94,"line":1596},[92,76481,76482],{"class":161},"    \u002F\u002F 不区分大小写、\n",[92,76484,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511,76513],{"class":94,"line":1602},[92,76486,73735],{"class":102},[92,76488,58229],{"class":1942},[92,76490,103],{"class":102},[92,76492,687],{"class":207},[92,76494,1069],{"class":98},[92,76496,76429],{"class":47959},[92,76498,405],{"class":98},[92,76500,687],{"class":207},[92,76502,544],{"class":98},[92,76504,661],{"class":102},[92,76506,75227],{"class":1942},[92,76508,103],{"class":102},[92,76510,76473],{"class":207},[92,76512,75737],{"class":102},[92,76514,75238],{"class":161},[92,76516,76517,76519,76521,76523],{"class":94,"line":1607},[92,76518,11201],{"class":98},[92,76520,73901],{"class":151},[92,76522,13544],{"class":98},[92,76524,76525],{"class":207}," 'java是一门编程语言，学完java工资很高'\n",[92,76527,76528,76530,76533,76535,76538,76541,76543,76545,76547,76549,76552,76554,76557],{"class":94,"line":1621},[92,76529,11201],{"class":98},[92,76531,76532],{"class":151}," result",[92,76534,13544],{"class":98},[92,76536,76537],{"class":102}," str.",[92,76539,76540],{"class":1942},"replace",[92,76542,103],{"class":102},[92,76544,687],{"class":207},[92,76546,76429],{"class":47959},[92,76548,687],{"class":207},[92,76550,76551],{"class":98},"ig",[92,76553,12415],{"class":102},[92,76555,76556],{"class":207},"'前端'",[92,76558,109],{"class":102},[92,76560,76561,76563,76565],{"class":94,"line":1626},[92,76562,73735],{"class":102},[92,76564,58229],{"class":1942},[92,76566,76567],{"class":102},"(result)\n",[92,76569,76570,76572,76574],{"class":94,"line":1632},[92,76571,52399],{"class":102},[92,76573,51795],{"class":51282},[92,76575,51289],{"class":102},[92,76577,76578,76580,76582],{"class":94,"line":1653},[92,76579,51767],{"class":102},[92,76581,51782],{"class":51282},[92,76583,51289],{"class":102},[92,76585,76586,76588,76590],{"class":94,"line":1658},[92,76587,51767],{"class":102},[92,76589,50617],{"class":51282},[92,76591,51289],{"class":102},[5106,76593,76594],{},"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":76596},[76597,76607,76619,76636,76643,76651],{"id":53342,"depth":11,"text":53343,"children":76598},[76599,76600,76601,76602,76603,76604,76605,76606],{"id":53346,"depth":1158,"text":53347},{"id":53379,"depth":1158,"text":53380},{"id":53418,"depth":1158,"text":53419},{"id":53576,"depth":1158,"text":53577},{"id":53624,"depth":1158,"text":53625},{"id":53761,"depth":1158,"text":53762},{"id":54083,"depth":1158,"text":54084},{"id":57071,"depth":1158,"text":57072},{"id":57099,"depth":11,"text":57100,"children":76608},[76609,76610,76611,76612,76613,76614,76615,76616,76617,76618],{"id":57103,"depth":1158,"text":57104},{"id":57126,"depth":1158,"text":57127},{"id":58041,"depth":1158,"text":58042},{"id":58731,"depth":1158,"text":58732},{"id":59013,"depth":1158,"text":59014},{"id":63174,"depth":1158,"text":63175},{"id":63344,"depth":1158,"text":63345},{"id":63472,"depth":1158,"text":63473},{"id":63497,"depth":1158,"text":63498},{"id":64886,"depth":1158,"text":64887},{"id":66039,"depth":11,"text":66040,"children":76620},[76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632,76633,76634,76635],{"id":66043,"depth":1158,"text":66044},{"id":66697,"depth":1158,"text":66698},{"id":68392,"depth":1158,"text":68393},{"id":68433,"depth":1158,"text":68434},{"id":68475,"depth":1158,"text":68476},{"id":68489,"depth":1158,"text":68490},{"id":68538,"depth":1158,"text":68539},{"id":68550,"depth":1158,"text":68551},{"id":68565,"depth":1158,"text":68566},{"id":68601,"depth":1158,"text":68602},{"id":68682,"depth":1158,"text":68683},{"id":68810,"depth":1158,"text":68811},{"id":68822,"depth":1158,"text":68823},{"id":68841,"depth":1158,"text":68842},{"id":70952,"depth":1158,"text":70953},{"id":70971,"depth":11,"text":70972,"children":76637},[76638,76639,76640,76641,76642],{"id":70992,"depth":1158,"text":70993},{"id":71012,"depth":1158,"text":71013},{"id":71061,"depth":1158,"text":71062},{"id":71186,"depth":1158,"text":71187},{"id":71367,"depth":1158,"text":71368},{"id":71385,"depth":11,"text":71386,"children":76644},[76645,76646,76647,76648,76649,76650],{"id":71400,"depth":1158,"text":71401},{"id":71459,"depth":1158,"text":71460},{"id":71483,"depth":1158,"text":71484},{"id":71803,"depth":1158,"text":71804},{"id":71835,"depth":1158,"text":71836},{"id":71858,"depth":1158,"text":71859},{"id":74926,"depth":11,"text":74927,"children":76652},[76653,76654],{"id":74960,"depth":1158,"text":74961},{"id":74999,"depth":1158,"text":75000},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53314,"description":23357},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76661,"title":76662,"body":76663,"description":23357,"extension":14,"meta":92800,"navigation":17,"path":92801,"seo":92802,"stem":92803,"__hash__":92804},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76664,"toc":92736},[76665,76668,76671,76675,76679,76684,76689,76700,76704,76709,76712,76716,76719,76724,76728,76732,76735,76740,76743,76747,76750,76758,76761,76765,76770,76775,76778,76782,76787,76792,76795,76799,76804,76807,76812,76815,76820,76823,76828,76833,76836,76839,76843,76848,76853,76856,76860,76864,76867,76870,76873,76877,76881,76886,76891,76894,76898,76903,76908,76911,76914,76917,76920,76923,76926,76929,76932,76935,76940,76944,76949,76954,76957,76960,76963,76966,76969,76972,76975,76978,76982,76986,76989,76992,76995,77000,77002,77005,77008,77011,77014,77017,77020,77023,77026,77029,77032,77035,77038,77041,77046,77051,77056,77059,77063,77066,77071,77075,77077,77088,77093,77194,77197,77200,77203,77206,77209,77212,77215,77218,77220,77223,77226,77229,77232,77235,77237,77240,77243,77246,77249,77252,77255,77257,77260,77262,77264,77267,77271,77275,77278,77281,77284,77287,77290,77293,77296,77299,77302,77307,77427,77430,77433,77438,77441,77444,77447,77450,77455,77458,77461,77464,77467,77472,77475,77575,77640,77714,77718,77721,77724,77728,77731,77745,77774,77777,77780,77783,77786,77789,77792,77795,77797,77800,77803,77806,77809,77813,77818,77822,77827,77902,77905,78088,78091,78094,78097,78100,78103,78105,78108,78111,78114,78117,78120,78123,78125,78129,78132,78137,78140,78143,78146,78149,78151,78156,78159,78162,78165,78168,78170,78175,78178,78181,78183,78185,78188,78192,78195,78198,78203,78206,78209,78212,78262,78267,78271,78276,78279,78348,78351,78360,78364,78369,78372,78375,78383,78386,78403,80205,80209,80213,80218,80221,80225,80231,80237,80389,80394,80399,80402,80405,80408,80411,80414,80417,80420,80423,80426,80429,80432,80435,80440,80444,80447,80458,80462,80467,80470,80473,80476,80479,80482,80484,80487,80490,80493,80496,80498,80515,80518,80522,80525,80530,80535,80538,80541,80545,80548,80551,80560,80563,80567,80570,80575,80580,80647,80651,80654,80657,80662,80667,80753,80758,80762,80765,80768,80783,80786,80791,80795,80800,80909,80912,80923,81073,81077,81082,81191,81195,81200,81205,81210,81213,81220,81240,81276,81440,81445,81448,81453,81460,81463,81466,81469,81528,81584,81640,81644,81649,81964,81967,81971,81974,81979,82088,82093,82097,82102,82106,82177,82181,82183,82186,82189,82227,82503,82507,82524,82590,82624,82628,82631,82636,82665,82672,82681,82686,82701,82706,82715,82718,82855,82859,82921,82925,82930,83175,83179,83184,83187,83190,83193,83196,83200,83205,84786,84790,84794,84800,84803,84808,84812,84815,84820,84823,84834,84838,84843,84847,84852,84857,84860,84865,84869,84873,84876,84881,84886,84889,84892,84895,85017,85022,85124,85127,85130,85134,85139,85311,85316,85320,85323,85328,85394,85399,85402,85533,85536,85541,85544,85547,85638,85643,85646,85649,85652,85655,85660,85665,85668,85673,85678,85683,85687,85690,85693,85698,85703,85708,85713,85767,85770,85773,85778,85781,85784,85789,85794,85799,85803,85808,85822,85827,85830,85835,85839,85844,85849,85854,85859,85864,85869,85874,85879,85882,85886,85891,85894,85897,85900,85905,85910,85913,85916,85920,85923,85926,85931,85936,85941,85946,85949,85954,85959,86020,86025,86028,86033,87274,87279,87283,87287,87292,87295,87300,87305,87308,87313,87315,87320,87324,87327,87330,87341,87345,87350,87355,87410,87415,87420,87425,87636,87641,87645,87650,87653,87655,87658,87661,88108,88113,88120,88126,88129,88132,88396,88401,88405,88670,88675,88679,88684,88689,88694,88699,89030,89033,89038,89043,89046,89050,89054,89059,89064,89069,89074,89079,89084,89088,89091,89096,89101,89104,89178,89183,89188,89193,89195,89198,89568,89573,89578,89583,89586,89589,89691,89696,89701,89804,89808,89813,89817,89821,89826,89831,89834,89839,89842,89845,90238,90243,90246,90249,90252,90255,90775,90779,90784,90789,90794,90797,90802,90805,90808,91190,91195,91197,91199,91202,91205,91717,91721,91782,91785,91788,91791,91795,91798,91803,91808,92733],[29,76666,76662],{"id":76667},"_4js进阶",[38,76669,76670],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[33,76672,76674],{"id":76673},"_41-作用域","4.1 作用域",[63,76676,76678],{"id":76677},"_411-局部作用域","4.1.1 局部作用域",[38,76680,76681],{},[1441,76682],{"alt":10,"src":76683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[38,76685,76686],{},[1441,76687],{"alt":10,"src":76688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1110,76690,76691,76694,76697],{},[49,76692,76693],{},"函数作用域在函数内部",[49,76695,76696],{},"块级作用域在{}",[49,76698,76699],{},"对象的那个{}不是作用域，不是块作用域",[63,76701,76703],{"id":76702},"_412-全局作用域","4.1.2 全局作用域",[38,76705,76706],{},[1441,76707],{"alt":10,"src":76708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[38,76710,76711],{},"window.a=10不要这样写",[63,76713,76715],{"id":76714},"_413-作用域链","4.1.3 作用域链",[38,76717,76718],{},"变量查找机制",[38,76720,76721],{},[1441,76722],{"alt":10,"src":76723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[33,76725,76727],{"id":76726},"_42-垃圾回收机制","4.2 垃圾回收机制",[63,76729,76731],{"id":76730},"_421-大体介绍","4.2.1 大体介绍",[38,76733,76734],{},"垃圾回收机制(Garbage Collection) 简称 GC",[38,76736,76737],{},[1441,76738],{"alt":10,"src":76739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[38,76741,76742],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[63,76744,76746],{"id":76745},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[38,76748,76749],{},"堆栈空间分配区别：",[46,76751,76752,76755],{},[49,76753,76754],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[49,76756,76757],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[38,76759,76760],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21978,76762,76764],{"id":76763},"_4221-引用计数","4.2.2.1 引用计数",[38,76766,76767],{},[1441,76768],{"alt":10,"src":76769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[38,76771,76772],{},[1441,76773],{"alt":10,"src":76774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[38,76776,76777],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21978,76779,76781],{"id":76780},"_4222-标记清除法","4.2.2.2 标记清除法",[38,76783,76784],{},[1441,76785],{"alt":10,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[38,76788,76789],{},[1441,76790],{"alt":10,"src":76791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[38,76793,76794],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[33,76796,76798],{"id":76797},"_43-闭包","4.3 闭包",[38,76800,76801],{},[1441,76802],{"alt":10,"src":76803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[38,76805,76806],{},"闭包：内层函数+外层函数的变量",[38,76808,76809],{},[1441,76810],{"alt":10,"src":76811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[38,76813,76814],{},"closure就是闭包",[38,76816,76817],{},[1441,76818],{"alt":10,"src":76819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[38,76821,76822],{},"内层函数必须包含外层函数的变量才是闭包",[38,76824,76825],{},[1441,76826],{"alt":10,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[38,76829,76830],{},[1441,76831],{"alt":10,"src":76832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[38,76834,76835],{},"闭包可能会引起内存泄漏",[38,76837,76838],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[33,76840,76842],{"id":76841},"_44-变量提升","4.4 变量提升",[38,76844,76845],{},[1441,76846],{"alt":10,"src":76847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[38,76849,76850],{},[1441,76851],{"alt":10,"src":76852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[38,76854,76855],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[33,76857,76859],{"id":76858},"_45-函数进阶","4.5 函数进阶",[63,76861,76863],{"id":76862},"_451-函数提升","4.5.1 函数提升",[38,76865,76866],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[38,76868,76869],{},"只提升函数声明，不提升函数调用",[51795,76871,76872],{},"\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,76874,76876],{"id":76875},"_452-函数参数","4.5.2 函数参数",[21978,76878,76880],{"id":76879},"_4521-动态参数","4.5.2.1 动态参数",[38,76882,76883],{},[1441,76884],{"alt":10,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[38,76887,76888],{},[1441,76889],{"alt":10,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[38,76892,76893],{},"箭头函数里边没有arguments",[21978,76895,76897],{"id":76896},"_4522-剩余参数","4.5.2.2 剩余参数",[38,76899,76900],{},[1441,76901],{"alt":10,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[38,76904,76905],{},[1441,76906],{"alt":10,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[38,76909,76910],{},"剩余参数使用的时候不需要写...",[38,76912,76913],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[38,76915,76916],{},"  function getSum(a,b,...arr) {",[38,76918,76919],{},"  console.log(11)",[38,76921,76922],{},"  }",[38,76924,76925],{},"  getSum(1,2,3,4)",[38,76927,76928],{},"  将1传给a，2传给b，剩下的传给剩余参数",[38,76930,76931],{},"  getSum(1,2)",[38,76933,76934],{},"  将1传给a，2传给b，剩余参数为一个空数组",[38,76936,76937],{},[1441,76938],{"alt":10,"src":76939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21978,76941,76943],{"id":76942},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[38,76945,76946],{},[1441,76947],{"alt":10,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[38,76950,76951],{},[1441,76952],{"alt":10,"src":76953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[38,76955,76956],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[38,76958,76959],{},"展开运算符可以用于数组之间的合并：",[38,76961,76962],{},"const arr1 = [1, 2, 3]",[38,76964,76965],{},"const arr2 = [3, 4, 5]",[38,76967,76968],{},"const arr = [...arr1, ...arr2]",[38,76970,76971],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[38,76973,76974],{},"剩余参数：函数参数使用，得到真数组",[38,76976,76977],{},"展开运算符：数组中使用，数组展开",[63,76979,76981],{"id":76980},"_453-箭头函数","4.5.3 箭头函数",[21978,76983,76985],{"id":76984},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[38,76987,76988],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[38,76990,76991],{},"它不是万能的！！！",[38,76993,76994],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[38,76996,76997],{},[1441,76998],{"alt":10,"src":76999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[38,77001,132],{},[38,77003,77004],{},"① 只有一个形参的时候，可以省略小括号：",[38,77006,77007],{},"const fn=x=>{console.log(x)}",[38,77009,77010],{},"② 只有一行代码时可以省略大括号：",[38,77012,77013],{},"const fn=x=>console.log(11)",[38,77015,77016],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[38,77018,77019],{},"const fn=x=>x+x",[38,77021,77022],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[38,77024,77025],{},"⑤ 阻止表单默认提交：",[38,77027,77028],{},"const form = document.querySelector('form')",[38,77030,77031],{},"form.addEventListener('click', ev => ev.preventDefault())",[38,77033,77034],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[38,77036,77037],{},"const fn=uname=>({uname:uname})",[38,77039,77040],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[38,77042,77043],{},[1441,77044],{"alt":10,"src":77045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[38,77047,77048],{},[1441,77049],{"alt":10,"src":77050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[38,77052,77053],{},[1441,77054],{"alt":10,"src":77055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[38,77057,77058],{},"一定不要忘记用()，有()就理解为自带return",[21978,77060,77062],{"id":77061},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[38,77064,77065],{},"箭头函数是没有动态参数的arguments",[38,77067,77068],{},[1441,77069],{"alt":10,"src":77070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21978,77072,77074],{"id":77073},"_4533-箭头函数this","4.5.3.3 箭头函数this",[38,77076,11312],{},[46,77078,77079,77082,77085],{},[49,77080,77081],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[49,77083,77084],{},"事件回调函数使用箭头函数时，this 为全局的 window",[49,77086,77087],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[38,77089,77090],{},[1441,77091],{"alt":10,"src":77092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[83,77094,77096],{"className":53049,"code":77095,"language":53051,"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,77097,77098,77106,77111,77116,77121,77126,77131,77135,77140,77144,77148,77153,77158,77163,77167,77171,77176,77181,77186],{"__ignoreMap":10},[92,77099,77100,77102,77104],{"class":94,"line":95},[92,77101,52126],{"class":102},[92,77103,51795],{"class":51282},[92,77105,51289],{"class":102},[92,77107,77108],{"class":94,"line":11},[92,77109,77110],{"class":102},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[92,77112,77113],{"class":94,"line":1158},[92,77114,77115],{"class":102},"    console.log(this) \u002F\u002F指向window\n",[92,77117,77118],{"class":94,"line":1173},[92,77119,77120],{"class":102},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[92,77122,77123],{"class":94,"line":1179},[92,77124,77125],{"class":102},"    function fn() {\n",[92,77127,77128],{"class":94,"line":1193},[92,77129,77130],{"class":102},"      console.log(this)  \u002F\u002F指向window\n",[92,77132,77133],{"class":94,"line":1199},[92,77134,2166],{"class":102},[92,77136,77137],{"class":94,"line":1290},[92,77138,77139],{"class":102},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[92,77141,77142],{"class":94,"line":1296},[92,77143,2379],{"emptyLinePlaceholder":17},[92,77145,77146],{"class":94,"line":1308},[92,77147,71505],{"class":102},[92,77149,77150],{"class":94,"line":1591},[92,77151,77152],{"class":102},"      name: 'andy',\n",[92,77154,77155],{"class":94,"line":1596},[92,77156,77157],{"class":102},"      sayHai: function () {\n",[92,77159,77160],{"class":94,"line":1602},[92,77161,77162],{"class":102},"        console.log(this)\n",[92,77164,77165],{"class":94,"line":1607},[92,77166,52380],{"class":102},[92,77168,77169],{"class":94,"line":1621},[92,77170,2166],{"class":102},[92,77172,77173],{"class":94,"line":1626},[92,77174,77175],{"class":102},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[92,77177,77178],{"class":94,"line":1632},[92,77179,77180],{"class":102},"    \u002F\u002F 2.箭头函数的this\n",[92,77182,77183],{"class":94,"line":1653},[92,77184,77185],{"class":102},"    const fn = () => console.log(this)\n",[92,77187,77188,77190,77192],{"class":94,"line":1658},[92,77189,52399],{"class":102},[92,77191,51795],{"class":51282},[92,77193,51289],{"class":102},[38,77195,77196],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[38,77198,77199],{},"const fn = () => console.log(this)",[38,77201,77202],{},"fn() \u002F\u002F指向window",[38,77204,77205],{},"\u002F\u002F 3.对象方法箭头函数 this",[38,77207,77208],{},"①",[38,77210,77211],{},"const obj = {",[38,77213,77214],{},"uname: 'pink老师',",[38,77216,77217],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[38,77219,1049],{},[38,77221,77222],{},"调用对象里边的函数",[38,77224,77225],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[38,77227,77228],{},"obj.sayHai()",[38,77230,77231],{},"②",[38,77233,77234],{},"const obj1 = {",[38,77236,77214],{},[38,77238,77239],{},"sayHai: function () {",[38,77241,77242],{},"let i = 10",[38,77244,77245],{},"const count = () => {",[38,77247,77248],{},"console.log(this)",[38,77250,77251],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[38,77253,77254],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[38,77256,1049],{},[38,77258,77259],{},"count()",[38,77261,1049],{},[38,77263,1049],{},[38,77265,77266],{},"obj1.sayHai()",[33,77268,77270],{"id":77269},"_46-解构赋值","4.6 解构赋值",[63,77272,77274],{"id":77273},"_461-数组解构","4.6.1 数组解构",[38,77276,77277],{},"以前要是使用数组中的值的话：",[38,77279,77280],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[38,77282,77283],{},"const arr=[100,60,80]",[38,77285,77286],{},"const max=arr[0]",[38,77288,77289],{},"const min=arr[1]",[38,77291,77292],{},"const avg=arr[2]",[38,77294,77295],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[38,77297,77298],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[38,77300,77301],{},"这个写法就类似于上边的那种用很多const的方法",[38,77303,77304],{},[1441,77305],{"alt":10,"src":77306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[83,77308,77310],{"className":50615,"code":77309,"language":50617,"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,77311,77312,77317,77322,77327,77332,77337,77341,77345,77350,77354,77359,77364,77368,77373,77378,77389,77399,77404,77409,77414,77418,77422],{"__ignoreMap":10},[92,77313,77314],{"class":94,"line":95},[92,77315,77316],{"class":102},"①变量之间交换值:\n",[92,77318,77319],{"class":94,"line":11},[92,77320,77321],{"class":102},"let a=1\n",[92,77323,77324],{"class":94,"line":1158},[92,77325,77326],{"class":102},"let b=2;\n",[92,77328,77329],{"class":94,"line":1173},[92,77330,77331],{"class":102},"必须加这行代码，不然就会报错\n",[92,77333,77334],{"class":94,"line":1179},[92,77335,77336],{"class":102},"[b,a]=[a,b]\n",[92,77338,77339],{"class":94,"line":1193},[92,77340,2379],{"emptyLinePlaceholder":17},[92,77342,77343],{"class":94,"line":1199},[92,77344,2379],{"emptyLinePlaceholder":17},[92,77346,77347],{"class":94,"line":1290},[92,77348,77349],{"class":102},"可以写成下面的方式：\n",[92,77351,77352],{"class":94,"line":1296},[92,77353,77321],{"class":102},[92,77355,77356],{"class":94,"line":1308},[92,77357,77358],{"class":102},"let b=2\n",[92,77360,77361],{"class":94,"line":1591},[92,77362,77363],{"class":102},";[b,a]=[a,b]\n",[92,77365,77366],{"class":94,"line":1596},[92,77367,2379],{"emptyLinePlaceholder":17},[92,77369,77370],{"class":94,"line":1602},[92,77371,77372],{"class":102},"②排序\n",[92,77374,77375],{"class":94,"line":1607},[92,77376,77377],{"class":102},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[92,77379,77380,77383,77386],{"class":94,"line":1621},[92,77381,77382],{"class":102},"for (let i = 0; i ",[92,77384,1013],{"class":77385},"s7hpK",[92,77387,77388],{"class":102}," arr1.length; i++) {\n",[92,77390,77391,77394,77396],{"class":94,"line":1626},[92,77392,77393],{"class":102},"   for (let j = 0; j ",[92,77395,1013],{"class":77385},[92,77397,77398],{"class":102}," arr1.length - 1; j++) {\n",[92,77400,77401],{"class":94,"line":1632},[92,77402,77403],{"class":102},"      if (arr1[j] > arr1[j + 1]) {\n",[92,77405,77406],{"class":94,"line":1653},[92,77407,77408],{"class":102},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[92,77410,77411],{"class":94,"line":1658},[92,77412,77413],{"class":102},"       }\n",[92,77415,77416],{"class":94,"line":1672},[92,77417,4288],{"class":102},[92,77419,77420],{"class":94,"line":1677},[92,77421,1544],{"class":102},[92,77423,77424],{"class":94,"line":1706},[92,77425,77426],{"class":102},"console.log(arr1)\n",[38,77428,77429],{},"数组解构的细节：",[38,77431,77432],{},"①变量多，单元值少",[38,77434,77435],{},[1441,77436],{"alt":10,"src":77437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[38,77439,77440],{},"防止出现undefined的方法：",[38,77442,77443],{},"const [a=0,b=0] =[1]",[38,77445,77446],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[38,77448,77449],{},"②变量少，单元值多",[38,77451,77452],{},[1441,77453],{"alt":10,"src":77454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[38,77456,77457],{},"此时可以使用剩余参数来接收多余的值",[38,77459,77460],{},"const [a,b,...c]=[1,2,3,4]",[38,77462,77463],{},"console.log(c) 输出[3,4]",[38,77465,77466],{},"③可以按需导入，忽略某些返回值",[38,77468,77469],{},[1441,77470],{"alt":10,"src":77471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[38,77473,77474],{},"④支持多维数组的结构",[83,77476,77480],{"className":77477,"code":77478,"language":77479,"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,77481,77482,77510,77526,77541,77556],{"__ignoreMap":10},[92,77483,77484,77486,77488,77490,77492,77494,77496,77498,77501,77503,77505,77507],{"class":94,"line":95},[92,77485,6772],{"class":98},[92,77487,51815],{"class":102},[92,77489,148],{"class":98},[92,77491,52208],{"class":102},[92,77493,320],{"class":151},[92,77495,12415],{"class":102},[92,77497,180],{"class":151},[92,77499,77500],{"class":102},", [",[92,77502,174],{"class":151},[92,77504,12415],{"class":102},[92,77506,396],{"class":151},[92,77508,77509],{"class":102},"]]\n",[92,77511,77512,77515,77517,77519,77521,77523],{"class":94,"line":11},[92,77513,77514],{"class":102},"console.",[92,77516,58229],{"class":1942},[92,77518,3830],{"class":102},[92,77520,294],{"class":151},[92,77522,4195],{"class":102},[92,77524,77525],{"class":161},"  \u002F\u002F1\n",[92,77527,77528,77530,77532,77534,77536,77538],{"class":94,"line":1158},[92,77529,77514],{"class":102},[92,77531,58229],{"class":1942},[92,77533,3830],{"class":102},[92,77535,320],{"class":151},[92,77537,4195],{"class":102},[92,77539,77540],{"class":161},"  \u002F\u002F2\n",[92,77542,77543,77545,77547,77549,77551,77553],{"class":94,"line":1173},[92,77544,77514],{"class":102},[92,77546,58229],{"class":1942},[92,77548,3830],{"class":102},[92,77550,180],{"class":151},[92,77552,4195],{"class":102},[92,77554,77555],{"class":161},"  \u002F\u002F[3,4]\n",[92,77557,77558,77560,77562,77564,77566,77568,77570,77572],{"class":94,"line":1179},[92,77559,77514],{"class":102},[92,77561,58229],{"class":1942},[92,77563,3830],{"class":102},[92,77565,180],{"class":151},[92,77567,4880],{"class":102},[92,77569,294],{"class":151},[92,77571,4195],{"class":102},[92,77573,77574],{"class":161},"  \u002F\u002F3\n",[83,77576,77578],{"className":77477,"code":77577,"language":77479,"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,77579,77580,77607,77618,77629],{"__ignoreMap":10},[92,77581,77582,77584,77587,77589,77591,77593,77595,77597,77599,77601,77603,77605],{"class":94,"line":95},[92,77583,6772],{"class":98},[92,77585,77586],{"class":102}," [a, b, c] ",[92,77588,148],{"class":98},[92,77590,52208],{"class":102},[92,77592,320],{"class":151},[92,77594,12415],{"class":102},[92,77596,180],{"class":151},[92,77598,77500],{"class":102},[92,77600,174],{"class":151},[92,77602,12415],{"class":102},[92,77604,396],{"class":151},[92,77606,77509],{"class":102},[92,77608,77609,77611,77613,77616],{"class":94,"line":11},[92,77610,77514],{"class":102},[92,77612,58229],{"class":1942},[92,77614,77615],{"class":102},"(a)",[92,77617,77525],{"class":161},[92,77619,77620,77622,77624,77627],{"class":94,"line":1158},[92,77621,77514],{"class":102},[92,77623,58229],{"class":1942},[92,77625,77626],{"class":102},"(b)",[92,77628,77540],{"class":161},[92,77630,77631,77633,77635,77638],{"class":94,"line":1173},[92,77632,77514],{"class":102},[92,77634,58229],{"class":1942},[92,77636,77637],{"class":102},"(c)",[92,77639,77555],{"class":161},[83,77641,77643],{"className":77477,"code":77642,"language":77479,"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,77644,77645,77672,77682,77692,77702],{"__ignoreMap":10},[92,77646,77647,77649,77652,77654,77656,77658,77660,77662,77664,77666,77668,77670],{"class":94,"line":95},[92,77648,6772],{"class":98},[92,77650,77651],{"class":102}," [a, b, [c, d]] ",[92,77653,148],{"class":98},[92,77655,52208],{"class":102},[92,77657,320],{"class":151},[92,77659,12415],{"class":102},[92,77661,180],{"class":151},[92,77663,77500],{"class":102},[92,77665,174],{"class":151},[92,77667,12415],{"class":102},[92,77669,396],{"class":151},[92,77671,77509],{"class":102},[92,77673,77674,77676,77678,77680],{"class":94,"line":11},[92,77675,77514],{"class":102},[92,77677,58229],{"class":1942},[92,77679,77615],{"class":102},[92,77681,77525],{"class":161},[92,77683,77684,77686,77688,77690],{"class":94,"line":1158},[92,77685,77514],{"class":102},[92,77687,58229],{"class":1942},[92,77689,77626],{"class":102},[92,77691,77540],{"class":161},[92,77693,77694,77696,77698,77700],{"class":94,"line":1173},[92,77695,77514],{"class":102},[92,77697,58229],{"class":1942},[92,77699,77637],{"class":102},[92,77701,77574],{"class":161},[92,77703,77704,77706,77708,77711],{"class":94,"line":1179},[92,77705,77514],{"class":102},[92,77707,58229],{"class":1942},[92,77709,77710],{"class":102},"(d)",[92,77712,77713],{"class":161},"  \u002F\u002F4\n",[63,77715,77717],{"id":77716},"_462-对象解构","4.6.2 对象解构",[38,77719,77720],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[38,77722,77723],{},"用的非常非常多！！！！！！",[21978,77725,77727],{"id":77726},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[38,77729,77730],{},"基本语法：",[46,77732,77733,77736,77739,77742],{},[49,77734,77735],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[49,77737,77738],{},"对象属性的值将被赋值给与属性名相同的变量",[49,77740,77741],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[49,77743,77744],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[83,77746,77748],{"className":50615,"code":77747,"language":50617,"meta":10,"style":10},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[89,77749,77750,77755,77760,77765,77769],{"__ignoreMap":10},[92,77751,77752],{"class":94,"line":95},[92,77753,77754],{"class":102},"const obj = {\n",[92,77756,77757],{"class":94,"line":11},[92,77758,77759],{"class":102},"   uname: 'pink老师',\n",[92,77761,77762],{"class":94,"line":1158},[92,77763,77764],{"class":102},"   age: 18,\n",[92,77766,77767],{"class":94,"line":1173},[92,77768,1544],{"class":102},[92,77770,77771],{"class":94,"line":1179},[92,77772,77773],{"class":102},"const { uname, age } = obj\n",[38,77775,77776],{},"上方代码这样写等价于：",[38,77778,77779],{},"const uname等价于obj.uname",[38,77781,77782],{},"变量名可以重新改名：",[38,77784,77785],{},"const uname='red老师'",[38,77787,77788],{},"const user={",[38,77790,77791],{},"  uname:'pink老师',",[38,77793,77794],{},"  age:18",[38,77796,1049],{},[38,77798,77799],{},"const {uname,age}=user",[38,77801,77802],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[38,77804,77805],{},"const {旧变量名：新变量名}=对象",[38,77807,77808],{},"const {uname:username,age}=user",[21978,77810,77812],{"id":77811},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[38,77814,77815],{},[1441,77816],{"alt":10,"src":77817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21978,77819,77821],{"id":77820},"_4623-多级对象解构","4.6.2.3 多级对象解构",[38,77823,77824],{},[1441,77825],{"alt":10,"src":77826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[83,77828,77830],{"className":53049,"code":77829,"language":53051,"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,77831,77832,77840,77845,77850,77855,77860,77865,77870,77875,77880,77884,77889,77894],{"__ignoreMap":10},[92,77833,77834,77836,77838],{"class":94,"line":95},[92,77835,52126],{"class":102},[92,77837,51795],{"class":51282},[92,77839,51289],{"class":102},[92,77841,77842],{"class":94,"line":11},[92,77843,77844],{"class":102},"    const pig = {\n",[92,77846,77847],{"class":94,"line":1158},[92,77848,77849],{"class":102},"      name: '佩奇',\n",[92,77851,77852],{"class":94,"line":1173},[92,77853,77854],{"class":102},"      family: {\n",[92,77856,77857],{"class":94,"line":1179},[92,77858,77859],{"class":102},"        mother: '猪妈妈',\n",[92,77861,77862],{"class":94,"line":1193},[92,77863,77864],{"class":102},"        father: '猪爸爸',\n",[92,77866,77867],{"class":94,"line":1199},[92,77868,77869],{"class":102},"        sister: '乔治'\n",[92,77871,77872],{"class":94,"line":1290},[92,77873,77874],{"class":102},"      },\n",[92,77876,77877],{"class":94,"line":1296},[92,77878,77879],{"class":102},"      age: 6\n",[92,77881,77882],{"class":94,"line":1308},[92,77883,2166],{"class":102},[92,77885,77886],{"class":94,"line":1591},[92,77887,77888],{"class":102},"    \u002F\u002F 多级对象解构\n",[92,77890,77891],{"class":94,"line":1596},[92,77892,77893],{"class":102},"    const { name, family: { mother, father, sister }, age } = pig\n",[92,77895,77896,77898,77900],{"class":94,"line":1602},[92,77897,52399],{"class":102},[92,77899,51795],{"class":51282},[92,77901,51289],{"class":102},[38,77903,77904],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[83,77906,77909],{"className":77907,"code":77908,"language":76429,"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,77910,77911,77916,77927,77939,77951,77960,77964,77975,77987,77997,78002,78006,78016,78027,78036,78040,78044,78055,78066,78075,78079,78084],{"__ignoreMap":10},[92,77912,77913],{"class":94,"line":95},[92,77914,77915],{"class":161},"    \u002F\u002F 这是后台传递过来的数据\n",[92,77917,77918,77920,77923,77925],{"class":94,"line":11},[92,77919,11201],{"class":98},[92,77921,77922],{"class":102}," msg ",[92,77924,148],{"class":98},[92,77926,15552],{"class":102},[92,77928,77929,77932,77934,77937],{"class":94,"line":1158},[92,77930,77931],{"class":207},"      \"code\"",[92,77933,962],{"class":98},[92,77935,77936],{"class":151}," 200",[92,77938,31448],{"class":102},[92,77940,77941,77944,77946,77949],{"class":94,"line":1173},[92,77942,77943],{"class":207},"      \"msg\"",[92,77945,962],{"class":98},[92,77947,77948],{"class":207}," \"获取新闻列表成功\"",[92,77950,31448],{"class":102},[92,77952,77953,77956,77958],{"class":94,"line":1179},[92,77954,77955],{"class":207},"      \"data\"",[92,77957,962],{"class":98},[92,77959,55429],{"class":102},[92,77961,77962],{"class":94,"line":1193},[92,77963,2489],{"class":102},[92,77965,77966,77969,77971,77973],{"class":94,"line":1199},[92,77967,77968],{"class":207},"          \"id\"",[92,77970,962],{"class":98},[92,77972,25100],{"class":151},[92,77974,31448],{"class":102},[92,77976,77977,77980,77982,77985],{"class":94,"line":1290},[92,77978,77979],{"class":207},"          \"title\"",[92,77981,962],{"class":98},[92,77983,77984],{"class":207}," \"5G商用自己，三大运用商收入下降\"",[92,77986,31448],{"class":102},[92,77988,77989,77992,77994],{"class":94,"line":1296},[92,77990,77991],{"class":207},"          \"count\"",[92,77993,962],{"class":98},[92,77995,77996],{"class":151}," 58\n",[92,77998,77999],{"class":94,"line":1308},[92,78000,78001],{"class":102},"        },\n",[92,78003,78004],{"class":94,"line":1591},[92,78005,2489],{"class":102},[92,78007,78008,78010,78012,78014],{"class":94,"line":1596},[92,78009,77968],{"class":207},[92,78011,962],{"class":98},[92,78013,14735],{"class":151},[92,78015,31448],{"class":102},[92,78017,78018,78020,78022,78025],{"class":94,"line":1602},[92,78019,77979],{"class":207},[92,78021,962],{"class":98},[92,78023,78024],{"class":207}," \"国际媒体头条速览\"",[92,78026,31448],{"class":102},[92,78028,78029,78031,78033],{"class":94,"line":1607},[92,78030,77991],{"class":207},[92,78032,962],{"class":98},[92,78034,78035],{"class":151}," 56\n",[92,78037,78038],{"class":94,"line":1621},[92,78039,78001],{"class":102},[92,78041,78042],{"class":94,"line":1626},[92,78043,2489],{"class":102},[92,78045,78046,78048,78050,78053],{"class":94,"line":1632},[92,78047,77968],{"class":207},[92,78049,962],{"class":98},[92,78051,78052],{"class":151}," 3",[92,78054,31448],{"class":102},[92,78056,78057,78059,78061,78064],{"class":94,"line":1653},[92,78058,77979],{"class":207},[92,78060,962],{"class":98},[92,78062,78063],{"class":207}," \"乌克兰和俄罗斯持续冲突\"",[92,78065,31448],{"class":102},[92,78067,78068,78070,78072],{"class":94,"line":1658},[92,78069,77991],{"class":207},[92,78071,962],{"class":98},[92,78073,78074],{"class":151}," 1669\n",[92,78076,78077],{"class":94,"line":1672},[92,78078,78001],{"class":102},[92,78080,78081],{"class":94,"line":1677},[92,78082,78083],{"class":102},"      ]\n",[92,78085,78086],{"class":94,"line":1706},[92,78087,2166],{"class":102},[38,78089,78090],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[38,78092,78093],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[38,78095,78096],{},"\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,78098,78099],{},"function({data}) {",[38,78101,78102],{},"console.log(data)",[38,78104,1049],{},[38,78106,78107],{},"render(msg)",[38,78109,78110],{},"实参传递给形参的时候解构了",[38,78112,78113],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[38,78115,78116],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[38,78118,78119],{},"function render({data:mydata}) {",[38,78121,78122],{},"  console.log(data)",[38,78124,1049],{},[63,78126,78128],{"id":78127},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[38,78130,78131],{},"有两种情况：一个是数组结构，一个是立即执行函数",[46,78133,78134],{},[49,78135,78136],{},"如果对一个数组进行遍历，有两种方式：",[38,78138,78139],{},"①法1",[38,78141,78142],{},"const arr=[1,2,3]",[38,78144,78145],{},"arr.map(function(item,index) {",[38,78147,78148],{},"  console.log(item)",[38,78150,52446],{},[38,78152,78153],{},[1441,78154],{"alt":10,"src":78155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[38,78157,78158],{},"②法2",[38,78160,78161],{},"const str='pink'",[38,78163,78164],{},"[1,2,3].map(function(item,index) {",[38,78166,78167],{},"console.log(item)",[38,78169,52446],{},[38,78171,78172],{},[1441,78173],{"alt":10,"src":78174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[38,78176,78177],{},"此时会报错",[38,78179,78180],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[38,78182,78167],{},[38,78184,52446],{},[38,78186,78187],{},"内部会当成这样处理，所以我们用分号进行隔开",[33,78189,78191],{"id":78190},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[38,78193,78194],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[38,78196,78197],{},"可以理解为加强版的for循环",[38,78199,78200],{},[1441,78201],{"alt":10,"src":78202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[38,78204,78205],{},"里边不写return，不返回数组，只遍历不返回",[38,78207,78208],{},"map是返回数组",[38,78210,78211],{},"forEach主要用于遍历数组对象",[83,78213,78215],{"className":53049,"code":78214,"language":53051,"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,78216,78217,78225,78230,78235,78240,78245,78249,78254],{"__ignoreMap":10},[92,78218,78219,78221,78223],{"class":94,"line":95},[92,78220,52126],{"class":102},[92,78222,51795],{"class":51282},[92,78224,51289],{"class":102},[92,78226,78227],{"class":94,"line":11},[92,78228,78229],{"class":102},"    const arr = ['red', 'green', 'pink']\n",[92,78231,78232],{"class":94,"line":1158},[92,78233,78234],{"class":102},"    const result = arr.forEach(function (item, index) {\n",[92,78236,78237],{"class":94,"line":1173},[92,78238,78239],{"class":102},"      console.log(item)\n",[92,78241,78242],{"class":94,"line":1179},[92,78243,78244],{"class":102},"      console.log(index)\n",[92,78246,78247],{"class":94,"line":1193},[92,78248,33443],{"class":102},[92,78250,78251],{"class":94,"line":1199},[92,78252,78253],{"class":102},"    console.log(result)\n",[92,78255,78256,78258,78260],{"class":94,"line":1290},[92,78257,52399],{"class":102},[92,78259,51795],{"class":51282},[92,78261,51289],{"class":102},[38,78263,78264],{},[1441,78265],{"alt":10,"src":78266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[33,78268,78270],{"id":78269},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[38,78272,78273],{},[1441,78274],{"alt":10,"src":78275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[38,78277,78278],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[83,78280,78282],{"className":53049,"code":78281,"language":53051,"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,78283,78284,78292,78300,78305,78310,78314,78318,78323,78327,78332,78340],{"__ignoreMap":10},[92,78285,78286,78288,78290],{"class":94,"line":95},[92,78287,1013],{"class":102},[92,78289,51782],{"class":51282},[92,78291,51289],{"class":102},[92,78293,78294,78296,78298],{"class":94,"line":11},[92,78295,52126],{"class":102},[92,78297,51795],{"class":51282},[92,78299,51289],{"class":102},[92,78301,78302],{"class":94,"line":1158},[92,78303,78304],{"class":102},"    const arr = [10, 20, 30]\n",[92,78306,78307],{"class":94,"line":1173},[92,78308,78309],{"class":102},"    const newArr = arr.filter(function (item, index) {\n",[92,78311,78312],{"class":94,"line":1179},[92,78313,78239],{"class":102},[92,78315,78316],{"class":94,"line":1193},[92,78317,78244],{"class":102},[92,78319,78320],{"class":94,"line":1199},[92,78321,78322],{"class":102},"      return item >= 20\n",[92,78324,78325],{"class":94,"line":1290},[92,78326,33443],{"class":102},[92,78328,78329],{"class":94,"line":1296},[92,78330,78331],{"class":102},"    console.log(newArr)\n",[92,78333,78334,78336,78338],{"class":94,"line":1308},[92,78335,52399],{"class":102},[92,78337,51795],{"class":51282},[92,78339,51289],{"class":102},[92,78341,78342,78344,78346],{"class":94,"line":1591},[92,78343,51767],{"class":102},[92,78345,51782],{"class":51282},[92,78347,51289],{"class":102},[38,78349,78350],{},"这个也可以写成箭头函数：",[83,78352,78354],{"className":50615,"code":78353,"language":50617,"meta":10,"style":10},"const newArr = arr.filter(item => item >= 20)\n",[89,78355,78356],{"__ignoreMap":10},[92,78357,78358],{"class":94,"line":95},[92,78359,78353],{"class":102},[33,78361,78363],{"id":78362},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[38,78365,78366],{},[1441,78367],{"alt":10,"src":78368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[38,78370,78371],{},"步骤：",[38,78373,78374],{},"①：渲染页面模块",[1110,78376,78377,78380],{},[49,78378,78379],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[49,78381,78382],{},"用forEach+字符串的形式",[38,78384,78385],{},"②：点击不同需求，显示不同页面内容",[1110,78387,78388,78391,78394,78397,78400],{},[49,78389,78390],{},"点击采取事件委托方式 .filter",[49,78392,78393],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[49,78395,78396],{},"筛选条件是根据点击的 data-index 来判断",[49,78398,78399],{},"可以使用对象解构，把事件对象解构",[49,78401,78402],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[83,78404,78406],{"className":50615,"code":78405,"language":50617,"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,78407,78408,78418,78432,78436,78444,78458,78478,78490,78498,78504,78514,78524,78534,78538,78542,78548,78561,78573,78583,78595,78599,78603,78610,78623,78635,78652,78670,78683,78687,78691,78703,78713,78717,78721,78728,78769,78796,78806,78810,78814,78822,78834,78838,78842,78850,78862,78874,78885,78889,78893,78902,78914,78925,78929,78933,78942,78954,78966,78970,78974,78981,78991,79003,79015,79030,79034,79038,79046,79062,79072,79082,79092,79104,79108,79112,79122,79133,79143,79147,79155,79163,79167,79175,79190,79216,79241,79266,79285,79293,79307,79312,79317,79322,79327,79332,79340,79348,79353,79364,79369,79379,79389,79399,79409,79413,79417,79426,79435,79444,79453,79457,79461,79470,79479,79488,79497,79501,79505,79514,79523,79532,79541,79545,79549,79558,79567,79576,79585,79589,79593,79602,79611,79620,79629,79633,79637,79646,79655,79664,79673,79677,79681,79690,79699,79707,79716,79720,79724,79728,79733,79745,79750,79762,79766,79783,79811,79820,79825,79835,79845,79854,79859,79864,79868,79873,79890,79894,79899,79907,79912,79939,79944,79964,79969,79981,79986,79991,79996,80007,80021,80058,80076,80109,80126,80150,80154,80159,80165,80169,80173,80177,80185,80193,80197],{"__ignoreMap":10},[92,78409,78410,78412,78414,78416],{"class":94,"line":95},[92,78411,51279],{"class":102},[92,78413,51283],{"class":51282},[92,78415,51286],{"class":1942},[92,78417,51289],{"class":102},[92,78419,78420,78422,78424,78426,78428,78430],{"class":94,"line":11},[92,78421,1013],{"class":102},[92,78423,50617],{"class":51282},[92,78425,51298],{"class":1942},[92,78427,148],{"class":102},[92,78429,51303],{"class":207},[92,78431,51289],{"class":102},[92,78433,78434],{"class":94,"line":1158},[92,78435,2379],{"emptyLinePlaceholder":17},[92,78437,78438,78440,78442],{"class":94,"line":1173},[92,78439,1013],{"class":102},[92,78441,51316],{"class":51282},[92,78443,51289],{"class":102},[92,78445,78446,78448,78450,78452,78454,78456],{"class":94,"line":1179},[92,78447,52126],{"class":102},[92,78449,51326],{"class":51282},[92,78451,51329],{"class":1942},[92,78453,148],{"class":102},[92,78455,51334],{"class":207},[92,78457,51289],{"class":102},[92,78459,78460,78462,78464,78466,78468,78470,78472,78474,78476],{"class":94,"line":1193},[92,78461,52126],{"class":102},[92,78463,51326],{"class":51282},[92,78465,14900],{"class":1942},[92,78467,148],{"class":102},[92,78469,51373],{"class":207},[92,78471,51353],{"class":1942},[92,78473,148],{"class":102},[92,78475,51380],{"class":207},[92,78477,51289],{"class":102},[92,78479,78480,78482,78484,78486,78488],{"class":94,"line":1199},[92,78481,52126],{"class":102},[92,78483,51389],{"class":51282},[92,78485,51392],{"class":102},[92,78487,51389],{"class":51282},[92,78489,51289],{"class":102},[92,78491,78492,78494,78496],{"class":94,"line":1290},[92,78493,52126],{"class":102},[92,78495,5106],{"class":51282},[92,78497,51289],{"class":102},[92,78499,78500,78502],{"class":94,"line":1296},[92,78501,6383],{"class":51282},[92,78503,15552],{"class":102},[92,78505,78506,78508,78510,78512],{"class":94,"line":1308},[92,78507,54677],{"class":151},[92,78509,51419],{"class":102},[92,78511,294],{"class":151},[92,78513,1269],{"class":102},[92,78515,78516,78518,78520,78522],{"class":94,"line":1591},[92,78517,54688],{"class":151},[92,78519,51419],{"class":102},[92,78521,294],{"class":151},[92,78523,1269],{"class":102},[92,78525,78526,78528,78530,78532],{"class":94,"line":1596},[92,78527,72578],{"class":151},[92,78529,51419],{"class":102},[92,78531,60487],{"class":151},[92,78533,1269],{"class":102},[92,78535,78536],{"class":94,"line":1602},[92,78537,2166],{"class":102},[92,78539,78540],{"class":94,"line":1607},[92,78541,2379],{"emptyLinePlaceholder":17},[92,78543,78544,78546],{"class":94,"line":1621},[92,78545,62105],{"class":1942},[92,78547,15552],{"class":102},[92,78549,78550,78552,78554,78557,78559],{"class":94,"line":1626},[92,78551,54753],{"class":151},[92,78553,51419],{"class":102},[92,78555,78556],{"class":151},"990",[92,78558,51474],{"class":98},[92,78560,1269],{"class":102},[92,78562,78563,78565,78567,78569,78571],{"class":94,"line":1632},[92,78564,54688],{"class":151},[92,78566,51419],{"class":102},[92,78568,294],{"class":151},[92,78570,51538],{"class":151},[92,78572,1269],{"class":102},[92,78574,78575,78577,78579,78581],{"class":94,"line":1653},[92,78576,54991],{"class":151},[92,78578,51419],{"class":102},[92,78580,51459],{"class":151},[92,78582,1269],{"class":102},[92,78584,78585,78588,78590,78593],{"class":94,"line":1658},[92,78586,78587],{"class":151},"      flex-wrap",[92,78589,51419],{"class":102},[92,78591,78592],{"class":151},"wrap",[92,78594,1269],{"class":102},[92,78596,78597],{"class":94,"line":1672},[92,78598,2166],{"class":102},[92,78600,78601],{"class":94,"line":1677},[92,78602,2379],{"emptyLinePlaceholder":17},[92,78604,78605,78608],{"class":94,"line":1706},[92,78606,78607],{"class":1942},"    .item",[92,78609,15552],{"class":102},[92,78611,78612,78614,78616,78619,78621],{"class":94,"line":1711},[92,78613,54753],{"class":151},[92,78615,51419],{"class":102},[92,78617,78618],{"class":151},"240",[92,78620,51474],{"class":98},[92,78622,1269],{"class":102},[92,78624,78625,78627,78629,78631,78633],{"class":94,"line":1728},[92,78626,61982],{"class":151},[92,78628,51419],{"class":102},[92,78630,549],{"class":151},[92,78632,51474],{"class":98},[92,78634,1269],{"class":102},[92,78636,78637,78639,78641,78643,78645,78648,78650],{"class":94,"line":1733},[92,78638,54677],{"class":151},[92,78640,51419],{"class":102},[92,78642,803],{"class":151},[92,78644,51474],{"class":98},[92,78646,78647],{"class":151}," 30",[92,78649,51474],{"class":98},[92,78651,1269],{"class":102},[92,78653,78654,78656,78658,78660,78663,78666,78668],{"class":94,"line":1738},[92,78655,61842],{"class":151},[92,78657,51419],{"class":102},[92,78659,28103],{"class":151},[92,78661,78662],{"class":151}," ease",[92,78664,78665],{"class":151}," .5",[92,78667,798],{"class":98},[92,78669,1269],{"class":102},[92,78671,78672,78675,78677,78679,78681],{"class":94,"line":1743},[92,78673,78674],{"class":151},"      margin-bottom",[92,78676,51419],{"class":102},[92,78678,803],{"class":151},[92,78680,51474],{"class":98},[92,78682,1269],{"class":102},[92,78684,78685],{"class":94,"line":1757},[92,78686,2166],{"class":102},[92,78688,78689],{"class":94,"line":1762},[92,78690,2379],{"emptyLinePlaceholder":17},[92,78692,78693,78696,78698,78701],{"class":94,"line":2556},[92,78694,78695],{"class":1942},"    .item:nth-child",[92,78697,103],{"class":102},[92,78699,78700],{"class":151},"4n",[92,78702,12422],{"class":102},[92,78704,78705,78707,78709,78711],{"class":94,"line":2570},[92,78706,61982],{"class":151},[92,78708,51419],{"class":102},[92,78710,294],{"class":151},[92,78712,1269],{"class":102},[92,78714,78715],{"class":94,"line":2578},[92,78716,2166],{"class":102},[92,78718,78719],{"class":94,"line":2583},[92,78720,2379],{"emptyLinePlaceholder":17},[92,78722,78723,78726],{"class":94,"line":2589},[92,78724,78725],{"class":1942},"    .item:hover",[92,78727,15552],{"class":102},[92,78729,78730,78733,78735,78737,78739,78741,78743,78745,78747,78750,78752,78754,78756,78758,78760,78762,78764,78767],{"class":94,"line":2595},[92,78731,78732],{"class":151},"      box-shadow",[92,78734,51419],{"class":102},[92,78736,294],{"class":151},[92,78738,51474],{"class":98},[92,78740,4072],{"class":151},[92,78742,51474],{"class":98},[92,78744,2127],{"class":151},[92,78746,51474],{"class":98},[92,78748,78749],{"class":151}," rgba",[92,78751,103],{"class":102},[92,78753,294],{"class":151},[92,78755,12415],{"class":102},[92,78757,294],{"class":151},[92,78759,12415],{"class":102},[92,78761,294],{"class":151},[92,78763,12415],{"class":102},[92,78765,78766],{"class":151},".2",[92,78768,2698],{"class":102},[92,78770,78771,78774,78776,78779,78781,78783,78785,78788,78790,78792,78794],{"class":94,"line":2600},[92,78772,78773],{"class":151},"      transform",[92,78775,51419],{"class":102},[92,78777,78778],{"class":151},"translate3d",[92,78780,103],{"class":102},[92,78782,294],{"class":151},[92,78784,12415],{"class":102},[92,78786,78787],{"class":151},"-4",[92,78789,51474],{"class":98},[92,78791,12415],{"class":102},[92,78793,294],{"class":151},[92,78795,2698],{"class":102},[92,78797,78798,78800,78802,78804],{"class":94,"line":7928},[92,78799,62007],{"class":151},[92,78801,51419],{"class":102},[92,78803,62012],{"class":151},[92,78805,1269],{"class":102},[92,78807,78808],{"class":94,"line":7952},[92,78809,2166],{"class":102},[92,78811,78812],{"class":94,"line":7957},[92,78813,2379],{"emptyLinePlaceholder":17},[92,78815,78816,78818,78820],{"class":94,"line":7963},[92,78817,78607],{"class":1942},[92,78819,55597],{"class":51282},[92,78821,15552],{"class":102},[92,78823,78824,78826,78828,78830,78832],{"class":94,"line":7990},[92,78825,54753],{"class":151},[92,78827,51419],{"class":102},[92,78829,414],{"class":151},[92,78831,431],{"class":98},[92,78833,1269],{"class":102},[92,78835,78836],{"class":94,"line":7995},[92,78837,2166],{"class":102},[92,78839,78840],{"class":94,"line":8001},[92,78841,2379],{"emptyLinePlaceholder":17},[92,78843,78844,78846,78848],{"class":94,"line":8013},[92,78845,78607],{"class":1942},[92,78847,62286],{"class":1942},[92,78849,15552],{"class":102},[92,78851,78852,78854,78856,78858,78860],{"class":94,"line":8025},[92,78853,54904],{"class":151},[92,78855,51419],{"class":102},[92,78857,753],{"class":151},[92,78859,51474],{"class":98},[92,78861,1269],{"class":102},[92,78863,78864,78866,78868,78870,78872],{"class":94,"line":8037},[92,78865,78674],{"class":151},[92,78867,51419],{"class":102},[92,78869,549],{"class":151},[92,78871,51474],{"class":98},[92,78873,1269],{"class":102},[92,78875,78876,78878,78880,78883],{"class":94,"line":9696},[92,78877,57398],{"class":151},[92,78879,51419],{"class":102},[92,78881,78882],{"class":151},"#666",[92,78884,1269],{"class":102},[92,78886,78887],{"class":94,"line":9721},[92,78888,2166],{"class":102},[92,78890,78891],{"class":94,"line":9744},[92,78892,2379],{"emptyLinePlaceholder":17},[92,78894,78895,78897,78900],{"class":94,"line":9768},[92,78896,78607],{"class":1942},[92,78898,78899],{"class":1942}," .price",[92,78901,15552],{"class":102},[92,78903,78904,78906,78908,78910,78912],{"class":94,"line":9773},[92,78905,54904],{"class":151},[92,78907,51419],{"class":102},[92,78909,853],{"class":151},[92,78911,51474],{"class":98},[92,78913,1269],{"class":102},[92,78915,78916,78918,78920,78923],{"class":94,"line":9778},[92,78917,57398],{"class":151},[92,78919,51419],{"class":102},[92,78921,78922],{"class":151},"firebrick",[92,78924,1269],{"class":102},[92,78926,78927],{"class":94,"line":9783},[92,78928,2166],{"class":102},[92,78930,78931],{"class":94,"line":9792},[92,78932,2379],{"emptyLinePlaceholder":17},[92,78934,78935,78937,78940],{"class":94,"line":9797},[92,78936,78607],{"class":1942},[92,78938,78939],{"class":1942}," .price::before",[92,78941,15552],{"class":102},[92,78943,78944,78947,78949,78952],{"class":94,"line":9803},[92,78945,78946],{"class":151},"      content",[92,78948,51419],{"class":102},[92,78950,78951],{"class":207},"'￥'",[92,78953,1269],{"class":102},[92,78955,78956,78958,78960,78962,78964],{"class":94,"line":9824},[92,78957,54904],{"class":151},[92,78959,51419],{"class":102},[92,78961,652],{"class":151},[92,78963,51474],{"class":98},[92,78965,1269],{"class":102},[92,78967,78968],{"class":94,"line":9830},[92,78969,2166],{"class":102},[92,78971,78972],{"class":94,"line":9844},[92,78973,2379],{"emptyLinePlaceholder":17},[92,78975,78976,78979],{"class":94,"line":9850},[92,78977,78978],{"class":1942},"    .filter",[92,78980,15552],{"class":102},[92,78982,78983,78985,78987,78989],{"class":94,"line":9877},[92,78984,54991],{"class":151},[92,78986,51419],{"class":102},[92,78988,51459],{"class":151},[92,78990,1269],{"class":102},[92,78992,78993,78995,78997,78999,79001],{"class":94,"line":9886},[92,78994,54753],{"class":151},[92,78996,51419],{"class":102},[92,78998,78556],{"class":151},[92,79000,51474],{"class":98},[92,79002,1269],{"class":102},[92,79004,79005,79007,79009,79011,79013],{"class":94,"line":9892},[92,79006,54688],{"class":151},[92,79008,51419],{"class":102},[92,79010,294],{"class":151},[92,79012,51538],{"class":151},[92,79014,1269],{"class":102},[92,79016,79017,79019,79021,79023,79025,79027],{"class":94,"line":9900},[92,79018,54677],{"class":151},[92,79020,51419],{"class":102},[92,79022,759],{"class":151},[92,79024,51474],{"class":98},[92,79026,78647],{"class":151},[92,79028,79029],{"class":98},"px\n",[92,79031,79032],{"class":94,"line":9905},[92,79033,2166],{"class":102},[92,79035,79036],{"class":94,"line":16584},[92,79037,2379],{"emptyLinePlaceholder":17},[92,79039,79040,79042,79044],{"class":94,"line":16590},[92,79041,78978],{"class":1942},[92,79043,1377],{"class":51282},[92,79045,15552],{"class":102},[92,79047,79048,79050,79052,79054,79056,79058,79060],{"class":94,"line":16613},[92,79049,54677],{"class":151},[92,79051,51419],{"class":102},[92,79053,549],{"class":151},[92,79055,51474],{"class":98},[92,79057,8930],{"class":151},[92,79059,51474],{"class":98},[92,79061,1269],{"class":102},[92,79063,79064,79066,79068,79070],{"class":94,"line":16619},[92,79065,61703],{"class":151},[92,79067,51419],{"class":102},[92,79069,61800],{"class":151},[92,79071,1269],{"class":102},[92,79073,79074,79076,79078,79080],{"class":94,"line":16642},[92,79075,57398],{"class":151},[92,79077,51419],{"class":102},[92,79079,78882],{"class":151},[92,79081,1269],{"class":102},[92,79083,79084,79086,79088,79090],{"class":94,"line":16656},[92,79085,63952],{"class":151},[92,79087,51419],{"class":102},[92,79089,54719],{"class":151},[92,79091,1269],{"class":102},[92,79093,79094,79096,79098,79100,79102],{"class":94,"line":16676},[92,79095,61732],{"class":151},[92,79097,51419],{"class":102},[92,79099,803],{"class":151},[92,79101,51474],{"class":98},[92,79103,1269],{"class":102},[92,79105,79106],{"class":94,"line":16682},[92,79107,2166],{"class":102},[92,79109,79110],{"class":94,"line":16693},[92,79111,2379],{"emptyLinePlaceholder":17},[92,79113,79114,79116,79118,79120],{"class":94,"line":16716},[92,79115,78978],{"class":1942},[92,79117,1377],{"class":51282},[92,79119,61882],{"class":1942},[92,79121,15552],{"class":102},[92,79123,79124,79126,79128,79131],{"class":94,"line":16738},[92,79125,54866],{"class":151},[92,79127,51419],{"class":102},[92,79129,79130],{"class":151},"#05943c",[92,79132,1269],{"class":102},[92,79134,79135,79137,79139,79141],{"class":94,"line":16743},[92,79136,57398],{"class":151},[92,79138,51419],{"class":102},[92,79140,60824],{"class":151},[92,79142,1269],{"class":102},[92,79144,79145],{"class":94,"line":16749},[92,79146,2166],{"class":102},[92,79148,79149,79151,79153],{"class":94,"line":16763},[92,79150,52399],{"class":102},[92,79152,5106],{"class":51282},[92,79154,51289],{"class":102},[92,79156,79157,79159,79161],{"class":94,"line":16776},[92,79158,51767],{"class":102},[92,79160,51316],{"class":51282},[92,79162,51289],{"class":102},[92,79164,79165],{"class":94,"line":16781},[92,79166,2379],{"emptyLinePlaceholder":17},[92,79168,79169,79171,79173],{"class":94,"line":16795},[92,79170,1013],{"class":102},[92,79172,51782],{"class":51282},[92,79174,51289],{"class":102},[92,79176,79177,79179,79181,79183,79185,79188],{"class":94,"line":16800},[92,79178,52126],{"class":102},[92,79180,51593],{"class":51282},[92,79182,53468],{"class":1942},[92,79184,148],{"class":102},[92,79186,79187],{"class":207},"\"filter\"",[92,79189,51289],{"class":102},[92,79191,79192,79194,79196,79198,79200,79202,79205,79207,79209,79212,79214],{"class":94,"line":16806},[92,79193,51323],{"class":102},[92,79195,341],{"class":51282},[92,79197,61039],{"class":1942},[92,79199,148],{"class":102},[92,79201,61044],{"class":207},[92,79203,79204],{"class":1942}," data-index",[92,79206,148],{"class":102},[92,79208,3657],{"class":207},[92,79210,79211],{"class":102},">0-100元\u003C\u002F",[92,79213,341],{"class":51282},[92,79215,51289],{"class":102},[92,79217,79218,79220,79222,79224,79226,79228,79230,79232,79234,79237,79239],{"class":94,"line":16811},[92,79219,51323],{"class":102},[92,79221,341],{"class":51282},[92,79223,61039],{"class":1942},[92,79225,148],{"class":102},[92,79227,61044],{"class":207},[92,79229,79204],{"class":1942},[92,79231,148],{"class":102},[92,79233,3680],{"class":207},[92,79235,79236],{"class":102},">100-300元\u003C\u002F",[92,79238,341],{"class":51282},[92,79240,51289],{"class":102},[92,79242,79243,79245,79247,79249,79251,79253,79255,79257,79259,79262,79264],{"class":94,"line":16825},[92,79244,51323],{"class":102},[92,79246,341],{"class":51282},[92,79248,61039],{"class":1942},[92,79250,148],{"class":102},[92,79252,61044],{"class":207},[92,79254,79204],{"class":1942},[92,79256,148],{"class":102},[92,79258,3693],{"class":207},[92,79260,79261],{"class":102},">300元以上\u003C\u002F",[92,79263,341],{"class":51282},[92,79265,51289],{"class":102},[92,79267,79268,79270,79272,79274,79276,79278,79281,79283],{"class":94,"line":16830},[92,79269,51323],{"class":102},[92,79271,341],{"class":51282},[92,79273,61039],{"class":1942},[92,79275,148],{"class":102},[92,79277,61044],{"class":207},[92,79279,79280],{"class":102},">全部区间\u003C\u002F",[92,79282,341],{"class":51282},[92,79284,51289],{"class":102},[92,79286,79287,79289,79291],{"class":94,"line":16835},[92,79288,52399],{"class":102},[92,79290,51593],{"class":51282},[92,79292,51289],{"class":102},[92,79294,79295,79297,79299,79301,79303,79305],{"class":94,"line":16849},[92,79296,52126],{"class":102},[92,79298,51593],{"class":51282},[92,79300,53468],{"class":1942},[92,79302,148],{"class":102},[92,79304,62590],{"class":207},[92,79306,51289],{"class":102},[92,79308,79309],{"class":94,"line":16861},[92,79310,79311],{"class":161},"    \u003C!-- \u003Cdiv class=\"item\">\n",[92,79313,79314],{"class":94,"line":16866},[92,79315,79316],{"class":161},"      \u003Cimg src=\"\" alt=\"\">\n",[92,79318,79319],{"class":94,"line":16879},[92,79320,79321],{"class":161},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[92,79323,79324],{"class":94,"line":16884},[92,79325,79326],{"class":161},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[92,79328,79329],{"class":94,"line":16889},[92,79330,79331],{"class":161},"    \u003C\u002Fdiv> -->\n",[92,79333,79334,79336,79338],{"class":94,"line":16894},[92,79335,52399],{"class":102},[92,79337,51593],{"class":51282},[92,79339,51289],{"class":102},[92,79341,79342,79344,79346],{"class":94,"line":16907},[92,79343,52126],{"class":102},[92,79345,51795],{"class":51282},[92,79347,51289],{"class":102},[92,79349,79350],{"class":94,"line":16912},[92,79351,79352],{"class":161},"    \u002F\u002F 2. 初始化数据\n",[92,79354,79355,79357,79360,79362],{"class":94,"line":32615},[92,79356,11201],{"class":98},[92,79358,79359],{"class":151}," goodsList",[92,79361,13544],{"class":98},[92,79363,55429],{"class":102},[92,79365,79366],{"class":94,"line":32621},[92,79367,79368],{"class":102},"      {\n",[92,79370,79371,79374,79377],{"class":94,"line":32627},[92,79372,79373],{"class":102},"        id: ",[92,79375,79376],{"class":207},"'4001172'",[92,79378,31448],{"class":102},[92,79380,79381,79384,79387],{"class":94,"line":32633},[92,79382,79383],{"class":102},"        name: ",[92,79385,79386],{"class":207},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[92,79388,31448],{"class":102},[92,79390,79391,79394,79397],{"class":94,"line":32639},[92,79392,79393],{"class":102},"        price: ",[92,79395,79396],{"class":207},"'289.00'",[92,79398,31448],{"class":102},[92,79400,79401,79404,79407],{"class":94,"line":32650},[92,79402,79403],{"class":102},"        picture: ",[92,79405,79406],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[92,79408,31448],{"class":102},[92,79410,79411],{"class":94,"line":32656},[92,79412,77874],{"class":102},[92,79414,79415],{"class":94,"line":32676},[92,79416,79368],{"class":102},[92,79418,79419,79421,79424],{"class":94,"line":32682},[92,79420,79373],{"class":102},[92,79422,79423],{"class":207},"'4001594'",[92,79425,31448],{"class":102},[92,79427,79428,79430,79433],{"class":94,"line":32693},[92,79429,79383],{"class":102},[92,79431,79432],{"class":207},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[92,79434,31448],{"class":102},[92,79436,79437,79439,79442],{"class":94,"line":32699},[92,79438,79393],{"class":102},[92,79440,79441],{"class":207},"'288.00'",[92,79443,31448],{"class":102},[92,79445,79446,79448,79451],{"class":94,"line":32705},[92,79447,79403],{"class":102},[92,79449,79450],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[92,79452,31448],{"class":102},[92,79454,79455],{"class":94,"line":32711},[92,79456,77874],{"class":102},[92,79458,79459],{"class":94,"line":32717},[92,79460,79368],{"class":102},[92,79462,79463,79465,79468],{"class":94,"line":32723},[92,79464,79373],{"class":102},[92,79466,79467],{"class":207},"'4001009'",[92,79469,31448],{"class":102},[92,79471,79472,79474,79477],{"class":94,"line":32729},[92,79473,79383],{"class":102},[92,79475,79476],{"class":207},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[92,79478,31448],{"class":102},[92,79480,79481,79483,79486],{"class":94,"line":32735},[92,79482,79393],{"class":102},[92,79484,79485],{"class":207},"'109.00'",[92,79487,31448],{"class":102},[92,79489,79490,79492,79495],{"class":94,"line":32755},[92,79491,79403],{"class":102},[92,79493,79494],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[92,79496,31448],{"class":102},[92,79498,79499],{"class":94,"line":32761},[92,79500,77874],{"class":102},[92,79502,79503],{"class":94,"line":32777},[92,79504,79368],{"class":102},[92,79506,79507,79509,79512],{"class":94,"line":32783},[92,79508,79373],{"class":102},[92,79510,79511],{"class":207},"'4001874'",[92,79513,31448],{"class":102},[92,79515,79516,79518,79521],{"class":94,"line":32797},[92,79517,79383],{"class":102},[92,79519,79520],{"class":207},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[92,79522,31448],{"class":102},[92,79524,79525,79527,79530],{"class":94,"line":32803},[92,79526,79393],{"class":102},[92,79528,79529],{"class":207},"'488.00'",[92,79531,31448],{"class":102},[92,79533,79534,79536,79539],{"class":94,"line":32818},[92,79535,79403],{"class":102},[92,79537,79538],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[92,79540,31448],{"class":102},[92,79542,79543],{"class":94,"line":32824},[92,79544,77874],{"class":102},[92,79546,79547],{"class":94,"line":32833},[92,79548,79368],{"class":102},[92,79550,79551,79553,79556],{"class":94,"line":32839},[92,79552,79373],{"class":102},[92,79554,79555],{"class":207},"'4001649'",[92,79557,31448],{"class":102},[92,79559,79560,79562,79565],{"class":94,"line":32848},[92,79561,79383],{"class":102},[92,79563,79564],{"class":207},"'大师监制龙泉青瓷茶叶罐'",[92,79566,31448],{"class":102},[92,79568,79569,79571,79574],{"class":94,"line":32854},[92,79570,79393],{"class":102},[92,79572,79573],{"class":207},"'139.00'",[92,79575,31448],{"class":102},[92,79577,79578,79580,79583],{"class":94,"line":32860},[92,79579,79403],{"class":102},[92,79581,79582],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[92,79584,31448],{"class":102},[92,79586,79587],{"class":94,"line":32869},[92,79588,77874],{"class":102},[92,79590,79591],{"class":94,"line":32875},[92,79592,79368],{"class":102},[92,79594,79595,79597,79600],{"class":94,"line":32886},[92,79596,79373],{"class":102},[92,79598,79599],{"class":207},"'3997185'",[92,79601,31448],{"class":102},[92,79603,79604,79606,79609],{"class":94,"line":32892},[92,79605,79383],{"class":102},[92,79607,79608],{"class":207},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[92,79610,31448],{"class":102},[92,79612,79613,79615,79618],{"class":94,"line":32911},[92,79614,79393],{"class":102},[92,79616,79617],{"class":207},"'108.00'",[92,79619,31448],{"class":102},[92,79621,79622,79624,79627],{"class":94,"line":32917},[92,79623,79403],{"class":102},[92,79625,79626],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[92,79628,31448],{"class":102},[92,79630,79631],{"class":94,"line":32928},[92,79632,77874],{"class":102},[92,79634,79635],{"class":94,"line":32934},[92,79636,79368],{"class":102},[92,79638,79639,79641,79644],{"class":94,"line":32954},[92,79640,79373],{"class":102},[92,79642,79643],{"class":207},"'3997403'",[92,79645,31448],{"class":102},[92,79647,79648,79650,79653],{"class":94,"line":32970},[92,79649,79383],{"class":102},[92,79651,79652],{"class":207},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[92,79654,31448],{"class":102},[92,79656,79657,79659,79662],{"class":94,"line":32976},[92,79658,79393],{"class":102},[92,79660,79661],{"class":207},"'100.00'",[92,79663,31448],{"class":102},[92,79665,79666,79668,79671],{"class":94,"line":32990},[92,79667,79403],{"class":102},[92,79669,79670],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[92,79672,31448],{"class":102},[92,79674,79675],{"class":94,"line":32996},[92,79676,77874],{"class":102},[92,79678,79679],{"class":94,"line":33002},[92,79680,79368],{"class":102},[92,79682,79683,79685,79688],{"class":94,"line":33013},[92,79684,79373],{"class":102},[92,79686,79687],{"class":207},"'3998274'",[92,79689,31448],{"class":102},[92,79691,79692,79694,79697],{"class":94,"line":33019},[92,79693,79383],{"class":102},[92,79695,79696],{"class":207},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[92,79698,31448],{"class":102},[92,79700,79701,79703,79705],{"class":94,"line":33025},[92,79702,79393],{"class":102},[92,79704,79573],{"class":207},[92,79706,31448],{"class":102},[92,79708,79709,79711,79714],{"class":94,"line":33035},[92,79710,79403],{"class":102},[92,79712,79713],{"class":207},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[92,79715,31448],{"class":102},[92,79717,79718],{"class":94,"line":33041},[92,79719,77874],{"class":102},[92,79721,79722],{"class":94,"line":33052},[92,79723,53091],{"class":102},[92,79725,79726],{"class":94,"line":33058},[92,79727,2379],{"emptyLinePlaceholder":17},[92,79729,79730],{"class":94,"line":33068},[92,79731,79732],{"class":161},"    \u002F\u002F 1.渲染函数\n",[92,79734,79735,79737,79739,79741,79743],{"class":94,"line":33073},[92,79736,70066],{"class":98},[92,79738,70069],{"class":1942},[92,79740,103],{"class":102},[92,79742,3859],{"class":5196},[92,79744,12422],{"class":102},[92,79746,79747],{"class":94,"line":33079},[92,79748,79749],{"class":161},"      \u002F\u002F 声明空字符串\n",[92,79751,79752,79755,79758,79760],{"class":94,"line":33128},[92,79753,79754],{"class":98},"      let",[92,79756,79757],{"class":102}," str ",[92,79759,148],{"class":98},[92,79761,70086],{"class":207},[92,79763,79764],{"class":94,"line":33175},[92,79765,70091],{"class":161},[92,79767,79768,79770,79773,79775,79778,79781],{"class":94,"line":33180},[92,79769,57989],{"class":102},[92,79771,79772],{"class":1942},"forEach",[92,79774,103],{"class":102},[92,79776,79777],{"class":5196},"item",[92,79779,79780],{"class":98}," =>",[92,79782,15552],{"class":102},[92,79784,79785,79787,79790,79793,79795,79798,79800,79803,79806,79808],{"class":94,"line":33186},[92,79786,61252],{"class":98},[92,79788,79789],{"class":102}," { ",[92,79791,79792],{"class":151},"name",[92,79794,12415],{"class":102},[92,79796,79797],{"class":151},"price",[92,79799,12415],{"class":102},[92,79801,79802],{"class":151},"picture",[92,79804,79805],{"class":102}," } ",[92,79807,148],{"class":98},[92,79809,79810],{"class":102}," item\n",[92,79812,79813,79816,79818],{"class":94,"line":33205},[92,79814,79815],{"class":102},"        str ",[92,79817,9457],{"class":98},[92,79819,70150],{"class":207},[92,79821,79822],{"class":94,"line":33211},[92,79823,79824],{"class":207},"          \u003Cdiv class=\"item\">\n",[92,79826,79827,79830,79832],{"class":94,"line":33231},[92,79828,79829],{"class":207},"            \u003Cimg src=\"${",[92,79831,79802],{"class":102},[92,79833,79834],{"class":207},"}\" alt=\"\">\n",[92,79836,79837,79840,79842],{"class":94,"line":33237},[92,79838,79839],{"class":207},"            \u003Cp class=\"name\">${",[92,79841,79792],{"class":102},[92,79843,79844],{"class":207},"}\u003C\u002Fp>\n",[92,79846,79847,79850,79852],{"class":94,"line":33243},[92,79848,79849],{"class":207},"            \u003Cp class=\"price\">${",[92,79851,79797],{"class":102},[92,79853,79844],{"class":207},[92,79855,79856],{"class":94,"line":33253},[92,79857,79858],{"class":207},"          \u003C\u002Fdiv>\n",[92,79860,79861],{"class":94,"line":33258},[92,79862,79863],{"class":207},"        `\n",[92,79865,79866],{"class":94,"line":33264},[92,79867,64797],{"class":102},[92,79869,79870],{"class":94,"line":33280},[92,79871,79872],{"class":161},"      \u002F\u002F 追加给List\n",[92,79874,79875,79877,79879,79881,79884,79886,79888],{"class":94,"line":33325},[92,79876,55753],{"class":102},[92,79878,54381],{"class":1942},[92,79880,103],{"class":102},[92,79882,79883],{"class":207},"'.list'",[92,79885,74231],{"class":102},[92,79887,148],{"class":98},[92,79889,73967],{"class":102},[92,79891,79892],{"class":94,"line":33331},[92,79893,2166],{"class":102},[92,79895,79896],{"class":94,"line":33337},[92,79897,79898],{"class":161},"    \u002F\u002F 页面一打开就需要渲染\n",[92,79900,79901,79904],{"class":94,"line":33343},[92,79902,79903],{"class":1942},"    render",[92,79905,79906],{"class":102},"(goodsList)\n",[92,79908,79909],{"class":94,"line":33354},[92,79910,79911],{"class":161},"    \u002F\u002F 2.过滤筛选\n",[92,79913,79914,79916,79918,79920,79923,79925,79927,79929,79931,79933,79935,79937],{"class":94,"line":33360},[92,79915,52389],{"class":102},[92,79917,54381],{"class":1942},[92,79919,103],{"class":102},[92,79921,79922],{"class":207},"'.filter'",[92,79924,30808],{"class":102},[92,79926,57795],{"class":1942},[92,79928,103],{"class":102},[92,79930,57800],{"class":207},[92,79932,12415],{"class":102},[92,79934,177],{"class":5196},[92,79936,79780],{"class":98},[92,79938,15552],{"class":102},[92,79940,79941],{"class":94,"line":33366},[92,79942,79943],{"class":161},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[92,79945,79946,79948,79950,79953,79955,79957,79959,79961],{"class":94,"line":33372},[92,79947,58210],{"class":98},[92,79949,79789],{"class":102},[92,79951,79952],{"class":151},"tagName",[92,79954,12415],{"class":102},[92,79956,31519],{"class":151},[92,79958,79805],{"class":102},[92,79960,148],{"class":98},[92,79962,79963],{"class":102}," e.target\n",[92,79965,79966],{"class":94,"line":33390},[92,79967,79968],{"class":161},"      \u002F\u002F 判断\n",[92,79970,79971,79973,79975,79977,79979],{"class":94,"line":33404},[92,79972,54462],{"class":98},[92,79974,67016],{"class":102},[92,79976,54468],{"class":98},[92,79978,68238],{"class":207},[92,79980,12422],{"class":102},[92,79982,79983],{"class":94,"line":33413},[92,79984,79985],{"class":161},"        \u002F\u002F console.log(11)\n",[92,79987,79988],{"class":94,"line":33422},[92,79989,79990],{"class":161},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[92,79992,79993],{"class":94,"line":33431},[92,79994,79995],{"class":161},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[92,79997,79998,80000,80002,80004],{"class":94,"line":33440},[92,79999,51812],{"class":98},[92,80001,51815],{"class":102},[92,80003,148],{"class":98},[92,80005,80006],{"class":102}," goodsList\n",[92,80008,80009,80011,80014,80016,80019],{"class":94,"line":33446},[92,80010,2476],{"class":98},[92,80012,80013],{"class":102}," (dataset.index ",[92,80015,54468],{"class":98},[92,80017,80018],{"class":207}," '1'",[92,80020,12422],{"class":102},[92,80022,80023,80026,80028,80031,80034,80036,80038,80040,80043,80045,80047,80050,80052,80054,80056],{"class":94,"line":33452},[92,80024,80025],{"class":102},"          arr ",[92,80027,148],{"class":98},[92,80029,80030],{"class":102}," goodsList.",[92,80032,80033],{"class":1942},"filter",[92,80035,103],{"class":102},[92,80037,79777],{"class":5196},[92,80039,79780],{"class":98},[92,80041,80042],{"class":102}," item.price ",[92,80044,1689],{"class":98},[92,80046,4072],{"class":151},[92,80048,80049],{"class":98}," &&",[92,80051,80042],{"class":102},[92,80053,1567],{"class":98},[92,80055,5734],{"class":151},[92,80057,109],{"class":102},[92,80059,80060,80063,80065,80067,80069,80071,80074],{"class":94,"line":33460},[92,80061,80062],{"class":102},"        } ",[92,80064,1680],{"class":98},[92,80066,1683],{"class":98},[92,80068,80013],{"class":102},[92,80070,54468],{"class":98},[92,80072,80073],{"class":207}," '2'",[92,80075,12422],{"class":102},[92,80077,80078,80080,80082,80084,80086,80088,80090,80092,80094,80096,80098,80100,80102,80104,80107],{"class":94,"line":33465},[92,80079,80025],{"class":102},[92,80081,148],{"class":98},[92,80083,80030],{"class":102},[92,80085,80033],{"class":1942},[92,80087,103],{"class":102},[92,80089,79777],{"class":5196},[92,80091,79780],{"class":98},[92,80093,80042],{"class":102},[92,80095,1689],{"class":98},[92,80097,5734],{"class":151},[92,80099,80049],{"class":98},[92,80101,80042],{"class":102},[92,80103,1567],{"class":98},[92,80105,80106],{"class":151}," 300",[92,80108,109],{"class":102},[92,80110,80111,80113,80115,80117,80119,80121,80124],{"class":94,"line":33471},[92,80112,80062],{"class":102},[92,80114,1680],{"class":98},[92,80116,1683],{"class":98},[92,80118,80013],{"class":102},[92,80120,54468],{"class":98},[92,80122,80123],{"class":207}," '3'",[92,80125,12422],{"class":102},[92,80127,80128,80130,80132,80134,80136,80138,80140,80142,80144,80146,80148],{"class":94,"line":33482},[92,80129,80025],{"class":102},[92,80131,148],{"class":98},[92,80133,80030],{"class":102},[92,80135,80033],{"class":1942},[92,80137,103],{"class":102},[92,80139,79777],{"class":5196},[92,80141,79780],{"class":98},[92,80143,80042],{"class":102},[92,80145,1689],{"class":98},[92,80147,80106],{"class":151},[92,80149,109],{"class":102},[92,80151,80152],{"class":94,"line":33488},[92,80153,2508],{"class":102},[92,80155,80156],{"class":94,"line":33508},[92,80157,80158],{"class":161},"        \u002F\u002F 渲染函数\n",[92,80160,80161,80163],{"class":94,"line":33514},[92,80162,70390],{"class":1942},[92,80164,52394],{"class":102},[92,80166,80167],{"class":94,"line":33520},[92,80168,52380],{"class":102},[92,80170,80171],{"class":94,"line":33526},[92,80172,2379],{"emptyLinePlaceholder":17},[92,80174,80175],{"class":94,"line":33543},[92,80176,33443],{"class":102},[92,80178,80179,80181,80183],{"class":94,"line":33549},[92,80180,52399],{"class":102},[92,80182,51795],{"class":51282},[92,80184,51289],{"class":102},[92,80186,80187,80189,80191],{"class":94,"line":33555},[92,80188,51767],{"class":102},[92,80190,51782],{"class":51282},[92,80192,51289],{"class":102},[92,80194,80195],{"class":94,"line":33561},[92,80196,2379],{"emptyLinePlaceholder":17},[92,80198,80199,80201,80203],{"class":94,"line":33567},[92,80200,51767],{"class":102},[92,80202,50617],{"class":51282},[92,80204,51289],{"class":102},[33,80206,80208],{"id":80207},"_410-深入了解对象","4.10 深入了解对象",[63,80210,80212],{"id":80211},"_4101-创建对象","4.10.1 创建对象",[38,80214,80215],{},[1441,80216],{"alt":10,"src":80217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[38,80219,80220],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[63,80222,80224],{"id":80223},"_4102-构造函数","4.10.2 构造函数",[38,80226,80227,80230],{},[252,80228,80229],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[38,80232,80233,80236],{},[252,80234,80235],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[83,80238,80240],{"className":50615,"code":80239,"language":50617,"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,80241,80242,80250,80255,80276,80289,80301,80313,80317,80322,80349,80354,80381],{"__ignoreMap":10},[92,80243,80244,80246,80248],{"class":94,"line":95},[92,80245,1013],{"class":102},[92,80247,51795],{"class":51282},[92,80249,51289],{"class":102},[92,80251,80252],{"class":94,"line":11},[92,80253,80254],{"class":161},"\u002F\u002F例：\n",[92,80256,80257,80259,80262,80264,80266,80268,80270,80272,80274],{"class":94,"line":1158},[92,80258,54431],{"class":98},[92,80260,80261],{"class":1942}," Pig",[92,80263,103],{"class":102},[92,80265,79792],{"class":5196},[92,80267,481],{"class":102},[92,80269,70203],{"class":5196},[92,80271,481],{"class":102},[92,80273,70220],{"class":5196},[92,80275,12422],{"class":102},[92,80277,80278,80281,80284,80286],{"class":94,"line":1173},[92,80279,80280],{"class":151},"    this",[92,80282,80283],{"class":102},".name",[92,80285,148],{"class":98},[92,80287,80288],{"class":102},"name\n",[92,80290,80291,80293,80296,80298],{"class":94,"line":1179},[92,80292,80280],{"class":151},[92,80294,80295],{"class":102},".age",[92,80297,148],{"class":98},[92,80299,80300],{"class":102},"age\n",[92,80302,80303,80305,80308,80310],{"class":94,"line":1193},[92,80304,80280],{"class":151},[92,80306,80307],{"class":102},".gender",[92,80309,148],{"class":98},[92,80311,80312],{"class":102},"gender    \n",[92,80314,80315],{"class":94,"line":1199},[92,80316,1544],{"class":102},[92,80318,80319],{"class":94,"line":1290},[92,80320,80321],{"class":161},"\u002F\u002F创建佩奇对象\n",[92,80323,80324,80326,80329,80331,80333,80335,80338,80340,80342,80344,80347],{"class":94,"line":1296},[92,80325,6772],{"class":98},[92,80327,80328],{"class":151}," Peppa",[92,80330,11697],{"class":98},[92,80332,80261],{"class":1942},[92,80334,103],{"class":102},[92,80336,80337],{"class":207},"'佩奇'",[92,80339,481],{"class":102},[92,80341,447],{"class":151},[92,80343,481],{"class":102},[92,80345,80346],{"class":207},"'女'",[92,80348,109],{"class":102},[92,80350,80351],{"class":94,"line":1308},[92,80352,80353],{"class":161},"\u002F\u002F创建乔治对象\n",[92,80355,80356,80358,80361,80363,80365,80367,80370,80372,80374,80376,80379],{"class":94,"line":1591},[92,80357,6772],{"class":98},[92,80359,80360],{"class":151}," George",[92,80362,11697],{"class":98},[92,80364,80261],{"class":1942},[92,80366,103],{"class":102},[92,80368,80369],{"class":207},"'乔治'",[92,80371,481],{"class":102},[92,80373,174],{"class":151},[92,80375,481],{"class":102},[92,80377,80378],{"class":207},"'男'",[92,80380,109],{"class":102},[92,80382,80383,80385,80387],{"class":94,"line":1596},[92,80384,51767],{"class":102},[92,80386,51795],{"class":51282},[92,80388,51289],{"class":102},[38,80390,80391],{},[1441,80392],{"alt":10,"src":80393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[38,80395,80396],{},[1441,80397],{"alt":10,"src":80398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[38,80400,80401],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[38,80403,80404],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[38,80406,80407],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[38,80409,80410],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[38,80412,80413],{},"这里用等号是因为：对象.属性=值",[38,80415,80416],{},"①利用对象字面量创建对象",[38,80418,80419],{},"const o={",[38,80421,80422],{},"name:'pink'",[38,80424,80425],{},"} ②利用new Object创建对象",[38,80427,80428],{},"const o=new Object({name:'pink'})",[38,80430,80431],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[38,80433,80434],{},"构造函数创建对象的执行过程：",[38,80436,80437],{},[1441,80438],{"alt":10,"src":80439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[63,80441,80443],{"id":80442},"_4103-实例成员","4.10.3 实例成员",[38,80445,80446],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[46,80448,80449,80452,80455],{},[49,80450,80451],{},"实例对象的属性和方法即为实例成员",[49,80453,80454],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[49,80456,80457],{},"构造函数创建的实例对象彼此独立互不影响",[63,80459,80461],{"id":80460},"_4104-静态成员","4.10.4 静态成员",[38,80463,80464],{},[1441,80465],{"alt":10,"src":80466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[38,80468,80469],{},"静态成员有Date.now() Math.PI Math.random()",[38,80471,80472],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[38,80474,80475],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[38,80477,80478],{},"function Pig(name) n {",[38,80480,80481],{},"this.name=name",[38,80483,1049],{},[38,80485,80486],{},"Pig.eyes=2",[38,80488,80489],{},"Pig.sayHai=function () { console.log(this) }",[38,80491,80492],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[38,80494,80495],{},"console.log(Pig.eyes) \u002F\u002F2",[38,80497,11312],{},[46,80499,80500,80503,80506,80509,80512],{},[49,80501,80502],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[49,80504,80505],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[49,80507,80508],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[49,80510,80511],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[49,80513,80514],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[38,80516,80517],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[63,80519,80521],{"id":80520},"_4105-内置构造函数","4.10.5 内置构造函数",[38,80523,80524],{},"内置构造函数包含：",[38,80526,80527],{},[1441,80528],{"alt":10,"src":80529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[38,80531,80532],{},[1441,80533],{"alt":10,"src":80534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[38,80536,80537],{},"这些基本数据类型，js对他们进行了包装",[51795,80539,80540],{},"\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,80542,80544],{"id":80543},"_41051-object","4.10.5.1 Object",[38,80546,80547],{},"Object 是内置的构造函数，用于创建普通对象",[38,80549,80550],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[83,80552,80554],{"className":50615,"code":80553,"language":50617,"meta":10,"style":10},"const user=new Object({name:'小明',age:15})\n",[89,80555,80556],{"__ignoreMap":10},[92,80557,80558],{"class":94,"line":95},[92,80559,80553],{"class":102},[38,80561,80562],{},"三个常用的静态方法：",[22890,80564,80566],{"id":80565},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[38,80568,80569],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[38,80571,80572],{},[1441,80573],{"alt":10,"src":80574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[38,80576,80577],{},[1441,80578],{"alt":10,"src":80579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[83,80581,80583],{"className":53049,"code":80582,"language":53051,"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,80584,80585,80593,80601,80606,80611,80616,80621,80626,80631,80639],{"__ignoreMap":10},[92,80586,80587,80589,80591],{"class":94,"line":95},[92,80588,1013],{"class":102},[92,80590,51782],{"class":51282},[92,80592,51289],{"class":102},[92,80594,80595,80597,80599],{"class":94,"line":11},[92,80596,52126],{"class":102},[92,80598,51795],{"class":51282},[92,80600,51289],{"class":102},[92,80602,80603],{"class":94,"line":1158},[92,80604,80605],{"class":102},"    const o = { name: 'pink', age: 6 }\n",[92,80607,80608],{"class":94,"line":1173},[92,80609,80610],{"class":102},"    \u002F\u002F 获得所有属性名\n",[92,80612,80613],{"class":94,"line":1179},[92,80614,80615],{"class":102},"    const arr = Object.keys(o)\n",[92,80617,80618],{"class":94,"line":1193},[92,80619,80620],{"class":102},"    console.log(arr)\n",[92,80622,80623],{"class":94,"line":1199},[92,80624,80625],{"class":102},"    \u002F\u002F 获得所有属性值\n",[92,80627,80628],{"class":94,"line":1290},[92,80629,80630],{"class":102},"    console.log(Object.values(o))\n",[92,80632,80633,80635,80637],{"class":94,"line":1296},[92,80634,52399],{"class":102},[92,80636,51795],{"class":51282},[92,80638,51289],{"class":102},[92,80640,80641,80643,80645],{"class":94,"line":1308},[92,80642,51767],{"class":102},[92,80644,51782],{"class":51282},[92,80646,51289],{"class":102},[22890,80648,80650],{"id":80649},"_410512-object-assign","4.10.5.1.2 Object. assign",[38,80652,80653],{},"Object.assign(oo,o)",[38,80655,80656],{},"后的东西添加给前 是追加",[38,80658,80659],{},[1441,80660],{"alt":10,"src":80661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[38,80663,80664],{},[1441,80665],{"alt":10,"src":80666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[83,80668,80670],{"className":53049,"code":80669,"language":53051,"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,80671,80672,80680,80688,80692,80696,80700,80704,80708,80712,80717,80722,80727,80732,80737,80745],{"__ignoreMap":10},[92,80673,80674,80676,80678],{"class":94,"line":95},[92,80675,1013],{"class":102},[92,80677,51782],{"class":51282},[92,80679,51289],{"class":102},[92,80681,80682,80684,80686],{"class":94,"line":11},[92,80683,52126],{"class":102},[92,80685,51795],{"class":51282},[92,80687,51289],{"class":102},[92,80689,80690],{"class":94,"line":1158},[92,80691,80605],{"class":102},[92,80693,80694],{"class":94,"line":1173},[92,80695,80610],{"class":102},[92,80697,80698],{"class":94,"line":1179},[92,80699,80615],{"class":102},[92,80701,80702],{"class":94,"line":1193},[92,80703,80620],{"class":102},[92,80705,80706],{"class":94,"line":1199},[92,80707,80625],{"class":102},[92,80709,80710],{"class":94,"line":1290},[92,80711,80630],{"class":102},[92,80713,80714],{"class":94,"line":1296},[92,80715,80716],{"class":102},"    const oo = {}\n",[92,80718,80719],{"class":94,"line":1308},[92,80720,80721],{"class":102},"    Object.assign(oo, o)\n",[92,80723,80724],{"class":94,"line":1591},[92,80725,80726],{"class":102},"    console.log(oo)\n",[92,80728,80729],{"class":94,"line":1596},[92,80730,80731],{"class":102},"    Object.assign(o, { gender: '女' })\n",[92,80733,80734],{"class":94,"line":1602},[92,80735,80736],{"class":102},"    console.log(o)\n",[92,80738,80739,80741,80743],{"class":94,"line":1607},[92,80740,52399],{"class":102},[92,80742,51795],{"class":51282},[92,80744,51289],{"class":102},[92,80746,80747,80749,80751],{"class":94,"line":1621},[92,80748,51767],{"class":102},[92,80750,51782],{"class":51282},[92,80752,51289],{"class":102},[38,80754,80755],{},[1441,80756],{"alt":10,"src":80757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21978,80759,80761],{"id":80760},"_41052-array","4.10.5.2 Array",[38,80763,80764],{},"Array 是内置的构造函数，用于创建数组",[38,80766,80767],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[83,80769,80771],{"className":50615,"code":80770,"language":50617,"meta":10,"style":10},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[89,80772,80773,80778],{"__ignoreMap":10},[92,80774,80775],{"class":94,"line":95},[92,80776,80777],{"class":102},"const arr=new Array(3,5)\n",[92,80779,80780],{"class":94,"line":11},[92,80781,80782],{"class":102},"console.log(arr)  \u002F\u002F[3,5]\n",[38,80784,80785],{},"Array的实例方法，这个方法是实例成员",[38,80787,80788],{},[1441,80789],{"alt":10,"src":80790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22890,80792,80794],{"id":80793},"_410521-reduce","4.10.5.2.1 reduce",[38,80796,80797],{},[1441,80798],{"alt":10,"src":80799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[83,80801,80803],{"className":53049,"code":80802,"language":53051,"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,80804,80805,80813,80821,80826,80831,80836,80841,80845,80850,80855,80860,80864,80869,80874,80878,80883,80888,80893,80901],{"__ignoreMap":10},[92,80806,80807,80809,80811],{"class":94,"line":95},[92,80808,1013],{"class":102},[92,80810,51782],{"class":51282},[92,80812,51289],{"class":102},[92,80814,80815,80817,80819],{"class":94,"line":11},[92,80816,52126],{"class":102},[92,80818,51795],{"class":51282},[92,80820,51289],{"class":102},[92,80822,80823],{"class":94,"line":1158},[92,80824,80825],{"class":102},"    const arr = [1, 5, 8]\n",[92,80827,80828],{"class":94,"line":1173},[92,80829,80830],{"class":102},"    \u002F\u002F 1.没有初始值\n",[92,80832,80833],{"class":94,"line":1179},[92,80834,80835],{"class":102},"    const total = arr.reduce(function (prev, current) {\n",[92,80837,80838],{"class":94,"line":1193},[92,80839,80840],{"class":102},"      return prev + current\n",[92,80842,80843],{"class":94,"line":1199},[92,80844,33443],{"class":102},[92,80846,80847],{"class":94,"line":1290},[92,80848,80849],{"class":102},"    console.log(total)   \u002F\u002F14\n",[92,80851,80852],{"class":94,"line":1296},[92,80853,80854],{"class":102},"    \u002F\u002F 2.有初始值\n",[92,80856,80857],{"class":94,"line":1308},[92,80858,80859],{"class":102},"    const total1 = arr.reduce(function (prev, current) {\n",[92,80861,80862],{"class":94,"line":1591},[92,80863,80840],{"class":102},[92,80865,80866],{"class":94,"line":1596},[92,80867,80868],{"class":102},"    }, 10)\n",[92,80870,80871],{"class":94,"line":1602},[92,80872,80873],{"class":102},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[92,80875,80876],{"class":94,"line":1607},[92,80877,2379],{"emptyLinePlaceholder":17},[92,80879,80880],{"class":94,"line":1621},[92,80881,80882],{"class":102},"    \u002F\u002F 3.箭头函数写法\n",[92,80884,80885],{"class":94,"line":1626},[92,80886,80887],{"class":102},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[92,80889,80890],{"class":94,"line":1632},[92,80891,80892],{"class":102},"    console.log(total2)   \u002F\u002F24\n",[92,80894,80895,80897,80899],{"class":94,"line":1653},[92,80896,52399],{"class":102},[92,80898,51795],{"class":51282},[92,80900,51289],{"class":102},[92,80902,80903,80905,80907],{"class":94,"line":1658},[92,80904,51767],{"class":102},[92,80906,51782],{"class":51282},[92,80908,51289],{"class":102},[38,80910,80911],{},"执行过程：",[46,80913,80914,80917,80920],{},[49,80915,80916],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[49,80918,80919],{},"每一次循环，把返回值给作为下一次循环的上一次值",[49,80921,80922],{},"如果有起始值，则起始值作为上一次值",[83,80924,80926],{"className":53049,"code":80925,"language":53051,"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,80927,80928,80936,80944,80948,80952,80956,80960,80964,80968,80973,80978,80983,80988,80993,80997,81001,81005,81009,81013,81017,81022,81026,81031,81035,81040,81045,81049,81053,81057,81065],{"__ignoreMap":10},[92,80929,80930,80932,80934],{"class":94,"line":95},[92,80931,1013],{"class":102},[92,80933,51782],{"class":51282},[92,80935,51289],{"class":102},[92,80937,80938,80940,80942],{"class":94,"line":11},[92,80939,52126],{"class":102},[92,80941,51795],{"class":51282},[92,80943,51289],{"class":102},[92,80945,80946],{"class":94,"line":1158},[92,80947,80825],{"class":102},[92,80949,80950],{"class":94,"line":1173},[92,80951,80830],{"class":102},[92,80953,80954],{"class":94,"line":1179},[92,80955,80835],{"class":102},[92,80957,80958],{"class":94,"line":1193},[92,80959,80840],{"class":102},[92,80961,80962],{"class":94,"line":1199},[92,80963,33443],{"class":102},[92,80965,80966],{"class":94,"line":1290},[92,80967,80849],{"class":102},[92,80969,80970],{"class":94,"line":1296},[92,80971,80972],{"class":102},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[92,80974,80975],{"class":94,"line":1308},[92,80976,80977],{"class":102},"    \u002F\u002F     1              5                    6\n",[92,80979,80980],{"class":94,"line":1591},[92,80981,80982],{"class":102},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[92,80984,80985],{"class":94,"line":1596},[92,80986,80987],{"class":102},"    \u002F\u002F     6              8                    14\n",[92,80989,80990],{"class":94,"line":1602},[92,80991,80992],{"class":102},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[92,80994,80995],{"class":94,"line":1607},[92,80996,80854],{"class":102},[92,80998,80999],{"class":94,"line":1621},[92,81000,80859],{"class":102},[92,81002,81003],{"class":94,"line":1626},[92,81004,80840],{"class":102},[92,81006,81007],{"class":94,"line":1632},[92,81008,80868],{"class":102},[92,81010,81011],{"class":94,"line":1653},[92,81012,80873],{"class":102},[92,81014,81015],{"class":94,"line":1658},[92,81016,80972],{"class":102},[92,81018,81019],{"class":94,"line":1672},[92,81020,81021],{"class":102},"    \u002F\u002F     10             1                     11\n",[92,81023,81024],{"class":94,"line":1677},[92,81025,80982],{"class":102},[92,81027,81028],{"class":94,"line":1706},[92,81029,81030],{"class":102},"    \u002F\u002F     11             5                    16\n",[92,81032,81033],{"class":94,"line":1711},[92,81034,80982],{"class":102},[92,81036,81037],{"class":94,"line":1728},[92,81038,81039],{"class":102},"    \u002F\u002F     16             8                    24\n",[92,81041,81042],{"class":94,"line":1733},[92,81043,81044],{"class":102},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[92,81046,81047],{"class":94,"line":1738},[92,81048,80882],{"class":102},[92,81050,81051],{"class":94,"line":1743},[92,81052,80887],{"class":102},[92,81054,81055],{"class":94,"line":1757},[92,81056,80892],{"class":102},[92,81058,81059,81061,81063],{"class":94,"line":1762},[92,81060,52399],{"class":102},[92,81062,51795],{"class":51282},[92,81064,51289],{"class":102},[92,81066,81067,81069,81071],{"class":94,"line":2556},[92,81068,51767],{"class":102},[92,81070,51782],{"class":51282},[92,81072,51289],{"class":102},[22890,81074,81076],{"id":81075},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[38,81078,81079],{},[1441,81080],{"alt":10,"src":81081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[83,81083,81085],{"className":53049,"code":81084,"language":53051,"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,81086,81087,81095,81103,81108,81113,81118,81123,81127,81132,81137,81142,81147,81152,81157,81161,81166,81170,81175,81183],{"__ignoreMap":10},[92,81088,81089,81091,81093],{"class":94,"line":95},[92,81090,1013],{"class":102},[92,81092,51782],{"class":51282},[92,81094,51289],{"class":102},[92,81096,81097,81099,81101],{"class":94,"line":11},[92,81098,52126],{"class":102},[92,81100,51795],{"class":51282},[92,81102,51289],{"class":102},[92,81104,81105],{"class":94,"line":1158},[92,81106,81107],{"class":102},"    const arr = [\n",[92,81109,81110],{"class":94,"line":1173},[92,81111,81112],{"class":102},"      { name: '张三', salary: 10000 },\n",[92,81114,81115],{"class":94,"line":1179},[92,81116,81117],{"class":102},"      { name: '李四', salary: 10000 },\n",[92,81119,81120],{"class":94,"line":1193},[92,81121,81122],{"class":102},"      { name: '王五', salary: 10000 }\n",[92,81124,81125],{"class":94,"line":1199},[92,81126,53091],{"class":102},[92,81128,81129],{"class":94,"line":1290},[92,81130,81131],{"class":102},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[92,81133,81134],{"class":94,"line":1296},[92,81135,81136],{"class":102},"    \u002F\u002F prev是累计值\n",[92,81138,81139],{"class":94,"line":1308},[92,81140,81141],{"class":102},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[92,81143,81144],{"class":94,"line":1591},[92,81145,81146],{"class":102},"    console.log(total)\n",[92,81148,81149],{"class":94,"line":1596},[92,81150,81151],{"class":102},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[92,81153,81154],{"class":94,"line":1602},[92,81155,81156],{"class":102},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[92,81158,81159],{"class":94,"line":1607},[92,81160,81151],{"class":102},[92,81162,81163],{"class":94,"line":1621},[92,81164,81165],{"class":102},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[92,81167,81168],{"class":94,"line":1626},[92,81169,81151],{"class":102},[92,81171,81172],{"class":94,"line":1632},[92,81173,81174],{"class":102},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[92,81176,81177,81179,81181],{"class":94,"line":1653},[92,81178,52399],{"class":102},[92,81180,51795],{"class":51282},[92,81182,51289],{"class":102},[92,81184,81185,81187,81189],{"class":94,"line":1658},[92,81186,51767],{"class":102},[92,81188,51782],{"class":51282},[92,81190,51289],{"class":102},[22890,81192,81194],{"id":81193},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[38,81196,81197],{},[1441,81198],{"alt":10,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[38,81201,81202],{},[1441,81203],{"alt":10,"src":81204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[46,81206,81207],{},[49,81208,81209],{},"find()",[38,81211,81212],{},"循环查找，找到第一个就ok",[38,81214,81215],{},[341,81216,81219],{"href":81217,"rel":81218},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23846],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[83,81221,81223],{"className":50615,"code":81222,"language":50617,"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,81224,81225,81230,81235],{"__ignoreMap":10},[92,81226,81227],{"class":94,"line":95},[92,81228,81229],{"class":102},"const array1 = [5, 12, 8, 130, 44]\n",[92,81231,81232],{"class":94,"line":11},[92,81233,81234],{"class":102},"const found = array1.find((element) => element > 10)\n",[92,81236,81237],{"class":94,"line":1158},[92,81238,81239],{"class":102},"console.log(found)  \u002F\u002F12\n",[38,81241,81242,81244,81245,81250,81251,81254,81255,81257,81258,81263,81264,81266,81267,81269,81270,81272,81273],{},[89,81243,81209],{}," 方法是一个",[341,81246,81249],{"href":81247,"rel":81248},"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",[23846],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[89,81252,81253],{},"callbackFn"," 函数，直到 ",[89,81256,81253],{}," 返回一个",[341,81259,81262],{"href":81260,"rel":81261},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23846],"真值","。然后 ",[89,81265,81209],{}," 返回该元素并停止迭代数组。如果 ",[89,81268,81253],{}," 从未返回真值，则 ",[89,81271,81209],{}," 返回 ",[89,81274,81275],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[83,81277,81279],{"className":53049,"code":81278,"language":53051,"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,81280,81281,81289,81297,81302,81307,81312,81316,81321,81326,81330,81335,81340,81344,81348,81353,81358,81362,81366,81371,81376,81381,81386,81391,81395,81400,81405,81410,81415,81419,81424,81432],{"__ignoreMap":10},[92,81282,81283,81285,81287],{"class":94,"line":95},[92,81284,1013],{"class":102},[92,81286,51782],{"class":51282},[92,81288,51289],{"class":102},[92,81290,81291,81293,81295],{"class":94,"line":11},[92,81292,52126],{"class":102},[92,81294,51795],{"class":51282},[92,81296,51289],{"class":102},[92,81298,81299],{"class":94,"line":1158},[92,81300,81301],{"class":102},"    const arr = ['red', 'blue', 'green']\n",[92,81303,81304],{"class":94,"line":1173},[92,81305,81306],{"class":102},"    const found = arr.find(item => item === 'pink')\n",[92,81308,81309],{"class":94,"line":1179},[92,81310,81311],{"class":102},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[92,81313,81314],{"class":94,"line":1193},[92,81315,2379],{"emptyLinePlaceholder":17},[92,81317,81318],{"class":94,"line":1199},[92,81319,81320],{"class":102},"    \u002F\u002F 使用场景，用于查找数据\n",[92,81322,81323],{"class":94,"line":1290},[92,81324,81325],{"class":102},"    const arr1 = [\n",[92,81327,81328],{"class":94,"line":1296},[92,81329,79368],{"class":102},[92,81331,81332],{"class":94,"line":1308},[92,81333,81334],{"class":102},"        name: '小米',\n",[92,81336,81337],{"class":94,"line":1591},[92,81338,81339],{"class":102},"        price: 1999\n",[92,81341,81342],{"class":94,"line":1596},[92,81343,77874],{"class":102},[92,81345,81346],{"class":94,"line":1602},[92,81347,79368],{"class":102},[92,81349,81350],{"class":94,"line":1607},[92,81351,81352],{"class":102},"        name: '华为',\n",[92,81354,81355],{"class":94,"line":1621},[92,81356,81357],{"class":102},"        price: 3999\n",[92,81359,81360],{"class":94,"line":1626},[92,81361,52380],{"class":102},[92,81363,81364],{"class":94,"line":1632},[92,81365,53091],{"class":102},[92,81367,81368],{"class":94,"line":1653},[92,81369,81370],{"class":102},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[92,81372,81373],{"class":94,"line":1658},[92,81374,81375],{"class":102},"    \u002F\u002F const found1 = arr1.find(item => {\n",[92,81377,81378],{"class":94,"line":1672},[92,81379,81380],{"class":102},"    \u002F\u002F   if (item.name === '小米') {\n",[92,81382,81383],{"class":94,"line":1677},[92,81384,81385],{"class":102},"    \u002F\u002F     return item\n",[92,81387,81388],{"class":94,"line":1706},[92,81389,81390],{"class":102},"    \u002F\u002F   }\n",[92,81392,81393],{"class":94,"line":1711},[92,81394,63272],{"class":102},[92,81396,81397],{"class":94,"line":1728},[92,81398,81399],{"class":102},"    \u002F\u002F 另一种写法\n",[92,81401,81402],{"class":94,"line":1733},[92,81403,81404],{"class":102},"    const found1 = arr1.find(item => {\n",[92,81406,81407],{"class":94,"line":1738},[92,81408,81409],{"class":102},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[92,81411,81412],{"class":94,"line":1743},[92,81413,81414],{"class":102},"      return item.name = '小米'\n",[92,81416,81417],{"class":94,"line":1757},[92,81418,33443],{"class":102},[92,81420,81421],{"class":94,"line":1762},[92,81422,81423],{"class":102},"    console.log(found1)\n",[92,81425,81426,81428,81430],{"class":94,"line":2556},[92,81427,52399],{"class":102},[92,81429,51795],{"class":51282},[92,81431,51289],{"class":102},[92,81433,81434,81436,81438],{"class":94,"line":2570},[92,81435,51767],{"class":102},[92,81437,51782],{"class":51282},[92,81439,51289],{"class":102},[38,81441,81442],{},[1441,81443],{"alt":10,"src":81444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[38,81446,81447],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[46,81449,81450],{"start":11},[49,81451,81452],{},"every()返回的是布尔值",[38,81454,81455],{},[341,81456,81459],{"href":81457,"rel":81458},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23846],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[38,81461,81462],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[38,81464,81465],{},"some是只有有一个就没问题",[38,81467,81468],{},"every是必须全是才行",[83,81470,81474],{"className":81471,"code":81472,"language":81473,"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,81475,81476,81492,81506,81510,81519],{"__ignoreMap":10},[92,81477,81478,81480,81483,81485,81487,81490],{"class":94,"line":95},[92,81479,54431],{"class":98},[92,81481,81482],{"class":102}," isBigEnough(element, ",[92,81484,74040],{"class":98},[92,81486,12415],{"class":102},[92,81488,81489],{"class":98},"array",[92,81491,12422],{"class":102},[92,81493,81494,81497,81500,81502,81504],{"class":94,"line":11},[92,81495,81496],{"class":98},"  return",[92,81498,81499],{"class":102}," element ",[92,81501,1689],{"class":98},[92,81503,2017],{"class":151},[92,81505,1269],{"class":102},[92,81507,81508],{"class":94,"line":1158},[92,81509,1544],{"class":102},[92,81511,81512,81515,81517],{"class":94,"line":1173},[92,81513,81514],{"class":102},"[12, 5, 8, 130, 44].every(isBigEnough); ",[92,81516,33311],{"class":98},[92,81518,54498],{"class":102},[92,81520,81521,81524,81526],{"class":94,"line":1179},[92,81522,81523],{"class":102},"[12, 54, 18, 130, 44].every(isBigEnough); ",[92,81525,33311],{"class":98},[92,81527,57922],{"class":102},[83,81529,81531],{"className":53049,"code":81530,"language":53051,"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,81532,81533,81541,81549,81554,81558,81563,81568,81576],{"__ignoreMap":10},[92,81534,81535,81537,81539],{"class":94,"line":95},[92,81536,1013],{"class":102},[92,81538,51782],{"class":51282},[92,81540,51289],{"class":102},[92,81542,81543,81545,81547],{"class":94,"line":11},[92,81544,52126],{"class":102},[92,81546,51795],{"class":51282},[92,81548,51289],{"class":102},[92,81550,81551],{"class":94,"line":1158},[92,81552,81553],{"class":102},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[92,81555,81556],{"class":94,"line":1173},[92,81557,78304],{"class":102},[92,81559,81560],{"class":94,"line":1179},[92,81561,81562],{"class":102},"    const flag = arr.every(item => item >= 10)\n",[92,81564,81565],{"class":94,"line":1193},[92,81566,81567],{"class":102},"    console.log(flag)    \u002F\u002Ftrue\n",[92,81569,81570,81572,81574],{"class":94,"line":1199},[92,81571,52399],{"class":102},[92,81573,51795],{"class":51282},[92,81575,51289],{"class":102},[92,81577,81578,81580,81582],{"class":94,"line":1290},[92,81579,51767],{"class":102},[92,81581,51782],{"class":51282},[92,81583,51289],{"class":102},[83,81585,81587],{"className":53049,"code":81586,"language":53051,"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,81588,81589,81597,81605,81609,81614,81619,81624,81632],{"__ignoreMap":10},[92,81590,81591,81593,81595],{"class":94,"line":95},[92,81592,1013],{"class":102},[92,81594,51782],{"class":51282},[92,81596,51289],{"class":102},[92,81598,81599,81601,81603],{"class":94,"line":11},[92,81600,52126],{"class":102},[92,81602,51795],{"class":51282},[92,81604,51289],{"class":102},[92,81606,81607],{"class":94,"line":1158},[92,81608,81553],{"class":102},[92,81610,81611],{"class":94,"line":1173},[92,81612,81613],{"class":102},"    const arr = [10, 0, 5]\n",[92,81615,81616],{"class":94,"line":1179},[92,81617,81618],{"class":102},"    const flag = arr.some(item => item >= 10)\n",[92,81620,81621],{"class":94,"line":1193},[92,81622,81623],{"class":102},"    console.log(flag)   \u002F\u002Ftrue\n",[92,81625,81626,81628,81630],{"class":94,"line":1199},[92,81627,52399],{"class":102},[92,81629,51795],{"class":51282},[92,81631,51289],{"class":102},[92,81633,81634,81636,81638],{"class":94,"line":1290},[92,81635,51767],{"class":102},[92,81637,51782],{"class":51282},[92,81639,51289],{"class":102},[22890,81641,81643],{"id":81642},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[38,81645,81646],{},[1441,81647],{"alt":10,"src":81648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[83,81650,81652],{"className":50615,"code":81651,"language":50617,"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,81653,81654,81664,81678,81682,81690,81704,81724,81736,81744,81751,81763,81775,81787,81799,81809,81819,81823,81831,81839,81843,81851,81863,81871,81893,81898,81903,81936,81944,81952,81956],{"__ignoreMap":10},[92,81655,81656,81658,81660,81662],{"class":94,"line":95},[92,81657,51279],{"class":102},[92,81659,51283],{"class":51282},[92,81661,51286],{"class":1942},[92,81663,51289],{"class":102},[92,81665,81666,81668,81670,81672,81674,81676],{"class":94,"line":11},[92,81667,1013],{"class":102},[92,81669,50617],{"class":51282},[92,81671,51298],{"class":1942},[92,81673,148],{"class":102},[92,81675,51303],{"class":207},[92,81677,51289],{"class":102},[92,81679,81680],{"class":94,"line":1158},[92,81681,2379],{"emptyLinePlaceholder":17},[92,81683,81684,81686,81688],{"class":94,"line":1173},[92,81685,1013],{"class":102},[92,81687,51316],{"class":51282},[92,81689,51289],{"class":102},[92,81691,81692,81694,81696,81698,81700,81702],{"class":94,"line":1179},[92,81693,52126],{"class":102},[92,81695,51326],{"class":51282},[92,81697,51329],{"class":1942},[92,81699,148],{"class":102},[92,81701,51334],{"class":207},[92,81703,51289],{"class":102},[92,81705,81706,81708,81710,81712,81714,81716,81718,81720,81722],{"class":94,"line":1193},[92,81707,52126],{"class":102},[92,81709,51326],{"class":51282},[92,81711,14900],{"class":1942},[92,81713,148],{"class":102},[92,81715,51373],{"class":207},[92,81717,51353],{"class":1942},[92,81719,148],{"class":102},[92,81721,51380],{"class":207},[92,81723,51289],{"class":102},[92,81725,81726,81728,81730,81732,81734],{"class":94,"line":1199},[92,81727,52126],{"class":102},[92,81729,51389],{"class":51282},[92,81731,51392],{"class":102},[92,81733,51389],{"class":51282},[92,81735,51289],{"class":102},[92,81737,81738,81740,81742],{"class":94,"line":1290},[92,81739,52126],{"class":102},[92,81741,5106],{"class":51282},[92,81743,51289],{"class":102},[92,81745,81746,81749],{"class":94,"line":1296},[92,81747,81748],{"class":51282},"    div",[92,81750,15552],{"class":102},[92,81752,81753,81755,81757,81759,81761],{"class":94,"line":1308},[92,81754,54753],{"class":151},[92,81756,51419],{"class":102},[92,81758,1701],{"class":151},[92,81760,51474],{"class":98},[92,81762,1269],{"class":102},[92,81764,81765,81767,81769,81771,81773],{"class":94,"line":1591},[92,81766,54767],{"class":151},[92,81768,51419],{"class":102},[92,81770,504],{"class":151},[92,81772,51474],{"class":98},[92,81774,1269],{"class":102},[92,81776,81777,81779,81781,81783,81785],{"class":94,"line":1596},[92,81778,57341],{"class":151},[92,81780,51419],{"class":102},[92,81782,504],{"class":151},[92,81784,51474],{"class":98},[92,81786,1269],{"class":102},[92,81788,81789,81791,81793,81795,81797],{"class":94,"line":1602},[92,81790,65115],{"class":151},[92,81792,51419],{"class":102},[92,81794,601],{"class":151},[92,81796,51474],{"class":98},[92,81798,1269],{"class":102},[92,81800,81801,81803,81805,81807],{"class":94,"line":1607},[92,81802,57268],{"class":151},[92,81804,51419],{"class":102},[92,81806,51574],{"class":151},[92,81808,1269],{"class":102},[92,81810,81811,81813,81815,81817],{"class":94,"line":1621},[92,81812,54866],{"class":151},[92,81814,51419],{"class":102},[92,81816,51627],{"class":151},[92,81818,1269],{"class":102},[92,81820,81821],{"class":94,"line":1626},[92,81822,2166],{"class":102},[92,81824,81825,81827,81829],{"class":94,"line":1632},[92,81826,52399],{"class":102},[92,81828,5106],{"class":51282},[92,81830,51289],{"class":102},[92,81832,81833,81835,81837],{"class":94,"line":1653},[92,81834,51767],{"class":102},[92,81836,51316],{"class":51282},[92,81838,51289],{"class":102},[92,81840,81841],{"class":94,"line":1658},[92,81842,2379],{"emptyLinePlaceholder":17},[92,81844,81845,81847,81849],{"class":94,"line":1672},[92,81846,1013],{"class":102},[92,81848,51782],{"class":51282},[92,81850,51289],{"class":102},[92,81852,81853,81855,81857,81859,81861],{"class":94,"line":1677},[92,81854,52126],{"class":102},[92,81856,51593],{"class":51282},[92,81858,55296],{"class":102},[92,81860,51593],{"class":51282},[92,81862,51289],{"class":102},[92,81864,81865,81867,81869],{"class":94,"line":1706},[92,81866,52126],{"class":102},[92,81868,51795],{"class":51282},[92,81870,51289],{"class":102},[92,81872,81873,81875,81878,81880,81883,81886,81888,81891],{"class":94,"line":1711},[92,81874,11201],{"class":98},[92,81876,81877],{"class":151}," spec",[92,81879,13544],{"class":98},[92,81881,81882],{"class":102}," { size: ",[92,81884,81885],{"class":207},"'40cm*40cm'",[92,81887,55446],{"class":102},[92,81889,81890],{"class":207},"'黑色'",[92,81892,55586],{"class":102},[92,81894,81895],{"class":94,"line":1728},[92,81896,81897],{"class":161},"    \u002F\u002F const arr = Object.values(spec)\n",[92,81899,81900],{"class":94,"line":1733},[92,81901,81902],{"class":161},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[92,81904,81905,81907,81909,81911,81914,81916,81918,81921,81924,81927,81929,81931,81934],{"class":94,"line":1738},[92,81906,52389],{"class":102},[92,81908,54381],{"class":1942},[92,81910,103],{"class":102},[92,81912,81913],{"class":207},"'div'",[92,81915,74231],{"class":102},[92,81917,148],{"class":98},[92,81919,81920],{"class":102}," Object.",[92,81922,81923],{"class":1942},"values",[92,81925,81926],{"class":102},"(spec).",[92,81928,74205],{"class":1942},[92,81930,103],{"class":102},[92,81932,81933],{"class":207},"'\u002F'",[92,81935,109],{"class":102},[92,81937,81938,81940,81942],{"class":94,"line":1743},[92,81939,52399],{"class":102},[92,81941,51795],{"class":51282},[92,81943,51289],{"class":102},[92,81945,81946,81948,81950],{"class":94,"line":1757},[92,81947,51767],{"class":102},[92,81949,51782],{"class":51282},[92,81951,51289],{"class":102},[92,81953,81954],{"class":94,"line":1762},[92,81955,2379],{"emptyLinePlaceholder":17},[92,81957,81958,81960,81962],{"class":94,"line":2556},[92,81959,51767],{"class":102},[92,81961,50617],{"class":51282},[92,81963,51289],{"class":102},[38,81965,81966],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22890,81968,81970],{"id":81969},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[38,81972,81973],{},"静态方法，将伪数组转换为真数组",[38,81975,81976],{},[1441,81977],{"alt":10,"src":81978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[83,81980,81982],{"className":53049,"code":81981,"language":53051,"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,81983,81984,81992,82000,82012,82024,82036,82044,82052,82057,82062,82067,82072,82080],{"__ignoreMap":10},[92,81985,81986,81988,81990],{"class":94,"line":95},[92,81987,1013],{"class":102},[92,81989,51782],{"class":51282},[92,81991,51289],{"class":102},[92,81993,81994,81996,81998],{"class":94,"line":11},[92,81995,52126],{"class":102},[92,81997,1110],{"class":51282},[92,81999,51289],{"class":102},[92,82001,82002,82004,82006,82008,82010],{"class":94,"line":1158},[92,82003,51323],{"class":102},[92,82005,49],{"class":51282},[92,82007,55296],{"class":102},[92,82009,49],{"class":51282},[92,82011,51289],{"class":102},[92,82013,82014,82016,82018,82020,82022],{"class":94,"line":1173},[92,82015,51323],{"class":102},[92,82017,49],{"class":51282},[92,82019,55296],{"class":102},[92,82021,49],{"class":51282},[92,82023,51289],{"class":102},[92,82025,82026,82028,82030,82032,82034],{"class":94,"line":1179},[92,82027,51323],{"class":102},[92,82029,49],{"class":51282},[92,82031,55296],{"class":102},[92,82033,49],{"class":51282},[92,82035,51289],{"class":102},[92,82037,82038,82040,82042],{"class":94,"line":1193},[92,82039,52399],{"class":102},[92,82041,1110],{"class":51282},[92,82043,51289],{"class":102},[92,82045,82046,82048,82050],{"class":94,"line":1199},[92,82047,52126],{"class":102},[92,82049,51795],{"class":51282},[92,82051,51289],{"class":102},[92,82053,82054],{"class":94,"line":1290},[92,82055,82056],{"class":102},"    const lis = document.querySelectorAll('li')\n",[92,82058,82059],{"class":94,"line":1296},[92,82060,82061],{"class":102},"    const liss = Array.from(lis)\n",[92,82063,82064],{"class":94,"line":1308},[92,82065,82066],{"class":102},"    liss.pop()\n",[92,82068,82069],{"class":94,"line":1591},[92,82070,82071],{"class":102},"    console.log(liss)\n",[92,82073,82074,82076,82078],{"class":94,"line":1596},[92,82075,52399],{"class":102},[92,82077,51795],{"class":51282},[92,82079,51289],{"class":102},[92,82081,82082,82084,82086],{"class":94,"line":1602},[92,82083,51767],{"class":102},[92,82085,51782],{"class":51282},[92,82087,51289],{"class":102},[38,82089,82090],{},[1441,82091],{"alt":10,"src":82092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21978,82094,82096],{"id":82095},"_41053-string","4.10.5.3 String",[38,82098,82099],{},[1441,82100],{"alt":10,"src":82101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22890,82103,82105],{"id":82104},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[83,82107,82109],{"className":53049,"code":82108,"language":53051,"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,82110,82111,82119,82127,82132,82137,82142,82146,82151,82156,82161,82169],{"__ignoreMap":10},[92,82112,82113,82115,82117],{"class":94,"line":95},[92,82114,1013],{"class":102},[92,82116,51782],{"class":51282},[92,82118,51289],{"class":102},[92,82120,82121,82123,82125],{"class":94,"line":11},[92,82122,52126],{"class":102},[92,82124,51795],{"class":51282},[92,82126,51289],{"class":102},[92,82128,82129],{"class":94,"line":1158},[92,82130,82131],{"class":102},"    \u002F\u002F 把字符串转化为数组\n",[92,82133,82134],{"class":94,"line":1173},[92,82135,82136],{"class":102},"    const str = 'pink,red'\n",[92,82138,82139],{"class":94,"line":1179},[92,82140,82141],{"class":102},"    const arr = str.split(',')\n",[92,82143,82144],{"class":94,"line":1193},[92,82145,80620],{"class":102},[92,82147,82148],{"class":94,"line":1199},[92,82149,82150],{"class":102},"    const str1 = '2025-8-25'\n",[92,82152,82153],{"class":94,"line":1290},[92,82154,82155],{"class":102},"    const arr1 = str1.split('-')\n",[92,82157,82158],{"class":94,"line":1296},[92,82159,82160],{"class":102},"    console.log(arr1)\n",[92,82162,82163,82165,82167],{"class":94,"line":1308},[92,82164,52399],{"class":102},[92,82166,51795],{"class":51282},[92,82168,51289],{"class":102},[92,82170,82171,82173,82175],{"class":94,"line":1591},[92,82172,51767],{"class":102},[92,82174,51782],{"class":51282},[92,82176,51289],{"class":102},[22890,82178,82180],{"id":82179},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[38,82182,5161],{},[38,82184,82185],{},"substring(indexStart)",[38,82187,82188],{},"substring(indexStart, indexEnd)",[1110,82190,82191,82202,82214,82224],{},[49,82192,82193,82194,82197,82198,82201],{},"如果省略了 ",[89,82195,82196],{},"indexEnd","，则 ",[89,82199,82200],{},"substring()"," 提取字符直到字符串的末尾",[49,82203,82204,82205,82208,82209,82197,82211,82213],{},"如果 ",[89,82206,82207],{},"indexStart"," 等于 ",[89,82210,82196],{},[89,82212,82200],{}," 返回一个空字符串",[49,82215,82204,82216,82218,82219,82197,82221,82223],{},[89,82217,82207],{}," 大于 ",[89,82220,82196],{},[89,82222,82200],{}," 的效果就像交换了这两个参数一样",[49,82225,82226],{},"结束的索引号不包含想要截取的部分",[83,82228,82230],{"className":81471,"code":82229,"language":81473,"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,82231,82232,82244,82248,82282,82312,82316,82347,82351,82378,82408,82438,82442,82473],{"__ignoreMap":10},[92,82233,82234,82237,82239,82242],{"class":94,"line":95},[92,82235,82236],{"class":102},"const anyString ",[92,82238,148],{"class":98},[92,82240,82241],{"class":207}," \"Mozilla\"",[92,82243,1269],{"class":102},[92,82245,82246],{"class":94,"line":11},[92,82247,2379],{"emptyLinePlaceholder":17},[92,82249,82250,82253,82255,82257,82259,82262,82264,82267,82269,82271,82273,82275,82277,82279],{"class":94,"line":1158},[92,82251,82252],{"class":151},"console",[92,82254,661],{"class":102},[92,82256,58229],{"class":151},[92,82258,103],{"class":102},[92,82260,82261],{"class":151},"anyString",[92,82263,661],{"class":102},[92,82265,82266],{"class":151},"substring",[92,82268,103],{"class":102},[92,82270,294],{"class":151},[92,82272,12415],{"class":102},[92,82274,320],{"class":151},[92,82276,75235],{"class":102},[92,82278,33311],{"class":98},[92,82280,82281],{"class":207}," 'M'\n",[92,82283,82284,82286,82288,82290,82292,82294,82296,82298,82300,82302,82304,82306,82308,82310],{"class":94,"line":1173},[92,82285,82252],{"class":151},[92,82287,661],{"class":102},[92,82289,58229],{"class":151},[92,82291,103],{"class":102},[92,82293,82261],{"class":151},[92,82295,661],{"class":102},[92,82297,82266],{"class":151},[92,82299,103],{"class":102},[92,82301,320],{"class":151},[92,82303,12415],{"class":102},[92,82305,294],{"class":151},[92,82307,75235],{"class":102},[92,82309,33311],{"class":98},[92,82311,82281],{"class":207},[92,82313,82314],{"class":94,"line":1179},[92,82315,2379],{"emptyLinePlaceholder":17},[92,82317,82318,82320,82322,82324,82326,82328,82330,82332,82334,82336,82338,82340,82342,82344],{"class":94,"line":1193},[92,82319,82252],{"class":151},[92,82321,661],{"class":102},[92,82323,58229],{"class":151},[92,82325,103],{"class":102},[92,82327,82261],{"class":151},[92,82329,661],{"class":102},[92,82331,82266],{"class":151},[92,82333,103],{"class":102},[92,82335,294],{"class":151},[92,82337,12415],{"class":102},[92,82339,447],{"class":151},[92,82341,75235],{"class":102},[92,82343,33311],{"class":98},[92,82345,82346],{"class":207}," 'Mozill'\n",[92,82348,82349],{"class":94,"line":1199},[92,82350,2379],{"emptyLinePlaceholder":17},[92,82352,82353,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373,82375],{"class":94,"line":1290},[92,82354,82252],{"class":151},[92,82356,661],{"class":102},[92,82358,58229],{"class":151},[92,82360,103],{"class":102},[92,82362,82261],{"class":151},[92,82364,661],{"class":102},[92,82366,82266],{"class":151},[92,82368,103],{"class":102},[92,82370,396],{"class":151},[92,82372,75235],{"class":102},[92,82374,33311],{"class":98},[92,82376,82377],{"class":207}," 'lla'\n",[92,82379,82380,82382,82384,82386,82388,82390,82392,82394,82396,82398,82400,82402,82404,82406],{"class":94,"line":1296},[92,82381,82252],{"class":151},[92,82383,661],{"class":102},[92,82385,58229],{"class":151},[92,82387,103],{"class":102},[92,82389,82261],{"class":151},[92,82391,661],{"class":102},[92,82393,82266],{"class":151},[92,82395,103],{"class":102},[92,82397,396],{"class":151},[92,82399,12415],{"class":102},[92,82401,472],{"class":151},[92,82403,75291],{"class":102},[92,82405,33311],{"class":98},[92,82407,82377],{"class":207},[92,82409,82410,82412,82414,82416,82418,82420,82422,82424,82426,82428,82430,82432,82434,82436],{"class":94,"line":1308},[92,82411,82252],{"class":151},[92,82413,661],{"class":102},[92,82415,58229],{"class":151},[92,82417,103],{"class":102},[92,82419,82261],{"class":151},[92,82421,661],{"class":102},[92,82423,82266],{"class":151},[92,82425,103],{"class":102},[92,82427,472],{"class":151},[92,82429,12415],{"class":102},[92,82431,396],{"class":151},[92,82433,75235],{"class":102},[92,82435,33311],{"class":98},[92,82437,82377],{"class":207},[92,82439,82440],{"class":94,"line":1591},[92,82441,2379],{"emptyLinePlaceholder":17},[92,82443,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470],{"class":94,"line":1596},[92,82445,82252],{"class":151},[92,82447,661],{"class":102},[92,82449,58229],{"class":151},[92,82451,103],{"class":102},[92,82453,82261],{"class":151},[92,82455,661],{"class":102},[92,82457,82266],{"class":151},[92,82459,103],{"class":102},[92,82461,294],{"class":151},[92,82463,12415],{"class":102},[92,82465,472],{"class":151},[92,82467,75235],{"class":102},[92,82469,33311],{"class":98},[92,82471,82472],{"class":207}," 'Mozilla'\n",[92,82474,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501],{"class":94,"line":1602},[92,82476,82252],{"class":151},[92,82478,661],{"class":102},[92,82480,58229],{"class":151},[92,82482,103],{"class":102},[92,82484,82261],{"class":151},[92,82486,661],{"class":102},[92,82488,82266],{"class":151},[92,82490,103],{"class":102},[92,82492,294],{"class":151},[92,82494,12415],{"class":102},[92,82496,549],{"class":151},[92,82498,75235],{"class":102},[92,82500,33311],{"class":98},[92,82502,82472],{"class":207},[22890,82504,82506],{"id":82505},"_410533-startswith","4.10.5.3.3 startsWith",[38,82508,82509,82512,82513,82518,82519,82521,82522],{},[89,82510,82511],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[252,82514,82515],{},[89,82516,82517],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[89,82520,1341],{}," 或 ",[89,82523,66002],{},[83,82525,82527],{"className":77477,"code":82526,"language":77479,"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,82528,82529,82541,82560,82565,82585],{"__ignoreMap":10},[92,82530,82531,82533,82536,82538],{"class":94,"line":95},[92,82532,6772],{"class":98},[92,82534,82535],{"class":102}," str1 ",[92,82537,148],{"class":98},[92,82539,82540],{"class":207}," \"Saturday night plans\"\n",[92,82542,82543,82545,82547,82550,82553,82555,82558],{"class":94,"line":11},[92,82544,77514],{"class":102},[92,82546,58229],{"class":1942},[92,82548,82549],{"class":102},"(str1.",[92,82551,82552],{"class":1942},"startsWith",[92,82554,103],{"class":102},[92,82556,82557],{"class":207},"\"Sat\"",[92,82559,30479],{"class":102},[92,82561,82562],{"class":94,"line":1158},[92,82563,82564],{"class":161},"\u002F\u002F Expected output: true\n",[92,82566,82567,82569,82571,82573,82575,82577,82579,82581,82583],{"class":94,"line":1173},[92,82568,77514],{"class":102},[92,82570,58229],{"class":1942},[92,82572,82549],{"class":102},[92,82574,82552],{"class":1942},[92,82576,103],{"class":102},[92,82578,82557],{"class":207},[92,82580,12415],{"class":102},[92,82582,174],{"class":151},[92,82584,30479],{"class":102},[92,82586,82587],{"class":94,"line":1179},[92,82588,82589],{"class":161},"\u002F\u002F Expected output: false\n",[83,82591,82593],{"className":50615,"code":82592,"language":50617,"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,82594,82595,82600,82605,82609,82614,82619],{"__ignoreMap":10},[92,82596,82597],{"class":94,"line":95},[92,82598,82599],{"class":102},"startsWith(searchString)\n",[92,82601,82602],{"class":94,"line":11},[92,82603,82604],{"class":102},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[92,82606,82607],{"class":94,"line":1158},[92,82608,2379],{"emptyLinePlaceholder":17},[92,82610,82611],{"class":94,"line":1173},[92,82612,82613],{"class":102},"const str3 = 'pink老师上课中'\n",[92,82615,82616],{"class":94,"line":1179},[92,82617,82618],{"class":102},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[92,82620,82621],{"class":94,"line":1193},[92,82622,82623],{"class":102},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22890,82625,82627],{"id":82626},"_410534-includes","4.10.5.3.4 includes",[38,82629,82630],{},"includes(searchString) includes(searchString, position)",[46,82632,82633],{},[49,82634,82635],{},"searchString:",[38,82637,82638,82639,82641,82642,82647,82648,82653,82654,21480,82657,82660,82661,82664],{},"一个要在 ",[89,82640,1278],{}," 中查找的字符串。",[341,82643,82646],{"href":82644,"rel":82645},"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",[23846],"不能是正则表达式","。所有非正则表达式的值都会被",[341,82649,82652],{"href":82650,"rel":82651},"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",[23846],"强制转换为字符串","，因此如果该参数被省略或传入 ",[89,82655,82656],{},"undefined",[89,82658,82659],{},"includes()"," 方法会在字符串中搜索 ",[89,82662,82663],{},"\"undefined\"","，这通常不是你想要的",[46,82666,82667],{"start":11},[49,82668,82669,962],{},[89,82670,82671],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[38,82673,82674,82675,82678,82679],{},"在字符串中开始搜索 ",[89,82676,82677],{},"searchString"," 的位置。默认值为 ",[89,82680,294],{},[46,82682,82683],{"start":1158},[49,82684,82685],{},"返回值：",[38,82687,82688,82689,82691,82692,82696,82697],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[89,82690,82677],{}," 为空字符串的情况），则返回 ",[252,82693,82694],{},[89,82695,1341],{}," ，否则返回 ",[252,82698,82699],{},[89,82700,66002],{},[46,82702,82703],{"start":1173},[49,82704,82705],{},"异常：",[38,82707,82204,82708,13775,82710,82714],{},[89,82709,82677],{},[341,82711,82713],{"href":82644,"rel":82712},[23846],"是一个正则表达式","，则会抛出",[38,82716,82717],{},"只要是有就是true，不需要非得以谁开头结尾",[83,82719,82721],{"className":77477,"code":82720,"language":77479,"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,82722,82723,82734,82757,82776,82796,82818,82837],{"__ignoreMap":10},[92,82724,82725,82727,82729,82731],{"class":94,"line":95},[92,82726,6772],{"class":98},[92,82728,79757],{"class":102},[92,82730,148],{"class":98},[92,82732,82733],{"class":207}," \"To be, or not to be, that is the question.\"\n",[92,82735,82736,82738,82740,82743,82746,82748,82751,82754],{"class":94,"line":11},[92,82737,77514],{"class":102},[92,82739,58229],{"class":1942},[92,82741,82742],{"class":102},"(str.",[92,82744,82745],{"class":1942},"includes",[92,82747,103],{"class":102},[92,82749,82750],{"class":207},"\"To be\"",[92,82752,82753],{"class":102},"))",[92,82755,82756],{"class":161},"  \u002F\u002F true\n",[92,82758,82759,82761,82763,82765,82767,82769,82772,82774],{"class":94,"line":1158},[92,82760,77514],{"class":102},[92,82762,58229],{"class":1942},[92,82764,82742],{"class":102},[92,82766,82745],{"class":1942},[92,82768,103],{"class":102},[92,82770,82771],{"class":207},"\"question\"",[92,82773,82753],{"class":102},[92,82775,82756],{"class":161},[92,82777,82778,82780,82782,82784,82786,82788,82791,82793],{"class":94,"line":1173},[92,82779,77514],{"class":102},[92,82781,58229],{"class":1942},[92,82783,82742],{"class":102},[92,82785,82745],{"class":1942},[92,82787,103],{"class":102},[92,82789,82790],{"class":207},"\"nonexistent\"",[92,82792,82753],{"class":102},[92,82794,82795],{"class":161},"  \u002F\u002F false\n",[92,82797,82798,82800,82802,82804,82806,82808,82810,82812,82814,82816],{"class":94,"line":1179},[92,82799,77514],{"class":102},[92,82801,58229],{"class":1942},[92,82803,82742],{"class":102},[92,82805,82745],{"class":1942},[92,82807,103],{"class":102},[92,82809,82750],{"class":207},[92,82811,12415],{"class":102},[92,82813,320],{"class":151},[92,82815,82753],{"class":102},[92,82817,82795],{"class":161},[92,82819,82820,82822,82824,82826,82828,82830,82833,82835],{"class":94,"line":1193},[92,82821,77514],{"class":102},[92,82823,58229],{"class":1942},[92,82825,82742],{"class":102},[92,82827,82745],{"class":1942},[92,82829,103],{"class":102},[92,82831,82832],{"class":207},"\"TO BE\"",[92,82834,82753],{"class":102},[92,82836,82795],{"class":161},[92,82838,82839,82841,82843,82845,82847,82849,82851,82853],{"class":94,"line":1199},[92,82840,77514],{"class":102},[92,82842,58229],{"class":1942},[92,82844,82742],{"class":102},[92,82846,82745],{"class":1942},[92,82848,103],{"class":102},[92,82850,7632],{"class":207},[92,82852,82753],{"class":102},[92,82854,82756],{"class":161},[22890,82856,82858],{"id":82857},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[83,82860,82862],{"className":53049,"code":82861,"language":53051,"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,82863,82864,82872,82880,82885,82890,82895,82900,82905,82913],{"__ignoreMap":10},[92,82865,82866,82868,82870],{"class":94,"line":95},[92,82867,1013],{"class":102},[92,82869,51782],{"class":51282},[92,82871,51289],{"class":102},[92,82873,82874,82876,82878],{"class":94,"line":11},[92,82875,52126],{"class":102},[92,82877,51795],{"class":51282},[92,82879,51289],{"class":102},[92,82881,82882],{"class":94,"line":1158},[92,82883,82884],{"class":102},"    const num = 10\n",[92,82886,82887],{"class":94,"line":1173},[92,82888,82889],{"class":102},"    \u002F\u002F 强制转换\n",[92,82891,82892],{"class":94,"line":1179},[92,82893,82894],{"class":102},"    console.log(String(num))\n",[92,82896,82897],{"class":94,"line":1193},[92,82898,82899],{"class":102},"    \u002F\u002F toString()方法转换\n",[92,82901,82902],{"class":94,"line":1199},[92,82903,82904],{"class":102},"    console.log(num.toString())\n",[92,82906,82907,82909,82911],{"class":94,"line":1290},[92,82908,52399],{"class":102},[92,82910,51795],{"class":51282},[92,82912,51289],{"class":102},[92,82914,82915,82917,82919],{"class":94,"line":1296},[92,82916,51767],{"class":102},[92,82918,51782],{"class":51282},[92,82920,51289],{"class":102},[22890,82922,82924],{"id":82923},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[38,82926,82927],{},[1441,82928],{"alt":10,"src":82929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[83,82931,82933],{"className":50615,"code":82932,"language":50617,"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,82934,82935,82945,82959,82963,82971,82985,83005,83017,83025,83029,83037,83049,83057,83069,83074,83079,83084,83131,83147,83155,83163,83167],{"__ignoreMap":10},[92,82936,82937,82939,82941,82943],{"class":94,"line":95},[92,82938,51279],{"class":102},[92,82940,51283],{"class":51282},[92,82942,51286],{"class":1942},[92,82944,51289],{"class":102},[92,82946,82947,82949,82951,82953,82955,82957],{"class":94,"line":11},[92,82948,1013],{"class":102},[92,82950,50617],{"class":51282},[92,82952,51298],{"class":1942},[92,82954,148],{"class":102},[92,82956,51303],{"class":207},[92,82958,51289],{"class":102},[92,82960,82961],{"class":94,"line":1158},[92,82962,2379],{"emptyLinePlaceholder":17},[92,82964,82965,82967,82969],{"class":94,"line":1173},[92,82966,1013],{"class":102},[92,82968,51316],{"class":51282},[92,82970,51289],{"class":102},[92,82972,82973,82975,82977,82979,82981,82983],{"class":94,"line":1179},[92,82974,52126],{"class":102},[92,82976,51326],{"class":51282},[92,82978,51329],{"class":1942},[92,82980,148],{"class":102},[92,82982,51334],{"class":207},[92,82984,51289],{"class":102},[92,82986,82987,82989,82991,82993,82995,82997,82999,83001,83003],{"class":94,"line":1193},[92,82988,52126],{"class":102},[92,82990,51326],{"class":51282},[92,82992,14900],{"class":1942},[92,82994,148],{"class":102},[92,82996,51373],{"class":207},[92,82998,51353],{"class":1942},[92,83000,148],{"class":102},[92,83002,51380],{"class":207},[92,83004,51289],{"class":102},[92,83006,83007,83009,83011,83013,83015],{"class":94,"line":1199},[92,83008,52126],{"class":102},[92,83010,51389],{"class":51282},[92,83012,51392],{"class":102},[92,83014,51389],{"class":51282},[92,83016,51289],{"class":102},[92,83018,83019,83021,83023],{"class":94,"line":1290},[92,83020,51767],{"class":102},[92,83022,51316],{"class":51282},[92,83024,51289],{"class":102},[92,83026,83027],{"class":94,"line":1296},[92,83028,2379],{"emptyLinePlaceholder":17},[92,83030,83031,83033,83035],{"class":94,"line":1308},[92,83032,1013],{"class":102},[92,83034,51782],{"class":51282},[92,83036,51289],{"class":102},[92,83038,83039,83041,83043,83045,83047],{"class":94,"line":1591},[92,83040,52126],{"class":102},[92,83042,51593],{"class":51282},[92,83044,55296],{"class":102},[92,83046,51593],{"class":51282},[92,83048,51289],{"class":102},[92,83050,83051,83053,83055],{"class":94,"line":1596},[92,83052,52126],{"class":102},[92,83054,51795],{"class":51282},[92,83056,51289],{"class":102},[92,83058,83059,83061,83064,83066],{"class":94,"line":1602},[92,83060,11201],{"class":98},[92,83062,83063],{"class":151}," gift",[92,83065,13544],{"class":98},[92,83067,83068],{"class":207}," '50g的茶叶，清洗球'\n",[92,83070,83071],{"class":94,"line":1607},[92,83072,83073],{"class":161},"    \u002F\u002F 1.把字符串拆分为数组\n",[92,83075,83076],{"class":94,"line":1621},[92,83077,83078],{"class":161},"    \u002F\u002F console.log(gift.split(','))\n",[92,83080,83081],{"class":94,"line":1626},[92,83082,83083],{"class":161},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[92,83085,83086,83088,83090,83092,83095,83098,83100,83103,83105,83107,83109,83111,83113,83116,83118,83121,83123,83125,83127,83129],{"class":94,"line":1632},[92,83087,11201],{"class":98},[92,83089,73901],{"class":151},[92,83091,13544],{"class":98},[92,83093,83094],{"class":102}," gift.",[92,83096,83097],{"class":1942},"split",[92,83099,103],{"class":102},[92,83101,83102],{"class":207},"'，'",[92,83104,30808],{"class":102},[92,83106,74026],{"class":1942},[92,83108,103],{"class":102},[92,83110,79777],{"class":5196},[92,83112,79780],{"class":98},[92,83114,83115],{"class":207}," `\u003Cspan>【赠品】${",[92,83117,79777],{"class":102},[92,83119,83120],{"class":207},"}\u003C\u002Fspan>\u003Cbr>`",[92,83122,30808],{"class":102},[92,83124,74205],{"class":1942},[92,83126,103],{"class":102},[92,83128,74210],{"class":207},[92,83130,109],{"class":102},[92,83132,83133,83135,83137,83139,83141,83143,83145],{"class":94,"line":1653},[92,83134,52389],{"class":102},[92,83136,54381],{"class":1942},[92,83138,103],{"class":102},[92,83140,81913],{"class":207},[92,83142,74231],{"class":102},[92,83144,148],{"class":98},[92,83146,73967],{"class":102},[92,83148,83149,83151,83153],{"class":94,"line":1658},[92,83150,52399],{"class":102},[92,83152,51795],{"class":51282},[92,83154,51289],{"class":102},[92,83156,83157,83159,83161],{"class":94,"line":1672},[92,83158,51767],{"class":102},[92,83160,51782],{"class":51282},[92,83162,51289],{"class":102},[92,83164,83165],{"class":94,"line":1677},[92,83166,2379],{"emptyLinePlaceholder":17},[92,83168,83169,83171,83173],{"class":94,"line":1706},[92,83170,51767],{"class":102},[92,83172,50617],{"class":51282},[92,83174,51289],{"class":102},[21978,83176,83178],{"id":83177},"_41054-number","4.10.5.4 Number",[38,83180,83181],{},[1441,83182],{"alt":10,"src":83183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[38,83185,83186],{},"整数也可以进行toFixed来保留小数",[38,83188,83189],{},"比如：",[38,83191,83192],{},"const price=10",[38,83194,83195],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21978,83197,83199],{"id":83198},"_41055-购物车展示","4.10.5.5 购物车展示",[38,83201,83202],{},[1441,83203],{"alt":10,"src":83204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[83,83206,83208],{"className":50615,"code":83207,"language":50617,"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,83209,83210,83220,83234,83238,83246,83260,83280,83292,83300,83306,83316,83326,83336,83340,83344,83350,83362,83376,83380,83384,83390,83402,83418,83428,83444,83448,83452,83458,83468,83478,83482,83486,83494,83506,83518,83530,83534,83538,83546,83558,83562,83566,83577,83587,83599,83611,83621,83625,83629,83637,83646,83658,83668,83678,83682,83686,83694,83703,83710,83720,83732,83736,83740,83749,83759,83770,83782,83794,83798,83802,83811,83821,83832,83836,83840,83846,83858,83870,83880,83890,83908,83920,83924,83928,83937,83949,83959,83969,83981,83985,83993,84001,84005,84013,84027,84035,84049,84077,84085,84093,84103,84107,84115,84123,84132,84140,84149,84159,84163,84167,84175,84183,84192,84200,84208,84221,84225,84229,84237,84245,84254,84262,84270,84285,84289,84293,84301,84309,84318,84326,84334,84348,84356,84360,84364,84369,84395,84400,84437,84442,84465,84470,84524,84529,84565,84569,84575,84580,84589,84603,84612,84631,84640,84650,84655,84660,84673,84678,84732,84758,84766,84774,84778],{"__ignoreMap":10},[92,83211,83212,83214,83216,83218],{"class":94,"line":95},[92,83213,51279],{"class":102},[92,83215,51283],{"class":51282},[92,83217,51286],{"class":1942},[92,83219,51289],{"class":102},[92,83221,83222,83224,83226,83228,83230,83232],{"class":94,"line":11},[92,83223,1013],{"class":102},[92,83225,50617],{"class":51282},[92,83227,51298],{"class":1942},[92,83229,148],{"class":102},[92,83231,51303],{"class":207},[92,83233,51289],{"class":102},[92,83235,83236],{"class":94,"line":1158},[92,83237,2379],{"emptyLinePlaceholder":17},[92,83239,83240,83242,83244],{"class":94,"line":1173},[92,83241,1013],{"class":102},[92,83243,51316],{"class":51282},[92,83245,51289],{"class":102},[92,83247,83248,83250,83252,83254,83256,83258],{"class":94,"line":1179},[92,83249,52126],{"class":102},[92,83251,51326],{"class":51282},[92,83253,51329],{"class":1942},[92,83255,148],{"class":102},[92,83257,51334],{"class":207},[92,83259,51289],{"class":102},[92,83261,83262,83264,83266,83268,83270,83272,83274,83276,83278],{"class":94,"line":1193},[92,83263,52126],{"class":102},[92,83265,51326],{"class":51282},[92,83267,14900],{"class":1942},[92,83269,148],{"class":102},[92,83271,51373],{"class":207},[92,83273,51353],{"class":1942},[92,83275,148],{"class":102},[92,83277,51380],{"class":207},[92,83279,51289],{"class":102},[92,83281,83282,83284,83286,83288,83290],{"class":94,"line":1199},[92,83283,52126],{"class":102},[92,83285,51389],{"class":51282},[92,83287,51392],{"class":102},[92,83289,51389],{"class":51282},[92,83291,51289],{"class":102},[92,83293,83294,83296,83298],{"class":94,"line":1290},[92,83295,52126],{"class":102},[92,83297,5106],{"class":51282},[92,83299,51289],{"class":102},[92,83301,83302,83304],{"class":94,"line":1296},[92,83303,6383],{"class":51282},[92,83305,15552],{"class":102},[92,83307,83308,83310,83312,83314],{"class":94,"line":1308},[92,83309,54677],{"class":151},[92,83311,51419],{"class":102},[92,83313,294],{"class":151},[92,83315,1269],{"class":102},[92,83317,83318,83320,83322,83324],{"class":94,"line":1591},[92,83319,54688],{"class":151},[92,83321,51419],{"class":102},[92,83323,294],{"class":151},[92,83325,1269],{"class":102},[92,83327,83328,83330,83332,83334],{"class":94,"line":1596},[92,83329,72578],{"class":151},[92,83331,51419],{"class":102},[92,83333,60487],{"class":151},[92,83335,1269],{"class":102},[92,83337,83338],{"class":94,"line":1602},[92,83339,2166],{"class":102},[92,83341,83342],{"class":94,"line":1607},[92,83343,2379],{"emptyLinePlaceholder":17},[92,83345,83346,83348],{"class":94,"line":1621},[92,83347,62105],{"class":1942},[92,83349,15552],{"class":102},[92,83351,83352,83354,83356,83358,83360],{"class":94,"line":1626},[92,83353,54753],{"class":151},[92,83355,51419],{"class":102},[92,83357,78556],{"class":151},[92,83359,51474],{"class":98},[92,83361,1269],{"class":102},[92,83363,83364,83366,83368,83370,83372,83374],{"class":94,"line":1632},[92,83365,54688],{"class":151},[92,83367,51419],{"class":102},[92,83369,414],{"class":151},[92,83371,51474],{"class":98},[92,83373,51538],{"class":151},[92,83375,1269],{"class":102},[92,83377,83378],{"class":94,"line":1653},[92,83379,2166],{"class":102},[92,83381,83382],{"class":94,"line":1658},[92,83383,2379],{"emptyLinePlaceholder":17},[92,83385,83386,83388],{"class":94,"line":1672},[92,83387,78607],{"class":1942},[92,83389,15552],{"class":102},[92,83391,83392,83394,83396,83398,83400],{"class":94,"line":1677},[92,83393,54677],{"class":151},[92,83395,51419],{"class":102},[92,83397,678],{"class":151},[92,83399,51474],{"class":98},[92,83401,1269],{"class":102},[92,83403,83404,83406,83408,83410,83412,83414,83416],{"class":94,"line":1706},[92,83405,61842],{"class":151},[92,83407,51419],{"class":102},[92,83409,28103],{"class":151},[92,83411,78662],{"class":151},[92,83413,78665],{"class":151},[92,83415,798],{"class":98},[92,83417,1269],{"class":102},[92,83419,83420,83422,83424,83426],{"class":94,"line":1711},[92,83421,54991],{"class":151},[92,83423,51419],{"class":102},[92,83425,51459],{"class":151},[92,83427,1269],{"class":102},[92,83429,83430,83432,83434,83436,83438,83440,83442],{"class":94,"line":1728},[92,83431,61959],{"class":151},[92,83433,51419],{"class":102},[92,83435,320],{"class":151},[92,83437,51474],{"class":98},[92,83439,51503],{"class":151},[92,83441,62226],{"class":151},[92,83443,1269],{"class":102},[92,83445,83446],{"class":94,"line":1733},[92,83447,2166],{"class":102},[92,83449,83450],{"class":94,"line":1738},[92,83451,2379],{"emptyLinePlaceholder":17},[92,83453,83454,83456],{"class":94,"line":1743},[92,83455,78725],{"class":1942},[92,83457,15552],{"class":102},[92,83459,83460,83462,83464,83466],{"class":94,"line":1757},[92,83461,62007],{"class":151},[92,83463,51419],{"class":102},[92,83465,62012],{"class":151},[92,83467,1269],{"class":102},[92,83469,83470,83472,83474,83476],{"class":94,"line":1762},[92,83471,54866],{"class":151},[92,83473,51419],{"class":102},[92,83475,61800],{"class":151},[92,83477,1269],{"class":102},[92,83479,83480],{"class":94,"line":2556},[92,83481,2166],{"class":102},[92,83483,83484],{"class":94,"line":2570},[92,83485,2379],{"emptyLinePlaceholder":17},[92,83487,83488,83490,83492],{"class":94,"line":2578},[92,83489,78607],{"class":1942},[92,83491,55597],{"class":51282},[92,83493,15552],{"class":102},[92,83495,83496,83498,83500,83502,83504],{"class":94,"line":2583},[92,83497,54753],{"class":151},[92,83499,51419],{"class":102},[92,83501,715],{"class":151},[92,83503,51474],{"class":98},[92,83505,1269],{"class":102},[92,83507,83508,83510,83512,83514,83516],{"class":94,"line":2589},[92,83509,54767],{"class":151},[92,83511,51419],{"class":102},[92,83513,715],{"class":151},[92,83515,51474],{"class":98},[92,83517,1269],{"class":102},[92,83519,83520,83522,83524,83526,83528],{"class":94,"line":2595},[92,83521,61732],{"class":151},[92,83523,51419],{"class":102},[92,83525,422],{"class":151},[92,83527,51474],{"class":98},[92,83529,1269],{"class":102},[92,83531,83532],{"class":94,"line":2600},[92,83533,2166],{"class":102},[92,83535,83536],{"class":94,"line":7928},[92,83537,2379],{"emptyLinePlaceholder":17},[92,83539,83540,83542,83544],{"class":94,"line":7952},[92,83541,78607],{"class":1942},[92,83543,62286],{"class":1942},[92,83545,15552],{"class":102},[92,83547,83548,83550,83552,83554,83556],{"class":94,"line":7957},[92,83549,54753],{"class":151},[92,83551,51419],{"class":102},[92,83553,1701],{"class":151},[92,83555,51474],{"class":98},[92,83557,1269],{"class":102},[92,83559,83560],{"class":94,"line":7963},[92,83561,2166],{"class":102},[92,83563,83564],{"class":94,"line":7990},[92,83565,2379],{"emptyLinePlaceholder":17},[92,83567,83568,83570,83572,83575],{"class":94,"line":7995},[92,83569,78607],{"class":1942},[92,83571,62286],{"class":1942},[92,83573,83574],{"class":1942}," .tag",[92,83576,15552],{"class":102},[92,83578,83579,83581,83583,83585],{"class":94,"line":8001},[92,83580,54991],{"class":151},[92,83582,51419],{"class":102},[92,83584,60851],{"class":151},[92,83586,1269],{"class":102},[92,83588,83589,83591,83593,83595,83597],{"class":94,"line":8013},[92,83590,54677],{"class":151},[92,83592,51419],{"class":102},[92,83594,180],{"class":151},[92,83596,51474],{"class":98},[92,83598,1269],{"class":102},[92,83600,83601,83603,83605,83607,83609],{"class":94,"line":8025},[92,83602,54904],{"class":151},[92,83604,51419],{"class":102},[92,83606,601],{"class":151},[92,83608,51474],{"class":98},[92,83610,1269],{"class":102},[92,83612,83613,83615,83617,83619],{"class":94,"line":8037},[92,83614,57398],{"class":151},[92,83616,51419],{"class":102},[92,83618,62052],{"class":151},[92,83620,1269],{"class":102},[92,83622,83623],{"class":94,"line":9696},[92,83624,2166],{"class":102},[92,83626,83627],{"class":94,"line":9721},[92,83628,2379],{"emptyLinePlaceholder":17},[92,83630,83631,83633,83635],{"class":94,"line":9744},[92,83632,78607],{"class":1942},[92,83634,78899],{"class":1942},[92,83636,31448],{"class":102},[92,83638,83639,83641,83644],{"class":94,"line":9768},[92,83640,78607],{"class":1942},[92,83642,83643],{"class":1942}," .sub-total",[92,83645,15552],{"class":102},[92,83647,83648,83650,83652,83654,83656],{"class":94,"line":9773},[92,83649,54904],{"class":151},[92,83651,51419],{"class":102},[92,83653,753],{"class":151},[92,83655,51474],{"class":98},[92,83657,1269],{"class":102},[92,83659,83660,83662,83664,83666],{"class":94,"line":9778},[92,83661,57398],{"class":151},[92,83663,51419],{"class":102},[92,83665,78922],{"class":151},[92,83667,1269],{"class":102},[92,83669,83670,83672,83674,83676],{"class":94,"line":9783},[92,83671,61819],{"class":151},[92,83673,51419],{"class":102},[92,83675,320],{"class":151},[92,83677,1269],{"class":102},[92,83679,83680],{"class":94,"line":9792},[92,83681,2166],{"class":102},[92,83683,83684],{"class":94,"line":9797},[92,83685,2379],{"emptyLinePlaceholder":17},[92,83687,83688,83690,83692],{"class":94,"line":9803},[92,83689,78607],{"class":1942},[92,83691,78939],{"class":1942},[92,83693,31448],{"class":102},[92,83695,83696,83698,83701],{"class":94,"line":9824},[92,83697,78607],{"class":1942},[92,83699,83700],{"class":1942}," .sub-total::before",[92,83702,31448],{"class":102},[92,83704,83705,83708],{"class":94,"line":9830},[92,83706,83707],{"class":1942},"    .amount::before",[92,83709,15552],{"class":102},[92,83711,83712,83714,83716,83718],{"class":94,"line":9844},[92,83713,78946],{"class":151},[92,83715,51419],{"class":102},[92,83717,78951],{"class":207},[92,83719,1269],{"class":102},[92,83721,83722,83724,83726,83728,83730],{"class":94,"line":9850},[92,83723,54904],{"class":151},[92,83725,51419],{"class":102},[92,83727,601],{"class":151},[92,83729,51474],{"class":98},[92,83731,1269],{"class":102},[92,83733,83734],{"class":94,"line":9877},[92,83735,2166],{"class":102},[92,83737,83738],{"class":94,"line":9886},[92,83739,2379],{"emptyLinePlaceholder":17},[92,83741,83742,83744,83747],{"class":94,"line":9892},[92,83743,78607],{"class":1942},[92,83745,83746],{"class":1942}," .spec",[92,83748,15552],{"class":102},[92,83750,83751,83753,83755,83757],{"class":94,"line":9900},[92,83752,61819],{"class":151},[92,83754,51419],{"class":102},[92,83756,180],{"class":151},[92,83758,1269],{"class":102},[92,83760,83761,83763,83765,83768],{"class":94,"line":9905},[92,83762,57398],{"class":151},[92,83764,51419],{"class":102},[92,83766,83767],{"class":151},"#888",[92,83769,1269],{"class":102},[92,83771,83772,83774,83776,83778,83780],{"class":94,"line":16584},[92,83773,54904],{"class":151},[92,83775,51419],{"class":102},[92,83777,652],{"class":151},[92,83779,51474],{"class":98},[92,83781,1269],{"class":102},[92,83783,83784,83786,83788,83790,83792],{"class":94,"line":16590},[92,83785,61982],{"class":151},[92,83787,51419],{"class":102},[92,83789,803],{"class":151},[92,83791,51474],{"class":98},[92,83793,1269],{"class":102},[92,83795,83796],{"class":94,"line":16613},[92,83797,2166],{"class":102},[92,83799,83800],{"class":94,"line":16619},[92,83801,2379],{"emptyLinePlaceholder":17},[92,83803,83804,83806,83809],{"class":94,"line":16642},[92,83805,78607],{"class":1942},[92,83807,83808],{"class":1942}," .count",[92,83810,15552],{"class":102},[92,83812,83813,83815,83817,83819],{"class":94,"line":16656},[92,83814,61819],{"class":151},[92,83816,51419],{"class":102},[92,83818,320],{"class":151},[92,83820,1269],{"class":102},[92,83822,83823,83825,83827,83830],{"class":94,"line":16676},[92,83824,57398],{"class":151},[92,83826,51419],{"class":102},[92,83828,83829],{"class":151},"#aaa",[92,83831,1269],{"class":102},[92,83833,83834],{"class":94,"line":16682},[92,83835,2166],{"class":102},[92,83837,83838],{"class":94,"line":16693},[92,83839,2379],{"emptyLinePlaceholder":17},[92,83841,83842,83844],{"class":94,"line":16716},[92,83843,72457],{"class":1942},[92,83845,15552],{"class":102},[92,83847,83848,83850,83852,83854,83856],{"class":94,"line":16738},[92,83849,54753],{"class":151},[92,83851,51419],{"class":102},[92,83853,78556],{"class":151},[92,83855,51474],{"class":98},[92,83857,1269],{"class":102},[92,83859,83860,83862,83864,83866,83868],{"class":94,"line":16743},[92,83861,54688],{"class":151},[92,83863,51419],{"class":102},[92,83865,294],{"class":151},[92,83867,51538],{"class":151},[92,83869,1269],{"class":102},[92,83871,83872,83874,83876,83878],{"class":94,"line":16749},[92,83873,54991],{"class":151},[92,83875,51419],{"class":102},[92,83877,51459],{"class":151},[92,83879,1269],{"class":102},[92,83881,83882,83884,83886,83888],{"class":94,"line":16763},[92,83883,55002],{"class":151},[92,83885,51419],{"class":102},[92,83887,51562],{"class":151},[92,83889,1269],{"class":102},[92,83891,83892,83895,83897,83899,83901,83903,83906],{"class":94,"line":16776},[92,83893,83894],{"class":151},"      border-top",[92,83896,51419],{"class":102},[92,83898,320],{"class":151},[92,83900,51474],{"class":98},[92,83902,51503],{"class":151},[92,83904,83905],{"class":151}," #4e4e4e",[92,83907,1269],{"class":102},[92,83909,83910,83912,83914,83916,83918],{"class":94,"line":16781},[92,83911,54677],{"class":151},[92,83913,51419],{"class":102},[92,83915,803],{"class":151},[92,83917,51474],{"class":98},[92,83919,1269],{"class":102},[92,83921,83922],{"class":94,"line":16795},[92,83923,2166],{"class":102},[92,83925,83926],{"class":94,"line":16800},[92,83927,2379],{"emptyLinePlaceholder":17},[92,83929,83930,83932,83935],{"class":94,"line":16806},[92,83931,72457],{"class":1942},[92,83933,83934],{"class":1942}," .amount",[92,83936,15552],{"class":102},[92,83938,83939,83941,83943,83945,83947],{"class":94,"line":16811},[92,83940,54904],{"class":151},[92,83942,51419],{"class":102},[92,83944,753],{"class":151},[92,83946,51474],{"class":98},[92,83948,1269],{"class":102},[92,83950,83951,83953,83955,83957],{"class":94,"line":16825},[92,83952,57398],{"class":151},[92,83954,51419],{"class":102},[92,83956,78922],{"class":151},[92,83958,1269],{"class":102},[92,83960,83961,83963,83965,83967],{"class":94,"line":16830},[92,83962,62316],{"class":151},[92,83964,51419],{"class":102},[92,83966,51471],{"class":151},[92,83968,1269],{"class":102},[92,83970,83971,83973,83975,83977,83979],{"class":94,"line":16835},[92,83972,61732],{"class":151},[92,83974,51419],{"class":102},[92,83976,759],{"class":151},[92,83978,51474],{"class":98},[92,83980,1269],{"class":102},[92,83982,83983],{"class":94,"line":16849},[92,83984,2166],{"class":102},[92,83986,83987,83989,83991],{"class":94,"line":16861},[92,83988,52399],{"class":102},[92,83990,5106],{"class":51282},[92,83992,51289],{"class":102},[92,83994,83995,83997,83999],{"class":94,"line":16866},[92,83996,51767],{"class":102},[92,83998,51316],{"class":51282},[92,84000,51289],{"class":102},[92,84002,84003],{"class":94,"line":16879},[92,84004,2379],{"emptyLinePlaceholder":17},[92,84006,84007,84009,84011],{"class":94,"line":16884},[92,84008,1013],{"class":102},[92,84010,51782],{"class":51282},[92,84012,51289],{"class":102},[92,84014,84015,84017,84019,84021,84023,84025],{"class":94,"line":16889},[92,84016,52126],{"class":102},[92,84018,51593],{"class":51282},[92,84020,53468],{"class":1942},[92,84022,148],{"class":102},[92,84024,62590],{"class":207},[92,84026,51289],{"class":102},[92,84028,84029,84031,84033],{"class":94,"line":16894},[92,84030,52399],{"class":102},[92,84032,51593],{"class":51282},[92,84034,51289],{"class":102},[92,84036,84037,84039,84041,84043,84045,84047],{"class":94,"line":16907},[92,84038,52126],{"class":102},[92,84040,51593],{"class":51282},[92,84042,53468],{"class":1942},[92,84044,148],{"class":102},[92,84046,62562],{"class":207},[92,84048,51289],{"class":102},[92,84050,84051,84053,84055,84058,84060,84062,84064,84067,84069,84071,84073,84075],{"class":94,"line":16912},[92,84052,51323],{"class":102},[92,84054,51593],{"class":51282},[92,84056,84057],{"class":102},">合计：\u003C",[92,84059,92],{"class":51282},[92,84061,53468],{"class":1942},[92,84063,148],{"class":102},[92,84065,84066],{"class":207},"\"amount\"",[92,84068,55296],{"class":102},[92,84070,92],{"class":51282},[92,84072,55296],{"class":102},[92,84074,51593],{"class":51282},[92,84076,51289],{"class":102},[92,84078,84079,84081,84083],{"class":94,"line":32615},[92,84080,52399],{"class":102},[92,84082,51593],{"class":51282},[92,84084,51289],{"class":102},[92,84086,84087,84089,84091],{"class":94,"line":32621},[92,84088,52126],{"class":102},[92,84090,51795],{"class":51282},[92,84092,51289],{"class":102},[92,84094,84095,84097,84099,84101],{"class":94,"line":32627},[92,84096,11201],{"class":98},[92,84098,79359],{"class":151},[92,84100,13544],{"class":98},[92,84102,55429],{"class":102},[92,84104,84105],{"class":94,"line":32633},[92,84106,79368],{"class":102},[92,84108,84109,84111,84113],{"class":94,"line":32639},[92,84110,79373],{"class":102},[92,84112,79376],{"class":207},[92,84114,31448],{"class":102},[92,84116,84117,84119,84121],{"class":94,"line":32650},[92,84118,79383],{"class":102},[92,84120,79386],{"class":207},[92,84122,31448],{"class":102},[92,84124,84125,84127,84130],{"class":94,"line":32656},[92,84126,79393],{"class":102},[92,84128,84129],{"class":151},"289.9",[92,84131,31448],{"class":102},[92,84133,84134,84136,84138],{"class":94,"line":32676},[92,84135,79403],{"class":102},[92,84137,79406],{"class":207},[92,84139,31448],{"class":102},[92,84141,84142,84145,84147],{"class":94,"line":32682},[92,84143,84144],{"class":102},"        count: ",[92,84146,180],{"class":151},[92,84148,31448],{"class":102},[92,84150,84151,84154,84157],{"class":94,"line":32693},[92,84152,84153],{"class":102},"        spec: { color: ",[92,84155,84156],{"class":207},"'白色'",[92,84158,55586],{"class":102},[92,84160,84161],{"class":94,"line":32699},[92,84162,77874],{"class":102},[92,84164,84165],{"class":94,"line":32705},[92,84166,79368],{"class":102},[92,84168,84169,84171,84173],{"class":94,"line":32711},[92,84170,79373],{"class":102},[92,84172,79467],{"class":207},[92,84174,31448],{"class":102},[92,84176,84177,84179,84181],{"class":94,"line":32717},[92,84178,79383],{"class":102},[92,84180,79476],{"class":207},[92,84182,31448],{"class":102},[92,84184,84185,84187,84190],{"class":94,"line":32723},[92,84186,79393],{"class":102},[92,84188,84189],{"class":151},"109.8",[92,84191,31448],{"class":102},[92,84193,84194,84196,84198],{"class":94,"line":32729},[92,84195,79403],{"class":102},[92,84197,79494],{"class":207},[92,84199,31448],{"class":102},[92,84201,84202,84204,84206],{"class":94,"line":32735},[92,84203,84144],{"class":102},[92,84205,174],{"class":151},[92,84207,31448],{"class":102},[92,84209,84210,84213,84215,84217,84219],{"class":94,"line":32755},[92,84211,84212],{"class":102},"        spec: { size: ",[92,84214,81885],{"class":207},[92,84216,55446],{"class":102},[92,84218,81890],{"class":207},[92,84220,55586],{"class":102},[92,84222,84223],{"class":94,"line":32761},[92,84224,77874],{"class":102},[92,84226,84227],{"class":94,"line":32777},[92,84228,79368],{"class":102},[92,84230,84231,84233,84235],{"class":94,"line":32783},[92,84232,79373],{"class":102},[92,84234,79511],{"class":207},[92,84236,31448],{"class":102},[92,84238,84239,84241,84243],{"class":94,"line":32797},[92,84240,79383],{"class":102},[92,84242,79520],{"class":207},[92,84244,31448],{"class":102},[92,84246,84247,84249,84252],{"class":94,"line":32803},[92,84248,79393],{"class":102},[92,84250,84251],{"class":151},"488",[92,84253,31448],{"class":102},[92,84255,84256,84258,84260],{"class":94,"line":32818},[92,84257,79403],{"class":102},[92,84259,79538],{"class":207},[92,84261,31448],{"class":102},[92,84263,84264,84266,84268],{"class":94,"line":32824},[92,84265,84144],{"class":102},[92,84267,320],{"class":151},[92,84269,31448],{"class":102},[92,84271,84272,84274,84277,84280,84283],{"class":94,"line":32833},[92,84273,84153],{"class":102},[92,84275,84276],{"class":207},"'青色'",[92,84278,84279],{"class":102},", sum: ",[92,84281,84282],{"class":207},"'一大四小'",[92,84284,55586],{"class":102},[92,84286,84287],{"class":94,"line":32839},[92,84288,77874],{"class":102},[92,84290,84291],{"class":94,"line":32848},[92,84292,79368],{"class":102},[92,84294,84295,84297,84299],{"class":94,"line":32854},[92,84296,79373],{"class":102},[92,84298,79555],{"class":207},[92,84300,31448],{"class":102},[92,84302,84303,84305,84307],{"class":94,"line":32860},[92,84304,79383],{"class":102},[92,84306,79564],{"class":207},[92,84308,31448],{"class":102},[92,84310,84311,84313,84316],{"class":94,"line":32869},[92,84312,79393],{"class":102},[92,84314,84315],{"class":151},"139",[92,84317,31448],{"class":102},[92,84319,84320,84322,84324],{"class":94,"line":32875},[92,84321,79403],{"class":102},[92,84323,79582],{"class":207},[92,84325,31448],{"class":102},[92,84327,84328,84330,84332],{"class":94,"line":32886},[92,84329,84144],{"class":102},[92,84331,320],{"class":151},[92,84333,31448],{"class":102},[92,84335,84336,84338,84341,84343,84346],{"class":94,"line":32892},[92,84337,84212],{"class":102},[92,84339,84340],{"class":207},"'小号'",[92,84342,55446],{"class":102},[92,84344,84345],{"class":207},"'紫色'",[92,84347,55452],{"class":102},[92,84349,84350,84353],{"class":94,"line":32911},[92,84351,84352],{"class":102},"        gift: ",[92,84354,84355],{"class":207},"'50g茶叶,清洗球'\n",[92,84357,84358],{"class":94,"line":32917},[92,84359,52380],{"class":102},[92,84361,84362],{"class":94,"line":32928},[92,84363,53091],{"class":102},[92,84365,84366],{"class":94,"line":32934},[92,84367,84368],{"class":161},"    \u002F\u002F  1.根据数据渲染页面\n",[92,84370,84371,84373,84375,84377,84379,84381,84383,84385,84387,84389,84391,84393],{"class":94,"line":32954},[92,84372,52389],{"class":102},[92,84374,54381],{"class":1942},[92,84376,103],{"class":102},[92,84378,79883],{"class":207},[92,84380,74231],{"class":102},[92,84382,148],{"class":98},[92,84384,80030],{"class":102},[92,84386,74026],{"class":1942},[92,84388,103],{"class":102},[92,84390,79777],{"class":5196},[92,84392,79780],{"class":98},[92,84394,15552],{"class":102},[92,84396,84397],{"class":94,"line":32970},[92,84398,84399],{"class":161},"      \u002F\u002F 对象解构\n",[92,84401,84402,84404,84406,84408,84410,84412,84414,84417,84419,84421,84423,84426,84428,84431,84433,84435],{"class":94,"line":32976},[92,84403,58210],{"class":98},[92,84405,79789],{"class":102},[92,84407,79802],{"class":151},[92,84409,12415],{"class":102},[92,84411,79792],{"class":151},[92,84413,12415],{"class":102},[92,84415,84416],{"class":151},"count",[92,84418,12415],{"class":102},[92,84420,79797],{"class":151},[92,84422,12415],{"class":102},[92,84424,84425],{"class":151},"spec",[92,84427,12415],{"class":102},[92,84429,84430],{"class":151},"gift",[92,84432,79805],{"class":102},[92,84434,148],{"class":98},[92,84436,79810],{"class":102},[92,84438,84439],{"class":94,"line":32990},[92,84440,84441],{"class":161},"      \u002F\u002F 规格文字模块处理\n",[92,84443,84444,84446,84449,84451,84453,84455,84457,84459,84461,84463],{"class":94,"line":32996},[92,84445,58210],{"class":98},[92,84447,84448],{"class":151}," text",[92,84450,13544],{"class":98},[92,84452,81920],{"class":102},[92,84454,81923],{"class":1942},[92,84456,81926],{"class":102},[92,84458,74205],{"class":1942},[92,84460,103],{"class":102},[92,84462,81933],{"class":207},[92,84464,109],{"class":102},[92,84466,84467],{"class":94,"line":33002},[92,84468,84469],{"class":161},"      \u002F\u002F 处理赠品模块\n",[92,84471,84472,84474,84476,84478,84481,84483,84485,84487,84489,84492,84494,84496,84498,84500,84502,84505,84507,84510,84512,84514,84516,84518,84520,84522],{"class":94,"line":33013},[92,84473,58210],{"class":98},[92,84475,73901],{"class":151},[92,84477,13544],{"class":98},[92,84479,84480],{"class":102}," gift ",[92,84482,1089],{"class":98},[92,84484,83094],{"class":102},[92,84486,83097],{"class":1942},[92,84488,103],{"class":102},[92,84490,84491],{"class":207},"','",[92,84493,30808],{"class":102},[92,84495,74026],{"class":1942},[92,84497,103],{"class":102},[92,84499,79777],{"class":5196},[92,84501,79780],{"class":98},[92,84503,84504],{"class":207}," `\u003Cspan class=\"tag\">【赠品】${",[92,84506,79777],{"class":102},[92,84508,84509],{"class":207},"}\u003C\u002Fspan>`",[92,84511,30808],{"class":102},[92,84513,74205],{"class":1942},[92,84515,103],{"class":102},[92,84517,74210],{"class":207},[92,84519,13694],{"class":102},[92,84521,962],{"class":98},[92,84523,70086],{"class":207},[92,84525,84526],{"class":94,"line":33019},[92,84527,84528],{"class":161},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[92,84530,84531,84533,84536,84538,84541,84543,84545,84547,84550,84552,84554,84556,84559,84561,84563],{"class":94,"line":33025},[92,84532,58210],{"class":98},[92,84534,84535],{"class":151}," subtotal",[92,84537,13544],{"class":98},[92,84539,84540],{"class":102}," ((price ",[92,84542,558],{"class":98},[92,84544,5734],{"class":151},[92,84546,6498],{"class":98},[92,84548,84549],{"class":102}," count) ",[92,84551,687],{"class":98},[92,84553,5734],{"class":151},[92,84555,30808],{"class":102},[92,84557,84558],{"class":1942},"toFixed",[92,84560,103],{"class":102},[92,84562,180],{"class":151},[92,84564,109],{"class":102},[92,84566,84567],{"class":94,"line":33035},[92,84568,2379],{"emptyLinePlaceholder":17},[92,84570,84571,84573],{"class":94,"line":33041},[92,84572,73964],{"class":98},[92,84574,70150],{"class":207},[92,84576,84577],{"class":94,"line":33052},[92,84578,84579],{"class":207},"        \u003Cdiv class=\"item\">\n",[92,84581,84582,84585,84587],{"class":94,"line":33058},[92,84583,84584],{"class":207},"          \u003Cimg src=\"${",[92,84586,79802],{"class":102},[92,84588,79834],{"class":207},[92,84590,84591,84594,84596,84599,84601],{"class":94,"line":33068},[92,84592,84593],{"class":207},"          \u003Cp class=\"name\">${",[92,84595,79792],{"class":102},[92,84597,84598],{"class":207},"}${",[92,84600,1278],{"class":102},[92,84602,79844],{"class":207},[92,84604,84605,84608,84610],{"class":94,"line":33073},[92,84606,84607],{"class":207},"          \u003Cp class=\"spec\">${",[92,84609,5167],{"class":102},[92,84611,79844],{"class":207},[92,84613,84614,84617,84619,84621,84623,84625,84627,84629],{"class":94,"line":33079},[92,84615,84616],{"class":207},"          \u003Cp class=\"price\">${",[92,84618,79797],{"class":102},[92,84620,661],{"class":207},[92,84622,84558],{"class":1942},[92,84624,103],{"class":207},[92,84626,180],{"class":151},[92,84628,532],{"class":207},[92,84630,79844],{"class":207},[92,84632,84633,84636,84638],{"class":94,"line":33128},[92,84634,84635],{"class":207},"          \u003Cp class=\"count\">x${",[92,84637,84416],{"class":102},[92,84639,79844],{"class":207},[92,84641,84642,84645,84648],{"class":94,"line":33175},[92,84643,84644],{"class":207},"          \u003Cp class=\"sub-total\">${",[92,84646,84647],{"class":102},"subtotal",[92,84649,79844],{"class":207},[92,84651,84652],{"class":94,"line":33180},[92,84653,84654],{"class":207},"        \u003C\u002Fdiv> \n",[92,84656,84657],{"class":94,"line":33186},[92,84658,84659],{"class":207},"             `\n",[92,84661,84662,84665,84667,84669,84671],{"class":94,"line":33205},[92,84663,84664],{"class":102},"    }).",[92,84666,74205],{"class":1942},[92,84668,103],{"class":102},[92,84670,74210],{"class":207},[92,84672,109],{"class":102},[92,84674,84675],{"class":94,"line":33211},[92,84676,84677],{"class":161},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[92,84679,84680,84682,84684,84686,84688,84691,84693,84696,84698,84700,84702,84705,84708,84710,84713,84715,84717,84719,84722,84724,84726,84728,84730],{"class":94,"line":33231},[92,84681,11201],{"class":98},[92,84683,62767],{"class":151},[92,84685,13544],{"class":98},[92,84687,80030],{"class":102},[92,84689,84690],{"class":1942},"reduce",[92,84692,2355],{"class":102},[92,84694,84695],{"class":5196},"prev",[92,84697,12415],{"class":102},[92,84699,79777],{"class":5196},[92,84701,13694],{"class":102},[92,84703,84704],{"class":98},"=>",[92,84706,84707],{"class":102}," prev ",[92,84709,584],{"class":98},[92,84711,84712],{"class":102}," (item.price ",[92,84714,558],{"class":98},[92,84716,5734],{"class":151},[92,84718,6498],{"class":98},[92,84720,84721],{"class":102}," item.count) ",[92,84723,687],{"class":98},[92,84725,5734],{"class":151},[92,84727,12415],{"class":102},[92,84729,294],{"class":151},[92,84731,109],{"class":102},[92,84733,84734,84736,84738,84740,84743,84745,84747,84750,84752,84754,84756],{"class":94,"line":33237},[92,84735,52389],{"class":102},[92,84737,54381],{"class":1942},[92,84739,103],{"class":102},[92,84741,84742],{"class":207},"'.amount'",[92,84744,74231],{"class":102},[92,84746,148],{"class":98},[92,84748,84749],{"class":102}," total.",[92,84751,84558],{"class":1942},[92,84753,103],{"class":102},[92,84755,180],{"class":151},[92,84757,109],{"class":102},[92,84759,84760,84762,84764],{"class":94,"line":33243},[92,84761,52399],{"class":102},[92,84763,51795],{"class":51282},[92,84765,51289],{"class":102},[92,84767,84768,84770,84772],{"class":94,"line":33253},[92,84769,51767],{"class":102},[92,84771,51782],{"class":51282},[92,84773,51289],{"class":102},[92,84775,84776],{"class":94,"line":33258},[92,84777,2379],{"emptyLinePlaceholder":17},[92,84779,84780,84782,84784],{"class":94,"line":33264},[92,84781,51767],{"class":102},[92,84783,50617],{"class":51282},[92,84785,51289],{"class":102},[33,84787,84789],{"id":84788},"_411-编程思想","4.11 编程思想",[63,84791,84793],{"id":84792},"_4111-面向过程介绍","4.11.1 面向过程介绍",[38,84795,84796,84799],{},[252,84797,84798],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[38,84801,84802],{},"调用就可以了",[38,84804,84805],{},[1441,84806],{"alt":10,"src":84807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[63,84809,84811],{"id":84810},"_4112-面向对象","4.11.2 面向对象",[38,84813,84814],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[38,84816,84817],{},[1441,84818],{"alt":10,"src":84819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[38,84821,84822],{},"面向对象的特性：",[1110,84824,84825,84828,84831],{},[49,84826,84827],{},"封装性",[49,84829,84830],{},"继承性",[49,84832,84833],{},"多态性",[63,84835,84837],{"id":84836},"_4113-两者比较","4.11.3 两者比较",[38,84839,84840],{},[1441,84841],{"alt":10,"src":84842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[33,84844,84846],{"id":84845},"_412-构造函数回顾","4.12 构造函数回顾",[38,84848,84849],{},[1441,84850],{"alt":10,"src":84851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[38,84853,84854],{},[1441,84855],{"alt":10,"src":84856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[38,84858,84859],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[38,84861,84862],{},[1441,84863],{"alt":10,"src":84864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[33,84866,84868],{"id":84867},"_413-原型","4.13 原型",[63,84870,84872],{"id":84871},"_4131-原型对象的认识","4.13.1 原型对象的认识",[38,84874,84875],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[38,84877,84878],{},[1441,84879],{"alt":10,"src":84880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[38,84882,84883],{},[1441,84884],{"alt":10,"src":84885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[38,84887,84888],{},"原型是构造函数的属性，它也是一个对象",[38,84890,84891],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[38,84893,84894],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[83,84896,84898],{"className":53049,"code":84897,"language":53051,"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,84899,84900,84908,84913,84921,84926,84931,84936,84941,84946,84950,84954,84958,84963,84968,84972,84977,84982,84987,84992,84997,85001,85009],{"__ignoreMap":10},[92,84901,84902,84904,84906],{"class":94,"line":95},[92,84903,1013],{"class":102},[92,84905,51782],{"class":51282},[92,84907,51289],{"class":102},[92,84909,84910],{"class":94,"line":11},[92,84911,84912],{"class":161},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[92,84914,84915,84917,84919],{"class":94,"line":1158},[92,84916,52126],{"class":102},[92,84918,51795],{"class":51282},[92,84920,51289],{"class":102},[92,84922,84923],{"class":94,"line":1173},[92,84924,84925],{"class":102},"    function Star(uname, age) {\n",[92,84927,84928],{"class":94,"line":1179},[92,84929,84930],{"class":102},"      this.uname = uname,\n",[92,84932,84933],{"class":94,"line":1193},[92,84934,84935],{"class":102},"        this.age = age\n",[92,84937,84938],{"class":94,"line":1199},[92,84939,84940],{"class":102},"      \u002F\u002F this.sing = function () {\n",[92,84942,84943],{"class":94,"line":1290},[92,84944,84945],{"class":102},"      \u002F\u002F   console.log('唱歌')\n",[92,84947,84948],{"class":94,"line":1296},[92,84949,2379],{"emptyLinePlaceholder":17},[92,84951,84952],{"class":94,"line":1308},[92,84953,60019],{"class":102},[92,84955,84956],{"class":94,"line":1591},[92,84957,2166],{"class":102},[92,84959,84960],{"class":94,"line":1596},[92,84961,84962],{"class":102},"    Star.prototype.sing = function () {\n",[92,84964,84965],{"class":94,"line":1602},[92,84966,84967],{"class":102},"      console.log('唱歌')\n",[92,84969,84970],{"class":94,"line":1607},[92,84971,2166],{"class":102},[92,84973,84974],{"class":94,"line":1621},[92,84975,84976],{"class":102},"    \u002F\u002F console.dir(Star.prototype)\n",[92,84978,84979],{"class":94,"line":1626},[92,84980,84981],{"class":102},"    const pink = new Star('pink', 18)\n",[92,84983,84984],{"class":94,"line":1632},[92,84985,84986],{"class":102},"    const red = new Star('red', 20)\n",[92,84988,84989],{"class":94,"line":1653},[92,84990,84991],{"class":102},"    pink.sing()\n",[92,84993,84994],{"class":94,"line":1658},[92,84995,84996],{"class":102},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[92,84998,84999],{"class":94,"line":1672},[92,85000,2379],{"emptyLinePlaceholder":17},[92,85002,85003,85005,85007],{"class":94,"line":1677},[92,85004,52399],{"class":102},[92,85006,51795],{"class":51282},[92,85008,51289],{"class":102},[92,85010,85011,85013,85015],{"class":94,"line":1706},[92,85012,51767],{"class":102},[92,85014,51782],{"class":51282},[92,85016,51289],{"class":102},[38,85018,85019],{},[1441,85020],{"alt":10,"src":85021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[83,85023,85025],{"className":53049,"code":85024,"language":53051,"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,85026,85027,85035,85043,85048,85053,85058,85063,85067,85072,85077,85082,85086,85091,85095,85099,85104,85108,85116],{"__ignoreMap":10},[92,85028,85029,85031,85033],{"class":94,"line":95},[92,85030,1013],{"class":102},[92,85032,51782],{"class":51282},[92,85034,51289],{"class":102},[92,85036,85037,85039,85041],{"class":94,"line":11},[92,85038,52126],{"class":102},[92,85040,51795],{"class":51282},[92,85042,51289],{"class":102},[92,85044,85045],{"class":94,"line":1158},[92,85046,85047],{"class":102},"    let that\n",[92,85049,85050],{"class":94,"line":1173},[92,85051,85052],{"class":102},"    function Star(uname) {\n",[92,85054,85055],{"class":94,"line":1179},[92,85056,85057],{"class":102},"      this.uname = uname\n",[92,85059,85060],{"class":94,"line":1193},[92,85061,85062],{"class":102},"      that = this\n",[92,85064,85065],{"class":94,"line":1199},[92,85066,2166],{"class":102},[92,85068,85069],{"class":94,"line":1290},[92,85070,85071],{"class":102},"    \u002F\u002F 实例对象是 ldh\n",[92,85073,85074],{"class":94,"line":1296},[92,85075,85076],{"class":102},"    const ldh = new Star('刘德华')\n",[92,85078,85079],{"class":94,"line":1308},[92,85080,85081],{"class":102},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[92,85083,85084],{"class":94,"line":1591},[92,85085,2379],{"emptyLinePlaceholder":17},[92,85087,85088],{"class":94,"line":1596},[92,85089,85090],{"class":102},"    Star.sing = function () {\n",[92,85092,85093],{"class":94,"line":1602},[92,85094,84967],{"class":102},[92,85096,85097],{"class":94,"line":1607},[92,85098,2166],{"class":102},[92,85100,85101],{"class":94,"line":1621},[92,85102,85103],{"class":102},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[92,85105,85106],{"class":94,"line":1626},[92,85107,2379],{"emptyLinePlaceholder":17},[92,85109,85110,85112,85114],{"class":94,"line":1632},[92,85111,52399],{"class":102},[92,85113,51795],{"class":51282},[92,85115,51289],{"class":102},[92,85117,85118,85120,85122],{"class":94,"line":1653},[92,85119,51767],{"class":102},[92,85121,51782],{"class":51282},[92,85123,51289],{"class":102},[38,85125,85126],{},"构造函数的this指向的是实例对象；",[38,85128,85129],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[63,85131,85133],{"id":85132},"_4132-数组扩展方法","4.13.2 数组扩展方法",[38,85135,85136],{},[1441,85137],{"alt":10,"src":85138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[83,85140,85142],{"className":53049,"code":85141,"language":53051,"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,85143,85144,85152,85160,85165,85170,85175,85180,85185,85190,85195,85200,85205,85210,85214,85219,85224,85229,85234,85238,85243,85248,85253,85258,85262,85267,85272,85277,85282,85286,85291,85295,85303],{"__ignoreMap":10},[92,85145,85146,85148,85150],{"class":94,"line":95},[92,85147,1013],{"class":102},[92,85149,51782],{"class":51282},[92,85151,51289],{"class":102},[92,85153,85154,85156,85158],{"class":94,"line":11},[92,85155,52126],{"class":102},[92,85157,51795],{"class":51282},[92,85159,51289],{"class":102},[92,85161,85162],{"class":94,"line":1158},[92,85163,85164],{"class":102},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[92,85166,85167],{"class":94,"line":1173},[92,85168,85169],{"class":102},"    const arr = [1, 2, 3]\n",[92,85171,85172],{"class":94,"line":1179},[92,85173,85174],{"class":102},"    \u002F\u002F 自己定义数组的扩展方法\n",[92,85176,85177],{"class":94,"line":1193},[92,85178,85179],{"class":102},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[92,85181,85182],{"class":94,"line":1199},[92,85183,85184],{"class":102},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[92,85186,85187],{"class":94,"line":1290},[92,85188,85189],{"class":102},"    \u002F\u002F ①.最大值\n",[92,85191,85192],{"class":94,"line":1296},[92,85193,85194],{"class":102},"    Array.prototype.max = function () {\n",[92,85196,85197],{"class":94,"line":1308},[92,85198,85199],{"class":102},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[92,85201,85202],{"class":94,"line":1591},[92,85203,85204],{"class":102},"      return Math.max(...this)\n",[92,85206,85207],{"class":94,"line":1596},[92,85208,85209],{"class":102},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[92,85211,85212],{"class":94,"line":1602},[92,85213,2166],{"class":102},[92,85215,85216],{"class":94,"line":1607},[92,85217,85218],{"class":102},"    console.log(arr.max())\n",[92,85220,85221],{"class":94,"line":1621},[92,85222,85223],{"class":102},"    \u002F\u002F ②最小值\n",[92,85225,85226],{"class":94,"line":1626},[92,85227,85228],{"class":102},"    Array.prototype.min = function () {\n",[92,85230,85231],{"class":94,"line":1632},[92,85232,85233],{"class":102},"      return Math.min(...this)\n",[92,85235,85236],{"class":94,"line":1653},[92,85237,2166],{"class":102},[92,85239,85240],{"class":94,"line":1658},[92,85241,85242],{"class":102},"    console.log(arr.min())\n",[92,85244,85245],{"class":94,"line":1672},[92,85246,85247],{"class":102},"    \u002F\u002F③求和\n",[92,85249,85250],{"class":94,"line":1677},[92,85251,85252],{"class":102},"    Array.prototype.sum = function () {\n",[92,85254,85255],{"class":94,"line":1706},[92,85256,85257],{"class":102},"      return this.reduce((prev, current) => prev + current, 0)\n",[92,85259,85260],{"class":94,"line":1711},[92,85261,2166],{"class":102},[92,85263,85264],{"class":94,"line":1728},[92,85265,85266],{"class":102},"    console.log(arr.sum())\n",[92,85268,85269],{"class":94,"line":1733},[92,85270,85271],{"class":102},"    \u002F\u002F ③排序\n",[92,85273,85274],{"class":94,"line":1738},[92,85275,85276],{"class":102},"    Array.prototype.rever = function () {\n",[92,85278,85279],{"class":94,"line":1743},[92,85280,85281],{"class":102},"      return this.reverse()\n",[92,85283,85284],{"class":94,"line":1757},[92,85285,2166],{"class":102},[92,85287,85288],{"class":94,"line":1762},[92,85289,85290],{"class":102},"    console.log(arr.rever())\n",[92,85292,85293],{"class":94,"line":2556},[92,85294,2379],{"emptyLinePlaceholder":17},[92,85296,85297,85299,85301],{"class":94,"line":2570},[92,85298,52399],{"class":102},[92,85300,51795],{"class":51282},[92,85302,51289],{"class":102},[92,85304,85305,85307,85309],{"class":94,"line":2578},[92,85306,51767],{"class":102},[92,85308,51782],{"class":51282},[92,85310,51289],{"class":102},[38,85312,85313],{},[1441,85314],{"alt":10,"src":85315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[63,85317,85319],{"id":85318},"_4133-constructor-属性","4.13.3 constructor 属性",[38,85321,85322],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[38,85324,85325],{},[1441,85326],{"alt":10,"src":85327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[83,85329,85331],{"className":53049,"code":85330,"language":53051,"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,85332,85333,85341,85349,85354,85359,85363,85368,85373,85378,85386],{"__ignoreMap":10},[92,85334,85335,85337,85339],{"class":94,"line":95},[92,85336,1013],{"class":102},[92,85338,51782],{"class":51282},[92,85340,51289],{"class":102},[92,85342,85343,85345,85347],{"class":94,"line":11},[92,85344,52126],{"class":102},[92,85346,51795],{"class":51282},[92,85348,51289],{"class":102},[92,85350,85351],{"class":94,"line":1158},[92,85352,85353],{"class":102},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[92,85355,85356],{"class":94,"line":1173},[92,85357,85358],{"class":102},"    function Star() {\n",[92,85360,85361],{"class":94,"line":1179},[92,85362,2166],{"class":102},[92,85364,85365],{"class":94,"line":1193},[92,85366,85367],{"class":102},"    const ldh = new Star()\n",[92,85369,85370],{"class":94,"line":1199},[92,85371,85372],{"class":102},"    console.log(Star.prototype)\n",[92,85374,85375],{"class":94,"line":1290},[92,85376,85377],{"class":102},"    console.log(Star.prototype.constructor === Star)\n",[92,85379,85380,85382,85384],{"class":94,"line":1296},[92,85381,52399],{"class":102},[92,85383,51795],{"class":51282},[92,85385,51289],{"class":102},[92,85387,85388,85390,85392],{"class":94,"line":1308},[92,85389,51767],{"class":102},[92,85391,51782],{"class":51282},[92,85393,51289],{"class":102},[38,85395,85396],{},[1441,85397],{"alt":10,"src":85398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[38,85400,85401],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[83,85403,85405],{"className":53049,"code":85404,"language":53051,"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,85406,85407,85415,85419,85423,85427,85432,85437,85442,85446,85451,85456,85461,85466,85471,85476,85480,85484,85489,85494,85499,85503,85508,85513,85517,85521,85525],{"__ignoreMap":10},[92,85408,85409,85411,85413],{"class":94,"line":95},[92,85410,52126],{"class":102},[92,85412,51795],{"class":51282},[92,85414,51289],{"class":102},[92,85416,85417],{"class":94,"line":11},[92,85418,85353],{"class":102},[92,85420,85421],{"class":94,"line":1158},[92,85422,85358],{"class":102},[92,85424,85425],{"class":94,"line":1173},[92,85426,2166],{"class":102},[92,85428,85429],{"class":94,"line":1179},[92,85430,85431],{"class":102},"    \u002F\u002F const ldh = new Star()\n",[92,85433,85434],{"class":94,"line":1193},[92,85435,85436],{"class":102},"    \u002F\u002F console.log(Star.prototype)\n",[92,85438,85439],{"class":94,"line":1199},[92,85440,85441],{"class":102},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[92,85443,85444],{"class":94,"line":1290},[92,85445,2379],{"emptyLinePlaceholder":17},[92,85447,85448],{"class":94,"line":1296},[92,85449,85450],{"class":102},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[92,85452,85453],{"class":94,"line":1308},[92,85454,85455],{"class":102},"    \u002F\u002F Star.prototype.sing = function () {\n",[92,85457,85458],{"class":94,"line":1591},[92,85459,85460],{"class":102},"    \u002F\u002F   console.log('唱歌')\n",[92,85462,85463],{"class":94,"line":1596},[92,85464,85465],{"class":102},"    \u002F\u002F }\n",[92,85467,85468],{"class":94,"line":1602},[92,85469,85470],{"class":102},"    \u002F\u002F Star.prototype.dance = function () {\n",[92,85472,85473],{"class":94,"line":1607},[92,85474,85475],{"class":102},"    \u002F\u002F   console.log('跳舞')\n",[92,85477,85478],{"class":94,"line":1621},[92,85479,85465],{"class":102},[92,85481,85482],{"class":94,"line":1626},[92,85483,85372],{"class":102},[92,85485,85486],{"class":94,"line":1632},[92,85487,85488],{"class":102},"    Star.prototype = {\n",[92,85490,85491],{"class":94,"line":1653},[92,85492,85493],{"class":102},"      sing: function () {\n",[92,85495,85496],{"class":94,"line":1658},[92,85497,85498],{"class":102},"        console.log('唱歌')\n",[92,85500,85501],{"class":94,"line":1672},[92,85502,77874],{"class":102},[92,85504,85505],{"class":94,"line":1677},[92,85506,85507],{"class":102},"      dance: function () {\n",[92,85509,85510],{"class":94,"line":1706},[92,85511,85512],{"class":102},"        console.log('跳舞')\n",[92,85514,85515],{"class":94,"line":1711},[92,85516,52380],{"class":102},[92,85518,85519],{"class":94,"line":1728},[92,85520,2166],{"class":102},[92,85522,85523],{"class":94,"line":1733},[92,85524,85372],{"class":102},[92,85526,85527,85529,85531],{"class":94,"line":1738},[92,85528,52399],{"class":102},[92,85530,51795],{"class":51282},[92,85532,51289],{"class":102},[38,85534,85535],{},"进行输出结果后会发现：",[38,85537,85538],{},[1441,85539],{"alt":10,"src":85540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[38,85542,85543],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[38,85545,85546],{},"所以，要重新指回创造这个原型对象的构造函数",[83,85548,85550],{"className":71195,"code":85549,"language":71197,"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,85551,85552,85566,85571,85576,85587,85600,85605,85616,85630,85634],{"__ignoreMap":10},[92,85553,85554,85557,85559,85562,85564],{"class":94,"line":95},[92,85555,85556],{"class":151},"Star",[92,85558,661],{"class":102},[92,85560,85561],{"class":151},"prototype",[92,85563,13544],{"class":98},[92,85565,15552],{"class":102},[92,85567,85568],{"class":94,"line":11},[92,85569,85570],{"class":161},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[92,85572,85573],{"class":94,"line":1158},[92,85574,85575],{"class":102},"  constructor: Star,\n",[92,85577,85578,85581,85583,85585],{"class":94,"line":1173},[92,85579,85580],{"class":1942},"  sing",[92,85582,51419],{"class":102},[92,85584,54431],{"class":98},[92,85586,54434],{"class":102},[92,85588,85589,85591,85593,85595,85598],{"class":94,"line":1179},[92,85590,73735],{"class":102},[92,85592,58229],{"class":1942},[92,85594,103],{"class":102},[92,85596,85597],{"class":207},"'唱歌'",[92,85599,109],{"class":102},[92,85601,85602],{"class":94,"line":1193},[92,85603,85604],{"class":102},"   },\n",[92,85606,85607,85610,85612,85614],{"class":94,"line":1199},[92,85608,85609],{"class":1942},"   dance",[92,85611,51419],{"class":102},[92,85613,54431],{"class":98},[92,85615,54434],{"class":102},[92,85617,85618,85621,85623,85625,85628],{"class":94,"line":1290},[92,85619,85620],{"class":102},"     console.",[92,85622,58229],{"class":1942},[92,85624,103],{"class":102},[92,85626,85627],{"class":207},"'跳舞'",[92,85629,109],{"class":102},[92,85631,85632],{"class":94,"line":1296},[92,85633,4288],{"class":102},[92,85635,85636],{"class":94,"line":1308},[92,85637,1544],{"class":102},[38,85639,85640],{},[1441,85641],{"alt":10,"src":85642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[38,85644,85645],{},"总结1：",[38,85647,85648],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[38,85650,85651],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[38,85653,85654],{},"constructor指的是他的来源",[38,85656,85657],{},[1441,85658],{"alt":10,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[38,85661,85662],{},[1441,85663],{"alt":10,"src":85664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[38,85666,85667],{},"总结2：",[38,85669,85670],{},[1441,85671],{"alt":10,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[38,85674,85675],{},[1441,85676],{"alt":10,"src":85677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[38,85679,85680],{},[1441,85681],{"alt":10,"src":85682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[63,85684,85686],{"id":85685},"_4134-对象原型","4.13.4 对象原型",[38,85688,85689],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[38,85691,85692],{},"对象原型就是__proto__这个属性",[38,85694,85695],{},[1441,85696],{"alt":10,"src":85697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[38,85699,85700],{},[1441,85701],{"alt":10,"src":85702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[38,85704,85705],{},[1441,85706],{"alt":10,"src":85707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[38,85709,85710],{},[1441,85711],{"alt":10,"src":85712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[83,85714,85716],{"className":53049,"code":85715,"language":53051,"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,85717,85718,85726,85734,85738,85742,85746,85751,85759],{"__ignoreMap":10},[92,85719,85720,85722,85724],{"class":94,"line":95},[92,85721,1013],{"class":102},[92,85723,51782],{"class":51282},[92,85725,51289],{"class":102},[92,85727,85728,85730,85732],{"class":94,"line":11},[92,85729,52126],{"class":102},[92,85731,51795],{"class":51282},[92,85733,51289],{"class":102},[92,85735,85736],{"class":94,"line":1158},[92,85737,85358],{"class":102},[92,85739,85740],{"class":94,"line":1173},[92,85741,2166],{"class":102},[92,85743,85744],{"class":94,"line":1179},[92,85745,85367],{"class":102},[92,85747,85748],{"class":94,"line":1193},[92,85749,85750],{"class":102},"    console.log(ldh)\n",[92,85752,85753,85755,85757],{"class":94,"line":1199},[92,85754,52399],{"class":102},[92,85756,51795],{"class":51282},[92,85758,51289],{"class":102},[92,85760,85761,85763,85765],{"class":94,"line":1290},[92,85762,51767],{"class":102},[92,85764,51782],{"class":51282},[92,85766,51289],{"class":102},[38,85768,85769],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[38,85771,85772],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[38,85774,85775],{},[1441,85776],{"alt":10,"src":85777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[38,85779,85780],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[38,85782,85783],{},"对象原型指向原型对象",[38,85785,85786],{},[1441,85787],{"alt":10,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[38,85790,85791],{},[1441,85792],{"alt":10,"src":85793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[38,85795,85796],{},[1441,85797],{"alt":10,"src":85798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[63,85800,85802],{"id":85801},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[38,85804,85805],{},[1441,85806],{"alt":10,"src":85807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[46,85809,85810,85813,85816,85819],{},[49,85811,85812],{},"构造函数通过new的形式实例化得到实例对象",[49,85814,85815],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[49,85817,85818],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[49,85820,85821],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[38,85823,85824],{},[1441,85825],{"alt":10,"src":85826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[38,85828,85829],{},"题目梳理：",[38,85831,85832],{},[1441,85833],{"alt":10,"src":85834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[63,85836,85838],{"id":85837},"_4136-原型继承","4.13.6 原型继承",[38,85840,85841],{},[1441,85842],{"alt":10,"src":85843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[38,85845,85846],{},[1441,85847],{"alt":10,"src":85848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[38,85850,85851],{},[1441,85852],{"alt":10,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[38,85855,85856],{},[1441,85857],{"alt":10,"src":85858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[38,85860,85861],{},[1441,85862],{"alt":10,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[38,85865,85866],{},[1441,85867],{"alt":10,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[38,85870,85871],{},[1441,85872],{"alt":10,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[38,85875,85876],{},[1441,85877],{"alt":10,"src":85878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[38,85880,85881],{},"回顾：构造函数每次new得到对象都是不同的",[63,85883,85885],{"id":85884},"_4137-原型链","4.13.7 原型链",[38,85887,85888],{},[1441,85889],{"alt":10,"src":85890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[38,85892,85893],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[38,85895,85896],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[38,85898,85899],{},"大哥是Object",[38,85901,85902],{},[1441,85903],{"alt":10,"src":85904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[38,85906,85907],{},[1441,85908],{"alt":10,"src":85909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[38,85911,85912],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[38,85914,85915],{},"万物皆对象",[63,85917,85919],{"id":85918},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[38,85921,85922],{},"模态框",[38,85924,85925],{},"以后遇见这个效果直接使用这个就行",[38,85927,85928],{},[1441,85929],{"alt":10,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[38,85932,85933],{},[1441,85934],{"alt":10,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[38,85937,85938],{},[1441,85939],{"alt":10,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[38,85942,85943],{},[1441,85944],{"alt":10,"src":85945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[38,85947,85948],{},"补充知识点：",[46,85950,85951],{},[49,85952,85953],{},"append()",[38,85955,85956],{},[1441,85957],{"alt":10,"src":85958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[83,85960,85962],{"className":50615,"code":85961,"language":50617,"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,85963,85964,85969,85974,85979,85983,85987,85991,85996,86001,86006,86010],{"__ignoreMap":10},[92,85965,85966],{"class":94,"line":95},[92,85967,85968],{"class":102},"append(param1)\n",[92,85970,85971],{"class":94,"line":11},[92,85972,85973],{"class":102},"append(param1, param2)\n",[92,85975,85976],{"class":94,"line":1158},[92,85977,85978],{"class":102},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[92,85980,85981],{"class":94,"line":1173},[92,85982,2379],{"emptyLinePlaceholder":17},[92,85984,85985],{"class":94,"line":1179},[92,85986,2379],{"emptyLinePlaceholder":17},[92,85988,85989],{"class":94,"line":1193},[92,85990,2379],{"emptyLinePlaceholder":17},[92,85992,85993],{"class":94,"line":1199},[92,85994,85995],{"class":102},"let div = document.createElement(\"div\");\n",[92,85997,85998],{"class":94,"line":1290},[92,85999,86000],{"class":102},"let p = document.createElement(\"p\");\n",[92,86002,86003],{"class":94,"line":1296},[92,86004,86005],{"class":102},"div.append(p);\n",[92,86007,86008],{"class":94,"line":1308},[92,86009,2379],{"emptyLinePlaceholder":17},[92,86011,86012,86015,86017],{"class":94,"line":1591},[92,86013,86014],{"class":102},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[92,86016,38],{"class":51282},[92,86018,86019],{"class":102},"> ]\n",[46,86021,86022],{"start":11},[49,86023,86024],{},"remove()",[38,86026,86027],{},"自己删自己",[38,86029,86030],{},[1441,86031],{"alt":10,"src":86032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[83,86034,86036],{"className":50615,"code":86035,"language":50617,"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,86037,86038,86048,86062,86066,86074,86088,86108,86120,86128,86135,86147,86160,86195,86207,86218,86230,86242,86254,86281,86291,86295,86299,86308,86320,86334,86344,86356,86360,86364,86374,86385,86395,86405,86418,86431,86441,86445,86449,86458,86468,86480,86484,86488,86497,86507,86517,86529,86533,86537,86547,86563,86574,86584,86594,86606,86618,86630,86634,86638,86651,86662,86666,86674,86682,86686,86694,86714,86734,86742,86747,86773,86778,86783,86802,86807,86819,86824,86835,86845,86855,86860,86865,86869,86874,86879,86884,86904,86909,86929,86934,86948,86953,86958,86963,86979,86983,86988,87017,87022,87027,87032,87043,87047,87051,87055,87060,87085,87090,87115,87120,87129,87133,87138,87163,87167,87192,87196,87205,87209,87214,87232,87242,87246,87254,87262,87266],{"__ignoreMap":10},[92,86039,86040,86042,86044,86046],{"class":94,"line":95},[92,86041,51279],{"class":102},[92,86043,51283],{"class":51282},[92,86045,51286],{"class":1942},[92,86047,51289],{"class":102},[92,86049,86050,86052,86054,86056,86058,86060],{"class":94,"line":11},[92,86051,1013],{"class":102},[92,86053,50617],{"class":51282},[92,86055,51298],{"class":1942},[92,86057,148],{"class":102},[92,86059,51303],{"class":207},[92,86061,51289],{"class":102},[92,86063,86064],{"class":94,"line":1158},[92,86065,2379],{"emptyLinePlaceholder":17},[92,86067,86068,86070,86072],{"class":94,"line":1173},[92,86069,1013],{"class":102},[92,86071,51316],{"class":51282},[92,86073,51289],{"class":102},[92,86075,86076,86078,86080,86082,86084,86086],{"class":94,"line":1179},[92,86077,52126],{"class":102},[92,86079,51326],{"class":51282},[92,86081,51329],{"class":1942},[92,86083,148],{"class":102},[92,86085,51334],{"class":207},[92,86087,51289],{"class":102},[92,86089,86090,86092,86094,86096,86098,86100,86102,86104,86106],{"class":94,"line":1193},[92,86091,52126],{"class":102},[92,86093,51326],{"class":51282},[92,86095,14900],{"class":1942},[92,86097,148],{"class":102},[92,86099,51373],{"class":207},[92,86101,51353],{"class":1942},[92,86103,148],{"class":102},[92,86105,51380],{"class":207},[92,86107,51289],{"class":102},[92,86109,86110,86112,86114,86116,86118],{"class":94,"line":1199},[92,86111,52126],{"class":102},[92,86113,51389],{"class":51282},[92,86115,51392],{"class":102},[92,86117,51389],{"class":51282},[92,86119,51289],{"class":102},[92,86121,86122,86124,86126],{"class":94,"line":1290},[92,86123,52126],{"class":102},[92,86125,5106],{"class":51282},[92,86127,51289],{"class":102},[92,86129,86130,86133],{"class":94,"line":1296},[92,86131,86132],{"class":1942},"    .modal",[92,86134,15552],{"class":102},[92,86136,86137,86139,86141,86143,86145],{"class":94,"line":1308},[92,86138,54753],{"class":151},[92,86140,51419],{"class":102},[92,86142,3952],{"class":151},[92,86144,51474],{"class":98},[92,86146,1269],{"class":102},[92,86148,86149,86152,86154,86156,86158],{"class":94,"line":1591},[92,86150,86151],{"class":151},"      min-height",[92,86153,51419],{"class":102},[92,86155,414],{"class":151},[92,86157,51474],{"class":98},[92,86159,1269],{"class":102},[92,86161,86162,86164,86166,86168,86170,86172,86174,86176,86178,86180,86182,86184,86186,86188,86190,86193],{"class":94,"line":1596},[92,86163,78732],{"class":151},[92,86165,51419],{"class":102},[92,86167,294],{"class":151},[92,86169,4072],{"class":151},[92,86171,2017],{"class":151},[92,86173,51474],{"class":98},[92,86175,78749],{"class":151},[92,86177,103],{"class":102},[92,86179,294],{"class":151},[92,86181,12415],{"class":102},[92,86183,294],{"class":151},[92,86185,12415],{"class":102},[92,86187,294],{"class":151},[92,86189,12415],{"class":102},[92,86191,86192],{"class":151},"0.1",[92,86194,2698],{"class":102},[92,86196,86197,86199,86201,86203,86205],{"class":94,"line":1602},[92,86198,55116],{"class":151},[92,86200,51419],{"class":102},[92,86202,396],{"class":151},[92,86204,51474],{"class":98},[92,86206,1269],{"class":102},[92,86208,86209,86211,86213,86216],{"class":94,"line":1607},[92,86210,54741],{"class":151},[92,86212,51419],{"class":102},[92,86214,86215],{"class":151},"fixed",[92,86217,1269],{"class":102},[92,86219,86220,86223,86225,86228],{"class":94,"line":1621},[92,86221,86222],{"class":151},"      z-index",[92,86224,51419],{"class":102},[92,86226,86227],{"class":151},"999",[92,86229,1269],{"class":102},[92,86231,86232,86234,86236,86238,86240],{"class":94,"line":1626},[92,86233,54820],{"class":151},[92,86235,51419],{"class":102},[92,86237,759],{"class":151},[92,86239,431],{"class":98},[92,86241,1269],{"class":102},[92,86243,86244,86246,86248,86250,86252],{"class":94,"line":1632},[92,86245,54929],{"class":151},[92,86247,51419],{"class":102},[92,86249,759],{"class":151},[92,86251,431],{"class":98},[92,86253,1269],{"class":102},[92,86255,86256,86258,86260,86262,86264,86267,86269,86271,86273,86275,86277,86279],{"class":94,"line":1653},[92,86257,78773],{"class":151},[92,86259,51419],{"class":102},[92,86261,78778],{"class":151},[92,86263,103],{"class":102},[92,86265,86266],{"class":151},"-50",[92,86268,431],{"class":98},[92,86270,12415],{"class":102},[92,86272,86266],{"class":151},[92,86274,431],{"class":98},[92,86276,12415],{"class":102},[92,86278,294],{"class":151},[92,86280,2698],{"class":102},[92,86282,86283,86285,86287,86289],{"class":94,"line":1658},[92,86284,54866],{"class":151},[92,86286,51419],{"class":102},[92,86288,60824],{"class":151},[92,86290,1269],{"class":102},[92,86292,86293],{"class":94,"line":1672},[92,86294,2166],{"class":102},[92,86296,86297],{"class":94,"line":1677},[92,86298,2379],{"emptyLinePlaceholder":17},[92,86300,86301,86303,86306],{"class":94,"line":1706},[92,86302,86132],{"class":1942},[92,86304,86305],{"class":1942}," .header",[92,86307,15552],{"class":102},[92,86309,86310,86312,86314,86316,86318],{"class":94,"line":1711},[92,86311,57341],{"class":151},[92,86313,51419],{"class":102},[92,86315,504],{"class":151},[92,86317,51474],{"class":98},[92,86319,1269],{"class":102},[92,86321,86322,86324,86326,86328,86330,86332],{"class":94,"line":1728},[92,86323,54677],{"class":151},[92,86325,51419],{"class":102},[92,86327,294],{"class":151},[92,86329,2017],{"class":151},[92,86331,51474],{"class":98},[92,86333,1269],{"class":102},[92,86335,86336,86338,86340,86342],{"class":94,"line":1733},[92,86337,54741],{"class":151},[92,86339,51419],{"class":102},[92,86341,54746],{"class":151},[92,86343,1269],{"class":102},[92,86345,86346,86348,86350,86352,86354],{"class":94,"line":1738},[92,86347,54904],{"class":151},[92,86349,51419],{"class":102},[92,86351,803],{"class":151},[92,86353,51474],{"class":98},[92,86355,1269],{"class":102},[92,86357,86358],{"class":94,"line":1743},[92,86359,2166],{"class":102},[92,86361,86362],{"class":94,"line":1757},[92,86363,2379],{"emptyLinePlaceholder":17},[92,86365,86366,86368,86370,86372],{"class":94,"line":1762},[92,86367,86132],{"class":1942},[92,86369,86305],{"class":1942},[92,86371,3011],{"class":51282},[92,86373,15552],{"class":102},[92,86375,86376,86379,86381,86383],{"class":94,"line":2556},[92,86377,86378],{"class":151},"      font-style",[92,86380,51419],{"class":102},[92,86382,63823],{"class":151},[92,86384,1269],{"class":102},[92,86386,86387,86389,86391,86393],{"class":94,"line":2570},[92,86388,57398],{"class":151},[92,86390,51419],{"class":102},[92,86392,62052],{"class":151},[92,86394,1269],{"class":102},[92,86396,86397,86399,86401,86403],{"class":94,"line":2578},[92,86398,54741],{"class":151},[92,86400,51419],{"class":102},[92,86402,54813],{"class":151},[92,86404,1269],{"class":102},[92,86406,86407,86410,86412,86414,86416],{"class":94,"line":2583},[92,86408,86409],{"class":151},"      right",[92,86411,51419],{"class":102},[92,86413,678],{"class":151},[92,86415,51474],{"class":98},[92,86417,1269],{"class":102},[92,86419,86420,86422,86424,86427,86429],{"class":94,"line":2589},[92,86421,54929],{"class":151},[92,86423,51419],{"class":102},[92,86425,86426],{"class":151},"-2",[92,86428,51474],{"class":98},[92,86430,1269],{"class":102},[92,86432,86433,86435,86437,86439],{"class":94,"line":2595},[92,86434,62007],{"class":151},[92,86436,51419],{"class":102},[92,86438,62012],{"class":151},[92,86440,1269],{"class":102},[92,86442,86443],{"class":94,"line":2600},[92,86444,2166],{"class":102},[92,86446,86447],{"class":94,"line":7928},[92,86448,2379],{"emptyLinePlaceholder":17},[92,86450,86451,86453,86456],{"class":94,"line":7952},[92,86452,86132],{"class":1942},[92,86454,86455],{"class":1942}," .body",[92,86457,15552],{"class":102},[92,86459,86460,86462,86464,86466],{"class":94,"line":7957},[92,86461,57268],{"class":151},[92,86463,51419],{"class":102},[92,86465,51574],{"class":151},[92,86467,1269],{"class":102},[92,86469,86470,86472,86474,86476,86478],{"class":94,"line":7963},[92,86471,54677],{"class":151},[92,86473,51419],{"class":102},[92,86475,549],{"class":151},[92,86477,51474],{"class":98},[92,86479,1269],{"class":102},[92,86481,86482],{"class":94,"line":7990},[92,86483,2166],{"class":102},[92,86485,86486],{"class":94,"line":7995},[92,86487,2379],{"emptyLinePlaceholder":17},[92,86489,86490,86492,86495],{"class":94,"line":8001},[92,86491,86132],{"class":1942},[92,86493,86494],{"class":1942}," .footer",[92,86496,15552],{"class":102},[92,86498,86499,86501,86503,86505],{"class":94,"line":8013},[92,86500,54991],{"class":151},[92,86502,51419],{"class":102},[92,86504,51459],{"class":151},[92,86506,1269],{"class":102},[92,86508,86509,86511,86513,86515],{"class":94,"line":8025},[92,86510,55002],{"class":151},[92,86512,51419],{"class":102},[92,86514,51562],{"class":151},[92,86516,1269],{"class":102},[92,86518,86519,86521,86523,86525,86527],{"class":94,"line":8037},[92,86520,54677],{"class":151},[92,86522,51419],{"class":102},[92,86524,549],{"class":151},[92,86526,51474],{"class":98},[92,86528,1269],{"class":102},[92,86530,86531],{"class":94,"line":9696},[92,86532,2166],{"class":102},[92,86534,86535],{"class":94,"line":9721},[92,86536,2379],{"emptyLinePlaceholder":17},[92,86538,86539,86541,86543,86545],{"class":94,"line":9744},[92,86540,86132],{"class":1942},[92,86542,86494],{"class":1942},[92,86544,1377],{"class":51282},[92,86546,15552],{"class":102},[92,86548,86549,86551,86553,86555,86557,86559,86561],{"class":94,"line":9768},[92,86550,54677],{"class":151},[92,86552,51419],{"class":102},[92,86554,174],{"class":151},[92,86556,51474],{"class":98},[92,86558,2062],{"class":151},[92,86560,51474],{"class":98},[92,86562,1269],{"class":102},[92,86564,86565,86567,86569,86572],{"class":94,"line":9773},[92,86566,61703],{"class":151},[92,86568,51419],{"class":102},[92,86570,86571],{"class":151},"#ccc",[92,86573,1269],{"class":102},[92,86575,86576,86578,86580,86582],{"class":94,"line":9778},[92,86577,63952],{"class":151},[92,86579,51419],{"class":102},[92,86581,54719],{"class":151},[92,86583,1269],{"class":102},[92,86585,86586,86588,86590,86592],{"class":94,"line":9783},[92,86587,57398],{"class":151},[92,86589,51419],{"class":102},[92,86591,60824],{"class":151},[92,86593,1269],{"class":102},[92,86595,86596,86598,86600,86602,86604],{"class":94,"line":9792},[92,86597,55116],{"class":151},[92,86599,51419],{"class":102},[92,86601,180],{"class":151},[92,86603,51474],{"class":98},[92,86605,1269],{"class":102},[92,86607,86608,86610,86612,86614,86616],{"class":94,"line":9797},[92,86609,61732],{"class":151},[92,86611,51419],{"class":102},[92,86613,549],{"class":151},[92,86615,51474],{"class":98},[92,86617,1269],{"class":102},[92,86619,86620,86622,86624,86626,86628],{"class":94,"line":9803},[92,86621,54904],{"class":151},[92,86623,51419],{"class":102},[92,86625,652],{"class":151},[92,86627,51474],{"class":98},[92,86629,1269],{"class":102},[92,86631,86632],{"class":94,"line":9824},[92,86633,2166],{"class":102},[92,86635,86636],{"class":94,"line":9830},[92,86637,2379],{"emptyLinePlaceholder":17},[92,86639,86640,86642,86644,86646,86649],{"class":94,"line":9844},[92,86641,86132],{"class":1942},[92,86643,86494],{"class":1942},[92,86645,1377],{"class":51282},[92,86647,86648],{"class":1942},".submit",[92,86650,15552],{"class":102},[92,86652,86653,86655,86657,86660],{"class":94,"line":9850},[92,86654,54866],{"class":151},[92,86656,51419],{"class":102},[92,86658,86659],{"class":151},"#369",[92,86661,1269],{"class":102},[92,86663,86664],{"class":94,"line":9877},[92,86665,2166],{"class":102},[92,86667,86668,86670,86672],{"class":94,"line":9886},[92,86669,52399],{"class":102},[92,86671,5106],{"class":51282},[92,86673,51289],{"class":102},[92,86675,86676,86678,86680],{"class":94,"line":9892},[92,86677,51767],{"class":102},[92,86679,51316],{"class":51282},[92,86681,51289],{"class":102},[92,86683,86684],{"class":94,"line":9900},[92,86685,2379],{"emptyLinePlaceholder":17},[92,86687,86688,86690,86692],{"class":94,"line":9905},[92,86689,1013],{"class":102},[92,86691,51782],{"class":51282},[92,86693,51289],{"class":102},[92,86695,86696,86698,86700,86702,86704,86707,86710,86712],{"class":94,"line":16584},[92,86697,52126],{"class":102},[92,86699,53869],{"class":51282},[92,86701,14939],{"class":1942},[92,86703,148],{"class":102},[92,86705,86706],{"class":207},"\"delete\"",[92,86708,86709],{"class":102},">删除\u003C\u002F",[92,86711,53869],{"class":51282},[92,86713,51289],{"class":102},[92,86715,86716,86718,86720,86722,86724,86727,86730,86732],{"class":94,"line":16590},[92,86717,52126],{"class":102},[92,86719,53869],{"class":51282},[92,86721,14939],{"class":1942},[92,86723,148],{"class":102},[92,86725,86726],{"class":207},"\"login\"",[92,86728,86729],{"class":102},">登录\u003C\u002F",[92,86731,53869],{"class":51282},[92,86733,51289],{"class":102},[92,86735,86736,86738,86740],{"class":94,"line":16613},[92,86737,52126],{"class":102},[92,86739,51795],{"class":51282},[92,86741,51289],{"class":102},[92,86743,86744],{"class":94,"line":16619},[92,86745,86746],{"class":161},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[92,86748,86749,86751,86754,86756,86758,86760,86762,86764,86767,86769,86771],{"class":94,"line":16642},[92,86750,70066],{"class":98},[92,86752,86753],{"class":1942}," Modal",[92,86755,103],{"class":102},[92,86757,51389],{"class":5196},[92,86759,13544],{"class":98},[92,86761,69912],{"class":207},[92,86763,12415],{"class":102},[92,86765,86766],{"class":5196},"message",[92,86768,13544],{"class":98},[92,86770,69912],{"class":207},[92,86772,12422],{"class":102},[92,86774,86775],{"class":94,"line":16656},[92,86776,86777],{"class":161},"      \u002F\u002F 创建Model 模态框盒子\n",[92,86779,86780],{"class":94,"line":16676},[92,86781,86782],{"class":161},"      \u002F\u002F 1.1 创建div标签\n",[92,86784,86785,86787,86790,86792,86794,86796,86798,86800],{"class":94,"line":16682},[92,86786,70033],{"class":151},[92,86788,86789],{"class":102},".modalBox ",[92,86791,148],{"class":98},[92,86793,54378],{"class":102},[92,86795,70133],{"class":1942},[92,86797,103],{"class":102},[92,86799,81913],{"class":207},[92,86801,109],{"class":102},[92,86803,86804],{"class":94,"line":16693},[92,86805,86806],{"class":161},"      \u002F\u002F 1.2 给div 添加类名为model\n",[92,86808,86809,86811,86814,86816],{"class":94,"line":16716},[92,86810,70033],{"class":151},[92,86812,86813],{"class":102},".modalBox.className ",[92,86815,148],{"class":98},[92,86817,86818],{"class":207}," 'modal'\n",[92,86820,86821],{"class":94,"line":16738},[92,86822,86823],{"class":161},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[92,86825,86826,86828,86831,86833],{"class":94,"line":16743},[92,86827,70033],{"class":151},[92,86829,86830],{"class":102},".modalBox.innerHTML ",[92,86832,148],{"class":98},[92,86834,70150],{"class":207},[92,86836,86837,86840,86842],{"class":94,"line":16749},[92,86838,86839],{"class":207},"        \u003Cdiv class=\"header\">${",[92,86841,51389],{"class":102},[92,86843,86844],{"class":207},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[92,86846,86847,86850,86852],{"class":94,"line":16763},[92,86848,86849],{"class":207},"        \u003Cdiv class=\"body\">${",[92,86851,86766],{"class":102},[92,86853,86854],{"class":207},"}\u003C\u002Fdiv>\n",[92,86856,86857],{"class":94,"line":16776},[92,86858,86859],{"class":207},"      `\n",[92,86861,86862],{"class":94,"line":16781},[92,86863,86864],{"class":161},"      \u002F\u002F console.log(this.modalBox)\n",[92,86866,86867],{"class":94,"line":16795},[92,86868,2166],{"class":102},[92,86870,86871],{"class":94,"line":16800},[92,86872,86873],{"class":161},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[92,86875,86876],{"class":94,"line":16806},[92,86877,86878],{"class":161},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[92,86880,86881],{"class":94,"line":16811},[92,86882,86883],{"class":161},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[92,86885,86886,86889,86891,86893,86895,86898,86900,86902],{"class":94,"line":16825},[92,86887,86888],{"class":151},"    Modal",[92,86890,661],{"class":102},[92,86892,85561],{"class":151},[92,86894,661],{"class":102},[92,86896,86897],{"class":1942},"open",[92,86899,13544],{"class":98},[92,86901,58900],{"class":98},[92,86903,54434],{"class":102},[92,86905,86906],{"class":94,"line":16830},[92,86907,86908],{"class":161},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[92,86910,86911,86913,86916,86918,86920,86922,86924,86927],{"class":94,"line":16835},[92,86912,58210],{"class":98},[92,86914,86915],{"class":151}," box",[92,86917,13544],{"class":98},[92,86919,54378],{"class":102},[92,86921,54381],{"class":1942},[92,86923,103],{"class":102},[92,86925,86926],{"class":207},"'.modal'",[92,86928,109],{"class":102},[92,86930,86931],{"class":94,"line":16849},[92,86932,86933],{"class":161},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[92,86935,86936,86939,86941,86944,86946],{"class":94,"line":16861},[92,86937,86938],{"class":102},"      box ",[92,86940,1694],{"class":98},[92,86942,86943],{"class":102}," box.",[92,86945,56988],{"class":1942},[92,86947,1955],{"class":102},[92,86949,86950],{"class":94,"line":16866},[92,86951,86952],{"class":161},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[92,86954,86955],{"class":94,"line":16879},[92,86956,86957],{"class":161},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[92,86959,86960],{"class":94,"line":16884},[92,86961,86962],{"class":161},"      \u002F\u002F append可以增加对象\n",[92,86964,86965,86968,86971,86973,86976],{"class":94,"line":16889},[92,86966,86967],{"class":102},"      document.body.",[92,86969,86970],{"class":1942},"append",[92,86972,103],{"class":102},[92,86974,86975],{"class":151},"this",[92,86977,86978],{"class":102},".modalBox)\n",[92,86980,86981],{"class":94,"line":16894},[92,86982,2379],{"emptyLinePlaceholder":17},[92,86984,86985],{"class":94,"line":16907},[92,86986,86987],{"class":161},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[92,86989,86990,86992,86995,86997,86999,87002,87004,87006,87008,87010,87013,87015],{"class":94,"line":16912},[92,86991,70033],{"class":151},[92,86993,86994],{"class":102},".modalBox.",[92,86996,54381],{"class":1942},[92,86998,103],{"class":102},[92,87000,87001],{"class":207},"'i'",[92,87003,30808],{"class":102},[92,87005,57795],{"class":1942},[92,87007,103],{"class":102},[92,87009,57800],{"class":207},[92,87011,87012],{"class":102},", () ",[92,87014,84704],{"class":98},[92,87016,15552],{"class":102},[92,87018,87019],{"class":94,"line":32615},[92,87020,87021],{"class":161},"        \u002F\u002F 这个地方需要用到箭头函数\n",[92,87023,87024],{"class":94,"line":32621},[92,87025,87026],{"class":161},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[92,87028,87029],{"class":94,"line":32627},[92,87030,87031],{"class":161},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[92,87033,87034,87036,87038,87041],{"class":94,"line":32633},[92,87035,64708],{"class":151},[92,87037,661],{"class":102},[92,87039,87040],{"class":1942},"close",[92,87042,1955],{"class":102},[92,87044,87045],{"class":94,"line":32639},[92,87046,64797],{"class":102},[92,87048,87049],{"class":94,"line":32650},[92,87050,2166],{"class":102},[92,87052,87053],{"class":94,"line":32656},[92,87054,2379],{"emptyLinePlaceholder":17},[92,87056,87057],{"class":94,"line":32676},[92,87058,87059],{"class":161},"    \u002F\u002F 测试一下 点击 删除按钮\n",[92,87061,87062,87064,87066,87068,87071,87073,87075,87077,87079,87081,87083],{"class":94,"line":32682},[92,87063,52389],{"class":102},[92,87065,54381],{"class":1942},[92,87067,103],{"class":102},[92,87069,87070],{"class":207},"'#delete'",[92,87072,30808],{"class":102},[92,87074,57795],{"class":1942},[92,87076,103],{"class":102},[92,87078,57800],{"class":207},[92,87080,87012],{"class":102},[92,87082,84704],{"class":98},[92,87084,15552],{"class":102},[92,87086,87087],{"class":94,"line":32693},[92,87088,87089],{"class":161},"      \u002F\u002F 先调用Model构造函数\n",[92,87091,87092,87094,87097,87099,87101,87103,87105,87108,87110,87113],{"class":94,"line":32699},[92,87093,58210],{"class":98},[92,87095,87096],{"class":151}," del",[92,87098,13544],{"class":98},[92,87100,11558],{"class":98},[92,87102,86753],{"class":1942},[92,87104,103],{"class":102},[92,87106,87107],{"class":207},"'温馨的提示'",[92,87109,12415],{"class":102},[92,87111,87112],{"class":207},"'您没有删除权限操作'",[92,87114,109],{"class":102},[92,87116,87117],{"class":94,"line":32705},[92,87118,87119],{"class":161},"      \u002F\u002F 实例对象调用open方法\n",[92,87121,87122,87125,87127],{"class":94,"line":32711},[92,87123,87124],{"class":102},"      del.",[92,87126,86897],{"class":1942},[92,87128,1955],{"class":102},[92,87130,87131],{"class":94,"line":32717},[92,87132,33443],{"class":102},[92,87134,87135],{"class":94,"line":32723},[92,87136,87137],{"class":161},"    \u002F\u002F 测试一下 点击 登录按钮\n",[92,87139,87140,87142,87144,87146,87149,87151,87153,87155,87157,87159,87161],{"class":94,"line":32729},[92,87141,52389],{"class":102},[92,87143,54381],{"class":1942},[92,87145,103],{"class":102},[92,87147,87148],{"class":207},"'#login'",[92,87150,30808],{"class":102},[92,87152,57795],{"class":1942},[92,87154,103],{"class":102},[92,87156,57800],{"class":207},[92,87158,87012],{"class":102},[92,87160,84704],{"class":98},[92,87162,15552],{"class":102},[92,87164,87165],{"class":94,"line":32735},[92,87166,87089],{"class":161},[92,87168,87169,87171,87174,87176,87178,87180,87182,87185,87187,87190],{"class":94,"line":32755},[92,87170,58210],{"class":98},[92,87172,87173],{"class":151}," log",[92,87175,13544],{"class":98},[92,87177,11558],{"class":98},[92,87179,86753],{"class":1942},[92,87181,103],{"class":102},[92,87183,87184],{"class":207},"'友情提示'",[92,87186,12415],{"class":102},[92,87188,87189],{"class":207},"'您还没有登录呢'",[92,87191,109],{"class":102},[92,87193,87194],{"class":94,"line":32761},[92,87195,87119],{"class":161},[92,87197,87198,87201,87203],{"class":94,"line":32777},[92,87199,87200],{"class":102},"      log.",[92,87202,86897],{"class":1942},[92,87204,1955],{"class":102},[92,87206,87207],{"class":94,"line":32783},[92,87208,33443],{"class":102},[92,87210,87211],{"class":94,"line":32797},[92,87212,87213],{"class":161},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[92,87215,87216,87218,87220,87222,87224,87226,87228,87230],{"class":94,"line":32803},[92,87217,86888],{"class":151},[92,87219,661],{"class":102},[92,87221,85561],{"class":151},[92,87223,661],{"class":102},[92,87225,87040],{"class":1942},[92,87227,13544],{"class":98},[92,87229,58900],{"class":98},[92,87231,54434],{"class":102},[92,87233,87234,87236,87238,87240],{"class":94,"line":32818},[92,87235,70033],{"class":151},[92,87237,86994],{"class":102},[92,87239,56988],{"class":1942},[92,87241,1955],{"class":102},[92,87243,87244],{"class":94,"line":32824},[92,87245,2166],{"class":102},[92,87247,87248,87250,87252],{"class":94,"line":32833},[92,87249,52399],{"class":102},[92,87251,51795],{"class":51282},[92,87253,51289],{"class":102},[92,87255,87256,87258,87260],{"class":94,"line":32839},[92,87257,51767],{"class":102},[92,87259,51782],{"class":51282},[92,87261,51289],{"class":102},[92,87263,87264],{"class":94,"line":32848},[92,87265,2379],{"emptyLinePlaceholder":17},[92,87267,87268,87270,87272],{"class":94,"line":32854},[92,87269,51767],{"class":102},[92,87271,50617],{"class":51282},[92,87273,51289],{"class":102},[38,87275,87276],{},[1441,87277],{"alt":10,"src":87278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[33,87280,87282],{"id":87281},"_414-深浅拷贝","4.14 深浅拷贝",[63,87284,87286],{"id":87285},"_4141-浅拷贝","4.14.1 浅拷贝",[38,87288,87289],{},[1441,87290],{"alt":10,"src":87291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[38,87293,87294],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[38,87296,87297],{},[1441,87298],{"alt":10,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[38,87301,87302],{},[1441,87303],{"alt":10,"src":87304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[38,87306,87307],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[38,87309,87310],{},[1441,87311],{"alt":10,"src":87312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[38,87314,11312],{},[38,87316,87317],{},[1441,87318],{"alt":10,"src":87319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[63,87321,87323],{"id":87322},"_4142-深拷贝","4.14.2 深拷贝",[38,87325,87326],{},"深拷贝：拷贝的是对象，不是地址",[38,87328,87329],{},"常用的三种方法：",[46,87331,87332,87335,87338],{},[49,87333,87334],{},"通过递归实现深拷贝",[49,87336,87337],{},"lodash\u002FcloneDeep",[49,87339,87340],{},"通过JSON.stringify()实现",[21978,87342,87344],{"id":87343},"_41421-递归函数","4.14.2.1 递归函数",[38,87346,87347],{},[1441,87348],{"alt":10,"src":87349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[46,87351,87352],{},[49,87353,87354],{},"死递归占溢出：",[83,87356,87358],{"className":53049,"code":87357,"language":53051,"meta":10,"style":10},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[89,87359,87360,87368,87376,87380,87385,87389,87394,87402],{"__ignoreMap":10},[92,87361,87362,87364,87366],{"class":94,"line":95},[92,87363,1013],{"class":102},[92,87365,51782],{"class":51282},[92,87367,51289],{"class":102},[92,87369,87370,87372,87374],{"class":94,"line":11},[92,87371,52126],{"class":102},[92,87373,51795],{"class":51282},[92,87375,51289],{"class":102},[92,87377,87378],{"class":94,"line":1158},[92,87379,77125],{"class":102},[92,87381,87382],{"class":94,"line":1173},[92,87383,87384],{"class":102},"      fn()\n",[92,87386,87387],{"class":94,"line":1179},[92,87388,2166],{"class":102},[92,87390,87391],{"class":94,"line":1193},[92,87392,87393],{"class":102},"    fn()\n",[92,87395,87396,87398,87400],{"class":94,"line":1199},[92,87397,52399],{"class":102},[92,87399,51795],{"class":51282},[92,87401,51289],{"class":102},[92,87403,87404,87406,87408],{"class":94,"line":1290},[92,87405,51767],{"class":102},[92,87407,51782],{"class":51282},[92,87409,51289],{"class":102},[46,87411,87412],{"start":11},[49,87413,87414],{},"递归函数要加判断条件：",[38,87416,87417],{},[1441,87418],{"alt":10,"src":87419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[46,87421,87422],{"start":1158},[49,87423,87424],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[83,87426,87428],{"className":50615,"code":87427,"language":50617,"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,87429,87430,87440,87454,87458,87466,87480,87500,87512,87520,87524,87532,87544,87552,87560,87585,87597,87601,87608,87616,87624,87628],{"__ignoreMap":10},[92,87431,87432,87434,87436,87438],{"class":94,"line":95},[92,87433,51279],{"class":102},[92,87435,51283],{"class":51282},[92,87437,51286],{"class":1942},[92,87439,51289],{"class":102},[92,87441,87442,87444,87446,87448,87450,87452],{"class":94,"line":11},[92,87443,1013],{"class":102},[92,87445,50617],{"class":51282},[92,87447,51298],{"class":1942},[92,87449,148],{"class":102},[92,87451,51303],{"class":207},[92,87453,51289],{"class":102},[92,87455,87456],{"class":94,"line":1158},[92,87457,2379],{"emptyLinePlaceholder":17},[92,87459,87460,87462,87464],{"class":94,"line":1173},[92,87461,1013],{"class":102},[92,87463,51316],{"class":51282},[92,87465,51289],{"class":102},[92,87467,87468,87470,87472,87474,87476,87478],{"class":94,"line":1179},[92,87469,52126],{"class":102},[92,87471,51326],{"class":51282},[92,87473,51329],{"class":1942},[92,87475,148],{"class":102},[92,87477,51334],{"class":207},[92,87479,51289],{"class":102},[92,87481,87482,87484,87486,87488,87490,87492,87494,87496,87498],{"class":94,"line":1193},[92,87483,52126],{"class":102},[92,87485,51326],{"class":51282},[92,87487,14900],{"class":1942},[92,87489,148],{"class":102},[92,87491,51373],{"class":207},[92,87493,51353],{"class":1942},[92,87495,148],{"class":102},[92,87497,51380],{"class":207},[92,87499,51289],{"class":102},[92,87501,87502,87504,87506,87508,87510],{"class":94,"line":1199},[92,87503,52126],{"class":102},[92,87505,51389],{"class":51282},[92,87507,51392],{"class":102},[92,87509,51389],{"class":51282},[92,87511,51289],{"class":102},[92,87513,87514,87516,87518],{"class":94,"line":1290},[92,87515,51767],{"class":102},[92,87517,51316],{"class":51282},[92,87519,51289],{"class":102},[92,87521,87522],{"class":94,"line":1296},[92,87523,2379],{"emptyLinePlaceholder":17},[92,87525,87526,87528,87530],{"class":94,"line":1308},[92,87527,1013],{"class":102},[92,87529,51782],{"class":51282},[92,87531,51289],{"class":102},[92,87533,87534,87536,87538,87540,87542],{"class":94,"line":1591},[92,87535,52126],{"class":102},[92,87537,51593],{"class":51282},[92,87539,55296],{"class":102},[92,87541,51593],{"class":51282},[92,87543,51289],{"class":102},[92,87545,87546,87548,87550],{"class":94,"line":1596},[92,87547,52126],{"class":102},[92,87549,51795],{"class":51282},[92,87551,51289],{"class":102},[92,87553,87554,87556,87558],{"class":94,"line":1602},[92,87555,70066],{"class":98},[92,87557,73755],{"class":1942},[92,87559,10833],{"class":102},[92,87561,87562,87564,87566,87568,87570,87572,87574,87576,87578,87580,87583],{"class":94,"line":1607},[92,87563,55753],{"class":102},[92,87565,54381],{"class":1942},[92,87567,103],{"class":102},[92,87569,81913],{"class":207},[92,87571,74231],{"class":102},[92,87573,148],{"class":98},[92,87575,11558],{"class":98},[92,87577,73771],{"class":1942},[92,87579,17241],{"class":102},[92,87581,87582],{"class":1942},"toLocaleString",[92,87584,1955],{"class":102},[92,87586,87587,87590,87593,87595],{"class":94,"line":1621},[92,87588,87589],{"class":1942},"      setTimeout",[92,87591,87592],{"class":102},"(getTime, ",[92,87594,6390],{"class":151},[92,87596,109],{"class":102},[92,87598,87599],{"class":94,"line":1626},[92,87600,2166],{"class":102},[92,87602,87603,87606],{"class":94,"line":1632},[92,87604,87605],{"class":1942},"    getTime",[92,87607,1955],{"class":102},[92,87609,87610,87612,87614],{"class":94,"line":1653},[92,87611,52399],{"class":102},[92,87613,51795],{"class":51282},[92,87615,51289],{"class":102},[92,87617,87618,87620,87622],{"class":94,"line":1658},[92,87619,51767],{"class":102},[92,87621,51782],{"class":51282},[92,87623,51289],{"class":102},[92,87625,87626],{"class":94,"line":1672},[92,87627,2379],{"emptyLinePlaceholder":17},[92,87629,87630,87632,87634],{"class":94,"line":1677},[92,87631,51767],{"class":102},[92,87633,50617],{"class":51282},[92,87635,51289],{"class":102},[38,87637,87638],{},[1441,87639],{"alt":10,"src":87640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[46,87642,87643],{"start":1173},[49,87644,87334],{},[38,87646,87647],{},[1441,87648],{"alt":10,"src":87649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[38,87651,87652],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[38,87654,39171],{},[38,87656,87657],{},"这个是简易版的递归函数深拷贝",[38,87659,87660],{},"一定要注意先数组再对象，因为万物皆可对象",[83,87662,87664],{"className":50615,"code":87663,"language":50617,"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,87665,87666,87676,87690,87694,87702,87716,87736,87748,87756,87760,87768,87776,87786,87795,87803,87819,87823,87831,87835,87839,87851,87856,87875,87891,87896,87901,87906,87921,87926,87931,87940,87948,87965,87973,87979,87987,87992,87997,88006,88010,88014,88018,88029,88038,88048,88062,88072,88080,88088,88096,88100],{"__ignoreMap":10},[92,87667,87668,87670,87672,87674],{"class":94,"line":95},[92,87669,51279],{"class":102},[92,87671,51283],{"class":51282},[92,87673,51286],{"class":1942},[92,87675,51289],{"class":102},[92,87677,87678,87680,87682,87684,87686,87688],{"class":94,"line":11},[92,87679,1013],{"class":102},[92,87681,50617],{"class":51282},[92,87683,51298],{"class":1942},[92,87685,148],{"class":102},[92,87687,51303],{"class":207},[92,87689,51289],{"class":102},[92,87691,87692],{"class":94,"line":1158},[92,87693,2379],{"emptyLinePlaceholder":17},[92,87695,87696,87698,87700],{"class":94,"line":1173},[92,87697,1013],{"class":102},[92,87699,51316],{"class":51282},[92,87701,51289],{"class":102},[92,87703,87704,87706,87708,87710,87712,87714],{"class":94,"line":1179},[92,87705,52126],{"class":102},[92,87707,51326],{"class":51282},[92,87709,51329],{"class":1942},[92,87711,148],{"class":102},[92,87713,51334],{"class":207},[92,87715,51289],{"class":102},[92,87717,87718,87720,87722,87724,87726,87728,87730,87732,87734],{"class":94,"line":1193},[92,87719,52126],{"class":102},[92,87721,51326],{"class":51282},[92,87723,14900],{"class":1942},[92,87725,148],{"class":102},[92,87727,51373],{"class":207},[92,87729,51353],{"class":1942},[92,87731,148],{"class":102},[92,87733,51380],{"class":207},[92,87735,51289],{"class":102},[92,87737,87738,87740,87742,87744,87746],{"class":94,"line":1199},[92,87739,52126],{"class":102},[92,87741,51389],{"class":51282},[92,87743,51392],{"class":102},[92,87745,51389],{"class":51282},[92,87747,51289],{"class":102},[92,87749,87750,87752,87754],{"class":94,"line":1290},[92,87751,51767],{"class":102},[92,87753,51316],{"class":51282},[92,87755,51289],{"class":102},[92,87757,87758],{"class":94,"line":1296},[92,87759,2379],{"emptyLinePlaceholder":17},[92,87761,87762,87764,87766],{"class":94,"line":1308},[92,87763,1013],{"class":102},[92,87765,51782],{"class":51282},[92,87767,51289],{"class":102},[92,87769,87770,87772,87774],{"class":94,"line":1591},[92,87771,52126],{"class":102},[92,87773,51795],{"class":51282},[92,87775,51289],{"class":102},[92,87777,87778,87780,87782,87784],{"class":94,"line":1596},[92,87779,11201],{"class":98},[92,87781,69953],{"class":151},[92,87783,13544],{"class":98},[92,87785,15552],{"class":102},[92,87787,87788,87790,87793],{"class":94,"line":1602},[92,87789,71598],{"class":102},[92,87791,87792],{"class":207},"'pink'",[92,87794,31448],{"class":102},[92,87796,87797,87799,87801],{"class":94,"line":1607},[92,87798,71608],{"class":102},[92,87800,753],{"class":151},[92,87802,31448],{"class":102},[92,87804,87805,87808,87811,87813,87816],{"class":94,"line":1621},[92,87806,87807],{"class":102},"      hobby: [",[92,87809,87810],{"class":207},"'乒乓球'",[92,87812,12415],{"class":102},[92,87814,87815],{"class":207},"'足球'",[92,87817,87818],{"class":102},"],\n",[92,87820,87821],{"class":94,"line":1626},[92,87822,77854],{"class":102},[92,87824,87825,87828],{"class":94,"line":1632},[92,87826,87827],{"class":102},"        baby: ",[92,87829,87830],{"class":207},"'小pink'\n",[92,87832,87833],{"class":94,"line":1653},[92,87834,52380],{"class":102},[92,87836,87837],{"class":94,"line":1658},[92,87838,2166],{"class":102},[92,87840,87841,87843,87846,87848],{"class":94,"line":1672},[92,87842,11201],{"class":98},[92,87844,87845],{"class":151}," o",[92,87847,13544],{"class":98},[92,87849,87850],{"class":102}," {}\n",[92,87852,87853],{"class":94,"line":1677},[92,87854,87855],{"class":161},"    \u002F\u002F 拷贝函数\n",[92,87857,87858,87860,87863,87865,87868,87870,87873],{"class":94,"line":1706},[92,87859,70066],{"class":98},[92,87861,87862],{"class":1942}," deepCopy",[92,87864,103],{"class":102},[92,87866,87867],{"class":5196},"newObj",[92,87869,12415],{"class":102},[92,87871,87872],{"class":5196},"oldObj",[92,87874,12422],{"class":102},[92,87876,87877,87879,87881,87883,87886,87888],{"class":94,"line":1711},[92,87878,52266],{"class":98},[92,87880,1637],{"class":102},[92,87882,51829],{"class":98},[92,87884,87885],{"class":102}," k ",[92,87887,26025],{"class":98},[92,87889,87890],{"class":102}," oldObj) {\n",[92,87892,87893],{"class":94,"line":1728},[92,87894,87895],{"class":161},"        \u002F\u002F 处理数组的问题\n",[92,87897,87898],{"class":94,"line":1733},[92,87899,87900],{"class":161},"        \u002F\u002F 判断是否属于数组\n",[92,87902,87903],{"class":94,"line":1738},[92,87904,87905],{"class":161},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[92,87907,87908,87910,87913,87916,87919],{"class":94,"line":1743},[92,87909,2476],{"class":98},[92,87911,87912],{"class":102}," (oldObj[k] ",[92,87914,87915],{"class":98},"instanceof",[92,87917,87918],{"class":1942}," Array",[92,87920,12422],{"class":102},[92,87922,87923],{"class":94,"line":1757},[92,87924,87925],{"class":161},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[92,87927,87928],{"class":94,"line":1762},[92,87929,87930],{"class":161},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[92,87932,87933,87936,87938],{"class":94,"line":2556},[92,87934,87935],{"class":102},"          newObj[k] ",[92,87937,148],{"class":98},[92,87939,51820],{"class":102},[92,87941,87942,87945],{"class":94,"line":2570},[92,87943,87944],{"class":1942},"          deepCopy",[92,87946,87947],{"class":102},"(newObj[k], oldObj[k])\n",[92,87949,87950,87952,87954,87956,87958,87960,87963],{"class":94,"line":2578},[92,87951,80062],{"class":102},[92,87953,1680],{"class":98},[92,87955,1683],{"class":98},[92,87957,87912],{"class":102},[92,87959,87915],{"class":98},[92,87961,87962],{"class":1942}," Object",[92,87964,12422],{"class":102},[92,87966,87967,87969,87971],{"class":94,"line":2583},[92,87968,87935],{"class":102},[92,87970,148],{"class":98},[92,87972,87850],{"class":102},[92,87974,87975,87977],{"class":94,"line":2589},[92,87976,87944],{"class":1942},[92,87978,87947],{"class":102},[92,87980,87981,87983,87985],{"class":94,"line":2595},[92,87982,80062],{"class":102},[92,87984,1680],{"class":98},[92,87986,15552],{"class":102},[92,87988,87989],{"class":94,"line":2600},[92,87990,87991],{"class":161},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[92,87993,87994],{"class":94,"line":7928},[92,87995,87996],{"class":161},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[92,87998,87999,88001,88003],{"class":94,"line":7952},[92,88000,87935],{"class":102},[92,88002,148],{"class":98},[92,88004,88005],{"class":102}," oldObj[k]\n",[92,88007,88008],{"class":94,"line":7957},[92,88009,2508],{"class":102},[92,88011,88012],{"class":94,"line":7963},[92,88013,52380],{"class":102},[92,88015,88016],{"class":94,"line":7990},[92,88017,2166],{"class":102},[92,88019,88020,88023,88026],{"class":94,"line":7995},[92,88021,88022],{"class":1942},"    deepCopy",[92,88024,88025],{"class":102},"(o, obj) ",[92,88027,88028],{"class":161},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[92,88030,88031,88033,88035],{"class":94,"line":8001},[92,88032,73735],{"class":102},[92,88034,58229],{"class":1942},[92,88036,88037],{"class":102},"(o)\n",[92,88039,88040,88043,88045],{"class":94,"line":8013},[92,88041,88042],{"class":102},"    o.age ",[92,88044,148],{"class":98},[92,88046,88047],{"class":151}," 20\n",[92,88049,88050,88053,88055,88057,88059],{"class":94,"line":8025},[92,88051,88052],{"class":102},"    o.hobby[",[92,88054,294],{"class":151},[92,88056,4422],{"class":102},[92,88058,148],{"class":98},[92,88060,88061],{"class":207}," '篮球'\n",[92,88063,88064,88067,88069],{"class":94,"line":8037},[92,88065,88066],{"class":102},"    o.family ",[92,88068,148],{"class":98},[92,88070,88071],{"class":207}," '老pink'\n",[92,88073,88074,88076,88078],{"class":94,"line":9696},[92,88075,73735],{"class":102},[92,88077,58229],{"class":1942},[92,88079,70018],{"class":102},[92,88081,88082,88084,88086],{"class":94,"line":9721},[92,88083,52399],{"class":102},[92,88085,51795],{"class":51282},[92,88087,51289],{"class":102},[92,88089,88090,88092,88094],{"class":94,"line":9744},[92,88091,51767],{"class":102},[92,88093,51782],{"class":51282},[92,88095,51289],{"class":102},[92,88097,88098],{"class":94,"line":9768},[92,88099,2379],{"emptyLinePlaceholder":17},[92,88101,88102,88104,88106],{"class":94,"line":9773},[92,88103,51767],{"class":102},[92,88105,50617],{"class":51282},[92,88107,51289],{"class":102},[38,88109,88110],{},[1441,88111],{"alt":10,"src":88112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21978,88114,88116,88117],{"id":88115},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[252,88118,88119],{},"js库lodash里面cloneDeep内部实现了深拷贝",[38,88121,88122],{},[341,88123,88124],{"href":88124,"rel":88125},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23846],[38,88127,88128],{},"lodash里边的方法都要加上一个下划线_",[38,88130,88131],{},"_.cloneDeep()",[83,88133,88135],{"className":50615,"code":88134,"language":50617,"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,88136,88137,88147,88161,88165,88173,88187,88207,88219,88227,88231,88239,88244,88263,88271,88281,88289,88297,88309,88313,88319,88323,88327,88343,88351,88360,88368,88376,88384,88388],{"__ignoreMap":10},[92,88138,88139,88141,88143,88145],{"class":94,"line":95},[92,88140,51279],{"class":102},[92,88142,51283],{"class":51282},[92,88144,51286],{"class":1942},[92,88146,51289],{"class":102},[92,88148,88149,88151,88153,88155,88157,88159],{"class":94,"line":11},[92,88150,1013],{"class":102},[92,88152,50617],{"class":51282},[92,88154,51298],{"class":1942},[92,88156,148],{"class":102},[92,88158,51303],{"class":207},[92,88160,51289],{"class":102},[92,88162,88163],{"class":94,"line":1158},[92,88164,2379],{"emptyLinePlaceholder":17},[92,88166,88167,88169,88171],{"class":94,"line":1173},[92,88168,1013],{"class":102},[92,88170,51316],{"class":51282},[92,88172,51289],{"class":102},[92,88174,88175,88177,88179,88181,88183,88185],{"class":94,"line":1179},[92,88176,52126],{"class":102},[92,88178,51326],{"class":51282},[92,88180,51329],{"class":1942},[92,88182,148],{"class":102},[92,88184,51334],{"class":207},[92,88186,51289],{"class":102},[92,88188,88189,88191,88193,88195,88197,88199,88201,88203,88205],{"class":94,"line":1193},[92,88190,52126],{"class":102},[92,88192,51326],{"class":51282},[92,88194,14900],{"class":1942},[92,88196,148],{"class":102},[92,88198,51373],{"class":207},[92,88200,51353],{"class":1942},[92,88202,148],{"class":102},[92,88204,51380],{"class":207},[92,88206,51289],{"class":102},[92,88208,88209,88211,88213,88215,88217],{"class":94,"line":1199},[92,88210,52126],{"class":102},[92,88212,51389],{"class":51282},[92,88214,51392],{"class":102},[92,88216,51389],{"class":51282},[92,88218,51289],{"class":102},[92,88220,88221,88223,88225],{"class":94,"line":1290},[92,88222,51767],{"class":102},[92,88224,51316],{"class":51282},[92,88226,51289],{"class":102},[92,88228,88229],{"class":94,"line":1296},[92,88230,2379],{"emptyLinePlaceholder":17},[92,88232,88233,88235,88237],{"class":94,"line":1308},[92,88234,1013],{"class":102},[92,88236,51782],{"class":51282},[92,88238,51289],{"class":102},[92,88240,88241],{"class":94,"line":1591},[92,88242,88243],{"class":161},"  \u003C!-- 先引用这个库 -->\n",[92,88245,88246,88248,88250,88252,88254,88257,88259,88261],{"class":94,"line":1596},[92,88247,52126],{"class":102},[92,88249,51795],{"class":51282},[92,88251,55221],{"class":1942},[92,88253,148],{"class":102},[92,88255,88256],{"class":207},"\"lodash.min.js\"",[92,88258,55296],{"class":102},[92,88260,51795],{"class":51282},[92,88262,51289],{"class":102},[92,88264,88265,88267,88269],{"class":94,"line":1602},[92,88266,52126],{"class":102},[92,88268,51795],{"class":51282},[92,88270,51289],{"class":102},[92,88272,88273,88275,88277,88279],{"class":94,"line":1607},[92,88274,11201],{"class":98},[92,88276,69953],{"class":151},[92,88278,13544],{"class":98},[92,88280,15552],{"class":102},[92,88282,88283,88285,88287],{"class":94,"line":1621},[92,88284,71598],{"class":102},[92,88286,87792],{"class":207},[92,88288,31448],{"class":102},[92,88290,88291,88293,88295],{"class":94,"line":1626},[92,88292,71608],{"class":102},[92,88294,753],{"class":151},[92,88296,31448],{"class":102},[92,88298,88299,88301,88303,88305,88307],{"class":94,"line":1632},[92,88300,87807],{"class":102},[92,88302,87810],{"class":207},[92,88304,12415],{"class":102},[92,88306,87815],{"class":207},[92,88308,87818],{"class":102},[92,88310,88311],{"class":94,"line":1653},[92,88312,77854],{"class":102},[92,88314,88315,88317],{"class":94,"line":1658},[92,88316,87827],{"class":102},[92,88318,87830],{"class":207},[92,88320,88321],{"class":94,"line":1672},[92,88322,52380],{"class":102},[92,88324,88325],{"class":94,"line":1677},[92,88326,2166],{"class":102},[92,88328,88329,88331,88333,88335,88338,88341],{"class":94,"line":1706},[92,88330,11201],{"class":98},[92,88332,87845],{"class":151},[92,88334,13544],{"class":98},[92,88336,88337],{"class":102}," _.",[92,88339,88340],{"class":1942},"cloneDeep",[92,88342,70018],{"class":102},[92,88344,88345,88347,88349],{"class":94,"line":1711},[92,88346,73735],{"class":102},[92,88348,58229],{"class":1942},[92,88350,88037],{"class":102},[92,88352,88353,88356,88358],{"class":94,"line":1728},[92,88354,88355],{"class":102},"    o.family.baby ",[92,88357,148],{"class":98},[92,88359,88071],{"class":207},[92,88361,88362,88364,88366],{"class":94,"line":1733},[92,88363,73735],{"class":102},[92,88365,58229],{"class":1942},[92,88367,70018],{"class":102},[92,88369,88370,88372,88374],{"class":94,"line":1738},[92,88371,52399],{"class":102},[92,88373,51795],{"class":51282},[92,88375,51289],{"class":102},[92,88377,88378,88380,88382],{"class":94,"line":1743},[92,88379,51767],{"class":102},[92,88381,51782],{"class":51282},[92,88383,51289],{"class":102},[92,88385,88386],{"class":94,"line":1757},[92,88387,2379],{"emptyLinePlaceholder":17},[92,88389,88390,88392,88394],{"class":94,"line":1762},[92,88391,51767],{"class":102},[92,88393,50617],{"class":51282},[92,88395,51289],{"class":102},[38,88397,88398],{},[1441,88399],{"alt":10,"src":88400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21978,88402,88404],{"id":88403},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[83,88406,88408],{"className":50615,"code":88407,"language":50617,"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,88409,88410,88420,88434,88438,88446,88460,88480,88492,88500,88504,88512,88520,88530,88538,88546,88558,88562,88568,88572,88576,88581,88586,88591,88617,88625,88634,88642,88650,88658,88662],{"__ignoreMap":10},[92,88411,88412,88414,88416,88418],{"class":94,"line":95},[92,88413,51279],{"class":102},[92,88415,51283],{"class":51282},[92,88417,51286],{"class":1942},[92,88419,51289],{"class":102},[92,88421,88422,88424,88426,88428,88430,88432],{"class":94,"line":11},[92,88423,1013],{"class":102},[92,88425,50617],{"class":51282},[92,88427,51298],{"class":1942},[92,88429,148],{"class":102},[92,88431,51303],{"class":207},[92,88433,51289],{"class":102},[92,88435,88436],{"class":94,"line":1158},[92,88437,2379],{"emptyLinePlaceholder":17},[92,88439,88440,88442,88444],{"class":94,"line":1173},[92,88441,1013],{"class":102},[92,88443,51316],{"class":51282},[92,88445,51289],{"class":102},[92,88447,88448,88450,88452,88454,88456,88458],{"class":94,"line":1179},[92,88449,52126],{"class":102},[92,88451,51326],{"class":51282},[92,88453,51329],{"class":1942},[92,88455,148],{"class":102},[92,88457,51334],{"class":207},[92,88459,51289],{"class":102},[92,88461,88462,88464,88466,88468,88470,88472,88474,88476,88478],{"class":94,"line":1193},[92,88463,52126],{"class":102},[92,88465,51326],{"class":51282},[92,88467,14900],{"class":1942},[92,88469,148],{"class":102},[92,88471,51373],{"class":207},[92,88473,51353],{"class":1942},[92,88475,148],{"class":102},[92,88477,51380],{"class":207},[92,88479,51289],{"class":102},[92,88481,88482,88484,88486,88488,88490],{"class":94,"line":1199},[92,88483,52126],{"class":102},[92,88485,51389],{"class":51282},[92,88487,51392],{"class":102},[92,88489,51389],{"class":51282},[92,88491,51289],{"class":102},[92,88493,88494,88496,88498],{"class":94,"line":1290},[92,88495,51767],{"class":102},[92,88497,51316],{"class":51282},[92,88499,51289],{"class":102},[92,88501,88502],{"class":94,"line":1296},[92,88503,2379],{"emptyLinePlaceholder":17},[92,88505,88506,88508,88510],{"class":94,"line":1308},[92,88507,1013],{"class":102},[92,88509,51782],{"class":51282},[92,88511,51289],{"class":102},[92,88513,88514,88516,88518],{"class":94,"line":1591},[92,88515,52126],{"class":102},[92,88517,51795],{"class":51282},[92,88519,51289],{"class":102},[92,88521,88522,88524,88526,88528],{"class":94,"line":1596},[92,88523,11201],{"class":98},[92,88525,69953],{"class":151},[92,88527,13544],{"class":98},[92,88529,15552],{"class":102},[92,88531,88532,88534,88536],{"class":94,"line":1602},[92,88533,71598],{"class":102},[92,88535,87792],{"class":207},[92,88537,31448],{"class":102},[92,88539,88540,88542,88544],{"class":94,"line":1607},[92,88541,71608],{"class":102},[92,88543,753],{"class":151},[92,88545,31448],{"class":102},[92,88547,88548,88550,88552,88554,88556],{"class":94,"line":1621},[92,88549,87807],{"class":102},[92,88551,87810],{"class":207},[92,88553,12415],{"class":102},[92,88555,87815],{"class":207},[92,88557,87818],{"class":102},[92,88559,88560],{"class":94,"line":1626},[92,88561,77854],{"class":102},[92,88563,88564,88566],{"class":94,"line":1632},[92,88565,87827],{"class":102},[92,88567,87830],{"class":207},[92,88569,88570],{"class":94,"line":1653},[92,88571,52380],{"class":102},[92,88573,88574],{"class":94,"line":1658},[92,88575,2166],{"class":102},[92,88577,88578],{"class":94,"line":1672},[92,88579,88580],{"class":161},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[92,88582,88583],{"class":94,"line":1677},[92,88584,88585],{"class":161},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[92,88587,88588],{"class":94,"line":1706},[92,88589,88590],{"class":161},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[92,88592,88593,88595,88597,88599,88602,88604,88607,88609,88611,88613,88615],{"class":94,"line":1711},[92,88594,11201],{"class":98},[92,88596,87845],{"class":151},[92,88598,13544],{"class":98},[92,88600,88601],{"class":151}," JSON",[92,88603,661],{"class":102},[92,88605,88606],{"class":1942},"parse",[92,88608,103],{"class":102},[92,88610,71646],{"class":151},[92,88612,661],{"class":102},[92,88614,71651],{"class":1942},[92,88616,71654],{"class":102},[92,88618,88619,88621,88623],{"class":94,"line":1728},[92,88620,73735],{"class":102},[92,88622,58229],{"class":1942},[92,88624,88037],{"class":102},[92,88626,88627,88629,88631],{"class":94,"line":1733},[92,88628,88355],{"class":102},[92,88630,148],{"class":98},[92,88632,88633],{"class":207}," '123'\n",[92,88635,88636,88638,88640],{"class":94,"line":1738},[92,88637,73735],{"class":102},[92,88639,58229],{"class":1942},[92,88641,70018],{"class":102},[92,88643,88644,88646,88648],{"class":94,"line":1743},[92,88645,52399],{"class":102},[92,88647,51795],{"class":51282},[92,88649,51289],{"class":102},[92,88651,88652,88654,88656],{"class":94,"line":1757},[92,88653,51767],{"class":102},[92,88655,51782],{"class":51282},[92,88657,51289],{"class":102},[92,88659,88660],{"class":94,"line":1762},[92,88661,2379],{"emptyLinePlaceholder":17},[92,88663,88664,88666,88668],{"class":94,"line":2556},[92,88665,51767],{"class":102},[92,88667,50617],{"class":51282},[92,88669,51289],{"class":102},[38,88671,88672],{},[1441,88673],{"alt":10,"src":88674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[33,88676,88678],{"id":88677},"_415-异常处理","4.15 异常处理",[46,88680,88681],{},[49,88682,88683],{},"throw抛异常",[38,88685,88686],{},[1441,88687],{"alt":10,"src":88688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[46,88690,88691],{"start":11},[49,88692,88693],{},"try\u002Fcatch 捕获错误信息",[38,88695,88696],{},[1441,88697],{"alt":10,"src":88698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[83,88700,88702],{"className":50615,"code":88701,"language":50617,"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,88703,88704,88714,88728,88732,88740,88754,88774,88786,88794,88798,88806,88818,88826,88835,88842,88847,88866,88875,88886,88891,88901,88906,88911,88916,88933,88937,88942,88949,88961,88965,88977,88981,88985,88990,88995,89002,89010,89018,89022],{"__ignoreMap":10},[92,88705,88706,88708,88710,88712],{"class":94,"line":95},[92,88707,51279],{"class":102},[92,88709,51283],{"class":51282},[92,88711,51286],{"class":1942},[92,88713,51289],{"class":102},[92,88715,88716,88718,88720,88722,88724,88726],{"class":94,"line":11},[92,88717,1013],{"class":102},[92,88719,50617],{"class":51282},[92,88721,51298],{"class":1942},[92,88723,148],{"class":102},[92,88725,51303],{"class":207},[92,88727,51289],{"class":102},[92,88729,88730],{"class":94,"line":1158},[92,88731,2379],{"emptyLinePlaceholder":17},[92,88733,88734,88736,88738],{"class":94,"line":1173},[92,88735,1013],{"class":102},[92,88737,51316],{"class":51282},[92,88739,51289],{"class":102},[92,88741,88742,88744,88746,88748,88750,88752],{"class":94,"line":1179},[92,88743,52126],{"class":102},[92,88745,51326],{"class":51282},[92,88747,51329],{"class":1942},[92,88749,148],{"class":102},[92,88751,51334],{"class":207},[92,88753,51289],{"class":102},[92,88755,88756,88758,88760,88762,88764,88766,88768,88770,88772],{"class":94,"line":1193},[92,88757,52126],{"class":102},[92,88759,51326],{"class":51282},[92,88761,14900],{"class":1942},[92,88763,148],{"class":102},[92,88765,51373],{"class":207},[92,88767,51353],{"class":1942},[92,88769,148],{"class":102},[92,88771,51380],{"class":207},[92,88773,51289],{"class":102},[92,88775,88776,88778,88780,88782,88784],{"class":94,"line":1199},[92,88777,52126],{"class":102},[92,88779,51389],{"class":51282},[92,88781,51392],{"class":102},[92,88783,51389],{"class":51282},[92,88785,51289],{"class":102},[92,88787,88788,88790,88792],{"class":94,"line":1290},[92,88789,51767],{"class":102},[92,88791,51316],{"class":51282},[92,88793,51289],{"class":102},[92,88795,88796],{"class":94,"line":1296},[92,88797,2379],{"emptyLinePlaceholder":17},[92,88799,88800,88802,88804],{"class":94,"line":1308},[92,88801,1013],{"class":102},[92,88803,51782],{"class":51282},[92,88805,51289],{"class":102},[92,88807,88808,88810,88812,88814,88816],{"class":94,"line":1591},[92,88809,52126],{"class":102},[92,88811,38],{"class":51282},[92,88813,53476],{"class":102},[92,88815,38],{"class":51282},[92,88817,51289],{"class":102},[92,88819,88820,88822,88824],{"class":94,"line":1596},[92,88821,52126],{"class":102},[92,88823,51795],{"class":51282},[92,88825,51289],{"class":102},[92,88827,88828,88830,88833],{"class":94,"line":1602},[92,88829,70066],{"class":98},[92,88831,88832],{"class":1942}," fn",[92,88834,10833],{"class":102},[92,88836,88837,88840],{"class":94,"line":1607},[92,88838,88839],{"class":98},"      try",[92,88841,15552],{"class":102},[92,88843,88844],{"class":94,"line":1621},[92,88845,88846],{"class":161},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[92,88848,88849,88851,88853,88855,88857,88859,88861,88864],{"class":94,"line":1626},[92,88850,61252],{"class":98},[92,88852,6805],{"class":151},[92,88854,13544],{"class":98},[92,88856,54378],{"class":102},[92,88858,54381],{"class":1942},[92,88860,103],{"class":102},[92,88862,88863],{"class":207},"'.p'",[92,88865,109],{"class":102},[92,88867,88868,88871,88873],{"class":94,"line":1632},[92,88869,88870],{"class":102},"        p.style.color ",[92,88872,148],{"class":98},[92,88874,67033],{"class":207},[92,88876,88877,88880,88883],{"class":94,"line":1653},[92,88878,88879],{"class":102},"      } ",[92,88881,88882],{"class":98},"catch",[92,88884,88885],{"class":102}," (err) {\n",[92,88887,88888],{"class":94,"line":1658},[92,88889,88890],{"class":161},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[92,88892,88893,88896,88898],{"class":94,"line":1672},[92,88894,88895],{"class":102},"        console.",[92,88897,58229],{"class":1942},[92,88899,88900],{"class":102},"(err.message)\n",[92,88902,88903],{"class":94,"line":1677},[92,88904,88905],{"class":161},"        \u002F\u002F 想要中断程序，需要加return\n",[92,88907,88908],{"class":94,"line":1706},[92,88909,88910],{"class":161},"        \u002F\u002F return\n",[92,88912,88913],{"class":94,"line":1711},[92,88914,88915],{"class":161},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[92,88917,88918,88921,88923,88926,88928,88931],{"class":94,"line":1728},[92,88919,88920],{"class":98},"        throw",[92,88922,11558],{"class":98},[92,88924,88925],{"class":1942}," Error",[92,88927,103],{"class":102},[92,88929,88930],{"class":207},"'你看看，选择器错误了吧'",[92,88932,109],{"class":102},[92,88934,88935],{"class":94,"line":1733},[92,88936,52380],{"class":102},[92,88938,88939],{"class":94,"line":1738},[92,88940,88941],{"class":161},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[92,88943,88944,88947],{"class":94,"line":1743},[92,88945,88946],{"class":98},"      finally",[92,88948,15552],{"class":102},[92,88950,88951,88954,88956,88959],{"class":94,"line":1757},[92,88952,88953],{"class":1942},"        alert",[92,88955,103],{"class":102},[92,88957,88958],{"class":207},"'弹出对话框'",[92,88960,109],{"class":102},[92,88962,88963],{"class":94,"line":1762},[92,88964,52380],{"class":102},[92,88966,88967,88969,88971,88973,88975],{"class":94,"line":2556},[92,88968,58226],{"class":102},[92,88970,58229],{"class":1942},[92,88972,103],{"class":102},[92,88974,575],{"class":151},[92,88976,109],{"class":102},[92,88978,88979],{"class":94,"line":2570},[92,88980,2379],{"emptyLinePlaceholder":17},[92,88982,88983],{"class":94,"line":2578},[92,88984,2166],{"class":102},[92,88986,88987],{"class":94,"line":2583},[92,88988,88989],{"class":161},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[92,88991,88992],{"class":94,"line":2589},[92,88993,88994],{"class":161},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[92,88996,88997,89000],{"class":94,"line":2595},[92,88998,88999],{"class":1942},"    fn",[92,89001,1955],{"class":102},[92,89003,89004,89006,89008],{"class":94,"line":2600},[92,89005,52399],{"class":102},[92,89007,51795],{"class":51282},[92,89009,51289],{"class":102},[92,89011,89012,89014,89016],{"class":94,"line":7928},[92,89013,51767],{"class":102},[92,89015,51782],{"class":51282},[92,89017,51289],{"class":102},[92,89019,89020],{"class":94,"line":7952},[92,89021,2379],{"emptyLinePlaceholder":17},[92,89023,89024,89026,89028],{"class":94,"line":7957},[92,89025,51767],{"class":102},[92,89027,50617],{"class":51282},[92,89029,51289],{"class":102},[38,89031,89032],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[46,89034,89035],{"start":1158},[49,89036,89037],{},"debugger",[38,89039,89040],{},[1441,89041],{"alt":10,"src":89042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[38,89044,89045],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[33,89047,89049],{"id":89048},"_416-处理this","4.16 处理this",[63,89051,89053],{"id":89052},"_4161-this的指向","4.16.1 this的指向",[46,89055,89056],{},[49,89057,89058],{},"普通函数的this",[38,89060,89061],{},[1441,89062],{"alt":10,"src":89063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[46,89065,89066],{"start":11},[49,89067,89068],{},"箭头函数的this",[38,89070,89071],{},[1441,89072],{"alt":10,"src":89073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[38,89075,89076],{},[1441,89077],{"alt":10,"src":89078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[38,89080,89081],{},[1441,89082],{"alt":10,"src":89083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[63,89085,89087],{"id":89086},"_4162-this的改变","4.16.2 this的改变",[38,89089,89090],{},"call() apply() bind()",[46,89092,89093],{},[49,89094,89095],{},"call()",[38,89097,89098],{},[1441,89099],{"alt":10,"src":89100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[38,89102,89103],{},"两个作用：①调用函数；②改变this指向",[83,89105,89107],{"className":53049,"code":89106,"language":53051,"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,89108,89109,89117,89125,89129,89134,89138,89143,89148,89153,89157,89162,89170],{"__ignoreMap":10},[92,89110,89111,89113,89115],{"class":94,"line":95},[92,89112,1013],{"class":102},[92,89114,51782],{"class":51282},[92,89116,51289],{"class":102},[92,89118,89119,89121,89123],{"class":94,"line":11},[92,89120,52126],{"class":102},[92,89122,51795],{"class":51282},[92,89124,51289],{"class":102},[92,89126,89127],{"class":94,"line":1158},[92,89128,71505],{"class":102},[92,89130,89131],{"class":94,"line":1173},[92,89132,89133],{"class":102},"      uname: 'pink'\n",[92,89135,89136],{"class":94,"line":1179},[92,89137,2166],{"class":102},[92,89139,89140],{"class":94,"line":1193},[92,89141,89142],{"class":102},"    function fn(x, y) {\n",[92,89144,89145],{"class":94,"line":1199},[92,89146,89147],{"class":102},"      console.log(this)  \u002F\u002Fwindow\n",[92,89149,89150],{"class":94,"line":1290},[92,89151,89152],{"class":102},"      console.log(x + y)\n",[92,89154,89155],{"class":94,"line":1296},[92,89156,2166],{"class":102},[92,89158,89159],{"class":94,"line":1308},[92,89160,89161],{"class":102},"    fn.call(obj, 1, 2)\n",[92,89163,89164,89166,89168],{"class":94,"line":1591},[92,89165,52399],{"class":102},[92,89167,51795],{"class":51282},[92,89169,51289],{"class":102},[92,89171,89172,89174,89176],{"class":94,"line":1596},[92,89173,51767],{"class":102},[92,89175,51782],{"class":51282},[92,89177,51289],{"class":102},[38,89179,89180],{},[1441,89181],{"alt":10,"src":89182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[46,89184,89185],{"start":11},[49,89186,89187],{},"apply()",[38,89189,89190],{},[1441,89191],{"alt":10,"src":89192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[38,89194,89103],{},[38,89196,89197],{},"call传递的是普通参数，而apply必须传递的是数组",[83,89199,89201],{"className":50615,"code":89200,"language":50617,"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,89202,89203,89213,89227,89231,89239,89253,89273,89285,89293,89297,89305,89313,89323,89330,89334,89339,89355,89367,89381,89385,89390,89409,89414,89418,89423,89428,89436,89441,89463,89468,89484,89500,89512,89516,89521,89540,89548,89556,89560],{"__ignoreMap":10},[92,89204,89205,89207,89209,89211],{"class":94,"line":95},[92,89206,51279],{"class":102},[92,89208,51283],{"class":51282},[92,89210,51286],{"class":1942},[92,89212,51289],{"class":102},[92,89214,89215,89217,89219,89221,89223,89225],{"class":94,"line":11},[92,89216,1013],{"class":102},[92,89218,50617],{"class":51282},[92,89220,51298],{"class":1942},[92,89222,148],{"class":102},[92,89224,51303],{"class":207},[92,89226,51289],{"class":102},[92,89228,89229],{"class":94,"line":1158},[92,89230,2379],{"emptyLinePlaceholder":17},[92,89232,89233,89235,89237],{"class":94,"line":1173},[92,89234,1013],{"class":102},[92,89236,51316],{"class":51282},[92,89238,51289],{"class":102},[92,89240,89241,89243,89245,89247,89249,89251],{"class":94,"line":1179},[92,89242,52126],{"class":102},[92,89244,51326],{"class":51282},[92,89246,51329],{"class":1942},[92,89248,148],{"class":102},[92,89250,51334],{"class":207},[92,89252,51289],{"class":102},[92,89254,89255,89257,89259,89261,89263,89265,89267,89269,89271],{"class":94,"line":1193},[92,89256,52126],{"class":102},[92,89258,51326],{"class":51282},[92,89260,14900],{"class":1942},[92,89262,148],{"class":102},[92,89264,51373],{"class":207},[92,89266,51353],{"class":1942},[92,89268,148],{"class":102},[92,89270,51380],{"class":207},[92,89272,51289],{"class":102},[92,89274,89275,89277,89279,89281,89283],{"class":94,"line":1199},[92,89276,52126],{"class":102},[92,89278,51389],{"class":51282},[92,89280,51392],{"class":102},[92,89282,51389],{"class":51282},[92,89284,51289],{"class":102},[92,89286,89287,89289,89291],{"class":94,"line":1290},[92,89288,51767],{"class":102},[92,89290,51316],{"class":51282},[92,89292,51289],{"class":102},[92,89294,89295],{"class":94,"line":1296},[92,89296,2379],{"emptyLinePlaceholder":17},[92,89298,89299,89301,89303],{"class":94,"line":1308},[92,89300,1013],{"class":102},[92,89302,51782],{"class":51282},[92,89304,51289],{"class":102},[92,89306,89307,89309,89311],{"class":94,"line":1591},[92,89308,52126],{"class":102},[92,89310,51795],{"class":51282},[92,89312,51289],{"class":102},[92,89314,89315,89317,89319,89321],{"class":94,"line":1596},[92,89316,11201],{"class":98},[92,89318,69953],{"class":151},[92,89320,13544],{"class":98},[92,89322,15552],{"class":102},[92,89324,89325,89327],{"class":94,"line":1602},[92,89326,71608],{"class":102},[92,89328,89329],{"class":151},"18\n",[92,89331,89332],{"class":94,"line":1607},[92,89333,2166],{"class":102},[92,89335,89336],{"class":94,"line":1621},[92,89337,89338],{"class":161},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[92,89340,89341,89343,89345,89347,89349,89351,89353],{"class":94,"line":1626},[92,89342,70066],{"class":98},[92,89344,88832],{"class":1942},[92,89346,103],{"class":102},[92,89348,923],{"class":5196},[92,89350,12415],{"class":102},[92,89352,948],{"class":5196},[92,89354,12422],{"class":102},[92,89356,89357,89359,89361,89363,89365],{"class":94,"line":1632},[92,89358,58226],{"class":102},[92,89360,58229],{"class":1942},[92,89362,103],{"class":102},[92,89364,86975],{"class":151},[92,89366,109],{"class":102},[92,89368,89369,89371,89373,89376,89378],{"class":94,"line":1653},[92,89370,58226],{"class":102},[92,89372,58229],{"class":1942},[92,89374,89375],{"class":102},"(x ",[92,89377,584],{"class":98},[92,89379,89380],{"class":102}," y)\n",[92,89382,89383],{"class":94,"line":1658},[92,89384,2166],{"class":102},[92,89386,89387],{"class":94,"line":1672},[92,89388,89389],{"class":161},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[92,89391,89392,89395,89398,89401,89403,89405,89407],{"class":94,"line":1677},[92,89393,89394],{"class":102},"    fn.",[92,89396,89397],{"class":1942},"apply",[92,89399,89400],{"class":102},"(obj, [",[92,89402,320],{"class":151},[92,89404,12415],{"class":102},[92,89406,180],{"class":151},[92,89408,4636],{"class":102},[92,89410,89411],{"class":94,"line":1706},[92,89412,89413],{"class":161},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[92,89415,89416],{"class":94,"line":1711},[92,89417,2379],{"emptyLinePlaceholder":17},[92,89419,89420],{"class":94,"line":1728},[92,89421,89422],{"class":161},"    \u002F\u002F 使用场景：求数组最大值\n",[92,89424,89425],{"class":94,"line":1733},[92,89426,89427],{"class":161},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[92,89429,89430,89433],{"class":94,"line":1738},[92,89431,89432],{"class":161},"    \u002F\u002F console.log(max)",[92,89434,89435],{"class":161},"   \u002F\u002F3\n",[92,89437,89438],{"class":94,"line":1743},[92,89439,89440],{"class":161},"    \u002F\u002F 指向空或者Math都是可以的\n",[92,89442,89443,89445,89447,89449,89451,89453,89455,89457,89459,89461],{"class":94,"line":1757},[92,89444,11201],{"class":98},[92,89446,57677],{"class":151},[92,89448,13544],{"class":98},[92,89450,52208],{"class":102},[92,89452,414],{"class":151},[92,89454,12415],{"class":102},[92,89456,607],{"class":151},[92,89458,12415],{"class":102},[92,89460,638],{"class":151},[92,89462,33228],{"class":102},[92,89464,89465],{"class":94,"line":1762},[92,89466,89467],{"class":161},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[92,89469,89470,89472,89474,89476,89479,89481],{"class":94,"line":2556},[92,89471,11201],{"class":98},[92,89473,5931],{"class":151},[92,89475,13544],{"class":98},[92,89477,89478],{"class":102}," Math.max.",[92,89480,89397],{"class":1942},[92,89482,89483],{"class":102},"(Math, arr)\n",[92,89485,89486,89488,89491,89493,89496,89498],{"class":94,"line":2570},[92,89487,11201],{"class":98},[92,89489,89490],{"class":151}," min",[92,89492,13544],{"class":98},[92,89494,89495],{"class":102}," Math.min.",[92,89497,89397],{"class":1942},[92,89499,89483],{"class":102},[92,89501,89502,89504,89506,89509],{"class":94,"line":2578},[92,89503,73735],{"class":102},[92,89505,58229],{"class":1942},[92,89507,89508],{"class":102},"(max, min)     ",[92,89510,89511],{"class":161},"\u002F\u002F100,4\n",[92,89513,89514],{"class":94,"line":2583},[92,89515,2379],{"emptyLinePlaceholder":17},[92,89517,89518],{"class":94,"line":2589},[92,89519,89520],{"class":161},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[92,89522,89523,89525,89527,89530,89532,89534,89537],{"class":94,"line":2595},[92,89524,73735],{"class":102},[92,89526,58229],{"class":1942},[92,89528,89529],{"class":102},"(Max.",[92,89531,5995],{"class":1942},[92,89533,103],{"class":102},[92,89535,89536],{"class":98},"...",[92,89538,89539],{"class":102},"arr))\n",[92,89541,89542,89544,89546],{"class":94,"line":2600},[92,89543,52399],{"class":102},[92,89545,51795],{"class":51282},[92,89547,51289],{"class":102},[92,89549,89550,89552,89554],{"class":94,"line":7928},[92,89551,51767],{"class":102},[92,89553,51782],{"class":51282},[92,89555,51289],{"class":102},[92,89557,89558],{"class":94,"line":7952},[92,89559,2379],{"emptyLinePlaceholder":17},[92,89561,89562,89564,89566],{"class":94,"line":7957},[92,89563,51767],{"class":102},[92,89565,50617],{"class":51282},[92,89567,51289],{"class":102},[38,89569,89570],{},[1441,89571],{"alt":10,"src":89572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[46,89574,89575],{"start":1158},[49,89576,89577],{},"bind()",[38,89579,89580],{},[1441,89581],{"alt":10,"src":89582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[38,89584,89585],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[38,89587,89588],{},"bind的语法跟call很相似",[83,89590,89592],{"className":53049,"code":89591,"language":53051,"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,89593,89594,89602,89610,89614,89619,89623,89627,89632,89636,89641,89646,89651,89656,89661,89666,89671,89675,89683],{"__ignoreMap":10},[92,89595,89596,89598,89600],{"class":94,"line":95},[92,89597,1013],{"class":102},[92,89599,51782],{"class":51282},[92,89601,51289],{"class":102},[92,89603,89604,89606,89608],{"class":94,"line":11},[92,89605,52126],{"class":102},[92,89607,51795],{"class":51282},[92,89609,51289],{"class":102},[92,89611,89612],{"class":94,"line":1158},[92,89613,71505],{"class":102},[92,89615,89616],{"class":94,"line":1173},[92,89617,89618],{"class":102},"      age: 18\n",[92,89620,89621],{"class":94,"line":1179},[92,89622,2166],{"class":102},[92,89624,89625],{"class":94,"line":1193},[92,89626,77125],{"class":102},[92,89628,89629],{"class":94,"line":1199},[92,89630,89631],{"class":102},"      console.log(this)\n",[92,89633,89634],{"class":94,"line":1290},[92,89635,2166],{"class":102},[92,89637,89638],{"class":94,"line":1296},[92,89639,89640],{"class":102},"    \u002F\u002F 1.bind 不会调用函数\n",[92,89642,89643],{"class":94,"line":1308},[92,89644,89645],{"class":102},"    \u002F\u002F 2.bind能改变this的指向\n",[92,89647,89648],{"class":94,"line":1591},[92,89649,89650],{"class":102},"    fn.bind()\n",[92,89652,89653],{"class":94,"line":1596},[92,89654,89655],{"class":102},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[92,89657,89658],{"class":94,"line":1602},[92,89659,89660],{"class":102},"    const fun = fn.bind(obj)\n",[92,89662,89663],{"class":94,"line":1607},[92,89664,89665],{"class":102},"    \u002F\u002F console.log(fun)\n",[92,89667,89668],{"class":94,"line":1621},[92,89669,89670],{"class":102},"    \u002F\u002F 调用,查看this的指向\n",[92,89672,89673],{"class":94,"line":1626},[92,89674,52633],{"class":102},[92,89676,89677,89679,89681],{"class":94,"line":1632},[92,89678,52399],{"class":102},[92,89680,51795],{"class":51282},[92,89682,51289],{"class":102},[92,89684,89685,89687,89689],{"class":94,"line":1653},[92,89686,51767],{"class":102},[92,89688,51782],{"class":51282},[92,89690,51289],{"class":102},[38,89692,89693],{},[1441,89694],{"alt":10,"src":89695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[46,89697,89698],{"start":1173},[49,89699,89700],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[83,89702,89704],{"className":53049,"code":89703,"language":53051,"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,89705,89706,89714,89727,89735,89740,89744,89749,89754,89759,89764,89769,89774,89779,89784,89788,89796],{"__ignoreMap":10},[92,89707,89708,89710,89712],{"class":94,"line":95},[92,89709,1013],{"class":102},[92,89711,51782],{"class":51282},[92,89713,51289],{"class":102},[92,89715,89716,89718,89720,89723,89725],{"class":94,"line":11},[92,89717,52126],{"class":102},[92,89719,53869],{"class":51282},[92,89721,89722],{"class":102},">禁用\u003C\u002F",[92,89724,53869],{"class":51282},[92,89726,51289],{"class":102},[92,89728,89729,89731,89733],{"class":94,"line":1158},[92,89730,52126],{"class":102},[92,89732,51795],{"class":51282},[92,89734,51289],{"class":102},[92,89736,89737],{"class":94,"line":1173},[92,89738,89739],{"class":102},"    const btn = document.querySelector('button')\n",[92,89741,89742],{"class":94,"line":1179},[92,89743,58998],{"class":102},[92,89745,89746],{"class":94,"line":1193},[92,89747,89748],{"class":102},"      this.disabled = true\n",[92,89750,89751],{"class":94,"line":1199},[92,89752,89753],{"class":102},"      \u002F\u002F 定时器是window进行调用的\n",[92,89755,89756],{"class":94,"line":1290},[92,89757,89758],{"class":102},"      setTimeout(function () {\n",[92,89760,89761],{"class":94,"line":1296},[92,89762,89763],{"class":102},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[92,89765,89766],{"class":94,"line":1308},[92,89767,89768],{"class":102},"        this.disabled = false\n",[92,89770,89771],{"class":94,"line":1591},[92,89772,89773],{"class":102},"      }.bind(this), 2000)\n",[92,89775,89776],{"class":94,"line":1596},[92,89777,89778],{"class":102},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[92,89780,89781],{"class":94,"line":1602},[92,89782,89783],{"class":102},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[92,89785,89786],{"class":94,"line":1607},[92,89787,33443],{"class":102},[92,89789,89790,89792,89794],{"class":94,"line":1621},[92,89791,52399],{"class":102},[92,89793,51795],{"class":51282},[92,89795,51289],{"class":102},[92,89797,89798,89800,89802],{"class":94,"line":1626},[92,89799,51767],{"class":102},[92,89801,51782],{"class":51282},[92,89803,51289],{"class":102},[46,89805,89806],{"start":1179},[49,89807,21933],{},[38,89809,89810],{},[1441,89811],{"alt":10,"src":89812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[33,89814,89816],{"id":89815},"_417-性能优化","4.17 性能优化",[63,89818,89820],{"id":89819},"_4171-防抖","4.17.1 防抖",[38,89822,89823],{},[1441,89824],{"alt":10,"src":89825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[38,89827,89828],{},[252,89829,89830],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[38,89832,89833],{},"防抖实现方式：",[1110,89835,89836],{},[49,89837,89838],{},"lodash 提供了防抖处理",[38,89840,89841],{},"_.debounce(func,[wait=0],[options={}])",[38,89843,89844],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[83,89846,89848],{"className":50615,"code":89847,"language":50617,"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,89849,89850,89860,89874,89878,89886,89900,89920,89932,89940,89946,89956,89968,89980,89991,90003,90013,90023,90036,90040,90048,90056,90060,90068,90086,90104,90112,90131,90141,90150,90161,90166,90170,90175,90180,90185,90210,90218,90226,90230],{"__ignoreMap":10},[92,89851,89852,89854,89856,89858],{"class":94,"line":95},[92,89853,51279],{"class":102},[92,89855,51283],{"class":51282},[92,89857,51286],{"class":1942},[92,89859,51289],{"class":102},[92,89861,89862,89864,89866,89868,89870,89872],{"class":94,"line":11},[92,89863,1013],{"class":102},[92,89865,50617],{"class":51282},[92,89867,51298],{"class":1942},[92,89869,148],{"class":102},[92,89871,51303],{"class":207},[92,89873,51289],{"class":102},[92,89875,89876],{"class":94,"line":1158},[92,89877,2379],{"emptyLinePlaceholder":17},[92,89879,89880,89882,89884],{"class":94,"line":1173},[92,89881,1013],{"class":102},[92,89883,51316],{"class":51282},[92,89885,51289],{"class":102},[92,89887,89888,89890,89892,89894,89896,89898],{"class":94,"line":1179},[92,89889,52126],{"class":102},[92,89891,51326],{"class":51282},[92,89893,51329],{"class":1942},[92,89895,148],{"class":102},[92,89897,51334],{"class":207},[92,89899,51289],{"class":102},[92,89901,89902,89904,89906,89908,89910,89912,89914,89916,89918],{"class":94,"line":1193},[92,89903,52126],{"class":102},[92,89905,51326],{"class":51282},[92,89907,14900],{"class":1942},[92,89909,148],{"class":102},[92,89911,51373],{"class":207},[92,89913,51353],{"class":1942},[92,89915,148],{"class":102},[92,89917,51380],{"class":207},[92,89919,51289],{"class":102},[92,89921,89922,89924,89926,89928,89930],{"class":94,"line":1199},[92,89923,52126],{"class":102},[92,89925,51389],{"class":51282},[92,89927,51392],{"class":102},[92,89929,51389],{"class":51282},[92,89931,51289],{"class":102},[92,89933,89934,89936,89938],{"class":94,"line":1290},[92,89935,52126],{"class":102},[92,89937,5106],{"class":51282},[92,89939,51289],{"class":102},[92,89941,89942,89944],{"class":94,"line":1296},[92,89943,54734],{"class":1942},[92,89945,15552],{"class":102},[92,89947,89948,89950,89952,89954],{"class":94,"line":1308},[92,89949,72578],{"class":151},[92,89951,51419],{"class":102},[92,89953,60487],{"class":151},[92,89955,1269],{"class":102},[92,89957,89958,89960,89962,89964,89966],{"class":94,"line":1591},[92,89959,54753],{"class":151},[92,89961,51419],{"class":102},[92,89963,1701],{"class":151},[92,89965,51474],{"class":98},[92,89967,1269],{"class":102},[92,89969,89970,89972,89974,89976,89978],{"class":94,"line":1596},[92,89971,54767],{"class":151},[92,89973,51419],{"class":102},[92,89975,1701],{"class":151},[92,89977,51474],{"class":98},[92,89979,1269],{"class":102},[92,89981,89982,89984,89986,89989],{"class":94,"line":1602},[92,89983,54866],{"class":151},[92,89985,51419],{"class":102},[92,89987,89988],{"class":151},"gray",[92,89990,1269],{"class":102},[92,89992,89993,89995,89997,89999,90001],{"class":94,"line":1607},[92,89994,54904],{"class":151},[92,89996,51419],{"class":102},[92,89998,928],{"class":151},[92,90000,51474],{"class":98},[92,90002,1269],{"class":102},[92,90004,90005,90007,90009,90011],{"class":94,"line":1621},[92,90006,57398],{"class":151},[92,90008,51419],{"class":102},[92,90010,60824],{"class":151},[92,90012,1269],{"class":102},[92,90014,90015,90017,90019,90021],{"class":94,"line":1626},[92,90016,57268],{"class":151},[92,90018,51419],{"class":102},[92,90020,51574],{"class":151},[92,90022,1269],{"class":102},[92,90024,90025,90028,90030,90032,90034],{"class":94,"line":1632},[92,90026,90027],{"class":151},"      padding-top",[92,90029,51419],{"class":102},[92,90031,422],{"class":151},[92,90033,51474],{"class":98},[92,90035,1269],{"class":102},[92,90037,90038],{"class":94,"line":1653},[92,90039,2166],{"class":102},[92,90041,90042,90044,90046],{"class":94,"line":1658},[92,90043,52399],{"class":102},[92,90045,5106],{"class":51282},[92,90047,51289],{"class":102},[92,90049,90050,90052,90054],{"class":94,"line":1672},[92,90051,51767],{"class":102},[92,90053,51316],{"class":51282},[92,90055,51289],{"class":102},[92,90057,90058],{"class":94,"line":1677},[92,90059,2379],{"emptyLinePlaceholder":17},[92,90061,90062,90064,90066],{"class":94,"line":1706},[92,90063,1013],{"class":102},[92,90065,51782],{"class":51282},[92,90067,51289],{"class":102},[92,90069,90070,90072,90074,90076,90078,90080,90082,90084],{"class":94,"line":1711},[92,90071,52126],{"class":102},[92,90073,51593],{"class":51282},[92,90075,53468],{"class":1942},[92,90077,148],{"class":102},[92,90079,53473],{"class":207},[92,90081,55296],{"class":102},[92,90083,51593],{"class":51282},[92,90085,51289],{"class":102},[92,90087,90088,90090,90092,90094,90096,90098,90100,90102],{"class":94,"line":1728},[92,90089,52126],{"class":102},[92,90091,51795],{"class":51282},[92,90093,55221],{"class":1942},[92,90095,148],{"class":102},[92,90097,88256],{"class":207},[92,90099,55296],{"class":102},[92,90101,51795],{"class":51282},[92,90103,51289],{"class":102},[92,90105,90106,90108,90110],{"class":94,"line":1733},[92,90107,52126],{"class":102},[92,90109,51795],{"class":51282},[92,90111,51289],{"class":102},[92,90113,90114,90116,90118,90120,90122,90124,90126,90129],{"class":94,"line":1738},[92,90115,11201],{"class":98},[92,90117,86915],{"class":151},[92,90119,13544],{"class":98},[92,90121,54378],{"class":102},[92,90123,54381],{"class":1942},[92,90125,103],{"class":102},[92,90127,90128],{"class":207},"'.box'",[92,90130,109],{"class":102},[92,90132,90133,90135,90137,90139],{"class":94,"line":1743},[92,90134,52201],{"class":98},[92,90136,9418],{"class":102},[92,90138,148],{"class":98},[92,90140,47315],{"class":151},[92,90142,90143,90145,90148],{"class":94,"line":1757},[92,90144,70066],{"class":98},[92,90146,90147],{"class":1942}," mouseMove",[92,90149,10833],{"class":102},[92,90151,90152,90155,90157,90159],{"class":94,"line":1762},[92,90153,90154],{"class":102},"      box.innerHTML ",[92,90156,148],{"class":98},[92,90158,3011],{"class":102},[92,90160,2681],{"class":98},[92,90162,90163],{"class":94,"line":2556},[92,90164,90165],{"class":161},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[92,90167,90168],{"class":94,"line":2570},[92,90169,2166],{"class":102},[92,90171,90172],{"class":94,"line":2578},[92,90173,90174],{"class":161},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[92,90176,90177],{"class":94,"line":2583},[92,90178,90179],{"class":161},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[92,90181,90182],{"class":94,"line":2589},[92,90183,90184],{"class":161},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[92,90186,90187,90190,90192,90194,90197,90200,90203,90206,90208],{"class":94,"line":2595},[92,90188,90189],{"class":102},"    box.",[92,90191,57795],{"class":1942},[92,90193,103],{"class":102},[92,90195,90196],{"class":207},"'mousemove'",[92,90198,90199],{"class":102},", _.",[92,90201,90202],{"class":1942},"debounce",[92,90204,90205],{"class":102},"(mouseMove, ",[92,90207,65056],{"class":151},[92,90209,30479],{"class":102},[92,90211,90212,90214,90216],{"class":94,"line":2600},[92,90213,52399],{"class":102},[92,90215,51795],{"class":51282},[92,90217,51289],{"class":102},[92,90219,90220,90222,90224],{"class":94,"line":7928},[92,90221,51767],{"class":102},[92,90223,51782],{"class":51282},[92,90225,51289],{"class":102},[92,90227,90228],{"class":94,"line":7952},[92,90229,2379],{"emptyLinePlaceholder":17},[92,90231,90232,90234,90236],{"class":94,"line":7957},[92,90233,51767],{"class":102},[92,90235,50617],{"class":51282},[92,90237,51289],{"class":102},[1110,90239,90240],{},[49,90241,90242],{},"手写一个防抖函数来处理",[38,90244,90245],{},"防抖的核心就是利用定时器来实现的：",[38,90247,90248],{},"①声明一个定时器变量",[38,90250,90251],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[38,90253,90254],{},"③如果没有定时器则开启定时器，记得存到变量里面",[83,90256,90258],{"className":50615,"code":90257,"language":50617,"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,90259,90260,90270,90284,90288,90296,90310,90330,90342,90350,90356,90366,90378,90390,90400,90412,90422,90432,90444,90448,90456,90464,90468,90476,90494,90512,90520,90538,90548,90556,90566,90570,90574,90578,90583,90588,90593,90598,90603,90608,90626,90633,90638,90646,90651,90664,90680,90690,90695,90699,90703,90723,90727,90732,90737,90742,90747,90755,90763,90767],{"__ignoreMap":10},[92,90261,90262,90264,90266,90268],{"class":94,"line":95},[92,90263,51279],{"class":102},[92,90265,51283],{"class":51282},[92,90267,51286],{"class":1942},[92,90269,51289],{"class":102},[92,90271,90272,90274,90276,90278,90280,90282],{"class":94,"line":11},[92,90273,1013],{"class":102},[92,90275,50617],{"class":51282},[92,90277,51298],{"class":1942},[92,90279,148],{"class":102},[92,90281,51303],{"class":207},[92,90283,51289],{"class":102},[92,90285,90286],{"class":94,"line":1158},[92,90287,2379],{"emptyLinePlaceholder":17},[92,90289,90290,90292,90294],{"class":94,"line":1173},[92,90291,1013],{"class":102},[92,90293,51316],{"class":51282},[92,90295,51289],{"class":102},[92,90297,90298,90300,90302,90304,90306,90308],{"class":94,"line":1179},[92,90299,52126],{"class":102},[92,90301,51326],{"class":51282},[92,90303,51329],{"class":1942},[92,90305,148],{"class":102},[92,90307,51334],{"class":207},[92,90309,51289],{"class":102},[92,90311,90312,90314,90316,90318,90320,90322,90324,90326,90328],{"class":94,"line":1193},[92,90313,52126],{"class":102},[92,90315,51326],{"class":51282},[92,90317,14900],{"class":1942},[92,90319,148],{"class":102},[92,90321,51373],{"class":207},[92,90323,51353],{"class":1942},[92,90325,148],{"class":102},[92,90327,51380],{"class":207},[92,90329,51289],{"class":102},[92,90331,90332,90334,90336,90338,90340],{"class":94,"line":1199},[92,90333,52126],{"class":102},[92,90335,51389],{"class":51282},[92,90337,51392],{"class":102},[92,90339,51389],{"class":51282},[92,90341,51289],{"class":102},[92,90343,90344,90346,90348],{"class":94,"line":1290},[92,90345,52126],{"class":102},[92,90347,5106],{"class":51282},[92,90349,51289],{"class":102},[92,90351,90352,90354],{"class":94,"line":1296},[92,90353,54734],{"class":1942},[92,90355,15552],{"class":102},[92,90357,90358,90360,90362,90364],{"class":94,"line":1308},[92,90359,72578],{"class":151},[92,90361,51419],{"class":102},[92,90363,60487],{"class":151},[92,90365,1269],{"class":102},[92,90367,90368,90370,90372,90374,90376],{"class":94,"line":1591},[92,90369,54753],{"class":151},[92,90371,51419],{"class":102},[92,90373,1701],{"class":151},[92,90375,51474],{"class":98},[92,90377,1269],{"class":102},[92,90379,90380,90382,90384,90386,90388],{"class":94,"line":1596},[92,90381,54767],{"class":151},[92,90383,51419],{"class":102},[92,90385,1701],{"class":151},[92,90387,51474],{"class":98},[92,90389,1269],{"class":102},[92,90391,90392,90394,90396,90398],{"class":94,"line":1602},[92,90393,54866],{"class":151},[92,90395,51419],{"class":102},[92,90397,89988],{"class":151},[92,90399,1269],{"class":102},[92,90401,90402,90404,90406,90408,90410],{"class":94,"line":1607},[92,90403,54904],{"class":151},[92,90405,51419],{"class":102},[92,90407,928],{"class":151},[92,90409,51474],{"class":98},[92,90411,1269],{"class":102},[92,90413,90414,90416,90418,90420],{"class":94,"line":1621},[92,90415,57398],{"class":151},[92,90417,51419],{"class":102},[92,90419,60824],{"class":151},[92,90421,1269],{"class":102},[92,90423,90424,90426,90428,90430],{"class":94,"line":1626},[92,90425,57268],{"class":151},[92,90427,51419],{"class":102},[92,90429,51574],{"class":151},[92,90431,1269],{"class":102},[92,90433,90434,90436,90438,90440,90442],{"class":94,"line":1632},[92,90435,90027],{"class":151},[92,90437,51419],{"class":102},[92,90439,422],{"class":151},[92,90441,51474],{"class":98},[92,90443,1269],{"class":102},[92,90445,90446],{"class":94,"line":1653},[92,90447,2166],{"class":102},[92,90449,90450,90452,90454],{"class":94,"line":1658},[92,90451,52399],{"class":102},[92,90453,5106],{"class":51282},[92,90455,51289],{"class":102},[92,90457,90458,90460,90462],{"class":94,"line":1672},[92,90459,51767],{"class":102},[92,90461,51316],{"class":51282},[92,90463,51289],{"class":102},[92,90465,90466],{"class":94,"line":1677},[92,90467,2379],{"emptyLinePlaceholder":17},[92,90469,90470,90472,90474],{"class":94,"line":1706},[92,90471,1013],{"class":102},[92,90473,51782],{"class":51282},[92,90475,51289],{"class":102},[92,90477,90478,90480,90482,90484,90486,90488,90490,90492],{"class":94,"line":1711},[92,90479,52126],{"class":102},[92,90481,51593],{"class":51282},[92,90483,53468],{"class":1942},[92,90485,148],{"class":102},[92,90487,53473],{"class":207},[92,90489,55296],{"class":102},[92,90491,51593],{"class":51282},[92,90493,51289],{"class":102},[92,90495,90496,90498,90500,90502,90504,90506,90508,90510],{"class":94,"line":1728},[92,90497,52126],{"class":102},[92,90499,51795],{"class":51282},[92,90501,55221],{"class":1942},[92,90503,148],{"class":102},[92,90505,88256],{"class":207},[92,90507,55296],{"class":102},[92,90509,51795],{"class":51282},[92,90511,51289],{"class":102},[92,90513,90514,90516,90518],{"class":94,"line":1733},[92,90515,52126],{"class":102},[92,90517,51795],{"class":51282},[92,90519,51289],{"class":102},[92,90521,90522,90524,90526,90528,90530,90532,90534,90536],{"class":94,"line":1738},[92,90523,11201],{"class":98},[92,90525,86915],{"class":151},[92,90527,13544],{"class":98},[92,90529,54378],{"class":102},[92,90531,54381],{"class":1942},[92,90533,103],{"class":102},[92,90535,90128],{"class":207},[92,90537,109],{"class":102},[92,90539,90540,90542,90544,90546],{"class":94,"line":1743},[92,90541,52201],{"class":98},[92,90543,9418],{"class":102},[92,90545,148],{"class":98},[92,90547,47315],{"class":151},[92,90549,90550,90552,90554],{"class":94,"line":1757},[92,90551,70066],{"class":98},[92,90553,90147],{"class":1942},[92,90555,10833],{"class":102},[92,90557,90558,90560,90562,90564],{"class":94,"line":1762},[92,90559,90154],{"class":102},[92,90561,148],{"class":98},[92,90563,3011],{"class":102},[92,90565,2681],{"class":98},[92,90567,90568],{"class":94,"line":2556},[92,90569,90165],{"class":161},[92,90571,90572],{"class":94,"line":2570},[92,90573,2166],{"class":102},[92,90575,90576],{"class":94,"line":2578},[92,90577,90174],{"class":161},[92,90579,90580],{"class":94,"line":2583},[92,90581,90582],{"class":161},"    \u002F\u002F 手写防抖函数\n",[92,90584,90585],{"class":94,"line":2589},[92,90586,90587],{"class":161},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[92,90589,90590],{"class":94,"line":2595},[92,90591,90592],{"class":161},"    \u002F\u002F 1.声明定时器变量\n",[92,90594,90595],{"class":94,"line":2600},[92,90596,90597],{"class":161},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[92,90599,90600],{"class":94,"line":7928},[92,90601,90602],{"class":161},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[92,90604,90605],{"class":94,"line":7952},[92,90606,90607],{"class":161},"    \u002F\u002F 4.定时器里面写函数调用\n",[92,90609,90610,90612,90615,90617,90620,90622,90624],{"class":94,"line":7957},[92,90611,70066],{"class":98},[92,90613,90614],{"class":1942}," debounce",[92,90616,103],{"class":102},[92,90618,90619],{"class":5196},"fn",[92,90621,12415],{"class":102},[92,90623,823],{"class":5196},[92,90625,12422],{"class":102},[92,90627,90628,90630],{"class":94,"line":7963},[92,90629,79754],{"class":98},[92,90631,90632],{"class":102}," timer\n",[92,90634,90635],{"class":94,"line":7990},[92,90636,90637],{"class":161},"      \u002F\u002F return 返回一个匿名函数\n",[92,90639,90640,90642,90644],{"class":94,"line":7995},[92,90641,73964],{"class":98},[92,90643,58900],{"class":98},[92,90645,54434],{"class":102},[92,90647,90648],{"class":94,"line":8001},[92,90649,90650],{"class":161},"        \u002F\u002F 这里边写第二三四步\n",[92,90652,90653,90655,90658,90661],{"class":94,"line":8013},[92,90654,2476],{"class":98},[92,90656,90657],{"class":102}," (timer) ",[92,90659,90660],{"class":1942},"clearTimeout",[92,90662,90663],{"class":102},"(timer)\n",[92,90665,90666,90669,90671,90674,90676,90678],{"class":94,"line":8025},[92,90667,90668],{"class":102},"        timer ",[92,90670,148],{"class":98},[92,90672,90673],{"class":1942}," setTimeout",[92,90675,103],{"class":102},[92,90677,54431],{"class":98},[92,90679,54434],{"class":102},[92,90681,90682,90685,90687],{"class":94,"line":8037},[92,90683,90684],{"class":1942},"          fn",[92,90686,13030],{"class":102},[92,90688,90689],{"class":161},"\u002F\u002F加小括号调用fn }, t)\n",[92,90691,90692],{"class":94,"line":9696},[92,90693,90694],{"class":102},"        }, t)\n",[92,90696,90697],{"class":94,"line":9721},[92,90698,52380],{"class":102},[92,90700,90701],{"class":94,"line":9744},[92,90702,2166],{"class":102},[92,90704,90705,90707,90709,90711,90713,90715,90717,90719,90721],{"class":94,"line":9768},[92,90706,90189],{"class":102},[92,90708,57795],{"class":1942},[92,90710,103],{"class":102},[92,90712,90196],{"class":207},[92,90714,12415],{"class":102},[92,90716,90202],{"class":1942},[92,90718,90205],{"class":102},[92,90720,65056],{"class":151},[92,90722,30479],{"class":102},[92,90724,90725],{"class":94,"line":9773},[92,90726,2379],{"emptyLinePlaceholder":17},[92,90728,90729],{"class":94,"line":9778},[92,90730,90731],{"class":161},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[92,90733,90734],{"class":94,"line":9783},[92,90735,90736],{"class":161},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[92,90738,90739],{"class":94,"line":9792},[92,90740,90741],{"class":161},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[92,90743,90744],{"class":94,"line":9797},[92,90745,90746],{"class":161},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[92,90748,90749,90751,90753],{"class":94,"line":9803},[92,90750,52399],{"class":102},[92,90752,51795],{"class":51282},[92,90754,51289],{"class":102},[92,90756,90757,90759,90761],{"class":94,"line":9824},[92,90758,51767],{"class":102},[92,90760,51782],{"class":51282},[92,90762,51289],{"class":102},[92,90764,90765],{"class":94,"line":9830},[92,90766,2379],{"emptyLinePlaceholder":17},[92,90768,90769,90771,90773],{"class":94,"line":9844},[92,90770,51767],{"class":102},[92,90772,50617],{"class":51282},[92,90774,51289],{"class":102},[63,90776,90778],{"id":90777},"_4172-节流","4.17.2 节流",[38,90780,90781],{},[1441,90782],{"alt":10,"src":90783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[38,90785,90786],{},[1441,90787],{"alt":10,"src":90788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[38,90790,90791],{},[252,90792,90793],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[38,90795,90796],{},"实现方式：",[1110,90798,90799],{},[49,90800,90801],{},"lodash 提供的节流函数来处理",[38,90803,90804],{},"_.throttle(func,[wait=0],[options=])",[38,90806,90807],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[83,90809,90811],{"className":50615,"code":90810,"language":50617,"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,90812,90813,90823,90837,90841,90849,90863,90883,90895,90903,90909,90919,90931,90943,90953,90965,90975,90985,90997,91001,91009,91017,91021,91029,91047,91065,91073,91091,91101,91109,91119,91123,91127,91131,91136,91141,91162,91170,91178,91182],{"__ignoreMap":10},[92,90814,90815,90817,90819,90821],{"class":94,"line":95},[92,90816,51279],{"class":102},[92,90818,51283],{"class":51282},[92,90820,51286],{"class":1942},[92,90822,51289],{"class":102},[92,90824,90825,90827,90829,90831,90833,90835],{"class":94,"line":11},[92,90826,1013],{"class":102},[92,90828,50617],{"class":51282},[92,90830,51298],{"class":1942},[92,90832,148],{"class":102},[92,90834,51303],{"class":207},[92,90836,51289],{"class":102},[92,90838,90839],{"class":94,"line":1158},[92,90840,2379],{"emptyLinePlaceholder":17},[92,90842,90843,90845,90847],{"class":94,"line":1173},[92,90844,1013],{"class":102},[92,90846,51316],{"class":51282},[92,90848,51289],{"class":102},[92,90850,90851,90853,90855,90857,90859,90861],{"class":94,"line":1179},[92,90852,52126],{"class":102},[92,90854,51326],{"class":51282},[92,90856,51329],{"class":1942},[92,90858,148],{"class":102},[92,90860,51334],{"class":207},[92,90862,51289],{"class":102},[92,90864,90865,90867,90869,90871,90873,90875,90877,90879,90881],{"class":94,"line":1193},[92,90866,52126],{"class":102},[92,90868,51326],{"class":51282},[92,90870,14900],{"class":1942},[92,90872,148],{"class":102},[92,90874,51373],{"class":207},[92,90876,51353],{"class":1942},[92,90878,148],{"class":102},[92,90880,51380],{"class":207},[92,90882,51289],{"class":102},[92,90884,90885,90887,90889,90891,90893],{"class":94,"line":1199},[92,90886,52126],{"class":102},[92,90888,51389],{"class":51282},[92,90890,51392],{"class":102},[92,90892,51389],{"class":51282},[92,90894,51289],{"class":102},[92,90896,90897,90899,90901],{"class":94,"line":1290},[92,90898,52126],{"class":102},[92,90900,5106],{"class":51282},[92,90902,51289],{"class":102},[92,90904,90905,90907],{"class":94,"line":1296},[92,90906,54734],{"class":1942},[92,90908,15552],{"class":102},[92,90910,90911,90913,90915,90917],{"class":94,"line":1308},[92,90912,72578],{"class":151},[92,90914,51419],{"class":102},[92,90916,60487],{"class":151},[92,90918,1269],{"class":102},[92,90920,90921,90923,90925,90927,90929],{"class":94,"line":1591},[92,90922,54753],{"class":151},[92,90924,51419],{"class":102},[92,90926,1701],{"class":151},[92,90928,51474],{"class":98},[92,90930,1269],{"class":102},[92,90932,90933,90935,90937,90939,90941],{"class":94,"line":1596},[92,90934,54767],{"class":151},[92,90936,51419],{"class":102},[92,90938,1701],{"class":151},[92,90940,51474],{"class":98},[92,90942,1269],{"class":102},[92,90944,90945,90947,90949,90951],{"class":94,"line":1602},[92,90946,54866],{"class":151},[92,90948,51419],{"class":102},[92,90950,89988],{"class":151},[92,90952,1269],{"class":102},[92,90954,90955,90957,90959,90961,90963],{"class":94,"line":1607},[92,90956,54904],{"class":151},[92,90958,51419],{"class":102},[92,90960,928],{"class":151},[92,90962,51474],{"class":98},[92,90964,1269],{"class":102},[92,90966,90967,90969,90971,90973],{"class":94,"line":1621},[92,90968,57398],{"class":151},[92,90970,51419],{"class":102},[92,90972,60824],{"class":151},[92,90974,1269],{"class":102},[92,90976,90977,90979,90981,90983],{"class":94,"line":1626},[92,90978,57268],{"class":151},[92,90980,51419],{"class":102},[92,90982,51574],{"class":151},[92,90984,1269],{"class":102},[92,90986,90987,90989,90991,90993,90995],{"class":94,"line":1632},[92,90988,90027],{"class":151},[92,90990,51419],{"class":102},[92,90992,422],{"class":151},[92,90994,51474],{"class":98},[92,90996,1269],{"class":102},[92,90998,90999],{"class":94,"line":1653},[92,91000,2166],{"class":102},[92,91002,91003,91005,91007],{"class":94,"line":1658},[92,91004,52399],{"class":102},[92,91006,5106],{"class":51282},[92,91008,51289],{"class":102},[92,91010,91011,91013,91015],{"class":94,"line":1672},[92,91012,51767],{"class":102},[92,91014,51316],{"class":51282},[92,91016,51289],{"class":102},[92,91018,91019],{"class":94,"line":1677},[92,91020,2379],{"emptyLinePlaceholder":17},[92,91022,91023,91025,91027],{"class":94,"line":1706},[92,91024,1013],{"class":102},[92,91026,51782],{"class":51282},[92,91028,51289],{"class":102},[92,91030,91031,91033,91035,91037,91039,91041,91043,91045],{"class":94,"line":1711},[92,91032,52126],{"class":102},[92,91034,51593],{"class":51282},[92,91036,53468],{"class":1942},[92,91038,148],{"class":102},[92,91040,53473],{"class":207},[92,91042,55296],{"class":102},[92,91044,51593],{"class":51282},[92,91046,51289],{"class":102},[92,91048,91049,91051,91053,91055,91057,91059,91061,91063],{"class":94,"line":1728},[92,91050,52126],{"class":102},[92,91052,51795],{"class":51282},[92,91054,55221],{"class":1942},[92,91056,148],{"class":102},[92,91058,88256],{"class":207},[92,91060,55296],{"class":102},[92,91062,51795],{"class":51282},[92,91064,51289],{"class":102},[92,91066,91067,91069,91071],{"class":94,"line":1733},[92,91068,52126],{"class":102},[92,91070,51795],{"class":51282},[92,91072,51289],{"class":102},[92,91074,91075,91077,91079,91081,91083,91085,91087,91089],{"class":94,"line":1738},[92,91076,11201],{"class":98},[92,91078,86915],{"class":151},[92,91080,13544],{"class":98},[92,91082,54378],{"class":102},[92,91084,54381],{"class":1942},[92,91086,103],{"class":102},[92,91088,90128],{"class":207},[92,91090,109],{"class":102},[92,91092,91093,91095,91097,91099],{"class":94,"line":1743},[92,91094,52201],{"class":98},[92,91096,9418],{"class":102},[92,91098,148],{"class":98},[92,91100,47315],{"class":151},[92,91102,91103,91105,91107],{"class":94,"line":1757},[92,91104,70066],{"class":98},[92,91106,90147],{"class":1942},[92,91108,10833],{"class":102},[92,91110,91111,91113,91115,91117],{"class":94,"line":1762},[92,91112,90154],{"class":102},[92,91114,148],{"class":98},[92,91116,3011],{"class":102},[92,91118,2681],{"class":98},[92,91120,91121],{"class":94,"line":2556},[92,91122,90165],{"class":161},[92,91124,91125],{"class":94,"line":2570},[92,91126,2166],{"class":102},[92,91128,91129],{"class":94,"line":2578},[92,91130,90174],{"class":161},[92,91132,91133],{"class":94,"line":2583},[92,91134,91135],{"class":161},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[92,91137,91138],{"class":94,"line":2589},[92,91139,91140],{"class":161},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[92,91142,91143,91145,91147,91149,91151,91153,91156,91158,91160],{"class":94,"line":2595},[92,91144,90189],{"class":102},[92,91146,57795],{"class":1942},[92,91148,103],{"class":102},[92,91150,90196],{"class":207},[92,91152,90199],{"class":102},[92,91154,91155],{"class":1942},"throttle",[92,91157,90205],{"class":102},[92,91159,65056],{"class":151},[92,91161,30479],{"class":102},[92,91163,91164,91166,91168],{"class":94,"line":2600},[92,91165,52399],{"class":102},[92,91167,51795],{"class":51282},[92,91169,51289],{"class":102},[92,91171,91172,91174,91176],{"class":94,"line":7928},[92,91173,51767],{"class":102},[92,91175,51782],{"class":51282},[92,91177,51289],{"class":102},[92,91179,91180],{"class":94,"line":7952},[92,91181,2379],{"emptyLinePlaceholder":17},[92,91183,91184,91186,91188],{"class":94,"line":7957},[92,91185,51767],{"class":102},[92,91187,50617],{"class":51282},[92,91189,51289],{"class":102},[1110,91191,91192],{},[49,91193,91194],{},"手写一个节流函数来处理",[38,91196,70934],{},[38,91198,90248],{},[38,91200,91201],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[38,91203,91204],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[83,91206,91208],{"className":50615,"code":91207,"language":50617,"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,91209,91210,91220,91234,91238,91246,91260,91280,91292,91300,91306,91316,91328,91340,91350,91362,91372,91382,91394,91398,91406,91414,91418,91426,91444,91462,91470,91488,91498,91506,91516,91520,91524,91528,91533,91538,91543,91548,91553,91558,91575,91581,91589,91600,91615,91622,91627,91632,91642,91647,91652,91657,91661,91665,91669,91689,91697,91705,91709],{"__ignoreMap":10},[92,91211,91212,91214,91216,91218],{"class":94,"line":95},[92,91213,51279],{"class":102},[92,91215,51283],{"class":51282},[92,91217,51286],{"class":1942},[92,91219,51289],{"class":102},[92,91221,91222,91224,91226,91228,91230,91232],{"class":94,"line":11},[92,91223,1013],{"class":102},[92,91225,50617],{"class":51282},[92,91227,51298],{"class":1942},[92,91229,148],{"class":102},[92,91231,51303],{"class":207},[92,91233,51289],{"class":102},[92,91235,91236],{"class":94,"line":1158},[92,91237,2379],{"emptyLinePlaceholder":17},[92,91239,91240,91242,91244],{"class":94,"line":1173},[92,91241,1013],{"class":102},[92,91243,51316],{"class":51282},[92,91245,51289],{"class":102},[92,91247,91248,91250,91252,91254,91256,91258],{"class":94,"line":1179},[92,91249,52126],{"class":102},[92,91251,51326],{"class":51282},[92,91253,51329],{"class":1942},[92,91255,148],{"class":102},[92,91257,51334],{"class":207},[92,91259,51289],{"class":102},[92,91261,91262,91264,91266,91268,91270,91272,91274,91276,91278],{"class":94,"line":1193},[92,91263,52126],{"class":102},[92,91265,51326],{"class":51282},[92,91267,14900],{"class":1942},[92,91269,148],{"class":102},[92,91271,51373],{"class":207},[92,91273,51353],{"class":1942},[92,91275,148],{"class":102},[92,91277,51380],{"class":207},[92,91279,51289],{"class":102},[92,91281,91282,91284,91286,91288,91290],{"class":94,"line":1199},[92,91283,52126],{"class":102},[92,91285,51389],{"class":51282},[92,91287,51392],{"class":102},[92,91289,51389],{"class":51282},[92,91291,51289],{"class":102},[92,91293,91294,91296,91298],{"class":94,"line":1290},[92,91295,52126],{"class":102},[92,91297,5106],{"class":51282},[92,91299,51289],{"class":102},[92,91301,91302,91304],{"class":94,"line":1296},[92,91303,54734],{"class":1942},[92,91305,15552],{"class":102},[92,91307,91308,91310,91312,91314],{"class":94,"line":1308},[92,91309,72578],{"class":151},[92,91311,51419],{"class":102},[92,91313,60487],{"class":151},[92,91315,1269],{"class":102},[92,91317,91318,91320,91322,91324,91326],{"class":94,"line":1591},[92,91319,54753],{"class":151},[92,91321,51419],{"class":102},[92,91323,1701],{"class":151},[92,91325,51474],{"class":98},[92,91327,1269],{"class":102},[92,91329,91330,91332,91334,91336,91338],{"class":94,"line":1596},[92,91331,54767],{"class":151},[92,91333,51419],{"class":102},[92,91335,1701],{"class":151},[92,91337,51474],{"class":98},[92,91339,1269],{"class":102},[92,91341,91342,91344,91346,91348],{"class":94,"line":1602},[92,91343,54866],{"class":151},[92,91345,51419],{"class":102},[92,91347,89988],{"class":151},[92,91349,1269],{"class":102},[92,91351,91352,91354,91356,91358,91360],{"class":94,"line":1607},[92,91353,54904],{"class":151},[92,91355,51419],{"class":102},[92,91357,928],{"class":151},[92,91359,51474],{"class":98},[92,91361,1269],{"class":102},[92,91363,91364,91366,91368,91370],{"class":94,"line":1621},[92,91365,57398],{"class":151},[92,91367,51419],{"class":102},[92,91369,60824],{"class":151},[92,91371,1269],{"class":102},[92,91373,91374,91376,91378,91380],{"class":94,"line":1626},[92,91375,57268],{"class":151},[92,91377,51419],{"class":102},[92,91379,51574],{"class":151},[92,91381,1269],{"class":102},[92,91383,91384,91386,91388,91390,91392],{"class":94,"line":1632},[92,91385,90027],{"class":151},[92,91387,51419],{"class":102},[92,91389,422],{"class":151},[92,91391,51474],{"class":98},[92,91393,1269],{"class":102},[92,91395,91396],{"class":94,"line":1653},[92,91397,2166],{"class":102},[92,91399,91400,91402,91404],{"class":94,"line":1658},[92,91401,52399],{"class":102},[92,91403,5106],{"class":51282},[92,91405,51289],{"class":102},[92,91407,91408,91410,91412],{"class":94,"line":1672},[92,91409,51767],{"class":102},[92,91411,51316],{"class":51282},[92,91413,51289],{"class":102},[92,91415,91416],{"class":94,"line":1677},[92,91417,2379],{"emptyLinePlaceholder":17},[92,91419,91420,91422,91424],{"class":94,"line":1706},[92,91421,1013],{"class":102},[92,91423,51782],{"class":51282},[92,91425,51289],{"class":102},[92,91427,91428,91430,91432,91434,91436,91438,91440,91442],{"class":94,"line":1711},[92,91429,52126],{"class":102},[92,91431,51593],{"class":51282},[92,91433,53468],{"class":1942},[92,91435,148],{"class":102},[92,91437,53473],{"class":207},[92,91439,55296],{"class":102},[92,91441,51593],{"class":51282},[92,91443,51289],{"class":102},[92,91445,91446,91448,91450,91452,91454,91456,91458,91460],{"class":94,"line":1728},[92,91447,52126],{"class":102},[92,91449,51795],{"class":51282},[92,91451,55221],{"class":1942},[92,91453,148],{"class":102},[92,91455,88256],{"class":207},[92,91457,55296],{"class":102},[92,91459,51795],{"class":51282},[92,91461,51289],{"class":102},[92,91463,91464,91466,91468],{"class":94,"line":1733},[92,91465,52126],{"class":102},[92,91467,51795],{"class":51282},[92,91469,51289],{"class":102},[92,91471,91472,91474,91476,91478,91480,91482,91484,91486],{"class":94,"line":1738},[92,91473,11201],{"class":98},[92,91475,86915],{"class":151},[92,91477,13544],{"class":98},[92,91479,54378],{"class":102},[92,91481,54381],{"class":1942},[92,91483,103],{"class":102},[92,91485,90128],{"class":207},[92,91487,109],{"class":102},[92,91489,91490,91492,91494,91496],{"class":94,"line":1743},[92,91491,52201],{"class":98},[92,91493,9418],{"class":102},[92,91495,148],{"class":98},[92,91497,47315],{"class":151},[92,91499,91500,91502,91504],{"class":94,"line":1757},[92,91501,70066],{"class":98},[92,91503,90147],{"class":1942},[92,91505,10833],{"class":102},[92,91507,91508,91510,91512,91514],{"class":94,"line":1762},[92,91509,90154],{"class":102},[92,91511,148],{"class":98},[92,91513,3011],{"class":102},[92,91515,2681],{"class":98},[92,91517,91518],{"class":94,"line":2556},[92,91519,90165],{"class":161},[92,91521,91522],{"class":94,"line":2570},[92,91523,2166],{"class":102},[92,91525,91526],{"class":94,"line":2578},[92,91527,90174],{"class":161},[92,91529,91530],{"class":94,"line":2583},[92,91531,91532],{"class":161},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[92,91534,91535],{"class":94,"line":2589},[92,91536,91537],{"class":161},"    \u002F\u002F 1.声明一个定时器变量\n",[92,91539,91540],{"class":94,"line":2595},[92,91541,91542],{"class":161},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[92,91544,91545],{"class":94,"line":2600},[92,91546,91547],{"class":161},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[92,91549,91550],{"class":94,"line":7928},[92,91551,91552],{"class":161},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[92,91554,91555],{"class":94,"line":7952},[92,91556,91557],{"class":161},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[92,91559,91560,91562,91565,91567,91569,91571,91573],{"class":94,"line":7957},[92,91561,70066],{"class":98},[92,91563,91564],{"class":1942}," throttle",[92,91566,103],{"class":102},[92,91568,90619],{"class":5196},[92,91570,12415],{"class":102},[92,91572,823],{"class":5196},[92,91574,12422],{"class":102},[92,91576,91577,91579],{"class":94,"line":7963},[92,91578,79754],{"class":98},[92,91580,90632],{"class":102},[92,91582,91583,91585,91587],{"class":94,"line":7990},[92,91584,73964],{"class":98},[92,91586,58900],{"class":98},[92,91588,54434],{"class":102},[92,91590,91591,91593,91595,91597],{"class":94,"line":7995},[92,91592,2476],{"class":98},[92,91594,1637],{"class":102},[92,91596,329],{"class":98},[92,91598,91599],{"class":102},"timer) {\n",[92,91601,91602,91605,91607,91609,91611,91613],{"class":94,"line":8001},[92,91603,91604],{"class":102},"          timer ",[92,91606,148],{"class":98},[92,91608,90673],{"class":1942},[92,91610,103],{"class":102},[92,91612,54431],{"class":98},[92,91614,54434],{"class":102},[92,91616,91617,91620],{"class":94,"line":8013},[92,91618,91619],{"class":1942},"            fn",[92,91621,1955],{"class":102},[92,91623,91624],{"class":94,"line":8025},[92,91625,91626],{"class":161},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[92,91628,91629],{"class":94,"line":8037},[92,91630,91631],{"class":161},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[92,91633,91634,91637,91639],{"class":94,"line":9696},[92,91635,91636],{"class":102},"            timer ",[92,91638,148],{"class":98},[92,91640,91641],{"class":151}," null\n",[92,91643,91644],{"class":94,"line":9721},[92,91645,91646],{"class":161},"            \u002F\u002F 不能用clearTimeout(timer)\n",[92,91648,91649],{"class":94,"line":9744},[92,91650,91651],{"class":161},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[92,91653,91654],{"class":94,"line":9768},[92,91655,91656],{"class":102},"          }, t)\n",[92,91658,91659],{"class":94,"line":9773},[92,91660,2508],{"class":102},[92,91662,91663],{"class":94,"line":9778},[92,91664,52380],{"class":102},[92,91666,91667],{"class":94,"line":9783},[92,91668,2166],{"class":102},[92,91670,91671,91673,91675,91677,91679,91681,91683,91685,91687],{"class":94,"line":9792},[92,91672,90189],{"class":102},[92,91674,57795],{"class":1942},[92,91676,103],{"class":102},[92,91678,90196],{"class":207},[92,91680,12415],{"class":102},[92,91682,91155],{"class":1942},[92,91684,90205],{"class":102},[92,91686,65056],{"class":151},[92,91688,30479],{"class":102},[92,91690,91691,91693,91695],{"class":94,"line":9797},[92,91692,52399],{"class":102},[92,91694,51795],{"class":51282},[92,91696,51289],{"class":102},[92,91698,91699,91701,91703],{"class":94,"line":9803},[92,91700,51767],{"class":102},[92,91702,51782],{"class":51282},[92,91704,51289],{"class":102},[92,91706,91707],{"class":94,"line":9824},[92,91708,2379],{"emptyLinePlaceholder":17},[92,91710,91711,91713,91715],{"class":94,"line":9830},[92,91712,51767],{"class":102},[92,91714,50617],{"class":51282},[92,91716,51289],{"class":102},[63,91718,91720],{"id":91719},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[83,91722,91724],{"className":53049,"code":91723,"language":53051,"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,91725,91726,91734,91742,91747,91752,91757,91762,91766,91774],{"__ignoreMap":10},[92,91727,91728,91730,91732],{"class":94,"line":95},[92,91729,1013],{"class":102},[92,91731,51782],{"class":51282},[92,91733,51289],{"class":102},[92,91735,91736,91738,91740],{"class":94,"line":11},[92,91737,52126],{"class":102},[92,91739,51795],{"class":51282},[92,91741,51289],{"class":102},[92,91743,91744],{"class":94,"line":1158},[92,91745,91746],{"class":102},"    let timer = null\n",[92,91748,91749],{"class":94,"line":1173},[92,91750,91751],{"class":102},"    timer = setTimeout(() => {\n",[92,91753,91754],{"class":94,"line":1179},[92,91755,91756],{"class":102},"      clearTimeout(timer)\n",[92,91758,91759],{"class":94,"line":1193},[92,91760,91761],{"class":102},"      console.log(timer)\n",[92,91763,91764],{"class":94,"line":1199},[92,91765,60207],{"class":102},[92,91767,91768,91770,91772],{"class":94,"line":1290},[92,91769,52399],{"class":102},[92,91771,51795],{"class":51282},[92,91773,51289],{"class":102},[92,91775,91776,91778,91780],{"class":94,"line":1296},[92,91777,51767],{"class":102},[92,91779,51782],{"class":51282},[92,91781,51289],{"class":102},[38,91783,91784],{},"输出为1",[38,91786,91787],{},"在开启的定时器里边写清除定时器",[38,91789,91790],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[63,91792,91794],{"id":91793},"_4174-节流综合案例","4.17.4 节流综合案例",[38,91796,91797],{},"页面打开，可以记录上一次的视频播放位置",[38,91799,91800],{},[1441,91801],{"alt":10,"src":91802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[38,91804,91805],{},[1441,91806],{"alt":10,"src":91807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[83,91809,91811],{"className":50615,"code":91810,"language":50617,"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,91812,91813,91823,91837,91841,91849,91863,91883,91903,91925,91938,91946,91952,91962,91972,91982,91986,91990,91997,92010,92022,92026,92030,92040,92052,92066,92070,92074,92081,92091,92104,92116,92126,92136,92152,92164,92168,92172,92180,92190,92202,92212,92222,92232,92236,92240,92250,92261,92265,92273,92281,92285,92293,92308,92323,92338,92359,92367,92375,92390,92412,92420,92435,92461,92487,92513,92521,92529,92548,92556,92561,92580,92585,92603,92608,92613,92621,92626,92640,92648,92653,92670,92674,92679,92701,92705,92713,92721,92725],{"__ignoreMap":10},[92,91814,91815,91817,91819,91821],{"class":94,"line":95},[92,91816,51279],{"class":102},[92,91818,51283],{"class":51282},[92,91820,51286],{"class":1942},[92,91822,51289],{"class":102},[92,91824,91825,91827,91829,91831,91833,91835],{"class":94,"line":11},[92,91826,1013],{"class":102},[92,91828,50617],{"class":51282},[92,91830,51298],{"class":1942},[92,91832,148],{"class":102},[92,91834,51303],{"class":207},[92,91836,51289],{"class":102},[92,91838,91839],{"class":94,"line":1158},[92,91840,2379],{"emptyLinePlaceholder":17},[92,91842,91843,91845,91847],{"class":94,"line":1173},[92,91844,1013],{"class":102},[92,91846,51316],{"class":51282},[92,91848,51289],{"class":102},[92,91850,91851,91853,91855,91857,91859,91861],{"class":94,"line":1179},[92,91852,52126],{"class":102},[92,91854,51326],{"class":51282},[92,91856,51329],{"class":1942},[92,91858,148],{"class":102},[92,91860,51334],{"class":207},[92,91862,59109],{"class":102},[92,91864,91865,91867,91869,91871,91873,91875,91877,91879,91881],{"class":94,"line":1193},[92,91866,52126],{"class":102},[92,91868,51326],{"class":51282},[92,91870,51345],{"class":1942},[92,91872,148],{"class":102},[92,91874,51350],{"class":207},[92,91876,51353],{"class":1942},[92,91878,148],{"class":102},[92,91880,51358],{"class":207},[92,91882,59109],{"class":102},[92,91884,91885,91887,91889,91891,91893,91895,91897,91899,91901],{"class":94,"line":1199},[92,91886,52126],{"class":102},[92,91888,51326],{"class":51282},[92,91890,14900],{"class":1942},[92,91892,148],{"class":102},[92,91894,51373],{"class":207},[92,91896,51353],{"class":1942},[92,91898,148],{"class":102},[92,91900,51380],{"class":207},[92,91902,59109],{"class":102},[92,91904,91905,91907,91909,91911,91913,91916,91918,91920,91923],{"class":94,"line":1290},[92,91906,52126],{"class":102},[92,91908,51326],{"class":51282},[92,91910,14900],{"class":1942},[92,91912,148],{"class":102},[92,91914,91915],{"class":207},"\"referrer\"",[92,91917,51353],{"class":1942},[92,91919,148],{"class":102},[92,91921,91922],{"class":207},"\"never\"",[92,91924,59109],{"class":102},[92,91926,91927,91929,91931,91934,91936],{"class":94,"line":1296},[92,91928,52126],{"class":102},[92,91930,51389],{"class":51282},[92,91932,91933],{"class":102},">综合案例\u003C\u002F",[92,91935,51389],{"class":51282},[92,91937,51289],{"class":102},[92,91939,91940,91942,91944],{"class":94,"line":1308},[92,91941,52126],{"class":102},[92,91943,5106],{"class":51282},[92,91945,51289],{"class":102},[92,91947,91948,91950],{"class":94,"line":1591},[92,91949,6383],{"class":51282},[92,91951,15552],{"class":102},[92,91953,91954,91956,91958,91960],{"class":94,"line":1596},[92,91955,54677],{"class":151},[92,91957,51419],{"class":102},[92,91959,294],{"class":151},[92,91961,1269],{"class":102},[92,91963,91964,91966,91968,91970],{"class":94,"line":1602},[92,91965,54688],{"class":151},[92,91967,51419],{"class":102},[92,91969,294],{"class":151},[92,91971,1269],{"class":102},[92,91973,91974,91976,91978,91980],{"class":94,"line":1607},[92,91975,72578],{"class":151},[92,91977,51419],{"class":102},[92,91979,60487],{"class":151},[92,91981,1269],{"class":102},[92,91983,91984],{"class":94,"line":1621},[92,91985,2166],{"class":102},[92,91987,91988],{"class":94,"line":1626},[92,91989,2379],{"emptyLinePlaceholder":17},[92,91991,91992,91995],{"class":94,"line":1632},[92,91993,91994],{"class":1942},"    .container",[92,91996,15552],{"class":102},[92,91998,91999,92001,92003,92006,92008],{"class":94,"line":1653},[92,92000,54753],{"class":151},[92,92002,51419],{"class":102},[92,92004,92005],{"class":151},"1200",[92,92007,51474],{"class":98},[92,92009,1269],{"class":102},[92,92011,92012,92014,92016,92018,92020],{"class":94,"line":1658},[92,92013,54688],{"class":151},[92,92015,51419],{"class":102},[92,92017,294],{"class":151},[92,92019,51538],{"class":151},[92,92021,1269],{"class":102},[92,92023,92024],{"class":94,"line":1672},[92,92025,2166],{"class":102},[92,92027,92028],{"class":94,"line":1677},[92,92029,2379],{"emptyLinePlaceholder":17},[92,92031,92032,92035,92038],{"class":94,"line":1706},[92,92033,92034],{"class":1942},"    .video",[92,92036,92037],{"class":51282}," video",[92,92039,15552],{"class":102},[92,92041,92042,92044,92046,92048,92050],{"class":94,"line":1711},[92,92043,54753],{"class":151},[92,92045,51419],{"class":102},[92,92047,414],{"class":151},[92,92049,431],{"class":98},[92,92051,1269],{"class":102},[92,92053,92054,92056,92058,92060,92062,92064],{"class":94,"line":1728},[92,92055,54677],{"class":151},[92,92057,51419],{"class":102},[92,92059,803],{"class":151},[92,92061,51474],{"class":98},[92,92063,4072],{"class":151},[92,92065,1269],{"class":102},[92,92067,92068],{"class":94,"line":1733},[92,92069,2166],{"class":102},[92,92071,92072],{"class":94,"line":1738},[92,92073,2379],{"emptyLinePlaceholder":17},[92,92075,92076,92079],{"class":94,"line":1743},[92,92077,92078],{"class":1942},"    .elevator",[92,92080,15552],{"class":102},[92,92082,92083,92085,92087,92089],{"class":94,"line":1757},[92,92084,54741],{"class":151},[92,92086,51419],{"class":102},[92,92088,86215],{"class":151},[92,92090,1269],{"class":102},[92,92092,92093,92095,92097,92100,92102],{"class":94,"line":1762},[92,92094,54929],{"class":151},[92,92096,51419],{"class":102},[92,92098,92099],{"class":151},"280",[92,92101,51474],{"class":98},[92,92103,1269],{"class":102},[92,92105,92106,92108,92110,92112,92114],{"class":94,"line":2556},[92,92107,86409],{"class":151},[92,92109,51419],{"class":102},[92,92111,803],{"class":151},[92,92113,51474],{"class":98},[92,92115,1269],{"class":102},[92,92117,92118,92120,92122,92124],{"class":94,"line":2570},[92,92119,86222],{"class":151},[92,92121,51419],{"class":102},[92,92123,86227],{"class":151},[92,92125,1269],{"class":102},[92,92127,92128,92130,92132,92134],{"class":94,"line":2578},[92,92129,61703],{"class":151},[92,92131,51419],{"class":102},[92,92133,60824],{"class":151},[92,92135,1269],{"class":102},[92,92137,92138,92140,92142,92144,92146,92148,92150],{"class":94,"line":2583},[92,92139,61959],{"class":151},[92,92141,51419],{"class":102},[92,92143,320],{"class":151},[92,92145,51474],{"class":98},[92,92147,51503],{"class":151},[92,92149,62226],{"class":151},[92,92151,1269],{"class":102},[92,92153,92154,92156,92158,92160,92162],{"class":94,"line":2589},[92,92155,54753],{"class":151},[92,92157,51419],{"class":102},[92,92159,1010],{"class":151},[92,92161,51474],{"class":98},[92,92163,1269],{"class":102},[92,92165,92166],{"class":94,"line":2595},[92,92167,2166],{"class":102},[92,92169,92170],{"class":94,"line":2600},[92,92171,2379],{"emptyLinePlaceholder":17},[92,92173,92174,92176,92178],{"class":94,"line":7928},[92,92175,92078],{"class":1942},[92,92177,1377],{"class":51282},[92,92179,15552],{"class":102},[92,92181,92182,92184,92186,92188],{"class":94,"line":7952},[92,92183,54991],{"class":151},[92,92185,51419],{"class":102},[92,92187,60851],{"class":151},[92,92189,1269],{"class":102},[92,92191,92192,92194,92196,92198,92200],{"class":94,"line":7957},[92,92193,54677],{"class":151},[92,92195,51419],{"class":102},[92,92197,549],{"class":151},[92,92199,51474],{"class":98},[92,92201,1269],{"class":102},[92,92203,92204,92206,92208,92210],{"class":94,"line":7963},[92,92205,63952],{"class":151},[92,92207,51419],{"class":102},[92,92209,54719],{"class":151},[92,92211,1269],{"class":102},[92,92213,92214,92216,92218,92220],{"class":94,"line":7990},[92,92215,57268],{"class":151},[92,92217,51419],{"class":102},[92,92219,51574],{"class":151},[92,92221,1269],{"class":102},[92,92223,92224,92226,92228,92230],{"class":94,"line":7995},[92,92225,57398],{"class":151},[92,92227,51419],{"class":102},[92,92229,62052],{"class":151},[92,92231,1269],{"class":102},[92,92233,92234],{"class":94,"line":8001},[92,92235,2166],{"class":102},[92,92237,92238],{"class":94,"line":8013},[92,92239,2379],{"emptyLinePlaceholder":17},[92,92241,92242,92244,92246,92248],{"class":94,"line":8025},[92,92243,92078],{"class":1942},[92,92245,1377],{"class":51282},[92,92247,64006],{"class":1942},[92,92249,15552],{"class":102},[92,92251,92252,92254,92256,92259],{"class":94,"line":8037},[92,92253,57398],{"class":151},[92,92255,51419],{"class":102},[92,92257,92258],{"class":151},"#1286ff",[92,92260,1269],{"class":102},[92,92262,92263],{"class":94,"line":9696},[92,92264,2166],{"class":102},[92,92266,92267,92269,92271],{"class":94,"line":9721},[92,92268,52399],{"class":102},[92,92270,5106],{"class":51282},[92,92272,51289],{"class":102},[92,92274,92275,92277,92279],{"class":94,"line":9744},[92,92276,51767],{"class":102},[92,92278,51316],{"class":51282},[92,92280,51289],{"class":102},[92,92282,92283],{"class":94,"line":9768},[92,92284,2379],{"emptyLinePlaceholder":17},[92,92286,92287,92289,92291],{"class":94,"line":9773},[92,92288,1013],{"class":102},[92,92290,51782],{"class":51282},[92,92292,51289],{"class":102},[92,92294,92295,92297,92299,92301,92303,92306],{"class":94,"line":9778},[92,92296,52126],{"class":102},[92,92298,51593],{"class":51282},[92,92300,53468],{"class":1942},[92,92302,148],{"class":102},[92,92304,92305],{"class":207},"\"container\"",[92,92307,51289],{"class":102},[92,92309,92310,92312,92314,92316,92318,92321],{"class":94,"line":9783},[92,92311,51323],{"class":102},[92,92313,51593],{"class":51282},[92,92315,53468],{"class":1942},[92,92317,148],{"class":102},[92,92319,92320],{"class":207},"\"header\"",[92,92322,51289],{"class":102},[92,92324,92325,92327,92329,92331,92333,92336],{"class":94,"line":9792},[92,92326,55216],{"class":102},[92,92328,341],{"class":51282},[92,92330,61039],{"class":1942},[92,92332,148],{"class":102},[92,92334,92335],{"class":207},"\"http:\u002F\u002Fpip.itcast.cn\"",[92,92337,51289],{"class":102},[92,92339,92340,92342,92344,92346,92348,92351,92353,92355,92357],{"class":94,"line":9797},[92,92341,55284],{"class":102},[92,92343,1441],{"class":51282},[92,92345,55221],{"class":1942},[92,92347,148],{"class":102},[92,92349,92350],{"class":207},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[92,92352,55229],{"class":1942},[92,92354,148],{"class":102},[92,92356,7632],{"class":207},[92,92358,59109],{"class":102},[92,92360,92361,92363,92365],{"class":94,"line":9803},[92,92362,55389],{"class":102},[92,92364,341],{"class":51282},[92,92366,51289],{"class":102},[92,92368,92369,92371,92373],{"class":94,"line":9824},[92,92370,51758],{"class":102},[92,92372,51593],{"class":51282},[92,92374,51289],{"class":102},[92,92376,92377,92379,92381,92383,92385,92388],{"class":94,"line":9830},[92,92378,51323],{"class":102},[92,92380,51593],{"class":51282},[92,92382,53468],{"class":1942},[92,92384,148],{"class":102},[92,92386,92387],{"class":207},"\"video\"",[92,92389,51289],{"class":102},[92,92391,92392,92394,92396,92398,92400,92403,92406,92408,92410],{"class":94,"line":9844},[92,92393,55216],{"class":102},[92,92395,28165],{"class":51282},[92,92397,55221],{"class":1942},[92,92399,148],{"class":102},[92,92401,92402],{"class":207},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[92,92404,92405],{"class":1942}," controls",[92,92407,55296],{"class":102},[92,92409,28165],{"class":51282},[92,92411,51289],{"class":102},[92,92413,92414,92416,92418],{"class":94,"line":9850},[92,92415,51758],{"class":102},[92,92417,51593],{"class":51282},[92,92419,51289],{"class":102},[92,92421,92422,92424,92426,92428,92430,92433],{"class":94,"line":9877},[92,92423,51323],{"class":102},[92,92425,51593],{"class":51282},[92,92427,53468],{"class":1942},[92,92429,148],{"class":102},[92,92431,92432],{"class":207},"\"elevator\"",[92,92434,51289],{"class":102},[92,92436,92437,92439,92441,92443,92445,92447,92450,92452,92454,92457,92459],{"class":94,"line":9886},[92,92438,55216],{"class":102},[92,92440,341],{"class":51282},[92,92442,61039],{"class":1942},[92,92444,148],{"class":102},[92,92446,64218],{"class":207},[92,92448,92449],{"class":1942}," data-ref",[92,92451,148],{"class":102},[92,92453,92387],{"class":207},[92,92455,92456],{"class":102},">视频介绍\u003C\u002F",[92,92458,341],{"class":51282},[92,92460,51289],{"class":102},[92,92462,92463,92465,92467,92469,92471,92473,92475,92477,92480,92483,92485],{"class":94,"line":9892},[92,92464,55216],{"class":102},[92,92466,341],{"class":51282},[92,92468,61039],{"class":1942},[92,92470,148],{"class":102},[92,92472,64218],{"class":207},[92,92474,92449],{"class":1942},[92,92476,148],{"class":102},[92,92478,92479],{"class":207},"\"intro\"",[92,92481,92482],{"class":102},">课程简介\u003C\u002F",[92,92484,341],{"class":51282},[92,92486,51289],{"class":102},[92,92488,92489,92491,92493,92495,92497,92499,92501,92503,92506,92509,92511],{"class":94,"line":9900},[92,92490,55216],{"class":102},[92,92492,341],{"class":51282},[92,92494,61039],{"class":1942},[92,92496,148],{"class":102},[92,92498,64218],{"class":207},[92,92500,92449],{"class":1942},[92,92502,148],{"class":102},[92,92504,92505],{"class":207},"\"outline\"",[92,92507,92508],{"class":102},">评论列表\u003C\u002F",[92,92510,341],{"class":51282},[92,92512,51289],{"class":102},[92,92514,92515,92517,92519],{"class":94,"line":9905},[92,92516,51758],{"class":102},[92,92518,51593],{"class":51282},[92,92520,51289],{"class":102},[92,92522,92523,92525,92527],{"class":94,"line":16584},[92,92524,52399],{"class":102},[92,92526,51593],{"class":51282},[92,92528,51289],{"class":102},[92,92530,92531,92533,92535,92537,92539,92542,92544,92546],{"class":94,"line":16590},[92,92532,52126],{"class":102},[92,92534,51795],{"class":51282},[92,92536,55221],{"class":1942},[92,92538,148],{"class":102},[92,92540,92541],{"class":207},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[92,92543,55296],{"class":102},[92,92545,51795],{"class":51282},[92,92547,51289],{"class":102},[92,92549,92550,92552,92554],{"class":94,"line":16613},[92,92551,52126],{"class":102},[92,92553,51795],{"class":51282},[92,92555,51289],{"class":102},[92,92557,92558],{"class":94,"line":16619},[92,92559,92560],{"class":161},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[92,92562,92563,92565,92567,92569,92571,92573,92575,92578],{"class":94,"line":16642},[92,92564,11201],{"class":98},[92,92566,92037],{"class":151},[92,92568,13544],{"class":98},[92,92570,54378],{"class":102},[92,92572,54381],{"class":1942},[92,92574,103],{"class":102},[92,92576,92577],{"class":207},"'video'",[92,92579,109],{"class":102},[92,92581,92582],{"class":94,"line":16656},[92,92583,92584],{"class":161},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[92,92586,92587,92590,92592,92594,92596,92599,92601],{"class":94,"line":16676},[92,92588,92589],{"class":102},"    video.ontimeupdate ",[92,92591,148],{"class":98},[92,92593,88337],{"class":102},[92,92595,91155],{"class":1942},[92,92597,92598],{"class":102},"(() ",[92,92600,84704],{"class":98},[92,92602,15552],{"class":102},[92,92604,92605],{"class":94,"line":16682},[92,92606,92607],{"class":161},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[92,92609,92610],{"class":94,"line":16693},[92,92611,92612],{"class":161},"      \u002F\u002F 控制台输出当前的时间\n",[92,92614,92615,92618],{"class":94,"line":16716},[92,92616,92617],{"class":161},"      \u002F\u002F console.log(video.currentTime)",[92,92619,92620],{"class":161},"  \u002F\u002F获得当前的视频时间\n",[92,92622,92623],{"class":94,"line":16738},[92,92624,92625],{"class":161},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[92,92627,92628,92630,92632,92634,92637],{"class":94,"line":16743},[92,92629,74665],{"class":102},[92,92631,71636],{"class":1942},[92,92633,103],{"class":102},[92,92635,92636],{"class":207},"'currentTime'",[92,92638,92639],{"class":102},", video.currentTime)\n",[92,92641,92642,92644,92646],{"class":94,"line":16749},[92,92643,54517],{"class":102},[92,92645,6390],{"class":151},[92,92647,109],{"class":102},[92,92649,92650],{"class":94,"line":16763},[92,92651,92652],{"class":161},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[92,92654,92655,92658,92661,92663,92666,92668],{"class":94,"line":16776},[92,92656,92657],{"class":102},"    video.",[92,92659,92660],{"class":1942},"onloadeddata",[92,92662,13544],{"class":98},[92,92664,92665],{"class":102}," () ",[92,92667,84704],{"class":98},[92,92669,15552],{"class":102},[92,92671,92672],{"class":94,"line":16781},[92,92673,59994],{"class":161},[92,92675,92676],{"class":94,"line":16795},[92,92677,92678],{"class":161},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[92,92680,92681,92684,92686,92689,92691,92693,92695,92697,92699],{"class":94,"line":16800},[92,92682,92683],{"class":102},"      video.currentTime ",[92,92685,148],{"class":98},[92,92687,92688],{"class":102}," localStorage.",[92,92690,71667],{"class":1942},[92,92692,103],{"class":102},[92,92694,92636],{"class":207},[92,92696,13694],{"class":102},[92,92698,71339],{"class":98},[92,92700,47315],{"class":151},[92,92702,92703],{"class":94,"line":16806},[92,92704,2166],{"class":102},[92,92706,92707,92709,92711],{"class":94,"line":16811},[92,92708,52399],{"class":102},[92,92710,51795],{"class":51282},[92,92712,51289],{"class":102},[92,92714,92715,92717,92719],{"class":94,"line":16825},[92,92716,51767],{"class":102},[92,92718,51782],{"class":51282},[92,92720,51289],{"class":102},[92,92722,92723],{"class":94,"line":16830},[92,92724,2379],{"emptyLinePlaceholder":17},[92,92726,92727,92729,92731],{"class":94,"line":16835},[92,92728,51767],{"class":102},[92,92730,50617],{"class":51282},[92,92732,51289],{"class":102},[5106,92734,92735],{},"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":92737},[92738,92743,92747,92748,92749,92754,92759,92760,92761,92762,92769,92774,92775,92785,92789,92790,92794],{"id":76673,"depth":11,"text":76674,"children":92739},[92740,92741,92742],{"id":76677,"depth":1158,"text":76678},{"id":76702,"depth":1158,"text":76703},{"id":76714,"depth":1158,"text":76715},{"id":76726,"depth":11,"text":76727,"children":92744},[92745,92746],{"id":76730,"depth":1158,"text":76731},{"id":76745,"depth":1158,"text":76746},{"id":76797,"depth":11,"text":76798},{"id":76841,"depth":11,"text":76842},{"id":76858,"depth":11,"text":76859,"children":92750},[92751,92752,92753],{"id":76862,"depth":1158,"text":76863},{"id":76875,"depth":1158,"text":76876},{"id":76980,"depth":1158,"text":76981},{"id":77269,"depth":11,"text":77270,"children":92755},[92756,92757,92758],{"id":77273,"depth":1158,"text":77274},{"id":77716,"depth":1158,"text":77717},{"id":78127,"depth":1158,"text":78128},{"id":78190,"depth":11,"text":78191},{"id":78269,"depth":11,"text":78270},{"id":78362,"depth":11,"text":78363},{"id":80207,"depth":11,"text":80208,"children":92763},[92764,92765,92766,92767,92768],{"id":80211,"depth":1158,"text":80212},{"id":80223,"depth":1158,"text":80224},{"id":80442,"depth":1158,"text":80443},{"id":80460,"depth":1158,"text":80461},{"id":80520,"depth":1158,"text":80521},{"id":84788,"depth":11,"text":84789,"children":92770},[92771,92772,92773],{"id":84792,"depth":1158,"text":84793},{"id":84810,"depth":1158,"text":84811},{"id":84836,"depth":1158,"text":84837},{"id":84845,"depth":11,"text":84846},{"id":84867,"depth":11,"text":84868,"children":92776},[92777,92778,92779,92780,92781,92782,92783,92784],{"id":84871,"depth":1158,"text":84872},{"id":85132,"depth":1158,"text":85133},{"id":85318,"depth":1158,"text":85319},{"id":85685,"depth":1158,"text":85686},{"id":85801,"depth":1158,"text":85802},{"id":85837,"depth":1158,"text":85838},{"id":85884,"depth":1158,"text":85885},{"id":85918,"depth":1158,"text":85919},{"id":87281,"depth":11,"text":87282,"children":92786},[92787,92788],{"id":87285,"depth":1158,"text":87286},{"id":87322,"depth":1158,"text":87323},{"id":88677,"depth":11,"text":88678},{"id":89048,"depth":11,"text":89049,"children":92791},[92792,92793],{"id":89052,"depth":1158,"text":89053},{"id":89086,"depth":1158,"text":89087},{"id":89815,"depth":11,"text":89816,"children":92795},[92796,92797,92798,92799],{"id":89819,"depth":1158,"text":89820},{"id":90777,"depth":1158,"text":90778},{"id":91719,"depth":1158,"text":91720},{"id":91793,"depth":1158,"text":91794},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76662,"description":23357},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92806,"title":92807,"body":92808,"description":92819,"extension":14,"meta":92820,"navigation":17,"path":92821,"seo":92822,"stem":92823,"__hash__":92824},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92809,"toc":92817},[92810],[38,92811,92812,92813],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[341,92814,92815],{"href":92815,"rel":92816},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23846],{"title":10,"searchDepth":11,"depth":11,"links":92818},[],"三件套第三套学习",{"category":16},"\u002Fwiki\u002F2025-09-02-js",{"title":92807,"description":92819},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92826,"title":92827,"body":92828,"description":23357,"extension":14,"meta":92933,"navigation":17,"path":92934,"seo":92935,"stem":92936,"__hash__":92937},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92829,"toc":92928},[92830,92837,92840,92843,92846,92850,92859,92862,92865,92869,92878,92881,92885,92888,92908,92911,92925],[38,92831,92832],{},[341,92833,92836],{"href":92834,"rel":92835},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23846],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[29,92838,92827],{"id":92839},"_1安装",[38,92841,92842],{},"numpy是科学计算基础库,底层是C语言",[38,92844,92845],{},"三种方式：",[33,92847,92849],{"id":92848},"_11-通过pip安装","1.1 通过pip安装",[83,92851,92853],{"className":30360,"code":92852,"language":30362,"meta":10,"style":10},"pip install numpy\n",[89,92854,92855],{"__ignoreMap":10},[92,92856,92857],{"class":94,"line":95},[92,92858,92852],{"class":102},[38,92860,92861],{},"首选方式，自动处理依赖项",[38,92863,92864],{},"在提示系统命令符中使用cmd",[33,92866,92868],{"id":92867},"_12-通过anaconda安装","1.2 通过Anaconda安装",[83,92870,92872],{"className":30360,"code":92871,"language":30362,"meta":10,"style":10},"conda install numpy\n",[89,92873,92874],{"__ignoreMap":10},[92,92875,92876],{"class":94,"line":95},[92,92877,92871],{"class":102},[38,92879,92880],{},"自动解决环境依赖",[33,92882,92884],{"id":92883},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[38,92886,92887],{},"对于Debian\u002FUbuntu",[83,92889,92891],{"className":30360,"code":92890,"language":30362,"meta":10,"style":10},"sudo apt-get install python3-numpy\n",[89,92892,92893],{"__ignoreMap":10},[92,92894,92895,92898,92900,92903,92905],{"class":94,"line":95},[92,92896,92897],{"class":102},"sudo apt",[92,92899,635],{"class":98},[92,92901,92902],{"class":102},"get install python3",[92,92904,635],{"class":98},[92,92906,92907],{"class":102},"numpy\n",[38,92909,92910],{},"对于Fedora:",[83,92912,92914],{"className":30360,"code":92913,"language":30362,"meta":10,"style":10},"sudo dnf install python3-numpy\n",[89,92915,92916],{"__ignoreMap":10},[92,92917,92918,92921,92923],{"class":94,"line":95},[92,92919,92920],{"class":102},"sudo dnf install python3",[92,92922,635],{"class":98},[92,92924,92907],{"class":102},[5106,92926,92927],{},"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":92929},[92930,92931,92932],{"id":92848,"depth":11,"text":92849},{"id":92867,"depth":11,"text":92868},{"id":92883,"depth":11,"text":92884},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92827,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92939,"title":92940,"body":92941,"description":23357,"extension":14,"meta":93054,"navigation":17,"path":93055,"seo":93056,"stem":93057,"__hash__":93058},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92942,"toc":93052},[92943,92946,92949,92952,92955,92958,92961,92964,92967,92970,93046,93049],[29,92944,92940],{"id":92945},"_10算数函数",[38,92947,92948],{},"加减乘除运算跟python基础语法没区别",[38,92950,92951],{},"除了python那种方法外还可以使用函数",[38,92953,92954],{},"加：np.add(a,b)",[38,92956,92957],{},"减：np.subtract(a,b)",[38,92959,92960],{},"乘：np.multiply(a,b)",[38,92962,92963],{},"除：np.divide(a,b) == a\u002Fb",[38,92965,92966],{},"取余：np.mod(a,b) == a%b",[38,92968,92969],{},"必须会的用法：",[83,92971,92973],{"className":30360,"code":92972,"language":30362,"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,92974,92975,92997,93018,93028,93041],{"__ignoreMap":10},[92,92976,92977,92979,92981,92984,92986,92989,92991,92993,92995],{"class":94,"line":95},[92,92978,341],{"class":102},[92,92980,148],{"class":98},[92,92982,92983],{"class":102},"np.arange(",[92,92985,523],{"class":151},[92,92987,92988],{"class":102},").reshape(",[92,92990,174],{"class":151},[92,92992,481],{"class":102},[92,92994,174],{"class":151},[92,92996,109],{"class":102},[92,92998,92999,93001,93003,93006,93008,93010,93012,93014,93016],{"class":94,"line":11},[92,93000,366],{"class":102},[92,93002,148],{"class":98},[92,93004,93005],{"class":102},"np.array([",[92,93007,549],{"class":151},[92,93009,481],{"class":102},[92,93011,549],{"class":151},[92,93013,481],{"class":102},[92,93015,549],{"class":151},[92,93017,4636],{"class":102},[92,93019,93020,93023,93025],{"class":94,"line":1158},[92,93021,93022],{"class":102},"result",[92,93024,148],{"class":98},[92,93026,93027],{"class":102},"np.empty_like(a)\n",[92,93029,93030,93033,93036,93038],{"class":94,"line":1173},[92,93031,93032],{"class":102},"np.add(a,b,",[92,93034,93035],{"class":5196},"out",[92,93037,148],{"class":98},[92,93039,93040],{"class":102},"result)\n",[92,93042,93043],{"class":94,"line":1179},[92,93044,93045],{"class":102},"result\n",[38,93047,93048],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5106,93050,93051],{},"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":93053},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92940,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93060,"title":93061,"body":93062,"description":23357,"extension":14,"meta":93824,"navigation":17,"path":93825,"seo":93826,"stem":93827,"__hash__":93828},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93063,"toc":93811},[93064,93067,93070,93073,93077,93116,93120,93164,93224,93228,93231,93270,93273,93318,93322,93358,93362,93431,93435,93499,93503,93506,93509,93512,93515,93551,93555,93595,93599,93671,93674,93678,93741,93745,93808],[29,93065,93061],{"id":93066},"_11统计函数",[38,93068,93069],{},"sum max min mean",[38,93071,93072],{},"这些有axis参数，可以指定方向",[33,93074,93076],{"id":93075},"_111-sum求和函数","11.1 sum()求和函数",[83,93078,93080],{"className":30360,"code":93079,"language":30362,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[89,93081,93082,93087,93108],{"__ignoreMap":10},[92,93083,93084],{"class":94,"line":95},[92,93085,93086],{"class":161},"#创建一维数组\n",[92,93088,93089,93091,93093,93096,93098,93100,93102,93104,93106],{"class":94,"line":11},[92,93090,341],{"class":102},[92,93092,148],{"class":98},[92,93094,93095],{"class":102},"np.random.randint(",[92,93097,320],{"class":151},[92,93099,481],{"class":102},[92,93101,414],{"class":151},[92,93103,481],{"class":102},[92,93105,803],{"class":151},[92,93107,109],{"class":102},[92,93109,93110,93113],{"class":94,"line":1158},[92,93111,93112],{"class":102},"np.sum(a)",[92,93114,93115],{"class":161},"#求和\n",[33,93117,93119],{"id":93118},"_112-max求最大值函数","11.2 max()求最大值函数",[83,93121,93123],{"className":30360,"code":93122,"language":30362,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[89,93124,93125,93129,93149,93154,93159],{"__ignoreMap":10},[92,93126,93127],{"class":94,"line":95},[92,93128,93086],{"class":161},[92,93130,93131,93133,93135,93137,93139,93141,93143,93145,93147],{"class":94,"line":11},[92,93132,341],{"class":102},[92,93134,148],{"class":98},[92,93136,93095],{"class":102},[92,93138,320],{"class":151},[92,93140,481],{"class":102},[92,93142,414],{"class":151},[92,93144,481],{"class":102},[92,93146,803],{"class":151},[92,93148,109],{"class":102},[92,93150,93151],{"class":94,"line":1158},[92,93152,93153],{"class":102},"np.max(a)\n",[92,93155,93156],{"class":94,"line":1173},[92,93157,93158],{"class":161},"#最大索引(求最大元素的索引)arg\n",[92,93160,93161],{"class":94,"line":1179},[92,93162,93163],{"class":102},"np.argmax(a)\n",[83,93165,93167],{"className":30360,"code":93166,"language":30362,"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,93168,93169,93190,93210,93214],{"__ignoreMap":10},[92,93170,93171,93173,93175,93178,93180,93182,93184,93186,93188],{"class":94,"line":95},[92,93172,10899],{"class":102},[92,93174,148],{"class":98},[92,93176,93177],{"class":102}," np.array([",[92,93179,320],{"class":151},[92,93181,12415],{"class":102},[92,93183,422],{"class":151},[92,93185,12415],{"class":102},[92,93187,174],{"class":151},[92,93189,4636],{"class":102},[92,93191,93192,93194,93196,93198,93200,93202,93204,93206,93208],{"class":94,"line":11},[92,93193,10925],{"class":102},[92,93195,148],{"class":98},[92,93197,93177],{"class":102},[92,93199,174],{"class":151},[92,93201,12415],{"class":102},[92,93203,180],{"class":151},[92,93205,12415],{"class":102},[92,93207,396],{"class":151},[92,93209,4636],{"class":102},[92,93211,93212],{"class":94,"line":1158},[92,93213,2379],{"emptyLinePlaceholder":17},[92,93215,93216,93218,93221],{"class":94,"line":1173},[92,93217,30397],{"class":151},[92,93219,93220],{"class":102},"(np.maximum(a, b))   ",[92,93222,93223],{"class":161},"# [3 5 4]，每个位置上取较大值\n",[33,93225,93227],{"id":93226},"_113-mean求平均值函数","11.3 mean()求平均值函数",[38,93229,93230],{},"①一维数组：",[83,93232,93234],{"className":30360,"code":93233,"language":30362,"meta":10,"style":10},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[89,93235,93236,93240,93260,93265],{"__ignoreMap":10},[92,93237,93238],{"class":94,"line":95},[92,93239,93086],{"class":161},[92,93241,93242,93244,93246,93248,93250,93252,93254,93256,93258],{"class":94,"line":11},[92,93243,341],{"class":102},[92,93245,148],{"class":98},[92,93247,93095],{"class":102},[92,93249,320],{"class":151},[92,93251,481],{"class":102},[92,93253,414],{"class":151},[92,93255,481],{"class":102},[92,93257,803],{"class":151},[92,93259,109],{"class":102},[92,93261,93262],{"class":94,"line":1158},[92,93263,93264],{"class":161},"#求平均值\n",[92,93266,93267],{"class":94,"line":1173},[92,93268,93269],{"class":102},"np.mean(a)\n",[38,93271,93272],{},"②二维数组",[83,93274,93276],{"className":30360,"code":93275,"language":30362,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[89,93277,93278,93283,93308,93313],{"__ignoreMap":10},[92,93279,93280],{"class":94,"line":95},[92,93281,93282],{"class":161},"#二维数组\n",[92,93284,93285,93288,93290,93292,93294,93296,93298,93300,93302,93304,93306],{"class":94,"line":11},[92,93286,93287],{"class":102},"aa",[92,93289,148],{"class":98},[92,93291,92983],{"class":102},[92,93293,320],{"class":151},[92,93295,481],{"class":102},[92,93297,626],{"class":151},[92,93299,92988],{"class":102},[92,93301,174],{"class":151},[92,93303,481],{"class":102},[92,93305,396],{"class":151},[92,93307,109],{"class":102},[92,93309,93310],{"class":94,"line":1158},[92,93311,93312],{"class":161},"#对数组中的所有数求平均\n",[92,93314,93315],{"class":94,"line":1173},[92,93316,93317],{"class":102},"np.mean(aa)\n",[33,93319,93321],{"id":93320},"_114-median求中位数函数","11.4 median()求中位数函数",[83,93323,93325],{"className":30360,"code":93324,"language":30362,"meta":10,"style":10},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[89,93326,93327,93332,93348,93353],{"__ignoreMap":10},[92,93328,93329],{"class":94,"line":95},[92,93330,93331],{"class":161},"#求中位数\n",[92,93333,93334,93336,93338,93340,93342,93344,93346],{"class":94,"line":11},[92,93335,366],{"class":102},[92,93337,148],{"class":98},[92,93339,92983],{"class":102},[92,93341,320],{"class":151},[92,93343,481],{"class":102},[92,93345,549],{"class":151},[92,93347,109],{"class":102},[92,93349,93350],{"class":94,"line":1158},[92,93351,93352],{"class":102},"np.median(b)\n",[92,93354,93355],{"class":94,"line":1173},[92,93356,93357],{"class":161},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,93359,93361],{"id":93360},"_115-power求幂运算函数","11.5 power()求幂运算函数",[83,93363,93365],{"className":30360,"code":93364,"language":30362,"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,93366,93367,93383,93388,93393,93402,93407,93416],{"__ignoreMap":10},[92,93368,93369,93371,93373,93375,93377,93379,93381],{"class":94,"line":95},[92,93370,366],{"class":102},[92,93372,148],{"class":98},[92,93374,92983],{"class":102},[92,93376,320],{"class":151},[92,93378,481],{"class":102},[92,93380,549],{"class":151},[92,93382,109],{"class":102},[92,93384,93385],{"class":94,"line":11},[92,93386,93387],{"class":161},"#幂运算\n",[92,93389,93390],{"class":94,"line":1158},[92,93391,93392],{"class":161},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[92,93394,93395,93398,93400],{"class":94,"line":1173},[92,93396,93397],{"class":102},"np.power(b,",[92,93399,180],{"class":151},[92,93401,109],{"class":102},[92,93403,93404],{"class":94,"line":1179},[92,93405,93406],{"class":161},"#或者以下代码，将数据存储起来\n",[92,93408,93409,93411,93413],{"class":94,"line":1193},[92,93410,948],{"class":102},[92,93412,148],{"class":98},[92,93414,93415],{"class":102},"np.empty_like(b)\n",[92,93417,93418,93420,93422,93424,93426,93428],{"class":94,"line":1199},[92,93419,93397],{"class":102},[92,93421,180],{"class":151},[92,93423,481],{"class":102},[92,93425,93035],{"class":5196},[92,93427,148],{"class":98},[92,93429,93430],{"class":102},"y)\n",[33,93432,93434],{"id":93433},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[83,93436,93438],{"className":30360,"code":93437,"language":30362,"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,93439,93440,93456,93461,93466,93470,93488],{"__ignoreMap":10},[92,93441,93442,93444,93446,93448,93450,93452,93454],{"class":94,"line":95},[92,93443,366],{"class":102},[92,93445,148],{"class":98},[92,93447,92983],{"class":102},[92,93449,320],{"class":151},[92,93451,481],{"class":102},[92,93453,549],{"class":151},[92,93455,109],{"class":102},[92,93457,93458],{"class":94,"line":11},[92,93459,93460],{"class":161},"#开方\n",[92,93462,93463],{"class":94,"line":1158},[92,93464,93465],{"class":102},"np.sqrt(b)\n",[92,93467,93468],{"class":94,"line":1173},[92,93469,93406],{"class":161},[92,93471,93472,93474,93476,93479,93482,93484,93486],{"class":94,"line":1179},[92,93473,948],{"class":102},[92,93475,148],{"class":98},[92,93477,93478],{"class":102},"np.empty_like(b,",[92,93480,93481],{"class":5196},"dtype",[92,93483,148],{"class":98},[92,93485,142],{"class":151},[92,93487,109],{"class":102},[92,93489,93490,93493,93495,93497],{"class":94,"line":1193},[92,93491,93492],{"class":102},"np.sqrt(b,",[92,93494,93035],{"class":5196},[92,93496,148],{"class":98},[92,93498,93430],{"class":102},[33,93500,93502],{"id":93501},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[38,93504,93505],{},"对数组中的元素累计求和，可指定轴",[38,93507,93508],{},"#累计求和的意思是：",[38,93510,93511],{},"a = np.array([1, 2, 3, 4])",[38,93513,93514],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[83,93516,93518],{"className":30360,"code":93517,"language":30362,"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,93519,93520,93536,93541,93546],{"__ignoreMap":10},[92,93521,93522,93524,93526,93528,93530,93532,93534],{"class":94,"line":95},[92,93523,366],{"class":102},[92,93525,148],{"class":98},[92,93527,92983],{"class":102},[92,93529,320],{"class":151},[92,93531,481],{"class":102},[92,93533,549],{"class":151},[92,93535,109],{"class":102},[92,93537,93538],{"class":94,"line":11},[92,93539,93540],{"class":102},"np.cumsum(b)\n",[92,93542,93543],{"class":94,"line":1158},[92,93544,93545],{"class":161},"#结果：\n",[92,93547,93548],{"class":94,"line":1173},[92,93549,93550],{"class":161},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,93552,93554],{"id":93553},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[83,93556,93558],{"className":30360,"code":93557,"language":30362,"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,93559,93560,93576,93581,93586,93590],{"__ignoreMap":10},[92,93561,93562,93564,93566,93568,93570,93572,93574],{"class":94,"line":95},[92,93563,366],{"class":102},[92,93565,148],{"class":98},[92,93567,92983],{"class":102},[92,93569,320],{"class":151},[92,93571,481],{"class":102},[92,93573,549],{"class":151},[92,93575,109],{"class":102},[92,93577,93578],{"class":94,"line":11},[92,93579,93580],{"class":161},"#对数组中的元素累计求积，可指定轴\n",[92,93582,93583],{"class":94,"line":1158},[92,93584,93585],{"class":102},"np.cumprod(b)\n",[92,93587,93588],{"class":94,"line":1173},[92,93589,93545],{"class":161},[92,93591,93592],{"class":94,"line":1179},[92,93593,93594],{"class":161},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,93596,93598],{"id":93597},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[83,93600,93602],{"className":30360,"code":93601,"language":30362,"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,93603,93604,93609,93657,93662,93666],{"__ignoreMap":10},[92,93605,93606],{"class":94,"line":95},[92,93607,93608],{"class":161},"#删除数组中的重复数据，并对数据进行排序\n",[92,93610,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655],{"class":94,"line":11},[92,93612,341],{"class":102},[92,93614,148],{"class":98},[92,93616,93005],{"class":102},[92,93618,320],{"class":151},[92,93620,481],{"class":102},[92,93622,180],{"class":151},[92,93624,481],{"class":102},[92,93626,174],{"class":151},[92,93628,481],{"class":102},[92,93630,601],{"class":151},[92,93632,481],{"class":102},[92,93634,174],{"class":151},[92,93636,481],{"class":102},[92,93638,549],{"class":151},[92,93640,481],{"class":102},[92,93642,300],{"class":151},[92,93644,481],{"class":102},[92,93646,294],{"class":151},[92,93648,481],{"class":102},[92,93650,878],{"class":151},[92,93652,481],{"class":102},[92,93654,396],{"class":151},[92,93656,4636],{"class":102},[92,93658,93659],{"class":94,"line":1158},[92,93660,93661],{"class":102},"np.unique(a)\n",[92,93663,93664],{"class":94,"line":1173},[92,93665,93545],{"class":161},[92,93667,93668],{"class":94,"line":1179},[92,93669,93670],{"class":161},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[38,93672,93673],{},"升序形式排序",[33,93675,93677],{"id":93676},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[83,93679,93681],{"className":30360,"code":93680,"language":30362,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[89,93682,93683,93731,93736],{"__ignoreMap":10},[92,93684,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729],{"class":94,"line":95},[92,93686,341],{"class":102},[92,93688,148],{"class":98},[92,93690,93005],{"class":102},[92,93692,320],{"class":151},[92,93694,481],{"class":102},[92,93696,180],{"class":151},[92,93698,481],{"class":102},[92,93700,174],{"class":151},[92,93702,481],{"class":102},[92,93704,601],{"class":151},[92,93706,481],{"class":102},[92,93708,174],{"class":151},[92,93710,481],{"class":102},[92,93712,549],{"class":151},[92,93714,481],{"class":102},[92,93716,300],{"class":151},[92,93718,481],{"class":102},[92,93720,294],{"class":151},[92,93722,481],{"class":102},[92,93724,878],{"class":151},[92,93726,481],{"class":102},[92,93728,396],{"class":151},[92,93730,4636],{"class":102},[92,93732,93733],{"class":94,"line":11},[92,93734,93735],{"class":161},"#返回数组中非零元素的索引\n",[92,93737,93738],{"class":94,"line":1158},[92,93739,93740],{"class":102},"np.nonzero(a)\n",[33,93742,93744],{"id":93743},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[83,93746,93748],{"className":30360,"code":93747,"language":30362,"meta":10,"style":10},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[89,93749,93750,93798,93803],{"__ignoreMap":10},[92,93751,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796],{"class":94,"line":95},[92,93753,341],{"class":102},[92,93755,148],{"class":98},[92,93757,93005],{"class":102},[92,93759,320],{"class":151},[92,93761,481],{"class":102},[92,93763,180],{"class":151},[92,93765,481],{"class":102},[92,93767,174],{"class":151},[92,93769,481],{"class":102},[92,93771,601],{"class":151},[92,93773,481],{"class":102},[92,93775,174],{"class":151},[92,93777,481],{"class":102},[92,93779,549],{"class":151},[92,93781,481],{"class":102},[92,93783,300],{"class":151},[92,93785,481],{"class":102},[92,93787,294],{"class":151},[92,93789,481],{"class":102},[92,93791,878],{"class":151},[92,93793,481],{"class":102},[92,93795,396],{"class":151},[92,93797,4636],{"class":102},[92,93799,93800],{"class":94,"line":11},[92,93801,93802],{"class":161},"#计算一组数中最大值与最小值的差，可指定轴\n",[92,93804,93805],{"class":94,"line":1158},[92,93806,93807],{"class":102},"np.ptp(a)\n",[5106,93809,93810],{},"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":93812},[93813,93814,93815,93816,93817,93818,93819,93820,93821,93822,93823],{"id":93075,"depth":11,"text":93076},{"id":93118,"depth":11,"text":93119},{"id":93226,"depth":11,"text":93227},{"id":93320,"depth":11,"text":93321},{"id":93360,"depth":11,"text":93361},{"id":93433,"depth":11,"text":93434},{"id":93501,"depth":11,"text":93502},{"id":93553,"depth":11,"text":93554},{"id":93597,"depth":11,"text":93598},{"id":93676,"depth":11,"text":93677},{"id":93743,"depth":11,"text":93744},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93061,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93830,"title":93831,"body":93832,"description":23357,"extension":14,"meta":94487,"navigation":17,"path":94488,"seo":94489,"stem":94490,"__hash__":94491},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93833,"toc":94475},[93834,93837,93841,93844,94060,94064,94067,94276,94280,94346,94351,94355,94358,94361,94399,94403,94406,94411,94415,94418,94421,94426,94430,94433,94437,94440,94443,94448,94452,94455,94458,94463,94467,94472],[29,93835,93831],{"id":93836},"_12其他常用函数",[33,93838,93840],{"id":93839},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[38,93842,93843],{},"将数组的数据按照行列复制扩展",[83,93845,93847],{"className":30360,"code":93846,"language":30362,"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,93848,93849,93865,93874,93878,93883,93888,93901,93905,93910,93915,93920,93924,93929,93953,93965,93969,93973,93978,93983,93988,93993,93997,94010,94014,94018,94023,94028,94033,94038,94043,94047,94051,94056],{"__ignoreMap":10},[92,93850,93851,93853,93855,93857,93859,93861,93863],{"class":94,"line":95},[92,93852,341],{"class":102},[92,93854,148],{"class":98},[92,93856,92983],{"class":102},[92,93858,320],{"class":151},[92,93860,481],{"class":102},[92,93862,422],{"class":151},[92,93864,109],{"class":102},[92,93866,93867,93870,93872],{"class":94,"line":11},[92,93868,93869],{"class":102},"np.tile(a,",[92,93871,180],{"class":151},[92,93873,109],{"class":102},[92,93875,93876],{"class":94,"line":1158},[92,93877,93545],{"class":161},[92,93879,93880],{"class":94,"line":1173},[92,93881,93882],{"class":161},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[92,93884,93885],{"class":94,"line":1179},[92,93886,93887],{"class":161},"#行复制两次，列复制三次\n",[92,93889,93890,93893,93895,93897,93899],{"class":94,"line":1193},[92,93891,93892],{"class":102},"np.tile(a,(",[92,93894,180],{"class":151},[92,93896,481],{"class":102},[92,93898,174],{"class":151},[92,93900,30479],{"class":102},[92,93902,93903],{"class":94,"line":1199},[92,93904,93545],{"class":161},[92,93906,93907],{"class":94,"line":1290},[92,93908,93909],{"class":207},"'''\n",[92,93911,93912],{"class":94,"line":1296},[92,93913,93914],{"class":207},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[92,93916,93917],{"class":94,"line":1308},[92,93918,93919],{"class":207},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[92,93921,93922],{"class":94,"line":1591},[92,93923,93909],{"class":207},[92,93925,93926],{"class":94,"line":1596},[92,93927,93928],{"class":161},"#创建二维数组\n",[92,93930,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949,93951],{"class":94,"line":1602},[92,93932,93287],{"class":102},[92,93934,148],{"class":98},[92,93936,92983],{"class":102},[92,93938,320],{"class":151},[92,93940,481],{"class":102},[92,93942,626],{"class":151},[92,93944,92988],{"class":102},[92,93946,396],{"class":151},[92,93948,481],{"class":102},[92,93950,174],{"class":151},[92,93952,109],{"class":102},[92,93954,93955,93958,93960,93962],{"class":94,"line":1607},[92,93956,93957],{"class":102},"np.tile(aa,",[92,93959,180],{"class":151},[92,93961,532],{"class":102},[92,93963,93964],{"class":161},"#一个数的时候就是行\n",[92,93966,93967],{"class":94,"line":1621},[92,93968,93545],{"class":161},[92,93970,93971],{"class":94,"line":1626},[92,93972,93909],{"class":207},[92,93974,93975],{"class":94,"line":1632},[92,93976,93977],{"class":207},"array([[ 1,  2,  3,  1,  2,  3],\n",[92,93979,93980],{"class":94,"line":1653},[92,93981,93982],{"class":207},"       [ 4,  5,  6,  4,  5,  6],\n",[92,93984,93985],{"class":94,"line":1658},[92,93986,93987],{"class":207},"       [ 7,  8,  9,  7,  8,  9],\n",[92,93989,93990],{"class":94,"line":1672},[92,93991,93992],{"class":207},"       [10, 11, 12, 10, 11, 12]])\n",[92,93994,93995],{"class":94,"line":1677},[92,93996,93909],{"class":207},[92,93998,93999,94002,94004,94006,94008],{"class":94,"line":1706},[92,94000,94001],{"class":102},"np.tile(aa,(",[92,94003,180],{"class":151},[92,94005,481],{"class":102},[92,94007,174],{"class":151},[92,94009,30479],{"class":102},[92,94011,94012],{"class":94,"line":1711},[92,94013,93545],{"class":161},[92,94015,94016],{"class":94,"line":1728},[92,94017,93909],{"class":207},[92,94019,94020],{"class":94,"line":1733},[92,94021,94022],{"class":207},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[92,94024,94025],{"class":94,"line":1738},[92,94026,94027],{"class":207},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[92,94029,94030],{"class":94,"line":1743},[92,94031,94032],{"class":207},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[92,94034,94035],{"class":94,"line":1757},[92,94036,94037],{"class":207},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[92,94039,94040],{"class":94,"line":1762},[92,94041,94042],{"class":207},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[92,94044,94045],{"class":94,"line":2556},[92,94046,94027],{"class":207},[92,94048,94049],{"class":94,"line":2570},[92,94050,94032],{"class":207},[92,94052,94053],{"class":94,"line":2578},[92,94054,94055],{"class":207},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[92,94057,94058],{"class":94,"line":2583},[92,94059,93909],{"class":207},[33,94061,94063],{"id":94062},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[38,94065,94066],{},"repeat()将数组中的每个元素重复若干次",[83,94068,94070],{"className":30360,"code":94069,"language":30362,"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,94071,94072,94088,94097,94101,94106,94130,94135,94144,94148,94153,94157,94162,94178,94182,94186,94191,94196,94201,94205,94210,94214,94219,94224,94228,94244,94248,94252,94257,94262,94267,94272],{"__ignoreMap":10},[92,94073,94074,94076,94078,94080,94082,94084,94086],{"class":94,"line":95},[92,94075,341],{"class":102},[92,94077,148],{"class":98},[92,94079,92983],{"class":102},[92,94081,320],{"class":151},[92,94083,481],{"class":102},[92,94085,422],{"class":151},[92,94087,109],{"class":102},[92,94089,94090,94093,94095],{"class":94,"line":11},[92,94091,94092],{"class":102},"np.repeat(a,",[92,94094,174],{"class":151},[92,94096,109],{"class":102},[92,94098,94099],{"class":94,"line":1158},[92,94100,93545],{"class":161},[92,94102,94103],{"class":94,"line":1173},[92,94104,94105],{"class":161},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[92,94107,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128],{"class":94,"line":1179},[92,94109,93287],{"class":102},[92,94111,148],{"class":98},[92,94113,92983],{"class":102},[92,94115,320],{"class":151},[92,94117,481],{"class":102},[92,94119,626],{"class":151},[92,94121,92988],{"class":102},[92,94123,396],{"class":151},[92,94125,481],{"class":102},[92,94127,174],{"class":151},[92,94129,109],{"class":102},[92,94131,94132],{"class":94,"line":1193},[92,94133,94134],{"class":161},"#这个重复之后二维变成一维\n",[92,94136,94137,94140,94142],{"class":94,"line":1199},[92,94138,94139],{"class":102},"np.repeat(aa,",[92,94141,180],{"class":151},[92,94143,109],{"class":102},[92,94145,94146],{"class":94,"line":1290},[92,94147,93909],{"class":207},[92,94149,94150],{"class":94,"line":1296},[92,94151,94152],{"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,94154,94155],{"class":94,"line":1308},[92,94156,93909],{"class":207},[92,94158,94159],{"class":94,"line":1591},[92,94160,94161],{"class":161},"#指定axis\n",[92,94163,94164,94166,94168,94170,94172,94174,94176],{"class":94,"line":1596},[92,94165,94139],{"class":102},[92,94167,180],{"class":151},[92,94169,481],{"class":102},[92,94171,47496],{"class":5196},[92,94173,148],{"class":98},[92,94175,294],{"class":151},[92,94177,109],{"class":102},[92,94179,94180],{"class":94,"line":1602},[92,94181,93545],{"class":161},[92,94183,94184],{"class":94,"line":1607},[92,94185,93909],{"class":207},[92,94187,94188],{"class":94,"line":1621},[92,94189,94190],{"class":207},"array([[ 1,  2,  3],\n",[92,94192,94193],{"class":94,"line":1626},[92,94194,94195],{"class":207},"       [ 1,  2,  3],\n",[92,94197,94198],{"class":94,"line":1632},[92,94199,94200],{"class":207},"       [ 4,  5,  6],\n",[92,94202,94203],{"class":94,"line":1653},[92,94204,94200],{"class":207},[92,94206,94207],{"class":94,"line":1658},[92,94208,94209],{"class":207},"       [ 7,  8,  9],\n",[92,94211,94212],{"class":94,"line":1672},[92,94213,94209],{"class":207},[92,94215,94216],{"class":94,"line":1677},[92,94217,94218],{"class":207},"       [10, 11, 12],\n",[92,94220,94221],{"class":94,"line":1706},[92,94222,94223],{"class":207},"       [10, 11, 12]])\n",[92,94225,94226],{"class":94,"line":1711},[92,94227,93909],{"class":207},[92,94229,94230,94232,94234,94236,94238,94240,94242],{"class":94,"line":1728},[92,94231,94139],{"class":102},[92,94233,180],{"class":151},[92,94235,481],{"class":102},[92,94237,47496],{"class":5196},[92,94239,148],{"class":98},[92,94241,320],{"class":151},[92,94243,109],{"class":102},[92,94245,94246],{"class":94,"line":1733},[92,94247,93545],{"class":161},[92,94249,94250],{"class":94,"line":1738},[92,94251,93909],{"class":207},[92,94253,94254],{"class":94,"line":1743},[92,94255,94256],{"class":207},"array([[ 1,  1,  2,  2,  3,  3],\n",[92,94258,94259],{"class":94,"line":1757},[92,94260,94261],{"class":207},"       [ 4,  4,  5,  5,  6,  6],\n",[92,94263,94264],{"class":94,"line":1762},[92,94265,94266],{"class":207},"       [ 7,  7,  8,  8,  9,  9],\n",[92,94268,94269],{"class":94,"line":2556},[92,94270,94271],{"class":207},"       [10, 10, 11, 11, 12, 12]])\n",[92,94273,94274],{"class":94,"line":2570},[92,94275,93909],{"class":207},[33,94277,94279],{"id":94278},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[83,94281,94283],{"className":30360,"code":94282,"language":30362,"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,94284,94285,94301,94306,94318,94322,94327,94337,94341],{"__ignoreMap":10},[92,94286,94287,94289,94291,94293,94295,94297,94299],{"class":94,"line":95},[92,94288,341],{"class":102},[92,94290,148],{"class":98},[92,94292,92983],{"class":102},[92,94294,320],{"class":151},[92,94296,481],{"class":102},[92,94298,422],{"class":151},[92,94300,109],{"class":102},[92,94302,94303],{"class":94,"line":11},[92,94304,94305],{"class":161},"#array([，2，3，4])\n",[92,94307,94308,94311,94313,94315],{"class":94,"line":1158},[92,94309,94310],{"class":102},"np.roll(a,",[92,94312,180],{"class":151},[92,94314,532],{"class":102},[92,94316,94317],{"class":161},"#传正数向后调多少位，传负数向前调多少位\n",[92,94319,94320],{"class":94,"line":1173},[92,94321,93545],{"class":161},[92,94323,94324],{"class":94,"line":1179},[92,94325,94326],{"class":161},"#array([3, 4, 1, 2])\n",[92,94328,94329,94331,94333,94335],{"class":94,"line":1193},[92,94330,94310],{"class":102},[92,94332,635],{"class":98},[92,94334,320],{"class":151},[92,94336,109],{"class":102},[92,94338,94339],{"class":94,"line":1199},[92,94340,93545],{"class":161},[92,94342,94343],{"class":94,"line":1290},[92,94344,94345],{"class":161},"#array([2, 3, 4, 1])\n",[38,94347,94348],{},[1441,94349],{"alt":10,"src":94350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[33,94352,94354],{"id":94353},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[38,94356,94357],{},"resize()重新调整数组的大小",[38,94359,94360],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[83,94362,94364],{"className":30360,"code":94363,"language":30362,"meta":10,"style":10},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[89,94365,94366,94371,94384],{"__ignoreMap":10},[92,94367,94368],{"class":94,"line":95},[92,94369,94370],{"class":161},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[92,94372,94373,94376,94378,94380,94382],{"class":94,"line":11},[92,94374,94375],{"class":102},"np.resize(aa,(",[92,94377,180],{"class":151},[92,94379,481],{"class":102},[92,94381,447],{"class":151},[92,94383,30479],{"class":102},[92,94385,94386,94388,94390,94392,94394,94396],{"class":94,"line":1158},[92,94387,94375],{"class":102},[92,94389,180],{"class":151},[92,94391,481],{"class":102},[92,94393,523],{"class":151},[92,94395,82753],{"class":102},[92,94397,94398],{"class":161},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,94400,94402],{"id":94401},"_125-placeput函数","12.5 place()\u002Fput()函数",[38,94404,94405],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[38,94407,94408],{},[1441,94409],{"alt":10,"src":94410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[33,94412,94414],{"id":94413},"_126-保存加载文件","12.6 保存加载文件",[38,94416,94417],{},"savetxt():将数据保存到txt文件中",[38,94419,94420],{},"loadtxt():从文件加载数据",[38,94422,94423],{},[1441,94424],{"alt":10,"src":94425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[33,94427,94429],{"id":94428},"_127-genfromtxt函数","12.7 genfromtxt()函数",[38,94431,94432],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[33,94434,94436],{"id":94435},"_128-anyall函数","12.8 any()\u002Fall()函数",[38,94438,94439],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[38,94441,94442],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[38,94444,94445],{},[1441,94446],{"alt":10,"src":94447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[33,94449,94451],{"id":94450},"_129-where语句","12.9 where语句",[38,94453,94454],{},"np.where(条件,x,y)",[38,94456,94457],{},"如果条件为True,对应值为x,否则对应值为y",[38,94459,94460],{},[1441,94461],{"alt":10,"src":94462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[33,94464,94466],{"id":94465},"_1210-dot矩阵","12.10 dot()矩阵",[38,94468,94469],{},[1441,94470],{"alt":10,"src":94471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5106,94473,94474],{},"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":94476},[94477,94478,94479,94480,94481,94482,94483,94484,94485,94486],{"id":93839,"depth":11,"text":93840},{"id":94062,"depth":11,"text":94063},{"id":94278,"depth":11,"text":94279},{"id":94353,"depth":11,"text":94354},{"id":94401,"depth":11,"text":94402},{"id":94413,"depth":11,"text":94414},{"id":94428,"depth":11,"text":94429},{"id":94435,"depth":11,"text":94436},{"id":94450,"depth":11,"text":94451},{"id":94465,"depth":11,"text":94466},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93831,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94493,"title":94494,"body":94495,"description":23357,"extension":14,"meta":94848,"navigation":17,"path":94849,"seo":94850,"stem":94851,"__hash__":94852},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94496,"toc":94846},[94497,94500,94503,94506,94509,94512,94577,94579,94843],[29,94498,94494],{"id":94499},"_13数组排序",[38,94501,94502],{},"排序主要用到的方法是np.sort和np.argsort",[38,94504,94505],{},"其中np.sort()对数组直接排序",[38,94507,94508],{},"而np.argsort()是返回排序后的原始索引",[38,94510,94511],{},"①一维数组",[83,94513,94515],{"className":30360,"code":94514,"language":30362,"meta":10,"style":10},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[89,94516,94517,94521,94561,94569],{"__ignoreMap":10},[92,94518,94519],{"class":94,"line":95},[92,94520,93086],{"class":161},[92,94522,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557,94559],{"class":94,"line":11},[92,94524,341],{"class":102},[92,94526,148],{"class":98},[92,94528,93005],{"class":102},[92,94530,174],{"class":151},[92,94532,481],{"class":102},[92,94534,601],{"class":151},[92,94536,481],{"class":102},[92,94538,498],{"class":151},[92,94540,481],{"class":102},[92,94542,878],{"class":151},[92,94544,481],{"class":102},[92,94546,382],{"class":151},[92,94548,481],{"class":102},[92,94550,996],{"class":151},[92,94552,481],{"class":102},[92,94554,447],{"class":151},[92,94556,481],{"class":102},[92,94558,549],{"class":151},[92,94560,4636],{"class":102},[92,94562,94563,94566],{"class":94,"line":1158},[92,94564,94565],{"class":102},"np.sort(a)",[92,94567,94568],{"class":161},"#升序排序\n",[92,94570,94571,94574],{"class":94,"line":1173},[92,94572,94573],{"class":102},"np.argsort(a)",[92,94575,94576],{"class":161},"#按照元素大小来索引排序\n",[38,94578,93272],{},[83,94580,94582],{"className":30360,"code":94581,"language":30362,"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,94583,94584,94596,94622,94627,94631,94636,94641,94646,94651,94655,94663,94667,94672,94677,94682,94687,94691,94696,94709,94713,94718,94723,94728,94733,94737,94742,94754,94758,94762,94766,94770,94774,94778,94783,94798,94803,94812,94817,94821,94825,94830,94834,94839],{"__ignoreMap":10},[92,94585,94586,94589,94591,94593],{"class":94,"line":95},[92,94587,94588],{"class":102},"np.random.seed(",[92,94590,294],{"class":151},[92,94592,532],{"class":102},[92,94594,94595],{"class":161},"#保证每次值一样\n",[92,94597,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620],{"class":94,"line":11},[92,94599,93287],{"class":102},[92,94601,148],{"class":98},[92,94603,93095],{"class":102},[92,94605,414],{"class":151},[92,94607,481],{"class":102},[92,94609,31478],{"class":5196},[92,94611,148],{"class":98},[92,94613,103],{"class":102},[92,94615,396],{"class":151},[92,94617,481],{"class":102},[92,94619,447],{"class":151},[92,94621,30479],{"class":102},[92,94623,94624],{"class":94,"line":1158},[92,94625,94626],{"class":161},"#原数组：\n",[92,94628,94629],{"class":94,"line":1173},[92,94630,93909],{"class":207},[92,94632,94633],{"class":94,"line":1179},[92,94634,94635],{"class":207},"array([[44, 47, 64, 67, 67,  9],\n",[92,94637,94638],{"class":94,"line":1193},[92,94639,94640],{"class":207},"       [83, 21, 36, 87, 70, 88],\n",[92,94642,94643],{"class":94,"line":1199},[92,94644,94645],{"class":207},"       [88, 12, 58, 65, 39, 87],\n",[92,94647,94648],{"class":94,"line":1290},[92,94649,94650],{"class":207},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[92,94652,94653],{"class":94,"line":1296},[92,94654,93909],{"class":207},[92,94656,94657,94660],{"class":94,"line":1308},[92,94658,94659],{"class":102},"np.sort(aa)",[92,94661,94662],{"class":161},"#每行进行了排序\n",[92,94664,94665],{"class":94,"line":1591},[92,94666,93909],{"class":207},[92,94668,94669],{"class":94,"line":1596},[92,94670,94671],{"class":207},"array([[ 9, 44, 47, 64, 67, 67],\n",[92,94673,94674],{"class":94,"line":1602},[92,94675,94676],{"class":207},"       [21, 36, 70, 83, 87, 88],\n",[92,94678,94679],{"class":94,"line":1607},[92,94680,94681],{"class":207},"       [12, 39, 58, 65, 87, 88],\n",[92,94683,94684],{"class":94,"line":1621},[92,94685,94686],{"class":207},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[92,94688,94689],{"class":94,"line":1626},[92,94690,93909],{"class":207},[92,94692,94693],{"class":94,"line":1632},[92,94694,94695],{"class":161},"#axis=0时\n",[92,94697,94698,94701,94703,94705,94707],{"class":94,"line":1653},[92,94699,94700],{"class":102},"np.sort(aa,",[92,94702,47496],{"class":5196},[92,94704,148],{"class":98},[92,94706,294],{"class":151},[92,94708,109],{"class":102},[92,94710,94711],{"class":94,"line":1658},[92,94712,93909],{"class":207},[92,94714,94715],{"class":94,"line":1672},[92,94716,94717],{"class":207},"array([[44, 12, 36, 37, 25,  9],\n",[92,94719,94720],{"class":94,"line":1677},[92,94721,94722],{"class":207},"       [46, 21, 58, 65, 39, 77],\n",[92,94724,94725],{"class":94,"line":1706},[92,94726,94727],{"class":207},"       [83, 47, 64, 67, 67, 87],\n",[92,94729,94730],{"class":94,"line":1711},[92,94731,94732],{"class":207},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[92,94734,94735],{"class":94,"line":1728},[92,94736,93909],{"class":207},[92,94738,94739],{"class":94,"line":1733},[92,94740,94741],{"class":161},"#axis=1时,为默认值\n",[92,94743,94744,94746,94748,94750,94752],{"class":94,"line":1738},[92,94745,94700],{"class":102},[92,94747,47496],{"class":5196},[92,94749,148],{"class":98},[92,94751,320],{"class":151},[92,94753,109],{"class":102},[92,94755,94756],{"class":94,"line":1743},[92,94757,93909],{"class":207},[92,94759,94760],{"class":94,"line":1757},[92,94761,94671],{"class":207},[92,94763,94764],{"class":94,"line":1762},[92,94765,94676],{"class":207},[92,94767,94768],{"class":94,"line":2556},[92,94769,94681],{"class":207},[92,94771,94772],{"class":94,"line":2570},[92,94773,94686],{"class":207},[92,94775,94776],{"class":94,"line":2578},[92,94777,93909],{"class":207},[92,94779,94780],{"class":94,"line":2583},[92,94781,94782],{"class":161},"#按最后一列排序\n",[92,94784,94785,94787,94789,94792,94794,94796],{"class":94,"line":2589},[92,94786,366],{"class":102},[92,94788,148],{"class":98},[92,94790,94791],{"class":102},"aa[:,",[92,94793,635],{"class":98},[92,94795,320],{"class":151},[92,94797,33228],{"class":102},[92,94799,94800],{"class":94,"line":2595},[92,94801,94802],{"class":161},"#获取最后一列排好序的索引\n",[92,94804,94805,94807,94809],{"class":94,"line":2600},[92,94806,74040],{"class":102},[92,94808,148],{"class":98},[92,94810,94811],{"class":102},"np.argsort(b)\n",[92,94813,94814],{"class":94,"line":7928},[92,94815,94816],{"class":102},"aa[index]\n",[92,94818,94819],{"class":94,"line":7952},[92,94820,93909],{"class":207},[92,94822,94823],{"class":94,"line":7957},[92,94824,94635],{"class":207},[92,94826,94827],{"class":94,"line":7963},[92,94828,94829],{"class":207},"       [46, 88, 81, 37, 25, 77],\n",[92,94831,94832],{"class":94,"line":7990},[92,94833,94645],{"class":207},[92,94835,94836],{"class":94,"line":7995},[92,94837,94838],{"class":207},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[92,94840,94841],{"class":94,"line":8001},[92,94842,93909],{"class":207},[5106,94844,94845],{},"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":94847},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94494,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94854,"title":94855,"body":94856,"description":23357,"extension":14,"meta":94886,"navigation":17,"path":94887,"seo":94888,"stem":94889,"__hash__":94890},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94857,"toc":94884},[94858,94861,94864,94867,94870,94873,94876,94879],[29,94859,94855],{"id":94860},"_14广播机制",[38,94862,94863],{},"广播的规则：",[38,94865,94866],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[38,94868,94869],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[38,94871,94872],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[38,94874,94875],{},"3.如果没有维度形状为1，则会引发异常",[38,94877,94878],{},"也就是只有维度或者个数为1才可以进行广播操作",[38,94880,94881],{},[1441,94882],{"alt":10,"src":94883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":10,"searchDepth":11,"depth":11,"links":94885},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94855,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94892,"title":94893,"body":94894,"description":23357,"extension":14,"meta":94992,"navigation":17,"path":94993,"seo":94994,"stem":94995,"__hash__":94996},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94895,"toc":94990},[94896,94899,94902,94987],[29,94897,94893],{"id":94898},"_15比较掩码",[38,94900,94901],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[83,94903,94905],{"className":30360,"code":94904,"language":30362,"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,94906,94907,94953,94964,94978,94982],{"__ignoreMap":10},[92,94908,94909,94911,94913,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950],{"class":94,"line":95},[92,94910,341],{"class":102},[92,94912,148],{"class":98},[92,94914,94915],{"class":102},"np.array([[",[92,94917,320],{"class":151},[92,94919,481],{"class":102},[92,94921,180],{"class":151},[92,94923,481],{"class":102},[92,94925,174],{"class":151},[92,94927,48012],{"class":102},[92,94929,575],{"class":151},[92,94931,481],{"class":102},[92,94933,601],{"class":151},[92,94935,481],{"class":102},[92,94937,626],{"class":151},[92,94939,48012],{"class":102},[92,94941,828],{"class":151},[92,94943,481],{"class":102},[92,94945,853],{"class":151},[92,94947,481],{"class":102},[92,94949,878],{"class":151},[92,94951,94952],{"class":102},"]])\n",[92,94954,94955,94957,94959,94961],{"class":94,"line":11},[92,94956,341],{"class":102},[92,94958,1013],{"class":98},[92,94960,803],{"class":151},[92,94962,94963],{"class":161},"#结果是一个由True,False组成的数组\n",[92,94965,94966,94969,94971,94973,94975],{"class":94,"line":1158},[92,94967,94968],{"class":102},"a[a",[92,94970,1013],{"class":98},[92,94972,803],{"class":151},[92,94974,1043],{"class":102},[92,94976,94977],{"class":161},"#小于20的元素会存到这个数组中\n",[92,94979,94980],{"class":94,"line":1173},[92,94981,93545],{"class":161},[92,94983,94984],{"class":94,"line":1179},[92,94985,94986],{"class":161},"#array([ 1,  2,  3, 11, 12, 13])\n",[5106,94988,94989],{},"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":94991},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94893,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94998,"title":94999,"body":95000,"description":23357,"extension":14,"meta":95092,"navigation":17,"path":95093,"seo":95094,"stem":95095,"__hash__":95096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95001,"toc":95090},[95002,95005,95008,95011,95014,95017,95082,95087],[29,95003,94999],{"id":95004},"_16魔法命令time",[38,95006,95007],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[38,95009,95010],{},"%:行模式",[38,95012,95013],{},"%%:单元格模式",[38,95015,95016],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[83,95018,95020],{"className":30360,"code":95019,"language":30362,"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,95021,95022,95027,95034,95039,95048,95061,95065,95073],{"__ignoreMap":10},[92,95023,95024],{"class":94,"line":95},[92,95025,95026],{"class":161},"#程序执行时间\n",[92,95028,95029,95031],{"class":94,"line":11},[92,95030,30374],{"class":98},[92,95032,95033],{"class":102}," time \n",[92,95035,95036],{"class":94,"line":1158},[92,95037,95038],{"class":161},"#获取时间\n",[92,95040,95041,95044,95046],{"class":94,"line":1173},[92,95042,95043],{"class":102},"start",[92,95045,148],{"class":98},[92,95047,32400],{"class":102},[92,95049,95050,95053,95056,95058],{"class":94,"line":1179},[92,95051,95052],{"class":102},"time.sleep(",[92,95054,95055],{"class":151},"0.4",[92,95057,532],{"class":102},[92,95059,95060],{"class":161},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[92,95062,95063],{"class":94,"line":1193},[92,95064,95038],{"class":161},[92,95066,95067,95069,95071],{"class":94,"line":1199},[92,95068,45783],{"class":102},[92,95070,148],{"class":98},[92,95072,32400],{"class":102},[92,95074,95075,95077,95079],{"class":94,"line":1290},[92,95076,45783],{"class":102},[92,95078,635],{"class":98},[92,95080,95081],{"class":102},"start\n",[38,95083,95084],{},[1441,95085],{"alt":10,"src":95086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5106,95088,95089],{},"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":95091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94999,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95098,"title":95099,"body":95100,"description":23357,"extension":14,"meta":95135,"navigation":17,"path":95136,"seo":95137,"stem":95138,"__hash__":95139},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95101,"toc":95133},[95102,95105,95108,95111,95114,95117,95120,95123,95128],[29,95103,95099],{"id":95104},"_17魔法命令timeit",[38,95106,95107],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[38,95109,95110],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[38,95112,95113],{},"单元格模式：",[38,95115,95116],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[38,95118,95119],{},"初始化语句执行次数由轮数来决定",[38,95121,95122],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[38,95124,95125],{},[1441,95126],{"alt":10,"src":95127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[38,95129,95130],{},[1441,95131],{"alt":10,"src":95132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":10,"searchDepth":11,"depth":11,"links":95134},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95099,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95141,"title":95142,"body":95143,"description":23357,"extension":14,"meta":95161,"navigation":17,"path":95162,"seo":95163,"stem":95164,"__hash__":95165},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95144,"toc":95159},[95145,95148,95151,95154],[29,95146,95142],{"id":95147},"_18魔法命令writefile和run",[38,95149,95150],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[38,95152,95153],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[38,95155,95156],{},[1441,95157],{"alt":10,"src":95158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":10,"searchDepth":11,"depth":11,"links":95160},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95142,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95167,"title":95168,"body":95169,"description":23357,"extension":14,"meta":95222,"navigation":17,"path":95223,"seo":95224,"stem":95225,"__hash__":95226},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95170,"toc":95220},[95171,95174,95177,95179,95182,95185,95190,95193,95196,95199,95202,95205,95208,95211,95214,95217],[29,95172,95168],{"id":95173},"_19魔法命令memit",[38,95175,95176],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[38,95178,24581],{},[38,95180,95181],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[38,95183,95184],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[38,95186,95187],{},[1441,95188],{"alt":10,"src":95189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[38,95191,95192],{},"补充：",[38,95194,95195],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[38,95197,95198],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[38,95200,95201],{},"解决方法：",[38,95203,95204],{},"1.cmd",[38,95206,95207],{},"2.依次输入以下代码：",[38,95209,95210],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[38,95212,95213],{},"pip install --upgrade ipython",[38,95215,95216],{},"#升级 memory_profiler 和 setuptools",[38,95218,95219],{},"pip install --upgrade memory_profiler setuptools",{"title":10,"searchDepth":11,"depth":11,"links":95221},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95168,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95228,"title":95229,"body":95230,"description":23357,"extension":14,"meta":96876,"navigation":17,"path":96877,"seo":96878,"stem":96879,"__hash__":96880},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95231,"toc":96846},[95232,95235,95239,95243,95304,95307,95312,95316,95321,95326,95331,95336,95339,95344,95348,95352,95385,95388,95391,95394,95446,95449,95485,95488,95530,95534,95555,95557,95594,95596,95601,95603,95608,95612,95615,95643,95647,95651,95704,95708,95800,95804,95808,95811,95816,95820,95845,95850,95854,95857,95860,95863,95866,95869,95872,95875,95887,95891,95895,95898,95930,95933,95956,95959,95985,95988,96014,96017,96051,96054,96116,96120,96123,96127,96130,96156,96159,96162,96167,96170,96239,96241,96246,96307,96310,96321,96327,96332,96336,96339,96352,96356,96371,96373,96396,96398,96424,96427,96430,96433,96481,96483,96488,96492,96496,96523,96527,96554,96557,96562,96567,96657,96661,96719,96724,96727,96730,96772,96776,96832,96837,96840,96843],[29,95233,95229],{"id":95234},"_2创建数组",[33,95236,95238],{"id":95237},"_21-array函数创建数组","2.1 array()函数创建数组",[63,95240,95242],{"id":95241},"_221-函数语句","2.2.1 函数语句",[83,95244,95246],{"className":30360,"code":95245,"language":30362,"meta":10,"style":10},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[89,95247,95248],{"__ignoreMap":10},[92,95249,95250,95253,95256,95258,95260,95262,95264,95266,95269,95271,95274,95276,95279,95281,95283,95285,95288,95290,95293,95295,95298,95300,95302],{"class":94,"line":95},[92,95251,95252],{"class":102},"numpy.array(",[92,95254,95255],{"class":151},"object",[92,95257,12415],{"class":102},[92,95259,93481],{"class":5196},[92,95261,13544],{"class":98},[92,95263,38915],{"class":151},[92,95265,12415],{"class":102},[92,95267,95268],{"class":5196},"copy",[92,95270,13544],{"class":98},[92,95272,95273],{"class":151}," True",[92,95275,12415],{"class":102},[92,95277,95278],{"class":5196},"order",[92,95280,13544],{"class":98},[92,95282,38915],{"class":151},[92,95284,12415],{"class":102},[92,95286,95287],{"class":5196},"subok",[92,95289,13544],{"class":98},[92,95291,95292],{"class":151}," False",[92,95294,12415],{"class":102},[92,95296,95297],{"class":5196},"ndmin",[92,95299,13544],{"class":98},[92,95301,4072],{"class":151},[92,95303,109],{"class":102},[38,95305,95306],{},"参数：",[38,95308,95309],{},[1441,95310],{"alt":10,"src":95311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[63,95313,95315],{"id":95314},"_222-实例","2.2.2 实例",[38,95317,95318],{},[1441,95319],{"alt":10,"src":95320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[38,95322,95323],{},[1441,95324],{"alt":10,"src":95325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[38,95327,95328],{},[1441,95329],{"alt":10,"src":95330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[38,95332,95333],{},[1441,95334],{"alt":10,"src":95335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[38,95337,95338],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[38,95340,95341],{},[1441,95342],{"alt":10,"src":95343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[33,95345,95347],{"id":95346},"_22-随机数创建数组","2.2 随机数创建数组",[63,95349,95351],{"id":95350},"_221-random语句","2.2.1 random语句",[83,95353,95355],{"className":30360,"code":95354,"language":30362,"meta":10,"style":10},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[89,95356,95357,95362,95367,95375,95380],{"__ignoreMap":10},[92,95358,95359],{"class":94,"line":95},[92,95360,95361],{"class":161},"#random.random()\n",[92,95363,95364],{"class":94,"line":11},[92,95365,95366],{"class":161},"#确定随机种子,就是每次运行结果是相同的\n",[92,95368,95369,95371,95373],{"class":94,"line":1158},[92,95370,94588],{"class":102},[92,95372,294],{"class":151},[92,95374,109],{"class":102},[92,95376,95377],{"class":94,"line":1173},[92,95378,95379],{"class":102},"np.random.random()\n",[92,95381,95382],{"class":94,"line":1179},[92,95383,95384],{"class":161},"#生成一个随机的数目\n",[38,95386,95387],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[38,95389,95390],{},"可以指定数组形状 size",[38,95392,95393],{},"①生成一维数组",[83,95395,95397],{"className":30360,"code":95396,"language":30362,"meta":10,"style":10},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[89,95398,95399,95404,95417,95422,95438],{"__ignoreMap":10},[92,95400,95401],{"class":94,"line":95},[92,95402,95403],{"class":161},"#random.random(size())\n",[92,95405,95406,95409,95411,95413,95415],{"class":94,"line":11},[92,95407,95408],{"class":102},"np.random.random(",[92,95410,31478],{"class":5196},[92,95412,148],{"class":98},[92,95414,422],{"class":151},[92,95416,109],{"class":102},[92,95418,95419],{"class":94,"line":1158},[92,95420,95421],{"class":161},"#生成一位的五个元素\n",[92,95423,95424,95426,95428,95430,95432,95434,95436],{"class":94,"line":1173},[92,95425,341],{"class":102},[92,95427,148],{"class":98},[92,95429,95408],{"class":102},[92,95431,31478],{"class":5196},[92,95433,148],{"class":98},[92,95435,396],{"class":151},[92,95437,109],{"class":102},[92,95439,95440,95443],{"class":94,"line":1179},[92,95441,95442],{"class":102},"a.shape ",[92,95444,95445],{"class":161},"#输出数组形状\n",[38,95447,95448],{},"②生成二维数组",[83,95450,95452],{"className":30360,"code":95451,"language":30362,"meta":10,"style":10},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[89,95453,95454,95458,95480],{"__ignoreMap":10},[92,95455,95456],{"class":94,"line":95},[92,95457,93282],{"class":161},[92,95459,95460,95462,95464,95466,95468,95470,95472,95474,95476,95478],{"class":94,"line":11},[92,95461,93287],{"class":102},[92,95463,148],{"class":98},[92,95465,95408],{"class":102},[92,95467,31478],{"class":5196},[92,95469,148],{"class":98},[92,95471,103],{"class":102},[92,95473,396],{"class":151},[92,95475,481],{"class":102},[92,95477,422],{"class":151},[92,95479,30479],{"class":102},[92,95481,95482],{"class":94,"line":1158},[92,95483,95484],{"class":161},"#生成四行五列的数组\n",[38,95486,95487],{},"③生成三维数组",[83,95489,95491],{"className":30360,"code":95490,"language":30362,"meta":10,"style":10},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[89,95492,95493,95498,95525],{"__ignoreMap":10},[92,95494,95495],{"class":94,"line":95},[92,95496,95497],{"class":161},"#三维数组\n",[92,95499,95500,95503,95505,95507,95509,95511,95513,95515,95517,95519,95521,95523],{"class":94,"line":11},[92,95501,95502],{"class":102},"aaa",[92,95504,148],{"class":98},[92,95506,95408],{"class":102},[92,95508,31478],{"class":5196},[92,95510,148],{"class":98},[92,95512,103],{"class":102},[92,95514,180],{"class":151},[92,95516,481],{"class":102},[92,95518,174],{"class":151},[92,95520,481],{"class":102},[92,95522,396],{"class":151},[92,95524,30479],{"class":102},[92,95526,95527],{"class":94,"line":1158},[92,95528,95529],{"class":102},"aaa.shape\n",[63,95531,95533],{"id":95532},"_222-randint语句","2.2.2 randint语句",[83,95535,95537],{"className":30360,"code":95536,"language":30362,"meta":10,"style":10},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[89,95538,95539,95544],{"__ignoreMap":10},[92,95540,95541],{"class":94,"line":95},[92,95542,95543],{"class":161},"#生成随机的整数 random.randint(low,high,size)\n",[92,95545,95546,95548,95550,95552],{"class":94,"line":11},[92,95547,93095],{"class":102},[92,95549,422],{"class":151},[92,95551,13694],{"class":102},[92,95553,95554],{"class":161},"#0~5中的随机一个数\n",[38,95556,95393],{},[83,95558,95560],{"className":30360,"code":95559,"language":30362,"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,95561,95562,95567,95589],{"__ignoreMap":10},[92,95563,95564],{"class":94,"line":95},[92,95565,95566],{"class":161},"#一维\n",[92,95568,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587],{"class":94,"line":11},[92,95570,93095],{"class":102},[92,95572,320],{"class":151},[92,95574,481],{"class":102},[92,95576,575],{"class":151},[92,95578,481],{"class":102},[92,95580,31478],{"class":5196},[92,95582,148],{"class":98},[92,95584,103],{"class":102},[92,95586,549],{"class":151},[92,95588,30479],{"class":102},[92,95590,95591],{"class":94,"line":1158},[92,95592,95593],{"class":161},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[38,95595,95448],{},[38,95597,95598],{},[1441,95599],{"alt":10,"src":95600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[38,95602,95487],{},[38,95604,95605],{},[1441,95606],{"alt":10,"src":95607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[63,95609,95611],{"id":95610},"_222-rand语句","2.2.2 rand语句",[38,95613,95614],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[83,95616,95618],{"className":30360,"code":95617,"language":30362,"meta":10,"style":10},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[89,95619,95620,95633,95638],{"__ignoreMap":10},[92,95621,95622,95625,95627,95629,95631],{"class":94,"line":95},[92,95623,95624],{"class":102},"np.random.rand(",[92,95626,414],{"class":151},[92,95628,481],{"class":102},[92,95630,549],{"class":151},[92,95632,109],{"class":102},[92,95634,95635],{"class":94,"line":11},[92,95636,95637],{"class":161},"#第一个参数100：行数，表示有100个样本\n",[92,95639,95640],{"class":94,"line":1158},[92,95641,95642],{"class":161},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,95644,95646],{"id":95645},"_23-arange创建数组","2.3 arange()创建数组",[63,95648,95650],{"id":95649},"_231-函数语句","2.3.1 函数语句",[83,95652,95654],{"className":30360,"code":95653,"language":30362,"meta":10,"style":10},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[89,95655,95656,95670,95675,95680,95685,95690,95695,95700],{"__ignoreMap":10},[92,95657,95658,95661,95663,95665,95668],{"class":94,"line":95},[92,95659,95660],{"class":102},"numpy.arange([start,] stop[, step], ",[92,95662,93481],{"class":5196},[92,95664,148],{"class":98},[92,95666,95667],{"class":151},"None",[92,95669,109],{"class":102},[92,95671,95672],{"class":94,"line":11},[92,95673,95674],{"class":161},"#参数\n",[92,95676,95677],{"class":94,"line":1158},[92,95678,95679],{"class":207},"\"\"\"\n",[92,95681,95682],{"class":94,"line":1173},[92,95683,95684],{"class":207},"start:起始值，可选，默认从 0 开始。\n",[92,95686,95687],{"class":94,"line":1179},[92,95688,95689],{"class":207},"stop:结束值（不包含该值）。\n",[92,95691,95692],{"class":94,"line":1193},[92,95693,95694],{"class":207},"step:步长，可选，默认是 1。可以为浮点数。\n",[92,95696,95697],{"class":94,"line":1199},[92,95698,95699],{"class":207},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[92,95701,95702],{"class":94,"line":1290},[92,95703,95679],{"class":207},[63,95705,95707],{"id":95706},"_232-实例","2.3.2 实例",[83,95709,95711],{"className":30360,"code":95710,"language":30362,"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,95712,95713,95717,95741,95746,95751,95755,95778,95782,95786,95791,95796],{"__ignoreMap":10},[92,95714,95715],{"class":94,"line":95},[92,95716,93086],{"class":161},[92,95718,95719,95721,95723,95725,95727,95729,95731,95733,95735,95737,95739],{"class":94,"line":11},[92,95720,92983],{"class":102},[92,95722,320],{"class":151},[92,95724,481],{"class":102},[92,95726,828],{"class":151},[92,95728,481],{"class":102},[92,95730,320],{"class":151},[92,95732,481],{"class":102},[92,95734,93481],{"class":5196},[92,95736,148],{"class":98},[92,95738,106],{"class":151},[92,95740,109],{"class":102},[92,95742,95743],{"class":94,"line":1158},[92,95744,95745],{"class":161},"#输出结果：\n",[92,95747,95748],{"class":94,"line":1173},[92,95749,95750],{"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,95752,95753],{"class":94,"line":1179},[92,95754,93928],{"class":161},[92,95756,95757,95760,95762,95764,95766,95769,95771,95773,95775],{"class":94,"line":1193},[92,95758,95759],{"class":102},"np.array([np.arange(",[92,95761,320],{"class":151},[92,95763,481],{"class":102},[92,95765,396],{"class":151},[92,95767,95768],{"class":102},"),np.arange(",[92,95770,396],{"class":151},[92,95772,481],{"class":102},[92,95774,472],{"class":151},[92,95776,95777],{"class":102},")])\n",[92,95779,95780],{"class":94,"line":1199},[92,95781,93545],{"class":161},[92,95783,95784],{"class":94,"line":1290},[92,95785,95679],{"class":207},[92,95787,95788],{"class":94,"line":1296},[92,95789,95790],{"class":207},"array([[1, 2, 3],\n",[92,95792,95793],{"class":94,"line":1308},[92,95794,95795],{"class":207},"       [4, 5, 6]])\n",[92,95797,95798],{"class":94,"line":1591},[92,95799,95679],{"class":207},[33,95801,95803],{"id":95802},"_24-生态分布","2.4 生态分布",[63,95805,95807],{"id":95806},"_241-标准正态分布","2.4.1 标准正态分布",[38,95809,95810],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[38,95812,95813],{},[1441,95814],{"alt":10,"src":95815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[63,95817,95819],{"id":95818},"_242-常规正态分布","2.4.2 常规正态分布",[83,95821,95823],{"className":30360,"code":95822,"language":30362,"meta":10,"style":10},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[89,95824,95825,95830,95835,95840],{"__ignoreMap":10},[92,95826,95827],{"class":94,"line":95},[92,95828,95829],{"class":102},"random.normal(loc,scale,size)也可以生成正态分布\n",[92,95831,95832],{"class":94,"line":11},[92,95833,95834],{"class":161},"#loc:期望\n",[92,95836,95837],{"class":94,"line":1158},[92,95838,95839],{"class":161},"#scale:方差\n",[92,95841,95842],{"class":94,"line":1173},[92,95843,95844],{"class":161},"#size:用于确定是几维的数列\n",[38,95846,95847],{},[1441,95848],{"alt":10,"src":95849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[33,95851,95853],{"id":95852},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[38,95855,95856],{},"ndim:秩，维度个数",[38,95858,95859],{},"size:数组元素的个数",[38,95861,95862],{},"shape:数组的形状",[38,95864,95865],{},"dtype:数组元素的类型",[38,95867,95868],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[38,95870,95871],{},"他们都是属性，通过数组.属性的形式来确定",[38,95873,95874],{},"如果需要输出多个可以通过以下方式：",[83,95876,95878],{"className":30360,"code":95877,"language":30362,"meta":10,"style":10},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[89,95879,95880],{"__ignoreMap":10},[92,95881,95882,95884],{"class":94,"line":95},[92,95883,30397],{"class":151},[92,95885,95886],{"class":102},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,95888,95890],{"id":95889},"_26-其他方式创建数组","2.6 其他方式创建数组",[63,95892,95894],{"id":95893},"_261-zeros创建数组","2.6.1 zeros()创建数组",[38,95896,95897],{},"①创建一维数组",[83,95899,95901],{"className":30360,"code":95900,"language":30362,"meta":10,"style":10},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[89,95902,95903,95912,95916,95921,95926],{"__ignoreMap":10},[92,95904,95905,95908,95910],{"class":94,"line":95},[92,95906,95907],{"class":102},"np.zeros(",[92,95909,549],{"class":151},[92,95911,109],{"class":102},[92,95913,95914],{"class":94,"line":11},[92,95915,95679],{"class":207},[92,95917,95918],{"class":94,"line":1158},[92,95919,95920],{"class":207},"输出结果：\n",[92,95922,95923],{"class":94,"line":1173},[92,95924,95925],{"class":207},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[92,95927,95928],{"class":94,"line":1179},[92,95929,95679],{"class":207},[38,95931,95932],{},"上方代码等价于：",[83,95934,95936],{"className":30360,"code":95935,"language":30362,"meta":10,"style":10},"np.zeros(shape=(10))#创建10个元素的0数组\n",[89,95937,95938],{"__ignoreMap":10},[92,95939,95940,95942,95945,95947,95949,95951,95953],{"class":94,"line":95},[92,95941,95907],{"class":102},[92,95943,95944],{"class":5196},"shape",[92,95946,148],{"class":98},[92,95948,103],{"class":102},[92,95950,549],{"class":151},[92,95952,82753],{"class":102},[92,95954,95955],{"class":161},"#创建10个元素的0数组\n",[38,95957,95958],{},"也可以指定类型",[83,95960,95962],{"className":30360,"code":95961,"language":30362,"meta":10,"style":10},"#指定类型\nnp.zeros(5,dtype=int)\n",[89,95963,95964,95969],{"__ignoreMap":10},[92,95965,95966],{"class":94,"line":95},[92,95967,95968],{"class":161},"#指定类型\n",[92,95970,95971,95973,95975,95977,95979,95981,95983],{"class":94,"line":11},[92,95972,95907],{"class":102},[92,95974,422],{"class":151},[92,95976,481],{"class":102},[92,95978,93481],{"class":5196},[92,95980,148],{"class":98},[92,95982,106],{"class":151},[92,95984,109],{"class":102},[38,95986,95987],{},"②创建二维数组",[83,95989,95991],{"className":30360,"code":95990,"language":30362,"meta":10,"style":10},"np.zeros((3,4),dtype=int)\n",[89,95992,95993],{"__ignoreMap":10},[92,95994,95995,95998,96000,96002,96004,96006,96008,96010,96012],{"class":94,"line":95},[92,95996,95997],{"class":102},"np.zeros((",[92,95999,174],{"class":151},[92,96001,481],{"class":102},[92,96003,396],{"class":151},[92,96005,42238],{"class":102},[92,96007,93481],{"class":5196},[92,96009,148],{"class":98},[92,96011,106],{"class":151},[92,96013,109],{"class":102},[38,96015,96016],{},"③创建三维数组",[83,96018,96020],{"className":30360,"code":96019,"language":30362,"meta":10,"style":10},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[89,96021,96022,96027],{"__ignoreMap":10},[92,96023,96024],{"class":94,"line":95},[92,96025,96026],{"class":161},"#创建三维数组\n",[92,96028,96029,96031,96033,96035,96037,96039,96041,96043,96045,96047,96049],{"class":94,"line":11},[92,96030,95997],{"class":102},[92,96032,174],{"class":151},[92,96034,481],{"class":102},[92,96036,396],{"class":151},[92,96038,481],{"class":102},[92,96040,422],{"class":151},[92,96042,42238],{"class":102},[92,96044,93481],{"class":5196},[92,96046,148],{"class":98},[92,96048,106],{"class":151},[92,96050,109],{"class":102},[38,96052,96053],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[83,96055,96057],{"className":30360,"code":96056,"language":30362,"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,96058,96059,96064,96079,96084,96089,96111],{"__ignoreMap":10},[92,96060,96061],{"class":94,"line":95},[92,96062,96063],{"class":161},"#使用zeros_like将创建的一维数组变成全0的数组\n",[92,96065,96066,96068,96070,96072,96074,96076],{"class":94,"line":11},[92,96067,341],{"class":102},[92,96069,148],{"class":98},[92,96071,92983],{"class":102},[92,96073,396],{"class":151},[92,96075,532],{"class":102},[92,96077,96078],{"class":161},"#这个得到的结果：一维数组0，1，2，3\n",[92,96080,96081],{"class":94,"line":1158},[92,96082,96083],{"class":102},"np.zeros_like(a)\n",[92,96085,96086],{"class":94,"line":1173},[92,96087,96088],{"class":161},"#使用zeros_like将创建的二维数组变成全0的数组\n",[92,96090,96091,96093,96095,96097,96099,96101,96103,96105,96107,96109],{"class":94,"line":1179},[92,96092,93287],{"class":102},[92,96094,148],{"class":98},[92,96096,95408],{"class":102},[92,96098,31478],{"class":5196},[92,96100,148],{"class":98},[92,96102,103],{"class":102},[92,96104,396],{"class":151},[92,96106,481],{"class":102},[92,96108,422],{"class":151},[92,96110,30479],{"class":102},[92,96112,96113],{"class":94,"line":1193},[92,96114,96115],{"class":102},"np.zeros_like(aa)\n",[63,96117,96119],{"id":96118},"_262-ones创建数组","2.6.2 ones()创建数组",[38,96121,96122],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[63,96124,96126],{"id":96125},"_263-empty创建数组","2.6.3 empty()创建数组",[38,96128,96129],{},"①empty()用法",[83,96131,96133],{"className":30360,"code":96132,"language":30362,"meta":10,"style":10},"numpy.empty(shape,dtype=float,order='c')\n",[89,96134,96135],{"__ignoreMap":10},[92,96136,96137,96140,96142,96144,96146,96148,96150,96152,96154],{"class":94,"line":95},[92,96138,96139],{"class":102},"numpy.empty(shape,",[92,96141,93481],{"class":5196},[92,96143,148],{"class":98},[92,96145,142],{"class":151},[92,96147,481],{"class":102},[92,96149,95278],{"class":5196},[92,96151,148],{"class":98},[92,96153,76010],{"class":207},[92,96155,109],{"class":102},[38,96157,96158],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[38,96160,96161],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[38,96163,96164],{},[1441,96165],{"alt":10,"src":96166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[38,96168,96169],{},"②empty()用法",[83,96171,96173],{"className":30360,"code":96172,"language":30362,"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,96174,96175,96196,96208,96229,96234],{"__ignoreMap":10},[92,96176,96177,96179,96181,96184,96186,96188,96190,96192,96194],{"class":94,"line":95},[92,96178,948],{"class":102},[92,96180,148],{"class":98},[92,96182,96183],{"class":102},"np.empty(",[92,96185,549],{"class":151},[92,96187,481],{"class":102},[92,96189,93481],{"class":5196},[92,96191,148],{"class":98},[92,96193,106],{"class":151},[92,96195,109],{"class":102},[92,96197,96198,96200,96202,96204,96206],{"class":94,"line":11},[92,96199,923],{"class":102},[92,96201,148],{"class":98},[92,96203,92983],{"class":102},[92,96205,422],{"class":151},[92,96207,109],{"class":102},[92,96209,96210,96213,96215,96218,96220,96222,96225,96227],{"class":94,"line":1158},[92,96211,96212],{"class":102},"np.add(",[92,96214,180],{"class":151},[92,96216,96217],{"class":102},",x,",[92,96219,93035],{"class":5196},[92,96221,148],{"class":98},[92,96223,96224],{"class":102},"y[:",[92,96226,422],{"class":151},[92,96228,4636],{"class":102},[92,96230,96231],{"class":94,"line":1173},[92,96232,96233],{"class":161},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[92,96235,96236],{"class":94,"line":1179},[92,96237,96238],{"class":102},"y\n",[38,96240,11494],{},[38,96242,96243],{},[1441,96244],{"alt":10,"src":96245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[83,96247,96249],{"className":30360,"code":96248,"language":30362,"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,96250,96251,96267,96287,96302],{"__ignoreMap":10},[92,96252,96253,96255,96257,96259,96261,96263,96265],{"class":94,"line":95},[92,96254,923],{"class":102},[92,96256,148],{"class":98},[92,96258,92983],{"class":102},[92,96260,320],{"class":151},[92,96262,481],{"class":102},[92,96264,447],{"class":151},[92,96266,109],{"class":102},[92,96268,96269,96271,96273,96275,96277,96279,96281,96283,96285],{"class":94,"line":11},[92,96270,948],{"class":102},[92,96272,148],{"class":98},[92,96274,96183],{"class":102},[92,96276,422],{"class":151},[92,96278,481],{"class":102},[92,96280,93481],{"class":5196},[92,96282,148],{"class":98},[92,96284,106],{"class":151},[92,96286,109],{"class":102},[92,96288,96289,96292,96294,96296,96298,96300],{"class":94,"line":1158},[92,96290,96291],{"class":102},"np.add(x,",[92,96293,180],{"class":151},[92,96295,481],{"class":102},[92,96297,93035],{"class":5196},[92,96299,148],{"class":98},[92,96301,93430],{"class":102},[92,96303,96304],{"class":94,"line":1173},[92,96305,96306],{"class":161},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[38,96308,96309],{},"③empty_like()",[38,96311,96312],{},[252,96313,96314,96315,96320],{},"创建一个",[252,96316,96317],{},[252,96318,96319],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[38,96322,96323,96326],{},[89,96324,96325],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[38,96328,96329],{},[1441,96330],{"alt":10,"src":96331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[63,96333,96335],{"id":96334},"_264-用法","2.6.4 ？？用法",[38,96337,96338],{},"当想查看一个函数的参数时，可以通过？？来实现",[83,96340,96342],{"className":30360,"code":96341,"language":30362,"meta":10,"style":10},"np.full??\n",[89,96343,96344],{"__ignoreMap":10},[92,96345,96346,96349],{"class":94,"line":95},[92,96347,96348],{"class":102},"np.full",[92,96350,96351],{"class":77385},"??\n",[63,96353,96355],{"id":96354},"_265-full创建数组","2.6.5 full()创建数组",[83,96357,96359],{"className":30360,"code":96358,"language":30362,"meta":10,"style":10},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[89,96360,96361,96366],{"__ignoreMap":10},[92,96362,96363],{"class":94,"line":95},[92,96364,96365],{"class":102},"full(shape,fill_value)\n",[92,96367,96368],{"class":94,"line":11},[92,96369,96370],{"class":102},"创建全为某个指定值的数组\n",[38,96372,94511],{},[83,96374,96376],{"className":30360,"code":96375,"language":30362,"meta":10,"style":10},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[89,96377,96378,96383],{"__ignoreMap":10},[92,96379,96380],{"class":94,"line":95},[92,96381,96382],{"class":161},"#创建一个一维数组,以20进行填充\n",[92,96384,96385,96388,96390,96392,96394],{"class":94,"line":11},[92,96386,96387],{"class":102},"np.full(",[92,96389,549],{"class":151},[92,96391,481],{"class":102},[92,96393,803],{"class":151},[92,96395,109],{"class":102},[38,96397,93272],{},[83,96399,96401],{"className":30360,"code":96400,"language":30362,"meta":10,"style":10},"#创建二维数组\nnp.full((3,5),11)\n",[89,96402,96403,96407],{"__ignoreMap":10},[92,96404,96405],{"class":94,"line":95},[92,96406,93928],{"class":161},[92,96408,96409,96412,96414,96416,96418,96420,96422],{"class":94,"line":11},[92,96410,96411],{"class":102},"np.full((",[92,96413,174],{"class":151},[92,96415,481],{"class":102},[92,96417,422],{"class":151},[92,96419,42238],{"class":102},[92,96421,575],{"class":151},[92,96423,109],{"class":102},[38,96425,96426],{},"③full_like用法",[38,96428,96429],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[38,96431,96432],{},"这里是指定填充而已",[83,96434,96436],{"className":30360,"code":96435,"language":30362,"meta":10,"style":10},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[89,96437,96438,96443,96467,96472],{"__ignoreMap":10},[92,96439,96440],{"class":94,"line":95},[92,96441,96442],{"class":161},"#创建一个指定形状数组\n",[92,96444,96445,96447,96449,96451,96453,96455,96457,96459,96461,96463,96465],{"class":94,"line":11},[92,96446,341],{"class":102},[92,96448,148],{"class":98},[92,96450,92983],{"class":102},[92,96452,320],{"class":151},[92,96454,481],{"class":102},[92,96456,428],{"class":151},[92,96458,92988],{"class":102},[92,96460,396],{"class":151},[92,96462,481],{"class":102},[92,96464,523],{"class":151},[92,96466,109],{"class":102},[92,96468,96469],{"class":94,"line":1158},[92,96470,96471],{"class":161},"#进行指定填充\n",[92,96473,96474,96477,96479],{"class":94,"line":1173},[92,96475,96476],{"class":102},"np.full_like(a,",[92,96478,549],{"class":151},[92,96480,109],{"class":102},[38,96482,11494],{},[38,96484,96485],{},[1441,96486],{"alt":10,"src":96487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[63,96489,96491],{"id":96490},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21978,96493,96495],{"id":96494},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[83,96497,96499],{"className":30360,"code":96498,"language":30362,"meta":10,"style":10},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[89,96500,96501,96518],{"__ignoreMap":10},[92,96502,96503,96506,96508,96510,96512,96514,96516],{"class":94,"line":95},[92,96504,96505],{"class":102},"np.eye(",[92,96507,396],{"class":151},[92,96509,481],{"class":102},[92,96511,93481],{"class":5196},[92,96513,148],{"class":98},[92,96515,106],{"class":151},[92,96517,109],{"class":102},[92,96519,96520],{"class":94,"line":11},[92,96521,96522],{"class":161},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21978,96524,96526],{"id":96525},"_2662-法2identity","2.6.6.2 法2：identity()",[83,96528,96530],{"className":30360,"code":96529,"language":30362,"meta":10,"style":10},"#identity()\nnp.identity(5,dtype=int)\n",[89,96531,96532,96537],{"__ignoreMap":10},[92,96533,96534],{"class":94,"line":95},[92,96535,96536],{"class":161},"#identity()\n",[92,96538,96539,96542,96544,96546,96548,96550,96552],{"class":94,"line":11},[92,96540,96541],{"class":102},"np.identity(",[92,96543,422],{"class":151},[92,96545,481],{"class":102},[92,96547,93481],{"class":5196},[92,96549,148],{"class":98},[92,96551,106],{"class":151},[92,96553,109],{"class":102},[38,96555,96556],{},"两个函数是有区别的",[38,96558,96559],{},[1441,96560],{"alt":10,"src":96561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[38,96563,96564],{},[1441,96565],{"alt":10,"src":96566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[83,96568,96570],{"className":30360,"code":96569,"language":30362,"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,96571,96572,96577,96589,96594,96599,96604,96609,96613,96618,96638,96642,96647,96652],{"__ignoreMap":10},[92,96573,96574],{"class":94,"line":95},[92,96575,96576],{"class":161},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[92,96578,96579,96581,96583,96585,96587],{"class":94,"line":11},[92,96580,96505],{"class":102},[92,96582,174],{"class":151},[92,96584,12415],{"class":102},[92,96586,396],{"class":151},[92,96588,109],{"class":102},[92,96590,96591],{"class":94,"line":1158},[92,96592,96593],{"class":161},"# 输出:\n",[92,96595,96596],{"class":94,"line":1173},[92,96597,96598],{"class":161},"# [[1. 0. 0. 0.]\n",[92,96600,96601],{"class":94,"line":1179},[92,96602,96603],{"class":161},"#  [0. 1. 0. 0.]\n",[92,96605,96606],{"class":94,"line":1193},[92,96607,96608],{"class":161},"#  [0. 0. 1. 0.]]\n",[92,96610,96611],{"class":94,"line":1199},[92,96612,2379],{"emptyLinePlaceholder":17},[92,96614,96615],{"class":94,"line":1290},[92,96616,96617],{"class":161},"# 对角线向上偏移1\n",[92,96619,96620,96622,96624,96626,96628,96630,96632,96634,96636],{"class":94,"line":1296},[92,96621,96505],{"class":102},[92,96623,174],{"class":151},[92,96625,12415],{"class":102},[92,96627,396],{"class":151},[92,96629,12415],{"class":102},[92,96631,596],{"class":5196},[92,96633,148],{"class":98},[92,96635,320],{"class":151},[92,96637,109],{"class":102},[92,96639,96640],{"class":94,"line":1308},[92,96641,96593],{"class":161},[92,96643,96644],{"class":94,"line":1591},[92,96645,96646],{"class":161},"# [[0. 1. 0. 0.]\n",[92,96648,96649],{"class":94,"line":1596},[92,96650,96651],{"class":161},"#  [0. 0. 1. 0.]\n",[92,96653,96654],{"class":94,"line":1602},[92,96655,96656],{"class":161},"#  [0. 0. 0. 1.]]\n",[63,96658,96660],{"id":96659},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[83,96662,96664],{"className":30360,"code":96663,"language":30362,"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,96665,96666,96671,96675,96680,96685,96690,96695,96700,96705,96710,96715],{"__ignoreMap":10},[92,96667,96668],{"class":94,"line":95},[92,96669,96670],{"class":161},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[92,96672,96673],{"class":94,"line":11},[92,96674,95679],{"class":207},[92,96676,96677],{"class":94,"line":1158},[92,96678,96679],{"class":207},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[92,96681,96682],{"class":94,"line":1173},[92,96683,96684],{"class":207},"参数介绍：\n",[92,96686,96687],{"class":94,"line":1179},[92,96688,96689],{"class":207},"start：序列的起始值\n",[92,96691,96692],{"class":94,"line":1193},[92,96693,96694],{"class":207},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[92,96696,96697],{"class":94,"line":1199},[92,96698,96699],{"class":207},"num：要生长的等步长的样本数量，默认为50\n",[92,96701,96702],{"class":94,"line":1290},[92,96703,96704],{"class":207},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[92,96706,96707],{"class":94,"line":1296},[92,96708,96709],{"class":207},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[92,96711,96712],{"class":94,"line":1308},[92,96713,96714],{"class":207},"dtype：ndarry的数据类型\n",[92,96716,96717],{"class":94,"line":1591},[92,96718,95679],{"class":207},[38,96720,96721],{},[1441,96722],{"alt":10,"src":96723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[38,96725,96726],{},"这里num=是可以省略的",[38,96728,96729],{},"也就是下方两行代码结果是一模一样的",[83,96731,96733],{"className":30360,"code":96732,"language":30362,"meta":10,"style":10},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[89,96734,96735,96752],{"__ignoreMap":10},[92,96736,96737,96740,96742,96744,96746,96748,96750],{"class":94,"line":95},[92,96738,96739],{"class":102},"np.linspace(",[92,96741,320],{"class":151},[92,96743,481],{"class":102},[92,96745,422],{"class":151},[92,96747,481],{"class":102},[92,96749,422],{"class":151},[92,96751,109],{"class":102},[92,96753,96754,96756,96758,96760,96762,96764,96766,96768,96770],{"class":94,"line":11},[92,96755,96739],{"class":102},[92,96757,320],{"class":151},[92,96759,481],{"class":102},[92,96761,422],{"class":151},[92,96763,481],{"class":102},[92,96765,1644],{"class":5196},[92,96767,148],{"class":98},[92,96769,422],{"class":151},[92,96771,109],{"class":102},[63,96773,96775],{"id":96774},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[83,96777,96779],{"className":30360,"code":96778,"language":30362,"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,96780,96781,96786,96790,96795,96800,96805,96810,96814,96819,96824,96828],{"__ignoreMap":10},[92,96782,96783],{"class":94,"line":95},[92,96784,96785],{"class":161},"#logspace函数用于创建一个等比数列，格式如下：\n",[92,96787,96788],{"class":94,"line":11},[92,96789,95679],{"class":207},[92,96791,96792],{"class":94,"line":1158},[92,96793,96794],{"class":207},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[92,96796,96797],{"class":94,"line":1173},[92,96798,96799],{"class":207},"参数为：\n",[92,96801,96802],{"class":94,"line":1179},[92,96803,96804],{"class":207},"start:序列的起始位置为：base**start\n",[92,96806,96807],{"class":94,"line":1193},[92,96808,96809],{"class":207},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[92,96811,96812],{"class":94,"line":1199},[92,96813,96699],{"class":207},[92,96815,96816],{"class":94,"line":1290},[92,96817,96818],{"class":207},"endpoint：是否包含 stop 这个值，默认是 True\n",[92,96820,96821],{"class":94,"line":1296},[92,96822,96823],{"class":207},"base：对数的底数，默认是 10（常见对数）\n",[92,96825,96826],{"class":94,"line":1308},[92,96827,96714],{"class":207},[92,96829,96830],{"class":94,"line":1591},[92,96831,95679],{"class":207},[38,96833,96834],{},[1441,96835],{"alt":10,"src":96836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[38,96838,96839],{},"logspace()函数中的num参数也是可以不写num=的",[38,96841,96842],{},"endpoint是不可以省略的",[5106,96844,96845],{},"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":96847},[96848,96852,96857,96861,96865,96866],{"id":95237,"depth":11,"text":95238,"children":96849},[96850,96851],{"id":95241,"depth":1158,"text":95242},{"id":95314,"depth":1158,"text":95315},{"id":95346,"depth":11,"text":95347,"children":96853},[96854,96855,96856],{"id":95350,"depth":1158,"text":95351},{"id":95532,"depth":1158,"text":95533},{"id":95610,"depth":1158,"text":95611},{"id":95645,"depth":11,"text":95646,"children":96858},[96859,96860],{"id":95649,"depth":1158,"text":95650},{"id":95706,"depth":1158,"text":95707},{"id":95802,"depth":11,"text":95803,"children":96862},[96863,96864],{"id":95806,"depth":1158,"text":95807},{"id":95818,"depth":1158,"text":95819},{"id":95852,"depth":11,"text":95853},{"id":95889,"depth":11,"text":95890,"children":96867},[96868,96869,96870,96871,96872,96873,96874,96875],{"id":95893,"depth":1158,"text":95894},{"id":96118,"depth":1158,"text":96119},{"id":96125,"depth":1158,"text":96126},{"id":96334,"depth":1158,"text":96335},{"id":96354,"depth":1158,"text":96355},{"id":96490,"depth":1158,"text":96491},{"id":96659,"depth":1158,"text":96660},{"id":96774,"depth":1158,"text":96775},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95229,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96882,"title":96883,"body":96884,"description":23357,"extension":14,"meta":96977,"navigation":17,"path":96978,"seo":96979,"stem":96980,"__hash__":96981},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96885,"toc":96975},[96886,96889,96892,96895,96898,96901,96904,96907,96910,96913,96916,96919,96921,96924,96927,96932,96935,96938,96972],[29,96887,96883],{"id":96888},"_20魔法命令mprun",[38,96890,96891],{},"逐行分析数据内存的使用情况",[38,96893,96894],{},"语法格式：",[38,96896,96897],{},"%mprun -f 模块名.函数名 模块名.函数名()",[38,96899,96900],{},"分析结果列如下：",[38,96902,96903],{},"Line行号",[38,96905,96906],{},"Mem usage内存使用大小",[38,96908,96909],{},"increment内存增量",[38,96911,96912],{},"Line content代码内容",[38,96914,96915],{},"补充说明：",[38,96917,96918],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[38,96920,95184],{},[38,96922,96923],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[38,96925,96926],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[38,96928,96929],{},[1441,96930],{"alt":10,"src":96931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[38,96933,96934],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[38,96936,96937],{},"这时候需要重新加载模块",[83,96939,96941],{"className":30360,"code":96940,"language":30362,"meta":10,"style":10},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[89,96942,96943,96948,96955,96960],{"__ignoreMap":10},[92,96944,96945],{"class":94,"line":95},[92,96946,96947],{"class":161},"#重新加载模块\n",[92,96949,96950,96952],{"class":94,"line":11},[92,96951,30374],{"class":98},[92,96953,96954],{"class":102}," importlib\n",[92,96956,96957],{"class":94,"line":1158},[92,96958,96959],{"class":102},"importlib.reload(mprun_test)\n",[92,96961,96962,96964,96967,96969],{"class":94,"line":1173},[92,96963,431],{"class":98},[92,96965,96966],{"class":102},"mprun ",[92,96968,635],{"class":98},[92,96970,96971],{"class":102},"f mprun_test.fun_test mprun_test.fun_test()\n",[5106,96973,96974],{},"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":96976},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96883,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96983,"title":96984,"body":96985,"description":23357,"extension":14,"meta":97002,"navigation":17,"path":97003,"seo":97004,"stem":97005,"__hash__":97006},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96986,"toc":97000},[96987,96990,96995],[29,96988,96984],{"id":96989},"_3一维数组的索引和切片",[38,96991,96992],{},[1441,96993],{"alt":10,"src":96994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[38,96996,96997],{},[1441,96998],{"alt":10,"src":96999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":10,"searchDepth":11,"depth":11,"links":97001},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96984,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97008,"title":97009,"body":97010,"description":23357,"extension":14,"meta":97493,"navigation":17,"path":97494,"seo":97495,"stem":97496,"__hash__":97497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97011,"toc":97491},[97012,97015,97018,97023,97056,97059,97097,97100,97134,97137,97242,97245,97282,97285,97386,97389,97440,97443,97485,97488],[29,97013,97009],{"id":97014},"_4二维数组的索引与切片",[38,97016,97017],{},"①获取指定单个元素",[38,97019,97020],{},[1441,97021],{"alt":10,"src":97022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[83,97024,97026],{"className":30360,"code":97025,"language":30362,"meta":10,"style":10},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[89,97027,97028,97033,97038,97043],{"__ignoreMap":10},[92,97029,97030],{"class":94,"line":95},[92,97031,97032],{"class":161},"#获取元素9\n",[92,97034,97035],{"class":94,"line":11},[92,97036,97037],{"class":161},"#先获取所在行，再获取所在列\n",[92,97039,97040],{"class":94,"line":1158},[92,97041,97042],{"class":161},"#数组[行索引号，列索引号]\n",[92,97044,97045,97048,97050,97052,97054],{"class":94,"line":1173},[92,97046,97047],{"class":102},"a[",[92,97049,320],{"class":151},[92,97051,481],{"class":102},[92,97053,180],{"class":151},[92,97055,33228],{"class":102},[38,97057,97058],{},"②获取整行元素",[83,97060,97062],{"className":30360,"code":97061,"language":30362,"meta":10,"style":10},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[89,97063,97064,97069,97074,97082,97087],{"__ignoreMap":10},[92,97065,97066],{"class":94,"line":95},[92,97067,97068],{"class":161},"#获取整行 数组[行索引号]\n",[92,97070,97071],{"class":94,"line":11},[92,97072,97073],{"class":161},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[92,97075,97076,97078,97080],{"class":94,"line":1158},[92,97077,97047],{"class":102},[92,97079,180],{"class":151},[92,97081,33228],{"class":102},[92,97083,97084],{"class":94,"line":1173},[92,97085,97086],{"class":161},"#也可以负索引获取一行\n",[92,97088,97089,97091,97093,97095],{"class":94,"line":1179},[92,97090,97047],{"class":102},[92,97092,635],{"class":98},[92,97094,320],{"class":151},[92,97096,33228],{"class":102},[38,97098,97099],{},"③获取整列元素",[83,97101,97103],{"className":30360,"code":97102,"language":30362,"meta":10,"style":10},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[89,97104,97105,97110,97119,97124],{"__ignoreMap":10},[92,97106,97107],{"class":94,"line":95},[92,97108,97109],{"class":161},"#获取整列 数组名[:,列索引]\n",[92,97111,97112,97115,97117],{"class":94,"line":11},[92,97113,97114],{"class":102},"a[:,",[92,97116,180],{"class":151},[92,97118,33228],{"class":102},[92,97120,97121],{"class":94,"line":1158},[92,97122,97123],{"class":161},"#也可以负索引获取一列\n",[92,97125,97126,97128,97130,97132],{"class":94,"line":1173},[92,97127,97114],{"class":102},[92,97129,635],{"class":98},[92,97131,320],{"class":151},[92,97133,33228],{"class":102},[38,97135,97136],{},"④部分行部分列的元素",[83,97138,97140],{"className":30360,"code":97139,"language":30362,"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,97141,97142,97147,97157,97161,97165,97170,97175,97179,97191,97195,97199,97204,97209,97214,97219,97223,97228],{"__ignoreMap":10},[92,97143,97144],{"class":94,"line":95},[92,97145,97146],{"class":161},"#部分行部分列 数组名[行切片，列切片]\n",[92,97148,97149,97152,97154],{"class":94,"line":11},[92,97150,97151],{"class":102},"a[:",[92,97153,180],{"class":151},[92,97155,97156],{"class":102},",:]\n",[92,97158,97159],{"class":94,"line":1158},[92,97160,93545],{"class":161},[92,97162,97163],{"class":94,"line":1173},[92,97164,93909],{"class":207},[92,97166,97167],{"class":94,"line":1179},[92,97168,97169],{"class":207},"array([[ 1,  2,  3,  4,  5,  6],\n",[92,97171,97172],{"class":94,"line":1193},[92,97173,97174],{"class":207},"       [ 7,  8,  9, 10, 11, 12]])\n",[92,97176,97177],{"class":94,"line":1199},[92,97178,93909],{"class":207},[92,97180,97181,97183,97185,97187,97189],{"class":94,"line":1290},[92,97182,97114],{"class":102},[92,97184,320],{"class":151},[92,97186,962],{"class":102},[92,97188,396],{"class":151},[92,97190,33228],{"class":102},[92,97192,97193],{"class":94,"line":1296},[92,97194,93545],{"class":161},[92,97196,97197],{"class":94,"line":1308},[92,97198,93909],{"class":207},[92,97200,97201],{"class":94,"line":1591},[92,97202,97203],{"class":207},"array([[ 2,  3,  4],\n",[92,97205,97206],{"class":94,"line":1596},[92,97207,97208],{"class":207},"       [ 8,  9, 10],\n",[92,97210,97211],{"class":94,"line":1602},[92,97212,97213],{"class":207},"       [14, 15, 16],\n",[92,97215,97216],{"class":94,"line":1607},[92,97217,97218],{"class":207},"       [20, 21, 22]])\n",[92,97220,97221],{"class":94,"line":1621},[92,97222,93909],{"class":207},[92,97224,97225],{"class":94,"line":1626},[92,97226,97227],{"class":161},"#对列行同时进行切片，使用了step参数\n",[92,97229,97230,97233,97235,97238,97240],{"class":94,"line":1632},[92,97231,97232],{"class":102},"a[::",[92,97234,180],{"class":151},[92,97236,97237],{"class":102},",::",[92,97239,180],{"class":151},[92,97241,33228],{"class":102},[38,97243,97244],{},"⑤同时获取两个元素",[83,97246,97248],{"className":30360,"code":97247,"language":30362,"meta":10,"style":10},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[89,97249,97250,97255,97260],{"__ignoreMap":10},[92,97251,97252],{"class":94,"line":95},[92,97253,97254],{"class":161},"#同时获取第三行第二列，第四行第一列\n",[92,97256,97257],{"class":94,"line":11},[92,97258,97259],{"class":161},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[92,97261,97262,97265,97267,97269,97271,97273,97275,97277,97279],{"class":94,"line":1158},[92,97263,97264],{"class":102},"a[(",[92,97266,180],{"class":151},[92,97268,481],{"class":102},[92,97270,174],{"class":151},[92,97272,42229],{"class":102},[92,97274,320],{"class":151},[92,97276,481],{"class":102},[92,97278,294],{"class":151},[92,97280,97281],{"class":102},")]\n",[38,97283,97284],{},"⑥切片，对行进行反向获取",[83,97286,97288],{"className":30360,"code":97287,"language":30362,"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,97289,97290,97295,97305,97309,97313,97318,97323,97328,97333,97337,97342,97358,97362,97367,97372,97377,97382],{"__ignoreMap":10},[92,97291,97292],{"class":94,"line":95},[92,97293,97294],{"class":161},"#切片 对所有行进行反向获取\n",[92,97296,97297,97299,97301,97303],{"class":94,"line":11},[92,97298,97232],{"class":102},[92,97300,635],{"class":98},[92,97302,320],{"class":151},[92,97304,33228],{"class":102},[92,97306,97307],{"class":94,"line":1158},[92,97308,93545],{"class":161},[92,97310,97311],{"class":94,"line":1173},[92,97312,93909],{"class":207},[92,97314,97315],{"class":94,"line":1179},[92,97316,97317],{"class":207},"array([[19, 20, 21, 22, 23, 24],\n",[92,97319,97320],{"class":94,"line":1193},[92,97321,97322],{"class":207},"       [13, 14, 15, 16, 17, 18],\n",[92,97324,97325],{"class":94,"line":1199},[92,97326,97327],{"class":207},"       [ 7,  8,  9, 10, 11, 12],\n",[92,97329,97330],{"class":94,"line":1290},[92,97331,97332],{"class":207},"       [ 1,  2,  3,  4,  5,  6]])\n",[92,97334,97335],{"class":94,"line":1296},[92,97336,93909],{"class":207},[92,97338,97339],{"class":94,"line":1308},[92,97340,97341],{"class":161},"#对行列都进行反向切片获取\n",[92,97343,97344,97346,97348,97350,97352,97354,97356],{"class":94,"line":1591},[92,97345,97232],{"class":102},[92,97347,635],{"class":98},[92,97349,320],{"class":151},[92,97351,97237],{"class":102},[92,97353,635],{"class":98},[92,97355,320],{"class":151},[92,97357,33228],{"class":102},[92,97359,97360],{"class":94,"line":1596},[92,97361,93909],{"class":207},[92,97363,97364],{"class":94,"line":1602},[92,97365,97366],{"class":207},"array([[24, 23, 22, 21, 20, 19],\n",[92,97368,97369],{"class":94,"line":1607},[92,97370,97371],{"class":207},"       [18, 17, 16, 15, 14, 13],\n",[92,97373,97374],{"class":94,"line":1621},[92,97375,97376],{"class":207},"       [12, 11, 10,  9,  8,  7],\n",[92,97378,97379],{"class":94,"line":1626},[92,97380,97381],{"class":207},"       [ 6,  5,  4,  3,  2,  1]])\n",[92,97383,97384],{"class":94,"line":1632},[92,97385,93909],{"class":207},[38,97387,97388],{},"⑦修改元素",[83,97390,97392],{"className":30360,"code":97391,"language":30362,"meta":10,"style":10},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[89,97393,97394,97399,97417,97422],{"__ignoreMap":10},[92,97395,97396],{"class":94,"line":95},[92,97397,97398],{"class":161},"#获取前两行和前两列\n",[92,97400,97401,97404,97406,97408,97410,97413,97415],{"class":94,"line":11},[92,97402,97403],{"class":102},"sub_a",[92,97405,148],{"class":98},[92,97407,97151],{"class":102},[92,97409,180],{"class":151},[92,97411,97412],{"class":102},",:",[92,97414,180],{"class":151},[92,97416,33228],{"class":102},[92,97418,97419],{"class":94,"line":1158},[92,97420,97421],{"class":161},"#修改sub_a第一个元素的值\n",[92,97423,97424,97427,97429,97431,97433,97435,97437],{"class":94,"line":1173},[92,97425,97426],{"class":102},"sub_a[",[92,97428,294],{"class":151},[92,97430,481],{"class":102},[92,97432,294],{"class":151},[92,97434,1043],{"class":102},[92,97436,148],{"class":98},[92,97438,97439],{"class":151},"100\n",[38,97441,97442],{},"⑧数组复制copy()",[83,97444,97446],{"className":30360,"code":97445,"language":30362,"meta":10,"style":10},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[89,97447,97448,97453,97463,97468],{"__ignoreMap":10},[92,97449,97450],{"class":94,"line":95},[92,97451,97452],{"class":161},"#数组复制\n",[92,97454,97455,97458,97460],{"class":94,"line":11},[92,97456,97457],{"class":102},"copy_a",[92,97459,148],{"class":98},[92,97461,97462],{"class":102},"np.copy(sub_a)\n",[92,97464,97465],{"class":94,"line":1158},[92,97466,97467],{"class":161},"#修改copy_a后不影响原数组\n",[92,97469,97470,97473,97475,97477,97479,97481,97483],{"class":94,"line":1173},[92,97471,97472],{"class":102},"copy_a[",[92,97474,294],{"class":151},[92,97476,481],{"class":102},[92,97478,294],{"class":151},[92,97480,1043],{"class":102},[92,97482,148],{"class":98},[92,97484,97439],{"class":151},[38,97486,97487],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5106,97489,97490],{},"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":97492},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97009,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97499,"title":97500,"body":97501,"description":23357,"extension":14,"meta":97993,"navigation":17,"path":97994,"seo":97995,"stem":97996,"__hash__":97997},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97502,"toc":97985},[97503,97506,97510,97513,97516,97569,97572,97597,97600,97619,97639,97642,97658,97662,97708,97712,97754,97758,97761,97764,97767,97770,97773,97835,97895,97899,97902,97959,97963,97968,97977,97982],[29,97504,97500],{"id":97505},"_5改变数组的维度",[33,97507,97509],{"id":97508},"_51-使用reshape","5.1 使用reshape()",[38,97511,97512],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[38,97514,97515],{},"①一维数组转换为二维数组",[83,97517,97519],{"className":30360,"code":97518,"language":30362,"meta":10,"style":10},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[89,97520,97521,97537,97542,97547,97552],{"__ignoreMap":10},[92,97522,97523,97525,97527,97529,97531,97533,97535],{"class":94,"line":95},[92,97524,341],{"class":102},[92,97526,148],{"class":98},[92,97528,92983],{"class":102},[92,97530,320],{"class":151},[92,97532,481],{"class":102},[92,97534,626],{"class":151},[92,97536,109],{"class":102},[92,97538,97539],{"class":94,"line":11},[92,97540,97541],{"class":161},"#将一维数组进行转换\n",[92,97543,97544],{"class":94,"line":1158},[92,97545,97546],{"class":161},"#注意点：元素个数不可以变\n",[92,97548,97549],{"class":94,"line":1173},[92,97550,97551],{"class":161},"#转换维度要保持一致，不一致就异常！！！\n",[92,97553,97554,97556,97558,97561,97563,97565,97567],{"class":94,"line":1179},[92,97555,93287],{"class":102},[92,97557,148],{"class":98},[92,97559,97560],{"class":102},"a.reshape(",[92,97562,180],{"class":151},[92,97564,481],{"class":102},[92,97566,447],{"class":151},[92,97568,109],{"class":102},[38,97570,97571],{},"②一维数组转换为三维数组",[83,97573,97575],{"className":30360,"code":97574,"language":30362,"meta":10,"style":10},"aaa=a.reshape(2,3,2)\n",[89,97576,97577],{"__ignoreMap":10},[92,97578,97579,97581,97583,97585,97587,97589,97591,97593,97595],{"class":94,"line":95},[92,97580,95502],{"class":102},[92,97582,148],{"class":98},[92,97584,97560],{"class":102},[92,97586,180],{"class":151},[92,97588,481],{"class":102},[92,97590,174],{"class":151},[92,97592,481],{"class":102},[92,97594,180],{"class":151},[92,97596,109],{"class":102},[38,97598,97599],{},"③二维数组转化为一维数组",[83,97601,97603],{"className":30360,"code":97602,"language":30362,"meta":10,"style":10},"#知道元素个数：\naa.reshape(12)\n",[89,97604,97605,97610],{"__ignoreMap":10},[92,97606,97607],{"class":94,"line":95},[92,97608,97609],{"class":161},"#知道元素个数：\n",[92,97611,97612,97615,97617],{"class":94,"line":11},[92,97613,97614],{"class":102},"aa.reshape(",[92,97616,601],{"class":151},[92,97618,109],{"class":102},[83,97620,97622],{"className":30360,"code":97621,"language":30362,"meta":10,"style":10},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[89,97623,97624,97629],{"__ignoreMap":10},[92,97625,97626],{"class":94,"line":95},[92,97627,97628],{"class":161},"#不知道元素个数，参数传递-1\n",[92,97630,97631,97633,97635,97637],{"class":94,"line":11},[92,97632,97614],{"class":102},[92,97634,635],{"class":98},[92,97636,320],{"class":151},[92,97638,109],{"class":102},[38,97640,97641],{},"④三维数组转换为一维数组",[83,97643,97645],{"className":30360,"code":97644,"language":30362,"meta":10,"style":10},"aaa.reshape(-1)\n",[89,97646,97647],{"__ignoreMap":10},[92,97648,97649,97652,97654,97656],{"class":94,"line":95},[92,97650,97651],{"class":102},"aaa.reshape(",[92,97653,635],{"class":98},[92,97655,320],{"class":151},[92,97657,109],{"class":102},[33,97659,97661],{"id":97660},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[83,97663,97665],{"className":30360,"code":97664,"language":30362,"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,97666,97667,97694,97699,97703],{"__ignoreMap":10},[92,97668,97669,97671,97673,97675,97677,97679,97681,97683,97685,97687,97689,97691],{"class":94,"line":95},[92,97670,93287],{"class":102},[92,97672,148],{"class":98},[92,97674,92983],{"class":102},[92,97676,320],{"class":151},[92,97678,481],{"class":102},[92,97680,626],{"class":151},[92,97682,92988],{"class":102},[92,97684,180],{"class":151},[92,97686,481],{"class":102},[92,97688,447],{"class":151},[92,97690,532],{"class":102},[92,97692,97693],{"class":161},"#转换为2行6列的数组\n",[92,97695,97696],{"class":94,"line":11},[92,97697,97698],{"class":102},"aa.revel()\n",[92,97700,97701],{"class":94,"line":1158},[92,97702,93545],{"class":161},[92,97704,97705],{"class":94,"line":1173},[92,97706,97707],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,97709,97711],{"id":97710},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[83,97713,97715],{"className":30360,"code":97714,"language":30362,"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,97716,97717,97741,97746,97750],{"__ignoreMap":10},[92,97718,97719,97721,97723,97725,97727,97729,97731,97733,97735,97737,97739],{"class":94,"line":95},[92,97720,93287],{"class":102},[92,97722,148],{"class":98},[92,97724,92983],{"class":102},[92,97726,320],{"class":151},[92,97728,481],{"class":102},[92,97730,626],{"class":151},[92,97732,92988],{"class":102},[92,97734,180],{"class":151},[92,97736,481],{"class":102},[92,97738,447],{"class":151},[92,97740,109],{"class":102},[92,97742,97743],{"class":94,"line":11},[92,97744,97745],{"class":102},"aa.flatten()\n",[92,97747,97748],{"class":94,"line":1158},[92,97749,93545],{"class":161},[92,97751,97752],{"class":94,"line":1173},[92,97753,97707],{"class":161},[33,97755,97757],{"id":97756},"_54-使用resize","5.4 使用resize()",[38,97759,97760],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[38,97762,97763],{},"通过resize方法可以改变数组的维度",[38,97765,97766],{},"#resize修改数组维度",[38,97768,97769],{},"#以元组的形式指定形状",[38,97771,97772],{},"#改变的是原数组",[83,97774,97776],{"className":30360,"code":97775,"language":30362,"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,97777,97778,97794,97814,97827,97831],{"__ignoreMap":10},[92,97779,97780,97782,97784,97786,97788,97790,97792],{"class":94,"line":95},[92,97781,341],{"class":102},[92,97783,148],{"class":98},[92,97785,92983],{"class":102},[92,97787,320],{"class":151},[92,97789,481],{"class":102},[92,97791,626],{"class":151},[92,97793,109],{"class":102},[92,97795,97796,97799,97801,97803,97805,97807,97809,97811],{"class":94,"line":11},[92,97797,97798],{"class":102},"a.shape",[92,97800,148],{"class":98},[92,97802,103],{"class":102},[92,97804,180],{"class":151},[92,97806,481],{"class":102},[92,97808,447],{"class":151},[92,97810,532],{"class":102},[92,97812,97813],{"class":161},"#改变了原数组\n",[92,97815,97816,97818,97820,97823,97825],{"class":94,"line":1158},[92,97817,341],{"class":102},[92,97819,148],{"class":98},[92,97821,97822],{"class":102},"resize((",[92,97824,601],{"class":151},[92,97826,30479],{"class":102},[92,97828,97829],{"class":94,"line":1173},[92,97830,93545],{"class":161},[92,97832,97833],{"class":94,"line":1179},[92,97834,97707],{"class":161},[83,97836,97838],{"className":30360,"code":97837,"language":30362,"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,97839,97840,97853,97857,97861,97866,97871,97876,97881,97886,97891],{"__ignoreMap":10},[92,97841,97842,97845,97847,97849,97851],{"class":94,"line":95},[92,97843,97844],{"class":102},"a.resize((",[92,97846,447],{"class":151},[92,97848,481],{"class":102},[92,97850,180],{"class":151},[92,97852,30479],{"class":102},[92,97854,97855],{"class":94,"line":11},[92,97856,93545],{"class":161},[92,97858,97859],{"class":94,"line":1158},[92,97860,93909],{"class":207},[92,97862,97863],{"class":94,"line":1173},[92,97864,97865],{"class":207},"array([[ 1,  2],\n",[92,97867,97868],{"class":94,"line":1179},[92,97869,97870],{"class":207},"       [ 3,  4],\n",[92,97872,97873],{"class":94,"line":1193},[92,97874,97875],{"class":207},"       [ 5,  6],\n",[92,97877,97878],{"class":94,"line":1199},[92,97879,97880],{"class":207},"       [ 7,  8],\n",[92,97882,97883],{"class":94,"line":1290},[92,97884,97885],{"class":207},"       [ 9, 10],\n",[92,97887,97888],{"class":94,"line":1296},[92,97889,97890],{"class":207},"       [11, 12]])\n",[92,97892,97893],{"class":94,"line":1308},[92,97894,93909],{"class":207},[33,97896,97898],{"id":97897},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[38,97900,97901],{},"改变了原数组",[83,97903,97905],{"className":30360,"code":97904,"language":30362,"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,97906,97907,97923,97939,97943,97947,97951,97955],{"__ignoreMap":10},[92,97908,97909,97911,97913,97915,97917,97919,97921],{"class":94,"line":95},[92,97910,341],{"class":102},[92,97912,148],{"class":98},[92,97914,92983],{"class":102},[92,97916,320],{"class":151},[92,97918,481],{"class":102},[92,97920,626],{"class":151},[92,97922,109],{"class":102},[92,97924,97925,97927,97929,97931,97933,97935,97937],{"class":94,"line":11},[92,97926,97798],{"class":102},[92,97928,148],{"class":98},[92,97930,103],{"class":102},[92,97932,180],{"class":151},[92,97934,481],{"class":102},[92,97936,447],{"class":151},[92,97938,109],{"class":102},[92,97940,97941],{"class":94,"line":1158},[92,97942,93545],{"class":161},[92,97944,97945],{"class":94,"line":1173},[92,97946,93909],{"class":207},[92,97948,97949],{"class":94,"line":1179},[92,97950,97169],{"class":207},[92,97952,97953],{"class":94,"line":1193},[92,97954,97174],{"class":207},[92,97956,97957],{"class":94,"line":1199},[92,97958,93909],{"class":207},[33,97960,97962],{"id":97961},"_56-重要比较","5.6 重要比较：",[38,97964,97965],{},[1441,97966],{"alt":10,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[38,97969,97970,97971,97973,97974,97976],{},"口诀：NumPy 函数要么用 ",[89,97972,95944],{},"，要么用 ",[89,97975,31478],{},"，创建结构用 shape，造数据用 size",[38,97978,97979],{},[1441,97980],{"alt":10,"src":97981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5106,97983,97984],{},"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":97986},[97987,97988,97989,97990,97991,97992],{"id":97508,"depth":11,"text":97509},{"id":97660,"depth":11,"text":97661},{"id":97710,"depth":11,"text":97711},{"id":97756,"depth":11,"text":97757},{"id":97897,"depth":11,"text":97898},{"id":97961,"depth":11,"text":97962},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97500,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97999,"title":98000,"body":98001,"description":23357,"extension":14,"meta":99073,"navigation":17,"path":99074,"seo":99075,"stem":99076,"__hash__":99077},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98002,"toc":99067},[98003,98006,98010,98013,98016,98019,98084,98087,98127,98130,98212,98215,98220,98242,98244,98249,98254,98257,98260,98415,98418,98620,98624,98627,98630,98698,98700,98705,98708,98711,98791,98795,98798,98800,98873,98875,98880,98882,98962,98966,98969,98972,98975,98978,98981,98984,99064],[29,98004,98000],{"id":98005},"_6数组的拼接",[33,98007,98009],{"id":98008},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[38,98011,98012],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[38,98014,98015],{},"函数内部传两个数列构成的数列或者元组",[38,98017,98018],{},"①一维数组的拼接",[83,98020,98022],{"className":30360,"code":98021,"language":30362,"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,98023,98024,98044,98064,98069,98074,98079],{"__ignoreMap":10},[92,98025,98026,98028,98030,98032,98034,98036,98038,98040,98042],{"class":94,"line":95},[92,98027,341],{"class":102},[92,98029,148],{"class":98},[92,98031,93005],{"class":102},[92,98033,320],{"class":151},[92,98035,481],{"class":102},[92,98037,180],{"class":151},[92,98039,481],{"class":102},[92,98041,174],{"class":151},[92,98043,4636],{"class":102},[92,98045,98046,98048,98050,98052,98054,98056,98058,98060,98062],{"class":94,"line":11},[92,98047,366],{"class":102},[92,98049,148],{"class":98},[92,98051,93005],{"class":102},[92,98053,396],{"class":151},[92,98055,481],{"class":102},[92,98057,422],{"class":151},[92,98059,481],{"class":102},[92,98061,447],{"class":151},[92,98063,4636],{"class":102},[92,98065,98066],{"class":94,"line":1158},[92,98067,98068],{"class":161},"#调用concatenate进行数组拼接\n",[92,98070,98071],{"class":94,"line":1173},[92,98072,98073],{"class":102},"np.concatenate((a,b))\n",[92,98075,98076],{"class":94,"line":1179},[92,98077,98078],{"class":161},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[92,98080,98081],{"class":94,"line":1193},[92,98082,98083],{"class":161},"#np.concatenate([a,b])\n",[38,98085,98086],{},"②一维多个数组拼接",[83,98088,98090],{"className":30360,"code":98089,"language":30362,"meta":10,"style":10},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[89,98091,98092,98097,98117,98122],{"__ignoreMap":10},[92,98093,98094],{"class":94,"line":95},[92,98095,98096],{"class":161},"#也可以多个数组进行拼接\n",[92,98098,98099,98101,98103,98105,98107,98109,98111,98113,98115],{"class":94,"line":11},[92,98100,391],{"class":102},[92,98102,148],{"class":98},[92,98104,93005],{"class":102},[92,98106,549],{"class":151},[92,98108,481],{"class":102},[92,98110,575],{"class":151},[92,98112,481],{"class":102},[92,98114,626],{"class":151},[92,98116,4636],{"class":102},[92,98118,98119],{"class":94,"line":1158},[92,98120,98121],{"class":102},"c\n",[92,98123,98124],{"class":94,"line":1173},[92,98125,98126],{"class":102},"np.concatenate((a,b,c))\n",[38,98128,98129],{},"③二维数组拼接",[83,98131,98133],{"className":30360,"code":98132,"language":30362,"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,98134,98135,98140,98164,98189,98194,98199],{"__ignoreMap":10},[92,98136,98137],{"class":94,"line":95},[92,98138,98139],{"class":161},"#二维数组使用concatenate进行拼接\n",[92,98141,98142,98144,98146,98148,98150,98152,98154,98156,98158,98160,98162],{"class":94,"line":11},[92,98143,93287],{"class":102},[92,98145,148],{"class":98},[92,98147,92983],{"class":102},[92,98149,320],{"class":151},[92,98151,481],{"class":102},[92,98153,626],{"class":151},[92,98155,92988],{"class":102},[92,98157,174],{"class":151},[92,98159,481],{"class":102},[92,98161,396],{"class":151},[92,98163,109],{"class":102},[92,98165,98166,98169,98171,98173,98175,98177,98179,98181,98183,98185,98187],{"class":94,"line":1158},[92,98167,98168],{"class":102},"bb",[92,98170,148],{"class":98},[92,98172,92983],{"class":102},[92,98174,440],{"class":151},[92,98176,481],{"class":102},[92,98178,745],{"class":151},[92,98180,92988],{"class":102},[92,98182,174],{"class":151},[92,98184,481],{"class":102},[92,98186,396],{"class":151},[92,98188,109],{"class":102},[92,98190,98191],{"class":94,"line":1173},[92,98192,98193],{"class":161},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[92,98195,98196],{"class":94,"line":1179},[92,98197,98198],{"class":161},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[92,98200,98201,98204,98206,98208,98210],{"class":94,"line":1193},[92,98202,98203],{"class":102},"np.concatenate((aa,bb),",[92,98205,47496],{"class":5196},[92,98207,148],{"class":98},[92,98209,294],{"class":151},[92,98211,109],{"class":102},[38,98213,98214],{},"结果：",[38,98216,98217],{},[1441,98218],{"alt":10,"src":98219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[83,98221,98223],{"className":30360,"code":98222,"language":30362,"meta":10,"style":10},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[89,98224,98225,98230],{"__ignoreMap":10},[92,98226,98227],{"class":94,"line":95},[92,98228,98229],{"class":161},"#指定axis为1进行拼接\n",[92,98231,98232,98234,98236,98238,98240],{"class":94,"line":11},[92,98233,98203],{"class":102},[92,98235,47496],{"class":5196},[92,98237,148],{"class":98},[92,98239,320],{"class":151},[92,98241,109],{"class":102},[38,98243,98214],{},[38,98245,98246],{},[1441,98247],{"alt":10,"src":98248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[38,98250,98251],{},[252,98252,98253],{},"二维数组总结：0竖着方向，1横着方向",[38,98255,98256],{},"④三维数组拼接",[38,98258,98259],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[83,98261,98263],{"className":30360,"code":98262,"language":30362,"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,98264,98265,98270,98298,98328,98333,98350,98355,98360,98365,98382,98387,98392,98397,98410],{"__ignoreMap":10},[92,98266,98267],{"class":94,"line":95},[92,98268,98269],{"class":161},"#两个三行六列\n",[92,98271,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294,98296],{"class":94,"line":11},[92,98273,95502],{"class":102},[92,98275,148],{"class":98},[92,98277,92983],{"class":102},[92,98279,320],{"class":151},[92,98281,481],{"class":102},[92,98283,428],{"class":151},[92,98285,92988],{"class":102},[92,98287,180],{"class":151},[92,98289,481],{"class":102},[92,98291,174],{"class":151},[92,98293,481],{"class":102},[92,98295,447],{"class":151},[92,98297,109],{"class":102},[92,98299,98300,98303,98305,98307,98309,98311,98314,98316,98318,98320,98322,98324,98326],{"class":94,"line":1158},[92,98301,98302],{"class":102},"bbb",[92,98304,148],{"class":98},[92,98306,92983],{"class":102},[92,98308,440],{"class":151},[92,98310,481],{"class":102},[92,98312,98313],{"class":151},"137",[92,98315,92988],{"class":102},[92,98317,180],{"class":151},[92,98319,481],{"class":102},[92,98321,174],{"class":151},[92,98323,481],{"class":102},[92,98325,447],{"class":151},[92,98327,109],{"class":102},[92,98329,98330],{"class":94,"line":1173},[92,98331,98332],{"class":161},"#axis=0\n",[92,98334,98335,98337,98339,98342,98344,98346,98348],{"class":94,"line":1179},[92,98336,798],{"class":102},[92,98338,148],{"class":98},[92,98340,98341],{"class":102},"np.concatenate((aaa,bbb),",[92,98343,47496],{"class":5196},[92,98345,148],{"class":98},[92,98347,294],{"class":151},[92,98349,109],{"class":102},[92,98351,98352],{"class":94,"line":1193},[92,98353,98354],{"class":102},"s.shape\n",[92,98356,98357],{"class":94,"line":1199},[92,98358,98359],{"class":161},"#输出：(4,3,6)\n",[92,98361,98362],{"class":94,"line":1290},[92,98363,98364],{"class":161},"#axis=1\n",[92,98366,98367,98370,98372,98374,98376,98378,98380],{"class":94,"line":1296},[92,98368,98369],{"class":102},"ss",[92,98371,148],{"class":98},[92,98373,98341],{"class":102},[92,98375,47496],{"class":5196},[92,98377,148],{"class":98},[92,98379,320],{"class":151},[92,98381,109],{"class":102},[92,98383,98384],{"class":94,"line":1308},[92,98385,98386],{"class":102},"ss.shape\n",[92,98388,98389],{"class":94,"line":1591},[92,98390,98391],{"class":161},"#输出：(2,6,6)\n",[92,98393,98394],{"class":94,"line":1596},[92,98395,98396],{"class":161},"#axis=2\n",[92,98398,98399,98401,98403,98405,98407],{"class":94,"line":1602},[92,98400,98341],{"class":102},[92,98402,47496],{"class":5196},[92,98404,148],{"class":98},[92,98406,180],{"class":151},[92,98408,98409],{"class":102},").shape\n",[92,98411,98412],{"class":94,"line":1607},[92,98413,98414],{"class":161},"#输出：（2，3，12）\n",[38,98416,98417],{},"⑤四维数组拼接",[83,98419,98421],{"className":30360,"code":98420,"language":30362,"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,98422,98423,98427,98455,98483,98508,98534,98538,98551,98556,98560,98572,98577,98581,98593,98598,98603,98615],{"__ignoreMap":10},[92,98424,98425],{"class":94,"line":95},[92,98426,98269],{"class":161},[92,98428,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":94,"line":11},[92,98430,95502],{"class":102},[92,98432,148],{"class":98},[92,98434,92983],{"class":102},[92,98436,320],{"class":151},[92,98438,481],{"class":102},[92,98440,428],{"class":151},[92,98442,92988],{"class":102},[92,98444,180],{"class":151},[92,98446,481],{"class":102},[92,98448,174],{"class":151},[92,98450,481],{"class":102},[92,98452,447],{"class":151},[92,98454,109],{"class":102},[92,98456,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481],{"class":94,"line":1158},[92,98458,98302],{"class":102},[92,98460,148],{"class":98},[92,98462,92983],{"class":102},[92,98464,440],{"class":151},[92,98466,481],{"class":102},[92,98468,98313],{"class":151},[92,98470,92988],{"class":102},[92,98472,180],{"class":151},[92,98474,481],{"class":102},[92,98476,174],{"class":151},[92,98478,481],{"class":102},[92,98480,447],{"class":151},[92,98482,109],{"class":102},[92,98484,98485,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506],{"class":94,"line":1173},[92,98486,98487],{"class":102},"aaaa",[92,98489,148],{"class":98},[92,98491,97651],{"class":102},[92,98493,180],{"class":151},[92,98495,481],{"class":102},[92,98497,174],{"class":151},[92,98499,481],{"class":102},[92,98501,174],{"class":151},[92,98503,481],{"class":102},[92,98505,180],{"class":151},[92,98507,109],{"class":102},[92,98509,98510,98513,98515,98518,98520,98522,98524,98526,98528,98530,98532],{"class":94,"line":1179},[92,98511,98512],{"class":102},"bbbb",[92,98514,148],{"class":98},[92,98516,98517],{"class":102},"bbb.reshape(",[92,98519,180],{"class":151},[92,98521,481],{"class":102},[92,98523,174],{"class":151},[92,98525,481],{"class":102},[92,98527,174],{"class":151},[92,98529,481],{"class":102},[92,98531,180],{"class":151},[92,98533,109],{"class":102},[92,98535,98536],{"class":94,"line":1193},[92,98537,98332],{"class":161},[92,98539,98540,98543,98545,98547,98549],{"class":94,"line":1199},[92,98541,98542],{"class":102},"np.concatenate((aaaa,bbbb),",[92,98544,47496],{"class":5196},[92,98546,148],{"class":98},[92,98548,294],{"class":151},[92,98550,98409],{"class":102},[92,98552,98553],{"class":94,"line":1290},[92,98554,98555],{"class":161},"#结果：（4，3，3，2）\n",[92,98557,98558],{"class":94,"line":1296},[92,98559,98364],{"class":161},[92,98561,98562,98564,98566,98568,98570],{"class":94,"line":1308},[92,98563,98542],{"class":102},[92,98565,47496],{"class":5196},[92,98567,148],{"class":98},[92,98569,320],{"class":151},[92,98571,98409],{"class":102},[92,98573,98574],{"class":94,"line":1591},[92,98575,98576],{"class":161},"#结果：（2，6，3，2）\n",[92,98578,98579],{"class":94,"line":1596},[92,98580,98396],{"class":161},[92,98582,98583,98585,98587,98589,98591],{"class":94,"line":1602},[92,98584,98542],{"class":102},[92,98586,47496],{"class":5196},[92,98588,148],{"class":98},[92,98590,180],{"class":151},[92,98592,98409],{"class":102},[92,98594,98595],{"class":94,"line":1607},[92,98596,98597],{"class":161},"#结果：（2，3，6，2）\n",[92,98599,98600],{"class":94,"line":1621},[92,98601,98602],{"class":161},"#axis=3\n",[92,98604,98605,98607,98609,98611,98613],{"class":94,"line":1626},[92,98606,98542],{"class":102},[92,98608,47496],{"class":5196},[92,98610,148],{"class":98},[92,98612,174],{"class":151},[92,98614,98409],{"class":102},[92,98616,98617],{"class":94,"line":1632},[92,98618,98619],{"class":161},"#结果：（2，3，3，4）\n",[33,98621,98623],{"id":98622},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[38,98625,98626],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[38,98628,98629],{},"①二维数组",[83,98631,98633],{"className":30360,"code":98632,"language":30362,"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,98634,98635,98659,98683,98688,98693],{"__ignoreMap":10},[92,98636,98637,98639,98641,98643,98645,98647,98649,98651,98653,98655,98657],{"class":94,"line":95},[92,98638,93287],{"class":102},[92,98640,148],{"class":98},[92,98642,92983],{"class":102},[92,98644,320],{"class":151},[92,98646,481],{"class":102},[92,98648,626],{"class":151},[92,98650,92988],{"class":102},[92,98652,174],{"class":151},[92,98654,481],{"class":102},[92,98656,396],{"class":151},[92,98658,109],{"class":102},[92,98660,98661,98663,98665,98667,98669,98671,98673,98675,98677,98679,98681],{"class":94,"line":11},[92,98662,98168],{"class":102},[92,98664,148],{"class":98},[92,98666,92983],{"class":102},[92,98668,440],{"class":151},[92,98670,481],{"class":102},[92,98672,745],{"class":151},[92,98674,92988],{"class":102},[92,98676,174],{"class":151},[92,98678,481],{"class":102},[92,98680,396],{"class":151},[92,98682,109],{"class":102},[92,98684,98685],{"class":94,"line":1158},[92,98686,98687],{"class":102},"np.hstack((aa,bb))\n",[92,98689,98690],{"class":94,"line":1173},[92,98691,98692],{"class":161},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[92,98694,98695],{"class":94,"line":1179},[92,98696,98697],{"class":161},"#np.hstack([aa,bb])\n",[38,98699,98214],{},[38,98701,98702],{},[1441,98703],{"alt":10,"src":98704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[38,98706,98707],{},"等效于concatenate()函数中axis=1时的情况",[38,98709,98710],{},"②三维数组",[83,98712,98714],{"className":30360,"code":98713,"language":30362,"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,98715,98716,98720,98748,98776,98781,98786],{"__ignoreMap":10},[92,98717,98718],{"class":94,"line":95},[92,98719,98269],{"class":161},[92,98721,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744,98746],{"class":94,"line":11},[92,98723,95502],{"class":102},[92,98725,148],{"class":98},[92,98727,92983],{"class":102},[92,98729,320],{"class":151},[92,98731,481],{"class":102},[92,98733,428],{"class":151},[92,98735,92988],{"class":102},[92,98737,180],{"class":151},[92,98739,481],{"class":102},[92,98741,174],{"class":151},[92,98743,481],{"class":102},[92,98745,447],{"class":151},[92,98747,109],{"class":102},[92,98749,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774],{"class":94,"line":1158},[92,98751,98302],{"class":102},[92,98753,148],{"class":98},[92,98755,92983],{"class":102},[92,98757,440],{"class":151},[92,98759,481],{"class":102},[92,98761,98313],{"class":151},[92,98763,92988],{"class":102},[92,98765,180],{"class":151},[92,98767,481],{"class":102},[92,98769,174],{"class":151},[92,98771,481],{"class":102},[92,98773,447],{"class":151},[92,98775,109],{"class":102},[92,98777,98778],{"class":94,"line":1173},[92,98779,98780],{"class":161},"#使用hstack\n",[92,98782,98783],{"class":94,"line":1179},[92,98784,98785],{"class":102},"np.hstack((aaa,bbb)).shape\n",[92,98787,98788],{"class":94,"line":1193},[92,98789,98790],{"class":161},"#输出：（2，6，6）\n",[33,98792,98794],{"id":98793},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[38,98796,98797],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[38,98799,98629],{},[83,98801,98803],{"className":30360,"code":98802,"language":30362,"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,98804,98805,98829,98853,98858,98863,98868],{"__ignoreMap":10},[92,98806,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825,98827],{"class":94,"line":95},[92,98808,93287],{"class":102},[92,98810,148],{"class":98},[92,98812,92983],{"class":102},[92,98814,320],{"class":151},[92,98816,481],{"class":102},[92,98818,626],{"class":151},[92,98820,92988],{"class":102},[92,98822,174],{"class":151},[92,98824,481],{"class":102},[92,98826,396],{"class":151},[92,98828,109],{"class":102},[92,98830,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851],{"class":94,"line":11},[92,98832,98168],{"class":102},[92,98834,148],{"class":98},[92,98836,92983],{"class":102},[92,98838,440],{"class":151},[92,98840,481],{"class":102},[92,98842,745],{"class":151},[92,98844,92988],{"class":102},[92,98846,174],{"class":151},[92,98848,481],{"class":102},[92,98850,396],{"class":151},[92,98852,109],{"class":102},[92,98854,98855],{"class":94,"line":1158},[92,98856,98857],{"class":161},"#vstack 垂直方向进行堆叠\n",[92,98859,98860],{"class":94,"line":1173},[92,98861,98862],{"class":102},"np.vstack((aa,bb))\n",[92,98864,98865],{"class":94,"line":1179},[92,98866,98867],{"class":161},"#与hstack传的参数类似，等价于：\n",[92,98869,98870],{"class":94,"line":1193},[92,98871,98872],{"class":102},"np.vstack([aa,bb])\n",[38,98874,98214],{},[38,98876,98877],{},[1441,98878],{"alt":10,"src":98879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[38,98881,98710],{},[83,98883,98885],{"className":30360,"code":98884,"language":30362,"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,98886,98887,98891,98919,98947,98952,98957],{"__ignoreMap":10},[92,98888,98889],{"class":94,"line":95},[92,98890,98269],{"class":161},[92,98892,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917],{"class":94,"line":11},[92,98894,95502],{"class":102},[92,98896,148],{"class":98},[92,98898,92983],{"class":102},[92,98900,320],{"class":151},[92,98902,481],{"class":102},[92,98904,428],{"class":151},[92,98906,92988],{"class":102},[92,98908,180],{"class":151},[92,98910,481],{"class":102},[92,98912,174],{"class":151},[92,98914,481],{"class":102},[92,98916,447],{"class":151},[92,98918,109],{"class":102},[92,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945],{"class":94,"line":1158},[92,98922,98302],{"class":102},[92,98924,148],{"class":98},[92,98926,92983],{"class":102},[92,98928,440],{"class":151},[92,98930,481],{"class":102},[92,98932,98313],{"class":151},[92,98934,92988],{"class":102},[92,98936,180],{"class":151},[92,98938,481],{"class":102},[92,98940,174],{"class":151},[92,98942,481],{"class":102},[92,98944,447],{"class":151},[92,98946,109],{"class":102},[92,98948,98949],{"class":94,"line":1173},[92,98950,98951],{"class":161},"#使用vstack\n",[92,98953,98954],{"class":94,"line":1179},[92,98955,98956],{"class":102},"np.vstack((aaa,bbb)).shape\n",[92,98958,98959],{"class":94,"line":1193},[92,98960,98961],{"class":161},"#输出：（4，3，6）\n",[33,98963,98965],{"id":98964},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[38,98967,98968],{},"该方法是三维数组特有的方法",[38,98970,98971],{},"也就是说",[38,98973,98974],{},"一维数组拼接方法用：concatenate()",[38,98976,98977],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[38,98979,98980],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[38,98982,98983],{},"四维数组及多维数组只能用concatenate进行拼接",[83,98985,98987],{"className":30360,"code":98986,"language":30362,"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,98988,98989,98993,99021,99049,99054,99059],{"__ignoreMap":10},[92,98990,98991],{"class":94,"line":95},[92,98992,98269],{"class":161},[92,98994,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019],{"class":94,"line":11},[92,98996,95502],{"class":102},[92,98998,148],{"class":98},[92,99000,92983],{"class":102},[92,99002,320],{"class":151},[92,99004,481],{"class":102},[92,99006,428],{"class":151},[92,99008,92988],{"class":102},[92,99010,180],{"class":151},[92,99012,481],{"class":102},[92,99014,174],{"class":151},[92,99016,481],{"class":102},[92,99018,447],{"class":151},[92,99020,109],{"class":102},[92,99022,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047],{"class":94,"line":1158},[92,99024,98302],{"class":102},[92,99026,148],{"class":98},[92,99028,92983],{"class":102},[92,99030,440],{"class":151},[92,99032,481],{"class":102},[92,99034,98313],{"class":151},[92,99036,92988],{"class":102},[92,99038,180],{"class":151},[92,99040,481],{"class":102},[92,99042,174],{"class":151},[92,99044,481],{"class":102},[92,99046,447],{"class":151},[92,99048,109],{"class":102},[92,99050,99051],{"class":94,"line":1173},[92,99052,99053],{"class":161},"#使用dstack\n",[92,99055,99056],{"class":94,"line":1179},[92,99057,99058],{"class":102},"np.dstack((aaa,bbb)).shape\n",[92,99060,99061],{"class":94,"line":1193},[92,99062,99063],{"class":161},"#结果：（2，3，12）\n",[5106,99065,99066],{},"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":99068},[99069,99070,99071,99072],{"id":98008,"depth":11,"text":98009},{"id":98622,"depth":11,"text":98623},{"id":98793,"depth":11,"text":98794},{"id":98964,"depth":11,"text":98965},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98000,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99079,"title":99080,"body":99081,"description":23357,"extension":14,"meta":99356,"navigation":17,"path":99357,"seo":99358,"stem":99359,"__hash__":99360},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99082,"toc":99354},[99083,99086,99089,99183,99186,99189,99192,99195,99198,99201,99204,99207,99351],[29,99084,99080],{"id":99085},"_7数组转置",[38,99087,99088],{},"使用transpose()函数",[83,99090,99092],{"className":30360,"code":99091,"language":30362,"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,99093,99094,99104,99128,99133,99138,99143,99148,99156,99160,99164,99169,99174,99179],{"__ignoreMap":10},[92,99095,99096,99098,99100,99102],{"class":94,"line":95},[92,99097,30374],{"class":98},[92,99099,31362],{"class":102},[92,99101,31365],{"class":98},[92,99103,31368],{"class":102},[92,99105,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124,99126],{"class":94,"line":11},[92,99107,341],{"class":102},[92,99109,148],{"class":98},[92,99111,31699],{"class":102},[92,99113,320],{"class":151},[92,99115,481],{"class":102},[92,99117,626],{"class":151},[92,99119,92988],{"class":102},[92,99121,396],{"class":151},[92,99123,481],{"class":102},[92,99125,174],{"class":151},[92,99127,109],{"class":102},[92,99129,99130],{"class":94,"line":1158},[92,99131,99132],{"class":161},"#二维数组转置\n",[92,99134,99135],{"class":94,"line":1173},[92,99136,99137],{"class":161},"#调用transpose()函数\n",[92,99139,99140],{"class":94,"line":1179},[92,99141,99142],{"class":102},"a.transpose()\n",[92,99144,99145],{"class":94,"line":1193},[92,99146,99147],{"class":161},"#对于二维数组也可以采用.T来实现\n",[92,99149,99150,99153],{"class":94,"line":1199},[92,99151,99152],{"class":102},"a.T",[92,99154,99155],{"class":161},"#与上述代码一样\n",[92,99157,99158],{"class":94,"line":1290},[92,99159,93545],{"class":161},[92,99161,99162],{"class":94,"line":1296},[92,99163,93909],{"class":207},[92,99165,99166],{"class":94,"line":1308},[92,99167,99168],{"class":207},"array([[ 1,  4,  7, 10],\n",[92,99170,99171],{"class":94,"line":1591},[92,99172,99173],{"class":207},"       [ 2,  5,  8, 11],\n",[92,99175,99176],{"class":94,"line":1596},[92,99177,99178],{"class":207},"       [ 3,  6,  9, 12]])\n",[92,99180,99181],{"class":94,"line":1602},[92,99182,93909],{"class":207},[38,99184,99185],{},"也可以使用np.transpose()的形式",[38,99187,99188],{},"#多维数组进行转置 np.transpose()",[38,99190,99191],{},"#对二维数组也可以使用np.transpose()进行转置",[38,99193,99194],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[38,99196,99197],{},"第二个参数，维度可以理解为用axis中的数来理解",[38,99199,99200],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[38,99202,99203],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[38,99205,99206],{},"四维及以上的数组也是一样的道理",[83,99208,99210],{"className":30360,"code":99209,"language":30362,"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,99211,99212,99240,99245,99250,99255,99273,99278,99310,99315,99320,99325,99346],{"__ignoreMap":10},[92,99213,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236,99238],{"class":94,"line":95},[92,99215,923],{"class":102},[92,99217,148],{"class":98},[92,99219,92983],{"class":102},[92,99221,320],{"class":151},[92,99223,481],{"class":102},[92,99225,428],{"class":151},[92,99227,92988],{"class":102},[92,99229,174],{"class":151},[92,99231,481],{"class":102},[92,99233,447],{"class":151},[92,99235,481],{"class":102},[92,99237,180],{"class":151},[92,99239,109],{"class":102},[92,99241,99242],{"class":94,"line":11},[92,99243,99244],{"class":102},"x.shape\n",[92,99246,99247],{"class":94,"line":1158},[92,99248,99249],{"class":161},"#结果：（3,6,2）\n",[92,99251,99252],{"class":94,"line":1173},[92,99253,99254],{"class":161},"#使用np.transpose()进行转置 变为(2,6,3)\n",[92,99256,99257,99260,99262,99264,99266,99268,99270],{"class":94,"line":1179},[92,99258,99259],{"class":102},"np.transpose(x,(",[92,99261,180],{"class":151},[92,99263,481],{"class":102},[92,99265,320],{"class":151},[92,99267,481],{"class":102},[92,99269,294],{"class":151},[92,99271,99272],{"class":102},")).shape\n",[92,99274,99275],{"class":94,"line":1193},[92,99276,99277],{"class":161},"#结果：(2,6,3)\n",[92,99279,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":94,"line":1199},[92,99281,98487],{"class":102},[92,99283,148],{"class":98},[92,99285,92983],{"class":102},[92,99287,320],{"class":151},[92,99289,481],{"class":102},[92,99291,428],{"class":151},[92,99293,92988],{"class":102},[92,99295,174],{"class":151},[92,99297,481],{"class":102},[92,99299,180],{"class":151},[92,99301,481],{"class":102},[92,99303,320],{"class":151},[92,99305,481],{"class":102},[92,99307,447],{"class":151},[92,99309,109],{"class":102},[92,99311,99312],{"class":94,"line":1290},[92,99313,99314],{"class":102},"aaaa.shape\n",[92,99316,99317],{"class":94,"line":1296},[92,99318,99319],{"class":161},"#结果：（3，2，1，6）\n",[92,99321,99322],{"class":94,"line":1308},[92,99323,99324],{"class":161},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[92,99326,99327,99330,99332,99334,99336,99338,99340,99342,99344],{"class":94,"line":1591},[92,99328,99329],{"class":102},"np.transpose(aaaa,(",[92,99331,320],{"class":151},[92,99333,481],{"class":102},[92,99335,180],{"class":151},[92,99337,481],{"class":102},[92,99339,294],{"class":151},[92,99341,481],{"class":102},[92,99343,174],{"class":151},[92,99345,99272],{"class":102},[92,99347,99348],{"class":94,"line":1596},[92,99349,99350],{"class":161},"#结果：(2,1,3,6)\n",[5106,99352,99353],{},"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":99355},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99080,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99362,"title":99363,"body":99364,"description":23357,"extension":14,"meta":100098,"navigation":17,"path":100099,"seo":100100,"stem":100101,"__hash__":100102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99365,"toc":100096},[99366,99369,99372,99375,99378,99381,99384,99387,99390,99499,99502,99505,100093],[29,99367,99363],{"id":99368},"_8数组分割",[38,99370,99371],{},"split分割",[38,99373,99374],{},"numpy.split(ary,indics_or_sections,axis)",[38,99376,99377],{},"解释：",[38,99379,99380],{},"ary:被分割的数组",[38,99382,99383],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[38,99385,99386],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[38,99388,99389],{},"①一维数组的分割",[83,99391,99393],{"className":30360,"code":99392,"language":30362,"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,99394,99395,99411,99416,99425,99429,99434,99442,99446,99451,99456,99469,99473,99478,99490,99494],{"__ignoreMap":10},[92,99396,99397,99399,99401,99403,99405,99407,99409],{"class":94,"line":95},[92,99398,341],{"class":102},[92,99400,148],{"class":98},[92,99402,92983],{"class":102},[92,99404,320],{"class":151},[92,99406,481],{"class":102},[92,99408,523],{"class":151},[92,99410,109],{"class":102},[92,99412,99413],{"class":94,"line":11},[92,99414,99415],{"class":161},"#如果传入整数，必须能够平分，否则会报错\n",[92,99417,99418,99421,99423],{"class":94,"line":1158},[92,99419,99420],{"class":102},"np.split(a,",[92,99422,180],{"class":151},[92,99424,109],{"class":102},[92,99426,99427],{"class":94,"line":1173},[92,99428,93545],{"class":161},[92,99430,99431],{"class":94,"line":1179},[92,99432,99433],{"class":161},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[92,99435,99436,99438,99440],{"class":94,"line":1193},[92,99437,99420],{"class":102},[92,99439,396],{"class":151},[92,99441,109],{"class":102},[92,99443,99444],{"class":94,"line":1199},[92,99445,93545],{"class":161},[92,99447,99448],{"class":94,"line":1290},[92,99449,99450],{"class":161},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[92,99452,99453],{"class":94,"line":1296},[92,99454,99455],{"class":161},"#传入数组\n",[92,99457,99458,99461,99463,99465,99467],{"class":94,"line":1308},[92,99459,99460],{"class":102},"np.split(a,[",[92,99462,174],{"class":151},[92,99464,481],{"class":102},[92,99466,422],{"class":151},[92,99468,4636],{"class":102},[92,99470,99471],{"class":94,"line":1591},[92,99472,93545],{"class":161},[92,99474,99475],{"class":94,"line":1596},[92,99476,99477],{"class":161},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[92,99479,99480,99482,99484,99486,99488],{"class":94,"line":1602},[92,99481,99460],{"class":102},[92,99483,422],{"class":151},[92,99485,481],{"class":102},[92,99487,472],{"class":151},[92,99489,4636],{"class":102},[92,99491,99492],{"class":94,"line":1607},[92,99493,93545],{"class":161},[92,99495,99496],{"class":94,"line":1621},[92,99497,99498],{"class":161},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[38,99500,99501],{},"②二维数组的分割",[38,99503,99504],{},"使用split()",[83,99506,99508],{"className":30360,"code":99507,"language":30362,"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,99509,99510,99515,99539,99544,99553,99557,99561,99566,99571,99576,99581,99586,99591,99596,99600,99613,99617,99621,99625,99629,99633,99638,99643,99648,99652,99657,99673,99677,99681,99686,99691,99696,99701,99706,99711,99716,99721,99726,99731,99736,99741,99746,99751,99756,99761,99766,99771,99775,99779,99799,99803,99807,99812,99817,99822,99827,99832,99837,99842,99847,99852,99857,99862,99867,99872,99877,99882,99887,99892,99897,99901,99906,99915,99919,99923,99927,99931,99935,99939,99943,99947,99951,99960,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100057,100061,100065,100069,100073,100077,100081,100085,100089],{"__ignoreMap":10},[92,99511,99512],{"class":94,"line":95},[92,99513,99514],{"class":161},"#二维数组分割\n",[92,99516,99517,99519,99521,99523,99525,99527,99529,99531,99533,99535,99537],{"class":94,"line":11},[92,99518,93287],{"class":102},[92,99520,148],{"class":98},[92,99522,92983],{"class":102},[92,99524,320],{"class":151},[92,99526,481],{"class":102},[92,99528,428],{"class":151},[92,99530,92988],{"class":102},[92,99532,447],{"class":151},[92,99534,481],{"class":102},[92,99536,447],{"class":151},[92,99538,109],{"class":102},[92,99540,99541],{"class":94,"line":1158},[92,99542,99543],{"class":161},"#默认axis=0  传入整数平均分,按行来的\n",[92,99545,99546,99549,99551],{"class":94,"line":1173},[92,99547,99548],{"class":102},"np.split(aa,",[92,99550,174],{"class":151},[92,99552,109],{"class":102},[92,99554,99555],{"class":94,"line":1179},[92,99556,95745],{"class":161},[92,99558,99559],{"class":94,"line":1193},[92,99560,93909],{"class":207},[92,99562,99563],{"class":94,"line":1199},[92,99564,99565],{"class":207},"[array([[ 1,  2,  3,  4,  5,  6],\n",[92,99567,99568],{"class":94,"line":1290},[92,99569,99570],{"class":207},"        [ 7,  8,  9, 10, 11, 12]]),\n",[92,99572,99573],{"class":94,"line":1296},[92,99574,99575],{"class":207}," array([[13, 14, 15, 16, 17, 18],\n",[92,99577,99578],{"class":94,"line":1308},[92,99579,99580],{"class":207},"        [19, 20, 21, 22, 23, 24]]),\n",[92,99582,99583],{"class":94,"line":1591},[92,99584,99585],{"class":207}," array([[25, 26, 27, 28, 29, 30],\n",[92,99587,99588],{"class":94,"line":1596},[92,99589,99590],{"class":207},"        [31, 32, 33, 34, 35, 36]])]\n",[92,99592,99593],{"class":94,"line":1602},[92,99594,99595],{"class":207}," '''\n",[92,99597,99598],{"class":94,"line":1607},[92,99599,99455],{"class":161},[92,99601,99602,99605,99607,99609,99611],{"class":94,"line":1621},[92,99603,99604],{"class":102},"np.split(aa,[",[92,99606,180],{"class":151},[92,99608,481],{"class":102},[92,99610,422],{"class":151},[92,99612,4636],{"class":102},[92,99614,99615],{"class":94,"line":1626},[92,99616,95745],{"class":161},[92,99618,99619],{"class":94,"line":1632},[92,99620,93909],{"class":207},[92,99622,99623],{"class":94,"line":1653},[92,99624,99565],{"class":207},[92,99626,99627],{"class":94,"line":1658},[92,99628,99570],{"class":207},[92,99630,99631],{"class":94,"line":1672},[92,99632,99575],{"class":207},[92,99634,99635],{"class":94,"line":1677},[92,99636,99637],{"class":207},"        [19, 20, 21, 22, 23, 24],\n",[92,99639,99640],{"class":94,"line":1706},[92,99641,99642],{"class":207},"        [25, 26, 27, 28, 29, 30]]),\n",[92,99644,99645],{"class":94,"line":1711},[92,99646,99647],{"class":207}," array([[31, 32, 33, 34, 35, 36]])]\n",[92,99649,99650],{"class":94,"line":1728},[92,99651,93909],{"class":207},[92,99653,99654],{"class":94,"line":1733},[92,99655,99656],{"class":161},"#axis=1 按照列来分\n",[92,99658,99659,99661,99663,99665,99667,99669,99671],{"class":94,"line":1738},[92,99660,99548],{"class":102},[92,99662,174],{"class":151},[92,99664,481],{"class":102},[92,99666,47496],{"class":5196},[92,99668,148],{"class":98},[92,99670,320],{"class":151},[92,99672,109],{"class":102},[92,99674,99675],{"class":94,"line":1743},[92,99676,95745],{"class":161},[92,99678,99679],{"class":94,"line":1757},[92,99680,93909],{"class":207},[92,99682,99683],{"class":94,"line":1762},[92,99684,99685],{"class":207},"[array([[ 1,  2],\n",[92,99687,99688],{"class":94,"line":2556},[92,99689,99690],{"class":207},"        [ 7,  8],\n",[92,99692,99693],{"class":94,"line":2570},[92,99694,99695],{"class":207},"        [13, 14],\n",[92,99697,99698],{"class":94,"line":2578},[92,99699,99700],{"class":207},"        [19, 20],\n",[92,99702,99703],{"class":94,"line":2583},[92,99704,99705],{"class":207},"        [25, 26],\n",[92,99707,99708],{"class":94,"line":2589},[92,99709,99710],{"class":207},"        [31, 32]]),\n",[92,99712,99713],{"class":94,"line":2595},[92,99714,99715],{"class":207}," array([[ 3,  4],\n",[92,99717,99718],{"class":94,"line":2600},[92,99719,99720],{"class":207},"        [ 9, 10],\n",[92,99722,99723],{"class":94,"line":7928},[92,99724,99725],{"class":207},"        [15, 16],\n",[92,99727,99728],{"class":94,"line":7952},[92,99729,99730],{"class":207},"        [21, 22],\n",[92,99732,99733],{"class":94,"line":7957},[92,99734,99735],{"class":207},"        [27, 28],\n",[92,99737,99738],{"class":94,"line":7963},[92,99739,99740],{"class":207},"        [33, 34]]),\n",[92,99742,99743],{"class":94,"line":7990},[92,99744,99745],{"class":207}," array([[ 5,  6],\n",[92,99747,99748],{"class":94,"line":7995},[92,99749,99750],{"class":207},"        [11, 12],\n",[92,99752,99753],{"class":94,"line":8001},[92,99754,99755],{"class":207},"        [17, 18],\n",[92,99757,99758],{"class":94,"line":8013},[92,99759,99760],{"class":207},"        [23, 24],\n",[92,99762,99763],{"class":94,"line":8025},[92,99764,99765],{"class":207},"        [29, 30],\n",[92,99767,99768],{"class":94,"line":8037},[92,99769,99770],{"class":207},"        [35, 36]])]\n",[92,99772,99773],{"class":94,"line":9696},[92,99774,99595],{"class":207},[92,99776,99777],{"class":94,"line":9721},[92,99778,99455],{"class":161},[92,99780,99781,99783,99785,99787,99789,99791,99793,99795,99797],{"class":94,"line":9744},[92,99782,99604],{"class":102},[92,99784,320],{"class":151},[92,99786,481],{"class":102},[92,99788,180],{"class":151},[92,99790,41591],{"class":102},[92,99792,47496],{"class":5196},[92,99794,148],{"class":98},[92,99796,320],{"class":151},[92,99798,109],{"class":102},[92,99800,99801],{"class":94,"line":9768},[92,99802,93545],{"class":161},[92,99804,99805],{"class":94,"line":9773},[92,99806,93909],{"class":207},[92,99808,99809],{"class":94,"line":9778},[92,99810,99811],{"class":207},"[array([[ 1],\n",[92,99813,99814],{"class":94,"line":9783},[92,99815,99816],{"class":207},"        [ 7],\n",[92,99818,99819],{"class":94,"line":9792},[92,99820,99821],{"class":207},"        [13],\n",[92,99823,99824],{"class":94,"line":9797},[92,99825,99826],{"class":207},"        [19],\n",[92,99828,99829],{"class":94,"line":9803},[92,99830,99831],{"class":207},"        [25],\n",[92,99833,99834],{"class":94,"line":9824},[92,99835,99836],{"class":207},"        [31]]),\n",[92,99838,99839],{"class":94,"line":9830},[92,99840,99841],{"class":207}," array([[ 2],\n",[92,99843,99844],{"class":94,"line":9844},[92,99845,99846],{"class":207},"        [ 8],\n",[92,99848,99849],{"class":94,"line":9850},[92,99850,99851],{"class":207},"        [14],\n",[92,99853,99854],{"class":94,"line":9877},[92,99855,99856],{"class":207},"        [20],\n",[92,99858,99859],{"class":94,"line":9886},[92,99860,99861],{"class":207},"        [26],\n",[92,99863,99864],{"class":94,"line":9892},[92,99865,99866],{"class":207},"        [32]]),\n",[92,99868,99869],{"class":94,"line":9900},[92,99870,99871],{"class":207}," array([[ 3,  4,  5,  6],\n",[92,99873,99874],{"class":94,"line":9905},[92,99875,99876],{"class":207},"        [ 9, 10, 11, 12],\n",[92,99878,99879],{"class":94,"line":16584},[92,99880,99881],{"class":207},"        [15, 16, 17, 18],\n",[92,99883,99884],{"class":94,"line":16590},[92,99885,99886],{"class":207},"        [21, 22, 23, 24],\n",[92,99888,99889],{"class":94,"line":16613},[92,99890,99891],{"class":207},"        [27, 28, 29, 30],\n",[92,99893,99894],{"class":94,"line":16619},[92,99895,99896],{"class":207},"        [33, 34, 35, 36]])]\n",[92,99898,99899],{"class":94,"line":16642},[92,99900,93909],{"class":207},[92,99902,99903],{"class":94,"line":16656},[92,99904,99905],{"class":161},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[92,99907,99908,99911,99913],{"class":94,"line":16676},[92,99909,99910],{"class":102},"np.vsplit(aa,",[92,99912,174],{"class":151},[92,99914,109],{"class":102},[92,99916,99917],{"class":94,"line":16682},[92,99918,93545],{"class":161},[92,99920,99921],{"class":94,"line":16693},[92,99922,93909],{"class":207},[92,99924,99925],{"class":94,"line":16716},[92,99926,99565],{"class":207},[92,99928,99929],{"class":94,"line":16738},[92,99930,99570],{"class":207},[92,99932,99933],{"class":94,"line":16743},[92,99934,99575],{"class":207},[92,99936,99937],{"class":94,"line":16749},[92,99938,99580],{"class":207},[92,99940,99941],{"class":94,"line":16763},[92,99942,99585],{"class":207},[92,99944,99945],{"class":94,"line":16776},[92,99946,99590],{"class":207},[92,99948,99949],{"class":94,"line":16781},[92,99950,93909],{"class":207},[92,99952,99953,99956,99958],{"class":94,"line":16795},[92,99954,99955],{"class":102},"np.hsplit(aa,",[92,99957,174],{"class":151},[92,99959,109],{"class":102},[92,99961,99962],{"class":94,"line":16800},[92,99963,93545],{"class":161},[92,99965,99966],{"class":94,"line":16806},[92,99967,93909],{"class":207},[92,99969,99970],{"class":94,"line":16811},[92,99971,99685],{"class":207},[92,99973,99974],{"class":94,"line":16825},[92,99975,99690],{"class":207},[92,99977,99978],{"class":94,"line":16830},[92,99979,99695],{"class":207},[92,99981,99982],{"class":94,"line":16835},[92,99983,99700],{"class":207},[92,99985,99986],{"class":94,"line":16849},[92,99987,99705],{"class":207},[92,99989,99990],{"class":94,"line":16861},[92,99991,99710],{"class":207},[92,99993,99994],{"class":94,"line":16866},[92,99995,99715],{"class":207},[92,99997,99998],{"class":94,"line":16879},[92,99999,99720],{"class":207},[92,100001,100002],{"class":94,"line":16884},[92,100003,99725],{"class":207},[92,100005,100006],{"class":94,"line":16889},[92,100007,99730],{"class":207},[92,100009,100010],{"class":94,"line":16894},[92,100011,99735],{"class":207},[92,100013,100014],{"class":94,"line":16907},[92,100015,99740],{"class":207},[92,100017,100018],{"class":94,"line":16912},[92,100019,99745],{"class":207},[92,100021,100022],{"class":94,"line":32615},[92,100023,99750],{"class":207},[92,100025,100026],{"class":94,"line":32621},[92,100027,99755],{"class":207},[92,100029,100030],{"class":94,"line":32627},[92,100031,99760],{"class":207},[92,100033,100034],{"class":94,"line":32633},[92,100035,99765],{"class":207},[92,100037,100038],{"class":94,"line":32639},[92,100039,99770],{"class":207},[92,100041,100042],{"class":94,"line":32650},[92,100043,93909],{"class":207},[92,100045,100046,100049,100051,100053,100055],{"class":94,"line":32656},[92,100047,100048],{"class":102},"np.vsplit(aa,[",[92,100050,180],{"class":151},[92,100052,481],{"class":102},[92,100054,422],{"class":151},[92,100056,4636],{"class":102},[92,100058,100059],{"class":94,"line":32676},[92,100060,93545],{"class":161},[92,100062,100063],{"class":94,"line":32682},[92,100064,93909],{"class":207},[92,100066,100067],{"class":94,"line":32693},[92,100068,99565],{"class":207},[92,100070,100071],{"class":94,"line":32699},[92,100072,99570],{"class":207},[92,100074,100075],{"class":94,"line":32705},[92,100076,99575],{"class":207},[92,100078,100079],{"class":94,"line":32711},[92,100080,99637],{"class":207},[92,100082,100083],{"class":94,"line":32717},[92,100084,99642],{"class":207},[92,100086,100087],{"class":94,"line":32723},[92,100088,99647],{"class":207},[92,100090,100091],{"class":94,"line":32729},[92,100092,99595],{"class":207},[5106,100094,100095],{},"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":100097},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99363,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100104,"title":100105,"body":100106,"description":23357,"extension":14,"meta":100600,"navigation":17,"path":100601,"seo":100602,"stem":100603,"__hash__":100604},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100107,"toc":100591},[100108,100111,100114,100139,100143,100202,100254,100258,100260,100296,100350,100352,100390,100461,100465,100470,100474,100477,100510,100513,100517,100520,100523,100526,100529,100534,100538,100541,100544,100547,100550,100555,100559,100564,100567,100588],[29,100109,100105],{"id":100110},"_9数学函数",[38,100112,100113],{},"补充回顾：python的列表推导式",[83,100115,100117],{"className":30360,"code":100116,"language":30362,"meta":10,"style":10},"[1\u002Fi for i in a]\n",[89,100118,100119],{"__ignoreMap":10},[92,100120,100121,100123,100125,100127,100130,100132,100134,100136],{"class":94,"line":95},[92,100122,993],{"class":102},[92,100124,320],{"class":151},[92,100126,687],{"class":98},[92,100128,100129],{"class":102},"i ",[92,100131,3004],{"class":98},[92,100133,9418],{"class":102},[92,100135,26025],{"class":98},[92,100137,100138],{"class":102}," a]\n",[33,100140,100142],{"id":100141},"_91-求倒数","9.1 求倒数",[83,100144,100146],{"className":30360,"code":100145,"language":30362,"meta":10,"style":10},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[89,100147,100148,100153,100181,100193],{"__ignoreMap":10},[92,100149,100150],{"class":94,"line":95},[92,100151,100152],{"class":161},"#数组求倒数\n",[92,100154,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179],{"class":94,"line":11},[92,100156,341],{"class":102},[92,100158,148],{"class":98},[92,100160,993],{"class":102},[92,100162,320],{"class":151},[92,100164,481],{"class":102},[92,100166,180],{"class":151},[92,100168,481],{"class":102},[92,100170,174],{"class":151},[92,100172,481],{"class":102},[92,100174,396],{"class":151},[92,100176,481],{"class":102},[92,100178,422],{"class":151},[92,100180,33228],{"class":102},[92,100182,100183,100185,100187,100190],{"class":94,"line":1158},[92,100184,366],{"class":102},[92,100186,148],{"class":98},[92,100188,100189],{"class":102},"np.array(a)",[92,100191,100192],{"class":161},"#将列表转换为数组\n",[92,100194,100195,100197,100199],{"class":94,"line":1173},[92,100196,320],{"class":151},[92,100198,687],{"class":98},[92,100200,100201],{"class":102},"b\n",[83,100203,100205],{"className":30360,"code":100204,"language":30362,"meta":10,"style":10},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[89,100206,100207,100235,100244,100249],{"__ignoreMap":10},[92,100208,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233],{"class":94,"line":95},[92,100210,341],{"class":102},[92,100212,148],{"class":98},[92,100214,993],{"class":102},[92,100216,320],{"class":151},[92,100218,481],{"class":102},[92,100220,180],{"class":151},[92,100222,481],{"class":102},[92,100224,174],{"class":151},[92,100226,481],{"class":102},[92,100228,396],{"class":151},[92,100230,481],{"class":102},[92,100232,422],{"class":151},[92,100234,33228],{"class":102},[92,100236,100237,100239,100241],{"class":94,"line":11},[92,100238,366],{"class":102},[92,100240,148],{"class":98},[92,100242,100243],{"class":102},"np.array(a)\n",[92,100245,100246],{"class":94,"line":1158},[92,100247,100248],{"class":161},"#调用numpy中的函数reciprocal()\n",[92,100250,100251],{"class":94,"line":1173},[92,100252,100253],{"class":102},"np.reciprocal(b)\n",[33,100255,100257],{"id":100256},"_92-求平方","9.2 求平方",[38,100259,94511],{},[83,100261,100263],{"className":30360,"code":100262,"language":30362,"meta":10,"style":10},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[89,100264,100265,100270,100275,100291],{"__ignoreMap":10},[92,100266,100267],{"class":94,"line":95},[92,100268,100269],{"class":161},"#square()，求平方\n",[92,100271,100272],{"class":94,"line":11},[92,100273,100274],{"class":161},"#一维数组\n",[92,100276,100277,100279,100281,100283,100285,100287,100289],{"class":94,"line":1158},[92,100278,341],{"class":102},[92,100280,148],{"class":98},[92,100282,92983],{"class":102},[92,100284,320],{"class":151},[92,100286,481],{"class":102},[92,100288,549],{"class":151},[92,100290,109],{"class":102},[92,100292,100293],{"class":94,"line":1173},[92,100294,100295],{"class":102},"np.square(a)\n",[83,100297,100299],{"className":30360,"code":100298,"language":30362,"meta":10,"style":10},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[89,100300,100301,100306,100311,100332],{"__ignoreMap":10},[92,100302,100303],{"class":94,"line":95},[92,100304,100305],{"class":161},"#或者通过循环遍历的形式来计算\n",[92,100307,100308],{"class":94,"line":11},[92,100309,100310],{"class":161},"#这是一个列表\n",[92,100312,100313,100316,100318,100320,100322,100324,100326,100329],{"class":94,"line":1158},[92,100314,100315],{"class":102},"[i",[92,100317,558],{"class":98},[92,100319,100129],{"class":102},[92,100321,3004],{"class":98},[92,100323,9418],{"class":102},[92,100325,26025],{"class":98},[92,100327,100328],{"class":102}," a]",[92,100330,100331],{"class":161},"#这个求完之后在数列当中\n",[92,100333,100334,100337,100339,100341,100343,100345,100347],{"class":94,"line":1173},[92,100335,100336],{"class":102},"np.array([i",[92,100338,558],{"class":98},[92,100340,100129],{"class":102},[92,100342,3004],{"class":98},[92,100344,9418],{"class":102},[92,100346,26025],{"class":98},[92,100348,100349],{"class":102}," a])\n",[38,100351,93272],{},[83,100353,100355],{"className":30360,"code":100354,"language":30362,"meta":10,"style":10},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[89,100356,100357,100361,100385],{"__ignoreMap":10},[92,100358,100359],{"class":94,"line":95},[92,100360,93282],{"class":161},[92,100362,100363,100365,100367,100369,100371,100373,100375,100377,100379,100381,100383],{"class":94,"line":11},[92,100364,93287],{"class":102},[92,100366,148],{"class":98},[92,100368,92983],{"class":102},[92,100370,320],{"class":151},[92,100372,481],{"class":102},[92,100374,626],{"class":151},[92,100376,92988],{"class":102},[92,100378,396],{"class":151},[92,100380,481],{"class":102},[92,100382,174],{"class":151},[92,100384,109],{"class":102},[92,100386,100387],{"class":94,"line":1158},[92,100388,100389],{"class":102},"np.square(aa)\n",[83,100391,100393],{"className":30360,"code":100392,"language":30362,"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,100394,100395,100400,100409,100425,100441,100456],{"__ignoreMap":10},[92,100396,100397],{"class":94,"line":95},[92,100398,100399],{"class":161},"#传统的方式\n",[92,100401,100402,100404,100406],{"class":94,"line":11},[92,100403,98168],{"class":102},[92,100405,148],{"class":98},[92,100407,100408],{"class":102},"np.empty_like(aa)\n",[92,100410,100411,100413,100415,100417,100419,100421,100423],{"class":94,"line":1158},[92,100412,3004],{"class":98},[92,100414,9418],{"class":102},[92,100416,26025],{"class":98},[92,100418,32425],{"class":151},[92,100420,103],{"class":102},[92,100422,396],{"class":151},[92,100424,30768],{"class":102},[92,100426,100427,100429,100431,100433,100435,100437,100439],{"class":94,"line":1173},[92,100428,3180],{"class":98},[92,100430,9480],{"class":102},[92,100432,26025],{"class":98},[92,100434,32425],{"class":151},[92,100436,103],{"class":102},[92,100438,174],{"class":151},[92,100440,30768],{"class":102},[92,100442,100443,100446,100448,100451,100453],{"class":94,"line":1179},[92,100444,100445],{"class":102},"        bb[i,j]",[92,100447,148],{"class":98},[92,100449,100450],{"class":102},"aa[i,j]",[92,100452,558],{"class":98},[92,100454,100455],{"class":102},"aa[i,j]\n",[92,100457,100458],{"class":94,"line":1193},[92,100459,100460],{"class":102},"bb\n",[33,100462,100464],{"id":100463},"_93-求各元素的符号","9.3 求各元素的符号",[38,100466,100467],{},[1441,100468],{"alt":10,"src":100469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[33,100471,100473],{"id":100472},"_94-modf函数","9.4 modf函数",[38,100475,100476],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[83,100478,100480],{"className":30360,"code":100479,"language":30362,"meta":10,"style":10},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[89,100481,100482,100505],{"__ignoreMap":10},[92,100483,100484,100486,100488,100490,100492,100494,100496,100498,100500,100503],{"class":94,"line":95},[92,100485,341],{"class":102},[92,100487,148],{"class":98},[92,100489,92983],{"class":102},[92,100491,635],{"class":98},[92,100493,549],{"class":151},[92,100495,481],{"class":102},[92,100497,549],{"class":151},[92,100499,481],{"class":102},[92,100501,100502],{"class":151},"0.3",[92,100504,109],{"class":102},[92,100506,100507],{"class":94,"line":11},[92,100508,100509],{"class":102},"np.modf(a)\n",[38,100511,100512],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[33,100514,100516],{"id":100515},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[38,100518,100519],{},"np.cell()",[38,100521,100522],{},"np.floor()",[38,100524,100525],{},"np.rint()",[38,100527,100528],{},"对各元素分别向上取整、向下取整、四舍五入",[38,100530,100531],{},[1441,100532],{"alt":10,"src":100533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[33,100535,100537],{"id":100536},"_96-around函数","9.6 around()函数",[38,100539,100540],{},"around()函数也可以实现对数的小数位数进行操作",[38,100542,100543],{},"其中的参数：",[38,100545,100546],{},"1.要传的数组",[38,100548,100549],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[38,100551,100552],{},[1441,100553],{"alt":10,"src":100554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[33,100556,100558],{"id":100557},"_97-三角函数","9.7 三角函数",[38,100560,100561],{},[1441,100562],{"alt":10,"src":100563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[38,100565,100566],{},"引入图像模块非常重要",[83,100568,100570],{"className":30360,"code":100569,"language":30362,"meta":10,"style":10},"from matplotlib import pyplot as plt\n",[89,100571,100572],{"__ignoreMap":10},[92,100573,100574,100576,100579,100581,100584,100586],{"class":94,"line":95},[92,100575,30719],{"class":98},[92,100577,100578],{"class":102}," matplotlib ",[92,100580,30374],{"class":98},[92,100582,100583],{"class":102}," pyplot ",[92,100585,31365],{"class":98},[92,100587,31419],{"class":102},[5106,100589,100590],{},"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":100592},[100593,100594,100595,100596,100597,100598,100599],{"id":100141,"depth":11,"text":100142},{"id":100256,"depth":11,"text":100257},{"id":100463,"depth":11,"text":100464},{"id":100472,"depth":11,"text":100473},{"id":100515,"depth":11,"text":100516},{"id":100536,"depth":11,"text":100537},{"id":100557,"depth":11,"text":100558},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100105,"description":23357},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100606,"title":100607,"body":100608,"description":23357,"extension":14,"meta":100612,"navigation":17,"path":100613,"seo":100614,"stem":100615,"__hash__":100616},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100609,"toc":100610},[],{"title":10,"searchDepth":11,"depth":11,"links":100611},[],{"category":50402},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100607,"description":23357},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100618,"title":100619,"body":100620,"description":10,"extension":14,"meta":102628,"navigation":17,"path":102629,"seo":102630,"stem":102631,"__hash__":102632},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100621,"toc":102604},[100622,100625,100629,100632,100635,100641,100644,100667,100670,100704,100707,100748,100752,100755,100848,100851,100895,100898,100915,100918,100932,100935,100938,100983,100986,101023,101027,101030,101036,101041,101061,101065,101068,101134,101137,101155,101159,101162,101191,101201,101207,101211,101214,101220,101231,101235,101238,101268,101271,101551,101554,101557,101568,101571,101574,101596,101603,101606,101624,101627,101630,101644,101652,101655,101681,101687,101690,101693,101703,101715,101735,101744,101764,101774,101798,101811,101825,101830,101871,101888,101913,101925,101945,101951,101996,102015,102032,102045,102061,102068,102080,102089,102124,102145,102170,102183,102207,102222,102247,102250,102271,102280,102283,102294,102298,102301,102307,102319,102326,102330,102333,102345,102348,102362,102365,102375,102385,102388,102428,102431,102435,102441,102444,102458,102462,102465,102498,102502,102505,102528,102536,102539,102545,102551,102554,102557,102585,102589,102592,102598,102601],[29,100623,100619],{"id":100624},"_1环境安装与第一个-mujoco-程序",[33,100626,100628],{"id":100627},"_1目标说明","1.目标说明",[38,100630,100631],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[38,100633,100634],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[83,100636,100639],{"className":100637,"code":100638,"language":5167,"meta":10},[5165],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[89,100640,100638],{"__ignoreMap":10},[38,100642,100643],{},"需要掌握:",[46,100645,100646,100649,100652,100657,100662],{},[49,100647,100648],{},"Fedora 44 下 MuJoCo 的系统依赖",[49,100650,100651],{},"Python 虚拟环境创建",[49,100653,100654],{},[89,100655,100656],{},"mujoco.MjModel",[49,100658,100659],{},[89,100660,100661],{},"mujoco.MjData",[49,100663,100664],{},[89,100665,100666],{},"mujoco.mj_step(model, data)",[38,100668,100669],{},"MuJoCo 中最重要的两个对象:",[240,100671,100672,100682],{},[243,100673,100674],{},[246,100675,100676,100679],{},[249,100677,100678],{"align":23717},"对象",[249,100680,100681],{"align":23717},"含义",[287,100683,100684,100694],{},[246,100685,100686,100691],{},[292,100687,100688],{"align":23717},[89,100689,100690],{},"MjModel",[292,100692,100693],{"align":23717},"模型结构，来自 XML，基本不随时间变化",[246,100695,100696,100701],{},[292,100697,100698],{"align":23717},[89,100699,100700],{},"MjData",[292,100702,100703],{"align":23717},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[38,100705,100706],{},"可以先用一个类比理解：",[240,100708,100709,100719],{},[243,100710,100711],{},[246,100712,100713,100716],{},[249,100714,100715],{"align":23717},"类比",[249,100717,100718],{"align":23717},"MuJoCo 对象",[287,100720,100721,100730,100739],{},[246,100722,100723,100726],{},[292,100724,100725],{"align":23717},"游戏地图和角色配置",[292,100727,100728],{"align":23717},[89,100729,100690],{},[246,100731,100732,100735],{},[292,100733,100734],{"align":23717},"游戏运行到当前帧的状态",[292,100736,100737],{"align":23717},[89,100738,100700],{},[246,100740,100741,100744],{},[292,100742,100743],{"align":23717},"前进一帧",[292,100745,100746],{"align":23717},[89,100747,100666],{},[33,100749,100751],{"id":100750},"_2环境与依赖安装","2.环境与依赖安装",[38,100753,100754],{},"Fedora 44 系统依赖:",[83,100756,100758],{"className":23803,"code":100757,"language":23805,"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,100759,100760,100772,100785,100798,100808,100818,100837],{"__ignoreMap":10},[92,100761,100762,100764,100766,100768,100770],{"class":94,"line":95},[92,100763,24558],{"class":1942},[92,100765,26297],{"class":207},[92,100767,23815],{"class":207},[92,100769,26382],{"class":151},[92,100771,24660],{"class":151},[92,100773,100774,100777,100780,100783],{"class":94,"line":11},[92,100775,100776],{"class":207},"  python3",[92,100778,100779],{"class":207}," python3-pip",[92,100781,100782],{"class":207}," python3-virtualenv",[92,100784,24660],{"class":151},[92,100786,100787,100790,100793,100796],{"class":94,"line":1158},[92,100788,100789],{"class":207},"  mesa-libGL",[92,100791,100792],{"class":207}," mesa-libGLU",[92,100794,100795],{"class":207}," mesa-dri-drivers",[92,100797,24660],{"class":151},[92,100799,100800,100803,100806],{"class":94,"line":1173},[92,100801,100802],{"class":207},"  libglvnd-glx",[92,100804,100805],{"class":207}," libglvnd-opengl",[92,100807,24660],{"class":151},[92,100809,100810,100813,100816],{"class":94,"line":1179},[92,100811,100812],{"class":207},"  glfw",[92,100814,100815],{"class":207}," glfw-devel",[92,100817,24660],{"class":151},[92,100819,100820,100823,100826,100829,100832,100835],{"class":94,"line":1193},[92,100821,100822],{"class":207},"  libX11",[92,100824,100825],{"class":207}," libXcursor",[92,100827,100828],{"class":207}," libXi",[92,100830,100831],{"class":207}," libXinerama",[92,100833,100834],{"class":207}," libXrandr",[92,100836,24660],{"class":151},[92,100838,100839,100842,100845],{"class":94,"line":1199},[92,100840,100841],{"class":207},"  gcc",[92,100843,100844],{"class":207}," gcc-c++",[92,100846,100847],{"class":207}," make\n",[38,100849,100850],{},"创建 Python 环境:",[83,100852,100854],{"className":23803,"code":100853,"language":23805,"meta":10,"style":10},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[89,100855,100856,100870,100878],{"__ignoreMap":10},[92,100857,100858,100861,100864,100867],{"class":94,"line":95},[92,100859,100860],{"class":1942},"python3",[92,100862,100863],{"class":151}," -m",[92,100865,100866],{"class":207}," venv",[92,100868,100869],{"class":207}," .venv\n",[92,100871,100872,100875],{"class":94,"line":11},[92,100873,100874],{"class":151},"source",[92,100876,100877],{"class":207}," .venv\u002Fbin\u002Factivate\n",[92,100879,100880,100882,100884,100887,100889,100892],{"class":94,"line":1158},[92,100881,30362],{"class":1942},[92,100883,100863],{"class":151},[92,100885,100886],{"class":207}," pip",[92,100888,23815],{"class":207},[92,100890,100891],{"class":151}," --upgrade",[92,100893,100894],{"class":207}," pip\n",[38,100896,100897],{},"pip 安装:",[83,100899,100901],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy\n",[89,100902,100903],{"__ignoreMap":10},[92,100904,100905,100907,100909,100912],{"class":94,"line":95},[92,100906,23812],{"class":1942},[92,100908,23815],{"class":207},[92,100910,100911],{"class":207}," \"mujoco>=2.3\"",[92,100913,100914],{"class":207}," numpy\n",[38,100916,100917],{},"安装完成后，先做最小检查：",[83,100919,100921],{"className":23803,"code":100920,"language":23805,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[89,100922,100923],{"__ignoreMap":10},[92,100924,100925,100927,100929],{"class":94,"line":95},[92,100926,30362],{"class":1942},[92,100928,30340],{"class":151},[92,100930,100931],{"class":207}," \"import mujoco; print(mujoco.__version__)\"\n",[38,100933,100934],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[38,100936,100937],{},"conda 安装:",[83,100939,100941],{"className":23803,"code":100940,"language":23805,"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,100942,100943,100963,100973],{"__ignoreMap":10},[92,100944,100945,100947,100949,100951,100954,100957,100960],{"class":94,"line":95},[92,100946,30312],{"class":1942},[92,100948,29158],{"class":207},[92,100950,25097],{"class":151},[92,100952,100953],{"class":207}," mujoco-study",[92,100955,100956],{"class":207}," python=",[92,100958,100959],{"class":151},"3.10",[92,100961,100962],{"class":151}," -y\n",[92,100964,100965,100967,100970],{"class":94,"line":11},[92,100966,30312],{"class":1942},[92,100968,100969],{"class":207}," activate",[92,100971,100972],{"class":207}," mujoco-study\n",[92,100974,100975,100977,100979,100981],{"class":94,"line":1158},[92,100976,23812],{"class":1942},[92,100978,23815],{"class":207},[92,100980,100911],{"class":207},[92,100982,100914],{"class":207},[38,100984,100985],{},"版本冲突说明:",[46,100987,100988,100994,101004,101013],{},[49,100989,100990,100991,28367],{},"不要安装 ",[89,100992,100993],{},"mujoco-py",[49,100995,100996,100997,100999,101000,101003],{},"如果旧项目里同时安装了 ",[89,100998,100993],{}," 和 ",[89,101001,101002],{},"mujoco","，建议新建干净虚拟环境。",[49,101005,101006,101009,101010,28367],{},[89,101007,101008],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[89,101011,101012],{},"~\u002F.mujoco\u002Fmujoco210",[49,101014,101015,101016,82521,101019,101022],{},"离屏渲染可能涉及 OpenGL 后端，",[89,101017,101018],{},"MUJOCO_GL=egl",[89,101020,101021],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[33,101024,101026],{"id":101025},"_3核心概念解释","3.核心概念解释",[38,101028,101029],{},"MuJoCo 的基本执行流程:",[83,101031,101034],{"className":101032,"code":101033,"language":5167,"meta":10},[5165],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[89,101035,101033],{"__ignoreMap":10},[38,101037,101038,101040],{},[89,101039,100690],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[38,101042,101043,101045,101046,315,101049,315,101052,315,101055,315,101058,28367],{},[89,101044,100700],{}," 存放仿真运行时状态，例如 ",[89,101047,101048],{},"data.time",[89,101050,101051],{},"data.qpos",[89,101053,101054],{},"data.qvel",[89,101056,101057],{},"data.ctrl",[89,101059,101060],{},"data.xpos",[63,101062,101064],{"id":101063},"xml-是什么","XML 是什么",[38,101066,101067],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[83,101069,101071],{"className":53049,"code":101070,"language":53051,"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,101072,101073,101095,101126],{"__ignoreMap":10},[92,101074,101075,101077,101079,101081,101083,101085,101088,101090,101093],{"class":94,"line":95},[92,101076,1013],{"class":102},[92,101078,51782],{"class":51282},[92,101080,14900],{"class":1942},[92,101082,148],{"class":102},[92,101084,53473],{"class":207},[92,101086,101087],{"class":1942}," pos",[92,101089,148],{"class":102},[92,101091,101092],{"class":207},"\"0 0 1\"",[92,101094,51289],{"class":102},[92,101096,101097,101099,101102,101104,101106,101109,101111,101113,101115,101118,101120,101123],{"class":94,"line":11},[92,101098,52126],{"class":102},[92,101100,101101],{"class":51282},"geom",[92,101103,14900],{"class":1942},[92,101105,148],{"class":102},[92,101107,101108],{"class":207},"\"box_geom\"",[92,101110,53806],{"class":1942},[92,101112,148],{"class":102},[92,101114,53473],{"class":207},[92,101116,101117],{"class":1942}," size",[92,101119,148],{"class":102},[92,101121,101122],{"class":207},"\"0.1 0.1 0.1\"",[92,101124,101125],{"class":102},"\u002F>\n",[92,101127,101128,101130,101132],{"class":94,"line":1158},[92,101129,51767],{"class":102},[92,101131,51782],{"class":51282},[92,101133,51289],{"class":102},[38,101135,101136],{},"这段意思是：",[46,101138,101139,101145,101152],{},[49,101140,101141,101142,101144],{},"创建一个叫 ",[89,101143,53696],{}," 的刚体。",[49,101146,101147,101148,101151],{},"它初始放在 ",[89,101149,101150],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[49,101153,101154],{},"它里面有一个盒子形状的几何体。",[63,101156,101158],{"id":101157},"timestep-是什么","timestep 是什么",[38,101160,101161],{},"XML 里的：",[83,101163,101165],{"className":53049,"code":101164,"language":53051,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[89,101166,101167],{"__ignoreMap":10},[92,101168,101169,101171,101173,101176,101178,101181,101184,101186,101189],{"class":94,"line":95},[92,101170,1013],{"class":102},[92,101172,69148],{"class":51282},[92,101174,101175],{"class":1942}," timestep",[92,101177,148],{"class":102},[92,101179,101180],{"class":207},"\"0.01\"",[92,101182,101183],{"class":1942}," gravity",[92,101185,148],{"class":102},[92,101187,101188],{"class":207},"\"0 0 -9.81\"",[92,101190,101125],{"class":102},[38,101192,101193,101194,101197,101198,101200],{},"表示每调用一次 ",[89,101195,101196],{},"mj_step","，仿真时间前进 ",[89,101199,38968],{}," 秒。循环 100 次，大约就是 1 秒：",[83,101202,101205],{"className":101203,"code":101204,"language":5167,"meta":10},[5165],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[89,101206,101204],{"__ignoreMap":10},[63,101208,101210],{"id":101209},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[38,101212,101213],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[83,101215,101218],{"className":101216,"code":101217,"language":5167,"meta":10},[5165],"x y z qw qx qy qz\n",[89,101219,101217],{"__ignoreMap":10},[38,101221,101222,101223,101226,101227,101230],{},"表示一个自由刚体的位置和姿态。其中 ",[89,101224,101225],{},"x y z"," 是位置，",[89,101228,101229],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[33,101232,101234],{"id":101233},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[38,101236,101237],{},"新建文件:",[83,101239,101241],{"className":23803,"code":101240,"language":23805,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[89,101242,101243,101253,101260],{"__ignoreMap":10},[92,101244,101245,101248,101250],{"class":94,"line":95},[92,101246,101247],{"class":1942},"mkdir",[92,101249,29198],{"class":151},[92,101251,101252],{"class":207}," mujoco_tutorial\n",[92,101254,101255,101258],{"class":94,"line":11},[92,101256,101257],{"class":151},"cd",[92,101259,101252],{"class":207},[92,101261,101262,101265],{"class":94,"line":1158},[92,101263,101264],{"class":1942},"touch",[92,101266,101267],{"class":207}," ch1_first_sim.py\n",[38,101269,101270],{},"写入:",[83,101272,101274],{"className":30360,"code":101273,"language":30362,"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,101275,101276,101283,101287,101291,101301,101306,101311,101315,101320,101325,101329,101334,101339,101344,101349,101354,101359,101363,101367,101371,101384,101398,101408,101412,101424,101436,101448,101460,101472,101476,101493,101498,101502,101513,101524,101528,101532,101546],{"__ignoreMap":10},[92,101277,101278,101280],{"class":94,"line":95},[92,101279,30374],{"class":98},[92,101281,101282],{"class":102}," mujoco\n",[92,101284,101285],{"class":94,"line":11},[92,101286,2379],{"emptyLinePlaceholder":17},[92,101288,101289],{"class":94,"line":1158},[92,101290,2379],{"emptyLinePlaceholder":17},[92,101292,101293,101296,101298],{"class":94,"line":1173},[92,101294,101295],{"class":151},"XML",[92,101297,13544],{"class":98},[92,101299,101300],{"class":207}," \"\"\"\n",[92,101302,101303],{"class":94,"line":1179},[92,101304,101305],{"class":207},"\u003Cmujoco model=\"first_sim\">\n",[92,101307,101308],{"class":94,"line":1193},[92,101309,101310],{"class":207},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[92,101312,101313],{"class":94,"line":1199},[92,101314,2379],{"emptyLinePlaceholder":17},[92,101316,101317],{"class":94,"line":1290},[92,101318,101319],{"class":207},"  \u003Cworldbody>\n",[92,101321,101322],{"class":94,"line":1296},[92,101323,101324],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,101326,101327],{"class":94,"line":1308},[92,101328,2379],{"emptyLinePlaceholder":17},[92,101330,101331],{"class":94,"line":1591},[92,101332,101333],{"class":207},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[92,101335,101336],{"class":94,"line":1596},[92,101337,101338],{"class":207},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[92,101340,101341],{"class":94,"line":1602},[92,101342,101343],{"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,101345,101346],{"class":94,"line":1607},[92,101347,101348],{"class":207},"    \u003C\u002Fbody>\n",[92,101350,101351],{"class":94,"line":1621},[92,101352,101353],{"class":207},"  \u003C\u002Fworldbody>\n",[92,101355,101356],{"class":94,"line":1626},[92,101357,101358],{"class":207},"\u003C\u002Fmujoco>\n",[92,101360,101361],{"class":94,"line":1632},[92,101362,95679],{"class":207},[92,101364,101365],{"class":94,"line":1653},[92,101366,2379],{"emptyLinePlaceholder":17},[92,101368,101369],{"class":94,"line":1658},[92,101370,2379],{"emptyLinePlaceholder":17},[92,101372,101373,101375,101377,101380,101382],{"class":94,"line":1672},[92,101374,31929],{"class":98},[92,101376,1952],{"class":1942},[92,101378,101379],{"class":102},"() -> ",[92,101381,95667],{"class":151},[92,101383,3718],{"class":102},[92,101385,101386,101389,101391,101394,101396],{"class":94,"line":1677},[92,101387,101388],{"class":102},"    model ",[92,101390,148],{"class":98},[92,101392,101393],{"class":102}," mujoco.MjModel.from_xml_string(",[92,101395,101295],{"class":151},[92,101397,109],{"class":102},[92,101399,101400,101403,101405],{"class":94,"line":1706},[92,101401,101402],{"class":102},"    data ",[92,101404,148],{"class":98},[92,101406,101407],{"class":102}," mujoco.MjData(model)\n",[92,101409,101410],{"class":94,"line":1711},[92,101411,2379],{"emptyLinePlaceholder":17},[92,101413,101414,101416,101418,101421],{"class":94,"line":1728},[92,101415,31281],{"class":151},[92,101417,103],{"class":102},[92,101419,101420],{"class":207},"\"nq:\"",[92,101422,101423],{"class":102},", model.nq)\n",[92,101425,101426,101428,101430,101433],{"class":94,"line":1733},[92,101427,31281],{"class":151},[92,101429,103],{"class":102},[92,101431,101432],{"class":207},"\"nv:\"",[92,101434,101435],{"class":102},", model.nv)\n",[92,101437,101438,101440,101442,101445],{"class":94,"line":1738},[92,101439,31281],{"class":151},[92,101441,103],{"class":102},[92,101443,101444],{"class":207},"\"nu:\"",[92,101446,101447],{"class":102},", model.nu)\n",[92,101449,101450,101452,101454,101457],{"class":94,"line":1743},[92,101451,31281],{"class":151},[92,101453,103],{"class":102},[92,101455,101456],{"class":207},"\"initial time:\"",[92,101458,101459],{"class":102},", data.time)\n",[92,101461,101462,101464,101466,101469],{"class":94,"line":1757},[92,101463,31281],{"class":151},[92,101465,103],{"class":102},[92,101467,101468],{"class":207},"\"initial qpos:\"",[92,101470,101471],{"class":102},", data.qpos.copy())\n",[92,101473,101474],{"class":94,"line":1762},[92,101475,2379],{"emptyLinePlaceholder":17},[92,101477,101478,101480,101483,101485,101487,101489,101491],{"class":94,"line":2556},[92,101479,3180],{"class":98},[92,101481,101482],{"class":102}," _ ",[92,101484,26025],{"class":98},[92,101486,32425],{"class":151},[92,101488,103],{"class":102},[92,101490,414],{"class":151},[92,101492,30768],{"class":102},[92,101494,101495],{"class":94,"line":2570},[92,101496,101497],{"class":102},"        mujoco.mj_step(model, data)\n",[92,101499,101500],{"class":94,"line":2578},[92,101501,2379],{"emptyLinePlaceholder":17},[92,101503,101504,101506,101508,101511],{"class":94,"line":2583},[92,101505,31281],{"class":151},[92,101507,103],{"class":102},[92,101509,101510],{"class":207},"\"final time:\"",[92,101512,101459],{"class":102},[92,101514,101515,101517,101519,101522],{"class":94,"line":2589},[92,101516,31281],{"class":151},[92,101518,103],{"class":102},[92,101520,101521],{"class":207},"\"final qpos:\"",[92,101523,101471],{"class":102},[92,101525,101526],{"class":94,"line":2595},[92,101527,2379],{"emptyLinePlaceholder":17},[92,101529,101530],{"class":94,"line":2600},[92,101531,2379],{"emptyLinePlaceholder":17},[92,101533,101534,101536,101538,101541,101544],{"class":94,"line":7928},[92,101535,1510],{"class":98},[92,101537,31202],{"class":151},[92,101539,101540],{"class":98}," ==",[92,101542,101543],{"class":207}," \"__main__\"",[92,101545,3718],{"class":102},[92,101547,101548],{"class":94,"line":7952},[92,101549,101550],{"class":102},"    main()\n",[63,101552,101553],{"id":101553},"代码逐段解释",[38,101555,101556],{},"导入库：",[83,101558,101560],{"className":30360,"code":101559,"language":30362,"meta":10,"style":10},"import mujoco\n",[89,101561,101562],{"__ignoreMap":10},[92,101563,101564,101566],{"class":94,"line":95},[92,101565,30374],{"class":98},[92,101567,101282],{"class":102},[38,101569,101570],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[38,101572,101573],{},"定义 XML：",[83,101575,101577],{"className":30360,"code":101576,"language":30362,"meta":10,"style":10},"XML = \"\"\"\n...\n\"\"\"\n",[89,101578,101579,101587,101592],{"__ignoreMap":10},[92,101580,101581,101583,101585],{"class":94,"line":95},[92,101582,101295],{"class":151},[92,101584,13544],{"class":98},[92,101586,101300],{"class":207},[92,101588,101589],{"class":94,"line":11},[92,101590,101591],{"class":207},"...\n",[92,101593,101594],{"class":94,"line":1158},[92,101595,95679],{"class":207},[38,101597,101598,101599,101602],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[89,101600,101601],{},"freejoint"," 的方块。",[38,101604,101605],{},"编译模型：",[83,101607,101609],{"className":30360,"code":101608,"language":30362,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\n",[89,101610,101611],{"__ignoreMap":10},[92,101612,101613,101616,101618,101620,101622],{"class":94,"line":95},[92,101614,101615],{"class":102},"model ",[92,101617,148],{"class":98},[92,101619,101393],{"class":102},[92,101621,101295],{"class":151},[92,101623,109],{"class":102},[38,101625,101626],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[38,101628,101629],{},"创建数据：",[83,101631,101633],{"className":30360,"code":101632,"language":30362,"meta":10,"style":10},"data = mujoco.MjData(model)\n",[89,101634,101635],{"__ignoreMap":10},[92,101636,101637,101640,101642],{"class":94,"line":95},[92,101638,101639],{"class":102},"data ",[92,101641,148],{"class":98},[92,101643,101407],{"class":102},[38,101645,101646,101648,101649,101651],{},[89,101647,33383],{}," 会保存仿真当前状态。刚创建时，时间是 ",[89,101650,294],{},"，方块还在初始位置。",[38,101653,101654],{},"推进仿真：",[83,101656,101658],{"className":30360,"code":101657,"language":30362,"meta":10,"style":10},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[89,101659,101660,101676],{"__ignoreMap":10},[92,101661,101662,101664,101666,101668,101670,101672,101674],{"class":94,"line":95},[92,101663,3004],{"class":98},[92,101665,101482],{"class":102},[92,101667,26025],{"class":98},[92,101669,32425],{"class":151},[92,101671,103],{"class":102},[92,101673,414],{"class":151},[92,101675,30768],{"class":102},[92,101677,101678],{"class":94,"line":11},[92,101679,101680],{"class":102},"    mujoco.mj_step(model, data)\n",[38,101682,101683,101684,101686],{},"每次 ",[89,101685,101196],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[63,101688,101689],{"id":101689},"代码逐行细讲",[38,101691,101692],{},"下面把完整代码按新手视角拆开讲。",[83,101694,101695],{"className":30360,"code":101559,"language":30362,"meta":10,"style":10},[89,101696,101697],{"__ignoreMap":10},[92,101698,101699,101701],{"class":94,"line":95},[92,101700,30374],{"class":98},[92,101702,101282],{"class":102},[38,101704,101705,101707,101708,315,101710,315,101712,28367],{},[89,101706,30374],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[89,101709,100656],{},[89,101711,100661],{},[89,101713,101714],{},"mujoco.mj_step",[83,101716,101717],{"className":30360,"code":101576,"language":30362,"meta":10,"style":10},[89,101718,101719,101727,101731],{"__ignoreMap":10},[92,101720,101721,101723,101725],{"class":94,"line":95},[92,101722,101295],{"class":151},[92,101724,13544],{"class":98},[92,101726,101300],{"class":207},[92,101728,101729],{"class":94,"line":11},[92,101730,101591],{"class":207},[92,101732,101733],{"class":94,"line":1158},[92,101734,95679],{"class":207},[38,101736,101737,101739,101740,101743],{},[89,101738,101295],{}," 是一个变量名。右边的三引号 ",[89,101741,101742],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[83,101745,101746],{"className":53049,"code":101305,"language":53051,"meta":10,"style":10},[89,101747,101748],{"__ignoreMap":10},[92,101749,101750,101752,101754,101757,101759,101762],{"class":94,"line":95},[92,101751,1013],{"class":102},[92,101753,101002],{"class":51282},[92,101755,101756],{"class":1942}," model",[92,101758,148],{"class":102},[92,101760,101761],{"class":207},"\"first_sim\"",[92,101763,51289],{"class":102},[38,101765,101766,101767,101770,101771,28367],{},"这是 XML 的根标签。",[89,101768,101769],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[89,101772,101773],{},"first_sim",[83,101775,101776],{"className":53049,"code":101164,"language":53051,"meta":10,"style":10},[89,101777,101778],{"__ignoreMap":10},[92,101779,101780,101782,101784,101786,101788,101790,101792,101794,101796],{"class":94,"line":95},[92,101781,1013],{"class":102},[92,101783,69148],{"class":51282},[92,101785,101175],{"class":1942},[92,101787,148],{"class":102},[92,101789,101180],{"class":207},[92,101791,101183],{"class":1942},[92,101793,148],{"class":102},[92,101795,101188],{"class":207},[92,101797,101125],{"class":102},[38,101799,101800,101802,101803,101806,101807,101810],{},[89,101801,69148],{}," 用来设置仿真参数。",[89,101804,101805],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[89,101808,101809],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[83,101812,101814],{"className":53049,"code":101813,"language":53051,"meta":10,"style":10},"\u003Cworldbody>\n",[89,101815,101816],{"__ignoreMap":10},[92,101817,101818,101820,101823],{"class":94,"line":95},[92,101819,1013],{"class":102},[92,101821,101822],{"class":51282},"worldbody",[92,101824,51289],{"class":102},[38,101826,101827,101829],{},[89,101828,101822],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[83,101831,101833],{"className":53049,"code":101832,"language":53051,"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,101834,101835],{"__ignoreMap":10},[92,101836,101837,101839,101841,101843,101845,101848,101850,101852,101855,101857,101859,101862,101864,101866,101869],{"class":94,"line":95},[92,101838,1013],{"class":102},[92,101840,101101],{"class":51282},[92,101842,14900],{"class":1942},[92,101844,148],{"class":102},[92,101846,101847],{"class":207},"\"floor\"",[92,101849,53806],{"class":1942},[92,101851,148],{"class":102},[92,101853,101854],{"class":207},"\"plane\"",[92,101856,101117],{"class":1942},[92,101858,148],{"class":102},[92,101860,101861],{"class":207},"\"2 2 0.1\"",[92,101863,78749],{"class":1942},[92,101865,148],{"class":102},[92,101867,101868],{"class":207},"\"0.8 0.8 0.8 1\"",[92,101870,101125],{"class":102},[38,101872,101873,101874,101876,101877,101880,101881,101884,101885,101887],{},"这行创建地面。",[89,101875,101101],{}," 是几何体。",[89,101878,101879],{},"name=\"floor\""," 是名字。",[89,101882,101883],{},"type=\"plane\""," 表示平面。",[89,101886,55092],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[83,101889,101891],{"className":53049,"code":101890,"language":53051,"meta":10,"style":10},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[89,101892,101893],{"__ignoreMap":10},[92,101894,101895,101897,101899,101901,101903,101905,101907,101909,101911],{"class":94,"line":95},[92,101896,1013],{"class":102},[92,101898,51782],{"class":51282},[92,101900,14900],{"class":1942},[92,101902,148],{"class":102},[92,101904,53473],{"class":207},[92,101906,101087],{"class":1942},[92,101908,148],{"class":102},[92,101910,101092],{"class":207},[92,101912,51289],{"class":102},[38,101914,101915,101916,28367,101918,101921,101922,101924],{},"这行创建一个刚体，名字叫 ",[89,101917,53696],{},[89,101919,101920],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[89,101923,101150],{},"，也就是离地面 1 米高。",[83,101926,101928],{"className":53049,"code":101927,"language":53051,"meta":10,"style":10},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[89,101929,101930],{"__ignoreMap":10},[92,101931,101932,101934,101936,101938,101940,101943],{"class":94,"line":95},[92,101933,1013],{"class":102},[92,101935,101601],{"class":51282},[92,101937,14900],{"class":1942},[92,101939,148],{"class":102},[92,101941,101942],{"class":207},"\"box_free\"",[92,101944,101125],{"class":102},[38,101946,101947,101948,101950],{},"这行很重要。",[89,101949,101601],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[83,101952,101954],{"className":53049,"code":101953,"language":53051,"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,101955,101956],{"__ignoreMap":10},[92,101957,101958,101960,101962,101964,101966,101968,101970,101972,101974,101976,101978,101980,101983,101985,101987,101989,101991,101994],{"class":94,"line":95},[92,101959,1013],{"class":102},[92,101961,101101],{"class":51282},[92,101963,14900],{"class":1942},[92,101965,148],{"class":102},[92,101967,101108],{"class":207},[92,101969,53806],{"class":1942},[92,101971,148],{"class":102},[92,101973,53473],{"class":207},[92,101975,101117],{"class":1942},[92,101977,148],{"class":102},[92,101979,101122],{"class":207},[92,101981,101982],{"class":1942}," mass",[92,101984,148],{"class":102},[92,101986,3657],{"class":207},[92,101988,78749],{"class":1942},[92,101990,148],{"class":102},[92,101992,101993],{"class":207},"\"1 0 0 1\"",[92,101995,101125],{"class":102},[38,101997,101998,101999,102002,102003,102006,102007,102010,102011,102014],{},"这行给 box body 添加一个盒子形状。",[89,102000,102001],{},"type=\"box\""," 表示形状是盒子。",[89,102004,102005],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[89,102008,102009],{},"mass=\"1\""," 表示质量是 1。",[89,102012,102013],{},"rgba=\"1 0 0 1\""," 表示红色。",[83,102016,102018],{"className":30360,"code":102017,"language":30362,"meta":10,"style":10},"def main() -> None:\n",[89,102019,102020],{"__ignoreMap":10},[92,102021,102022,102024,102026,102028,102030],{"class":94,"line":95},[92,102023,31929],{"class":98},[92,102025,1952],{"class":1942},[92,102027,101379],{"class":102},[92,102029,95667],{"class":151},[92,102031,3718],{"class":102},[38,102033,102034,102036,102037,102040,102041,102044],{},[89,102035,31929],{}," 用来定义函数。这里定义了一个叫 ",[89,102038,102039],{},"main"," 的函数。",[89,102042,102043],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[83,102046,102047],{"className":30360,"code":101608,"language":30362,"meta":10,"style":10},[89,102048,102049],{"__ignoreMap":10},[92,102050,102051,102053,102055,102057,102059],{"class":94,"line":95},[92,102052,101615],{"class":102},[92,102054,148],{"class":98},[92,102056,101393],{"class":102},[92,102058,101295],{"class":151},[92,102060,109],{"class":102},[38,102062,102063,102064,102067],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[89,102065,102066],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[83,102069,102070],{"className":30360,"code":101632,"language":30362,"meta":10,"style":10},[89,102071,102072],{"__ignoreMap":10},[92,102073,102074,102076,102078],{"class":94,"line":95},[92,102075,101639],{"class":102},[92,102077,148],{"class":98},[92,102079,101407],{"class":102},[38,102081,102082,102083,102085,102086,102088],{},"这行创建仿真数据。",[89,102084,33383],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[89,102087,33383],{}," 都会变化。",[83,102090,102092],{"className":30360,"code":102091,"language":30362,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[89,102093,102094,102104,102114],{"__ignoreMap":10},[92,102095,102096,102098,102100,102102],{"class":94,"line":95},[92,102097,30397],{"class":151},[92,102099,103],{"class":102},[92,102101,101420],{"class":207},[92,102103,101423],{"class":102},[92,102105,102106,102108,102110,102112],{"class":94,"line":11},[92,102107,30397],{"class":151},[92,102109,103],{"class":102},[92,102111,101432],{"class":207},[92,102113,101435],{"class":102},[92,102115,102116,102118,102120,102122],{"class":94,"line":1158},[92,102117,30397],{"class":151},[92,102119,103],{"class":102},[92,102121,101444],{"class":207},[92,102123,101447],{"class":102},[38,102125,102126,102128,102129,102132,102133,102136,102137,102140,102141,102144],{},[89,102127,30397],{}," 用来输出信息。",[89,102130,102131],{},"model.nq"," 是位置变量数量，",[89,102134,102135],{},"model.nv"," 是速度变量数量，",[89,102138,102139],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[89,102142,102143],{},"nu"," 是 0。",[83,102146,102148],{"className":30360,"code":102147,"language":30362,"meta":10,"style":10},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[89,102149,102150,102160],{"__ignoreMap":10},[92,102151,102152,102154,102156,102158],{"class":94,"line":95},[92,102153,30397],{"class":151},[92,102155,103],{"class":102},[92,102157,101456],{"class":207},[92,102159,101459],{"class":102},[92,102161,102162,102164,102166,102168],{"class":94,"line":11},[92,102163,30397],{"class":151},[92,102165,103],{"class":102},[92,102167,101468],{"class":207},[92,102169,101471],{"class":102},[38,102171,102172,102173,102175,102176,102178,102179,102182],{},"这里打印初始时间和初始位置。",[89,102174,101048],{}," 一开始是 0。",[89,102177,101051],{}," 是位置数组。",[89,102180,102181],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[83,102184,102185],{"className":30360,"code":101657,"language":30362,"meta":10,"style":10},[89,102186,102187,102203],{"__ignoreMap":10},[92,102188,102189,102191,102193,102195,102197,102199,102201],{"class":94,"line":95},[92,102190,3004],{"class":98},[92,102192,101482],{"class":102},[92,102194,26025],{"class":98},[92,102196,32425],{"class":151},[92,102198,103],{"class":102},[92,102200,414],{"class":151},[92,102202,30768],{"class":102},[92,102204,102205],{"class":94,"line":11},[92,102206,101680],{"class":102},[38,102208,102209,102211,102212,102215,102216,102218,102219,102221],{},[89,102210,3004],{}," 是循环。",[89,102213,102214],{},"range(100)"," 表示循环 100 次。",[89,102217,1095],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[89,102220,101196],{},"，仿真就前进一步。",[83,102223,102225],{"className":30360,"code":102224,"language":30362,"meta":10,"style":10},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[89,102226,102227,102237],{"__ignoreMap":10},[92,102228,102229,102231,102233,102235],{"class":94,"line":95},[92,102230,30397],{"class":151},[92,102232,103],{"class":102},[92,102234,101510],{"class":207},[92,102236,101459],{"class":102},[92,102238,102239,102241,102243,102245],{"class":94,"line":11},[92,102240,30397],{"class":151},[92,102242,103],{"class":102},[92,102244,101521],{"class":207},[92,102246,101471],{"class":102},[38,102248,102249],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[83,102251,102253],{"className":30360,"code":102252,"language":30362,"meta":10,"style":10},"if __name__ == \"__main__\":\n    main()\n",[89,102254,102255,102267],{"__ignoreMap":10},[92,102256,102257,102259,102261,102263,102265],{"class":94,"line":95},[92,102258,1510],{"class":98},[92,102260,31202],{"class":151},[92,102262,101540],{"class":98},[92,102264,101543],{"class":207},[92,102266,3718],{"class":102},[92,102268,102269],{"class":94,"line":11},[92,102270,101550],{"class":102},[38,102272,102273,102274,102277,102278,28367],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[89,102275,102276],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[89,102279,102276],{},[38,102281,102282],{},"运行:",[83,102284,102286],{"className":23803,"code":102285,"language":23805,"meta":10,"style":10},"python ch1_first_sim.py\n",[89,102287,102288],{"__ignoreMap":10},[92,102289,102290,102292],{"class":94,"line":95},[92,102291,30362],{"class":1942},[92,102293,101267],{"class":207},[33,102295,102297],{"id":102296},"_5运行结果说明","5.运行结果说明",[38,102299,102300],{},"你应该看到类似输出:",[83,102302,102305],{"className":102303,"code":102304,"language":5167,"meta":10},[5165],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[89,102306,102304],{"__ignoreMap":10},[38,102308,102309,102311,102312,102315,102316,28367],{},[89,102310,101601],{}," 有 7 个位置变量: ",[89,102313,102314],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[89,102317,102318],{},"vx vy vz wx wy wz",[38,102320,102321,102322,102325],{},"你还会看到 ",[89,102323,102324],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[33,102327,102329],{"id":102328},"_6验证步骤","6.验证步骤",[38,102331,102332],{},"确认版本:",[83,102334,102335],{"className":23803,"code":100920,"language":23805,"meta":10,"style":10},[89,102336,102337],{"__ignoreMap":10},[92,102338,102339,102341,102343],{"class":94,"line":95},[92,102340,30362],{"class":1942},[92,102342,30340],{"class":151},[92,102344,100931],{"class":207},[38,102346,102347],{},"确认导入的是官方 bindings:",[83,102349,102351],{"className":23803,"code":102350,"language":23805,"meta":10,"style":10},"python -c \"import mujoco; print(mujoco)\"\n",[89,102352,102353],{"__ignoreMap":10},[92,102354,102355,102357,102359],{"class":94,"line":95},[92,102356,30362],{"class":1942},[92,102358,30340],{"class":151},[92,102360,102361],{"class":207}," \"import mujoco; print(mujoco)\"\n",[38,102363,102364],{},"运行程序:",[83,102366,102367],{"className":23803,"code":102285,"language":23805,"meta":10,"style":10},[89,102368,102369],{"__ignoreMap":10},[92,102370,102371,102373],{"class":94,"line":95},[92,102372,30362],{"class":1942},[92,102374,101267],{"class":207},[38,102376,102377,102378,102381,102382,28367],{},"检查 ",[89,102379,102380],{},"final time"," 是否约等于 ",[89,102383,102384],{},"1.0",[38,102386,102387],{},"再做几个小实验：",[46,102389,102390,102400,102408,102421],{},[49,102391,102392,102393,102395,102396,102399],{},"把 ",[89,102394,101920],{}," 改成 ",[89,102397,102398],{},"pos=\"0 0 2\"","，观察初始高度变化。",[49,102401,102392,102402,102395,102404,102407],{},[89,102403,101809],{},[89,102405,102406],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[49,102409,102392,102410,102395,102412,102415,102416,102418,102419,28367],{},[89,102411,101805],{},[89,102413,102414],{},"timestep=\"0.005\"","，观察 100 步后的 ",[89,102417,102380],{}," 是否变成约 ",[89,102420,35311],{},[49,102422,102423,102424,102427],{},"删除 ",[89,102425,102426],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[38,102429,102430],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[33,102432,102434],{"id":102433},"_7常见错误与解决方案","7.常见错误与解决方案",[63,102436,102438],{"id":102437},"modulenotfounderror-no-module-named-mujoco",[89,102439,102440],{},"ModuleNotFoundError: No module named 'mujoco'",[38,102442,102443],{},"解决:",[83,102445,102447],{"className":23803,"code":102446,"language":23805,"meta":10,"style":10},"pip install \"mujoco>=2.3\"\n",[89,102448,102449],{"__ignoreMap":10},[92,102450,102451,102453,102455],{"class":94,"line":95},[92,102452,23812],{"class":1942},[92,102454,23815],{"class":207},[92,102456,102457],{"class":207}," \"mujoco>=2.3\"\n",[63,102459,102461],{"id":102460},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[38,102463,102464],{},"先安装系统依赖:",[83,102466,102468],{"className":23803,"code":102467,"language":23805,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[89,102469,102470],{"__ignoreMap":10},[92,102471,102472,102474,102476,102478,102480,102483,102485,102488,102490,102493,102495],{"class":94,"line":95},[92,102473,24558],{"class":1942},[92,102475,26297],{"class":207},[92,102477,23815],{"class":207},[92,102479,26382],{"class":151},[92,102481,102482],{"class":207}," mesa-libGL",[92,102484,100795],{"class":207},[92,102486,102487],{"class":207}," glfw",[92,102489,100815],{"class":207},[92,102491,102492],{"class":207}," libX11",[92,102494,100828],{"class":207},[92,102496,102497],{"class":207}," libXrandr\n",[63,102499,102501],{"id":102500},"xml-解析失败","XML 解析失败",[38,102503,102504],{},"检查:",[46,102506,102507,102510,102513,102519],{},[49,102508,102509],{},"标签是否闭合",[49,102511,102512],{},"属性是否带引号",[49,102514,102515,102516],{},"根节点是否是 ",[89,102517,102518],{},"\u003Cmujoco>",[49,102520,102521,102523,102524,102527],{},[89,102522,51782],{}," 是否放在 ",[89,102525,102526],{},"\u003Cworldbody>"," 内部",[63,102529,102531,102533,102534],{"id":102530},"final-time-不是严格等于-10",[89,102532,102380],{}," 不是严格等于 ",[89,102535,102384],{},[38,102537,102538],{},"这通常不是错误。浮点数计算可能得到：",[83,102540,102543],{"className":102541,"code":102542,"language":5167,"meta":10},[5165],"1.0000000000000007\n",[89,102544,102542],{"__ignoreMap":10},[38,102546,102547,102548,102550],{},"只要接近 ",[89,102549,102384],{}," 就正常。",[63,102552,102553],{"id":102553},"方块没有掉下来",[38,102555,102556],{},"检查：",[46,102558,102559,102565,102571,102576],{},[49,102560,102561,102562],{},"方块 body 里是否有 ",[89,102563,102564],{},"\u003Cfreejoint\u002F>",[49,102566,102567,102568],{},"重力是否是 ",[89,102569,102570],{},"0 0 -9.81",[49,102572,102573,102574],{},"是否真的调用了 ",[89,102575,100666],{},[49,102577,102578,102579,102581,102582],{},"你看的是否是 ",[89,102580,102324],{},"，不是 ",[89,102583,102584],{},"initial qpos",[33,102586,102588],{"id":102587},"_8本章小结","8.本章小结",[38,102590,102591],{},"本章你已经完成了 MuJoCo 的最小闭环：",[83,102593,102596],{"className":102594,"code":102595,"language":5167,"meta":10},[5165],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[89,102597,102595],{"__ignoreMap":10},[38,102599,102600],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5106,102602,102603],{},"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":102605},[102606,102607,102608,102613,102617,102618,102619,102627],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":102609},[102610,102611,102612],{"id":101063,"depth":1158,"text":101064},{"id":101157,"depth":1158,"text":101158},{"id":101209,"depth":1158,"text":101210},{"id":101233,"depth":11,"text":101234,"children":102614},[102615,102616],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":102620},[102621,102622,102623,102624,102626],{"id":102437,"depth":1158,"text":102440},{"id":102460,"depth":1158,"text":102461},{"id":102500,"depth":1158,"text":102501},{"id":102530,"depth":1158,"text":102625},"final time 不是严格等于 1.0",{"id":102553,"depth":1158,"text":102553},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100619,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102634,"title":102635,"body":102636,"description":10,"extension":14,"meta":104292,"navigation":17,"path":104293,"seo":104294,"stem":104295,"__hash__":104296},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102637,"toc":104268},[102638,102641,102643,102646,102649,102666,102761,102764,102770,102772,102774,102798,102801,102815,102818,102859,102861,102874,102876,102879,102927,102939,102942,102945,102951,102964,103031,103034,103053,103056,103059,103065,103067,103076,103079,103083,103092,103174,103183,103187,103193,103207,103217,103219,103549,103552,103564,103566,103577,103579,103582,103600,103603,103606,103624,103635,103638,103653,103663,103665,103686,103703,103723,103729,103769,103785,103801,103807,103810,103834,103850,103855,103885,103902,103927,103930,103945,103954,103969,103978,103993,104000,104002,104012,104025,104032,104035,104074,104081,104083,104135,104137,104143,104146,104153,104160,104163,104165,104183,104186,104189,104223,104235,104237,104240,104262,104265],[29,102639,102635],{"id":102640},"_2xml-与-mjcf-物理建模基础",[33,102642,100628],{"id":100627},[38,102644,102645],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[38,102647,102648],{},"本章结束后，你应该能看懂一个简单模型里：",[46,102650,102651,102654,102657,102660,102663],{},[49,102652,102653],{},"地面在哪里。",[49,102655,102656],{},"物体初始位置在哪里。",[49,102658,102659],{},"几何体是什么形状。",[49,102661,102662],{},"哪些 body 可以自由运动。",[49,102664,102665],{},"如何用名字在 Python 里找到 XML 中的对象。",[240,102667,102668,102678],{},[243,102669,102670],{},[246,102671,102672,102675],{},[249,102673,102674],{"align":23717},"标签",[249,102676,102677],{"align":23717},"作用",[287,102679,102680,102689,102699,102708,102718,102728,102741,102751],{},[246,102681,102682,102686],{},[292,102683,102684],{"align":23717},[89,102685,102518],{},[292,102687,102688],{"align":23717},"根节点",[246,102690,102691,102696],{},[292,102692,102693],{"align":23717},[89,102694,102695],{},"\u003Coption>",[292,102697,102698],{"align":23717},"仿真参数",[246,102700,102701,102705],{},[292,102702,102703],{"align":23717},[89,102704,102526],{},[292,102706,102707],{"align":23717},"世界中的物体",[246,102709,102710,102715],{},[292,102711,102712],{"align":23717},[89,102713,102714],{},"\u003Cbody>",[292,102716,102717],{"align":23717},"刚体",[246,102719,102720,102725],{},[292,102721,102722],{"align":23717},[89,102723,102724],{},"\u003Cgeom>",[292,102726,102727],{"align":23717},"几何体、碰撞体、可视体",[246,102729,102730,102738],{},[292,102731,102732,24960,102735],{"align":23717},[89,102733,102734],{},"\u003Cjoint>",[89,102736,102737],{},"\u003Cfreejoint>",[292,102739,102740],{"align":23717},"关节",[246,102742,102743,102748],{},[292,102744,102745],{"align":23717},[89,102746,102747],{},"\u003Csite>",[292,102749,102750],{"align":23717},"标记点",[246,102752,102753,102758],{},[292,102754,102755],{"align":23717},[89,102756,102757],{},"\u003Cactuator>",[292,102759,102760],{"align":23717},"控制器",[38,102762,102763],{},"初学时可以先记住：",[83,102765,102768],{"className":102766,"code":102767,"language":5167,"meta":10},[5165],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[89,102769,102767],{"__ignoreMap":10},[33,102771,100751],{"id":100750},[38,102773,100754],{},[83,102775,102777],{"className":23803,"code":102776,"language":23805,"meta":10,"style":10},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[89,102778,102779],{"__ignoreMap":10},[92,102780,102781,102783,102785,102787,102789,102791,102793,102795],{"class":94,"line":95},[92,102782,24558],{"class":1942},[92,102784,26297],{"class":207},[92,102786,23815],{"class":207},[92,102788,26382],{"class":151},[92,102790,102482],{"class":207},[92,102792,100795],{"class":207},[92,102794,102487],{"class":207},[92,102796,102797],{"class":207}," glfw-devel\n",[38,102799,102800],{},"pip:",[83,102802,102803],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},[89,102804,102805],{"__ignoreMap":10},[92,102806,102807,102809,102811,102813],{"class":94,"line":95},[92,102808,23812],{"class":1942},[92,102810,23815],{"class":207},[92,102812,100911],{"class":207},[92,102814,100914],{"class":207},[38,102816,102817],{},"conda:",[83,102819,102821],{"className":23803,"code":102820,"language":23805,"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,102822,102823,102840,102849],{"__ignoreMap":10},[92,102824,102825,102827,102829,102831,102834,102836,102838],{"class":94,"line":95},[92,102826,30312],{"class":1942},[92,102828,29158],{"class":207},[92,102830,25097],{"class":151},[92,102832,102833],{"class":207}," mujoco-xml",[92,102835,100956],{"class":207},[92,102837,100959],{"class":151},[92,102839,100962],{"class":151},[92,102841,102842,102844,102846],{"class":94,"line":11},[92,102843,30312],{"class":1942},[92,102845,100969],{"class":207},[92,102847,102848],{"class":207}," mujoco-xml\n",[92,102850,102851,102853,102855,102857],{"class":94,"line":1158},[92,102852,23812],{"class":1942},[92,102854,23815],{"class":207},[92,102856,100911],{"class":207},[92,102858,100914],{"class":207},[38,102860,100985],{},[46,102862,102863,102866,102871],{},[49,102864,102865],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[49,102867,102868,102869,28367],{},"本章使用基础标签，适用于 ",[89,102870,101008],{},[49,102872,102873],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[33,102875,101026],{"id":101025},[38,102877,102878],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[83,102880,102882],{"className":53049,"code":102881,"language":53051,"meta":10,"style":10},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[89,102883,102884,102898,102906,102911,102919],{"__ignoreMap":10},[92,102885,102886,102888,102890,102892,102894,102896],{"class":94,"line":95},[92,102887,1013],{"class":102},[92,102889,101002],{"class":51282},[92,102891,101756],{"class":1942},[92,102893,148],{"class":102},[92,102895,62661],{"class":207},[92,102897,51289],{"class":102},[92,102899,102900,102902,102904],{"class":94,"line":11},[92,102901,52126],{"class":102},[92,102903,101822],{"class":51282},[92,102905,51289],{"class":102},[92,102907,102908],{"class":94,"line":1158},[92,102909,102910],{"class":102},"    ...\n",[92,102912,102913,102915,102917],{"class":94,"line":1173},[92,102914,52399],{"class":102},[92,102916,101822],{"class":51282},[92,102918,51289],{"class":102},[92,102920,102921,102923,102925],{"class":94,"line":1179},[92,102922,51767],{"class":102},[92,102924,101002],{"class":51282},[92,102926,51289],{"class":102},[38,102928,102929,102931,102932,102934,102935,102938],{},[89,102930,51782],{}," 表示刚体。",[89,102933,101101],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[89,102936,102937],{},"joint"," 表示刚体相对父刚体如何运动。",[63,102940,102941],{"id":102941},"层级结构非常重要",[38,102943,102944],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[83,102946,102949],{"className":102947,"code":102948,"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,102950,102948],{"__ignoreMap":10},[38,102952,102953,100999,102956,102959,102960,102963],{},[89,102954,102955],{},"red_box_geom",[89,102957,102958],{},"box_center"," 都属于 ",[89,102961,102962],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[83,102965,102967],{"className":53049,"code":102966,"language":53051,"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,102968,102969,102989,103003,103023],{"__ignoreMap":10},[92,102970,102971,102973,102975,102977,102979,102981,102983,102985,102987],{"class":94,"line":95},[92,102972,1013],{"class":102},[92,102974,51782],{"class":51282},[92,102976,14900],{"class":1942},[92,102978,148],{"class":102},[92,102980,53473],{"class":207},[92,102982,101087],{"class":1942},[92,102984,148],{"class":102},[92,102986,101092],{"class":207},[92,102988,51289],{"class":102},[92,102990,102991,102993,102995,102997,102999,103001],{"class":94,"line":11},[92,102992,52126],{"class":102},[92,102994,101601],{"class":51282},[92,102996,14900],{"class":1942},[92,102998,148],{"class":102},[92,103000,101942],{"class":207},[92,103002,101125],{"class":102},[92,103004,103005,103007,103009,103011,103013,103015,103017,103019,103021],{"class":94,"line":1158},[92,103006,52126],{"class":102},[92,103008,101101],{"class":51282},[92,103010,53806],{"class":1942},[92,103012,148],{"class":102},[92,103014,53473],{"class":207},[92,103016,101117],{"class":1942},[92,103018,148],{"class":102},[92,103020,101122],{"class":207},[92,103022,101125],{"class":102},[92,103024,103025,103027,103029],{"class":94,"line":1173},[92,103026,51767],{"class":102},[92,103028,51782],{"class":51282},[92,103030,51289],{"class":102},[38,103032,103033],{},"含义:",[46,103035,103036,103042,103047,103050],{},[49,103037,103038,103039,103041],{},"创建名为 ",[89,103040,53696],{}," 的刚体",[49,103043,103044,103045],{},"初始位置在世界坐标 ",[89,103046,101150],{},[49,103048,103049],{},"它有一个自由关节",[49,103051,103052],{},"它有一个盒子几何体",[63,103054,103055],{"id":103055},"坐标怎么理解",[38,103057,103058],{},"MuJoCo 默认使用三维坐标：",[83,103060,103063],{"className":103061,"code":103062,"language":5167,"meta":10},[5165],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[89,103064,103062],{"__ignoreMap":10},[38,103066,14613],{},[83,103068,103070],{"className":53049,"code":103069,"language":53051,"meta":10,"style":10},"pos=\"0 0 1\"\n",[89,103071,103072],{"__ignoreMap":10},[92,103073,103074],{"class":94,"line":95},[92,103075,103069],{"class":102},[38,103077,103078],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[63,103080,103082],{"id":103081},"geom-的-size-怎么理解","geom 的 size 怎么理解",[38,103084,103085,103086,82512,103089,103091],{},"不同 ",[89,103087,103088],{},"type",[89,103090,31478],{}," 含义不同：",[240,103093,103094,103109],{},[243,103095,103096],{},[246,103097,103098,103102,103107],{},[249,103099,103100],{"align":23717},[89,103101,103088],{},[249,103103,103104,103106],{"align":23717},[89,103105,31478],{}," 示例",[249,103108,100681],{"align":23717},[287,103110,103111,103125,103140,103159],{},[246,103112,103113,103117,103122],{},[292,103114,103115],{"align":23717},[89,103116,53696],{},[292,103118,103119],{"align":23717},[89,103120,103121],{},"size=\"0.1 0.2 0.3\"",[292,103123,103124],{"align":23717},"x\u002Fy\u002Fz 半边长，不是完整长度",[246,103126,103127,103132,103137],{},[292,103128,103129],{"align":23717},[89,103130,103131],{},"sphere",[292,103133,103134],{"align":23717},[89,103135,103136],{},"size=\"0.1\"",[292,103138,103139],{"align":23717},"球半径",[246,103141,103142,103147,103152],{},[292,103143,103144],{"align":23717},[89,103145,103146],{},"capsule",[292,103148,103149],{"align":23717},[89,103150,103151],{},"size=\"0.03\"",[292,103153,103154,103155,103158],{"align":23717},"胶囊半径，长度常用 ",[89,103156,103157],{},"fromto"," 指定",[246,103160,103161,103166,103171],{},[292,103162,103163],{"align":23717},[89,103164,103165],{},"plane",[292,103167,103168],{"align":23717},[89,103169,103170],{},"size=\"3 3 0.1\"",[292,103172,103173],{"align":23717},"可视平面大小，通常当地面",[38,103175,103176,103177,103179,103180,103182],{},"最容易踩坑的是 box：",[89,103178,102005],{}," 表示边长大约是 ",[89,103181,32019],{},"，因为 MuJoCo 用的是半边长。",[63,103184,103186],{"id":103185},"site-是什么","site 是什么",[38,103188,103189,103192],{},[89,103190,103191],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[46,103194,103195,103198,103201,103204],{},[49,103196,103197],{},"标记机械臂末端。",[49,103199,103200],{},"标记目标位置。",[49,103202,103203],{},"放传感器或相机参考点。",[49,103205,103206],{},"在 Python 中读取某个关键点的世界坐标。",[38,103208,103209,103210,100999,103213,103216],{},"在后面的 Reacher 任务中，",[89,103211,103212],{},"tip",[89,103214,103215],{},"target"," 就会用 site 表示。",[33,103218,101234],{"id":101233},[83,103220,103222],{"className":30360,"code":103221,"language":30362,"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,103223,103224,103230,103240,103244,103248,103256,103261,103265,103269,103273,103278,103282,103287,103292,103297,103302,103306,103310,103314,103318,103322,103326,103338,103350,103358,103362,103377,103392,103396,103409,103424,103437,103450,103454,103470,103474,103478,103489,103501,103513,103525,103529,103533,103545],{"__ignoreMap":10},[92,103225,103226,103228],{"class":94,"line":95},[92,103227,30374],{"class":98},[92,103229,101282],{"class":102},[92,103231,103232,103234,103236,103238],{"class":94,"line":11},[92,103233,30374],{"class":98},[92,103235,31362],{"class":102},[92,103237,31365],{"class":98},[92,103239,31368],{"class":102},[92,103241,103242],{"class":94,"line":1158},[92,103243,2379],{"emptyLinePlaceholder":17},[92,103245,103246],{"class":94,"line":1173},[92,103247,2379],{"emptyLinePlaceholder":17},[92,103249,103250,103252,103254],{"class":94,"line":1179},[92,103251,101295],{"class":151},[92,103253,13544],{"class":98},[92,103255,101300],{"class":207},[92,103257,103258],{"class":94,"line":1193},[92,103259,103260],{"class":207},"\u003Cmujoco model=\"xml_basic\">\n",[92,103262,103263],{"class":94,"line":1199},[92,103264,101310],{"class":207},[92,103266,103267],{"class":94,"line":1290},[92,103268,2379],{"emptyLinePlaceholder":17},[92,103270,103271],{"class":94,"line":1296},[92,103272,101319],{"class":207},[92,103274,103275],{"class":94,"line":1308},[92,103276,103277],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[92,103279,103280],{"class":94,"line":1591},[92,103281,2379],{"emptyLinePlaceholder":17},[92,103283,103284],{"class":94,"line":1596},[92,103285,103286],{"class":207},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[92,103288,103289],{"class":94,"line":1602},[92,103290,103291],{"class":207},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[92,103293,103294],{"class":94,"line":1607},[92,103295,103296],{"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,103298,103299],{"class":94,"line":1621},[92,103300,103301],{"class":207},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[92,103303,103304],{"class":94,"line":1626},[92,103305,101348],{"class":207},[92,103307,103308],{"class":94,"line":1632},[92,103309,101353],{"class":207},[92,103311,103312],{"class":94,"line":1653},[92,103313,101358],{"class":207},[92,103315,103316],{"class":94,"line":1658},[92,103317,95679],{"class":207},[92,103319,103320],{"class":94,"line":1672},[92,103321,2379],{"emptyLinePlaceholder":17},[92,103323,103324],{"class":94,"line":1677},[92,103325,2379],{"emptyLinePlaceholder":17},[92,103327,103328,103330,103332,103334,103336],{"class":94,"line":1706},[92,103329,31929],{"class":98},[92,103331,1952],{"class":1942},[92,103333,101379],{"class":102},[92,103335,95667],{"class":151},[92,103337,3718],{"class":102},[92,103339,103340,103342,103344,103346,103348],{"class":94,"line":1711},[92,103341,101388],{"class":102},[92,103343,148],{"class":98},[92,103345,101393],{"class":102},[92,103347,101295],{"class":151},[92,103349,109],{"class":102},[92,103351,103352,103354,103356],{"class":94,"line":1728},[92,103353,101402],{"class":102},[92,103355,148],{"class":98},[92,103357,101407],{"class":102},[92,103359,103360],{"class":94,"line":1733},[92,103361,2379],{"emptyLinePlaceholder":17},[92,103363,103364,103367,103369,103372,103375],{"class":94,"line":1738},[92,103365,103366],{"class":102},"    box_body_id ",[92,103368,148],{"class":98},[92,103370,103371],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[92,103373,103374],{"class":207},"\"red_box\"",[92,103376,109],{"class":102},[92,103378,103379,103382,103384,103387,103390],{"class":94,"line":1743},[92,103380,103381],{"class":102},"    site_id ",[92,103383,148],{"class":98},[92,103385,103386],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[92,103388,103389],{"class":207},"\"box_center\"",[92,103391,109],{"class":102},[92,103393,103394],{"class":94,"line":1757},[92,103395,2379],{"emptyLinePlaceholder":17},[92,103397,103398,103400,103403,103405,103407],{"class":94,"line":1762},[92,103399,3080],{"class":98},[92,103401,103402],{"class":102}," box_body_id ",[92,103404,1013],{"class":98},[92,103406,4072],{"class":151},[92,103408,3718],{"class":102},[92,103410,103411,103414,103417,103419,103422],{"class":94,"line":2556},[92,103412,103413],{"class":98},"        raise",[92,103415,103416],{"class":151}," RuntimeError",[92,103418,103],{"class":102},[92,103420,103421],{"class":207},"\"body red_box not found\"",[92,103423,109],{"class":102},[92,103425,103426,103428,103431,103433,103435],{"class":94,"line":2570},[92,103427,3080],{"class":98},[92,103429,103430],{"class":102}," site_id ",[92,103432,1013],{"class":98},[92,103434,4072],{"class":151},[92,103436,3718],{"class":102},[92,103438,103439,103441,103443,103445,103448],{"class":94,"line":2578},[92,103440,103413],{"class":98},[92,103442,103416],{"class":151},[92,103444,103],{"class":102},[92,103446,103447],{"class":207},"\"site box_center not found\"",[92,103449,109],{"class":102},[92,103451,103452],{"class":94,"line":2583},[92,103453,2379],{"emptyLinePlaceholder":17},[92,103455,103456,103458,103460,103462,103464,103466,103468],{"class":94,"line":2589},[92,103457,3180],{"class":98},[92,103459,101482],{"class":102},[92,103461,26025],{"class":98},[92,103463,32425],{"class":151},[92,103465,103],{"class":102},[92,103467,1701],{"class":151},[92,103469,30768],{"class":102},[92,103471,103472],{"class":94,"line":2595},[92,103473,101497],{"class":102},[92,103475,103476],{"class":94,"line":2600},[92,103477,2379],{"emptyLinePlaceholder":17},[92,103479,103480,103482,103484,103487],{"class":94,"line":7928},[92,103481,31281],{"class":151},[92,103483,103],{"class":102},[92,103485,103486],{"class":207},"\"simulation time:\"",[92,103488,101459],{"class":102},[92,103490,103491,103493,103495,103498],{"class":94,"line":7952},[92,103492,31281],{"class":151},[92,103494,103],{"class":102},[92,103496,103497],{"class":207},"\"box body position:\"",[92,103499,103500],{"class":102},", data.xpos[box_body_id].copy())\n",[92,103502,103503,103505,103507,103510],{"class":94,"line":7957},[92,103504,31281],{"class":151},[92,103506,103],{"class":102},[92,103508,103509],{"class":207},"\"site position:\"",[92,103511,103512],{"class":102},", data.site_xpos[site_id].copy())\n",[92,103514,103515,103517,103519,103522],{"class":94,"line":7963},[92,103516,31281],{"class":151},[92,103518,103],{"class":102},[92,103520,103521],{"class":207},"\"box qpos:\"",[92,103523,103524],{"class":102},", np.array(data.qpos))\n",[92,103526,103527],{"class":94,"line":7990},[92,103528,2379],{"emptyLinePlaceholder":17},[92,103530,103531],{"class":94,"line":7995},[92,103532,2379],{"emptyLinePlaceholder":17},[92,103534,103535,103537,103539,103541,103543],{"class":94,"line":8001},[92,103536,1510],{"class":98},[92,103538,31202],{"class":151},[92,103540,101540],{"class":98},[92,103542,101543],{"class":207},[92,103544,3718],{"class":102},[92,103546,103547],{"class":94,"line":8013},[92,103548,101550],{"class":102},[38,103550,103551],{},"保存为：",[83,103553,103555],{"className":23803,"code":103554,"language":23805,"meta":10,"style":10},"touch ch2_xml_basic.py\n",[89,103556,103557],{"__ignoreMap":10},[92,103558,103559,103561],{"class":94,"line":95},[92,103560,101264],{"class":1942},[92,103562,103563],{"class":207}," ch2_xml_basic.py\n",[38,103565,102282],{},[83,103567,103569],{"className":23803,"code":103568,"language":23805,"meta":10,"style":10},"python ch2_xml_basic.py\n",[89,103570,103571],{"__ignoreMap":10},[92,103572,103573,103575],{"class":94,"line":95},[92,103574,30362],{"class":1942},[92,103576,103563],{"class":207},[63,103578,101553],{"id":101553},[38,103580,103581],{},"用名字查找 body：",[83,103583,103585],{"className":30360,"code":103584,"language":30362,"meta":10,"style":10},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[89,103586,103587],{"__ignoreMap":10},[92,103588,103589,103592,103594,103596,103598],{"class":94,"line":95},[92,103590,103591],{"class":102},"box_body_id ",[92,103593,148],{"class":98},[92,103595,103371],{"class":102},[92,103597,103374],{"class":207},[92,103599,109],{"class":102},[38,103601,103602],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[38,103604,103605],{},"用名字查找 site：",[83,103607,103609],{"className":30360,"code":103608,"language":30362,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[89,103610,103611],{"__ignoreMap":10},[92,103612,103613,103616,103618,103620,103622],{"class":94,"line":95},[92,103614,103615],{"class":102},"site_id ",[92,103617,148],{"class":98},[92,103619,103386],{"class":102},[92,103621,103389],{"class":207},[92,103623,109],{"class":102},[38,103625,103626,103627,103630,103631,103634],{},"注意第二个参数是对象类型。查 body 就用 ",[89,103628,103629],{},"mjOBJ_BODY","，查 site 就用 ",[89,103632,103633],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[38,103636,103637],{},"读取世界坐标：",[83,103639,103641],{"className":30360,"code":103640,"language":30362,"meta":10,"style":10},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[89,103642,103643,103648],{"__ignoreMap":10},[92,103644,103645],{"class":94,"line":95},[92,103646,103647],{"class":102},"data.xpos[box_body_id]\n",[92,103649,103650],{"class":94,"line":11},[92,103651,103652],{"class":102},"data.site_xpos[site_id]\n",[38,103654,103655,103658,103659,103662],{},[89,103656,103657],{},"xpos"," 是 body 的世界坐标，",[89,103660,103661],{},"site_xpos"," 是 site 的世界坐标。",[63,103664,101689],{"id":101689},[83,103666,103668],{"className":30360,"code":103667,"language":30362,"meta":10,"style":10},"import mujoco\nimport numpy as np\n",[89,103669,103670,103676],{"__ignoreMap":10},[92,103671,103672,103674],{"class":94,"line":95},[92,103673,30374],{"class":98},[92,103675,101282],{"class":102},[92,103677,103678,103680,103682,103684],{"class":94,"line":11},[92,103679,30374],{"class":98},[92,103681,31362],{"class":102},[92,103683,31365],{"class":98},[92,103685,31368],{"class":102},[38,103687,103688,103689,103692,103693,103696,103697,315,103700,28367],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[89,103690,103691],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[89,103694,103695],{},"as np"," 是习惯写法，后面就可以写 ",[89,103698,103699],{},"np.array(...)",[89,103701,103702],{},"np.round(...)",[83,103704,103705],{"className":30360,"code":101576,"language":30362,"meta":10,"style":10},[89,103706,103707,103715,103719],{"__ignoreMap":10},[92,103708,103709,103711,103713],{"class":94,"line":95},[92,103710,101295],{"class":151},[92,103712,13544],{"class":98},[92,103714,101300],{"class":207},[92,103716,103717],{"class":94,"line":11},[92,103718,101591],{"class":207},[92,103720,103721],{"class":94,"line":1158},[92,103722,95679],{"class":207},[38,103724,103725,103726,28367],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[89,103727,103728],{},"mujoco.MjModel.from_xml_string(XML)",[83,103730,103732],{"className":53049,"code":103731,"language":53051,"meta":10,"style":10},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[89,103733,103734],{"__ignoreMap":10},[92,103735,103736,103738,103740,103742,103744,103746,103748,103750,103753,103755,103757,103760,103762,103764,103767],{"class":94,"line":95},[92,103737,1013],{"class":102},[92,103739,103191],{"class":51282},[92,103741,14900],{"class":1942},[92,103743,148],{"class":102},[92,103745,103389],{"class":207},[92,103747,101087],{"class":1942},[92,103749,148],{"class":102},[92,103751,103752],{"class":207},"\"0 0 0\"",[92,103754,101117],{"class":1942},[92,103756,148],{"class":102},[92,103758,103759],{"class":207},"\"0.03\"",[92,103761,78749],{"class":1942},[92,103763,148],{"class":102},[92,103765,103766],{"class":207},"\"0 1 0 1\"",[92,103768,101125],{"class":102},[38,103770,103771,103773,103774,103777,103778,103780,103781,103784],{},[89,103772,103191],{}," 是标记点。",[89,103775,103776],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[89,103779,103151],{}," 表示显示出来的小球大小。",[89,103782,103783],{},"rgba=\"0 1 0 1\""," 表示绿色。",[83,103786,103787],{"className":30360,"code":103584,"language":30362,"meta":10,"style":10},[89,103788,103789],{"__ignoreMap":10},[92,103790,103791,103793,103795,103797,103799],{"class":94,"line":95},[92,103792,103591],{"class":102},[92,103794,148],{"class":98},[92,103796,103371],{"class":102},[92,103798,103374],{"class":207},[92,103800,109],{"class":102},[38,103802,103803,103804,103806],{},"这行的作用是：根据名字 ",[89,103805,103374],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[38,103808,103809],{},"拆开看：",[46,103811,103812,103818,103823,103829],{},[49,103813,103814,103817],{},[89,103815,103816],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[49,103819,103820,103822],{},[89,103821,102066],{}," 是被查询的模型。",[49,103824,103825,103828],{},[89,103826,103827],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[49,103830,103831,103833],{},[89,103832,103374],{}," 是 XML 里写的名字。",[83,103835,103836],{"className":30360,"code":103608,"language":30362,"meta":10,"style":10},[89,103837,103838],{"__ignoreMap":10},[92,103839,103840,103842,103844,103846,103848],{"class":94,"line":95},[92,103841,103615],{"class":102},[92,103843,148],{"class":98},[92,103845,103386],{"class":102},[92,103847,103389],{"class":207},[92,103849,109],{"class":102},[38,103851,103852,103853,28367],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[89,103854,103389],{},[83,103856,103858],{"className":30360,"code":103857,"language":30362,"meta":10,"style":10},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[89,103859,103860,103872],{"__ignoreMap":10},[92,103861,103862,103864,103866,103868,103870],{"class":94,"line":95},[92,103863,1510],{"class":98},[92,103865,103402],{"class":102},[92,103867,1013],{"class":98},[92,103869,4072],{"class":151},[92,103871,3718],{"class":102},[92,103873,103874,103877,103879,103881,103883],{"class":94,"line":11},[92,103875,103876],{"class":98},"    raise",[92,103878,103416],{"class":151},[92,103880,103],{"class":102},[92,103882,103421],{"class":207},[92,103884,109],{"class":102},[38,103886,103887,103889,103890,103893,103894,103897,103898,103901],{},[89,103888,1510],{}," 是条件判断。",[89,103891,103892],{},"mj_name2id"," 找不到对象时会返回 ",[89,103895,103896],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[89,103899,103900],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[83,103903,103905],{"className":30360,"code":103904,"language":30362,"meta":10,"style":10},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[89,103906,103907,103923],{"__ignoreMap":10},[92,103908,103909,103911,103913,103915,103917,103919,103921],{"class":94,"line":95},[92,103910,3004],{"class":98},[92,103912,101482],{"class":102},[92,103914,26025],{"class":98},[92,103916,32425],{"class":151},[92,103918,103],{"class":102},[92,103920,1701],{"class":151},[92,103922,30768],{"class":102},[92,103924,103925],{"class":94,"line":11},[92,103926,101680],{"class":102},[38,103928,103929],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[83,103931,103933],{"className":30360,"code":103932,"language":30362,"meta":10,"style":10},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[89,103934,103935],{"__ignoreMap":10},[92,103936,103937,103939,103941,103943],{"class":94,"line":95},[92,103938,30397],{"class":151},[92,103940,103],{"class":102},[92,103942,103497],{"class":207},[92,103944,103500],{"class":102},[38,103946,103947,103949,103950,103953],{},[89,103948,101060],{}," 保存所有 body 的世界坐标。",[89,103951,103952],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[83,103955,103957],{"className":30360,"code":103956,"language":30362,"meta":10,"style":10},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[89,103958,103959],{"__ignoreMap":10},[92,103960,103961,103963,103965,103967],{"class":94,"line":95},[92,103962,30397],{"class":151},[92,103964,103],{"class":102},[92,103966,103509],{"class":207},[92,103968,103512],{"class":102},[38,103970,103971,103974,103975,103977],{},[89,103972,103973],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[89,103976,102958],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[83,103979,103981],{"className":30360,"code":103980,"language":30362,"meta":10,"style":10},"print(\"box qpos:\", np.array(data.qpos))\n",[89,103982,103983],{"__ignoreMap":10},[92,103984,103985,103987,103989,103991],{"class":94,"line":95},[92,103986,30397],{"class":151},[92,103988,103],{"class":102},[92,103990,103521],{"class":207},[92,103992,103524],{"class":102},[38,103994,103995,103996,103999],{},"这里打印广义位置数组。",[89,103997,103998],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[33,104001,102297],{"id":102296},[38,104003,104004,104005,104008,104009,28367],{},"程序会输出 ",[89,104006,104007],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[89,104010,104011],{},"qpos",[38,104013,104014,104016,104017,104020,104021,104024],{},[89,104015,103952],{}," 是 body 的世界坐标位置。",[89,104018,104019],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[89,104022,104023],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[38,104026,82204,104027,82512,104029,104031],{},[89,104028,102958],{},[89,104030,103776],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[38,104033,104034],{},"如果你把 site 改成：",[83,104036,104038],{"className":53049,"code":104037,"language":53051,"meta":10,"style":10},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[89,104039,104040],{"__ignoreMap":10},[92,104041,104042,104044,104046,104048,104050,104053,104055,104057,104060,104062,104064,104066,104068,104070,104072],{"class":94,"line":95},[92,104043,1013],{"class":102},[92,104045,103191],{"class":51282},[92,104047,14900],{"class":1942},[92,104049,148],{"class":102},[92,104051,104052],{"class":207},"\"box_top\"",[92,104054,101087],{"class":1942},[92,104056,148],{"class":102},[92,104058,104059],{"class":207},"\"0 0 0.15\"",[92,104061,101117],{"class":1942},[92,104063,148],{"class":102},[92,104065,103759],{"class":207},[92,104067,78749],{"class":1942},[92,104069,148],{"class":102},[92,104071,103766],{"class":207},[92,104073,101125],{"class":102},[38,104075,104076,104077,104080],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[89,104078,104079],{},"site position"," 就会比 body position 的 z 坐标更高。",[33,104082,102329],{"id":102328},[46,104084,104085,104094,104097,104104,104110,104121],{},[49,104086,102392,104087,104089,104090,102395,104092,28367],{},[89,104088,102962],{}," 的初始高度从 ",[89,104091,320],{},[89,104093,180],{},[49,104095,104096],{},"重新运行程序。",[49,104098,104099,104100,104103],{},"观察 ",[89,104101,104102],{},"box qpos"," 和最终位置是否变化。",[49,104105,104106,104107,104109],{},"故意把 ",[89,104108,103191],{}," 名称改错，确认程序能报错。",[49,104111,102392,104112,104114,104115,102395,104117,104120],{},[89,104113,101101],{}," 的颜色 ",[89,104116,102013],{},[89,104118,104119],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[49,104122,102392,104123,82512,104125,102395,104128,104131,104132,104134],{},[89,104124,102958],{},[89,104126,104127],{},"pos",[89,104129,104130],{},"0 0 0.2","，观察 ",[89,104133,104079],{}," 如何变化。",[33,104136,102434],{"id":102433},[63,104138,104140],{"id":104139},"xml-error-schema-violation",[89,104141,104142],{},"XML Error: Schema violation",[38,104144,104145],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[63,104147,104149,81272,104151],{"id":104148},"mj_name2id-返回-1",[89,104150,103892],{},[89,104152,103896],{},[38,104154,104155,104156,104159],{},"说明名字没有找到。检查 XML 中 ",[89,104157,104158],{},"name=\"...\"","，并确认对象类型正确。",[63,104161,104162],{"id":104162},"物体不下落",[38,104164,102504],{},[46,104166,104167,104172,104177],{},[49,104168,104169,104170],{},"body 是否有 ",[89,104171,101601],{},[49,104173,104174,104175],{},"gravity 是否为 ",[89,104176,102570],{},[49,104178,104179,104180,104182],{},"body 是否被固定在 ",[89,104181,101822],{}," 中",[63,104184,104185],{"id":104185},"坐标看起来不符合预期",[38,104187,104188],{},"先区分两种坐标：",[240,104190,104191,104200],{},[243,104192,104193],{},[246,104194,104195,104198],{},[249,104196,104197],{"align":23717},"坐标",[249,104199,100681],{"align":23717},[287,104201,104202,104212],{},[246,104203,104204,104209],{},[292,104205,104206,104207],{"align":23717},"XML 里的 ",[89,104208,104127],{},[292,104210,104211],{"align":23717},"相对父 body 的局部坐标",[246,104213,104214,104220],{},[292,104215,104216,24960,104218],{"align":23717},[89,104217,101060],{},[89,104219,103973],{},[292,104221,104222],{"align":23717},"仿真更新后的世界坐标",[38,104224,104225,104226,104228,104229,82521,104232,104234],{},"如果你修改了 ",[89,104227,101051],{},"，但还没调用 ",[89,104230,104231],{},"mj_forward",[89,104233,101196],{},"，世界坐标可能还没有更新。",[33,104236,102588],{"id":102587},[38,104238,104239],{},"MJCF 建模先掌握四件事：",[46,104241,104242,104247,104252,104257],{},[49,104243,104244,104246],{},[89,104245,51782],{}," 表示刚体层级。",[49,104248,104249,104251],{},[89,104250,101101],{}," 表示形状、碰撞和质量。",[49,104253,104254,104256],{},[89,104255,102937],{}," 决定 body 能不能动、怎么动。",[49,104258,104259,104261],{},[89,104260,103191],{}," 用来标记关键点，方便 Python 读取位置。",[38,104263,104264],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5106,104266,104267],{},"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":104269},[104270,104271,104272,104278,104282,104283,104284,104291],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":104273},[104274,104275,104276,104277],{"id":102941,"depth":1158,"text":102941},{"id":103055,"depth":1158,"text":103055},{"id":103081,"depth":1158,"text":103082},{"id":103185,"depth":1158,"text":103186},{"id":101233,"depth":11,"text":101234,"children":104279},[104280,104281],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":104285},[104286,104287,104289,104290],{"id":104139,"depth":1158,"text":104142},{"id":104148,"depth":1158,"text":104288},"mj_name2id 返回 -1",{"id":104162,"depth":1158,"text":104162},{"id":104185,"depth":1158,"text":104185},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102635,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104298,"title":104299,"body":104300,"description":10,"extension":14,"meta":105795,"navigation":17,"path":105796,"seo":105797,"stem":105798,"__hash__":105799},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104301,"toc":105767},[104302,104305,104307,104310,104313,104351,104354,104360,104363,104365,104367,104394,104396,104410,104412,104453,104455,104479,104481,104484,104493,104502,104505,104514,104522,104531,104534,104544,104547,104599,104606,104612,104620,104668,104671,104690,104693,104701,104705,104714,104747,104749,105097,105099,105111,105113,105124,105126,105129,105150,105156,105159,105184,105194,105197,105205,105208,105211,105232,105243,105245,105265,105268,105289,105298,105317,105323,105348,105351,105365,105372,105396,105399,105407,105416,105432,105444,105452,105461,105463,105466,105490,105495,105498,105520,105522,105561,105563,105570,105572,105580,105583,105586,105598,105639,105646,105657,105664,105667,105716,105719,105722,105728,105730,105735,105761,105764],[29,104303,104299],{"id":104304},"_3python-控制接口读取状态与推进仿真",[33,104306,100628],{"id":100627},[38,104308,104309],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[38,104311,104312],{},"你将学习:",[46,104314,104315,104320,104325,104329,104334,104345],{},[49,104316,104317],{},[89,104318,104319],{},"MjModel.from_xml_string",[49,104321,104322],{},[89,104323,104324],{},"MjData(model)",[49,104326,104327],{},[89,104328,101196],{},[49,104330,104331],{},[89,104332,104333],{},"mj_resetData",[49,104335,104336,104337,315,104339,315,104342],{},"读取 ",[89,104338,104011],{},[89,104340,104341],{},"qvel",[89,104343,104344],{},"ctrl",[49,104346,104347,104348],{},"使用 ",[89,104349,104350],{},"model.opt.timestep",[38,104352,104353],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[83,104355,104358],{"className":104356,"code":104357,"language":5167,"meta":10},[5165],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[89,104359,104357],{"__ignoreMap":10},[38,104361,104362],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[33,104364,100751],{"id":100750},[38,104366,100754],{},[83,104368,104370],{"className":23803,"code":104369,"language":23805,"meta":10,"style":10},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[89,104371,104372],{"__ignoreMap":10},[92,104373,104374,104376,104378,104380,104382,104385,104387,104389,104391],{"class":94,"line":95},[92,104375,24558],{"class":1942},[92,104377,26297],{"class":207},[92,104379,23815],{"class":207},[92,104381,26382],{"class":151},[92,104383,104384],{"class":207}," python3",[92,104386,100779],{"class":207},[92,104388,102482],{"class":207},[92,104390,100795],{"class":207},[92,104392,104393],{"class":207}," glfw\n",[38,104395,102800],{},[83,104397,104398],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},[89,104399,104400],{"__ignoreMap":10},[92,104401,104402,104404,104406,104408],{"class":94,"line":95},[92,104403,23812],{"class":1942},[92,104405,23815],{"class":207},[92,104407,100911],{"class":207},[92,104409,100914],{"class":207},[38,104411,102817],{},[83,104413,104415],{"className":23803,"code":104414,"language":23805,"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,104416,104417,104434,104443],{"__ignoreMap":10},[92,104418,104419,104421,104423,104425,104428,104430,104432],{"class":94,"line":95},[92,104420,30312],{"class":1942},[92,104422,29158],{"class":207},[92,104424,25097],{"class":151},[92,104426,104427],{"class":207}," mujoco-python-api",[92,104429,100956],{"class":207},[92,104431,100959],{"class":151},[92,104433,100962],{"class":151},[92,104435,104436,104438,104440],{"class":94,"line":11},[92,104437,30312],{"class":1942},[92,104439,100969],{"class":207},[92,104441,104442],{"class":207}," mujoco-python-api\n",[92,104444,104445,104447,104449,104451],{"class":94,"line":1158},[92,104446,23812],{"class":1942},[92,104448,23815],{"class":207},[92,104450,100911],{"class":207},[92,104452,100914],{"class":207},[38,104454,100985],{},[46,104456,104457,104464,104473],{},[49,104458,104459,100999,104461,104463],{},[89,104460,100656],{},[89,104462,100661],{}," 是官方 Python bindings 的类名。",[49,104465,104466,104467,104470,104471,28367],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[89,104468,104469],{},"mjModel"," 在 Python 中是 ",[89,104472,100690],{},[49,104474,104475,104476,28367],{},"不要使用 ",[89,104477,104478],{},"sim = mujoco_py.MjSim(...)",[33,104480,101026],{"id":101025},[38,104482,104483],{},"仿真推进核心代码:",[83,104485,104487],{"className":30360,"code":104486,"language":30362,"meta":10,"style":10},"mujoco.mj_step(model, data)\n",[89,104488,104489],{"__ignoreMap":10},[92,104490,104491],{"class":94,"line":95},[92,104492,104486],{"class":102},[38,104494,104495,104496,315,104498,315,104500,28367],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[89,104497,101051],{},[89,104499,101054],{},[89,104501,101048],{},[38,104503,104504],{},"重置仿真:",[83,104506,104508],{"className":30360,"code":104507,"language":30362,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\n",[89,104509,104510],{"__ignoreMap":10},[92,104511,104512],{"class":94,"line":95},[92,104513,104507],{"class":102},[38,104515,104516,104517,82521,104519,104521],{},"如果手动修改了 ",[89,104518,101051],{},[89,104520,101054],{},"，通常应调用:",[83,104523,104525],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},"mujoco.mj_forward(model, data)\n",[89,104526,104527],{"__ignoreMap":10},[92,104528,104529],{"class":94,"line":95},[92,104530,104524],{"class":102},[38,104532,104533],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[63,104535,104537,315,104539,315,104541,104543],{"id":104536},"qposqvelctrl-是什么",[89,104538,104011],{},[89,104540,104341],{},[89,104542,104344],{}," 是什么",[38,104545,104546],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[240,104548,104549,104561],{},[243,104550,104551],{},[246,104552,104553,104556,104558],{},[249,104554,104555],{"align":23717},"字段",[249,104557,100681],{"align":23717},[249,104559,104560],{"align":23717},"谁来修改",[287,104562,104563,104575,104587],{},[246,104564,104565,104569,104572],{},[292,104566,104567],{"align":23717},[89,104568,101051],{},[292,104570,104571],{"align":23717},"广义位置，例如小车位置、关节角、自由物体位置姿态",[292,104573,104574],{"align":23717},"MuJoCo 更新，也可以手动设置初始状态",[246,104576,104577,104581,104584],{},[292,104578,104579],{"align":23717},[89,104580,101054],{},[292,104582,104583],{"align":23717},"广义速度，例如小车速度、关节角速度",[292,104585,104586],{"align":23717},"MuJoCo 更新，也可以手动清零",[246,104588,104589,104593,104596],{},[292,104590,104591],{"align":23717},[89,104592,101057],{},[292,104594,104595],{"align":23717},"actuator 的控制输入",[292,104597,104598],{"align":23717},"主要由你的控制代码写入",[38,104600,9005,104601,100999,104603,104605],{},[89,104602,104011],{},[89,104604,104341],{}," 不一定同维。自由刚体就是典型例子：",[83,104607,104610],{"className":104608,"code":104609,"language":5167,"meta":10},[5165],"freejoint: qpos 7 维，qvel 6 维\n",[89,104611,104609],{"__ignoreMap":10},[63,104613,104615,100999,104617,104619],{"id":104614},"mj_step-和-mj_forward-的区别",[89,104616,101196],{},[89,104618,104231],{}," 的区别",[240,104621,104622,104635],{},[243,104623,104624],{},[246,104625,104626,104629,104632],{},[249,104627,104628],{"align":23717},"函数",[249,104630,104631],{"align":23717},"是否推进时间",[249,104633,104634],{"align":23717},"什么时候用",[287,104636,104637,104650],{},[246,104638,104639,104644,104647],{},[292,104640,104641],{"align":23717},[89,104642,104643],{},"mj_step(model, data)",[292,104645,104646],{"align":23717},"是",[292,104648,104649],{"align":23717},"正常仿真循环，每调用一次前进一步",[246,104651,104652,104657,104660],{},[292,104653,104654],{"align":23717},[89,104655,104656],{},"mj_forward(model, data)",[292,104658,104659],{"align":23717},"否",[292,104661,104662,104663,315,104665,104667],{"align":23717},"手动改了 ",[89,104664,104011],{},[89,104666,104341],{}," 后，刷新派生量",[38,104669,104670],{},"例如你写：",[83,104672,104674],{"className":30360,"code":104673,"language":30362,"meta":10,"style":10},"data.qpos[2] = 2.0\n",[89,104675,104676],{"__ignoreMap":10},[92,104677,104678,104681,104683,104685,104687],{"class":94,"line":95},[92,104679,104680],{"class":102},"data.qpos[",[92,104682,180],{"class":151},[92,104684,4422],{"class":102},[92,104686,148],{"class":98},[92,104688,104689],{"class":151}," 2.0\n",[38,104691,104692],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[83,104694,104695],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},[89,104696,104697],{"__ignoreMap":10},[92,104698,104699],{"class":94,"line":95},[92,104700,104524],{"class":102},[63,104702,104704],{"id":104703},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[38,104706,104707,104710,104711,104713],{},[89,104708,104709],{},"mujoco.mj_resetData(model, data)"," 会把 ",[89,104712,33383],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[83,104715,104717],{"className":30360,"code":104716,"language":30362,"meta":10,"style":10},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[89,104718,104719,104723,104733,104743],{"__ignoreMap":10},[92,104720,104721],{"class":94,"line":95},[92,104722,104507],{"class":102},[92,104724,104725,104728,104730],{"class":94,"line":11},[92,104726,104727],{"class":102},"data.qpos[:] ",[92,104729,148],{"class":98},[92,104731,104732],{"class":102}," random_qpos\n",[92,104734,104735,104738,104740],{"class":94,"line":1158},[92,104736,104737],{"class":102},"data.qvel[:] ",[92,104739,148],{"class":98},[92,104741,104742],{"class":151}," 0.0\n",[92,104744,104745],{"class":94,"line":1173},[92,104746,104524],{"class":102},[33,104748,101234],{"id":101233},[83,104750,104752],{"className":30360,"code":104751,"language":30362,"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,104753,104754,104760,104770,104774,104778,104786,104791,104795,104799,104803,104808,104812,104817,104822,104827,104831,104835,104839,104843,104847,104851,104870,104877,104889,104900,104916,104932,104936,104940,104952,104964,104972,104976,104987,104991,105007,105011,105015,105024,105028,105033,105042,105046,105059,105064,105073,105077,105081,105093],{"__ignoreMap":10},[92,104755,104756,104758],{"class":94,"line":95},[92,104757,30374],{"class":98},[92,104759,101282],{"class":102},[92,104761,104762,104764,104766,104768],{"class":94,"line":11},[92,104763,30374],{"class":98},[92,104765,31362],{"class":102},[92,104767,31365],{"class":98},[92,104769,31368],{"class":102},[92,104771,104772],{"class":94,"line":1158},[92,104773,2379],{"emptyLinePlaceholder":17},[92,104775,104776],{"class":94,"line":1173},[92,104777,2379],{"emptyLinePlaceholder":17},[92,104779,104780,104782,104784],{"class":94,"line":1179},[92,104781,101295],{"class":151},[92,104783,13544],{"class":98},[92,104785,101300],{"class":207},[92,104787,104788],{"class":94,"line":1193},[92,104789,104790],{"class":207},"\u003Cmujoco model=\"state_api\">\n",[92,104792,104793],{"class":94,"line":1199},[92,104794,101310],{"class":207},[92,104796,104797],{"class":94,"line":1290},[92,104798,2379],{"emptyLinePlaceholder":17},[92,104800,104801],{"class":94,"line":1296},[92,104802,101319],{"class":207},[92,104804,104805],{"class":94,"line":1308},[92,104806,104807],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[92,104809,104810],{"class":94,"line":1591},[92,104811,2379],{"emptyLinePlaceholder":17},[92,104813,104814],{"class":94,"line":1596},[92,104815,104816],{"class":207},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[92,104818,104819],{"class":94,"line":1602},[92,104820,104821],{"class":207},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[92,104823,104824],{"class":94,"line":1607},[92,104825,104826],{"class":207},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[92,104828,104829],{"class":94,"line":1621},[92,104830,101348],{"class":207},[92,104832,104833],{"class":94,"line":1626},[92,104834,101353],{"class":207},[92,104836,104837],{"class":94,"line":1632},[92,104838,101358],{"class":207},[92,104840,104841],{"class":94,"line":1653},[92,104842,95679],{"class":207},[92,104844,104845],{"class":94,"line":1658},[92,104846,2379],{"emptyLinePlaceholder":17},[92,104848,104849],{"class":94,"line":1672},[92,104850,2379],{"emptyLinePlaceholder":17},[92,104852,104853,104855,104858,104861,104863,104866,104868],{"class":94,"line":1677},[92,104854,31929],{"class":98},[92,104856,104857],{"class":1942}," print_state",[92,104859,104860],{"class":102},"(prefix: ",[92,104862,1278],{"class":151},[92,104864,104865],{"class":102},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[92,104867,95667],{"class":151},[92,104869,3718],{"class":102},[92,104871,104872,104874],{"class":94,"line":1706},[92,104873,31281],{"class":151},[92,104875,104876],{"class":102},"(prefix)\n",[92,104878,104879,104881,104883,104886],{"class":94,"line":1711},[92,104880,31281],{"class":151},[92,104882,103],{"class":102},[92,104884,104885],{"class":207},"\"  timestep:\"",[92,104887,104888],{"class":102},", model.opt.timestep)\n",[92,104890,104891,104893,104895,104898],{"class":94,"line":1728},[92,104892,31281],{"class":151},[92,104894,103],{"class":102},[92,104896,104897],{"class":207},"\"  time:\"",[92,104899,101459],{"class":102},[92,104901,104902,104904,104906,104909,104912,104914],{"class":94,"line":1733},[92,104903,31281],{"class":151},[92,104905,103],{"class":102},[92,104907,104908],{"class":207},"\"  qpos:\"",[92,104910,104911],{"class":102},", np.round(data.qpos.copy(), ",[92,104913,396],{"class":151},[92,104915,30479],{"class":102},[92,104917,104918,104920,104922,104925,104928,104930],{"class":94,"line":1738},[92,104919,31281],{"class":151},[92,104921,103],{"class":102},[92,104923,104924],{"class":207},"\"  qvel:\"",[92,104926,104927],{"class":102},", np.round(data.qvel.copy(), ",[92,104929,396],{"class":151},[92,104931,30479],{"class":102},[92,104933,104934],{"class":94,"line":1743},[92,104935,2379],{"emptyLinePlaceholder":17},[92,104937,104938],{"class":94,"line":1757},[92,104939,2379],{"emptyLinePlaceholder":17},[92,104941,104942,104944,104946,104948,104950],{"class":94,"line":1762},[92,104943,31929],{"class":98},[92,104945,1952],{"class":1942},[92,104947,101379],{"class":102},[92,104949,95667],{"class":151},[92,104951,3718],{"class":102},[92,104953,104954,104956,104958,104960,104962],{"class":94,"line":2556},[92,104955,101388],{"class":102},[92,104957,148],{"class":98},[92,104959,101393],{"class":102},[92,104961,101295],{"class":151},[92,104963,109],{"class":102},[92,104965,104966,104968,104970],{"class":94,"line":2570},[92,104967,101402],{"class":102},[92,104969,148],{"class":98},[92,104971,101407],{"class":102},[92,104973,104974],{"class":94,"line":2578},[92,104975,2379],{"emptyLinePlaceholder":17},[92,104977,104978,104981,104984],{"class":94,"line":2583},[92,104979,104980],{"class":102},"    print_state(",[92,104982,104983],{"class":207},"\"initial\"",[92,104985,104986],{"class":102},", model, data)\n",[92,104988,104989],{"class":94,"line":2589},[92,104990,2379],{"emptyLinePlaceholder":17},[92,104992,104993,104995,104997,104999,105001,105003,105005],{"class":94,"line":2595},[92,104994,3180],{"class":98},[92,104996,101482],{"class":102},[92,104998,26025],{"class":98},[92,105000,32425],{"class":151},[92,105002,103],{"class":102},[92,105004,759],{"class":151},[92,105006,30768],{"class":102},[92,105008,105009],{"class":94,"line":2600},[92,105010,101497],{"class":102},[92,105012,105013],{"class":94,"line":7928},[92,105014,2379],{"emptyLinePlaceholder":17},[92,105016,105017,105019,105022],{"class":94,"line":7952},[92,105018,104980],{"class":102},[92,105020,105021],{"class":207},"\"after 50 steps\"",[92,105023,104986],{"class":102},[92,105025,105026],{"class":94,"line":7957},[92,105027,2379],{"emptyLinePlaceholder":17},[92,105029,105030],{"class":94,"line":7963},[92,105031,105032],{"class":102},"    mujoco.mj_resetData(model, data)\n",[92,105034,105035,105037,105040],{"class":94,"line":7990},[92,105036,104980],{"class":102},[92,105038,105039],{"class":207},"\"after reset\"",[92,105041,104986],{"class":102},[92,105043,105044],{"class":94,"line":7995},[92,105045,2379],{"emptyLinePlaceholder":17},[92,105047,105048,105051,105053,105055,105057],{"class":94,"line":8001},[92,105049,105050],{"class":102},"    data.qpos[",[92,105052,180],{"class":151},[92,105054,4422],{"class":102},[92,105056,148],{"class":98},[92,105058,104689],{"class":151},[92,105060,105061],{"class":94,"line":8013},[92,105062,105063],{"class":102},"    mujoco.mj_forward(model, data)\n",[92,105065,105066,105068,105071],{"class":94,"line":8025},[92,105067,104980],{"class":102},[92,105069,105070],{"class":207},"\"after manual qpos edit\"",[92,105072,104986],{"class":102},[92,105074,105075],{"class":94,"line":8037},[92,105076,2379],{"emptyLinePlaceholder":17},[92,105078,105079],{"class":94,"line":9696},[92,105080,2379],{"emptyLinePlaceholder":17},[92,105082,105083,105085,105087,105089,105091],{"class":94,"line":9721},[92,105084,1510],{"class":98},[92,105086,31202],{"class":151},[92,105088,101540],{"class":98},[92,105090,101543],{"class":207},[92,105092,3718],{"class":102},[92,105094,105095],{"class":94,"line":9744},[92,105096,101550],{"class":102},[38,105098,103551],{},[83,105100,105102],{"className":23803,"code":105101,"language":23805,"meta":10,"style":10},"touch ch3_python_state.py\n",[89,105103,105104],{"__ignoreMap":10},[92,105105,105106,105108],{"class":94,"line":95},[92,105107,101264],{"class":1942},[92,105109,105110],{"class":207}," ch3_python_state.py\n",[38,105112,102282],{},[83,105114,105116],{"className":23803,"code":105115,"language":23805,"meta":10,"style":10},"python ch3_python_state.py\n",[89,105117,105118],{"__ignoreMap":10},[92,105119,105120,105122],{"class":94,"line":95},[92,105121,30362],{"class":1942},[92,105123,105110],{"class":207},[63,105125,101553],{"id":101553},[38,105127,105128],{},"打印状态的函数：",[83,105130,105132],{"className":30360,"code":105131,"language":30362,"meta":10,"style":10},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[89,105133,105134],{"__ignoreMap":10},[92,105135,105136,105138,105140,105142,105144,105146,105148],{"class":94,"line":95},[92,105137,31929],{"class":98},[92,105139,104857],{"class":1942},[92,105141,104860],{"class":102},[92,105143,1278],{"class":151},[92,105145,104865],{"class":102},[92,105147,95667],{"class":151},[92,105149,3718],{"class":102},[38,105151,105152,105153,105155],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[89,105154,33383],{}," 里发生了什么。",[38,105157,105158],{},"推进 50 步：",[83,105160,105162],{"className":30360,"code":105161,"language":30362,"meta":10,"style":10},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[89,105163,105164,105180],{"__ignoreMap":10},[92,105165,105166,105168,105170,105172,105174,105176,105178],{"class":94,"line":95},[92,105167,3004],{"class":98},[92,105169,101482],{"class":102},[92,105171,26025],{"class":98},[92,105173,32425],{"class":151},[92,105175,103],{"class":102},[92,105177,759],{"class":151},[92,105179,30768],{"class":102},[92,105181,105182],{"class":94,"line":11},[92,105183,101680],{"class":102},[38,105185,105186,105187,105190,105191,105193],{},"由于 ",[89,105188,105189],{},"timestep=0.01","，所以 50 步后时间约为 ",[89,105192,35311],{}," 秒。",[38,105195,105196],{},"重置：",[83,105198,105199],{"className":30360,"code":104507,"language":30362,"meta":10,"style":10},[89,105200,105201],{"__ignoreMap":10},[92,105202,105203],{"class":94,"line":95},[92,105204,104507],{"class":102},[38,105206,105207],{},"这会把时间、位置、速度恢复到初始状态。",[38,105209,105210],{},"手动改高度：",[83,105212,105214],{"className":30360,"code":105213,"language":30362,"meta":10,"style":10},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[89,105215,105216,105228],{"__ignoreMap":10},[92,105217,105218,105220,105222,105224,105226],{"class":94,"line":95},[92,105219,104680],{"class":102},[92,105221,180],{"class":151},[92,105223,4422],{"class":102},[92,105225,148],{"class":98},[92,105227,104689],{"class":151},[92,105229,105230],{"class":94,"line":11},[92,105231,104524],{"class":102},[38,105233,105234,105235,105238,105239,105242],{},"这个例子里 ",[89,105236,105237],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[89,105240,105241],{},"2.0"," 表示把小球放到更高的位置。",[63,105244,101689],{"id":101689},[83,105246,105247],{"className":30360,"code":105131,"language":30362,"meta":10,"style":10},[89,105248,105249],{"__ignoreMap":10},[92,105250,105251,105253,105255,105257,105259,105261,105263],{"class":94,"line":95},[92,105252,31929],{"class":98},[92,105254,104857],{"class":1942},[92,105256,104860],{"class":102},[92,105258,1278],{"class":151},[92,105260,104865],{"class":102},[92,105262,95667],{"class":151},[92,105264,3718],{"class":102},[38,105266,105267],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[46,105269,105270,105279,105284],{},[49,105271,105272,105275,105276,105278],{},[89,105273,105274],{},"prefix","：一段文字，比如 ",[89,105277,104983],{},"，用来说明现在打印的是哪个阶段。",[49,105280,105281,105283],{},[89,105282,102066],{},"：MuJoCo 模型。",[49,105285,105286,105288],{},[89,105287,33383],{},"：MuJoCo 当前状态。",[38,105290,105291,315,105294,105297],{},[89,105292,105293],{},"prefix: str",[89,105295,105296],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[83,105299,105301],{"className":30360,"code":105300,"language":30362,"meta":10,"style":10},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[89,105302,105303],{"__ignoreMap":10},[92,105304,105305,105307,105309,105311,105313,105315],{"class":94,"line":95},[92,105306,30397],{"class":151},[92,105308,103],{"class":102},[92,105310,104908],{"class":207},[92,105312,104911],{"class":102},[92,105314,396],{"class":151},[92,105316,30479],{"class":102},[38,105318,105319,105322],{},[89,105320,105321],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[83,105324,105326],{"className":30360,"code":105325,"language":30362,"meta":10,"style":10},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[89,105327,105328,105340],{"__ignoreMap":10},[92,105329,105330,105332,105334,105336,105338],{"class":94,"line":95},[92,105331,101615],{"class":102},[92,105333,148],{"class":98},[92,105335,101393],{"class":102},[92,105337,101295],{"class":151},[92,105339,109],{"class":102},[92,105341,105342,105344,105346],{"class":94,"line":11},[92,105343,101639],{"class":102},[92,105345,148],{"class":98},[92,105347,101407],{"class":102},[38,105349,105350],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[83,105352,105354],{"className":30360,"code":105353,"language":30362,"meta":10,"style":10},"print_state(\"initial\", model, data)\n",[89,105355,105356],{"__ignoreMap":10},[92,105357,105358,105361,105363],{"class":94,"line":95},[92,105359,105360],{"class":102},"print_state(",[92,105362,104983],{"class":207},[92,105364,104986],{"class":102},[38,105366,105367,105368,105371],{},"调用刚才定义的 ",[89,105369,105370],{},"print_state"," 函数，打印初始状态。",[83,105373,105374],{"className":30360,"code":105161,"language":30362,"meta":10,"style":10},[89,105375,105376,105392],{"__ignoreMap":10},[92,105377,105378,105380,105382,105384,105386,105388,105390],{"class":94,"line":95},[92,105379,3004],{"class":98},[92,105381,101482],{"class":102},[92,105383,26025],{"class":98},[92,105385,32425],{"class":151},[92,105387,103],{"class":102},[92,105389,759],{"class":151},[92,105391,30768],{"class":102},[92,105393,105394],{"class":94,"line":11},[92,105395,101680],{"class":102},[38,105397,105398],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[83,105400,105401],{"className":30360,"code":104507,"language":30362,"meta":10,"style":10},[89,105402,105403],{"__ignoreMap":10},[92,105404,105405],{"class":94,"line":95},[92,105406,104507],{"class":102},[38,105408,105409,105410,105412,105413,105415],{},"重置 ",[89,105411,33383],{},"。注意它不会重新创建 ",[89,105414,102066],{},"，因为模型结构没有变，只是状态回到初始值。",[83,105417,105418],{"className":30360,"code":104673,"language":30362,"meta":10,"style":10},[89,105419,105420],{"__ignoreMap":10},[92,105421,105422,105424,105426,105428,105430],{"class":94,"line":95},[92,105423,104680],{"class":102},[92,105425,180],{"class":151},[92,105427,4422],{"class":102},[92,105429,148],{"class":98},[92,105431,104689],{"class":151},[38,105433,105434,105435,315,105438,315,105441,105443],{},"这行是“手动改状态”。在 freejoint 中，",[89,105436,105437],{},"qpos[0]",[89,105439,105440],{},"qpos[1]",[89,105442,105237],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[83,105445,105446],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},[89,105447,105448],{"__ignoreMap":10},[92,105449,105450],{"class":94,"line":95},[92,105451,104524],{"class":102},[38,105453,105454,105455,105457,105458,105460],{},"手动改完 ",[89,105456,104011],{}," 后，调用 ",[89,105459,104231],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[33,105462,102297],{"id":102296},[38,105464,105465],{},"你会看到:",[46,105467,105468,105473,105478,105481],{},[49,105469,105470,105471],{},"初始时间为 ",[89,105472,294],{},[49,105474,105475,105476],{},"50 步后时间约为 ",[89,105477,35311],{},[49,105479,105480],{},"reset 后状态恢复",[49,105482,105483,105484,105487,105488],{},"手动修改 ",[89,105485,105486],{},"data.qpos[2]"," 后，小球高度变为 ",[89,105489,105241],{},[38,105491,105492,105494],{},[89,105493,105237],{}," 在这个例子中表示自由刚体的 z 坐标。",[38,105496,105497],{},"输出里可以重点看三件事：",[46,105499,105500,105508,105513],{},[49,105501,105502,105504,105505,105507],{},[89,105503,2366],{}," 是否随着 ",[89,105506,101196],{}," 增加。",[49,105509,105510,105512],{},[89,105511,104011],{}," 的 z 坐标是否因为下落而变化。",[49,105514,105515,105517,105518,28367],{},[89,105516,104333],{}," 后时间是否回到 ",[89,105519,294],{},[33,105521,102329],{"id":102328},[46,105523,105524,105530,105536,105542,105545,105554],{},[49,105525,105526,105527,28367],{},"修改 timestep 为 ",[89,105528,105529],{},"0.005",[49,105531,105532,105533,28367],{},"重新运行，检查 50 步后时间是否约为 ",[89,105534,105535],{},"0.25",[49,105537,105538,105539,28367],{},"修改重力为 ",[89,105540,105541],{},"0 0 -1.0",[49,105543,105544],{},"观察小球下降速度是否变慢。",[49,105546,102392,105547,102395,105550,105553],{},[89,105548,105549],{},"data.qpos[2] = 2.0",[89,105551,105552],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[49,105555,105556,105557,105560],{},"注释掉 ",[89,105558,105559],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[33,105562,102434],{"id":102433},[63,105564,105566,105567,105569],{"id":105565},"修改-dataqpos-后位置没有更新","修改 ",[89,105568,101051],{}," 后位置没有更新",[38,105571,102443],{},[83,105573,105574],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},[89,105575,105576],{"__ignoreMap":10},[92,105577,105578],{"class":94,"line":95},[92,105579,104524],{"class":102},[63,105581,105582],{"id":105582},"数组维度看不懂",[38,105584,105585],{},"打印模型维度:",[83,105587,105589],{"className":30360,"code":105588,"language":30362,"meta":10,"style":10},"print(model.nq, model.nv, model.nu)\n",[89,105590,105591],{"__ignoreMap":10},[92,105592,105593,105595],{"class":94,"line":95},[92,105594,30397],{"class":151},[92,105596,105597],{"class":102},"(model.nq, model.nv, model.nu)\n",[240,105599,105600,105608],{},[243,105601,105602],{},[246,105603,105604,105606],{},[249,105605,104555],{"align":23717},[249,105607,100681],{"align":23717},[287,105609,105610,105620,105630],{},[246,105611,105612,105617],{},[292,105613,105614],{"align":23717},[89,105615,105616],{},"nq",[292,105618,105619],{"align":23717},"位置变量数量",[246,105621,105622,105627],{},[292,105623,105624],{"align":23717},[89,105625,105626],{},"nv",[292,105628,105629],{"align":23717},"速度变量数量",[246,105631,105632,105636],{},[292,105633,105634],{"align":23717},[89,105635,102143],{},[292,105637,105638],{"align":23717},"控制输入数量",[63,105640,105642,105643,105645],{"id":105641},"误以为-qpos-一定等于关节数","误以为 ",[89,105644,104011],{}," 一定等于关节数",[38,105647,105648,105649,82512,105651,105653,105654,105656],{},"不是。例如 ",[89,105650,101601],{},[89,105652,104011],{}," 是 7 维，但 ",[89,105655,104341],{}," 是 6 维。",[63,105658,105660,105661,105663],{"id":105659},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[89,105662,104011],{}," 的第几位",[38,105665,105666],{},"初学时可以先打印：",[83,105668,105670],{"className":30360,"code":105669,"language":30362,"meta":10,"style":10},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[89,105671,105672,105682,105692,105704],{"__ignoreMap":10},[92,105673,105674,105676,105678,105680],{"class":94,"line":95},[92,105675,30397],{"class":151},[92,105677,103],{"class":102},[92,105679,101420],{"class":207},[92,105681,101423],{"class":102},[92,105683,105684,105686,105688,105690],{"class":94,"line":11},[92,105685,30397],{"class":151},[92,105687,103],{"class":102},[92,105689,101432],{"class":207},[92,105691,101435],{"class":102},[92,105693,105694,105696,105698,105701],{"class":94,"line":1158},[92,105695,30397],{"class":151},[92,105697,103],{"class":102},[92,105699,105700],{"class":207},"\"qpos:\"",[92,105702,105703],{"class":102},", data.qpos)\n",[92,105705,105706,105708,105710,105713],{"class":94,"line":1173},[92,105707,30397],{"class":151},[92,105709,103],{"class":102},[92,105711,105712],{"class":207},"\"qvel:\"",[92,105714,105715],{"class":102},", data.qvel)\n",[38,105717,105718],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[63,105720,105721],{"id":105721},"仿真结果每次都一样",[38,105723,105724,105725,105727],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[89,105726,104011],{},"、目标点或控制输入。",[33,105729,102588],{"id":102587},[38,105731,105732,105733,24600],{},"Python 控制 MuJoCo 的核心就是读写 ",[89,105734,33383],{},[46,105736,105737,105745,105750,105755],{},[49,105738,105739,105740,100999,105742,105744],{},"用 ",[89,105741,101051],{},[89,105743,101054],{}," 读取状态。",[49,105746,105739,105747,105749],{},[89,105748,101057],{}," 写入控制。",[49,105751,105739,105752,105754],{},[89,105753,101196],{}," 推进时间。",[49,105756,105757,105758,105760],{},"手动改状态后用 ",[89,105759,104231],{}," 刷新派生量。",[38,105762,105763],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5106,105765,105766],{},"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":105768},[105769,105770,105771,105778,105782,105783,105784,105794],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":105772},[105773,105775,105777],{"id":104536,"depth":1158,"text":105774},"qpos、qvel、ctrl 是什么",{"id":104614,"depth":1158,"text":105776},"mj_step 和 mj_forward 的区别",{"id":104703,"depth":1158,"text":104704},{"id":101233,"depth":11,"text":101234,"children":105779},[105780,105781],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":105785},[105786,105788,105789,105791,105793],{"id":105565,"depth":1158,"text":105787},"修改 data.qpos 后位置没有更新",{"id":105582,"depth":1158,"text":105582},{"id":105641,"depth":1158,"text":105790},"误以为 qpos 一定等于关节数",{"id":105659,"depth":1158,"text":105792},"不知道某个元素在 qpos 的第几位",{"id":105721,"depth":1158,"text":105721},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104299,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105801,"title":105802,"body":105803,"description":10,"extension":14,"meta":107493,"navigation":17,"path":107494,"seo":107495,"stem":107496,"__hash__":107497},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105804,"toc":107469},[105805,105808,105810,105813,105815,105840,105843,105862,105865,105867,105869,105893,105895,105909,105911,105952,105954,105978,105980,105983,106017,106019,106032,106035,106103,106112,106116,106119,106153,106159,106162,106166,106205,106208,106228,106232,106275,106277,106306,106309,106315,106318,106320,106714,106716,106728,106730,106741,106743,106746,106775,106783,106786,106821,106824,106826,106834,106837,106839,106850,106860,106880,106883,106919,106931,106979,106998,107040,107053,107081,107086,107107,107117,107135,107138,107172,107175,107195,107198,107217,107223,107225,107228,107234,107240,107250,107253,107259,107268,107270,107316,107318,107324,107330,107333,107336,107356,107359,107365,107371,107373,107396,107399,107402,107411,107414,107452,107454,107457,107463,107466],[29,105806,105802],{"id":105807},"_4关节actuator-与力控制",[33,105809,100628],{"id":100627},[38,105811,105812],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[38,105814,104312],{},[46,105816,105817,105823,105828,105832,105837],{},[49,105818,105819,105822],{},[89,105820,105821],{},"hinge"," 关节",[49,105824,105825],{},[89,105826,105827],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[49,105829,105830],{},[89,105831,101057],{},[49,105833,105834],{},[89,105835,105836],{},"ctrlrange",[49,105838,105839],{},"读取关节角和角速度",[38,105841,105842],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[83,105844,105846],{"className":30360,"code":105845,"language":30362,"meta":10,"style":10},"data.ctrl[0] = ...\n",[89,105847,105848],{"__ignoreMap":10},[92,105849,105850,105853,105855,105857,105859],{"class":94,"line":95},[92,105851,105852],{"class":102},"data.ctrl[",[92,105854,294],{"class":151},[92,105856,4422],{"class":102},[92,105858,148],{"class":98},[92,105860,105861],{"class":151}," ...\n",[38,105863,105864],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[33,105866,100751],{"id":100750},[38,105868,100754],{},[83,105870,105871],{"className":23803,"code":104369,"language":23805,"meta":10,"style":10},[89,105872,105873],{"__ignoreMap":10},[92,105874,105875,105877,105879,105881,105883,105885,105887,105889,105891],{"class":94,"line":95},[92,105876,24558],{"class":1942},[92,105878,26297],{"class":207},[92,105880,23815],{"class":207},[92,105882,26382],{"class":151},[92,105884,104384],{"class":207},[92,105886,100779],{"class":207},[92,105888,102482],{"class":207},[92,105890,100795],{"class":207},[92,105892,104393],{"class":207},[38,105894,102800],{},[83,105896,105897],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},[89,105898,105899],{"__ignoreMap":10},[92,105900,105901,105903,105905,105907],{"class":94,"line":95},[92,105902,23812],{"class":1942},[92,105904,23815],{"class":207},[92,105906,100911],{"class":207},[92,105908,100914],{"class":207},[38,105910,102817],{},[83,105912,105914],{"className":23803,"code":105913,"language":23805,"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,105915,105916,105933,105942],{"__ignoreMap":10},[92,105917,105918,105920,105922,105924,105927,105929,105931],{"class":94,"line":95},[92,105919,30312],{"class":1942},[92,105921,29158],{"class":207},[92,105923,25097],{"class":151},[92,105925,105926],{"class":207}," mujoco-control",[92,105928,100956],{"class":207},[92,105930,100959],{"class":151},[92,105932,100962],{"class":151},[92,105934,105935,105937,105939],{"class":94,"line":11},[92,105936,30312],{"class":1942},[92,105938,100969],{"class":207},[92,105940,105941],{"class":207}," mujoco-control\n",[92,105943,105944,105946,105948,105950],{"class":94,"line":1158},[92,105945,23812],{"class":1942},[92,105947,23815],{"class":207},[92,105949,100911],{"class":207},[92,105951,100914],{"class":207},[38,105953,100985],{},[46,105955,105956,105962,105969,105975],{},[49,105957,105958,105961],{},[89,105959,105960],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[49,105963,105964,105966,105967,28367],{},[89,105965,101057],{}," 长度等于 ",[89,105968,102139],{},[49,105970,82204,105971,105974],{},[89,105972,105973],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[49,105976,105977],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[33,105979,101026],{"id":101025},[38,105981,105982],{},"关节决定 body 如何运动:",[83,105984,105986],{"className":53049,"code":105985,"language":53051,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[89,105987,105988],{"__ignoreMap":10},[92,105989,105990,105992,105994,105996,105998,106001,106003,106005,106007,106010,106012,106015],{"class":94,"line":95},[92,105991,1013],{"class":102},[92,105993,102937],{"class":51282},[92,105995,14900],{"class":1942},[92,105997,148],{"class":102},[92,105999,106000],{"class":207},"\"hinge\"",[92,106002,53806],{"class":1942},[92,106004,148],{"class":102},[92,106006,106000],{"class":207},[92,106008,106009],{"class":1942}," axis",[92,106011,148],{"class":102},[92,106013,106014],{"class":207},"\"0 1 0\"",[92,106016,101125],{"class":102},[38,106018,103033],{},[46,106020,106021,106026,106029],{},[49,106022,106023,106024],{},"名字是 ",[89,106025,105821],{},[49,106027,106028],{},"类型是旋转关节",[49,106030,106031],{},"绕 y 轴旋转",[38,106033,106034],{},"actuator 决定如何施加控制:",[83,106036,106038],{"className":53049,"code":106037,"language":53051,"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,106039,106040,106049,106095],{"__ignoreMap":10},[92,106041,106042,106044,106047],{"class":94,"line":95},[92,106043,1013],{"class":102},[92,106045,106046],{"class":51282},"actuator",[92,106048,51289],{"class":102},[92,106050,106051,106053,106056,106058,106060,106063,106066,106068,106070,106073,106075,106077,106080,106082,106085,106088,106090,106093],{"class":94,"line":11},[92,106052,52126],{"class":102},[92,106054,106055],{"class":51282},"motor",[92,106057,14900],{"class":1942},[92,106059,148],{"class":102},[92,106061,106062],{"class":207},"\"hinge_motor\"",[92,106064,106065],{"class":1942}," joint",[92,106067,148],{"class":102},[92,106069,106000],{"class":207},[92,106071,106072],{"class":1942}," gear",[92,106074,148],{"class":102},[92,106076,3657],{"class":207},[92,106078,106079],{"class":1942}," ctrlrange",[92,106081,148],{"class":102},[92,106083,106084],{"class":207},"\"-2 2\"",[92,106086,106087],{"class":1942}," ctrllimited",[92,106089,148],{"class":102},[92,106091,106092],{"class":207},"\"true\"",[92,106094,101125],{"class":102},[92,106096,106097,106099,106101],{"class":94,"line":1158},[92,106098,51767],{"class":102},[92,106100,106046],{"class":51282},[92,106102,51289],{"class":102},[38,106104,106105,106108,106109,28367],{},[89,106106,106107],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[89,106110,106111],{},"[-2, 2]",[63,106113,106115],{"id":106114},"joint-和-actuator-的关系","joint 和 actuator 的关系",[38,106117,106118],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[240,106120,106121,106131],{},[243,106122,106123],{},[246,106124,106125,106127,106129],{},[249,106126,25735],{"align":23717},[249,106128,102677],{"align":23717},[249,106130,100715],{"align":23717},[287,106132,106133,106143],{},[246,106134,106135,106137,106140],{},[292,106136,102937],{"align":23717},[292,106138,106139],{"align":23717},"定义能怎么动",[292,106141,106142],{"align":23717},"门轴允许门旋转",[246,106144,106145,106147,106150],{},[292,106146,106046],{"align":23717},[292,106148,106149],{"align":23717},"定义怎么施力或控制",[292,106151,106152],{"align":23717},"人推门、马达带动门",[38,106154,106155,106156,106158],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[89,106157,101057],{}," 主动控制它。",[38,106160,106161],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[63,106163,106165],{"id":106164},"hinge-joint","hinge joint",[83,106167,106169],{"className":53049,"code":106168,"language":53051,"meta":10,"style":10},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[89,106170,106171],{"__ignoreMap":10},[92,106172,106173,106175,106177,106179,106181,106183,106185,106187,106189,106191,106193,106195,106198,106200,106203],{"class":94,"line":95},[92,106174,1013],{"class":102},[92,106176,102937],{"class":51282},[92,106178,14900],{"class":1942},[92,106180,148],{"class":102},[92,106182,106000],{"class":207},[92,106184,53806],{"class":1942},[92,106186,148],{"class":102},[92,106188,106000],{"class":207},[92,106190,106009],{"class":1942},[92,106192,148],{"class":102},[92,106194,106014],{"class":207},[92,106196,106197],{"class":1942}," damping",[92,106199,148],{"class":102},[92,106201,106202],{"class":207},"\"0.1\"",[92,106204,101125],{"class":102},[38,106206,106207],{},"含义：",[46,106209,106210,106216,106222],{},[49,106211,106212,106215],{},[89,106213,106214],{},"type=\"hinge\"","：只能绕一个轴旋转。",[49,106217,106218,106221],{},[89,106219,106220],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[49,106223,106224,106227],{},[89,106225,106226],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[63,106229,106231],{"id":106230},"motor-actuator","motor actuator",[83,106233,106235],{"className":53049,"code":106234,"language":53051,"meta":10,"style":10},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[89,106236,106237],{"__ignoreMap":10},[92,106238,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273],{"class":94,"line":95},[92,106240,1013],{"class":102},[92,106242,106055],{"class":51282},[92,106244,14900],{"class":1942},[92,106246,148],{"class":102},[92,106248,106062],{"class":207},[92,106250,106065],{"class":1942},[92,106252,148],{"class":102},[92,106254,106000],{"class":207},[92,106256,106072],{"class":1942},[92,106258,148],{"class":102},[92,106260,3657],{"class":207},[92,106262,106079],{"class":1942},[92,106264,148],{"class":102},[92,106266,106084],{"class":207},[92,106268,106087],{"class":1942},[92,106270,148],{"class":102},[92,106272,106092],{"class":207},[92,106274,101125],{"class":102},[38,106276,106207],{},[46,106278,106279,106288,106294,106300],{},[49,106280,106281,106284,106285,106287],{},[89,106282,106283],{},"joint=\"hinge\"","：这个电机作用在名为 ",[89,106286,105821],{}," 的关节上。",[49,106289,106290,106293],{},[89,106291,106292],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[49,106295,106296,106299],{},[89,106297,106298],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[49,106301,106302,106305],{},[89,106303,106304],{},"ctrllimited=\"true\"","：启用控制范围限制。",[38,106307,106308],{},"简单理解：",[83,106310,106313],{"className":106311,"code":106312,"language":5167,"meta":10},[5165],"实际施加效果 ≈ data.ctrl[0] * gear\n",[89,106314,106312],{"__ignoreMap":10},[38,106316,106317],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[33,106319,101234],{"id":101233},[83,106321,106323],{"className":30360,"code":106322,"language":30362,"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,106324,106325,106332,106336,106342,106352,106356,106360,106368,106373,106378,106382,106386,106391,106396,106400,106405,106410,106415,106420,106424,106428,106432,106437,106442,106447,106451,106455,106459,106463,106475,106487,106495,106499,106509,106519,106529,106533,106546,106559,106563,106580,106594,106629,106633,106637,106648,106663,106678,106690,106694,106698,106710],{"__ignoreMap":10},[92,106326,106327,106329],{"class":94,"line":95},[92,106328,30374],{"class":98},[92,106330,106331],{"class":102}," math\n",[92,106333,106334],{"class":94,"line":11},[92,106335,2379],{"emptyLinePlaceholder":17},[92,106337,106338,106340],{"class":94,"line":1158},[92,106339,30374],{"class":98},[92,106341,101282],{"class":102},[92,106343,106344,106346,106348,106350],{"class":94,"line":1173},[92,106345,30374],{"class":98},[92,106347,31362],{"class":102},[92,106349,31365],{"class":98},[92,106351,31368],{"class":102},[92,106353,106354],{"class":94,"line":1179},[92,106355,2379],{"emptyLinePlaceholder":17},[92,106357,106358],{"class":94,"line":1193},[92,106359,2379],{"emptyLinePlaceholder":17},[92,106361,106362,106364,106366],{"class":94,"line":1199},[92,106363,101295],{"class":151},[92,106365,13544],{"class":98},[92,106367,101300],{"class":207},[92,106369,106370],{"class":94,"line":1290},[92,106371,106372],{"class":207},"\u003Cmujoco model=\"one_link_motor\">\n",[92,106374,106375],{"class":94,"line":1296},[92,106376,106377],{"class":207},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[92,106379,106380],{"class":94,"line":1308},[92,106381,2379],{"emptyLinePlaceholder":17},[92,106383,106384],{"class":94,"line":1591},[92,106385,101319],{"class":207},[92,106387,106388],{"class":94,"line":1596},[92,106389,106390],{"class":207},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[92,106392,106393],{"class":94,"line":1602},[92,106394,106395],{"class":207},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[92,106397,106398],{"class":94,"line":1607},[92,106399,2379],{"emptyLinePlaceholder":17},[92,106401,106402],{"class":94,"line":1621},[92,106403,106404],{"class":207},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[92,106406,106407],{"class":94,"line":1626},[92,106408,106409],{"class":207},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,106411,106412],{"class":94,"line":1632},[92,106413,106414],{"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,106416,106417],{"class":94,"line":1653},[92,106418,106419],{"class":207},"      \u003C\u002Fbody>\n",[92,106421,106422],{"class":94,"line":1658},[92,106423,101348],{"class":207},[92,106425,106426],{"class":94,"line":1672},[92,106427,101353],{"class":207},[92,106429,106430],{"class":94,"line":1677},[92,106431,2379],{"emptyLinePlaceholder":17},[92,106433,106434],{"class":94,"line":1706},[92,106435,106436],{"class":207},"  \u003Cactuator>\n",[92,106438,106439],{"class":94,"line":1711},[92,106440,106441],{"class":207},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[92,106443,106444],{"class":94,"line":1728},[92,106445,106446],{"class":207},"  \u003C\u002Factuator>\n",[92,106448,106449],{"class":94,"line":1733},[92,106450,101358],{"class":207},[92,106452,106453],{"class":94,"line":1738},[92,106454,95679],{"class":207},[92,106456,106457],{"class":94,"line":1743},[92,106458,2379],{"emptyLinePlaceholder":17},[92,106460,106461],{"class":94,"line":1757},[92,106462,2379],{"emptyLinePlaceholder":17},[92,106464,106465,106467,106469,106471,106473],{"class":94,"line":1762},[92,106466,31929],{"class":98},[92,106468,1952],{"class":1942},[92,106470,101379],{"class":102},[92,106472,95667],{"class":151},[92,106474,3718],{"class":102},[92,106476,106477,106479,106481,106483,106485],{"class":94,"line":2556},[92,106478,101388],{"class":102},[92,106480,148],{"class":98},[92,106482,101393],{"class":102},[92,106484,101295],{"class":151},[92,106486,109],{"class":102},[92,106488,106489,106491,106493],{"class":94,"line":2570},[92,106490,101402],{"class":102},[92,106492,148],{"class":98},[92,106494,101407],{"class":102},[92,106496,106497],{"class":94,"line":2578},[92,106498,2379],{"emptyLinePlaceholder":17},[92,106500,106501,106503,106505,106507],{"class":94,"line":2583},[92,106502,31281],{"class":151},[92,106504,103],{"class":102},[92,106506,101420],{"class":207},[92,106508,101423],{"class":102},[92,106510,106511,106513,106515,106517],{"class":94,"line":2589},[92,106512,31281],{"class":151},[92,106514,103],{"class":102},[92,106516,101432],{"class":207},[92,106518,101435],{"class":102},[92,106520,106521,106523,106525,106527],{"class":94,"line":2595},[92,106522,31281],{"class":151},[92,106524,103],{"class":102},[92,106526,101444],{"class":207},[92,106528,101447],{"class":102},[92,106530,106531],{"class":94,"line":2600},[92,106532,2379],{"emptyLinePlaceholder":17},[92,106534,106535,106537,106540,106542,106544],{"class":94,"line":7928},[92,106536,3080],{"class":98},[92,106538,106539],{"class":102}," model.nu ",[92,106541,20928],{"class":98},[92,106543,25100],{"class":151},[92,106545,3718],{"class":102},[92,106547,106548,106550,106552,106554,106557],{"class":94,"line":7952},[92,106549,103413],{"class":98},[92,106551,103416],{"class":151},[92,106553,103],{"class":102},[92,106555,106556],{"class":207},"\"expected exactly one actuator\"",[92,106558,109],{"class":102},[92,106560,106561],{"class":94,"line":7957},[92,106562,2379],{"emptyLinePlaceholder":17},[92,106564,106565,106567,106569,106571,106573,106575,106578],{"class":94,"line":7963},[92,106566,3180],{"class":98},[92,106568,31598],{"class":102},[92,106570,26025],{"class":98},[92,106572,32425],{"class":151},[92,106574,103],{"class":102},[92,106576,106577],{"class":151},"2000",[92,106579,30768],{"class":102},[92,106581,106582,106585,106587,106589,106591],{"class":94,"line":7990},[92,106583,106584],{"class":102},"        t ",[92,106586,148],{"class":98},[92,106588,31598],{"class":102},[92,106590,558],{"class":98},[92,106592,106593],{"class":102}," model.opt.timestep\n",[92,106595,106596,106599,106601,106603,106605,106608,106610,106613,106615,106617,106620,106622,106624,106626],{"class":94,"line":7995},[92,106597,106598],{"class":102},"        data.ctrl[",[92,106600,294],{"class":151},[92,106602,4422],{"class":102},[92,106604,148],{"class":98},[92,106606,106607],{"class":151}," 1.5",[92,106609,6498],{"class":98},[92,106611,106612],{"class":102}," math.sin(",[92,106614,105241],{"class":151},[92,106616,6498],{"class":98},[92,106618,106619],{"class":102}," math.pi ",[92,106621,558],{"class":98},[92,106623,61849],{"class":151},[92,106625,6498],{"class":98},[92,106627,106628],{"class":102}," t)\n",[92,106630,106631],{"class":94,"line":8001},[92,106632,101497],{"class":102},[92,106634,106635],{"class":94,"line":8013},[92,106636,2379],{"emptyLinePlaceholder":17},[92,106638,106639,106641,106643,106646],{"class":94,"line":8025},[92,106640,31281],{"class":151},[92,106642,103],{"class":102},[92,106644,106645],{"class":207},"\"time:\"",[92,106647,101459],{"class":102},[92,106649,106650,106652,106654,106657,106659,106661],{"class":94,"line":8037},[92,106651,31281],{"class":151},[92,106653,103],{"class":102},[92,106655,106656],{"class":207},"\"joint qpos:\"",[92,106658,104911],{"class":102},[92,106660,396],{"class":151},[92,106662,30479],{"class":102},[92,106664,106665,106667,106669,106672,106674,106676],{"class":94,"line":9696},[92,106666,31281],{"class":151},[92,106668,103],{"class":102},[92,106670,106671],{"class":207},"\"joint qvel:\"",[92,106673,104927],{"class":102},[92,106675,396],{"class":151},[92,106677,30479],{"class":102},[92,106679,106680,106682,106684,106687],{"class":94,"line":9721},[92,106681,31281],{"class":151},[92,106683,103],{"class":102},[92,106685,106686],{"class":207},"\"last ctrl:\"",[92,106688,106689],{"class":102},", data.ctrl.copy())\n",[92,106691,106692],{"class":94,"line":9744},[92,106693,2379],{"emptyLinePlaceholder":17},[92,106695,106696],{"class":94,"line":9768},[92,106697,2379],{"emptyLinePlaceholder":17},[92,106699,106700,106702,106704,106706,106708],{"class":94,"line":9773},[92,106701,1510],{"class":98},[92,106703,31202],{"class":151},[92,106705,101540],{"class":98},[92,106707,101543],{"class":207},[92,106709,3718],{"class":102},[92,106711,106712],{"class":94,"line":9778},[92,106713,101550],{"class":102},[38,106715,103551],{},[83,106717,106719],{"className":23803,"code":106718,"language":23805,"meta":10,"style":10},"touch ch4_joint_motor.py\n",[89,106720,106721],{"__ignoreMap":10},[92,106722,106723,106725],{"class":94,"line":95},[92,106724,101264],{"class":1942},[92,106726,106727],{"class":207}," ch4_joint_motor.py\n",[38,106729,102282],{},[83,106731,106733],{"className":23803,"code":106732,"language":23805,"meta":10,"style":10},"python ch4_joint_motor.py\n",[89,106734,106735],{"__ignoreMap":10},[92,106736,106737,106739],{"class":94,"line":95},[92,106738,30362],{"class":1942},[92,106740,106727],{"class":207},[63,106742,101553],{"id":101553},[38,106744,106745],{},"检查 actuator 数量：",[83,106747,106749],{"className":30360,"code":106748,"language":30362,"meta":10,"style":10},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[89,106750,106751,106763],{"__ignoreMap":10},[92,106752,106753,106755,106757,106759,106761],{"class":94,"line":95},[92,106754,1510],{"class":98},[92,106756,106539],{"class":102},[92,106758,20928],{"class":98},[92,106760,25100],{"class":151},[92,106762,3718],{"class":102},[92,106764,106765,106767,106769,106771,106773],{"class":94,"line":11},[92,106766,103876],{"class":98},[92,106768,103416],{"class":151},[92,106770,103],{"class":102},[92,106772,106556],{"class":207},[92,106774,109],{"class":102},[38,106776,106777,106779,106780,106782],{},[89,106778,102139],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[89,106781,101057],{}," 长度应该是 1。",[38,106784,106785],{},"产生正弦控制信号：",[83,106787,106789],{"className":30360,"code":106788,"language":30362,"meta":10,"style":10},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[89,106790,106791],{"__ignoreMap":10},[92,106792,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819],{"class":94,"line":95},[92,106794,105852],{"class":102},[92,106796,294],{"class":151},[92,106798,4422],{"class":102},[92,106800,148],{"class":98},[92,106802,106607],{"class":151},[92,106804,6498],{"class":98},[92,106806,106612],{"class":102},[92,106808,105241],{"class":151},[92,106810,6498],{"class":98},[92,106812,106619],{"class":102},[92,106814,558],{"class":98},[92,106816,61849],{"class":151},[92,106818,6498],{"class":98},[92,106820,106628],{"class":102},[38,106822,106823],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[38,106825,101654],{},[83,106827,106828],{"className":30360,"code":104486,"language":30362,"meta":10,"style":10},[89,106829,106830],{"__ignoreMap":10},[92,106831,106832],{"class":94,"line":95},[92,106833,104486],{"class":102},[38,106835,106836],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[63,106838,101689],{"id":101689},[83,106840,106842],{"className":30360,"code":106841,"language":30362,"meta":10,"style":10},"import math\n",[89,106843,106844],{"__ignoreMap":10},[92,106845,106846,106848],{"class":94,"line":95},[92,106847,30374],{"class":98},[92,106849,106331],{"class":102},[38,106851,106852,106853,100999,106856,106859],{},"导入 Python 标准库里的数学模块。后面要用 ",[89,106854,106855],{},"math.sin",[89,106857,106858],{},"math.pi"," 生成周期变化的控制信号。",[83,106861,106862],{"className":30360,"code":103667,"language":30362,"meta":10,"style":10},[89,106863,106864,106870],{"__ignoreMap":10},[92,106865,106866,106868],{"class":94,"line":95},[92,106867,30374],{"class":98},[92,106869,101282],{"class":102},[92,106871,106872,106874,106876,106878],{"class":94,"line":11},[92,106873,30374],{"class":98},[92,106875,31362],{"class":102},[92,106877,31365],{"class":98},[92,106879,31368],{"class":102},[38,106881,106882],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[83,106884,106885],{"className":53049,"code":106168,"language":53051,"meta":10,"style":10},[89,106886,106887],{"__ignoreMap":10},[92,106888,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917],{"class":94,"line":95},[92,106890,1013],{"class":102},[92,106892,102937],{"class":51282},[92,106894,14900],{"class":1942},[92,106896,148],{"class":102},[92,106898,106000],{"class":207},[92,106900,53806],{"class":1942},[92,106902,148],{"class":102},[92,106904,106000],{"class":207},[92,106906,106009],{"class":1942},[92,106908,148],{"class":102},[92,106910,106014],{"class":207},[92,106912,106197],{"class":1942},[92,106914,148],{"class":102},[92,106916,106202],{"class":207},[92,106918,101125],{"class":102},[38,106920,106921,106922,106924,106925,106927,106928,106930],{},"这行定义关节。",[89,106923,105821],{}," 表示旋转关节。",[89,106926,106220],{}," 表示绕 y 轴旋转。",[89,106929,106226],{}," 表示有一点阻尼，运动不会完全无损耗。",[83,106932,106934],{"className":53049,"code":106933,"language":53051,"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,106935,106936],{"__ignoreMap":10},[92,106937,106938,106940,106942,106944,106946,106949,106951,106953,106956,106959,106961,106964,106966,106968,106970,106972,106974,106977],{"class":94,"line":95},[92,106939,1013],{"class":102},[92,106941,101101],{"class":51282},[92,106943,14900],{"class":1942},[92,106945,148],{"class":102},[92,106947,106948],{"class":207},"\"link_geom\"",[92,106950,53806],{"class":1942},[92,106952,148],{"class":102},[92,106954,106955],{"class":207},"\"capsule\"",[92,106957,106958],{"class":1942}," fromto",[92,106960,148],{"class":102},[92,106962,106963],{"class":207},"\"0 0 0 0 0 0.5\"",[92,106965,101117],{"class":1942},[92,106967,148],{"class":102},[92,106969,103759],{"class":207},[92,106971,101982],{"class":1942},[92,106973,148],{"class":102},[92,106975,106976],{"class":207},"\"0.5\"",[92,106978,101125],{"class":102},[38,106980,106981,106982,106984,106985,106987,106988,106991,106992,28367,106995,106997],{},"这行定义摆杆的形状。",[89,106983,103146],{}," 是胶囊体，适合表示杆子。",[89,106986,103157],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[89,106989,106990],{},"(0,0,0)"," 延伸到 ",[89,106993,106994],{},"(0,0,0.5)",[89,106996,103151],{}," 是半径。",[83,106999,107000],{"className":53049,"code":106234,"language":53051,"meta":10,"style":10},[89,107001,107002],{"__ignoreMap":10},[92,107003,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038],{"class":94,"line":95},[92,107005,1013],{"class":102},[92,107007,106055],{"class":51282},[92,107009,14900],{"class":1942},[92,107011,148],{"class":102},[92,107013,106062],{"class":207},[92,107015,106065],{"class":1942},[92,107017,148],{"class":102},[92,107019,106000],{"class":207},[92,107021,106072],{"class":1942},[92,107023,148],{"class":102},[92,107025,3657],{"class":207},[92,107027,106079],{"class":1942},[92,107029,148],{"class":102},[92,107031,106084],{"class":207},[92,107033,106087],{"class":1942},[92,107035,148],{"class":102},[92,107037,106092],{"class":207},[92,107039,101125],{"class":102},[38,107041,107042,107043,107045,107046,107049,107050,107052],{},"这行定义电机。它作用在 ",[89,107044,105821],{}," 关节上。",[89,107047,107048],{},"gear"," 可以理解成放大倍数。",[89,107051,105836],{}," 限制控制输入范围。",[83,107054,107055],{"className":30360,"code":106748,"language":30362,"meta":10,"style":10},[89,107056,107057,107069],{"__ignoreMap":10},[92,107058,107059,107061,107063,107065,107067],{"class":94,"line":95},[92,107060,1510],{"class":98},[92,107062,106539],{"class":102},[92,107064,20928],{"class":98},[92,107066,25100],{"class":151},[92,107068,3718],{"class":102},[92,107070,107071,107073,107075,107077,107079],{"class":94,"line":11},[92,107072,103876],{"class":98},[92,107074,103416],{"class":151},[92,107076,103],{"class":102},[92,107078,106556],{"class":207},[92,107080,109],{"class":102},[38,107082,107083,107085],{},[89,107084,102139],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[83,107087,107089],{"className":30360,"code":107088,"language":30362,"meta":10,"style":10},"for step in range(2000):\n",[89,107090,107091],{"__ignoreMap":10},[92,107092,107093,107095,107097,107099,107101,107103,107105],{"class":94,"line":95},[92,107094,3004],{"class":98},[92,107096,31598],{"class":102},[92,107098,26025],{"class":98},[92,107100,32425],{"class":151},[92,107102,103],{"class":102},[92,107104,106577],{"class":151},[92,107106,30768],{"class":102},[38,107108,107109,107110,107112,107113,107116],{},"循环 2000 步。这里没有用 ",[89,107111,1095],{},"，而是用 ",[89,107114,107115],{},"step","，因为后面要用当前步数计算时间。",[83,107118,107120],{"className":30360,"code":107119,"language":30362,"meta":10,"style":10},"t = step * model.opt.timestep\n",[89,107121,107122],{"__ignoreMap":10},[92,107123,107124,107127,107129,107131,107133],{"class":94,"line":95},[92,107125,107126],{"class":102},"t ",[92,107128,148],{"class":98},[92,107130,31598],{"class":102},[92,107132,558],{"class":98},[92,107134,106593],{"class":102},[38,107136,107137],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[83,107139,107140],{"className":30360,"code":106788,"language":30362,"meta":10,"style":10},[89,107141,107142],{"__ignoreMap":10},[92,107143,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170],{"class":94,"line":95},[92,107145,105852],{"class":102},[92,107147,294],{"class":151},[92,107149,4422],{"class":102},[92,107151,148],{"class":98},[92,107153,106607],{"class":151},[92,107155,6498],{"class":98},[92,107157,106612],{"class":102},[92,107159,105241],{"class":151},[92,107161,6498],{"class":98},[92,107163,106619],{"class":102},[92,107165,558],{"class":98},[92,107167,61849],{"class":151},[92,107169,6498],{"class":98},[92,107171,106628],{"class":102},[38,107173,107174],{},"这行给电机输入一个正弦波。拆开看：",[46,107176,107177,107183,107189],{},[49,107178,107179,107182],{},[89,107180,107181],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[49,107184,107185,107188],{},[89,107186,107187],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[49,107190,107191,107194],{},[89,107192,107193],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[38,107196,107197],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[83,107199,107201],{"className":30360,"code":107200,"language":30362,"meta":10,"style":10},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[89,107202,107203],{"__ignoreMap":10},[92,107204,107205,107207,107209,107211,107213,107215],{"class":94,"line":95},[92,107206,30397],{"class":151},[92,107208,103],{"class":102},[92,107210,106656],{"class":207},[92,107212,104911],{"class":102},[92,107214,396],{"class":151},[92,107216,30479],{"class":102},[38,107218,107219,107220,107222],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[89,107221,101051],{}," 只有一个数。",[33,107224,102297],{"id":102296},[38,107226,107227],{},"输出类似:",[83,107229,107232],{"className":107230,"code":107231,"language":5167,"meta":10},[5165],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[89,107233,107231],{"__ignoreMap":10},[38,107235,107236,107237,107239],{},"这里 ",[89,107238,106107],{}," 是电机输入。",[38,107241,107242,107245,107246,107249],{},[89,107243,107244],{},"joint qpos"," 是关节角度，单位通常是弧度。",[89,107247,107248],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[38,107251,107252],{},"角度单位提示：",[83,107254,107257],{"className":107255,"code":107256,"language":5167,"meta":10},[5165],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[89,107258,107256],{"__ignoreMap":10},[38,107260,107261,107262,107264,107265,107267],{},"如果你看到 ",[89,107263,104011],{}," 是 ",[89,107266,35311],{},"，大约就是 28.6 度。",[33,107269,102329],{"id":102328},[46,107271,107272,107279,107282,107289,107292,107300,107308],{},[49,107273,102392,107274,102395,107276,28367],{},[89,107275,106292],{},[89,107277,107278],{},"gear=\"5\"",[49,107280,107281],{},"重新运行，观察关节运动是否更剧烈。",[49,107283,102392,107284,102395,107286,28367],{},[89,107285,105836],{},[89,107287,107288],{},"-0.2 0.2",[49,107290,107291],{},"重新运行，观察控制能力是否变弱。",[49,107293,107294,107295,107297,107298,28367],{},"去掉 actuator，确认 ",[89,107296,102139],{}," 变成 ",[89,107299,294],{},[49,107301,102392,107302,102395,107304,107307],{},[89,107303,106226],{},[89,107305,107306],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[49,107309,102392,107310,102395,107312,107315],{},[89,107311,106220],{},[89,107313,107314],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[33,107317,102434],{"id":102433},[63,107319,107321],{"id":107320},"indexerror-index-0-is-out-of-bounds",[89,107322,107323],{},"IndexError: index 0 is out of bounds",[38,107325,107326,107327,107329],{},"原因是 ",[89,107328,105973],{},"，没有 actuator。",[63,107331,107332],{"id":107332},"关节几乎不动",[38,107334,107335],{},"可能原因:",[46,107337,107338,107343,107347,107353],{},[49,107339,107340,107342],{},[89,107341,107048],{}," 太小",[49,107344,107345,107342],{},[89,107346,105836],{},[49,107348,107349,107352],{},[89,107350,107351],{},"damping"," 太大",[49,107354,107355],{},"重力方向导致运动不明显",[63,107357,107358],{"id":107358},"模型编译失败",[38,107360,107361,107362,107364],{},"检查 actuator 引用的 ",[89,107363,106283],{}," 是否存在，joint 名称是否拼写一致。",[63,107366,107368,107370],{"id":107367},"datactrl0-写了但没有效果",[89,107369,106107],{}," 写了但没有效果",[38,107372,102556],{},[46,107374,107375,107380,107383,107388,107393],{},[49,107376,107377,107379],{},[89,107378,102139],{}," 是否大于 0。",[49,107381,107382],{},"motor 是否引用了正确 joint。",[49,107384,107385,107387],{},[89,107386,107048],{}," 是否太小。",[49,107389,107390,107392],{},[89,107391,105836],{}," 是否把输入限制得太小。",[49,107394,107395],{},"body 是否真的有可动 joint。",[63,107397,107398],{"id":107398},"控制输入超过范围会怎样",[38,107400,107401],{},"如果设置了：",[83,107403,107405],{"className":53049,"code":107404,"language":53051,"meta":10,"style":10},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[89,107406,107407],{"__ignoreMap":10},[92,107408,107409],{"class":94,"line":95},[92,107410,107404],{"class":102},[38,107412,107413],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[83,107415,107417],{"className":30360,"code":107416,"language":30362,"meta":10,"style":10},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[89,107418,107419,107439],{"__ignoreMap":10},[92,107420,107421,107424,107426,107429,107431,107433,107435,107437],{"class":94,"line":95},[92,107422,107423],{"class":102},"action ",[92,107425,148],{"class":98},[92,107427,107428],{"class":102}," np.clip(action, ",[92,107430,635],{"class":98},[92,107432,105241],{"class":151},[92,107434,12415],{"class":102},[92,107436,105241],{"class":151},[92,107438,109],{"class":102},[92,107440,107441,107443,107445,107447,107449],{"class":94,"line":11},[92,107442,105852],{"class":102},[92,107444,294],{"class":151},[92,107446,4422],{"class":102},[92,107448,148],{"class":98},[92,107450,107451],{"class":102}," action\n",[33,107453,102588],{"id":102587},[38,107455,107456],{},"这一章建立了控制任务的基本形式：",[83,107458,107461],{"className":107459,"code":107460,"language":5167,"meta":10},[5165],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[89,107462,107460],{"__ignoreMap":10},[38,107464,107465],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5106,107467,107468],{},"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":107470},[107471,107472,107473,107478,107482,107483,107484,107492],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":107474},[107475,107476,107477],{"id":106114,"depth":1158,"text":106115},{"id":106164,"depth":1158,"text":106165},{"id":106230,"depth":1158,"text":106231},{"id":101233,"depth":11,"text":101234,"children":107479},[107480,107481],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":107485},[107486,107487,107488,107489,107491],{"id":107320,"depth":1158,"text":107323},{"id":107332,"depth":1158,"text":107332},{"id":107358,"depth":1158,"text":107358},{"id":107367,"depth":1158,"text":107490},"data.ctrl[0] 写了但没有效果",{"id":107398,"depth":1158,"text":107398},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105802,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107499,"title":107500,"body":107501,"description":10,"extension":14,"meta":109410,"navigation":17,"path":109411,"seo":109412,"stem":109413,"__hash__":109414},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107502,"toc":109386},[107503,107506,107508,107511,107519,107522,107539,107542,107567,107570,107616,107618,107620,107675,107677,107696,107698,107741,107744,107761,107764,107780,107790,107797,107799,107802,107805,107839,107842,107890,107894,107897,107911,107920,107924,107927,107952,107955,107959,107972,107975,107981,107984,107999,108001,108004,108264,108266,108278,108281,108593,108595,108607,108609,108612,108627,108632,108635,108657,108660,108663,108697,108700,108704,108715,108718,108735,108738,108752,108759,108779,108786,108800,108803,108815,108830,108850,108853,108875,108878,108882,108897,108908,108923,108926,108956,108972,109001,109009,109033,109036,109054,109064,109076,109083,109092,109098,109107,109110,109112,109121,109124,109139,109141,109144,109155,109158,109169,109172,109190,109192,109209,109212,109240,109242,109246,109249,109279,109285,109288,109292,109300,109303,109305,109326,109329,109332,109348,109351,109367,109369,109372,109383],[29,107504,107500],{"id":107505},"_5viewer-可视化与-renderer-离屏渲染",[33,107507,100628],{"id":100627},[38,107509,107510],{},"本章掌握两类可视化方式:",[46,107512,107513,107516],{},[49,107514,107515],{},"交互式 viewer: 适合人工观察仿真",[49,107517,107518],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[38,107520,107521],{},"使用官方接口:",[83,107523,107525],{"className":30360,"code":107524,"language":30362,"meta":10,"style":10},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[89,107526,107527,107534],{"__ignoreMap":10},[92,107528,107529,107531],{"class":94,"line":95},[92,107530,30374],{"class":98},[92,107532,107533],{"class":102}," mujoco.viewer\n",[92,107535,107536],{"class":94,"line":11},[92,107537,107538],{"class":102},"mujoco.viewer.launch_passive(model, data)\n",[38,107540,107541],{},"以及:",[83,107543,107545],{"className":30360,"code":107544,"language":30362,"meta":10,"style":10},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[89,107546,107547,107557],{"__ignoreMap":10},[92,107548,107549,107552,107554],{"class":94,"line":95},[92,107550,107551],{"class":102},"renderer ",[92,107553,148],{"class":98},[92,107555,107556],{"class":102}," mujoco.Renderer(model)\n",[92,107558,107559,107562,107564],{"class":94,"line":11},[92,107560,107561],{"class":102},"image ",[92,107563,148],{"class":98},[92,107565,107566],{"class":102}," renderer.render()\n",[38,107568,107569],{},"新手建议先理解二者区别：",[240,107571,107572,107588],{},[243,107573,107574],{},[246,107575,107576,107579,107582,107585],{},[249,107577,107578],{"align":23717},"工具",[249,107580,107581],{"align":23717},"用途",[249,107583,107584],{"align":23717},"是否打开窗口",[249,107586,107587],{"align":23717},"常见场景",[287,107589,107590,107603],{},[246,107591,107592,107595,107598,107600],{},[292,107593,107594],{"align":23717},"Viewer",[292,107596,107597],{"align":23717},"人眼实时观察仿真",[292,107599,104646],{"align":23717},[292,107601,107602],{"align":23717},"调试模型、看控制效果",[246,107604,107605,107608,107611,107613],{},[292,107606,107607],{"align":23717},"Renderer",[292,107609,107610],{"align":23717},"生成图像数组",[292,107612,104659],{"align":23717},[292,107614,107615],{"align":23717},"保存图片、训练视觉策略、服务器批量采集",[33,107617,100751],{"id":100750},[38,107619,100754],{},[83,107621,107623],{"className":23803,"code":107622,"language":23805,"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,107624,107625,107637,107647,107655,107663],{"__ignoreMap":10},[92,107626,107627,107629,107631,107633,107635],{"class":94,"line":95},[92,107628,24558],{"class":1942},[92,107630,26297],{"class":207},[92,107632,23815],{"class":207},[92,107634,26382],{"class":151},[92,107636,24660],{"class":151},[92,107638,107639,107641,107643,107645],{"class":94,"line":11},[92,107640,100789],{"class":207},[92,107642,100792],{"class":207},[92,107644,100795],{"class":207},[92,107646,24660],{"class":151},[92,107648,107649,107651,107653],{"class":94,"line":1158},[92,107650,100802],{"class":207},[92,107652,100805],{"class":207},[92,107654,24660],{"class":151},[92,107656,107657,107659,107661],{"class":94,"line":1173},[92,107658,100812],{"class":207},[92,107660,100815],{"class":207},[92,107662,24660],{"class":151},[92,107664,107665,107667,107669,107671,107673],{"class":94,"line":1179},[92,107666,100822],{"class":207},[92,107668,100825],{"class":207},[92,107670,100828],{"class":207},[92,107672,100831],{"class":207},[92,107674,102497],{"class":207},[38,107676,102800],{},[83,107678,107680],{"className":23803,"code":107679,"language":23805,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy pillow\n",[89,107681,107682],{"__ignoreMap":10},[92,107683,107684,107686,107688,107690,107693],{"class":94,"line":95},[92,107685,23812],{"class":1942},[92,107687,23815],{"class":207},[92,107689,100911],{"class":207},[92,107691,107692],{"class":207}," numpy",[92,107694,107695],{"class":207}," pillow\n",[38,107697,102817],{},[83,107699,107701],{"className":23803,"code":107700,"language":23805,"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,107702,107703,107720,107729],{"__ignoreMap":10},[92,107704,107705,107707,107709,107711,107714,107716,107718],{"class":94,"line":95},[92,107706,30312],{"class":1942},[92,107708,29158],{"class":207},[92,107710,25097],{"class":151},[92,107712,107713],{"class":207}," mujoco-render",[92,107715,100956],{"class":207},[92,107717,100959],{"class":151},[92,107719,100962],{"class":151},[92,107721,107722,107724,107726],{"class":94,"line":11},[92,107723,30312],{"class":1942},[92,107725,100969],{"class":207},[92,107727,107728],{"class":207}," mujoco-render\n",[92,107730,107731,107733,107735,107737,107739],{"class":94,"line":1158},[92,107732,23812],{"class":1942},[92,107734,23815],{"class":207},[92,107736,100911],{"class":207},[92,107738,107692],{"class":207},[92,107740,107695],{"class":207},[38,107742,107743],{},"离屏渲染后端:",[83,107745,107747],{"className":23803,"code":107746,"language":23805,"meta":10,"style":10},"export MUJOCO_GL=egl\n",[89,107748,107749],{"__ignoreMap":10},[92,107750,107751,107753,107756,107758],{"class":94,"line":95},[92,107752,25024],{"class":98},[92,107754,107755],{"class":102}," MUJOCO_GL",[92,107757,148],{"class":98},[92,107759,107760],{"class":102},"egl\n",[38,107762,107763],{},"或:",[83,107765,107767],{"className":23803,"code":107766,"language":23805,"meta":10,"style":10},"export MUJOCO_GL=osmesa\n",[89,107768,107769],{"__ignoreMap":10},[92,107770,107771,107773,107775,107777],{"class":94,"line":95},[92,107772,25024],{"class":98},[92,107774,107755],{"class":102},[92,107776,148],{"class":98},[92,107778,107779],{"class":102},"osmesa\n",[38,107781,107782,107783,107786,107787,28367],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[89,107784,107785],{},"egl"," 失败，再尝试 ",[89,107788,107789],{},"osmesa",[38,107791,107792,107793,107796],{},"如果你在本机桌面环境运行，通常先不要设置 ",[89,107794,107795],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[33,107798,101026],{"id":101025},[38,107800,107801],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[38,107803,107804],{},"典型 viewer 流程:",[83,107806,107808],{"className":30360,"code":107807,"language":30362,"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,107809,107810,107823,107830,107834],{"__ignoreMap":10},[92,107811,107812,107815,107818,107820],{"class":94,"line":95},[92,107813,107814],{"class":98},"with",[92,107816,107817],{"class":102}," mujoco.viewer.launch_passive(model, data) ",[92,107819,31365],{"class":98},[92,107821,107822],{"class":102}," viewer:\n",[92,107824,107825,107827],{"class":94,"line":11},[92,107826,2230],{"class":98},[92,107828,107829],{"class":102}," viewer.is_running():\n",[92,107831,107832],{"class":94,"line":1158},[92,107833,101497],{"class":102},[92,107835,107836],{"class":94,"line":1173},[92,107837,107838],{"class":102},"        viewer.sync()\n",[38,107840,107841],{},"典型 renderer 流程:",[83,107843,107845],{"className":30360,"code":107844,"language":30362,"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,107846,107847,107873,107877,107882],{"__ignoreMap":10},[92,107848,107849,107851,107853,107856,107858,107860,107862,107864,107866,107868,107871],{"class":94,"line":95},[92,107850,107551],{"class":102},[92,107852,148],{"class":98},[92,107854,107855],{"class":102}," mujoco.Renderer(model, ",[92,107857,24963],{"class":5196},[92,107859,148],{"class":98},[92,107861,42324],{"class":151},[92,107863,12415],{"class":102},[92,107865,24959],{"class":5196},[92,107867,148],{"class":98},[92,107869,107870],{"class":151},"640",[92,107872,109],{"class":102},[92,107874,107875],{"class":94,"line":11},[92,107876,104486],{"class":102},[92,107878,107879],{"class":94,"line":1158},[92,107880,107881],{"class":102},"renderer.update_scene(data)\n",[92,107883,107884,107886,107888],{"class":94,"line":1173},[92,107885,107561],{"class":102},[92,107887,148],{"class":98},[92,107889,107566],{"class":102},[63,107891,107893],{"id":107892},"viewer-的同步逻辑","viewer 的同步逻辑",[38,107895,107896],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[83,107898,107900],{"className":30360,"code":107899,"language":30362,"meta":10,"style":10},"mujoco.mj_step(model, data)\nviewer.sync()\n",[89,107901,107902,107906],{"__ignoreMap":10},[92,107903,107904],{"class":94,"line":95},[92,107905,104486],{"class":102},[92,107907,107908],{"class":94,"line":11},[92,107909,107910],{"class":102},"viewer.sync()\n",[38,107912,107913,107915,107916,107919],{},[89,107914,101196],{}," 负责算物理，",[89,107917,107918],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[63,107921,107923],{"id":107922},"为什么要-sleep","为什么要 sleep",[38,107925,107926],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[83,107928,107930],{"className":30360,"code":107929,"language":30362,"meta":10,"style":10},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[89,107931,107932],{"__ignoreMap":10},[92,107933,107934,107937,107939,107942,107944,107947,107949],{"class":94,"line":95},[92,107935,107936],{"class":102},"sleep_time ",[92,107938,148],{"class":98},[92,107940,107941],{"class":102}," model.opt.timestep ",[92,107943,635],{"class":98},[92,107945,107946],{"class":102}," (time.time() ",[92,107948,635],{"class":98},[92,107950,107951],{"class":102}," step_start)\n",[38,107953,107954],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[63,107956,107958],{"id":107957},"renderer-输出是什么","renderer 输出是什么",[83,107960,107962],{"className":30360,"code":107961,"language":30362,"meta":10,"style":10},"image = renderer.render()\n",[89,107963,107964],{"__ignoreMap":10},[92,107965,107966,107968,107970],{"class":94,"line":95},[92,107967,107561],{"class":102},[92,107969,148],{"class":98},[92,107971,107566],{"class":102},[38,107973,107974],{},"得到的是 NumPy 数组，形状通常是：",[83,107976,107979],{"className":107977,"code":107978,"language":5167,"meta":10},[5165],"(height, width, 3)\n",[89,107980,107978],{"__ignoreMap":10},[38,107982,107983],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[83,107985,107987],{"className":30360,"code":107986,"language":30362,"meta":10,"style":10},"Image.fromarray(image).save(\"render_output.png\")\n",[89,107988,107989],{"__ignoreMap":10},[92,107990,107991,107994,107997],{"class":94,"line":95},[92,107992,107993],{"class":102},"Image.fromarray(image).save(",[92,107995,107996],{"class":207},"\"render_output.png\"",[92,107998,109],{"class":102},[33,108000,101234],{"id":101233},[38,108002,108003],{},"交互式 Viewer:",[83,108005,108007],{"className":30360,"code":108006,"language":30362,"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,108008,108009,108015,108019,108025,108031,108035,108039,108047,108052,108056,108060,108064,108069,108074,108078,108082,108086,108091,108095,108099,108103,108107,108111,108115,108127,108139,108147,108151,108161,108181,108191,108196,108201,108205,108222,108235,108240,108244,108248,108260],{"__ignoreMap":10},[92,108010,108011,108013],{"class":94,"line":95},[92,108012,30374],{"class":98},[92,108014,31811],{"class":102},[92,108016,108017],{"class":94,"line":11},[92,108018,2379],{"emptyLinePlaceholder":17},[92,108020,108021,108023],{"class":94,"line":1158},[92,108022,30374],{"class":98},[92,108024,101282],{"class":102},[92,108026,108027,108029],{"class":94,"line":1173},[92,108028,30374],{"class":98},[92,108030,107533],{"class":102},[92,108032,108033],{"class":94,"line":1179},[92,108034,2379],{"emptyLinePlaceholder":17},[92,108036,108037],{"class":94,"line":1193},[92,108038,2379],{"emptyLinePlaceholder":17},[92,108040,108041,108043,108045],{"class":94,"line":1199},[92,108042,101295],{"class":151},[92,108044,13544],{"class":98},[92,108046,101300],{"class":207},[92,108048,108049],{"class":94,"line":1290},[92,108050,108051],{"class":207},"\u003Cmujoco model=\"viewer_demo\">\n",[92,108053,108054],{"class":94,"line":1296},[92,108055,101310],{"class":207},[92,108057,108058],{"class":94,"line":1308},[92,108059,2379],{"emptyLinePlaceholder":17},[92,108061,108062],{"class":94,"line":1591},[92,108063,101319],{"class":207},[92,108065,108066],{"class":94,"line":1596},[92,108067,108068],{"class":207},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[92,108070,108071],{"class":94,"line":1602},[92,108072,108073],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,108075,108076],{"class":94,"line":1607},[92,108077,2379],{"emptyLinePlaceholder":17},[92,108079,108080],{"class":94,"line":1621},[92,108081,101333],{"class":207},[92,108083,108084],{"class":94,"line":1626},[92,108085,101338],{"class":207},[92,108087,108088],{"class":94,"line":1632},[92,108089,108090],{"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,108092,108093],{"class":94,"line":1653},[92,108094,101348],{"class":207},[92,108096,108097],{"class":94,"line":1658},[92,108098,101353],{"class":207},[92,108100,108101],{"class":94,"line":1672},[92,108102,101358],{"class":207},[92,108104,108105],{"class":94,"line":1677},[92,108106,95679],{"class":207},[92,108108,108109],{"class":94,"line":1706},[92,108110,2379],{"emptyLinePlaceholder":17},[92,108112,108113],{"class":94,"line":1711},[92,108114,2379],{"emptyLinePlaceholder":17},[92,108116,108117,108119,108121,108123,108125],{"class":94,"line":1728},[92,108118,31929],{"class":98},[92,108120,1952],{"class":1942},[92,108122,101379],{"class":102},[92,108124,95667],{"class":151},[92,108126,3718],{"class":102},[92,108128,108129,108131,108133,108135,108137],{"class":94,"line":1733},[92,108130,101388],{"class":102},[92,108132,148],{"class":98},[92,108134,101393],{"class":102},[92,108136,101295],{"class":151},[92,108138,109],{"class":102},[92,108140,108141,108143,108145],{"class":94,"line":1738},[92,108142,101402],{"class":102},[92,108144,148],{"class":98},[92,108146,101407],{"class":102},[92,108148,108149],{"class":94,"line":1743},[92,108150,2379],{"emptyLinePlaceholder":17},[92,108152,108153,108155,108157,108159],{"class":94,"line":1757},[92,108154,34160],{"class":98},[92,108156,107817],{"class":102},[92,108158,31365],{"class":98},[92,108160,107822],{"class":102},[92,108162,108163,108166,108169,108171,108174,108176,108179],{"class":94,"line":1762},[92,108164,108165],{"class":98},"        while",[92,108167,108168],{"class":102}," viewer.is_running() ",[92,108170,30444],{"class":98},[92,108172,108173],{"class":102}," data.time ",[92,108175,1013],{"class":98},[92,108177,108178],{"class":151}," 5.0",[92,108180,3718],{"class":102},[92,108182,108183,108186,108188],{"class":94,"line":2556},[92,108184,108185],{"class":102},"            step_start ",[92,108187,148],{"class":98},[92,108189,108190],{"class":102}," time.time()\n",[92,108192,108193],{"class":94,"line":2570},[92,108194,108195],{"class":102},"            mujoco.mj_step(model, data)\n",[92,108197,108198],{"class":94,"line":2578},[92,108199,108200],{"class":102},"            viewer.sync()\n",[92,108202,108203],{"class":94,"line":2583},[92,108204,2379],{"emptyLinePlaceholder":17},[92,108206,108207,108210,108212,108214,108216,108218,108220],{"class":94,"line":2589},[92,108208,108209],{"class":102},"            sleep_time ",[92,108211,148],{"class":98},[92,108213,107941],{"class":102},[92,108215,635],{"class":98},[92,108217,107946],{"class":102},[92,108219,635],{"class":98},[92,108221,107951],{"class":102},[92,108223,108224,108226,108229,108231,108233],{"class":94,"line":2595},[92,108225,4621],{"class":98},[92,108227,108228],{"class":102}," sleep_time ",[92,108230,1063],{"class":98},[92,108232,4072],{"class":151},[92,108234,3718],{"class":102},[92,108236,108237],{"class":94,"line":2600},[92,108238,108239],{"class":102},"                time.sleep(sleep_time)\n",[92,108241,108242],{"class":94,"line":7928},[92,108243,2379],{"emptyLinePlaceholder":17},[92,108245,108246],{"class":94,"line":7952},[92,108247,2379],{"emptyLinePlaceholder":17},[92,108249,108250,108252,108254,108256,108258],{"class":94,"line":7957},[92,108251,1510],{"class":98},[92,108253,31202],{"class":151},[92,108255,101540],{"class":98},[92,108257,101543],{"class":207},[92,108259,3718],{"class":102},[92,108261,108262],{"class":94,"line":7963},[92,108263,101550],{"class":102},[38,108265,103551],{},[83,108267,108269],{"className":23803,"code":108268,"language":23805,"meta":10,"style":10},"touch ch5_viewer.py\n",[89,108270,108271],{"__ignoreMap":10},[92,108272,108273,108275],{"class":94,"line":95},[92,108274,101264],{"class":1942},[92,108276,108277],{"class":207}," ch5_viewer.py\n",[38,108279,108280],{},"离屏 Renderer 保存图片:",[83,108282,108284],{"className":30360,"code":108283,"language":30362,"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,108285,108286,108298,108302,108308,108318,108322,108326,108334,108339,108343,108347,108351,108355,108360,108364,108368,108372,108376,108380,108384,108388,108392,108396,108400,108404,108416,108428,108436,108461,108465,108481,108485,108489,108504,108513,108517,108531,108536,108541,108545,108557,108569,108573,108577,108589],{"__ignoreMap":10},[92,108287,108288,108290,108293,108295],{"class":94,"line":95},[92,108289,30719],{"class":98},[92,108291,108292],{"class":102}," pathlib ",[92,108294,30374],{"class":98},[92,108296,108297],{"class":102}," Path\n",[92,108299,108300],{"class":94,"line":11},[92,108301,2379],{"emptyLinePlaceholder":17},[92,108303,108304,108306],{"class":94,"line":1158},[92,108305,30374],{"class":98},[92,108307,101282],{"class":102},[92,108309,108310,108312,108314,108316],{"class":94,"line":1173},[92,108311,30719],{"class":98},[92,108313,47245],{"class":151},[92,108315,47248],{"class":98},[92,108317,47251],{"class":102},[92,108319,108320],{"class":94,"line":1179},[92,108321,2379],{"emptyLinePlaceholder":17},[92,108323,108324],{"class":94,"line":1193},[92,108325,2379],{"emptyLinePlaceholder":17},[92,108327,108328,108330,108332],{"class":94,"line":1199},[92,108329,101295],{"class":151},[92,108331,13544],{"class":98},[92,108333,101300],{"class":207},[92,108335,108336],{"class":94,"line":1290},[92,108337,108338],{"class":207},"\u003Cmujoco model=\"renderer_demo\">\n",[92,108340,108341],{"class":94,"line":1296},[92,108342,101310],{"class":207},[92,108344,108345],{"class":94,"line":1308},[92,108346,2379],{"emptyLinePlaceholder":17},[92,108348,108349],{"class":94,"line":1591},[92,108350,101319],{"class":207},[92,108352,108353],{"class":94,"line":1596},[92,108354,108068],{"class":207},[92,108356,108357],{"class":94,"line":1602},[92,108358,108359],{"class":207},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[92,108361,108362],{"class":94,"line":1607},[92,108363,108073],{"class":207},[92,108365,108366],{"class":94,"line":1621},[92,108367,2379],{"emptyLinePlaceholder":17},[92,108369,108370],{"class":94,"line":1626},[92,108371,101333],{"class":207},[92,108373,108374],{"class":94,"line":1632},[92,108375,101338],{"class":207},[92,108377,108378],{"class":94,"line":1653},[92,108379,108090],{"class":207},[92,108381,108382],{"class":94,"line":1658},[92,108383,101348],{"class":207},[92,108385,108386],{"class":94,"line":1672},[92,108387,101353],{"class":207},[92,108389,108390],{"class":94,"line":1677},[92,108391,101358],{"class":207},[92,108393,108394],{"class":94,"line":1706},[92,108395,95679],{"class":207},[92,108397,108398],{"class":94,"line":1711},[92,108399,2379],{"emptyLinePlaceholder":17},[92,108401,108402],{"class":94,"line":1728},[92,108403,2379],{"emptyLinePlaceholder":17},[92,108405,108406,108408,108410,108412,108414],{"class":94,"line":1733},[92,108407,31929],{"class":98},[92,108409,1952],{"class":1942},[92,108411,101379],{"class":102},[92,108413,95667],{"class":151},[92,108415,3718],{"class":102},[92,108417,108418,108420,108422,108424,108426],{"class":94,"line":1738},[92,108419,101388],{"class":102},[92,108421,148],{"class":98},[92,108423,101393],{"class":102},[92,108425,101295],{"class":151},[92,108427,109],{"class":102},[92,108429,108430,108432,108434],{"class":94,"line":1743},[92,108431,101402],{"class":102},[92,108433,148],{"class":98},[92,108435,101407],{"class":102},[92,108437,108438,108441,108443,108445,108447,108449,108451,108453,108455,108457,108459],{"class":94,"line":1757},[92,108439,108440],{"class":102},"    renderer ",[92,108442,148],{"class":98},[92,108444,107855],{"class":102},[92,108446,24963],{"class":5196},[92,108448,148],{"class":98},[92,108450,42324],{"class":151},[92,108452,12415],{"class":102},[92,108454,24959],{"class":5196},[92,108456,148],{"class":98},[92,108458,107870],{"class":151},[92,108460,109],{"class":102},[92,108462,108463],{"class":94,"line":1762},[92,108464,2379],{"emptyLinePlaceholder":17},[92,108466,108467,108469,108471,108473,108475,108477,108479],{"class":94,"line":2556},[92,108468,3180],{"class":98},[92,108470,101482],{"class":102},[92,108472,26025],{"class":98},[92,108474,32425],{"class":151},[92,108476,103],{"class":102},[92,108478,414],{"class":151},[92,108480,30768],{"class":102},[92,108482,108483],{"class":94,"line":2570},[92,108484,101497],{"class":102},[92,108486,108487],{"class":94,"line":2578},[92,108488,2379],{"emptyLinePlaceholder":17},[92,108490,108491,108494,108497,108499,108502],{"class":94,"line":2583},[92,108492,108493],{"class":102},"    renderer.update_scene(data, ",[92,108495,108496],{"class":5196},"camera",[92,108498,148],{"class":98},[92,108500,108501],{"class":207},"\"fixed_camera\"",[92,108503,109],{"class":102},[92,108505,108506,108509,108511],{"class":94,"line":2589},[92,108507,108508],{"class":102},"    image ",[92,108510,148],{"class":98},[92,108512,107566],{"class":102},[92,108514,108515],{"class":94,"line":2595},[92,108516,2379],{"emptyLinePlaceholder":17},[92,108518,108519,108522,108524,108527,108529],{"class":94,"line":2600},[92,108520,108521],{"class":102},"    output_path ",[92,108523,148],{"class":98},[92,108525,108526],{"class":102}," Path(",[92,108528,107996],{"class":207},[92,108530,109],{"class":102},[92,108532,108533],{"class":94,"line":7928},[92,108534,108535],{"class":102},"    Image.fromarray(image).save(output_path)\n",[92,108537,108538],{"class":94,"line":7952},[92,108539,108540],{"class":102},"    renderer.close()\n",[92,108542,108543],{"class":94,"line":7957},[92,108544,2379],{"emptyLinePlaceholder":17},[92,108546,108547,108549,108551,108554],{"class":94,"line":7963},[92,108548,31281],{"class":151},[92,108550,103],{"class":102},[92,108552,108553],{"class":207},"\"saved:\"",[92,108555,108556],{"class":102},", output_path.resolve())\n",[92,108558,108559,108561,108563,108566],{"class":94,"line":7990},[92,108560,31281],{"class":151},[92,108562,103],{"class":102},[92,108564,108565],{"class":207},"\"image shape:\"",[92,108567,108568],{"class":102},", image.shape)\n",[92,108570,108571],{"class":94,"line":7995},[92,108572,2379],{"emptyLinePlaceholder":17},[92,108574,108575],{"class":94,"line":8001},[92,108576,2379],{"emptyLinePlaceholder":17},[92,108578,108579,108581,108583,108585,108587],{"class":94,"line":8013},[92,108580,1510],{"class":98},[92,108582,31202],{"class":151},[92,108584,101540],{"class":98},[92,108586,101543],{"class":207},[92,108588,3718],{"class":102},[92,108590,108591],{"class":94,"line":8025},[92,108592,101550],{"class":102},[38,108594,103551],{},[83,108596,108598],{"className":23803,"code":108597,"language":23805,"meta":10,"style":10},"touch ch5_renderer.py\n",[89,108599,108600],{"__ignoreMap":10},[92,108601,108602,108604],{"class":94,"line":95},[92,108603,101264],{"class":1942},[92,108605,108606],{"class":207}," ch5_renderer.py\n",[63,108608,101553],{"id":101553},[38,108610,108611],{},"viewer 上下文：",[83,108613,108615],{"className":30360,"code":108614,"language":30362,"meta":10,"style":10},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[89,108616,108617],{"__ignoreMap":10},[92,108618,108619,108621,108623,108625],{"class":94,"line":95},[92,108620,107814],{"class":98},[92,108622,107817],{"class":102},[92,108624,31365],{"class":98},[92,108626,107822],{"class":102},[38,108628,108629,108631],{},[89,108630,107814],{}," 语句会创建窗口，并在退出时自动清理资源。",[38,108633,108634],{},"窗口循环：",[83,108636,108638],{"className":30360,"code":108637,"language":30362,"meta":10,"style":10},"while viewer.is_running() and data.time \u003C 5.0:\n",[89,108639,108640],{"__ignoreMap":10},[92,108641,108642,108645,108647,108649,108651,108653,108655],{"class":94,"line":95},[92,108643,108644],{"class":98},"while",[92,108646,108168],{"class":102},[92,108648,30444],{"class":98},[92,108650,108173],{"class":102},[92,108652,1013],{"class":98},[92,108654,108178],{"class":151},[92,108656,3718],{"class":102},[38,108658,108659],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[38,108661,108662],{},"固定相机：",[83,108664,108666],{"className":53049,"code":108665,"language":53051,"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,108667,108668],{"__ignoreMap":10},[92,108669,108670,108672,108674,108676,108678,108680,108682,108684,108687,108690,108692,108695],{"class":94,"line":95},[92,108671,1013],{"class":102},[92,108673,108496],{"class":51282},[92,108675,14900],{"class":1942},[92,108677,148],{"class":102},[92,108679,108501],{"class":207},[92,108681,101087],{"class":1942},[92,108683,148],{"class":102},[92,108685,108686],{"class":207},"\"1.5 -2.0 1.2\"",[92,108688,108689],{"class":1942}," xyaxes",[92,108691,148],{"class":102},[92,108693,108694],{"class":207},"\"1 0.75 0 0 0 1\"",[92,108696,101125],{"class":102},[38,108698,108699],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[63,108701,108703],{"id":108702},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[83,108705,108707],{"className":30360,"code":108706,"language":30362,"meta":10,"style":10},"import time\n",[89,108708,108709],{"__ignoreMap":10},[92,108710,108711,108713],{"class":94,"line":95},[92,108712,30374],{"class":98},[92,108714,31811],{"class":102},[38,108716,108717],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[83,108719,108721],{"className":30360,"code":108720,"language":30362,"meta":10,"style":10},"import mujoco\nimport mujoco.viewer\n",[89,108722,108723,108729],{"__ignoreMap":10},[92,108724,108725,108727],{"class":94,"line":95},[92,108726,30374],{"class":98},[92,108728,101282],{"class":102},[92,108730,108731,108733],{"class":94,"line":11},[92,108732,30374],{"class":98},[92,108734,107533],{"class":102},[38,108736,108737],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[83,108739,108740],{"className":30360,"code":108614,"language":30362,"meta":10,"style":10},[89,108741,108742],{"__ignoreMap":10},[92,108743,108744,108746,108748,108750],{"class":94,"line":95},[92,108745,107814],{"class":98},[92,108747,107817],{"class":102},[92,108749,31365],{"class":98},[92,108751,107822],{"class":102},[38,108753,108754,108755,108758],{},"打开一个 viewer 窗口。",[89,108756,108757],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[83,108760,108761],{"className":30360,"code":108637,"language":30362,"meta":10,"style":10},[89,108762,108763],{"__ignoreMap":10},[92,108764,108765,108767,108769,108771,108773,108775,108777],{"class":94,"line":95},[92,108766,108644],{"class":98},[92,108768,108168],{"class":102},[92,108770,30444],{"class":98},[92,108772,108173],{"class":102},[92,108774,1013],{"class":98},[92,108776,108178],{"class":151},[92,108778,3718],{"class":102},[38,108780,108781,108782,108785],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[89,108783,108784],{},"viewer.is_running()"," 会变成 false，循环结束。",[83,108787,108789],{"className":30360,"code":108788,"language":30362,"meta":10,"style":10},"step_start = time.time()\n",[89,108790,108791],{"__ignoreMap":10},[92,108792,108793,108796,108798],{"class":94,"line":95},[92,108794,108795],{"class":102},"step_start ",[92,108797,148],{"class":98},[92,108799,108190],{"class":102},[38,108801,108802],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[83,108804,108805],{"className":30360,"code":107899,"language":30362,"meta":10,"style":10},[89,108806,108807,108811],{"__ignoreMap":10},[92,108808,108809],{"class":94,"line":95},[92,108810,104486],{"class":102},[92,108812,108813],{"class":94,"line":11},[92,108814,107910],{"class":102},[38,108816,108817,108819,108820,108822,108823,108825,108826,108829],{},[89,108818,101196],{}," 推进物理仿真。",[89,108821,107918],{}," 把最新的 ",[89,108824,33383],{}," 同步到窗口里显示。没有 ",[89,108827,108828],{},"sync()","，窗口可能看不到最新状态。",[83,108831,108832],{"className":30360,"code":107929,"language":30362,"meta":10,"style":10},[89,108833,108834],{"__ignoreMap":10},[92,108835,108836,108838,108840,108842,108844,108846,108848],{"class":94,"line":95},[92,108837,107936],{"class":102},[92,108839,148],{"class":98},[92,108841,107941],{"class":102},[92,108843,635],{"class":98},[92,108845,107946],{"class":102},[92,108847,635],{"class":98},[92,108849,107951],{"class":102},[38,108851,108852],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[83,108854,108856],{"className":30360,"code":108855,"language":30362,"meta":10,"style":10},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[89,108857,108858,108870],{"__ignoreMap":10},[92,108859,108860,108862,108864,108866,108868],{"class":94,"line":95},[92,108861,1510],{"class":98},[92,108863,108228],{"class":102},[92,108865,1063],{"class":98},[92,108867,4072],{"class":151},[92,108869,3718],{"class":102},[92,108871,108872],{"class":94,"line":11},[92,108873,108874],{"class":102},"    time.sleep(sleep_time)\n",[38,108876,108877],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[63,108879,108881],{"id":108880},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[83,108883,108885],{"className":30360,"code":108884,"language":30362,"meta":10,"style":10},"from pathlib import Path\n",[89,108886,108887],{"__ignoreMap":10},[92,108888,108889,108891,108893,108895],{"class":94,"line":95},[92,108890,30719],{"class":98},[92,108892,108292],{"class":102},[92,108894,30374],{"class":98},[92,108896,108297],{"class":102},[38,108898,108899,108900,108903,108904,108907],{},"导入 ",[89,108901,108902],{},"Path","，用来处理文件路径。相比直接写字符串，",[89,108905,108906],{},"Path(\"render_output.png\")"," 更清晰。",[83,108909,108911],{"className":30360,"code":108910,"language":30362,"meta":10,"style":10},"from PIL import Image\n",[89,108912,108913],{"__ignoreMap":10},[92,108914,108915,108917,108919,108921],{"class":94,"line":95},[92,108916,30719],{"class":98},[92,108918,47245],{"class":151},[92,108920,47248],{"class":98},[92,108922,47251],{"class":102},[38,108924,108925],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[83,108927,108928],{"className":53049,"code":108665,"language":53051,"meta":10,"style":10},[89,108929,108930],{"__ignoreMap":10},[92,108931,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954],{"class":94,"line":95},[92,108933,1013],{"class":102},[92,108935,108496],{"class":51282},[92,108937,14900],{"class":1942},[92,108939,148],{"class":102},[92,108941,108501],{"class":207},[92,108943,101087],{"class":1942},[92,108945,148],{"class":102},[92,108947,108686],{"class":207},[92,108949,108689],{"class":1942},[92,108951,148],{"class":102},[92,108953,108694],{"class":207},[92,108955,101125],{"class":102},[38,108957,108958,108959,108961,108962,108964,108965,108968,108969,108971],{},"定义一个相机。",[89,108960,79792],{}," 是相机名字。",[89,108963,104127],{}," 是相机在世界里的位置。",[89,108966,108967],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[89,108970,104127],{}," 来调视角。",[83,108973,108975],{"className":30360,"code":108974,"language":30362,"meta":10,"style":10},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[89,108976,108977],{"__ignoreMap":10},[92,108978,108979,108981,108983,108985,108987,108989,108991,108993,108995,108997,108999],{"class":94,"line":95},[92,108980,107551],{"class":102},[92,108982,148],{"class":98},[92,108984,107855],{"class":102},[92,108986,24963],{"class":5196},[92,108988,148],{"class":98},[92,108990,42324],{"class":151},[92,108992,12415],{"class":102},[92,108994,24959],{"class":5196},[92,108996,148],{"class":98},[92,108998,107870],{"class":151},[92,109000,109],{"class":102},[38,109002,109003,109004,100999,109006,109008],{},"创建离屏渲染器。",[89,109005,24963],{},[89,109007,24959],{}," 决定输出图片大小。",[83,109010,109011],{"className":30360,"code":101657,"language":30362,"meta":10,"style":10},[89,109012,109013,109029],{"__ignoreMap":10},[92,109014,109015,109017,109019,109021,109023,109025,109027],{"class":94,"line":95},[92,109016,3004],{"class":98},[92,109018,101482],{"class":102},[92,109020,26025],{"class":98},[92,109022,32425],{"class":151},[92,109024,103],{"class":102},[92,109026,414],{"class":151},[92,109028,30768],{"class":102},[92,109030,109031],{"class":94,"line":11},[92,109032,101680],{"class":102},[38,109034,109035],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[83,109037,109039],{"className":30360,"code":109038,"language":30362,"meta":10,"style":10},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[89,109040,109041],{"__ignoreMap":10},[92,109042,109043,109046,109048,109050,109052],{"class":94,"line":95},[92,109044,109045],{"class":102},"renderer.update_scene(data, ",[92,109047,108496],{"class":5196},[92,109049,148],{"class":98},[92,109051,108501],{"class":207},[92,109053,109],{"class":102},[38,109055,109056,109057,109059,109060,109063],{},"告诉 renderer：用当前 ",[89,109058,33383],{}," 的状态更新画面，并使用名为 ",[89,109061,109062],{},"fixed_camera"," 的相机视角。",[83,109065,109066],{"className":30360,"code":107961,"language":30362,"meta":10,"style":10},[89,109067,109068],{"__ignoreMap":10},[92,109069,109070,109072,109074],{"class":94,"line":95},[92,109071,107561],{"class":102},[92,109073,148],{"class":98},[92,109075,107566],{"class":102},[38,109077,109078,109079,109082],{},"真正渲染出图像。",[89,109080,109081],{},"image"," 是一个 NumPy 数组，不是文件。",[83,109084,109086],{"className":30360,"code":109085,"language":30362,"meta":10,"style":10},"Image.fromarray(image).save(output_path)\n",[89,109087,109088],{"__ignoreMap":10},[92,109089,109090],{"class":94,"line":95},[92,109091,109085],{"class":102},[38,109093,109094,109095,28367],{},"把数组转换成图片，并保存到 ",[89,109096,109097],{},"render_output.png",[83,109099,109101],{"className":30360,"code":109100,"language":30362,"meta":10,"style":10},"renderer.close()\n",[89,109102,109103],{"__ignoreMap":10},[92,109104,109105],{"class":94,"line":95},[92,109106,109100],{"class":102},[38,109108,109109],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[33,109111,102297],{"id":102296},[38,109113,109114,109115,109117,109118,28367],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[89,109116,109097],{},"，并输出图像数组形状，例如 ",[89,109119,109120],{},"(480, 640, 3)",[38,109122,109123],{},"如果图片里看不到方块，先检查：",[46,109125,109126,109129,109132],{},[49,109127,109128],{},"方块是否掉到相机视野外。",[49,109130,109131],{},"camera 位置是否合理。",[49,109133,109134,109135,109138],{},"是否在 ",[89,109136,109137],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[33,109140,102329],{"id":102328},[38,109142,109143],{},"运行 viewer:",[83,109145,109147],{"className":23803,"code":109146,"language":23805,"meta":10,"style":10},"python ch5_viewer.py\n",[89,109148,109149],{"__ignoreMap":10},[92,109150,109151,109153],{"class":94,"line":95},[92,109152,30362],{"class":1942},[92,109154,108277],{"class":207},[38,109156,109157],{},"运行 renderer:",[83,109159,109161],{"className":23803,"code":109160,"language":23805,"meta":10,"style":10},"python ch5_renderer.py\n",[89,109162,109163],{"__ignoreMap":10},[92,109164,109165,109167],{"class":94,"line":95},[92,109166,30362],{"class":1942},[92,109168,108606],{"class":207},[38,109170,109171],{},"如果在服务器上运行:",[83,109173,109175],{"className":23803,"code":109174,"language":23805,"meta":10,"style":10},"MUJOCO_GL=egl python ch5_renderer.py\n",[89,109176,109177],{"__ignoreMap":10},[92,109178,109179,109181,109183,109185,109188],{"class":94,"line":95},[92,109180,107795],{"class":102},[92,109182,148],{"class":98},[92,109184,107785],{"class":207},[92,109186,109187],{"class":1942}," python",[92,109189,108606],{"class":207},[38,109191,107763],{},[83,109193,109195],{"className":23803,"code":109194,"language":23805,"meta":10,"style":10},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[89,109196,109197],{"__ignoreMap":10},[92,109198,109199,109201,109203,109205,109207],{"class":94,"line":95},[92,109200,107795],{"class":102},[92,109202,148],{"class":98},[92,109204,107789],{"class":207},[92,109206,109187],{"class":1942},[92,109208,108606],{"class":207},[38,109210,109211],{},"再做几个练习：",[46,109213,109214,109221,109224,109230],{},[49,109215,109216,109217,109220],{},"把 renderer 分辨率改成 ",[89,109218,109219],{},"height=240, width=320","，观察输出 shape。",[49,109222,109223],{},"把方块颜色改成蓝色，重新保存图片。",[49,109225,109226,109227,109229],{},"把相机 ",[89,109228,104127],{}," 改远一点，观察画面中物体是否变小。",[49,109231,109232,109233,102395,109236,109239],{},"把 viewer 示例中的 ",[89,109234,109235],{},"data.time \u003C 5.0",[89,109237,109238],{},"data.time \u003C 20.0","，观察更长时间。",[33,109241,102434],{"id":102433},[63,109243,109245],{"id":109244},"viewer-窗口打不开","viewer 窗口打不开",[38,109247,109248],{},"安装:",[83,109250,109252],{"className":23803,"code":109251,"language":23805,"meta":10,"style":10},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[89,109253,109254],{"__ignoreMap":10},[92,109255,109256,109258,109260,109262,109264,109266,109268,109270,109272,109274,109276],{"class":94,"line":95},[92,109257,24558],{"class":1942},[92,109259,26297],{"class":207},[92,109261,23815],{"class":207},[92,109263,26382],{"class":151},[92,109265,102487],{"class":207},[92,109267,100815],{"class":207},[92,109269,102492],{"class":207},[92,109271,100828],{"class":207},[92,109273,100834],{"class":207},[92,109275,100825],{"class":207},[92,109277,109278],{"class":207}," libXinerama\n",[63,109280,109282],{"id":109281},"glfwerror",[89,109283,109284],{},"GLFWError",[38,109286,109287],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[63,109289,109291],{"id":109290},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[38,109293,109294,109295,82521,109297,109299],{},"尝试 ",[89,109296,101018],{},[89,109298,101021],{},"。可能存在版本差异。",[63,109301,109302],{"id":109302},"保存图片是黑的",[38,109304,102556],{},[46,109306,109307,109310,109313,109323],{},[49,109308,109309],{},"XML 里是否有 light。",[49,109311,109312],{},"相机是否对着模型。",[49,109314,109315,109316,109319,109320,28367],{},"是否先 ",[89,109317,109318],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[89,109321,109322],{},"renderer.render()",[49,109324,109325],{},"物体是否已经掉出视野。",[63,109327,109328],{"id":109328},"远程服务器没有显示器",[38,109330,109331],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[83,109333,109334],{"className":23803,"code":109174,"language":23805,"meta":10,"style":10},[89,109335,109336],{"__ignoreMap":10},[92,109337,109338,109340,109342,109344,109346],{"class":94,"line":95},[92,109339,107795],{"class":102},[92,109341,148],{"class":98},[92,109343,107785],{"class":207},[92,109345,109187],{"class":1942},[92,109347,108606],{"class":207},[38,109349,109350],{},"如果 EGL 不可用，再尝试：",[83,109352,109353],{"className":23803,"code":109194,"language":23805,"meta":10,"style":10},[89,109354,109355],{"__ignoreMap":10},[92,109356,109357,109359,109361,109363,109365],{"class":94,"line":95},[92,109358,107795],{"class":102},[92,109360,148],{"class":98},[92,109362,107789],{"class":207},[92,109364,109187],{"class":1942},[92,109366,108606],{"class":207},[33,109368,102588],{"id":102587},[38,109370,109371],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[46,109373,109374,109377,109380],{},[49,109375,109376],{},"先用 viewer 看模型和控制是否正常。",[49,109378,109379],{},"再用 renderer 保存图片或构造视觉观测。",[49,109381,109382],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5106,109384,109385],{},"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":109387},[109388,109389,109390,109395,109400,109401,109402,109409],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":109391},[109392,109393,109394],{"id":107892,"depth":1158,"text":107893},{"id":107922,"depth":1158,"text":107923},{"id":107957,"depth":1158,"text":107958},{"id":101233,"depth":11,"text":101234,"children":109396},[109397,109398,109399],{"id":101553,"depth":1158,"text":101553},{"id":108702,"depth":1158,"text":108703},{"id":108880,"depth":1158,"text":108881},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":109403},[109404,109405,109406,109407,109408],{"id":109244,"depth":1158,"text":109245},{"id":109281,"depth":1158,"text":109284},{"id":109290,"depth":1158,"text":109291},{"id":109302,"depth":1158,"text":109302},{"id":109328,"depth":1158,"text":109328},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107500,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109416,"title":109417,"body":109418,"description":10,"extension":14,"meta":111329,"navigation":17,"path":111330,"seo":111331,"stem":111332,"__hash__":111333},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109419,"toc":111305},[109420,109423,109425,109428,109430,109449,109452,109458,109461,109463,109465,109489,109491,109505,109507,109548,109550,109561,109563,109566,109572,109575,109609,109612,109644,109647,109679,109683,109686,109726,109729,109735,109738,109744,109748,109751,109757,109760,109764,109767,109807,109809,109822,109825,109827,110409,110411,110423,110426,110437,110439,110442,110461,110473,110476,110497,110500,110503,110546,110549,110552,110572,110579,110581,110599,110614,110617,110623,110626,110632,110649,110656,110687,110698,110732,110743,110760,110769,110777,110782,110796,110799,110820,110826,110840,110845,110875,110885,110910,110918,110941,110944,110960,110963,110971,110977,110999,111012,111033,111042,111081,111092,111094,111097,111103,111106,111109,111115,111118,111138,111141,111143,111182,111184,111187,111195,111198,111201,111228,111231,111241,111247,111250,111256,111258,111264,111268,111271,111273,111276,111300,111303],[29,109421,109417],{"id":109422},"_6控制任务cartpole",[33,109424,100628],{"id":100627},[38,109426,109427],{},"本章搭建一个最小 Cartpole 控制任务。",[38,109429,104312],{},[46,109431,109432,109435,109437,109440,109443,109446],{},[49,109433,109434],{},"slide joint",[49,109436,106165],{},[49,109438,109439],{},"cart force actuator",[49,109441,109442],{},"状态观测",[49,109444,109445],{},"简单控制循环",[49,109447,109448],{},"reward 设计雏形",[38,109450,109451],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[83,109453,109456],{"className":109454,"code":109455,"language":5167,"meta":10},[5165],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[89,109457,109455],{"__ignoreMap":10},[38,109459,109460],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[33,109462,100751],{"id":100750},[38,109464,100754],{},[83,109466,109467],{"className":23803,"code":104369,"language":23805,"meta":10,"style":10},[89,109468,109469],{"__ignoreMap":10},[92,109470,109471,109473,109475,109477,109479,109481,109483,109485,109487],{"class":94,"line":95},[92,109472,24558],{"class":1942},[92,109474,26297],{"class":207},[92,109476,23815],{"class":207},[92,109478,26382],{"class":151},[92,109480,104384],{"class":207},[92,109482,100779],{"class":207},[92,109484,102482],{"class":207},[92,109486,100795],{"class":207},[92,109488,104393],{"class":207},[38,109490,102800],{},[83,109492,109493],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},[89,109494,109495],{"__ignoreMap":10},[92,109496,109497,109499,109501,109503],{"class":94,"line":95},[92,109498,23812],{"class":1942},[92,109500,23815],{"class":207},[92,109502,100911],{"class":207},[92,109504,100914],{"class":207},[38,109506,102817],{},[83,109508,109510],{"className":23803,"code":109509,"language":23805,"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,109511,109512,109529,109538],{"__ignoreMap":10},[92,109513,109514,109516,109518,109520,109523,109525,109527],{"class":94,"line":95},[92,109515,30312],{"class":1942},[92,109517,29158],{"class":207},[92,109519,25097],{"class":151},[92,109521,109522],{"class":207}," mujoco-cartpole",[92,109524,100956],{"class":207},[92,109526,100959],{"class":151},[92,109528,100962],{"class":151},[92,109530,109531,109533,109535],{"class":94,"line":11},[92,109532,30312],{"class":1942},[92,109534,100969],{"class":207},[92,109536,109537],{"class":207}," mujoco-cartpole\n",[92,109539,109540,109542,109544,109546],{"class":94,"line":1158},[92,109541,23812],{"class":1942},[92,109543,23815],{"class":207},[92,109545,100911],{"class":207},[92,109547,100914],{"class":207},[38,109549,100985],{},[46,109551,109552,109555,109558],{},[49,109553,109554],{},"本章不依赖 Gymnasium。",[49,109556,109557],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[49,109559,109560],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[33,109562,101026],{"id":101025},[38,109564,109565],{},"Cartpole 的模型结构:",[83,109567,109570],{"className":109568,"code":109569,"language":5167,"meta":10},[5165],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[89,109571,109569],{"__ignoreMap":10},[38,109573,109574],{},"小车通过 slide joint 左右移动:",[83,109576,109578],{"className":53049,"code":109577,"language":53051,"meta":10,"style":10},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[89,109579,109580],{"__ignoreMap":10},[92,109581,109582,109584,109586,109588,109590,109593,109595,109597,109600,109602,109604,109607],{"class":94,"line":95},[92,109583,1013],{"class":102},[92,109585,102937],{"class":51282},[92,109587,14900],{"class":1942},[92,109589,148],{"class":102},[92,109591,109592],{"class":207},"\"cart_x\"",[92,109594,53806],{"class":1942},[92,109596,148],{"class":102},[92,109598,109599],{"class":207},"\"slide\"",[92,109601,106009],{"class":1942},[92,109603,148],{"class":102},[92,109605,109606],{"class":207},"\"1 0 0\"",[92,109608,101125],{"class":102},[38,109610,109611],{},"杆子通过 hinge joint 旋转:",[83,109613,109615],{"className":53049,"code":109614,"language":53051,"meta":10,"style":10},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[89,109616,109617],{"__ignoreMap":10},[92,109618,109619,109621,109623,109625,109627,109630,109632,109634,109636,109638,109640,109642],{"class":94,"line":95},[92,109620,1013],{"class":102},[92,109622,102937],{"class":51282},[92,109624,14900],{"class":1942},[92,109626,148],{"class":102},[92,109628,109629],{"class":207},"\"pole_hinge\"",[92,109631,53806],{"class":1942},[92,109633,148],{"class":102},[92,109635,106000],{"class":207},[92,109637,106009],{"class":1942},[92,109639,148],{"class":102},[92,109641,106014],{"class":207},[92,109643,101125],{"class":102},[38,109645,109646],{},"控制力作用在小车 slide joint 上:",[83,109648,109650],{"className":53049,"code":109649,"language":53051,"meta":10,"style":10},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[89,109651,109652],{"__ignoreMap":10},[92,109653,109654,109656,109658,109660,109662,109665,109667,109669,109671,109673,109675,109677],{"class":94,"line":95},[92,109655,1013],{"class":102},[92,109657,106055],{"class":51282},[92,109659,14900],{"class":1942},[92,109661,148],{"class":102},[92,109663,109664],{"class":207},"\"cart_motor\"",[92,109666,106065],{"class":1942},[92,109668,148],{"class":102},[92,109670,109592],{"class":207},[92,109672,106072],{"class":1942},[92,109674,148],{"class":102},[92,109676,54298],{"class":207},[92,109678,101125],{"class":102},[63,109680,109682],{"id":109681},"cartpole-的状态是什么","Cartpole 的状态是什么",[38,109684,109685],{},"这个简化模型有两个关节：",[240,109687,109688,109699],{},[243,109689,109690],{},[246,109691,109692,109694,109696],{},[249,109693,102740],{"align":23717},[249,109695,23718],{"align":23717},[249,109697,109698],{"align":23717},"对应状态",[287,109700,109701,109714],{},[246,109702,109703,109708,109711],{},[292,109704,109705],{"align":23717},[89,109706,109707],{},"cart_x",[292,109709,109710],{"align":23717},"slide",[292,109712,109713],{"align":23717},"小车 x 位置",[246,109715,109716,109721,109723],{},[292,109717,109718],{"align":23717},[89,109719,109720],{},"pole_hinge",[292,109722,105821],{"align":23717},[292,109724,109725],{"align":23717},"杆子角度",[38,109727,109728],{},"所以：",[83,109730,109733],{"className":109731,"code":109732,"language":5167,"meta":10},[5165],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[89,109734,109732],{"__ignoreMap":10},[38,109736,109737],{},"把它们拼起来就是观测：",[83,109739,109742],{"className":109740,"code":109741,"language":5167,"meta":10},[5165],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[89,109743,109741],{"__ignoreMap":10},[63,109745,109747],{"id":109746},"action-是什么","action 是什么",[38,109749,109750],{},"本章只有一个 actuator：",[83,109752,109755],{"className":109753,"code":109754,"language":5167,"meta":10},[5165],"data.ctrl[0] = action\n",[89,109756,109754],{"__ignoreMap":10},[38,109758,109759],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[63,109761,109763],{"id":109762},"reward-是什么","reward 是什么",[38,109765,109766],{},"奖励函数：",[83,109768,109770],{"className":30360,"code":109769,"language":30362,"meta":10,"style":10},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[89,109771,109772],{"__ignoreMap":10},[92,109773,109774,109776,109779,109781,109783,109785,109788,109790,109793,109795,109797,109799,109802,109804],{"class":94,"line":95},[92,109775,17026],{"class":98},[92,109777,109778],{"class":151}," float",[92,109780,103],{"class":102},[92,109782,102384],{"class":151},[92,109784,52253],{"class":98},[92,109786,109787],{"class":151}," 0.1",[92,109789,6498],{"class":98},[92,109791,109792],{"class":102}," cart_x ",[92,109794,558],{"class":98},[92,109796,109792],{"class":102},[92,109798,635],{"class":98},[92,109800,109801],{"class":102}," pole_angle ",[92,109803,558],{"class":98},[92,109805,109806],{"class":102}," pole_angle)\n",[38,109808,106207],{},[46,109810,109811,109816,109819],{},[49,109812,109813,109814,28367],{},"基础奖励是 ",[89,109815,102384],{},[49,109817,109818],{},"小车离中心越远，扣分越多。",[49,109820,109821],{},"杆子角度越大，扣分越多。",[38,109823,109824],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[33,109826,101234],{"id":101233},[83,109828,109830],{"className":30360,"code":109829,"language":30362,"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,109831,109832,109838,109848,109852,109856,109864,109869,109873,109877,109881,109886,109890,109895,109900,109905,109909,109914,109919,109924,109928,109932,109936,109940,109944,109949,109953,109957,109961,109965,109969,109979,109986,109990,109994,110008,110022,110035,110065,110069,110073,110085,110097,110105,110109,110122,110126,110130,110139,110143,110159,110169,110182,110195,110199,110222,110240,110244,110256,110260,110264,110274,110284,110288,110304,110345,110349,110369,110385,110389,110393,110405],{"__ignoreMap":10},[92,109833,109834,109836],{"class":94,"line":95},[92,109835,30374],{"class":98},[92,109837,101282],{"class":102},[92,109839,109840,109842,109844,109846],{"class":94,"line":11},[92,109841,30374],{"class":98},[92,109843,31362],{"class":102},[92,109845,31365],{"class":98},[92,109847,31368],{"class":102},[92,109849,109850],{"class":94,"line":1158},[92,109851,2379],{"emptyLinePlaceholder":17},[92,109853,109854],{"class":94,"line":1173},[92,109855,2379],{"emptyLinePlaceholder":17},[92,109857,109858,109860,109862],{"class":94,"line":1179},[92,109859,101295],{"class":151},[92,109861,13544],{"class":98},[92,109863,101300],{"class":207},[92,109865,109866],{"class":94,"line":1193},[92,109867,109868],{"class":207},"\u003Cmujoco model=\"cartpole\">\n",[92,109870,109871],{"class":94,"line":1199},[92,109872,101310],{"class":207},[92,109874,109875],{"class":94,"line":1290},[92,109876,2379],{"emptyLinePlaceholder":17},[92,109878,109879],{"class":94,"line":1296},[92,109880,101319],{"class":207},[92,109882,109883],{"class":94,"line":1308},[92,109884,109885],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[92,109887,109888],{"class":94,"line":1591},[92,109889,2379],{"emptyLinePlaceholder":17},[92,109891,109892],{"class":94,"line":1596},[92,109893,109894],{"class":207},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[92,109896,109897],{"class":94,"line":1602},[92,109898,109899],{"class":207},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[92,109901,109902],{"class":94,"line":1607},[92,109903,109904],{"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,109906,109907],{"class":94,"line":1621},[92,109908,2379],{"emptyLinePlaceholder":17},[92,109910,109911],{"class":94,"line":1626},[92,109912,109913],{"class":207},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[92,109915,109916],{"class":94,"line":1632},[92,109917,109918],{"class":207},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[92,109920,109921],{"class":94,"line":1653},[92,109922,109923],{"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,109925,109926],{"class":94,"line":1658},[92,109927,106419],{"class":207},[92,109929,109930],{"class":94,"line":1672},[92,109931,101348],{"class":207},[92,109933,109934],{"class":94,"line":1677},[92,109935,101353],{"class":207},[92,109937,109938],{"class":94,"line":1706},[92,109939,2379],{"emptyLinePlaceholder":17},[92,109941,109942],{"class":94,"line":1711},[92,109943,106436],{"class":207},[92,109945,109946],{"class":94,"line":1728},[92,109947,109948],{"class":207},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,109950,109951],{"class":94,"line":1733},[92,109952,106446],{"class":207},[92,109954,109955],{"class":94,"line":1738},[92,109956,101358],{"class":207},[92,109958,109959],{"class":94,"line":1743},[92,109960,95679],{"class":207},[92,109962,109963],{"class":94,"line":1757},[92,109964,2379],{"emptyLinePlaceholder":17},[92,109966,109967],{"class":94,"line":1762},[92,109968,2379],{"emptyLinePlaceholder":17},[92,109970,109971,109973,109976],{"class":94,"line":2556},[92,109972,31929],{"class":98},[92,109974,109975],{"class":1942}," get_observation",[92,109977,109978],{"class":102},"(data: mujoco.MjData) -> np.ndarray:\n",[92,109980,109981,109983],{"class":94,"line":2570},[92,109982,4069],{"class":98},[92,109984,109985],{"class":102}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[92,109987,109988],{"class":94,"line":2578},[92,109989,2379],{"emptyLinePlaceholder":17},[92,109991,109992],{"class":94,"line":2583},[92,109993,2379],{"emptyLinePlaceholder":17},[92,109995,109996,109998,110001,110004,110006],{"class":94,"line":2589},[92,109997,31929],{"class":98},[92,109999,110000],{"class":1942}," compute_reward",[92,110002,110003],{"class":102},"(obs: np.ndarray) -> ",[92,110005,142],{"class":151},[92,110007,3718],{"class":102},[92,110009,110010,110013,110015,110018,110020],{"class":94,"line":2595},[92,110011,110012],{"class":102},"    cart_x ",[92,110014,148],{"class":98},[92,110016,110017],{"class":102}," obs[",[92,110019,294],{"class":151},[92,110021,33228],{"class":102},[92,110023,110024,110027,110029,110031,110033],{"class":94,"line":2600},[92,110025,110026],{"class":102},"    pole_angle ",[92,110028,148],{"class":98},[92,110030,110017],{"class":102},[92,110032,320],{"class":151},[92,110034,33228],{"class":102},[92,110036,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059,110061,110063],{"class":94,"line":7928},[92,110038,4069],{"class":98},[92,110040,109778],{"class":151},[92,110042,103],{"class":102},[92,110044,102384],{"class":151},[92,110046,52253],{"class":98},[92,110048,109787],{"class":151},[92,110050,6498],{"class":98},[92,110052,109792],{"class":102},[92,110054,558],{"class":98},[92,110056,109792],{"class":102},[92,110058,635],{"class":98},[92,110060,109801],{"class":102},[92,110062,558],{"class":98},[92,110064,109806],{"class":102},[92,110066,110067],{"class":94,"line":7952},[92,110068,2379],{"emptyLinePlaceholder":17},[92,110070,110071],{"class":94,"line":7957},[92,110072,2379],{"emptyLinePlaceholder":17},[92,110074,110075,110077,110079,110081,110083],{"class":94,"line":7963},[92,110076,31929],{"class":98},[92,110078,1952],{"class":1942},[92,110080,101379],{"class":102},[92,110082,95667],{"class":151},[92,110084,3718],{"class":102},[92,110086,110087,110089,110091,110093,110095],{"class":94,"line":7990},[92,110088,101388],{"class":102},[92,110090,148],{"class":98},[92,110092,101393],{"class":102},[92,110094,101295],{"class":151},[92,110096,109],{"class":102},[92,110098,110099,110101,110103],{"class":94,"line":7995},[92,110100,101402],{"class":102},[92,110102,148],{"class":98},[92,110104,101407],{"class":102},[92,110106,110107],{"class":94,"line":8001},[92,110108,2379],{"emptyLinePlaceholder":17},[92,110110,110111,110113,110115,110117,110119],{"class":94,"line":8013},[92,110112,105050],{"class":102},[92,110114,320],{"class":151},[92,110116,4422],{"class":102},[92,110118,148],{"class":98},[92,110120,110121],{"class":151}," 0.1\n",[92,110123,110124],{"class":94,"line":8025},[92,110125,105063],{"class":102},[92,110127,110128],{"class":94,"line":8037},[92,110129,2379],{"emptyLinePlaceholder":17},[92,110131,110132,110135,110137],{"class":94,"line":9696},[92,110133,110134],{"class":102},"    total_reward ",[92,110136,148],{"class":98},[92,110138,104742],{"class":151},[92,110140,110141],{"class":94,"line":9721},[92,110142,2379],{"emptyLinePlaceholder":17},[92,110144,110145,110147,110149,110151,110153,110155,110157],{"class":94,"line":9744},[92,110146,3180],{"class":98},[92,110148,31598],{"class":102},[92,110150,26025],{"class":98},[92,110152,32425],{"class":151},[92,110154,103],{"class":102},[92,110156,6390],{"class":151},[92,110158,30768],{"class":102},[92,110160,110161,110164,110166],{"class":94,"line":9768},[92,110162,110163],{"class":102},"        obs ",[92,110165,148],{"class":98},[92,110167,110168],{"class":102}," get_observation(data)\n",[92,110170,110171,110174,110176,110178,110180],{"class":94,"line":9773},[92,110172,110173],{"class":102},"        pole_angle ",[92,110175,148],{"class":98},[92,110177,110017],{"class":102},[92,110179,320],{"class":151},[92,110181,33228],{"class":102},[92,110183,110184,110187,110189,110191,110193],{"class":94,"line":9778},[92,110185,110186],{"class":102},"        pole_angular_velocity ",[92,110188,148],{"class":98},[92,110190,110017],{"class":102},[92,110192,174],{"class":151},[92,110194,33228],{"class":102},[92,110196,110197],{"class":94,"line":9783},[92,110198,2379],{"emptyLinePlaceholder":17},[92,110200,110201,110204,110206,110209,110211,110213,110215,110217,110219],{"class":94,"line":9792},[92,110202,110203],{"class":102},"        action ",[92,110205,148],{"class":98},[92,110207,110208],{"class":151}," 2.0",[92,110210,6498],{"class":98},[92,110212,109801],{"class":102},[92,110214,584],{"class":98},[92,110216,61849],{"class":151},[92,110218,6498],{"class":98},[92,110220,110221],{"class":102}," pole_angular_velocity\n",[92,110223,110224,110226,110228,110230,110232,110234,110236,110238],{"class":94,"line":9797},[92,110225,110203],{"class":102},[92,110227,148],{"class":98},[92,110229,107428],{"class":102},[92,110231,635],{"class":98},[92,110233,102384],{"class":151},[92,110235,12415],{"class":102},[92,110237,102384],{"class":151},[92,110239,109],{"class":102},[92,110241,110242],{"class":94,"line":9803},[92,110243,2379],{"emptyLinePlaceholder":17},[92,110245,110246,110248,110250,110252,110254],{"class":94,"line":9824},[92,110247,106598],{"class":102},[92,110249,294],{"class":151},[92,110251,4422],{"class":102},[92,110253,148],{"class":98},[92,110255,107451],{"class":102},[92,110257,110258],{"class":94,"line":9830},[92,110259,101497],{"class":102},[92,110261,110262],{"class":94,"line":9844},[92,110263,2379],{"emptyLinePlaceholder":17},[92,110265,110266,110269,110271],{"class":94,"line":9850},[92,110267,110268],{"class":102},"        reward ",[92,110270,148],{"class":98},[92,110272,110273],{"class":102}," compute_reward(get_observation(data))\n",[92,110275,110276,110279,110281],{"class":94,"line":9877},[92,110277,110278],{"class":102},"        total_reward ",[92,110280,9457],{"class":98},[92,110282,110283],{"class":102}," reward\n",[92,110285,110286],{"class":94,"line":9886},[92,110287,2379],{"emptyLinePlaceholder":17},[92,110289,110290,110292,110294,110296,110298,110300,110302],{"class":94,"line":9892},[92,110291,2476],{"class":98},[92,110293,31598],{"class":102},[92,110295,431],{"class":98},[92,110297,5734],{"class":151},[92,110299,101540],{"class":98},[92,110301,4072],{"class":151},[92,110303,3718],{"class":102},[92,110305,110306,110308,110310,110313,110316,110319,110322,110324,110327,110330,110332,110334,110336,110338,110341,110343],{"class":94,"line":9900},[92,110307,34632],{"class":151},[92,110309,103],{"class":102},[92,110311,110312],{"class":207},"\"step:\"",[92,110314,110315],{"class":102},", step, ",[92,110317,110318],{"class":207},"\"obs:\"",[92,110320,110321],{"class":102},", np.round(obs, ",[92,110323,174],{"class":151},[92,110325,110326],{"class":102},"), ",[92,110328,110329],{"class":207},"\"action:\"",[92,110331,12415],{"class":102},[92,110333,32000],{"class":151},[92,110335,103],{"class":102},[92,110337,142],{"class":151},[92,110339,110340],{"class":102},"(action), ",[92,110342,174],{"class":151},[92,110344,30479],{"class":102},[92,110346,110347],{"class":94,"line":9905},[92,110348,2379],{"emptyLinePlaceholder":17},[92,110350,110351,110353,110355,110358,110360,110362,110365,110367],{"class":94,"line":16584},[92,110352,31281],{"class":151},[92,110354,103],{"class":102},[92,110356,110357],{"class":207},"\"total_reward:\"",[92,110359,12415],{"class":102},[92,110361,32000],{"class":151},[92,110363,110364],{"class":102},"(total_reward, ",[92,110366,174],{"class":151},[92,110368,30479],{"class":102},[92,110370,110371,110373,110375,110378,110381,110383],{"class":94,"line":16590},[92,110372,31281],{"class":151},[92,110374,103],{"class":102},[92,110376,110377],{"class":207},"\"final obs:\"",[92,110379,110380],{"class":102},", np.round(get_observation(data), ",[92,110382,174],{"class":151},[92,110384,30479],{"class":102},[92,110386,110387],{"class":94,"line":16613},[92,110388,2379],{"emptyLinePlaceholder":17},[92,110390,110391],{"class":94,"line":16619},[92,110392,2379],{"emptyLinePlaceholder":17},[92,110394,110395,110397,110399,110401,110403],{"class":94,"line":16642},[92,110396,1510],{"class":98},[92,110398,31202],{"class":151},[92,110400,101540],{"class":98},[92,110402,101543],{"class":207},[92,110404,3718],{"class":102},[92,110406,110407],{"class":94,"line":16656},[92,110408,101550],{"class":102},[38,110410,103551],{},[83,110412,110414],{"className":23803,"code":110413,"language":23805,"meta":10,"style":10},"touch ch6_cartpole.py\n",[89,110415,110416],{"__ignoreMap":10},[92,110417,110418,110420],{"class":94,"line":95},[92,110419,101264],{"class":1942},[92,110421,110422],{"class":207}," ch6_cartpole.py\n",[38,110424,110425],{},"运行：",[83,110427,110429],{"className":23803,"code":110428,"language":23805,"meta":10,"style":10},"python ch6_cartpole.py\n",[89,110430,110431],{"__ignoreMap":10},[92,110432,110433,110435],{"class":94,"line":95},[92,110434,30362],{"class":1942},[92,110436,110422],{"class":207},[63,110438,101553],{"id":101553},[38,110440,110441],{},"构造观测：",[83,110443,110445],{"className":30360,"code":110444,"language":30362,"meta":10,"style":10},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[89,110446,110447,110455],{"__ignoreMap":10},[92,110448,110449,110451,110453],{"class":94,"line":95},[92,110450,31929],{"class":98},[92,110452,109975],{"class":1942},[92,110454,109978],{"class":102},[92,110456,110457,110459],{"class":94,"line":11},[92,110458,4069],{"class":98},[92,110460,109985],{"class":102},[38,110462,110463,110466,110467,110469,110470,110472],{},[89,110464,110465],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[89,110468,104011],{}," 2 维，",[89,110471,104341],{}," 2 维，所以 obs 是 4 维。",[38,110474,110475],{},"设置初始角度：",[83,110477,110479],{"className":30360,"code":110478,"language":30362,"meta":10,"style":10},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[89,110480,110481,110493],{"__ignoreMap":10},[92,110482,110483,110485,110487,110489,110491],{"class":94,"line":95},[92,110484,104680],{"class":102},[92,110486,320],{"class":151},[92,110488,4422],{"class":102},[92,110490,148],{"class":98},[92,110492,110121],{"class":151},[92,110494,110495],{"class":94,"line":11},[92,110496,104524],{"class":102},[38,110498,110499],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[38,110501,110502],{},"简单反馈控制：",[83,110504,110506],{"className":30360,"code":110505,"language":30362,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[89,110507,110508,110528],{"__ignoreMap":10},[92,110509,110510,110512,110514,110516,110518,110520,110522,110524,110526],{"class":94,"line":95},[92,110511,107423],{"class":102},[92,110513,148],{"class":98},[92,110515,110208],{"class":151},[92,110517,6498],{"class":98},[92,110519,109801],{"class":102},[92,110521,584],{"class":98},[92,110523,61849],{"class":151},[92,110525,6498],{"class":98},[92,110527,110221],{"class":102},[92,110529,110530,110532,110534,110536,110538,110540,110542,110544],{"class":94,"line":11},[92,110531,107423],{"class":102},[92,110533,148],{"class":98},[92,110535,107428],{"class":102},[92,110537,635],{"class":98},[92,110539,102384],{"class":151},[92,110541,12415],{"class":102},[92,110543,102384],{"class":151},[92,110545,109],{"class":102},[38,110547,110548],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[38,110550,110551],{},"限制动作：",[83,110553,110555],{"className":30360,"code":110554,"language":30362,"meta":10,"style":10},"np.clip(action, -1.0, 1.0)\n",[89,110556,110557],{"__ignoreMap":10},[92,110558,110559,110562,110564,110566,110568,110570],{"class":94,"line":95},[92,110560,110561],{"class":102},"np.clip(action, ",[92,110563,635],{"class":98},[92,110565,102384],{"class":151},[92,110567,12415],{"class":102},[92,110569,102384],{"class":151},[92,110571,109],{"class":102},[38,110573,110574,110575,110578],{},"因为 XML 里 ",[89,110576,110577],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[63,110580,101689],{"id":101689},[83,110582,110583],{"className":30360,"code":110444,"language":30362,"meta":10,"style":10},[89,110584,110585,110593],{"__ignoreMap":10},[92,110586,110587,110589,110591],{"class":94,"line":95},[92,110588,31929],{"class":98},[92,110590,109975],{"class":1942},[92,110592,109978],{"class":102},[92,110594,110595,110597],{"class":94,"line":11},[92,110596,4069],{"class":98},[92,110598,109985],{"class":102},[38,110600,110601,110602,110605,110606,110609,110610,110613],{},"这段定义了一个函数，用来获取当前观测。",[89,110603,110604],{},"data.qpos.copy()"," 是位置数组副本，",[89,110607,110608],{},"data.qvel.copy()"," 是速度数组副本。",[89,110611,110612],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[38,110615,110616],{},"在本章模型里：",[83,110618,110621],{"className":110619,"code":110620,"language":5167,"meta":10},[5165],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[89,110622,110620],{"__ignoreMap":10},[38,110624,110625],{},"所以返回的 obs 是：",[83,110627,110630],{"className":110628,"code":110629,"language":5167,"meta":10},[5165],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[89,110631,110629],{"__ignoreMap":10},[83,110633,110635],{"className":30360,"code":110634,"language":30362,"meta":10,"style":10},"def compute_reward(obs: np.ndarray) -> float:\n",[89,110636,110637],{"__ignoreMap":10},[92,110638,110639,110641,110643,110645,110647],{"class":94,"line":95},[92,110640,31929],{"class":98},[92,110642,110000],{"class":1942},[92,110644,110003],{"class":102},[92,110646,142],{"class":151},[92,110648,3718],{"class":102},[38,110650,110651,110652,110655],{},"这行定义奖励函数。输入是观测 ",[89,110653,110654],{},"obs","，输出是一个浮点数奖励。",[83,110657,110659],{"className":30360,"code":110658,"language":30362,"meta":10,"style":10},"cart_x = obs[0]\npole_angle = obs[1]\n",[89,110660,110661,110674],{"__ignoreMap":10},[92,110662,110663,110666,110668,110670,110672],{"class":94,"line":95},[92,110664,110665],{"class":102},"cart_x ",[92,110667,148],{"class":98},[92,110669,110017],{"class":102},[92,110671,294],{"class":151},[92,110673,33228],{"class":102},[92,110675,110676,110679,110681,110683,110685],{"class":94,"line":11},[92,110677,110678],{"class":102},"pole_angle ",[92,110680,148],{"class":98},[92,110682,110017],{"class":102},[92,110684,320],{"class":151},[92,110686,33228],{"class":102},[38,110688,110689,110690,110693,110694,110697],{},"数组索引从 0 开始。",[89,110691,110692],{},"obs[0]"," 是第一个元素，也就是小车位置。",[89,110695,110696],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[83,110699,110700],{"className":30360,"code":109769,"language":30362,"meta":10,"style":10},[89,110701,110702],{"__ignoreMap":10},[92,110703,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726,110728,110730],{"class":94,"line":95},[92,110705,17026],{"class":98},[92,110707,109778],{"class":151},[92,110709,103],{"class":102},[92,110711,102384],{"class":151},[92,110713,52253],{"class":98},[92,110715,109787],{"class":151},[92,110717,6498],{"class":98},[92,110719,109792],{"class":102},[92,110721,558],{"class":98},[92,110723,109792],{"class":102},[92,110725,635],{"class":98},[92,110727,109801],{"class":102},[92,110729,558],{"class":98},[92,110731,109806],{"class":102},[38,110733,110734,110735,110738,110739,110742],{},"这行计算奖励。",[89,110736,110737],{},"cart_x * cart_x"," 是小车位置的平方，",[89,110740,110741],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[83,110744,110746],{"className":30360,"code":110745,"language":30362,"meta":10,"style":10},"data.qpos[1] = 0.1\n",[89,110747,110748],{"__ignoreMap":10},[92,110749,110750,110752,110754,110756,110758],{"class":94,"line":95},[92,110751,104680],{"class":102},[92,110753,320],{"class":151},[92,110755,4422],{"class":102},[92,110757,148],{"class":98},[92,110759,110121],{"class":151},[38,110761,110762,110763,110765,110766,110768],{},"手动设置杆子的初始角度。因为 ",[89,110764,105437],{}," 是小车位置，",[89,110767,105440],{}," 是杆子角度，所以这里改的是杆子。",[83,110770,110771],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},[89,110772,110773],{"__ignoreMap":10},[92,110774,110775],{"class":94,"line":95},[92,110776,104524],{"class":102},[38,110778,105483,110779,110781],{},[89,110780,104011],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[83,110783,110785],{"className":30360,"code":110784,"language":30362,"meta":10,"style":10},"total_reward = 0.0\n",[89,110786,110787],{"__ignoreMap":10},[92,110788,110789,110792,110794],{"class":94,"line":95},[92,110790,110791],{"class":102},"total_reward ",[92,110793,148],{"class":98},[92,110795,104742],{"class":151},[38,110797,110798],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[83,110800,110802],{"className":30360,"code":110801,"language":30362,"meta":10,"style":10},"for step in range(1000):\n",[89,110803,110804],{"__ignoreMap":10},[92,110805,110806,110808,110810,110812,110814,110816,110818],{"class":94,"line":95},[92,110807,3004],{"class":98},[92,110809,31598],{"class":102},[92,110811,26025],{"class":98},[92,110813,32425],{"class":151},[92,110815,103],{"class":102},[92,110817,6390],{"class":151},[92,110819,30768],{"class":102},[38,110821,110822,110823,110825],{},"循环 1000 步。",[89,110824,107115],{}," 是当前步数，从 0 到 999。",[83,110827,110829],{"className":30360,"code":110828,"language":30362,"meta":10,"style":10},"obs = get_observation(data)\n",[89,110830,110831],{"__ignoreMap":10},[92,110832,110833,110836,110838],{"class":94,"line":95},[92,110834,110835],{"class":102},"obs ",[92,110837,148],{"class":98},[92,110839,110168],{"class":102},[38,110841,110842,110843,28367],{},"读取当前状态，保存到 ",[89,110844,110654],{},[83,110846,110848],{"className":30360,"code":110847,"language":30362,"meta":10,"style":10},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[89,110849,110850,110862],{"__ignoreMap":10},[92,110851,110852,110854,110856,110858,110860],{"class":94,"line":95},[92,110853,110678],{"class":102},[92,110855,148],{"class":98},[92,110857,110017],{"class":102},[92,110859,320],{"class":151},[92,110861,33228],{"class":102},[92,110863,110864,110867,110869,110871,110873],{"class":94,"line":11},[92,110865,110866],{"class":102},"pole_angular_velocity ",[92,110868,148],{"class":98},[92,110870,110017],{"class":102},[92,110872,174],{"class":151},[92,110874,33228],{"class":102},[38,110876,110877,110878,110881,110882,28367],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[89,110879,110880],{},"obs[3]","？因为 obs 的顺序是 ",[89,110883,110884],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[83,110886,110888],{"className":30360,"code":110887,"language":30362,"meta":10,"style":10},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[89,110889,110890],{"__ignoreMap":10},[92,110891,110892,110894,110896,110898,110900,110902,110904,110906,110908],{"class":94,"line":95},[92,110893,107423],{"class":102},[92,110895,148],{"class":98},[92,110897,110208],{"class":151},[92,110899,6498],{"class":98},[92,110901,109801],{"class":102},[92,110903,584],{"class":98},[92,110905,61849],{"class":151},[92,110907,6498],{"class":98},[92,110909,110221],{"class":102},[38,110911,110912,110913,100999,110915,110917],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[89,110914,105241],{},[89,110916,35311],{}," 是人为设置的系数，不是固定公式。",[83,110919,110921],{"className":30360,"code":110920,"language":30362,"meta":10,"style":10},"action = np.clip(action, -1.0, 1.0)\n",[89,110922,110923],{"__ignoreMap":10},[92,110924,110925,110927,110929,110931,110933,110935,110937,110939],{"class":94,"line":95},[92,110926,107423],{"class":102},[92,110928,148],{"class":98},[92,110930,107428],{"class":102},[92,110932,635],{"class":98},[92,110934,102384],{"class":151},[92,110936,12415],{"class":102},[92,110938,102384],{"class":151},[92,110940,109],{"class":102},[38,110942,110943],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[83,110945,110946],{"className":30360,"code":109754,"language":30362,"meta":10,"style":10},[89,110947,110948],{"__ignoreMap":10},[92,110949,110950,110952,110954,110956,110958],{"class":94,"line":95},[92,110951,105852],{"class":102},[92,110953,294],{"class":151},[92,110955,4422],{"class":102},[92,110957,148],{"class":98},[92,110959,107451],{"class":102},[38,110961,110962],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[83,110964,110965],{"className":30360,"code":104486,"language":30362,"meta":10,"style":10},[89,110966,110967],{"__ignoreMap":10},[92,110968,110969],{"class":94,"line":95},[92,110970,104486],{"class":102},[38,110972,110973,110974,110976],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[89,110975,106107],{}," 计算小车和杆子的下一刻状态。",[83,110978,110980],{"className":30360,"code":110979,"language":30362,"meta":10,"style":10},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[89,110981,110982,110991],{"__ignoreMap":10},[92,110983,110984,110987,110989],{"class":94,"line":95},[92,110985,110986],{"class":102},"reward ",[92,110988,148],{"class":98},[92,110990,110273],{"class":102},[92,110992,110993,110995,110997],{"class":94,"line":11},[92,110994,110791],{"class":102},[92,110996,9457],{"class":98},[92,110998,110283],{"class":102},[38,111000,111001,111002,111004,111005,111008,111009,28367],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[89,111003,9457],{}," 是简写，",[89,111006,111007],{},"total_reward += reward"," 等价于 ",[89,111010,111011],{},"total_reward = total_reward + reward",[83,111013,111015],{"className":30360,"code":111014,"language":30362,"meta":10,"style":10},"if step % 100 == 0:\n",[89,111016,111017],{"__ignoreMap":10},[92,111018,111019,111021,111023,111025,111027,111029,111031],{"class":94,"line":95},[92,111020,1510],{"class":98},[92,111022,31598],{"class":102},[92,111024,431],{"class":98},[92,111026,5734],{"class":151},[92,111028,101540],{"class":98},[92,111030,4072],{"class":151},[92,111032,3718],{"class":102},[38,111034,111035,111037,111038,111041],{},[89,111036,431],{}," 是取余数。",[89,111039,111040],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[83,111043,111045],{"className":30360,"code":111044,"language":30362,"meta":10,"style":10},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[89,111046,111047],{"__ignoreMap":10},[92,111048,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079],{"class":94,"line":95},[92,111050,30397],{"class":151},[92,111052,103],{"class":102},[92,111054,110312],{"class":207},[92,111056,110315],{"class":102},[92,111058,110318],{"class":207},[92,111060,110321],{"class":102},[92,111062,174],{"class":151},[92,111064,110326],{"class":102},[92,111066,110329],{"class":207},[92,111068,12415],{"class":102},[92,111070,32000],{"class":151},[92,111072,103],{"class":102},[92,111074,142],{"class":151},[92,111076,110340],{"class":102},[92,111078,174],{"class":151},[92,111080,30479],{"class":102},[38,111082,111083,111084,111087,111088,111091],{},"打印当前步数、观测和动作。",[89,111085,111086],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[89,111089,111090],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[33,111093,102297],{"id":102296},[38,111095,111096],{},"观测向量:",[83,111098,111101],{"className":111099,"code":111100,"language":5167,"meta":10},[5165],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[89,111102,111100],{"__ignoreMap":10},[38,111104,111105],{},"控制器是教学用的简单线性反馈，不保证最优。",[38,111107,111108],{},"每隔 100 步会打印一次：",[83,111110,111113],{"className":111111,"code":111112,"language":5167,"meta":10},[5165],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[89,111114,111112],{"__ignoreMap":10},[38,111116,111117],{},"重点观察：",[46,111119,111120,111126,111131],{},[49,111121,111122,111125],{},[89,111123,111124],{},"pole_angle"," 是否越来越大。",[49,111127,111128,111130],{},[89,111129,109707],{}," 是否跑得太远。",[49,111132,111133,111134,82521,111136,28367],{},"action 是否经常被 clip 到 ",[89,111135,103896],{},[89,111137,320],{},[38,111139,111140],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[33,111142,102329],{"id":102328},[46,111144,111145,111151,111154,111160,111170,111176,111179],{},[49,111146,111147,111148,28367],{},"把初始角度改为 ",[89,111149,111150],{},"data.qpos[1] = 0.3",[49,111152,111153],{},"重新运行，观察控制是否变差。",[49,111155,111156,111157,111159],{},"把 actuator ",[89,111158,107048],{}," 改小。",[49,111161,111162,111163,111166,111167,28367],{},"打印 ",[89,111164,111165],{},"model.nq, model.nv, model.nu","，应为 ",[89,111168,111169],{},"2 2 1",[49,111171,111172,111173,111175],{},"把 reward 里的 ",[89,111174,110741],{}," 系数改大，观察总奖励变化。",[49,111177,111178],{},"把控制器改成反号，观察杆子是否更容易倒。",[49,111180,111181],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[33,111183,102434],{"id":102433},[63,111185,111186],{"id":111186},"杆子方向和预期不一致",[38,111188,102377,111189,111191,111192,111194],{},[89,111190,106220],{}," 和 capsule 的 ",[89,111193,103157],{},"，必要时用 viewer 可视化确认。",[63,111196,111197],{"id":111197},"控制器越控越倒",[38,111199,111200],{},"说明反馈符号可能反了，尝试:",[83,111202,111204],{"className":30360,"code":111203,"language":30362,"meta":10,"style":10},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[89,111205,111206],{"__ignoreMap":10},[92,111207,111208,111210,111212,111214,111216,111218,111220,111222,111224,111226],{"class":94,"line":95},[92,111209,107423],{"class":102},[92,111211,148],{"class":98},[92,111213,52253],{"class":98},[92,111215,105241],{"class":151},[92,111217,6498],{"class":98},[92,111219,109801],{"class":102},[92,111221,635],{"class":98},[92,111223,61849],{"class":151},[92,111225,6498],{"class":98},[92,111227,110221],{"class":102},[63,111229,111230],{"id":111230},"小车飞走",[38,111232,111233,111234,111236,111237,111240],{},"降低 ",[89,111235,107048],{}," 或缩小 ",[89,111238,111239],{},"action"," 的 clip 范围。",[63,111242,111244,111246],{"id":111243},"obs3-为什么是杆子角速度",[89,111245,110880],{}," 为什么是杆子角速度",[38,111248,111249],{},"因为这个模型里：",[83,111251,111254],{"className":111252,"code":111253,"language":5167,"meta":10},[5165],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[89,111255,111253],{"__ignoreMap":10},[38,111257,109728],{},[83,111259,111262],{"className":111260,"code":111261,"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,111263,111261],{"__ignoreMap":10},[63,111265,111267],{"id":111266},"reward-变成负数是否错误","reward 变成负数是否错误",[38,111269,111270],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[33,111272,102588],{"id":102587},[38,111274,111275],{},"一个控制任务通常包含：",[46,111277,111278,111281,111289,111294,111297],{},[49,111279,111280],{},"模型：Cartpole 的 body、joint、actuator。",[49,111282,111283,111284,315,111286,111288],{},"观测：从 ",[89,111285,104011],{},[89,111287,104341],{}," 里取状态。",[49,111290,111291,111292,28367],{},"动作：写入 ",[89,111293,101057],{},[49,111295,111296],{},"奖励：根据任务目标打分。",[49,111298,111299],{},"循环：obs -> action -> step -> reward。",[38,111301,111302],{},"这就是后面 Gymnasium 环境的基本骨架。",[5106,111304,104267],{},{"title":10,"searchDepth":11,"depth":11,"links":111306},[111307,111308,111309,111314,111318,111319,111320,111328],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":111310},[111311,111312,111313],{"id":109681,"depth":1158,"text":109682},{"id":109746,"depth":1158,"text":109747},{"id":109762,"depth":1158,"text":109763},{"id":101233,"depth":11,"text":101234,"children":111315},[111316,111317],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":111321},[111322,111323,111324,111325,111327],{"id":111186,"depth":1158,"text":111186},{"id":111197,"depth":1158,"text":111197},{"id":111230,"depth":1158,"text":111230},{"id":111243,"depth":1158,"text":111326},"obs[3] 为什么是杆子角速度",{"id":111266,"depth":1158,"text":111267},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109417,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111335,"title":111336,"body":111337,"description":10,"extension":14,"meta":113351,"navigation":17,"path":113352,"seo":113353,"stem":113354,"__hash__":113355},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111338,"toc":113327},[111339,111342,111344,111347,111349,111366,111369,111372,111378,111381,111383,111385,111409,111411,111425,111427,111468,111470,111488,111490,111493,111499,111502,111530,111534,111540,111565,111568,111599,111606,111609,111612,111618,111621,111627,111630,111636,111640,111643,111668,111671,111673,112433,112435,112447,112449,112460,112462,112465,112482,112485,112487,112498,112501,112503,112549,112552,112565,112568,112650,112653,112655,112671,112681,112694,112697,112736,112746,112757,112767,112780,112783,112812,112815,112825,112828,112834,112851,112862,112864,112870,112887,112898,112919,112922,112934,112937,112958,112961,112969,112977,112994,112997,113066,113073,113081,113084,113097,113104,113106,113109,113115,113118,113121,113127,113133,113135,113175,113177,113183,113192,113195,113197,113217,113220,113223,113229,113233,113235,113262,113265,113268,113295,113301,113304,113307,113309,113312,113315,113321,113324],[29,111340,111336],{"id":111341},"_7控制任务reacher-机械臂到达目标",[33,111343,100628],{"id":100627},[38,111345,111346],{},"本章搭建一个二维两关节 reacher 任务。",[38,111348,104312],{},[46,111350,111351,111354,111357,111360,111363],{},[49,111352,111353],{},"两个 hinge joint",[49,111355,111356],{},"两个 motor actuator",[49,111358,111359],{},"site 作为末端点和目标点",[49,111361,111362],{},"根据末端和目标距离设计 reward",[49,111364,111365],{},"构造机械臂任务的基本形式",[38,111367,111368],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[38,111370,111371],{},"Reacher 任务可以理解为：",[83,111373,111376],{"className":111374,"code":111375,"language":5167,"meta":10},[5165],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[89,111377,111375],{"__ignoreMap":10},[38,111379,111380],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[33,111382,100751],{"id":100750},[38,111384,100754],{},[83,111386,111387],{"className":23803,"code":104369,"language":23805,"meta":10,"style":10},[89,111388,111389],{"__ignoreMap":10},[92,111390,111391,111393,111395,111397,111399,111401,111403,111405,111407],{"class":94,"line":95},[92,111392,24558],{"class":1942},[92,111394,26297],{"class":207},[92,111396,23815],{"class":207},[92,111398,26382],{"class":151},[92,111400,104384],{"class":207},[92,111402,100779],{"class":207},[92,111404,102482],{"class":207},[92,111406,100795],{"class":207},[92,111408,104393],{"class":207},[38,111410,102800],{},[83,111412,111413],{"className":23803,"code":100900,"language":23805,"meta":10,"style":10},[89,111414,111415],{"__ignoreMap":10},[92,111416,111417,111419,111421,111423],{"class":94,"line":95},[92,111418,23812],{"class":1942},[92,111420,23815],{"class":207},[92,111422,100911],{"class":207},[92,111424,100914],{"class":207},[38,111426,102817],{},[83,111428,111430],{"className":23803,"code":111429,"language":23805,"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,111431,111432,111449,111458],{"__ignoreMap":10},[92,111433,111434,111436,111438,111440,111443,111445,111447],{"class":94,"line":95},[92,111435,30312],{"class":1942},[92,111437,29158],{"class":207},[92,111439,25097],{"class":151},[92,111441,111442],{"class":207}," mujoco-reacher",[92,111444,100956],{"class":207},[92,111446,100959],{"class":151},[92,111448,100962],{"class":151},[92,111450,111451,111453,111455],{"class":94,"line":11},[92,111452,30312],{"class":1942},[92,111454,100969],{"class":207},[92,111456,111457],{"class":207}," mujoco-reacher\n",[92,111459,111460,111462,111464,111466],{"class":94,"line":1158},[92,111461,23812],{"class":1942},[92,111463,23815],{"class":207},[92,111465,100911],{"class":207},[92,111467,100914],{"class":207},[38,111469,100985],{},[46,111471,111472,111475,111478],{},[49,111473,111474],{},"本章使用低维状态，不使用图像输入。",[49,111476,111477],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[49,111479,111480,111481,315,111483,315,111485,111487],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[89,111482,104011],{},[89,111484,104341],{},[89,111486,103661],{}," 的方法一致。",[33,111489,101026],{"id":101025},[38,111491,111492],{},"Reacher 任务核心:",[83,111494,111497],{"className":111495,"code":111496,"language":5167,"meta":10},[5165],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[89,111498,111496],{"__ignoreMap":10},[38,111500,111501],{},"读取 site 世界坐标:",[83,111503,111505],{"className":30360,"code":111504,"language":30362,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[89,111506,111507,111520],{"__ignoreMap":10},[92,111508,111509,111511,111513,111515,111518],{"class":94,"line":95},[92,111510,103615],{"class":102},[92,111512,148],{"class":98},[92,111514,103386],{"class":102},[92,111516,111517],{"class":207},"\"tip\"",[92,111519,109],{"class":102},[92,111521,111522,111525,111527],{"class":94,"line":11},[92,111523,111524],{"class":102},"tip_pos ",[92,111526,148],{"class":98},[92,111528,111529],{"class":102}," data.site_xpos[site_id]\n",[63,111531,111533],{"id":111532},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[38,111535,111536,111537,111539],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[89,111538,104011],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[83,111541,111543],{"className":30360,"code":111542,"language":30362,"meta":10,"style":10},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[89,111544,111545,111555],{"__ignoreMap":10},[92,111546,111547,111550,111552],{"class":94,"line":95},[92,111548,111549],{"class":102},"tip ",[92,111551,148],{"class":98},[92,111553,111554],{"class":102}," data.site_xpos[tip_site_id]\n",[92,111556,111557,111560,111562],{"class":94,"line":11},[92,111558,111559],{"class":102},"target ",[92,111561,148],{"class":98},[92,111563,111564],{"class":102}," data.site_xpos[target_site_id]\n",[38,111566,111567],{},"这样 reward 就很容易写：",[83,111569,111571],{"className":30360,"code":111570,"language":30362,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[89,111572,111573,111588],{"__ignoreMap":10},[92,111574,111575,111578,111580,111583,111585],{"class":94,"line":95},[92,111576,111577],{"class":102},"dist ",[92,111579,148],{"class":98},[92,111581,111582],{"class":102}," np.linalg.norm(tip ",[92,111584,635],{"class":98},[92,111586,111587],{"class":102}," target)\n",[92,111589,111590,111592,111594,111596],{"class":94,"line":11},[92,111591,110986],{"class":102},[92,111593,148],{"class":98},[92,111595,52253],{"class":98},[92,111597,111598],{"class":102},"dist\n",[38,111600,111601,111602,111605],{},"距离越小，",[89,111603,111604],{},"-dist"," 越接近 0，奖励越高。",[63,111607,111608],{"id":111608},"两关节机械臂的状态",[38,111610,111611],{},"这个模型有两个 hinge joint：",[83,111613,111616],{"className":111614,"code":111615,"language":5167,"meta":10},[5165],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[89,111617,111615],{"__ignoreMap":10},[38,111619,111620],{},"再加上末端和目标位置：",[83,111622,111625],{"className":111623,"code":111624,"language":5167,"meta":10},[5165],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[89,111626,111624],{"__ignoreMap":10},[38,111628,111629],{},"总维度：",[83,111631,111634],{"className":111632,"code":111633,"language":5167,"meta":10},[5165],"2 + 2 + 3 + 3 = 10\n",[89,111635,111633],{"__ignoreMap":10},[63,111637,111639],{"id":111638},"为什么-gravity-是-0","为什么 gravity 是 0",[38,111641,111642],{},"本章把重力设为：",[83,111644,111646],{"className":53049,"code":111645,"language":53051,"meta":10,"style":10},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[89,111647,111648],{"__ignoreMap":10},[92,111649,111650,111652,111654,111656,111658,111660,111662,111664,111666],{"class":94,"line":95},[92,111651,1013],{"class":102},[92,111653,69148],{"class":51282},[92,111655,101175],{"class":1942},[92,111657,148],{"class":102},[92,111659,101180],{"class":207},[92,111661,101183],{"class":1942},[92,111663,148],{"class":102},[92,111665,103752],{"class":207},[92,111667,101125],{"class":102},[38,111669,111670],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[33,111672,101234],{"id":101233},[83,111674,111676],{"className":30360,"code":111675,"language":30362,"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,111677,111678,111684,111694,111698,111702,111710,111715,111720,111724,111728,111733,111738,111742,111747,111752,111757,111761,111766,111771,111776,111781,111785,111789,111793,111797,111801,111806,111811,111815,111819,111823,111827,111831,111846,111855,111867,111890,111897,111901,111905,111915,111929,111943,111950,111954,111958,111972,111984,111996,112009,112024,112041,112045,112049,112061,112073,112081,112089,112093,112109,112114,112127,112140,112155,112159,112194,112226,112230,112234,112243,112247,112263,112273,112284,112300,112316,112332,112348,112352,112370,112390,112409,112413,112417,112429],{"__ignoreMap":10},[92,111679,111680,111682],{"class":94,"line":95},[92,111681,30374],{"class":98},[92,111683,101282],{"class":102},[92,111685,111686,111688,111690,111692],{"class":94,"line":11},[92,111687,30374],{"class":98},[92,111689,31362],{"class":102},[92,111691,31365],{"class":98},[92,111693,31368],{"class":102},[92,111695,111696],{"class":94,"line":1158},[92,111697,2379],{"emptyLinePlaceholder":17},[92,111699,111700],{"class":94,"line":1173},[92,111701,2379],{"emptyLinePlaceholder":17},[92,111703,111704,111706,111708],{"class":94,"line":1179},[92,111705,101295],{"class":151},[92,111707,13544],{"class":98},[92,111709,101300],{"class":207},[92,111711,111712],{"class":94,"line":1193},[92,111713,111714],{"class":207},"\u003Cmujoco model=\"two_link_reacher\">\n",[92,111716,111717],{"class":94,"line":1199},[92,111718,111719],{"class":207},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[92,111721,111722],{"class":94,"line":1290},[92,111723,2379],{"emptyLinePlaceholder":17},[92,111725,111726],{"class":94,"line":1296},[92,111727,101319],{"class":207},[92,111729,111730],{"class":94,"line":1308},[92,111731,111732],{"class":207},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[92,111734,111735],{"class":94,"line":1591},[92,111736,111737],{"class":207},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[92,111739,111740],{"class":94,"line":1596},[92,111741,2379],{"emptyLinePlaceholder":17},[92,111743,111744],{"class":94,"line":1602},[92,111745,111746],{"class":207},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[92,111748,111749],{"class":94,"line":1607},[92,111750,111751],{"class":207},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,111753,111754],{"class":94,"line":1621},[92,111755,111756],{"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,111758,111759],{"class":94,"line":1626},[92,111760,2379],{"emptyLinePlaceholder":17},[92,111762,111763],{"class":94,"line":1632},[92,111764,111765],{"class":207},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[92,111767,111768],{"class":94,"line":1653},[92,111769,111770],{"class":207},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[92,111772,111773],{"class":94,"line":1658},[92,111774,111775],{"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,111777,111778],{"class":94,"line":1672},[92,111779,111780],{"class":207},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[92,111782,111783],{"class":94,"line":1677},[92,111784,106419],{"class":207},[92,111786,111787],{"class":94,"line":1706},[92,111788,101348],{"class":207},[92,111790,111791],{"class":94,"line":1711},[92,111792,101353],{"class":207},[92,111794,111795],{"class":94,"line":1728},[92,111796,2379],{"emptyLinePlaceholder":17},[92,111798,111799],{"class":94,"line":1733},[92,111800,106436],{"class":207},[92,111802,111803],{"class":94,"line":1738},[92,111804,111805],{"class":207},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,111807,111808],{"class":94,"line":1743},[92,111809,111810],{"class":207},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[92,111812,111813],{"class":94,"line":1757},[92,111814,106446],{"class":207},[92,111816,111817],{"class":94,"line":1762},[92,111818,101358],{"class":207},[92,111820,111821],{"class":94,"line":2556},[92,111822,95679],{"class":207},[92,111824,111825],{"class":94,"line":2570},[92,111826,2379],{"emptyLinePlaceholder":17},[92,111828,111829],{"class":94,"line":2578},[92,111830,2379],{"emptyLinePlaceholder":17},[92,111832,111833,111835,111838,111841,111843],{"class":94,"line":2583},[92,111834,31929],{"class":98},[92,111836,111837],{"class":1942}," site_position",[92,111839,111840],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[92,111842,1278],{"class":151},[92,111844,111845],{"class":102},") -> np.ndarray:\n",[92,111847,111848,111850,111852],{"class":94,"line":2589},[92,111849,103381],{"class":102},[92,111851,148],{"class":98},[92,111853,111854],{"class":102}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[92,111856,111857,111859,111861,111863,111865],{"class":94,"line":2595},[92,111858,3080],{"class":98},[92,111860,103430],{"class":102},[92,111862,1013],{"class":98},[92,111864,4072],{"class":151},[92,111866,3718],{"class":102},[92,111868,111869,111871,111873,111875,111877,111880,111882,111884,111886,111888],{"class":94,"line":2600},[92,111870,103413],{"class":98},[92,111872,103416],{"class":151},[92,111874,103],{"class":102},[92,111876,155],{"class":98},[92,111878,111879],{"class":207},"\"site not found: ",[92,111881,999],{"class":151},[92,111883,79792],{"class":102},[92,111885,1049],{"class":151},[92,111887,354],{"class":207},[92,111889,109],{"class":102},[92,111891,111892,111894],{"class":94,"line":7928},[92,111893,4069],{"class":98},[92,111895,111896],{"class":102}," data.site_xpos[site_id].copy()\n",[92,111898,111899],{"class":94,"line":7952},[92,111900,2379],{"emptyLinePlaceholder":17},[92,111902,111903],{"class":94,"line":7957},[92,111904,2379],{"emptyLinePlaceholder":17},[92,111906,111907,111909,111912],{"class":94,"line":7963},[92,111908,31929],{"class":98},[92,111910,111911],{"class":1942}," get_obs",[92,111913,111914],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[92,111916,111917,111920,111922,111925,111927],{"class":94,"line":7990},[92,111918,111919],{"class":102},"    tip ",[92,111921,148],{"class":98},[92,111923,111924],{"class":102}," site_position(model, data, ",[92,111926,111517],{"class":207},[92,111928,109],{"class":102},[92,111930,111931,111934,111936,111938,111941],{"class":94,"line":7995},[92,111932,111933],{"class":102},"    target ",[92,111935,148],{"class":98},[92,111937,111924],{"class":102},[92,111939,111940],{"class":207},"\"target\"",[92,111942,109],{"class":102},[92,111944,111945,111947],{"class":94,"line":8001},[92,111946,4069],{"class":98},[92,111948,111949],{"class":102}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[92,111951,111952],{"class":94,"line":8013},[92,111953,2379],{"emptyLinePlaceholder":17},[92,111955,111956],{"class":94,"line":8025},[92,111957,2379],{"emptyLinePlaceholder":17},[92,111959,111960,111962,111965,111968,111970],{"class":94,"line":8037},[92,111961,31929],{"class":98},[92,111963,111964],{"class":1942}," reward",[92,111966,111967],{"class":102},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[92,111969,142],{"class":151},[92,111971,3718],{"class":102},[92,111973,111974,111976,111978,111980,111982],{"class":94,"line":9696},[92,111975,111919],{"class":102},[92,111977,148],{"class":98},[92,111979,111924],{"class":102},[92,111981,111517],{"class":207},[92,111983,109],{"class":102},[92,111985,111986,111988,111990,111992,111994],{"class":94,"line":9721},[92,111987,111933],{"class":102},[92,111989,148],{"class":98},[92,111991,111924],{"class":102},[92,111993,111940],{"class":207},[92,111995,109],{"class":102},[92,111997,111998,112001,112003,112005,112007],{"class":94,"line":9744},[92,111999,112000],{"class":102},"    dist ",[92,112002,148],{"class":98},[92,112004,111582],{"class":102},[92,112006,635],{"class":98},[92,112008,111587],{"class":102},[92,112010,112011,112014,112016,112019,112021],{"class":94,"line":9768},[92,112012,112013],{"class":102},"    control_cost ",[92,112015,148],{"class":98},[92,112017,112018],{"class":151}," 0.01",[92,112020,6498],{"class":98},[92,112022,112023],{"class":102}," np.sum(np.square(data.ctrl))\n",[92,112025,112026,112028,112030,112032,112034,112036,112038],{"class":94,"line":9773},[92,112027,4069],{"class":98},[92,112029,109778],{"class":151},[92,112031,103],{"class":102},[92,112033,635],{"class":98},[92,112035,111577],{"class":102},[92,112037,635],{"class":98},[92,112039,112040],{"class":102}," control_cost)\n",[92,112042,112043],{"class":94,"line":9778},[92,112044,2379],{"emptyLinePlaceholder":17},[92,112046,112047],{"class":94,"line":9783},[92,112048,2379],{"emptyLinePlaceholder":17},[92,112050,112051,112053,112055,112057,112059],{"class":94,"line":9792},[92,112052,31929],{"class":98},[92,112054,1952],{"class":1942},[92,112056,101379],{"class":102},[92,112058,95667],{"class":151},[92,112060,3718],{"class":102},[92,112062,112063,112065,112067,112069,112071],{"class":94,"line":9797},[92,112064,101388],{"class":102},[92,112066,148],{"class":98},[92,112068,101393],{"class":102},[92,112070,101295],{"class":151},[92,112072,109],{"class":102},[92,112074,112075,112077,112079],{"class":94,"line":9803},[92,112076,101402],{"class":102},[92,112078,148],{"class":98},[92,112080,101407],{"class":102},[92,112082,112083,112085,112087],{"class":94,"line":9824},[92,112084,110134],{"class":102},[92,112086,148],{"class":98},[92,112088,104742],{"class":151},[92,112090,112091],{"class":94,"line":9830},[92,112092,2379],{"emptyLinePlaceholder":17},[92,112094,112095,112097,112099,112101,112103,112105,112107],{"class":94,"line":9844},[92,112096,3180],{"class":98},[92,112098,31598],{"class":102},[92,112100,26025],{"class":98},[92,112102,32425],{"class":151},[92,112104,103],{"class":102},[92,112106,65056],{"class":151},[92,112108,30768],{"class":102},[92,112110,112111],{"class":94,"line":9850},[92,112112,112113],{"class":102},"        mujoco.mj_forward(model, data)\n",[92,112115,112116,112119,112121,112123,112125],{"class":94,"line":9877},[92,112117,112118],{"class":102},"        tip ",[92,112120,148],{"class":98},[92,112122,111924],{"class":102},[92,112124,111517],{"class":207},[92,112126,109],{"class":102},[92,112128,112129,112132,112134,112136,112138],{"class":94,"line":9886},[92,112130,112131],{"class":102},"        target ",[92,112133,148],{"class":98},[92,112135,111924],{"class":102},[92,112137,111940],{"class":207},[92,112139,109],{"class":102},[92,112141,112142,112145,112147,112150,112152],{"class":94,"line":9892},[92,112143,112144],{"class":102},"        error ",[92,112146,148],{"class":98},[92,112148,112149],{"class":102}," target ",[92,112151,635],{"class":98},[92,112153,112154],{"class":102}," tip\n",[92,112156,112157],{"class":94,"line":9900},[92,112158,2379],{"emptyLinePlaceholder":17},[92,112160,112161,112163,112165,112167,112169,112172,112174,112176,112179,112181,112184,112186,112188,112190,112192],{"class":94,"line":9905},[92,112162,106598],{"class":102},[92,112164,294],{"class":151},[92,112166,4422],{"class":102},[92,112168,148],{"class":98},[92,112170,112171],{"class":102}," np.clip(",[92,112173,105241],{"class":151},[92,112175,6498],{"class":98},[92,112177,112178],{"class":102}," error[",[92,112180,180],{"class":151},[92,112182,112183],{"class":102},"], ",[92,112185,635],{"class":98},[92,112187,102384],{"class":151},[92,112189,12415],{"class":102},[92,112191,102384],{"class":151},[92,112193,109],{"class":102},[92,112195,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224],{"class":94,"line":16584},[92,112197,106598],{"class":102},[92,112199,320],{"class":151},[92,112201,4422],{"class":102},[92,112203,148],{"class":98},[92,112205,112171],{"class":102},[92,112207,105241],{"class":151},[92,112209,6498],{"class":98},[92,112211,112178],{"class":102},[92,112213,294],{"class":151},[92,112215,112183],{"class":102},[92,112217,635],{"class":98},[92,112219,102384],{"class":151},[92,112221,12415],{"class":102},[92,112223,102384],{"class":151},[92,112225,109],{"class":102},[92,112227,112228],{"class":94,"line":16590},[92,112229,2379],{"emptyLinePlaceholder":17},[92,112231,112232],{"class":94,"line":16613},[92,112233,101497],{"class":102},[92,112235,112236,112238,112240],{"class":94,"line":16619},[92,112237,110278],{"class":102},[92,112239,9457],{"class":98},[92,112241,112242],{"class":102}," reward(model, data)\n",[92,112244,112245],{"class":94,"line":16642},[92,112246,2379],{"emptyLinePlaceholder":17},[92,112248,112249,112251,112253,112255,112257,112259,112261],{"class":94,"line":16656},[92,112250,2476],{"class":98},[92,112252,31598],{"class":102},[92,112254,431],{"class":98},[92,112256,5734],{"class":151},[92,112258,101540],{"class":98},[92,112260,4072],{"class":151},[92,112262,3718],{"class":102},[92,112264,112265,112268,112270],{"class":94,"line":16676},[92,112266,112267],{"class":102},"            obs ",[92,112269,148],{"class":98},[92,112271,112272],{"class":102}," get_obs(model, data)\n",[92,112274,112275,112277,112279,112281],{"class":94,"line":16682},[92,112276,34632],{"class":151},[92,112278,103],{"class":102},[92,112280,110312],{"class":207},[92,112282,112283],{"class":102},", step)\n",[92,112285,112286,112288,112290,112293,112296,112298],{"class":94,"line":16693},[92,112287,34632],{"class":151},[92,112289,103],{"class":102},[92,112291,112292],{"class":207},"\"  tip:\"",[92,112294,112295],{"class":102},", np.round(tip, ",[92,112297,174],{"class":151},[92,112299,30479],{"class":102},[92,112301,112302,112304,112306,112309,112312,112314],{"class":94,"line":16716},[92,112303,34632],{"class":151},[92,112305,103],{"class":102},[92,112307,112308],{"class":207},"\"  target:\"",[92,112310,112311],{"class":102},", np.round(target, ",[92,112313,174],{"class":151},[92,112315,30479],{"class":102},[92,112317,112318,112320,112322,112325,112328,112330],{"class":94,"line":16738},[92,112319,34632],{"class":151},[92,112321,103],{"class":102},[92,112323,112324],{"class":207},"\"  ctrl:\"",[92,112326,112327],{"class":102},", np.round(data.ctrl.copy(), ",[92,112329,174],{"class":151},[92,112331,30479],{"class":102},[92,112333,112334,112336,112338,112341,112344,112346],{"class":94,"line":16743},[92,112335,34632],{"class":151},[92,112337,103],{"class":102},[92,112339,112340],{"class":207},"\"  obs_dim:\"",[92,112342,112343],{"class":102},", obs.shape[",[92,112345,294],{"class":151},[92,112347,4636],{"class":102},[92,112349,112350],{"class":94,"line":16749},[92,112351,2379],{"emptyLinePlaceholder":17},[92,112353,112354,112356,112358,112360,112362,112364,112366,112368],{"class":94,"line":16763},[92,112355,31281],{"class":151},[92,112357,103],{"class":102},[92,112359,110357],{"class":207},[92,112361,12415],{"class":102},[92,112363,32000],{"class":151},[92,112365,110364],{"class":102},[92,112367,174],{"class":151},[92,112369,30479],{"class":102},[92,112371,112372,112374,112376,112379,112382,112384,112386,112388],{"class":94,"line":16776},[92,112373,31281],{"class":151},[92,112375,103],{"class":102},[92,112377,112378],{"class":207},"\"final tip:\"",[92,112380,112381],{"class":102},", np.round(site_position(model, data, ",[92,112383,111517],{"class":207},[92,112385,110326],{"class":102},[92,112387,174],{"class":151},[92,112389,30479],{"class":102},[92,112391,112392,112394,112396,112399,112401,112403,112405,112407],{"class":94,"line":16781},[92,112393,31281],{"class":151},[92,112395,103],{"class":102},[92,112397,112398],{"class":207},"\"target:\"",[92,112400,112381],{"class":102},[92,112402,111940],{"class":207},[92,112404,110326],{"class":102},[92,112406,174],{"class":151},[92,112408,30479],{"class":102},[92,112410,112411],{"class":94,"line":16795},[92,112412,2379],{"emptyLinePlaceholder":17},[92,112414,112415],{"class":94,"line":16800},[92,112416,2379],{"emptyLinePlaceholder":17},[92,112418,112419,112421,112423,112425,112427],{"class":94,"line":16806},[92,112420,1510],{"class":98},[92,112422,31202],{"class":151},[92,112424,101540],{"class":98},[92,112426,101543],{"class":207},[92,112428,3718],{"class":102},[92,112430,112431],{"class":94,"line":16811},[92,112432,101550],{"class":102},[38,112434,103551],{},[83,112436,112438],{"className":23803,"code":112437,"language":23805,"meta":10,"style":10},"touch ch7_reacher.py\n",[89,112439,112440],{"__ignoreMap":10},[92,112441,112442,112444],{"class":94,"line":95},[92,112443,101264],{"class":1942},[92,112445,112446],{"class":207}," ch7_reacher.py\n",[38,112448,110425],{},[83,112450,112452],{"className":23803,"code":112451,"language":23805,"meta":10,"style":10},"python ch7_reacher.py\n",[89,112453,112454],{"__ignoreMap":10},[92,112455,112456,112458],{"class":94,"line":95},[92,112457,30362],{"class":1942},[92,112459,112446],{"class":207},[63,112461,101553],{"id":101553},[38,112463,112464],{},"读取 site 坐标：",[83,112466,112468],{"className":30360,"code":112467,"language":30362,"meta":10,"style":10},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[89,112469,112470],{"__ignoreMap":10},[92,112471,112472,112474,112476,112478,112480],{"class":94,"line":95},[92,112473,31929],{"class":98},[92,112475,111837],{"class":1942},[92,112477,111840],{"class":102},[92,112479,1278],{"class":151},[92,112481,111845],{"class":102},[38,112483,112484],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[38,112486,110441],{},[83,112488,112490],{"className":30360,"code":112489,"language":30362,"meta":10,"style":10},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[89,112491,112492],{"__ignoreMap":10},[92,112493,112494,112496],{"class":94,"line":95},[92,112495,17026],{"class":98},[92,112497,111949],{"class":102},[38,112499,112500],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[38,112502,109766],{},[83,112504,112506],{"className":30360,"code":112505,"language":30362,"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,112507,112508,112520,112533],{"__ignoreMap":10},[92,112509,112510,112512,112514,112516,112518],{"class":94,"line":95},[92,112511,111577],{"class":102},[92,112513,148],{"class":98},[92,112515,111582],{"class":102},[92,112517,635],{"class":98},[92,112519,111587],{"class":102},[92,112521,112522,112525,112527,112529,112531],{"class":94,"line":11},[92,112523,112524],{"class":102},"control_cost ",[92,112526,148],{"class":98},[92,112528,112018],{"class":151},[92,112530,6498],{"class":98},[92,112532,112023],{"class":102},[92,112534,112535,112537,112539,112541,112543,112545,112547],{"class":94,"line":1158},[92,112536,17026],{"class":98},[92,112538,109778],{"class":151},[92,112540,103],{"class":102},[92,112542,635],{"class":98},[92,112544,111577],{"class":102},[92,112546,635],{"class":98},[92,112548,112040],{"class":102},[38,112550,112551],{},"奖励由两部分组成：",[46,112553,112554,112559],{},[49,112555,112556,112558],{},[89,112557,111604],{},"：末端离目标越远，奖励越低。",[49,112560,112561,112564],{},[89,112562,112563],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[38,112566,112567],{},"简单控制器：",[83,112569,112571],{"className":30360,"code":112570,"language":30362,"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,112572,112573,112586,112618],{"__ignoreMap":10},[92,112574,112575,112578,112580,112582,112584],{"class":94,"line":95},[92,112576,112577],{"class":102},"error ",[92,112579,148],{"class":98},[92,112581,112149],{"class":102},[92,112583,635],{"class":98},[92,112585,112154],{"class":102},[92,112587,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614,112616],{"class":94,"line":11},[92,112589,105852],{"class":102},[92,112591,294],{"class":151},[92,112593,4422],{"class":102},[92,112595,148],{"class":98},[92,112597,112171],{"class":102},[92,112599,105241],{"class":151},[92,112601,6498],{"class":98},[92,112603,112178],{"class":102},[92,112605,180],{"class":151},[92,112607,112183],{"class":102},[92,112609,635],{"class":98},[92,112611,102384],{"class":151},[92,112613,12415],{"class":102},[92,112615,102384],{"class":151},[92,112617,109],{"class":102},[92,112619,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648],{"class":94,"line":1158},[92,112621,105852],{"class":102},[92,112623,320],{"class":151},[92,112625,4422],{"class":102},[92,112627,148],{"class":98},[92,112629,112171],{"class":102},[92,112631,105241],{"class":151},[92,112633,6498],{"class":98},[92,112635,112178],{"class":102},[92,112637,294],{"class":151},[92,112639,112183],{"class":102},[92,112641,635],{"class":98},[92,112643,102384],{"class":151},[92,112645,12415],{"class":102},[92,112647,102384],{"class":151},[92,112649,109],{"class":102},[38,112651,112652],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[63,112654,101689],{"id":101689},[83,112656,112657],{"className":30360,"code":112467,"language":30362,"meta":10,"style":10},[89,112658,112659],{"__ignoreMap":10},[92,112660,112661,112663,112665,112667,112669],{"class":94,"line":95},[92,112662,31929],{"class":98},[92,112664,111837],{"class":1942},[92,112666,111840],{"class":102},[92,112668,1278],{"class":151},[92,112670,111845],{"class":102},[38,112672,112673,112674,112676,112677,82521,112679,28367],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[89,112675,79792],{}," 是 site 的名字，比如 ",[89,112678,111517],{},[89,112680,111940],{},[83,112682,112684],{"className":30360,"code":112683,"language":30362,"meta":10,"style":10},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[89,112685,112686],{"__ignoreMap":10},[92,112687,112688,112690,112692],{"class":94,"line":95},[92,112689,103615],{"class":102},[92,112691,148],{"class":98},[92,112693,111854],{"class":102},[38,112695,112696],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[83,112698,112700],{"className":30360,"code":112699,"language":30362,"meta":10,"style":10},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[89,112701,112702,112714],{"__ignoreMap":10},[92,112703,112704,112706,112708,112710,112712],{"class":94,"line":95},[92,112705,1510],{"class":98},[92,112707,103430],{"class":102},[92,112709,1013],{"class":98},[92,112711,4072],{"class":151},[92,112713,3718],{"class":102},[92,112715,112716,112718,112720,112722,112724,112726,112728,112730,112732,112734],{"class":94,"line":11},[92,112717,103876],{"class":98},[92,112719,103416],{"class":151},[92,112721,103],{"class":102},[92,112723,155],{"class":98},[92,112725,111879],{"class":207},[92,112727,999],{"class":151},[92,112729,79792],{"class":102},[92,112731,1049],{"class":151},[92,112733,354],{"class":207},[92,112735,109],{"class":102},[38,112737,112738,112739,112742,112743,112745],{},"如果 site 没找到，就主动报错。",[89,112740,112741],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[89,112744,79792],{}," 的值放进字符串里。",[83,112747,112749],{"className":30360,"code":112748,"language":30362,"meta":10,"style":10},"return data.site_xpos[site_id].copy()\n",[89,112750,112751],{"__ignoreMap":10},[92,112752,112753,112755],{"class":94,"line":95},[92,112754,17026],{"class":98},[92,112756,111896],{"class":102},[38,112758,112759,112760,112762,112763,112766],{},"返回这个 site 的世界坐标。",[89,112761,103661],{}," 里的每一行都是一个 site 的 ",[89,112764,112765],{},"(x, y, z)"," 坐标。",[83,112768,112770],{"className":30360,"code":112769,"language":30362,"meta":10,"style":10},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[89,112771,112772],{"__ignoreMap":10},[92,112773,112774,112776,112778],{"class":94,"line":95},[92,112775,31929],{"class":98},[92,112777,111911],{"class":1942},[92,112779,111914],{"class":102},[38,112781,112782],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[83,112784,112786],{"className":30360,"code":112785,"language":30362,"meta":10,"style":10},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[89,112787,112788,112800],{"__ignoreMap":10},[92,112789,112790,112792,112794,112796,112798],{"class":94,"line":95},[92,112791,111549],{"class":102},[92,112793,148],{"class":98},[92,112795,111924],{"class":102},[92,112797,111517],{"class":207},[92,112799,109],{"class":102},[92,112801,112802,112804,112806,112808,112810],{"class":94,"line":11},[92,112803,111559],{"class":102},[92,112805,148],{"class":98},[92,112807,111924],{"class":102},[92,112809,111940],{"class":207},[92,112811,109],{"class":102},[38,112813,112814],{},"分别读取末端点和目标点的世界坐标。",[83,112816,112817],{"className":30360,"code":112489,"language":30362,"meta":10,"style":10},[89,112818,112819],{"__ignoreMap":10},[92,112820,112821,112823],{"class":94,"line":95},[92,112822,17026],{"class":98},[92,112824,111949],{"class":102},[38,112826,112827],{},"把四部分拼成一个观测数组：",[83,112829,112832],{"className":112830,"code":112831,"language":5167,"meta":10},[5165],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[89,112833,112831],{"__ignoreMap":10},[83,112835,112837],{"className":30360,"code":112836,"language":30362,"meta":10,"style":10},"dist = np.linalg.norm(tip - target)\n",[89,112838,112839],{"__ignoreMap":10},[92,112840,112841,112843,112845,112847,112849],{"class":94,"line":95},[92,112842,111577],{"class":102},[92,112844,148],{"class":98},[92,112846,111582],{"class":102},[92,112848,635],{"class":98},[92,112850,111587],{"class":102},[38,112852,112853,112854,112857,112858,112861],{},"计算 tip 到 target 的距离。",[89,112855,112856],{},"tip - target"," 得到一个三维向量，",[89,112859,112860],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[38,112863,14613],{},[83,112865,112868],{"className":112866,"code":112867,"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,112869,112867],{"__ignoreMap":10},[83,112871,112873],{"className":30360,"code":112872,"language":30362,"meta":10,"style":10},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[89,112874,112875],{"__ignoreMap":10},[92,112876,112877,112879,112881,112883,112885],{"class":94,"line":95},[92,112878,112524],{"class":102},[92,112880,148],{"class":98},[92,112882,112018],{"class":151},[92,112884,6498],{"class":98},[92,112886,112023],{"class":102},[38,112888,112889,112890,112893,112894,112897],{},"计算动作惩罚。",[89,112891,112892],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[89,112895,112896],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[83,112899,112901],{"className":30360,"code":112900,"language":30362,"meta":10,"style":10},"return float(-dist - control_cost)\n",[89,112902,112903],{"__ignoreMap":10},[92,112904,112905,112907,112909,112911,112913,112915,112917],{"class":94,"line":95},[92,112906,17026],{"class":98},[92,112908,109778],{"class":151},[92,112910,103],{"class":102},[92,112912,635],{"class":98},[92,112914,111577],{"class":102},[92,112916,635],{"class":98},[92,112918,112040],{"class":102},[38,112920,112921],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[83,112923,112924],{"className":30360,"code":110784,"language":30362,"meta":10,"style":10},[89,112925,112926],{"__ignoreMap":10},[92,112927,112928,112930,112932],{"class":94,"line":95},[92,112929,110791],{"class":102},[92,112931,148],{"class":98},[92,112933,104742],{"class":151},[38,112935,112936],{},"累计奖励变量，记录整个运行过程的总分。",[83,112938,112940],{"className":30360,"code":112939,"language":30362,"meta":10,"style":10},"for step in range(500):\n",[89,112941,112942],{"__ignoreMap":10},[92,112943,112944,112946,112948,112950,112952,112954,112956],{"class":94,"line":95},[92,112945,3004],{"class":98},[92,112947,31598],{"class":102},[92,112949,26025],{"class":98},[92,112951,32425],{"class":151},[92,112953,103],{"class":102},[92,112955,65056],{"class":151},[92,112957,30768],{"class":102},[38,112959,112960],{},"运行 500 个控制步。",[83,112962,112963],{"className":30360,"code":104524,"language":30362,"meta":10,"style":10},[89,112964,112965],{"__ignoreMap":10},[92,112966,112967],{"class":94,"line":95},[92,112968,104524],{"class":102},[38,112970,112971,112972,100999,112974,112976],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[89,112973,103212],{},[89,112975,103215],{}," 是当前状态下的坐标。",[83,112978,112980],{"className":30360,"code":112979,"language":30362,"meta":10,"style":10},"error = target - tip\n",[89,112981,112982],{"__ignoreMap":10},[92,112983,112984,112986,112988,112990,112992],{"class":94,"line":95},[92,112985,112577],{"class":102},[92,112987,148],{"class":98},[92,112989,112149],{"class":102},[92,112991,635],{"class":98},[92,112993,112154],{"class":102},[38,112995,112996],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[83,112998,113000],{"className":30360,"code":112999,"language":30362,"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,113001,113002,113034],{"__ignoreMap":10},[92,113003,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032],{"class":94,"line":95},[92,113005,105852],{"class":102},[92,113007,294],{"class":151},[92,113009,4422],{"class":102},[92,113011,148],{"class":98},[92,113013,112171],{"class":102},[92,113015,105241],{"class":151},[92,113017,6498],{"class":98},[92,113019,112178],{"class":102},[92,113021,180],{"class":151},[92,113023,112183],{"class":102},[92,113025,635],{"class":98},[92,113027,102384],{"class":151},[92,113029,12415],{"class":102},[92,113031,102384],{"class":151},[92,113033,109],{"class":102},[92,113035,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064],{"class":94,"line":11},[92,113037,105852],{"class":102},[92,113039,320],{"class":151},[92,113041,4422],{"class":102},[92,113043,148],{"class":98},[92,113045,112171],{"class":102},[92,113047,105241],{"class":151},[92,113049,6498],{"class":98},[92,113051,112178],{"class":102},[92,113053,294],{"class":151},[92,113055,112183],{"class":102},[92,113057,635],{"class":98},[92,113059,102384],{"class":151},[92,113061,12415],{"class":102},[92,113063,102384],{"class":151},[92,113065,109],{"class":102},[38,113067,113068,113069,113072],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[89,113070,113071],{},"error -> ctrl -> step"," 的流程。",[83,113074,113075],{"className":30360,"code":104486,"language":30362,"meta":10,"style":10},[89,113076,113077],{"__ignoreMap":10},[92,113078,113079],{"class":94,"line":95},[92,113080,104486],{"class":102},[38,113082,113083],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[83,113085,113087],{"className":30360,"code":113086,"language":30362,"meta":10,"style":10},"obs = get_obs(model, data)\n",[89,113088,113089],{"__ignoreMap":10},[92,113090,113091,113093,113095],{"class":94,"line":95},[92,113092,110835],{"class":102},[92,113094,148],{"class":98},[92,113096,112272],{"class":102},[38,113098,113099,113100,113103],{},"读取最新观测。后面打印 ",[89,113101,113102],{},"obs.shape[0]","，用来确认观测维度是 10。",[33,113105,102297],{"id":102296},[38,113107,113108],{},"观测维度为:",[83,113110,113113],{"className":113111,"code":113112,"language":5167,"meta":10},[5165],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[89,113114,113112],{"__ignoreMap":10},[38,113116,113117],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[38,113119,113120],{},"程序每 100 步打印：",[83,113122,113125],{"className":113123,"code":113124,"language":5167,"meta":10},[5165],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[89,113126,113124],{"__ignoreMap":10},[38,113128,113129,113130,113132],{},"如果控制有效，你应该看到最终 ",[89,113131,103212],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[33,113134,102329],{"id":102328},[46,113136,113137,113140,113143,113149,113155,113162,113172],{},[49,113138,113139],{},"修改目标点位置。",[49,113141,113142],{},"重新运行，观察最终 tip 是否变化。",[49,113144,113145,113146,113148],{},"把 gravity 改成 ",[89,113147,102570],{},"，观察控制是否变差。",[49,113150,111162,113151,111166,113153,28367],{},[89,113152,102139],{},[89,113154,180],{},[49,113156,102392,113157,102395,113159,113161],{},[89,113158,110577],{},[89,113160,107288],{},"，观察机械臂是否更难移动。",[49,113163,102392,113164,82512,113166,102395,113168,113171],{},[89,113165,103215],{},[89,113167,104127],{},[89,113169,113170],{},"0.2 0 0.6","，观察 reward 和 final tip。",[49,113173,113174],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[33,113176,102434],{"id":102433},[63,113178,113180],{"id":113179},"site-not-found",[89,113181,113182],{},"site not found",[38,113184,113185,113186,100999,113189,28367],{},"检查 XML 中是否有 ",[89,113187,113188],{},"site name=\"tip\"",[89,113190,113191],{},"site name=\"target\"",[63,113193,113194],{"id":113194},"机械臂完全不动",[38,113196,102504],{},[46,113198,113199,113204,113207,113212],{},[49,113200,113201,113203],{},[89,113202,102139],{}," 是否为 2",[49,113205,113206],{},"actuator 是否引用正确 joint",[49,113208,113209,113211],{},[89,113210,101057],{}," 是否被赋值",[49,113213,113214,113215],{},"是否执行了 ",[89,113216,100666],{},[63,113218,113219],{"id":113219},"控制效果不好",[38,113221,113222],{},"正常。本章重点不是控制器最优，而是任务结构:",[83,113224,113227],{"className":113225,"code":113226,"language":5167,"meta":10},[5165],"obs → action → mj_step → reward → next_obs\n",[89,113228,113226],{"__ignoreMap":10},[63,113230,113232],{"id":113231},"tip-坐标不变化","tip 坐标不变化",[38,113234,102556],{},[46,113236,113237,113242,113250,113259],{},[49,113238,113239,113240,28367],{},"是否每步调用了 ",[89,113241,100666],{},[49,113243,113244,113245,100999,113247,28367],{},"是否写入了 ",[89,113246,106107],{},[89,113248,113249],{},"data.ctrl[1]",[49,113251,113252,113253,315,113256,28367],{},"actuator 是否正确引用 ",[89,113254,113255],{},"joint1",[89,113257,113258],{},"joint2",[49,113260,113261],{},"控制输入是否太小。",[63,113263,113264],{"id":113264},"目标点不会动",[38,113266,113267],{},"本章的 target 是固定 site：",[83,113269,113271],{"className":53049,"code":113270,"language":53051,"meta":10,"style":10},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[89,113272,113273],{"__ignoreMap":10},[92,113274,113275,113277,113279,113281,113283,113285,113287,113289,113292],{"class":94,"line":95},[92,113276,1013],{"class":102},[92,113278,103191],{"class":51282},[92,113280,14900],{"class":1942},[92,113282,148],{"class":102},[92,113284,111940],{"class":207},[92,113286,101087],{"class":1942},[92,113288,148],{"class":102},[92,113290,113291],{"class":207},"\"0.5 0 0.4\"",[92,113293,113294],{"class":102}," ...\u002F>\n",[38,113296,113297,113298,113300],{},"它直接挂在 ",[89,113299,101822],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[63,113302,113303],{"id":113303},"机械臂不像真实机械臂",[38,113305,113306],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[33,113308,102588],{"id":102587},[38,113310,113311],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[38,113313,113314],{},"核心公式：",[83,113316,113319],{"className":113317,"code":113318,"language":5167,"meta":10},[5165],"distance = ||tip - target||\nreward = -distance - action_cost\n",[89,113320,113318],{"__ignoreMap":10},[38,113322,113323],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5106,113325,113326],{},"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":113328},[113329,113330,113331,113336,113340,113341,113342,113350],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":113332},[113333,113334,113335],{"id":111532,"depth":1158,"text":111533},{"id":111608,"depth":1158,"text":111608},{"id":111638,"depth":1158,"text":111639},{"id":101233,"depth":11,"text":101234,"children":113337},[113338,113339],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":113343},[113344,113345,113346,113347,113348,113349],{"id":113179,"depth":1158,"text":113182},{"id":113194,"depth":1158,"text":113194},{"id":113219,"depth":1158,"text":113219},{"id":113231,"depth":1158,"text":113232},{"id":113264,"depth":1158,"text":113264},{"id":113303,"depth":1158,"text":113303},{"id":102587,"depth":11,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111336,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113357,"title":113358,"body":113359,"description":10,"extension":14,"meta":116821,"navigation":17,"path":116822,"seo":116823,"stem":116824,"__hash__":116825},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113360,"toc":116792},[113361,113364,113366,113369,113372,113397,113400,113406,113409,113415,113417,113419,113443,113445,113463,113465,113508,113510,113537,113539,113542,113594,113597,113603,113612,113615,113653,113656,113695,113698,113706,113713,113716,113722,113724,113778,113785,113830,113833,113837,113853,113863,113865,115126,115128,115140,115142,115153,115155,115158,115179,115182,115185,115218,115224,115227,115260,115263,115266,115307,115312,115326,115329,115342,115347,115370,115372,115387,115397,115412,115419,115439,115454,115472,115475,115492,115500,115516,115522,115554,115567,115599,115609,115644,115658,115704,115718,115760,115771,115784,115790,115823,115826,115853,115863,115903,115913,115930,115937,115955,115958,115999,116012,116027,116030,116053,116056,116068,116071,116090,116095,116116,116119,116134,116137,116171,116183,116198,116201,116226,116229,116248,116251,116283,116286,116310,116316,116346,116353,116366,116369,116371,116373,116379,116382,116385,116397,116400,116402,116456,116458,116462,116468,116477,116480,116487,116489,116512,116515,116519,116521,116539,116545,116547,116580,116583,116589,116593,116596,116616,116621,116625,116632,116652,116657,116661,116664,116684,116687,116773,116777,116780,116786,116789],[29,113362,113358],{"id":113363},"_8gymnasium-风格强化学习接口基础",[33,113365,100628],{"id":100627},[38,113367,113368],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[38,113370,113371],{},"你将实现:",[83,113373,113375],{"className":30360,"code":113374,"language":30362,"meta":10,"style":10},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[89,113376,113377,113387],{"__ignoreMap":10},[92,113378,113379,113382,113384],{"class":94,"line":95},[92,113380,113381],{"class":102},"obs, info ",[92,113383,148],{"class":98},[92,113385,113386],{"class":102}," env.reset()\n",[92,113388,113389,113392,113394],{"class":94,"line":11},[92,113390,113391],{"class":102},"obs, reward, terminated, truncated, info ",[92,113393,148],{"class":98},[92,113395,113396],{"class":102}," env.step(action)\n",[38,113398,113399],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[38,113401,113402,113403,113405],{},"前面章节的代码都是“脚本式”的：在 ",[89,113404,102276],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[38,113407,113408],{},"可以先记住 Gymnasium 环境的核心交互：",[83,113410,113413],{"className":113411,"code":113412,"language":5167,"meta":10},[5165],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[89,113414,113412],{"__ignoreMap":10},[33,113416,100751],{"id":100750},[38,113418,100754],{},[83,113420,113421],{"className":23803,"code":104369,"language":23805,"meta":10,"style":10},[89,113422,113423],{"__ignoreMap":10},[92,113424,113425,113427,113429,113431,113433,113435,113437,113439,113441],{"class":94,"line":95},[92,113426,24558],{"class":1942},[92,113428,26297],{"class":207},[92,113430,23815],{"class":207},[92,113432,26382],{"class":151},[92,113434,104384],{"class":207},[92,113436,100779],{"class":207},[92,113438,102482],{"class":207},[92,113440,100795],{"class":207},[92,113442,104393],{"class":207},[38,113444,102800],{},[83,113446,113448],{"className":23803,"code":113447,"language":23805,"meta":10,"style":10},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[89,113449,113450],{"__ignoreMap":10},[92,113451,113452,113454,113456,113458,113460],{"class":94,"line":95},[92,113453,23812],{"class":1942},[92,113455,23815],{"class":207},[92,113457,100911],{"class":207},[92,113459,107692],{"class":207},[92,113461,113462],{"class":207}," gymnasium\n",[38,113464,102817],{},[83,113466,113468],{"className":23803,"code":113467,"language":23805,"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,113469,113470,113487,113496],{"__ignoreMap":10},[92,113471,113472,113474,113476,113478,113481,113483,113485],{"class":94,"line":95},[92,113473,30312],{"class":1942},[92,113475,29158],{"class":207},[92,113477,25097],{"class":151},[92,113479,113480],{"class":207}," mujoco-gym-api",[92,113482,100956],{"class":207},[92,113484,100959],{"class":151},[92,113486,100962],{"class":151},[92,113488,113489,113491,113493],{"class":94,"line":11},[92,113490,30312],{"class":1942},[92,113492,100969],{"class":207},[92,113494,113495],{"class":207}," mujoco-gym-api\n",[92,113497,113498,113500,113502,113504,113506],{"class":94,"line":1158},[92,113499,23812],{"class":1942},[92,113501,23815],{"class":207},[92,113503,100911],{"class":207},[92,113505,107692],{"class":207},[92,113507,113462],{"class":207},[38,113509,100985],{},[46,113511,113512,113522,113525,113531],{},[49,113513,113514,113515,113518,113519,28367],{},"本章使用 ",[89,113516,113517],{},"gymnasium","，不是旧版 ",[89,113520,113521],{},"gym",[49,113523,113524],{},"Gymnasium API 与旧 Gym API 有差异。",[49,113526,113527,113528,28367],{},"旧 Gym 常见返回值是 4 个: ",[89,113529,113530],{},"obs, reward, done, info",[49,113532,113533,113534,28367],{},"Gymnasium 返回值是 5 个: ",[89,113535,113536],{},"obs, reward, terminated, truncated, info",[33,113538,101026],{"id":101025},[38,113540,113541],{},"强化学习环境接口包含:",[240,113543,113544,113553],{},[243,113545,113546],{},[246,113547,113548,113551],{},[249,113549,113550],{"align":23717},"方法",[249,113552,102677],{"align":23717},[287,113554,113555,113565,113575,113585],{},[246,113556,113557,113562],{},[292,113558,113559],{"align":23717},[89,113560,113561],{},"reset()",[292,113563,113564],{"align":23717},"重置环境",[246,113566,113567,113572],{},[292,113568,113569],{"align":23717},[89,113570,113571],{},"step(action)",[292,113573,113574],{"align":23717},"执行动作",[246,113576,113577,113582],{},[292,113578,113579],{"align":23717},[89,113580,113581],{},"observation_space",[292,113583,113584],{"align":23717},"观测空间",[246,113586,113587,113592],{},[292,113588,113589],{"align":23717},[89,113590,113591],{},"action_space",[292,113593,23635],{"align":23717},[38,113595,113596],{},"一个最小环境需要完成:",[83,113598,113601],{"className":113599,"code":113600,"language":5167,"meta":10},[5165],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[89,113602,113600],{"__ignoreMap":10},[63,113604,113606,100999,113609,104619],{"id":113605},"terminated-和-truncated-的区别",[89,113607,113608],{},"terminated",[89,113610,113611],{},"truncated",[38,113613,113614],{},"Gymnasium 把“结束”拆成两个概念：",[240,113616,113617,113627],{},[243,113618,113619],{},[246,113620,113621,113623,113625],{},[249,113622,104555],{"align":23717},[249,113624,100681],{"align":23717},[249,113626,21167],{"align":23717},[287,113628,113629,113641],{},[246,113630,113631,113635,113638],{},[292,113632,113633],{"align":23717},[89,113634,113608],{},[292,113636,113637],{"align":23717},"任务自然结束",[292,113639,113640],{"align":23717},"机械臂到达目标、机器人摔倒",[246,113642,113643,113647,113650],{},[292,113644,113645],{"align":23717},[89,113646,113611],{},[292,113648,113649],{"align":23717},"因外部限制截断",[292,113651,113652],{"align":23717},"达到最大步数、时间限制",[38,113654,113655],{},"本章中：",[83,113657,113659],{"className":30360,"code":113658,"language":30362,"meta":10,"style":10},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[89,113660,113661,113676],{"__ignoreMap":10},[92,113662,113663,113666,113668,113671,113673],{"class":94,"line":95},[92,113664,113665],{"class":102},"terminated ",[92,113667,148],{"class":98},[92,113669,113670],{"class":102}," dist ",[92,113672,1013],{"class":98},[92,113674,113675],{"class":151}," 0.05\n",[92,113677,113678,113681,113683,113685,113688,113690,113692],{"class":94,"line":11},[92,113679,113680],{"class":102},"truncated ",[92,113682,148],{"class":98},[92,113684,38855],{"class":151},[92,113686,113687],{"class":102},".steps ",[92,113689,1689],{"class":98},[92,113691,38855],{"class":151},[92,113693,113694],{"class":102},".max_steps\n",[38,113696,113697],{},"也就是：",[46,113699,113700,113703],{},[49,113701,113702],{},"末端距离目标小于 0.05，任务成功结束。",[49,113704,113705],{},"步数超过上限，episode 被截断。",[63,113707,113709,100999,113711],{"id":113708},"observation_space-和-action_space",[89,113710,113581],{},[89,113712,113591],{},[38,113714,113715],{},"这两个对象告诉算法：",[83,113717,113720],{"className":113718,"code":113719,"language":5167,"meta":10},[5165],"观测长什么样\n动作允许多大\n",[89,113721,113719],{"__ignoreMap":10},[38,113723,14613],{},[83,113725,113727],{"className":30360,"code":113726,"language":30362,"meta":10,"style":10},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[89,113728,113729],{"__ignoreMap":10},[92,113730,113731,113733,113736,113738,113741,113744,113747,113749,113751,113754,113756,113758,113760,113762,113764,113766,113768,113771,113773,113775],{"class":94,"line":95},[92,113732,30805],{"class":151},[92,113734,113735],{"class":102},".action_space ",[92,113737,148],{"class":98},[92,113739,113740],{"class":102}," spaces.Box(",[92,113742,113743],{"class":5196},"low",[92,113745,113746],{"class":98},"=-",[92,113748,102384],{"class":151},[92,113750,12415],{"class":102},[92,113752,113753],{"class":5196},"high",[92,113755,148],{"class":98},[92,113757,102384],{"class":151},[92,113759,12415],{"class":102},[92,113761,95944],{"class":5196},[92,113763,148],{"class":98},[92,113765,103],{"class":102},[92,113767,180],{"class":151},[92,113769,113770],{"class":102},",), ",[92,113772,93481],{"class":5196},[92,113774,148],{"class":98},[92,113776,113777],{"class":102},"np.float32)\n",[38,113779,113780,113781,113784],{},"表示动作是 2 维数组，每个值都在 ",[89,113782,113783],{},"[-1, 1]"," 范围内。",[83,113786,113788],{"className":30360,"code":113787,"language":30362,"meta":10,"style":10},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[89,113789,113790],{"__ignoreMap":10},[92,113791,113792,113794,113797,113799,113801,113803,113805,113808,113810,113812,113814,113816,113818,113820,113822,113824,113826,113828],{"class":94,"line":95},[92,113793,30805],{"class":151},[92,113795,113796],{"class":102},".observation_space ",[92,113798,148],{"class":98},[92,113800,113740],{"class":102},[92,113802,113743],{"class":5196},[92,113804,113746],{"class":98},[92,113806,113807],{"class":102},"np.inf, ",[92,113809,113753],{"class":5196},[92,113811,148],{"class":98},[92,113813,113807],{"class":102},[92,113815,95944],{"class":5196},[92,113817,148],{"class":98},[92,113819,103],{"class":102},[92,113821,549],{"class":151},[92,113823,113770],{"class":102},[92,113825,93481],{"class":5196},[92,113827,148],{"class":98},[92,113829,113777],{"class":102},[38,113831,113832],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[63,113834,113836],{"id":113835},"frame_skip-是什么","frame_skip 是什么",[83,113838,113840],{"className":30360,"code":113839,"language":30362,"meta":10,"style":10},"self.frame_skip = 5\n",[89,113841,113842],{"__ignoreMap":10},[92,113843,113844,113846,113849,113851],{"class":94,"line":95},[92,113845,30805],{"class":151},[92,113847,113848],{"class":102},".frame_skip ",[92,113850,148],{"class":98},[92,113852,54409],{"class":151},[38,113854,113855,113856,113859,113860,113862],{},"表示外部调用一次 ",[89,113857,113858],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[89,113861,101196],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[33,113864,101234],{"id":101233},[83,113866,113868],{"className":30360,"code":113867,"language":30362,"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,113869,113870,113882,113888,113898,113909,113913,113917,113925,113930,113934,113938,113942,113946,113950,113954,113958,113963,113967,113971,113975,113980,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114050,114065,114069,114082,114092,114107,114124,114128,114149,114168,114193,114207,114211,114221,114233,114243,114247,114289,114327,114331,114341,114357,114372,114391,114398,114402,114415,114430,114445,114458,114477,114493,114497,114538,114553,114568,114572,114611,114622,114635,114639,114649,114658,114662,114672,114687,114705,114709,114720,114737,114750,114754,114764,114768,114779,114790,114794,114808,114822,114838,114842,114855,114872,114887,114894,114898,114902,114914,114924,114942,114954,114966,114970,114978,114994,115003,115012,115020,115062,115075,115080,115084,115102,115106,115110,115122],{"__ignoreMap":10},[92,113871,113872,113874,113877,113879],{"class":94,"line":95},[92,113873,30374],{"class":98},[92,113875,113876],{"class":102}," gymnasium ",[92,113878,31365],{"class":98},[92,113880,113881],{"class":102}," gym\n",[92,113883,113884,113886],{"class":94,"line":11},[92,113885,30374],{"class":98},[92,113887,101282],{"class":102},[92,113889,113890,113892,113894,113896],{"class":94,"line":1158},[92,113891,30374],{"class":98},[92,113893,31362],{"class":102},[92,113895,31365],{"class":98},[92,113897,31368],{"class":102},[92,113899,113900,113902,113904,113906],{"class":94,"line":1173},[92,113901,30719],{"class":98},[92,113903,113876],{"class":102},[92,113905,30374],{"class":98},[92,113907,113908],{"class":102}," spaces\n",[92,113910,113911],{"class":94,"line":1179},[92,113912,2379],{"emptyLinePlaceholder":17},[92,113914,113915],{"class":94,"line":1193},[92,113916,2379],{"emptyLinePlaceholder":17},[92,113918,113919,113921,113923],{"class":94,"line":1199},[92,113920,101295],{"class":151},[92,113922,13544],{"class":98},[92,113924,101300],{"class":207},[92,113926,113927],{"class":94,"line":1290},[92,113928,113929],{"class":207},"\u003Cmujoco model=\"gym_reacher\">\n",[92,113931,113932],{"class":94,"line":1296},[92,113933,111719],{"class":207},[92,113935,113936],{"class":94,"line":1308},[92,113937,2379],{"emptyLinePlaceholder":17},[92,113939,113940],{"class":94,"line":1591},[92,113941,101319],{"class":207},[92,113943,113944],{"class":94,"line":1596},[92,113945,111737],{"class":207},[92,113947,113948],{"class":94,"line":1602},[92,113949,2379],{"emptyLinePlaceholder":17},[92,113951,113952],{"class":94,"line":1607},[92,113953,111746],{"class":207},[92,113955,113956],{"class":94,"line":1621},[92,113957,111751],{"class":207},[92,113959,113960],{"class":94,"line":1626},[92,113961,113962],{"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,113964,113965],{"class":94,"line":1632},[92,113966,2379],{"emptyLinePlaceholder":17},[92,113968,113969],{"class":94,"line":1653},[92,113970,111765],{"class":207},[92,113972,113973],{"class":94,"line":1658},[92,113974,111770],{"class":207},[92,113976,113977],{"class":94,"line":1672},[92,113978,113979],{"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,113981,113982],{"class":94,"line":1677},[92,113983,111780],{"class":207},[92,113985,113986],{"class":94,"line":1706},[92,113987,106419],{"class":207},[92,113989,113990],{"class":94,"line":1711},[92,113991,101348],{"class":207},[92,113993,113994],{"class":94,"line":1728},[92,113995,101353],{"class":207},[92,113997,113998],{"class":94,"line":1733},[92,113999,2379],{"emptyLinePlaceholder":17},[92,114001,114002],{"class":94,"line":1738},[92,114003,106436],{"class":207},[92,114005,114006],{"class":94,"line":1743},[92,114007,111805],{"class":207},[92,114009,114010],{"class":94,"line":1757},[92,114011,111810],{"class":207},[92,114013,114014],{"class":94,"line":1762},[92,114015,106446],{"class":207},[92,114017,114018],{"class":94,"line":2556},[92,114019,101358],{"class":207},[92,114021,114022],{"class":94,"line":2570},[92,114023,95679],{"class":207},[92,114025,114026],{"class":94,"line":2578},[92,114027,2379],{"emptyLinePlaceholder":17},[92,114029,114030],{"class":94,"line":2583},[92,114031,2379],{"emptyLinePlaceholder":17},[92,114033,114034,114036,114039,114041,114043,114045,114048],{"class":94,"line":2589},[92,114035,14674],{"class":98},[92,114037,114038],{"class":1942}," ReacherEnv",[92,114040,103],{"class":102},[92,114042,113521],{"class":1942},[92,114044,661],{"class":102},[92,114046,114047],{"class":1942},"Env",[92,114049,30768],{"class":102},[92,114051,114052,114055,114057,114059,114062],{"class":94,"line":2595},[92,114053,114054],{"class":102},"    metadata ",[92,114056,148],{"class":98},[92,114058,4427],{"class":102},[92,114060,114061],{"class":207},"\"render_modes\"",[92,114063,114064],{"class":102},": []}\n",[92,114066,114067],{"class":94,"line":2600},[92,114068,2379],{"emptyLinePlaceholder":17},[92,114070,114071,114073,114075,114078,114080],{"class":94,"line":7928},[92,114072,30783],{"class":98},[92,114074,30786],{"class":151},[92,114076,114077],{"class":102},"(self) -> ",[92,114079,95667],{"class":151},[92,114081,3718],{"class":102},[92,114083,114084,114086,114088,114090],{"class":94,"line":7952},[92,114085,30799],{"class":151},[92,114087,17241],{"class":102},[92,114089,30811],{"class":151},[92,114091,1955],{"class":102},[92,114093,114094,114096,114099,114101,114103,114105],{"class":94,"line":7957},[92,114095,30827],{"class":151},[92,114097,114098],{"class":102},".model ",[92,114100,148],{"class":98},[92,114102,101393],{"class":102},[92,114104,101295],{"class":151},[92,114106,109],{"class":102},[92,114108,114109,114111,114114,114116,114119,114121],{"class":94,"line":7963},[92,114110,30827],{"class":151},[92,114112,114113],{"class":102},".data ",[92,114115,148],{"class":98},[92,114117,114118],{"class":102}," mujoco.MjData(",[92,114120,30805],{"class":151},[92,114122,114123],{"class":102},".model)\n",[92,114125,114126],{"class":94,"line":7990},[92,114127,2379],{"emptyLinePlaceholder":17},[92,114129,114130,114132,114135,114137,114140,114142,114145,114147],{"class":94,"line":7995},[92,114131,30827],{"class":151},[92,114133,114134],{"class":102},".tip_site_id ",[92,114136,148],{"class":98},[92,114138,114139],{"class":102}," mujoco.mj_name2id(",[92,114141,30805],{"class":151},[92,114143,114144],{"class":102},".model, mujoco.mjtObj.mjOBJ_SITE, ",[92,114146,111517],{"class":207},[92,114148,109],{"class":102},[92,114150,114151,114153,114156,114158,114160,114162,114164,114166],{"class":94,"line":8001},[92,114152,30827],{"class":151},[92,114154,114155],{"class":102},".target_site_id ",[92,114157,148],{"class":98},[92,114159,114139],{"class":102},[92,114161,30805],{"class":151},[92,114163,114144],{"class":102},[92,114165,111940],{"class":207},[92,114167,109],{"class":102},[92,114169,114170,114172,114174,114176,114178,114180,114183,114185,114187,114189,114191],{"class":94,"line":8013},[92,114171,2476],{"class":98},[92,114173,38855],{"class":151},[92,114175,114134],{"class":102},[92,114177,1013],{"class":98},[92,114179,4072],{"class":151},[92,114181,114182],{"class":98}," or",[92,114184,38855],{"class":151},[92,114186,114155],{"class":102},[92,114188,1013],{"class":98},[92,114190,4072],{"class":151},[92,114192,3718],{"class":102},[92,114194,114195,114198,114200,114202,114205],{"class":94,"line":8025},[92,114196,114197],{"class":98},"            raise",[92,114199,103416],{"class":151},[92,114201,103],{"class":102},[92,114203,114204],{"class":207},"\"required sites not found\"",[92,114206,109],{"class":102},[92,114208,114209],{"class":94,"line":8037},[92,114210,2379],{"emptyLinePlaceholder":17},[92,114212,114213,114215,114217,114219],{"class":94,"line":9696},[92,114214,30827],{"class":151},[92,114216,113848],{"class":102},[92,114218,148],{"class":98},[92,114220,54409],{"class":151},[92,114222,114223,114225,114228,114230],{"class":94,"line":9721},[92,114224,30827],{"class":151},[92,114226,114227],{"class":102},".max_steps ",[92,114229,148],{"class":98},[92,114231,114232],{"class":151}," 200\n",[92,114234,114235,114237,114239,114241],{"class":94,"line":9744},[92,114236,30827],{"class":151},[92,114238,113687],{"class":102},[92,114240,148],{"class":98},[92,114242,47315],{"class":151},[92,114244,114245],{"class":94,"line":9768},[92,114246,2379],{"emptyLinePlaceholder":17},[92,114248,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287],{"class":94,"line":9773},[92,114250,30827],{"class":151},[92,114252,113735],{"class":102},[92,114254,148],{"class":98},[92,114256,113740],{"class":102},[92,114258,113743],{"class":5196},[92,114260,113746],{"class":98},[92,114262,102384],{"class":151},[92,114264,12415],{"class":102},[92,114266,113753],{"class":5196},[92,114268,148],{"class":98},[92,114270,102384],{"class":151},[92,114272,12415],{"class":102},[92,114274,95944],{"class":5196},[92,114276,148],{"class":98},[92,114278,103],{"class":102},[92,114280,180],{"class":151},[92,114282,113770],{"class":102},[92,114284,93481],{"class":5196},[92,114286,148],{"class":98},[92,114288,113777],{"class":102},[92,114290,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325],{"class":94,"line":9778},[92,114292,30827],{"class":151},[92,114294,113796],{"class":102},[92,114296,148],{"class":98},[92,114298,113740],{"class":102},[92,114300,113743],{"class":5196},[92,114302,113746],{"class":98},[92,114304,113807],{"class":102},[92,114306,113753],{"class":5196},[92,114308,148],{"class":98},[92,114310,113807],{"class":102},[92,114312,95944],{"class":5196},[92,114314,148],{"class":98},[92,114316,103],{"class":102},[92,114318,549],{"class":151},[92,114320,113770],{"class":102},[92,114322,93481],{"class":5196},[92,114324,148],{"class":98},[92,114326,113777],{"class":102},[92,114328,114329],{"class":94,"line":9783},[92,114330,2379],{"emptyLinePlaceholder":17},[92,114332,114333,114335,114338],{"class":94,"line":9792},[92,114334,30783],{"class":98},[92,114336,114337],{"class":1942}," _get_obs",[92,114339,114340],{"class":102},"(self) -> np.ndarray:\n",[92,114342,114343,114345,114347,114349,114352,114354],{"class":94,"line":9797},[92,114344,112118],{"class":102},[92,114346,148],{"class":98},[92,114348,38855],{"class":151},[92,114350,114351],{"class":102},".data.site_xpos[",[92,114353,30805],{"class":151},[92,114355,114356],{"class":102},".tip_site_id].copy()\n",[92,114358,114359,114361,114363,114365,114367,114369],{"class":94,"line":9803},[92,114360,112131],{"class":102},[92,114362,148],{"class":98},[92,114364,38855],{"class":151},[92,114366,114351],{"class":102},[92,114368,30805],{"class":151},[92,114370,114371],{"class":102},".target_site_id].copy()\n",[92,114373,114374,114376,114378,114381,114383,114386,114388],{"class":94,"line":9824},[92,114375,110163],{"class":102},[92,114377,148],{"class":98},[92,114379,114380],{"class":102}," np.concatenate([",[92,114382,30805],{"class":151},[92,114384,114385],{"class":102},".data.qpos.copy(), ",[92,114387,30805],{"class":151},[92,114389,114390],{"class":102},".data.qvel.copy(), tip, target])\n",[92,114392,114393,114395],{"class":94,"line":9830},[92,114394,14732],{"class":98},[92,114396,114397],{"class":102}," obs.astype(np.float32)\n",[92,114399,114400],{"class":94,"line":9844},[92,114401,2379],{"emptyLinePlaceholder":17},[92,114403,114404,114406,114409,114411,114413],{"class":94,"line":9850},[92,114405,30783],{"class":98},[92,114407,114408],{"class":1942}," _get_reward",[92,114410,114077],{"class":102},[92,114412,142],{"class":151},[92,114414,3718],{"class":102},[92,114416,114417,114419,114421,114423,114425,114427],{"class":94,"line":9877},[92,114418,112118],{"class":102},[92,114420,148],{"class":98},[92,114422,38855],{"class":151},[92,114424,114351],{"class":102},[92,114426,30805],{"class":151},[92,114428,114429],{"class":102},".tip_site_id]\n",[92,114431,114432,114434,114436,114438,114440,114442],{"class":94,"line":9886},[92,114433,112131],{"class":102},[92,114435,148],{"class":98},[92,114437,38855],{"class":151},[92,114439,114351],{"class":102},[92,114441,30805],{"class":151},[92,114443,114444],{"class":102},".target_site_id]\n",[92,114446,114447,114450,114452,114454,114456],{"class":94,"line":9892},[92,114448,114449],{"class":102},"        dist ",[92,114451,148],{"class":98},[92,114453,111582],{"class":102},[92,114455,635],{"class":98},[92,114457,111587],{"class":102},[92,114459,114460,114463,114465,114467,114469,114472,114474],{"class":94,"line":9900},[92,114461,114462],{"class":102},"        control_cost ",[92,114464,148],{"class":98},[92,114466,112018],{"class":151},[92,114468,6498],{"class":98},[92,114470,114471],{"class":102}," np.sum(np.square(",[92,114473,30805],{"class":151},[92,114475,114476],{"class":102},".data.ctrl))\n",[92,114478,114479,114481,114483,114485,114487,114489,114491],{"class":94,"line":9905},[92,114480,14732],{"class":98},[92,114482,109778],{"class":151},[92,114484,103],{"class":102},[92,114486,635],{"class":98},[92,114488,111577],{"class":102},[92,114490,635],{"class":98},[92,114492,112040],{"class":102},[92,114494,114495],{"class":94,"line":16584},[92,114496,2379],{"emptyLinePlaceholder":17},[92,114498,114499,114501,114504,114507,114509,114512,114514,114516,114518,114520,114522,114525,114528,114530,114532,114534,114536],{"class":94,"line":16590},[92,114500,30783],{"class":98},[92,114502,114503],{"class":1942}," reset",[92,114505,114506],{"class":102},"(self, ",[92,114508,558],{"class":98},[92,114510,114511],{"class":102},", seed: ",[92,114513,106],{"class":151},[92,114515,25091],{"class":98},[92,114517,38915],{"class":151},[92,114519,13544],{"class":98},[92,114521,38915],{"class":151},[92,114523,114524],{"class":102},", options: ",[92,114526,114527],{"class":151},"dict",[92,114529,25091],{"class":98},[92,114531,38915],{"class":151},[92,114533,13544],{"class":98},[92,114535,38915],{"class":151},[92,114537,30768],{"class":102},[92,114539,114540,114542,114545,114548,114550],{"class":94,"line":16613},[92,114541,30799],{"class":151},[92,114543,114544],{"class":102},"().reset(",[92,114546,114547],{"class":5196},"seed",[92,114549,148],{"class":98},[92,114551,114552],{"class":102},"seed)\n",[92,114554,114555,114558,114560,114563,114565],{"class":94,"line":16619},[92,114556,114557],{"class":102},"        mujoco.mj_resetData(",[92,114559,30805],{"class":151},[92,114561,114562],{"class":102},".model, ",[92,114564,30805],{"class":151},[92,114566,114567],{"class":102},".data)\n",[92,114569,114570],{"class":94,"line":16642},[92,114571,2379],{"emptyLinePlaceholder":17},[92,114573,114574,114576,114579,114581,114583,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608],{"class":94,"line":16656},[92,114575,30827],{"class":151},[92,114577,114578],{"class":102},".data.qpos[:] ",[92,114580,148],{"class":98},[92,114582,38855],{"class":151},[92,114584,114585],{"class":102},".np_random.uniform(",[92,114587,113743],{"class":5196},[92,114589,113746],{"class":98},[92,114591,86192],{"class":151},[92,114593,12415],{"class":102},[92,114595,113753],{"class":5196},[92,114597,148],{"class":98},[92,114599,86192],{"class":151},[92,114601,12415],{"class":102},[92,114603,31478],{"class":5196},[92,114605,148],{"class":98},[92,114607,30805],{"class":151},[92,114609,114610],{"class":102},".model.nq)\n",[92,114612,114613,114615,114618,114620],{"class":94,"line":16676},[92,114614,30827],{"class":151},[92,114616,114617],{"class":102},".data.qvel[:] ",[92,114619,148],{"class":98},[92,114621,104742],{"class":151},[92,114623,114624,114627,114629,114631,114633],{"class":94,"line":16682},[92,114625,114626],{"class":102},"        mujoco.mj_forward(",[92,114628,30805],{"class":151},[92,114630,114562],{"class":102},[92,114632,30805],{"class":151},[92,114634,114567],{"class":102},[92,114636,114637],{"class":94,"line":16693},[92,114638,2379],{"emptyLinePlaceholder":17},[92,114640,114641,114643,114645,114647],{"class":94,"line":16716},[92,114642,30827],{"class":151},[92,114644,113687],{"class":102},[92,114646,148],{"class":98},[92,114648,47315],{"class":151},[92,114650,114651,114653,114655],{"class":94,"line":16738},[92,114652,14732],{"class":98},[92,114654,38855],{"class":151},[92,114656,114657],{"class":102},"._get_obs(), {}\n",[92,114659,114660],{"class":94,"line":16743},[92,114661,2379],{"emptyLinePlaceholder":17},[92,114663,114664,114666,114669],{"class":94,"line":16749},[92,114665,30783],{"class":98},[92,114667,114668],{"class":1942}," step",[92,114670,114671],{"class":102},"(self, action):\n",[92,114673,114674,114676,114678,114681,114683,114685],{"class":94,"line":16763},[92,114675,110203],{"class":102},[92,114677,148],{"class":98},[92,114679,114680],{"class":102}," np.asarray(action, ",[92,114682,93481],{"class":5196},[92,114684,148],{"class":98},[92,114686,113777],{"class":102},[92,114688,114689,114691,114693,114695,114697,114700,114702],{"class":94,"line":16776},[92,114690,110203],{"class":102},[92,114692,148],{"class":98},[92,114694,107428],{"class":102},[92,114696,30805],{"class":151},[92,114698,114699],{"class":102},".action_space.low, ",[92,114701,30805],{"class":151},[92,114703,114704],{"class":102},".action_space.high)\n",[92,114706,114707],{"class":94,"line":16781},[92,114708,2379],{"emptyLinePlaceholder":17},[92,114710,114711,114713,114716,114718],{"class":94,"line":16795},[92,114712,30827],{"class":151},[92,114714,114715],{"class":102},".data.ctrl[:] ",[92,114717,148],{"class":98},[92,114719,107451],{"class":102},[92,114721,114722,114724,114726,114728,114730,114732,114734],{"class":94,"line":16800},[92,114723,3382],{"class":98},[92,114725,101482],{"class":102},[92,114727,26025],{"class":98},[92,114729,32425],{"class":151},[92,114731,103],{"class":102},[92,114733,30805],{"class":151},[92,114735,114736],{"class":102},".frame_skip):\n",[92,114738,114739,114742,114744,114746,114748],{"class":94,"line":16806},[92,114740,114741],{"class":102},"            mujoco.mj_step(",[92,114743,30805],{"class":151},[92,114745,114562],{"class":102},[92,114747,30805],{"class":151},[92,114749,114567],{"class":102},[92,114751,114752],{"class":94,"line":16811},[92,114753,2379],{"emptyLinePlaceholder":17},[92,114755,114756,114758,114760,114762],{"class":94,"line":16825},[92,114757,30827],{"class":151},[92,114759,113687],{"class":102},[92,114761,9457],{"class":98},[92,114763,55681],{"class":151},[92,114765,114766],{"class":94,"line":16830},[92,114767,2379],{"emptyLinePlaceholder":17},[92,114769,114770,114772,114774,114776],{"class":94,"line":16835},[92,114771,110163],{"class":102},[92,114773,148],{"class":98},[92,114775,38855],{"class":151},[92,114777,114778],{"class":102},"._get_obs()\n",[92,114780,114781,114783,114785,114787],{"class":94,"line":16849},[92,114782,110268],{"class":102},[92,114784,148],{"class":98},[92,114786,38855],{"class":151},[92,114788,114789],{"class":102},"._get_reward()\n",[92,114791,114792],{"class":94,"line":16861},[92,114793,2379],{"emptyLinePlaceholder":17},[92,114795,114796,114798,114800,114802,114804,114806],{"class":94,"line":16866},[92,114797,112118],{"class":102},[92,114799,148],{"class":98},[92,114801,38855],{"class":151},[92,114803,114351],{"class":102},[92,114805,30805],{"class":151},[92,114807,114429],{"class":102},[92,114809,114810,114812,114814,114816,114818,114820],{"class":94,"line":16879},[92,114811,112131],{"class":102},[92,114813,148],{"class":98},[92,114815,38855],{"class":151},[92,114817,114351],{"class":102},[92,114819,30805],{"class":151},[92,114821,114444],{"class":102},[92,114823,114824,114826,114828,114830,114833,114835],{"class":94,"line":16884},[92,114825,114449],{"class":102},[92,114827,148],{"class":98},[92,114829,109778],{"class":151},[92,114831,114832],{"class":102},"(np.linalg.norm(tip ",[92,114834,635],{"class":98},[92,114836,114837],{"class":102}," target))\n",[92,114839,114840],{"class":94,"line":16889},[92,114841,2379],{"emptyLinePlaceholder":17},[92,114843,114844,114847,114849,114851,114853],{"class":94,"line":16894},[92,114845,114846],{"class":102},"        terminated ",[92,114848,148],{"class":98},[92,114850,113670],{"class":102},[92,114852,1013],{"class":98},[92,114854,113675],{"class":151},[92,114856,114857,114860,114862,114864,114866,114868,114870],{"class":94,"line":16907},[92,114858,114859],{"class":102},"        truncated ",[92,114861,148],{"class":98},[92,114863,38855],{"class":151},[92,114865,113687],{"class":102},[92,114867,1689],{"class":98},[92,114869,38855],{"class":151},[92,114871,113694],{"class":102},[92,114873,114874,114877,114879,114881,114884],{"class":94,"line":16912},[92,114875,114876],{"class":102},"        info ",[92,114878,148],{"class":98},[92,114880,4427],{"class":102},[92,114882,114883],{"class":207},"\"distance\"",[92,114885,114886],{"class":102},": dist}\n",[92,114888,114889,114891],{"class":94,"line":32615},[92,114890,14732],{"class":98},[92,114892,114893],{"class":102}," obs, reward, terminated, truncated, info\n",[92,114895,114896],{"class":94,"line":32621},[92,114897,2379],{"emptyLinePlaceholder":17},[92,114899,114900],{"class":94,"line":32627},[92,114901,2379],{"emptyLinePlaceholder":17},[92,114903,114904,114906,114908,114910,114912],{"class":94,"line":32633},[92,114905,31929],{"class":98},[92,114907,1952],{"class":1942},[92,114909,101379],{"class":102},[92,114911,95667],{"class":151},[92,114913,3718],{"class":102},[92,114915,114916,114919,114921],{"class":94,"line":32639},[92,114917,114918],{"class":102},"    env ",[92,114920,148],{"class":98},[92,114922,114923],{"class":102}," ReacherEnv()\n",[92,114925,114926,114929,114931,114934,114936,114938,114940],{"class":94,"line":32650},[92,114927,114928],{"class":102},"    obs, info ",[92,114930,148],{"class":98},[92,114932,114933],{"class":102}," env.reset(",[92,114935,114547],{"class":5196},[92,114937,148],{"class":98},[92,114939,294],{"class":151},[92,114941,109],{"class":102},[92,114943,114944,114946,114948,114951],{"class":94,"line":32656},[92,114945,31281],{"class":151},[92,114947,103],{"class":102},[92,114949,114950],{"class":207},"\"initial obs shape:\"",[92,114952,114953],{"class":102},", obs.shape)\n",[92,114955,114956,114958,114960,114963],{"class":94,"line":32676},[92,114957,31281],{"class":151},[92,114959,103],{"class":102},[92,114961,114962],{"class":207},"\"initial info:\"",[92,114964,114965],{"class":102},", info)\n",[92,114967,114968],{"class":94,"line":32682},[92,114969,2379],{"emptyLinePlaceholder":17},[92,114971,114972,114974,114976],{"class":94,"line":32693},[92,114973,110134],{"class":102},[92,114975,148],{"class":98},[92,114977,104742],{"class":151},[92,114979,114980,114982,114984,114986,114988,114990,114992],{"class":94,"line":32699},[92,114981,3180],{"class":98},[92,114983,31598],{"class":102},[92,114985,26025],{"class":98},[92,114987,32425],{"class":151},[92,114989,103],{"class":102},[92,114991,803],{"class":151},[92,114993,30768],{"class":102},[92,114995,114996,114998,115000],{"class":94,"line":32705},[92,114997,110203],{"class":102},[92,114999,148],{"class":98},[92,115001,115002],{"class":102}," env.action_space.sample()\n",[92,115004,115005,115008,115010],{"class":94,"line":32711},[92,115006,115007],{"class":102},"        obs, reward, terminated, truncated, info ",[92,115009,148],{"class":98},[92,115011,113396],{"class":102},[92,115013,115014,115016,115018],{"class":94,"line":32717},[92,115015,110278],{"class":102},[92,115017,9457],{"class":98},[92,115019,110283],{"class":102},[92,115021,115022,115024,115026,115028,115030,115033,115035,115037,115040,115042,115044,115047,115049,115051,115054,115056,115058,115060],{"class":94,"line":32723},[92,115023,32433],{"class":151},[92,115025,103],{"class":102},[92,115027,110312],{"class":207},[92,115029,110315],{"class":102},[92,115031,115032],{"class":207},"\"reward:\"",[92,115034,12415],{"class":102},[92,115036,32000],{"class":151},[92,115038,115039],{"class":102},"(reward, ",[92,115041,174],{"class":151},[92,115043,110326],{"class":102},[92,115045,115046],{"class":207},"\"distance:\"",[92,115048,12415],{"class":102},[92,115050,32000],{"class":151},[92,115052,115053],{"class":102},"(info[",[92,115055,114883],{"class":207},[92,115057,112183],{"class":102},[92,115059,174],{"class":151},[92,115061,30479],{"class":102},[92,115063,115064,115066,115069,115072],{"class":94,"line":32729},[92,115065,2476],{"class":98},[92,115067,115068],{"class":102}," terminated ",[92,115070,115071],{"class":98},"or",[92,115073,115074],{"class":102}," truncated:\n",[92,115076,115077],{"class":94,"line":32735},[92,115078,115079],{"class":98},"            break\n",[92,115081,115082],{"class":94,"line":32755},[92,115083,2379],{"emptyLinePlaceholder":17},[92,115085,115086,115088,115090,115092,115094,115096,115098,115100],{"class":94,"line":32761},[92,115087,31281],{"class":151},[92,115089,103],{"class":102},[92,115091,110357],{"class":207},[92,115093,12415],{"class":102},[92,115095,32000],{"class":151},[92,115097,110364],{"class":102},[92,115099,174],{"class":151},[92,115101,30479],{"class":102},[92,115103,115104],{"class":94,"line":32777},[92,115105,2379],{"emptyLinePlaceholder":17},[92,115107,115108],{"class":94,"line":32783},[92,115109,2379],{"emptyLinePlaceholder":17},[92,115111,115112,115114,115116,115118,115120],{"class":94,"line":32797},[92,115113,1510],{"class":98},[92,115115,31202],{"class":151},[92,115117,101540],{"class":98},[92,115119,101543],{"class":207},[92,115121,3718],{"class":102},[92,115123,115124],{"class":94,"line":32803},[92,115125,101550],{"class":102},[38,115127,103551],{},[83,115129,115131],{"className":23803,"code":115130,"language":23805,"meta":10,"style":10},"touch ch8_gym_env.py\n",[89,115132,115133],{"__ignoreMap":10},[92,115134,115135,115137],{"class":94,"line":95},[92,115136,101264],{"class":1942},[92,115138,115139],{"class":207}," ch8_gym_env.py\n",[38,115141,110425],{},[83,115143,115145],{"className":23803,"code":115144,"language":23805,"meta":10,"style":10},"python ch8_gym_env.py\n",[89,115146,115147],{"__ignoreMap":10},[92,115148,115149,115151],{"class":94,"line":95},[92,115150,30362],{"class":1942},[92,115152,115139],{"class":207},[63,115154,101553],{"id":101553},[38,115156,115157],{},"继承 Gymnasium 环境：",[83,115159,115161],{"className":30360,"code":115160,"language":30362,"meta":10,"style":10},"class ReacherEnv(gym.Env):\n",[89,115162,115163],{"__ignoreMap":10},[92,115164,115165,115167,115169,115171,115173,115175,115177],{"class":94,"line":95},[92,115166,14674],{"class":98},[92,115168,114038],{"class":1942},[92,115170,103],{"class":102},[92,115172,113521],{"class":1942},[92,115174,661],{"class":102},[92,115176,114047],{"class":1942},[92,115178,30768],{"class":102},[38,115180,115181],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[38,115183,115184],{},"初始化模型：",[83,115186,115188],{"className":30360,"code":115187,"language":30362,"meta":10,"style":10},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[89,115189,115190,115204],{"__ignoreMap":10},[92,115191,115192,115194,115196,115198,115200,115202],{"class":94,"line":95},[92,115193,30805],{"class":151},[92,115195,114098],{"class":102},[92,115197,148],{"class":98},[92,115199,101393],{"class":102},[92,115201,101295],{"class":151},[92,115203,109],{"class":102},[92,115205,115206,115208,115210,115212,115214,115216],{"class":94,"line":11},[92,115207,30805],{"class":151},[92,115209,114113],{"class":102},[92,115211,148],{"class":98},[92,115213,114118],{"class":102},[92,115215,30805],{"class":151},[92,115217,114123],{"class":102},[38,115219,115220,115221,115223],{},"这和前面章节一样，只是现在放到了类的 ",[89,115222,30811],{}," 里。",[38,115225,115226],{},"缓存 site ID：",[83,115228,115230],{"className":30360,"code":115229,"language":30362,"meta":10,"style":10},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[89,115231,115232,115246],{"__ignoreMap":10},[92,115233,115234,115236,115238,115240,115242,115244],{"class":94,"line":95},[92,115235,30805],{"class":151},[92,115237,114134],{"class":102},[92,115239,148],{"class":98},[92,115241,114139],{"class":102},[92,115243,89536],{"class":151},[92,115245,109],{"class":102},[92,115247,115248,115250,115252,115254,115256,115258],{"class":94,"line":11},[92,115249,30805],{"class":151},[92,115251,114155],{"class":102},[92,115253,148],{"class":98},[92,115255,114139],{"class":102},[92,115257,89536],{"class":151},[92,115259,109],{"class":102},[38,115261,115262],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[38,115264,115265],{},"reset：",[83,115267,115269],{"className":30360,"code":115268,"language":30362,"meta":10,"style":10},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[89,115270,115271],{"__ignoreMap":10},[92,115272,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305],{"class":94,"line":95},[92,115274,31929],{"class":98},[92,115276,114503],{"class":1942},[92,115278,114506],{"class":102},[92,115280,558],{"class":98},[92,115282,114511],{"class":102},[92,115284,106],{"class":151},[92,115286,25091],{"class":98},[92,115288,38915],{"class":151},[92,115290,13544],{"class":98},[92,115292,38915],{"class":151},[92,115294,114524],{"class":102},[92,115296,114527],{"class":151},[92,115298,25091],{"class":98},[92,115300,38915],{"class":151},[92,115302,13544],{"class":98},[92,115304,38915],{"class":151},[92,115306,30768],{"class":102},[38,115308,115309,115311],{},[89,115310,70038],{}," 做四件事：",[46,115313,115314,115317,115320,115323],{},[49,115315,115316],{},"设置随机种子。",[49,115318,115319],{},"重置 MuJoCo data。",[49,115321,115322],{},"随机初始化关节角。",[49,115324,115325],{},"返回初始观测和 info。",[38,115327,115328],{},"step：",[83,115330,115332],{"className":30360,"code":115331,"language":30362,"meta":10,"style":10},"def step(self, action):\n",[89,115333,115334],{"__ignoreMap":10},[92,115335,115336,115338,115340],{"class":94,"line":95},[92,115337,31929],{"class":98},[92,115339,114668],{"class":1942},[92,115341,114671],{"class":102},[38,115343,115344,115346],{},[89,115345,107115],{}," 做六件事：",[46,115348,115349,115352,115358,115361,115364,115367],{},[49,115350,115351],{},"检查并裁剪 action。",[49,115353,115354,115355,28367],{},"写入 ",[89,115356,115357],{},"self.data.ctrl",[49,115359,115360],{},"连续推进若干个 MuJoCo 物理步。",[49,115362,115363],{},"计算新观测。",[49,115365,115366],{},"计算奖励和结束条件。",[49,115368,115369],{},"返回 Gymnasium 标准五元组。",[63,115371,101689],{"id":101689},[83,115373,115375],{"className":30360,"code":115374,"language":30362,"meta":10,"style":10},"import gymnasium as gym\n",[89,115376,115377],{"__ignoreMap":10},[92,115378,115379,115381,115383,115385],{"class":94,"line":95},[92,115380,30374],{"class":98},[92,115382,113876],{"class":102},[92,115384,31365],{"class":98},[92,115386,113881],{"class":102},[38,115388,115389,115390,115392,115393,115396],{},"导入 Gymnasium，并起别名 ",[89,115391,113521],{},"。后面写 ",[89,115394,115395],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[83,115398,115400],{"className":30360,"code":115399,"language":30362,"meta":10,"style":10},"from gymnasium import spaces\n",[89,115401,115402],{"__ignoreMap":10},[92,115403,115404,115406,115408,115410],{"class":94,"line":95},[92,115405,30719],{"class":98},[92,115407,113876],{"class":102},[92,115409,30374],{"class":98},[92,115411,113908],{"class":102},[38,115413,115414,115415,115418],{},"导入空间定义工具。",[89,115416,115417],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[83,115420,115421],{"className":30360,"code":115160,"language":30362,"meta":10,"style":10},[89,115422,115423],{"__ignoreMap":10},[92,115424,115425,115427,115429,115431,115433,115435,115437],{"class":94,"line":95},[92,115426,14674],{"class":98},[92,115428,114038],{"class":1942},[92,115430,103],{"class":102},[92,115432,113521],{"class":1942},[92,115434,661],{"class":102},[92,115436,114047],{"class":1942},[92,115438,30768],{"class":102},[38,115440,115441,115442,115445,115446,115448,115449,100999,115451,115453],{},"定义一个类，名字叫 ",[89,115443,115444],{},"ReacherEnv","。括号里的 ",[89,115447,115395],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[89,115450,70038],{},[89,115452,107115],{}," 这两个核心方法。",[83,115455,115457],{"className":30360,"code":115456,"language":30362,"meta":10,"style":10},"metadata = {\"render_modes\": []}\n",[89,115458,115459],{"__ignoreMap":10},[92,115460,115461,115464,115466,115468,115470],{"class":94,"line":95},[92,115462,115463],{"class":102},"metadata ",[92,115465,148],{"class":98},[92,115467,4427],{"class":102},[92,115469,114061],{"class":207},[92,115471,114064],{"class":102},[38,115473,115474],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[83,115476,115478],{"className":30360,"code":115477,"language":30362,"meta":10,"style":10},"def __init__(self) -> None:\n",[89,115479,115480],{"__ignoreMap":10},[92,115481,115482,115484,115486,115488,115490],{"class":94,"line":95},[92,115483,31929],{"class":98},[92,115485,30786],{"class":151},[92,115487,114077],{"class":102},[92,115489,95667],{"class":151},[92,115491,3718],{"class":102},[38,115493,115494,115496,115497,28367],{},[89,115495,30811],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[89,115498,115499],{},"env = ReacherEnv()",[83,115501,115503],{"className":30360,"code":115502,"language":30362,"meta":10,"style":10},"super().__init__()\n",[89,115504,115505],{"__ignoreMap":10},[92,115506,115507,115510,115512,115514],{"class":94,"line":95},[92,115508,115509],{"class":151},"super",[92,115511,17241],{"class":102},[92,115513,30811],{"class":151},[92,115515,1955],{"class":102},[38,115517,115518,115519,115521],{},"调用父类 ",[89,115520,115395],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[83,115523,115524],{"className":30360,"code":115187,"language":30362,"meta":10,"style":10},[89,115525,115526,115540],{"__ignoreMap":10},[92,115527,115528,115530,115532,115534,115536,115538],{"class":94,"line":95},[92,115529,30805],{"class":151},[92,115531,114098],{"class":102},[92,115533,148],{"class":98},[92,115535,101393],{"class":102},[92,115537,101295],{"class":151},[92,115539,109],{"class":102},[92,115541,115542,115544,115546,115548,115550,115552],{"class":94,"line":11},[92,115543,30805],{"class":151},[92,115545,114113],{"class":102},[92,115547,148],{"class":98},[92,115549,114118],{"class":102},[92,115551,30805],{"class":151},[92,115553,114123],{"class":102},[38,115555,115556,115557,115559,115560,100999,115563,115566],{},"把 MuJoCo 模型和状态保存到 ",[89,115558,30805],{}," 上。",[89,115561,115562],{},"self.model",[89,115564,115565],{},"self.data"," 表示这个环境对象自己的模型和状态。",[83,115568,115569],{"className":30360,"code":115229,"language":30362,"meta":10,"style":10},[89,115570,115571,115585],{"__ignoreMap":10},[92,115572,115573,115575,115577,115579,115581,115583],{"class":94,"line":95},[92,115574,30805],{"class":151},[92,115576,114134],{"class":102},[92,115578,148],{"class":98},[92,115580,114139],{"class":102},[92,115582,89536],{"class":151},[92,115584,109],{"class":102},[92,115586,115587,115589,115591,115593,115595,115597],{"class":94,"line":11},[92,115588,30805],{"class":151},[92,115590,114155],{"class":102},[92,115592,148],{"class":98},[92,115594,114139],{"class":102},[92,115596,89536],{"class":151},[92,115598,109],{"class":102},[38,115600,115601,115602,100999,115605,115608],{},"提前查好 tip 和 target 的 site ID。这样 ",[89,115603,115604],{},"_get_obs",[89,115606,115607],{},"_get_reward"," 里就不用每次按名字查找。",[83,115610,115612],{"className":30360,"code":115611,"language":30362,"meta":10,"style":10},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[89,115613,115614,115624,115634],{"__ignoreMap":10},[92,115615,115616,115618,115620,115622],{"class":94,"line":95},[92,115617,30805],{"class":151},[92,115619,113848],{"class":102},[92,115621,148],{"class":98},[92,115623,54409],{"class":151},[92,115625,115626,115628,115630,115632],{"class":94,"line":11},[92,115627,30805],{"class":151},[92,115629,114227],{"class":102},[92,115631,148],{"class":98},[92,115633,114232],{"class":151},[92,115635,115636,115638,115640,115642],{"class":94,"line":1158},[92,115637,30805],{"class":151},[92,115639,113687],{"class":102},[92,115641,148],{"class":98},[92,115643,47315],{"class":151},[38,115645,115646,115649,115650,115653,115654,115657],{},[89,115647,115648],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[89,115651,115652],{},"max_steps"," 是一个 episode 最多运行多少步。",[89,115655,115656],{},"steps"," 记录当前 episode 已经走了多少步。",[83,115659,115660],{"className":30360,"code":113726,"language":30362,"meta":10,"style":10},[89,115661,115662],{"__ignoreMap":10},[92,115663,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702],{"class":94,"line":95},[92,115665,30805],{"class":151},[92,115667,113735],{"class":102},[92,115669,148],{"class":98},[92,115671,113740],{"class":102},[92,115673,113743],{"class":5196},[92,115675,113746],{"class":98},[92,115677,102384],{"class":151},[92,115679,12415],{"class":102},[92,115681,113753],{"class":5196},[92,115683,148],{"class":98},[92,115685,102384],{"class":151},[92,115687,12415],{"class":102},[92,115689,95944],{"class":5196},[92,115691,148],{"class":98},[92,115693,103],{"class":102},[92,115695,180],{"class":151},[92,115697,113770],{"class":102},[92,115699,93481],{"class":5196},[92,115701,148],{"class":98},[92,115703,113777],{"class":102},[38,115705,115706,115707,115710,115711,100999,115714,115717],{},"定义动作空间。",[89,115708,115709],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[89,115712,115713],{},"low=-1.0",[89,115715,115716],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[83,115719,115720],{"className":30360,"code":113787,"language":30362,"meta":10,"style":10},[89,115721,115722],{"__ignoreMap":10},[92,115723,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758],{"class":94,"line":95},[92,115725,30805],{"class":151},[92,115727,113796],{"class":102},[92,115729,148],{"class":98},[92,115731,113740],{"class":102},[92,115733,113743],{"class":5196},[92,115735,113746],{"class":98},[92,115737,113807],{"class":102},[92,115739,113753],{"class":5196},[92,115741,148],{"class":98},[92,115743,113807],{"class":102},[92,115745,95944],{"class":5196},[92,115747,148],{"class":98},[92,115749,103],{"class":102},[92,115751,549],{"class":151},[92,115753,113770],{"class":102},[92,115755,93481],{"class":5196},[92,115757,148],{"class":98},[92,115759,113777],{"class":102},[38,115761,115762,115763,115766,115767,115770],{},"定义观测空间。",[89,115764,115765],{},"shape=(10,)"," 表示观测是 10 个数。",[89,115768,115769],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[83,115772,115774],{"className":30360,"code":115773,"language":30362,"meta":10,"style":10},"def _get_obs(self) -> np.ndarray:\n",[89,115775,115776],{"__ignoreMap":10},[92,115777,115778,115780,115782],{"class":94,"line":95},[92,115779,31929],{"class":98},[92,115781,114337],{"class":1942},[92,115783,114340],{"class":102},[38,115785,115786,115787,115789],{},"定义内部函数，用来生成观测。函数名前面的 ",[89,115788,1095],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[83,115791,115793],{"className":30360,"code":115792,"language":30362,"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,115794,115795,115809],{"__ignoreMap":10},[92,115796,115797,115799,115801,115803,115805,115807],{"class":94,"line":95},[92,115798,111549],{"class":102},[92,115800,148],{"class":98},[92,115802,38855],{"class":151},[92,115804,114351],{"class":102},[92,115806,30805],{"class":151},[92,115808,114356],{"class":102},[92,115810,115811,115813,115815,115817,115819,115821],{"class":94,"line":11},[92,115812,111559],{"class":102},[92,115814,148],{"class":98},[92,115816,38855],{"class":151},[92,115818,114351],{"class":102},[92,115820,30805],{"class":151},[92,115822,114371],{"class":102},[38,115824,115825],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[83,115827,115829],{"className":30360,"code":115828,"language":30362,"meta":10,"style":10},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[89,115830,115831,115847],{"__ignoreMap":10},[92,115832,115833,115835,115837,115839,115841,115843,115845],{"class":94,"line":95},[92,115834,110835],{"class":102},[92,115836,148],{"class":98},[92,115838,114380],{"class":102},[92,115840,30805],{"class":151},[92,115842,114385],{"class":102},[92,115844,30805],{"class":151},[92,115846,114390],{"class":102},[92,115848,115849,115851],{"class":94,"line":11},[92,115850,17026],{"class":98},[92,115852,114397],{"class":102},[38,115854,115855,115856,115859,115860,115862],{},"拼接观测，并转换成 ",[89,115857,115858],{},"float32","。很多强化学习库默认使用 ",[89,115861,115858],{},"，所以这里主动转换。",[83,115864,115865],{"className":30360,"code":115268,"language":30362,"meta":10,"style":10},[89,115866,115867],{"__ignoreMap":10},[92,115868,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901],{"class":94,"line":95},[92,115870,31929],{"class":98},[92,115872,114503],{"class":1942},[92,115874,114506],{"class":102},[92,115876,558],{"class":98},[92,115878,114511],{"class":102},[92,115880,106],{"class":151},[92,115882,25091],{"class":98},[92,115884,38915],{"class":151},[92,115886,13544],{"class":98},[92,115888,38915],{"class":151},[92,115890,114524],{"class":102},[92,115892,114527],{"class":151},[92,115894,25091],{"class":98},[92,115896,38915],{"class":151},[92,115898,13544],{"class":98},[92,115900,38915],{"class":151},[92,115902,30768],{"class":102},[38,115904,115905,115906,115908,115909,115912],{},"定义 reset。",[89,115907,114547],{}," 用来控制随机数，保证实验可以复现。",[89,115910,115911],{},"options"," 用来接收额外配置，本章暂时不用。",[83,115914,115916],{"className":30360,"code":115915,"language":30362,"meta":10,"style":10},"super().reset(seed=seed)\n",[89,115917,115918],{"__ignoreMap":10},[92,115919,115920,115922,115924,115926,115928],{"class":94,"line":95},[92,115921,115509],{"class":151},[92,115923,114544],{"class":102},[92,115925,114547],{"class":5196},[92,115927,148],{"class":98},[92,115929,114552],{"class":102},[38,115931,115932,115933,115936],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[89,115934,115935],{},"self.np_random"," 生成可复现的随机数。",[83,115938,115940],{"className":30360,"code":115939,"language":30362,"meta":10,"style":10},"mujoco.mj_resetData(self.model, self.data)\n",[89,115941,115942],{"__ignoreMap":10},[92,115943,115944,115947,115949,115951,115953],{"class":94,"line":95},[92,115945,115946],{"class":102},"mujoco.mj_resetData(",[92,115948,30805],{"class":151},[92,115950,114562],{"class":102},[92,115952,30805],{"class":151},[92,115954,114567],{"class":102},[38,115956,115957],{},"把 MuJoCo 状态重置到默认状态。",[83,115959,115961],{"className":30360,"code":115960,"language":30362,"meta":10,"style":10},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[89,115962,115963],{"__ignoreMap":10},[92,115964,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997],{"class":94,"line":95},[92,115966,30805],{"class":151},[92,115968,114578],{"class":102},[92,115970,148],{"class":98},[92,115972,38855],{"class":151},[92,115974,114585],{"class":102},[92,115976,113743],{"class":5196},[92,115978,113746],{"class":98},[92,115980,86192],{"class":151},[92,115982,12415],{"class":102},[92,115984,113753],{"class":5196},[92,115986,148],{"class":98},[92,115988,86192],{"class":151},[92,115990,12415],{"class":102},[92,115992,31478],{"class":5196},[92,115994,148],{"class":98},[92,115996,30805],{"class":151},[92,115998,114610],{"class":102},[38,116000,115322,116001,116004,116005,116008,116009,116011],{},[89,116002,116003],{},"[:]"," 表示修改整个数组。",[89,116006,116007],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[89,116010,102131],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[83,116013,116015],{"className":30360,"code":116014,"language":30362,"meta":10,"style":10},"self.data.qvel[:] = 0.0\n",[89,116016,116017],{"__ignoreMap":10},[92,116018,116019,116021,116023,116025],{"class":94,"line":95},[92,116020,30805],{"class":151},[92,116022,114617],{"class":102},[92,116024,148],{"class":98},[92,116026,104742],{"class":151},[38,116028,116029],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[83,116031,116033],{"className":30360,"code":116032,"language":30362,"meta":10,"style":10},"self.steps = 0\nreturn self._get_obs(), {}\n",[89,116034,116035,116045],{"__ignoreMap":10},[92,116036,116037,116039,116041,116043],{"class":94,"line":95},[92,116038,30805],{"class":151},[92,116040,113687],{"class":102},[92,116042,148],{"class":98},[92,116044,47315],{"class":151},[92,116046,116047,116049,116051],{"class":94,"line":11},[92,116048,17026],{"class":98},[92,116050,38855],{"class":151},[92,116052,114657],{"class":102},[38,116054,116055],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[83,116057,116058],{"className":30360,"code":115331,"language":30362,"meta":10,"style":10},[89,116059,116060],{"__ignoreMap":10},[92,116061,116062,116064,116066],{"class":94,"line":95},[92,116063,31929],{"class":98},[92,116065,114668],{"class":1942},[92,116067,114671],{"class":102},[38,116069,116070],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[83,116072,116074],{"className":30360,"code":116073,"language":30362,"meta":10,"style":10},"action = np.asarray(action, dtype=np.float32)\n",[89,116075,116076],{"__ignoreMap":10},[92,116077,116078,116080,116082,116084,116086,116088],{"class":94,"line":95},[92,116079,107423],{"class":102},[92,116081,148],{"class":98},[92,116083,114680],{"class":102},[92,116085,93481],{"class":5196},[92,116087,148],{"class":98},[92,116089,113777],{"class":102},[38,116091,116092,116093,28367],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[89,116094,115858],{},[83,116096,116098],{"className":30360,"code":116097,"language":30362,"meta":10,"style":10},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[89,116099,116100],{"__ignoreMap":10},[92,116101,116102,116104,116106,116108,116110,116112,116114],{"class":94,"line":95},[92,116103,107423],{"class":102},[92,116105,148],{"class":98},[92,116107,107428],{"class":102},[92,116109,30805],{"class":151},[92,116111,114699],{"class":102},[92,116113,30805],{"class":151},[92,116115,114704],{"class":102},[38,116117,116118],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[83,116120,116122],{"className":30360,"code":116121,"language":30362,"meta":10,"style":10},"self.data.ctrl[:] = action\n",[89,116123,116124],{"__ignoreMap":10},[92,116125,116126,116128,116130,116132],{"class":94,"line":95},[92,116127,30805],{"class":151},[92,116129,114715],{"class":102},[92,116131,148],{"class":98},[92,116133,107451],{"class":102},[38,116135,116136],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[83,116138,116140],{"className":30360,"code":116139,"language":30362,"meta":10,"style":10},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[89,116141,116142,116158],{"__ignoreMap":10},[92,116143,116144,116146,116148,116150,116152,116154,116156],{"class":94,"line":95},[92,116145,3004],{"class":98},[92,116147,101482],{"class":102},[92,116149,26025],{"class":98},[92,116151,32425],{"class":151},[92,116153,103],{"class":102},[92,116155,30805],{"class":151},[92,116157,114736],{"class":102},[92,116159,116160,116163,116165,116167,116169],{"class":94,"line":11},[92,116161,116162],{"class":102},"    mujoco.mj_step(",[92,116164,30805],{"class":151},[92,116166,114562],{"class":102},[92,116168,30805],{"class":151},[92,116170,114567],{"class":102},[38,116172,116173,116174,116177,116178,116180,116181,28367],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[89,116175,116176],{},"frame_skip=5","，所以外部调用一次 ",[89,116179,113858],{},"，内部实际执行 5 次 ",[89,116182,101196],{},[83,116184,116186],{"className":30360,"code":116185,"language":30362,"meta":10,"style":10},"self.steps += 1\n",[89,116187,116188],{"__ignoreMap":10},[92,116189,116190,116192,116194,116196],{"class":94,"line":95},[92,116191,30805],{"class":151},[92,116193,113687],{"class":102},[92,116195,9457],{"class":98},[92,116197,55681],{"class":151},[38,116199,116200],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[83,116202,116204],{"className":30360,"code":116203,"language":30362,"meta":10,"style":10},"obs = self._get_obs()\nreward = self._get_reward()\n",[89,116205,116206,116216],{"__ignoreMap":10},[92,116207,116208,116210,116212,116214],{"class":94,"line":95},[92,116209,110835],{"class":102},[92,116211,148],{"class":98},[92,116213,38855],{"class":151},[92,116215,114778],{"class":102},[92,116217,116218,116220,116222,116224],{"class":94,"line":11},[92,116219,110986],{"class":102},[92,116221,148],{"class":98},[92,116223,38855],{"class":151},[92,116225,114789],{"class":102},[38,116227,116228],{},"计算新的观测和奖励。",[83,116230,116232],{"className":30360,"code":116231,"language":30362,"meta":10,"style":10},"dist = float(np.linalg.norm(tip - target))\n",[89,116233,116234],{"__ignoreMap":10},[92,116235,116236,116238,116240,116242,116244,116246],{"class":94,"line":95},[92,116237,111577],{"class":102},[92,116239,148],{"class":98},[92,116241,109778],{"class":151},[92,116243,114832],{"class":102},[92,116245,635],{"class":98},[92,116247,114837],{"class":102},[38,116249,116250],{},"计算末端到目标的距离，并转换成 Python float。",[83,116252,116253],{"className":30360,"code":113658,"language":30362,"meta":10,"style":10},[89,116254,116255,116267],{"__ignoreMap":10},[92,116256,116257,116259,116261,116263,116265],{"class":94,"line":95},[92,116258,113665],{"class":102},[92,116260,148],{"class":98},[92,116262,113670],{"class":102},[92,116264,1013],{"class":98},[92,116266,113675],{"class":151},[92,116268,116269,116271,116273,116275,116277,116279,116281],{"class":94,"line":11},[92,116270,113680],{"class":102},[92,116272,148],{"class":98},[92,116274,38855],{"class":151},[92,116276,113687],{"class":102},[92,116278,1689],{"class":98},[92,116280,38855],{"class":151},[92,116282,113694],{"class":102},[38,116284,116285],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[83,116287,116289],{"className":30360,"code":116288,"language":30362,"meta":10,"style":10},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[89,116290,116291,116304],{"__ignoreMap":10},[92,116292,116293,116296,116298,116300,116302],{"class":94,"line":95},[92,116294,116295],{"class":102},"info ",[92,116297,148],{"class":98},[92,116299,4427],{"class":102},[92,116301,114883],{"class":207},[92,116303,114886],{"class":102},[92,116305,116306,116308],{"class":94,"line":11},[92,116307,17026],{"class":98},[92,116309,114893],{"class":102},[38,116311,116312,116315],{},[89,116313,116314],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[83,116317,116319],{"className":30360,"code":116318,"language":30362,"meta":10,"style":10},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[89,116320,116321,116330],{"__ignoreMap":10},[92,116322,116323,116326,116328],{"class":94,"line":95},[92,116324,116325],{"class":102},"env ",[92,116327,148],{"class":98},[92,116329,114923],{"class":102},[92,116331,116332,116334,116336,116338,116340,116342,116344],{"class":94,"line":11},[92,116333,113381],{"class":102},[92,116335,148],{"class":98},[92,116337,114933],{"class":102},[92,116339,114547],{"class":5196},[92,116341,148],{"class":98},[92,116343,294],{"class":151},[92,116345,109],{"class":102},[38,116347,116348,116349,116352],{},"创建环境并重置。",[89,116350,116351],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[83,116354,116356],{"className":30360,"code":116355,"language":30362,"meta":10,"style":10},"action = env.action_space.sample()\n",[89,116357,116358],{"__ignoreMap":10},[92,116359,116360,116362,116364],{"class":94,"line":95},[92,116361,107423],{"class":102},[92,116363,148],{"class":98},[92,116365,115002],{"class":102},[38,116367,116368],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[33,116370,102297],{"id":102296},[38,116372,105465],{},[83,116374,116377],{"className":116375,"code":116376,"language":5167,"meta":10},[5165],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[89,116378,116376],{"__ignoreMap":10},[38,116380,116381],{},"这个环境已经具备强化学习环境的基本结构。",[38,116383,116384],{},"主函数里使用随机动作：",[83,116386,116387],{"className":30360,"code":116355,"language":30362,"meta":10,"style":10},[89,116388,116389],{"__ignoreMap":10},[92,116390,116391,116393,116395],{"class":94,"line":95},[92,116392,107423],{"class":102},[92,116394,148],{"class":98},[92,116396,115002],{"class":102},[38,116398,116399],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[33,116401,102329],{"id":102328},[46,116403,116404,116407,116413,116422,116431,116440,116446],{},[49,116405,116406],{},"运行程序。",[49,116408,116409,116410,28367],{},"确认 ",[89,116411,116412],{},"obs.shape == (10,)",[49,116414,111162,116415,116418,116419,28367],{},[89,116416,116417],{},"env.action_space","，应类似 ",[89,116420,116421],{},"Box(-1.0, 1.0, (2,), float32)",[49,116423,105566,116424,116427,116428,28367],{},[89,116425,116426],{},"self.max_steps = 10","，确认环境会更快 ",[89,116429,116430],{},"truncated=True",[49,116432,102392,116433,102395,116436,116439],{},[89,116434,116435],{},"terminated = dist \u003C 0.05",[89,116437,116438],{},"dist \u003C 0.2","，观察是否更容易结束。",[49,116441,102392,116442,116445],{},[89,116443,116444],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[49,116447,116448,116449,116451,116452,116455],{},"在 ",[89,116450,116314],{}," 里加入 ",[89,116453,116454],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[33,116457,102434],{"id":102433},[63,116459,116461],{"id":116460},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[38,116463,116464,116465,116467],{},"Gymnasium 的 ",[89,116466,107115],{}," 返回 5 个值:",[83,116469,116471],{"className":30360,"code":116470,"language":30362,"meta":10,"style":10},"obs, reward, terminated, truncated, info\n",[89,116472,116473],{"__ignoreMap":10},[92,116474,116475],{"class":94,"line":95},[92,116476,116470],{"class":102},[38,116478,116479],{},"不是旧 Gym 的 4 个值。",[63,116481,116483,116486],{"id":116482},"datactrl-action-维度错误",[89,116484,116485],{},"data.ctrl[:] = action"," 维度错误",[38,116488,102504],{},[83,116490,116492],{"className":30360,"code":116491,"language":30362,"meta":10,"style":10},"print(self.model.nu)\nprint(action.shape)\n",[89,116493,116494,116505],{"__ignoreMap":10},[92,116495,116496,116498,116500,116502],{"class":94,"line":95},[92,116497,30397],{"class":151},[92,116499,103],{"class":102},[92,116501,30805],{"class":151},[92,116503,116504],{"class":102},".model.nu)\n",[92,116506,116507,116509],{"class":94,"line":11},[92,116508,30397],{"class":151},[92,116510,116511],{"class":102},"(action.shape)\n",[38,116513,116514],{},"两者必须匹配。",[63,116516,116518],{"id":116517},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[38,116520,102443],{},[83,116522,116524],{"className":30360,"code":116523,"language":30362,"meta":10,"style":10},"mujoco.mj_forward(self.model, self.data)\n",[89,116525,116526],{"__ignoreMap":10},[92,116527,116528,116531,116533,116535,116537],{"class":94,"line":95},[92,116529,116530],{"class":102},"mujoco.mj_forward(",[92,116532,30805],{"class":151},[92,116534,114562],{"class":102},[92,116536,30805],{"class":151},[92,116538,114567],{"class":102},[63,116540,116542,116544],{"id":116541},"observation_space-维度和-obs-不一致",[89,116543,113581],{}," 维度和 obs 不一致",[38,116546,102556],{},[83,116548,116550],{"className":30360,"code":116549,"language":30362,"meta":10,"style":10},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[89,116551,116552,116562,116569],{"__ignoreMap":10},[92,116553,116554,116556,116558,116560],{"class":94,"line":95},[92,116555,110835],{"class":102},[92,116557,148],{"class":98},[92,116559,38855],{"class":151},[92,116561,114778],{"class":102},[92,116563,116564,116566],{"class":94,"line":11},[92,116565,30397],{"class":151},[92,116567,116568],{"class":102},"(obs.shape)\n",[92,116570,116571,116573,116575,116577],{"class":94,"line":1158},[92,116572,30397],{"class":151},[92,116574,103],{"class":102},[92,116576,30805],{"class":151},[92,116578,116579],{"class":102},".observation_space.shape)\n",[38,116581,116582],{},"两者必须一致。本章观测是：",[83,116584,116587],{"className":116585,"code":116586,"language":5167,"meta":10},[5165],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[89,116588,116586],{"__ignoreMap":10},[63,116590,116592],{"id":116591},"action-超过范围","action 超过范围",[38,116594,116595],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[83,116597,116598],{"className":30360,"code":116097,"language":30362,"meta":10,"style":10},[89,116599,116600],{"__ignoreMap":10},[92,116601,116602,116604,116606,116608,116610,116612,116614],{"class":94,"line":95},[92,116603,107423],{"class":102},[92,116605,148],{"class":98},[92,116607,107428],{"class":102},[92,116609,30805],{"class":151},[92,116611,114699],{"class":102},[92,116613,30805],{"class":151},[92,116615,114704],{"class":102},[38,116617,116618,116619,28367],{},"这能避免无效动作直接写入 ",[89,116620,101057],{},[63,116622,116624],{"id":116623},"忘记返回-info","忘记返回 info",[38,116626,116464,116627,100999,116629,116631],{},[89,116628,70038],{},[89,116630,107115],{}," 都会返回 info：",[83,116633,116634],{"className":30360,"code":113374,"language":30362,"meta":10,"style":10},[89,116635,116636,116644],{"__ignoreMap":10},[92,116637,116638,116640,116642],{"class":94,"line":95},[92,116639,113381],{"class":102},[92,116641,148],{"class":98},[92,116643,113386],{"class":102},[92,116645,116646,116648,116650],{"class":94,"line":11},[92,116647,113391],{"class":102},[92,116649,148],{"class":98},[92,116651,113396],{"class":102},[38,116653,116654,116655,28367],{},"即使暂时没有额外信息，也返回 ",[89,116656,32441],{},[33,116658,116660],{"id":116659},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[38,116662,116663],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[46,116665,116666,116669,116672,116675,116678,116681],{},[49,116667,116668],{},"更稳定的 reward。",[49,116670,116671],{},"合理的 episode 长度。",[49,116673,116674],{},"可重复的随机目标采样。",[49,116676,116677],{},"render 接口。",[49,116679,116680],{},"环境注册代码。",[49,116682,116683],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[38,116685,116686],{},"如果只是自己写训练循环，最小形式是：",[83,116688,116690],{"className":30360,"code":116689,"language":30362,"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,116691,116692,116700,116716,116720,116736,116745,116754,116764],{"__ignoreMap":10},[92,116693,116694,116696,116698],{"class":94,"line":95},[92,116695,116325],{"class":102},[92,116697,148],{"class":98},[92,116699,114923],{"class":102},[92,116701,116702,116704,116706,116708,116710,116712,116714],{"class":94,"line":11},[92,116703,113381],{"class":102},[92,116705,148],{"class":98},[92,116707,114933],{"class":102},[92,116709,114547],{"class":5196},[92,116711,148],{"class":98},[92,116713,294],{"class":151},[92,116715,109],{"class":102},[92,116717,116718],{"class":94,"line":1158},[92,116719,2379],{"emptyLinePlaceholder":17},[92,116721,116722,116724,116726,116728,116730,116732,116734],{"class":94,"line":1173},[92,116723,3004],{"class":98},[92,116725,101482],{"class":102},[92,116727,26025],{"class":98},[92,116729,32425],{"class":151},[92,116731,103],{"class":102},[92,116733,6390],{"class":151},[92,116735,30768],{"class":102},[92,116737,116738,116741,116743],{"class":94,"line":1179},[92,116739,116740],{"class":102},"    action ",[92,116742,148],{"class":98},[92,116744,115002],{"class":102},[92,116746,116747,116750,116752],{"class":94,"line":1193},[92,116748,116749],{"class":102},"    obs, reward, terminated, truncated, info ",[92,116751,148],{"class":98},[92,116753,113396],{"class":102},[92,116755,116756,116758,116760,116762],{"class":94,"line":1199},[92,116757,3080],{"class":98},[92,116759,115068],{"class":102},[92,116761,115071],{"class":98},[92,116763,115074],{"class":102},[92,116765,116766,116769,116771],{"class":94,"line":1290},[92,116767,116768],{"class":102},"        obs, info ",[92,116770,148],{"class":98},[92,116772,113386],{"class":102},[33,116774,116776],{"id":116775},"_9本章小结","9.本章小结",[38,116778,116779],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[83,116781,116784],{"className":116782,"code":116783,"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,116785,116783],{"__ignoreMap":10},[38,116787,116788],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5106,116790,116791],{},"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":116793},[116794,116795,116796,116803,116807,116808,116809,116819,116820],{"id":100627,"depth":11,"text":100628},{"id":100750,"depth":11,"text":100751},{"id":101025,"depth":11,"text":101026,"children":116797},[116798,116800,116802],{"id":113605,"depth":1158,"text":116799},"terminated 和 truncated 的区别",{"id":113708,"depth":1158,"text":116801},"observation_space 和 action_space",{"id":113835,"depth":1158,"text":113836},{"id":101233,"depth":11,"text":101234,"children":116804},[116805,116806],{"id":101553,"depth":1158,"text":101553},{"id":101689,"depth":1158,"text":101689},{"id":102296,"depth":11,"text":102297},{"id":102328,"depth":11,"text":102329},{"id":102433,"depth":11,"text":102434,"children":116810},[116811,116812,116814,116815,116817,116818],{"id":116460,"depth":1158,"text":116461},{"id":116482,"depth":1158,"text":116813},"data.ctrl[:] = action 维度错误",{"id":116517,"depth":1158,"text":116518},{"id":116541,"depth":1158,"text":116816},"observation_space 维度和 obs 不一致",{"id":116591,"depth":1158,"text":116592},{"id":116623,"depth":1158,"text":116624},{"id":116659,"depth":11,"text":116660},{"id":116775,"depth":11,"text":116776},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113358,"description":10},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116827,"title":116828,"body":116829,"description":117252,"extension":14,"meta":117253,"navigation":17,"path":117254,"seo":117255,"stem":117256,"__hash__":117257},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116830,"toc":117242},[116831,116835,116838,116841,116861,116867,116873,116883,116886,116889,116909,116912,116916,116919,116925,116928,116942,116945,116948,117022,117025,117031,117034,117057,117060,117110,117113,117119,117122,117125,117128,117147,117150,117156,117159,117162,117165,117185,117188,117191,117194,117239],[29,116832,116834],{"id":116833},"mujoco-学习","MuJoCo 学习",[38,116836,116837],{},"初版",[38,116839,116840],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[46,116842,116843,116846,116849,116858],{},[49,116844,116845],{},"MuJoCo 模型文件在描述什么。",[49,116847,116848],{},"Python 代码怎样读取和推进仿真。",[49,116850,116851,315,116853,315,116855,116857],{},[89,116852,104011],{},[89,116854,104341],{},[89,116856,104344],{}," 这些数组为什么重要。",[49,116859,116860],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[38,116862,116863,116864,116866],{},"默认环境为 Fedora 44、Python >= 3.10、",[89,116865,101008],{}," 官方 Python bindings。",[38,116868,116869,116870,116872],{},"注意：本文禁止使用 ",[89,116871,100993],{},"。所有示例均使用：",[83,116874,116875],{"className":30360,"code":101559,"language":30362,"meta":10,"style":10},[89,116876,116877],{"__ignoreMap":10},[92,116878,116879,116881],{"class":94,"line":95},[92,116880,30374],{"class":98},[92,116882,101282],{"class":102},[33,116884,116885],{"id":116885},"适合谁阅读",[38,116887,116888],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[46,116890,116891,116894,116897,116900],{},[49,116892,116893],{},"没学过 MuJoCo，只会一点 Python。",[49,116895,116896],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[49,116898,116899],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[49,116901,116902,116903,116905,116906,116908],{},"以前接触过 ",[89,116904,100993],{},"，现在想迁移到官方 ",[89,116907,101002],{}," Python bindings。",[38,116910,116911],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[33,116913,116915],{"id":116914},"mujoco-到底是什么","MuJoCo 到底是什么",[38,116917,116918],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[83,116920,116923],{"className":116921,"code":116922,"language":5167,"meta":10},[5165],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[89,116924,116922],{"__ignoreMap":10},[38,116926,116927],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[46,116929,116930,116933,116936,116939],{},[49,116931,116932],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[49,116934,116935],{},"快速测试控制算法，不必一开始就上真实机器人。",[49,116937,116938],{},"生成强化学习环境。",[49,116940,116941],{},"采集状态、动作、图像、奖励等训练数据。",[33,116943,116944],{"id":116944},"学习前的心智模型",[38,116946,116947],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[240,116949,116950,116962],{},[243,116951,116952],{},[246,116953,116954,116957,116960],{},[249,116955,116956],{"align":23717},"部分",[249,116958,116959],{"align":23717},"负责什么",[249,116961,21167],{"align":23717},[287,116963,116964,116975,116987,116999,117011],{},[246,116965,116966,116969,116972],{},[292,116967,116968],{"align":23717},"MJCF XML",[292,116970,116971],{"align":23717},"定义世界和机器人结构",[292,116973,116974],{"align":23717},"地面、盒子、关节、电机、摄像头",[246,116976,116977,116981,116984],{},[292,116978,116979],{"align":23717},[89,116980,100690],{},[292,116982,116983],{"align":23717},"编译后的静态模型",[292,116985,116986],{"align":23717},"有几个关节、有几个电机、时间步长是多少",[246,116988,116989,116993,116996],{},[292,116990,116991],{"align":23717},[89,116992,100700],{},[292,116994,116995],{"align":23717},"运行中的动态状态",[292,116997,116998],{"align":23717},"当前时间、位置、速度、电机输入",[246,117000,117001,117005,117008],{},[292,117002,117003],{"align":23717},[89,117004,101196],{},[292,117006,117007],{"align":23717},"推进一步物理仿真",[292,117009,117010],{"align":23717},"根据重力、力、碰撞更新状态",[246,117012,117013,117016,117019],{},[292,117014,117015],{"align":23717},"Viewer \u002F Renderer",[292,117017,117018],{"align":23717},"把仿真显示出来",[292,117020,117021],{"align":23717},"打开窗口或保存图片",[38,117023,117024],{},"一句话总结：",[83,117026,117029],{"className":117027,"code":117028,"language":5167,"meta":10},[5165],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[89,117030,117028],{"__ignoreMap":10},[38,117032,117033],{},"参考来源：",[1110,117035,117036,117043,117050],{},[49,117037,117038,117039],{},"MuJoCo Python 官方文档：",[341,117040,117041],{"href":117041,"rel":117042},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23846],[49,117044,117045,117046],{},"MuJoCo XML Reference：",[341,117047,117048],{"href":117048,"rel":117049},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23846],[49,117051,117052,117053],{},"MuJoCo Overview：",[341,117054,117055],{"href":117055,"rel":117056},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23846],[33,117058,117059],{"id":117059},"章节目录",[46,117061,117062,117068,117074,117080,117086,117092,117098,117104],{},[49,117063,117064],{},[341,117065,117067],{"href":117066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[49,117069,117070],{},[341,117071,117073],{"href":117072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[49,117075,117076],{},[341,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[49,117081,117082],{},[341,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[49,117087,117088],{},[341,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[49,117093,117094],{},[341,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[49,117099,117100],{},[341,117101,117103],{"href":117102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[49,117105,117106],{},[341,117107,117109],{"href":117108},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[33,117111,117112],{"id":117112},"推荐学习路线",[83,117114,117117],{"className":117115,"code":117116,"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,117118,117116],{"__ignoreMap":10},[38,117120,117121],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[33,117123,117124],{"id":117124},"建议的目录结构",[38,117126,117127],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[83,117129,117131],{"className":23803,"code":117130,"language":23805,"meta":10,"style":10},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[89,117132,117133,117141],{"__ignoreMap":10},[92,117134,117135,117137,117139],{"class":94,"line":95},[92,117136,101247],{"class":1942},[92,117138,29198],{"class":151},[92,117140,101252],{"class":207},[92,117142,117143,117145],{"class":94,"line":11},[92,117144,101257],{"class":151},[92,117146,101252],{"class":207},[38,117148,117149],{},"每一章的代码都单独保存：",[83,117151,117154],{"className":117152,"code":117153,"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,117155,117153],{"__ignoreMap":10},[38,117157,117158],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[33,117160,117161],{"id":117161},"学习方法",[38,117163,117164],{},"每章建议按这个顺序操作：",[46,117166,117167,117170,117173,117176,117179,117182],{},[49,117168,117169],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[49,117171,117172],{},"复制最小可运行代码，保存成指定文件。",[49,117174,117175],{},"运行代码，确认没有报错。",[49,117177,117178],{},"对照“运行结果说明”理解输出。",[49,117180,117181],{},"做“验证步骤”，主动改一两个参数。",[49,117183,117184],{},"遇到报错先看“常见错误与解决方案”。",[38,117186,117187],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[33,117189,117190],{"id":117190},"全局排错顺序",[38,117192,117193],{},"遇到问题时，按下面顺序查：",[46,117195,117196,117202,117208,117213,117216,117219,117226,117236],{},[49,117197,117198,117199],{},"Python 环境是否激活：",[89,117200,117201],{},"which python",[49,117203,117204,117205],{},"MuJoCo 是否能导入：",[89,117206,117207],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[49,117209,117210,117211],{},"是否误装了 ",[89,117212,100993],{},[49,117214,117215],{},"XML 标签是否闭合、属性是否拼写正确",[49,117217,117218],{},"actuator 引用的 joint 名字是否存在",[49,117220,117221,117223,117224],{},[89,117222,101057],{}," 的长度是否等于 ",[89,117225,102139],{},[49,117227,105566,117228,82521,117230,117232,117233],{},[89,117229,104011],{},[89,117231,104341],{}," 后是否调用了 ",[89,117234,117235],{},"mujoco.mj_forward",[49,117237,117238],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5106,117240,117241],{},"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":117243},[117244,117245,117246,117247,117248,117249,117250,117251],{"id":116885,"depth":11,"text":116885},{"id":116914,"depth":11,"text":116915},{"id":116944,"depth":11,"text":116944},{"id":117059,"depth":11,"text":117059},{"id":117112,"depth":11,"text":117112},{"id":117124,"depth":11,"text":117124},{"id":117161,"depth":11,"text":117161},{"id":117190,"depth":11,"text":117190},"仿真搭建。",{"category":23359},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116828,"description":117252},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117259,"title":117260,"body":117261,"description":23357,"extension":14,"meta":117716,"navigation":17,"path":117717,"seo":117718,"stem":117719,"__hash__":117720},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117262,"toc":117714},[117263,117266,117269,117275,117711],[29,117264,117260],{"id":117265},"_1-最常用的基本操作更新",[38,117267,117268],{},"装linux系统教程：",[38,117270,117271],{},[341,117272,117273],{"href":117273,"rel":117274},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23846],[83,117276,117280],{"className":117277,"code":117278,"language":117279,"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,117281,117282,117287,117292,117301,117306,117315,117320,117340,117345,117356,117361,117370,117375,117403,117408,117427,117432,117451,117455,117460,117476,117480,117485,117515,117519,117524,117540,117544,117549,117564,117568,117573,117589,117593,117598,117610,117622,117626,117631,117648,117652,117657,117675,117679,117684,117693,117697,117702],{"__ignoreMap":10},[92,117283,117284],{"class":94,"line":95},[92,117285,117286],{"class":161},"#更新相关的知识\n",[92,117288,117289],{"class":94,"line":11},[92,117290,117291],{"class":161},"# 更新软件包列表（从服务器获取最新软件信息）\n",[92,117293,117294,117296,117299],{"class":94,"line":1158},[92,117295,24558],{"class":1942},[92,117297,117298],{"class":207}," apt",[92,117300,26224],{"class":207},[92,117302,117303],{"class":94,"line":1173},[92,117304,117305],{"class":161},"# 升级所有可更新的软件包（不删除旧包）\n",[92,117307,117308,117310,117312],{"class":94,"line":1179},[92,117309,24558],{"class":1942},[92,117311,117298],{"class":207},[92,117313,117314],{"class":207}," upgrade\n",[92,117316,117317],{"class":94,"line":1193},[92,117318,117319],{"class":161},"#更新和升级软件包\n",[92,117321,117322,117324,117326,117329,117331,117333,117335,117338],{"class":94,"line":1199},[92,117323,24558],{"class":1942},[92,117325,117298],{"class":207},[92,117327,117328],{"class":207}," update",[92,117330,26172],{"class":102},[92,117332,24558],{"class":1942},[92,117334,117298],{"class":207},[92,117336,117337],{"class":207}," upgrade",[92,117339,100962],{"class":151},[92,117341,117342],{"class":94,"line":1290},[92,117343,117344],{"class":161},"#列出可更新的软件包及版本信息\n",[92,117346,117347,117350,117353],{"class":94,"line":1296},[92,117348,117349],{"class":1942},"apt",[92,117351,117352],{"class":207}," list",[92,117354,117355],{"class":151}," --upgradable\n",[92,117357,117358],{"class":94,"line":1308},[92,117359,117360],{"class":161},"#彻底升级（处理依赖关系，可能删除旧包）\n",[92,117362,117363,117365,117367],{"class":94,"line":1591},[92,117364,24558],{"class":1942},[92,117366,117298],{"class":207},[92,117368,117369],{"class":207}," full-upgrade\n",[92,117371,117372],{"class":94,"line":1596},[92,117373,117374],{"class":161},"#设置指定版本\n",[92,117376,117377,117379,117381,117383,117385,117388,117390,117392,117394,117396,117399,117401],{"class":94,"line":1602},[92,117378,24558],{"class":1942},[92,117380,117298],{"class":207},[92,117382,23815],{"class":207},[92,117384,28884],{"class":98},[92,117386,117387],{"class":207},"package_nam",[92,117389,177],{"class":102},[92,117391,1063],{"class":98},[92,117393,148],{"class":207},[92,117395,1013],{"class":98},[92,117397,117398],{"class":207},"version_numbe",[92,117400,773],{"class":102},[92,117402,51289],{"class":98},[92,117404,117405],{"class":94,"line":1607},[92,117406,117407],{"class":161},"#只安装软件包不升级\n",[92,117409,117410,117412,117414,117416,117418,117420,117422,117424],{"class":94,"line":1621},[92,117411,24558],{"class":1942},[92,117413,117298],{"class":207},[92,117415,23815],{"class":207},[92,117417,28884],{"class":98},[92,117419,117387],{"class":207},[92,117421,177],{"class":102},[92,117423,1063],{"class":98},[92,117425,117426],{"class":151}," --no-upgrade\n",[92,117428,117429],{"class":94,"line":1626},[92,117430,117431],{"class":161},"#只升级，不存在就不安装\n",[92,117433,117434,117436,117438,117440,117442,117444,117446,117448],{"class":94,"line":1632},[92,117435,24558],{"class":1942},[92,117437,117298],{"class":207},[92,117439,23815],{"class":207},[92,117441,28884],{"class":98},[92,117443,117387],{"class":207},[92,117445,177],{"class":102},[92,117447,1063],{"class":98},[92,117449,117450],{"class":151}," --only-upgrade\n",[92,117452,117453],{"class":94,"line":1653},[92,117454,2379],{"emptyLinePlaceholder":17},[92,117456,117457],{"class":94,"line":1658},[92,117458,117459],{"class":161},"#安装指定的软件命令\n",[92,117461,117462,117464,117466,117468,117470,117472,117474],{"class":94,"line":1672},[92,117463,24558],{"class":1942},[92,117465,117298],{"class":207},[92,117467,23815],{"class":207},[92,117469,28884],{"class":98},[92,117471,117387],{"class":207},[92,117473,177],{"class":102},[92,117475,51289],{"class":98},[92,117477,117478],{"class":94,"line":1677},[92,117479,2379],{"emptyLinePlaceholder":17},[92,117481,117482],{"class":94,"line":1706},[92,117483,117484],{"class":161},"#安装多个软件包\n",[92,117486,117487,117489,117491,117493,117495,117498,117501,117503,117505,117508,117510,117512],{"class":94,"line":1711},[92,117488,24558],{"class":1942},[92,117490,117298],{"class":207},[92,117492,23815],{"class":207},[92,117494,28884],{"class":98},[92,117496,117497],{"class":207},"package_",[92,117499,117500],{"class":98},"1>",[92,117502,28884],{"class":98},[92,117504,117497],{"class":207},[92,117506,117507],{"class":98},"2>",[92,117509,28884],{"class":98},[92,117511,117497],{"class":207},[92,117513,117514],{"class":98},"3>\n",[92,117516,117517],{"class":94,"line":1728},[92,117518,2379],{"emptyLinePlaceholder":17},[92,117520,117521],{"class":94,"line":1733},[92,117522,117523],{"class":161},"#更新指定的软件命令\n",[92,117525,117526,117528,117530,117532,117534,117536,117538],{"class":94,"line":1738},[92,117527,24558],{"class":1942},[92,117529,117298],{"class":207},[92,117531,117328],{"class":207},[92,117533,28884],{"class":98},[92,117535,117387],{"class":207},[92,117537,177],{"class":102},[92,117539,51289],{"class":98},[92,117541,117542],{"class":94,"line":1743},[92,117543,2379],{"emptyLinePlaceholder":17},[92,117545,117546],{"class":94,"line":1757},[92,117547,117548],{"class":161},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[92,117550,117551,117553,117556,117558,117560,117562],{"class":94,"line":1762},[92,117552,117349],{"class":1942},[92,117554,117555],{"class":207}," show",[92,117557,28884],{"class":98},[92,117559,117387],{"class":207},[92,117561,177],{"class":102},[92,117563,51289],{"class":98},[92,117565,117566],{"class":94,"line":2556},[92,117567,2379],{"emptyLinePlaceholder":17},[92,117569,117570],{"class":94,"line":2570},[92,117571,117572],{"class":161},"#删除软件包命令\n",[92,117574,117575,117577,117579,117581,117583,117585,117587],{"class":94,"line":2578},[92,117576,24558],{"class":1942},[92,117578,117298],{"class":207},[92,117580,26061],{"class":207},[92,117582,28884],{"class":98},[92,117584,117387],{"class":207},[92,117586,177],{"class":102},[92,117588,51289],{"class":98},[92,117590,117591],{"class":94,"line":2583},[92,117592,2379],{"emptyLinePlaceholder":17},[92,117594,117595],{"class":94,"line":2589},[92,117596,117597],{"class":161},"# 清理旧版本和缓存（释放磁盘空间）\n",[92,117599,117600,117602,117604,117607],{"class":94,"line":2595},[92,117601,24558],{"class":1942},[92,117603,117298],{"class":207},[92,117605,117606],{"class":207}," autoremove",[92,117608,117609],{"class":161},"  # 删除不再需要的依赖和库文件\n",[92,117611,117612,117614,117616,117619],{"class":94,"line":2600},[92,117613,24558],{"class":1942},[92,117615,117298],{"class":207},[92,117617,117618],{"class":207}," clean",[92,117620,117621],{"class":161},"       # 清理下载的缓存包\n",[92,117623,117624],{"class":94,"line":7928},[92,117625,2379],{"emptyLinePlaceholder":17},[92,117627,117628],{"class":94,"line":7952},[92,117629,117630],{"class":161},"#移除软件包及配置文件\n",[92,117632,117633,117635,117637,117640,117642,117644,117646],{"class":94,"line":7957},[92,117634,24558],{"class":1942},[92,117636,117298],{"class":207},[92,117638,117639],{"class":207}," purge",[92,117641,28884],{"class":98},[92,117643,117387],{"class":207},[92,117645,177],{"class":102},[92,117647,51289],{"class":98},[92,117649,117650],{"class":94,"line":7963},[92,117651,2379],{"emptyLinePlaceholder":17},[92,117653,117654],{"class":94,"line":7990},[92,117655,117656],{"class":161},"#查找软件包命令\n",[92,117658,117659,117661,117663,117666,117668,117671,117673],{"class":94,"line":7995},[92,117660,24558],{"class":1942},[92,117662,117298],{"class":207},[92,117664,117665],{"class":207}," search",[92,117667,28884],{"class":98},[92,117669,117670],{"class":207},"keywor",[92,117672,417],{"class":102},[92,117674,51289],{"class":98},[92,117676,117677],{"class":94,"line":8001},[92,117678,2379],{"emptyLinePlaceholder":17},[92,117680,117681],{"class":94,"line":8013},[92,117682,117683],{"class":161},"#列出所有已安装的包\n",[92,117685,117686,117688,117690],{"class":94,"line":8025},[92,117687,117349],{"class":1942},[92,117689,117352],{"class":207},[92,117691,117692],{"class":151}," --installed\n",[92,117694,117695],{"class":94,"line":8037},[92,117696,2379],{"emptyLinePlaceholder":17},[92,117698,117699],{"class":94,"line":9696},[92,117700,117701],{"class":161},"#列出所有已安装的包的版本信息\n",[92,117703,117704,117706,117708],{"class":94,"line":9721},[92,117705,117349],{"class":1942},[92,117707,117352],{"class":207},[92,117709,117710],{"class":151}," --all-versions\n",[5106,117712,117713],{},"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":117715},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117260,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117722,"title":117723,"body":117724,"description":23357,"extension":14,"meta":118465,"navigation":17,"path":118466,"seo":118467,"stem":118468,"__hash__":118469},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117725,"toc":118452},[117726,117729,117733,117736,117742,117746,117750,117756,117761,117766,117771,117776,117781,117784,117787,117790,117793,117797,117800,117805,117808,117813,117816,117821,117828,117831,117834,117837,117840,117843,117854,117858,117862,117867,117872,117876,117881,117885,117890,117894,117898,117903,117906,117951,117956,117960,117964,117969,117975,117980,117990,117995,118005,118010,118015,118042,118046,118049,118054,118057,118082,118086,118091,118094,118099,118104,118124,118129,118132,118147,118151,118204,118207,118212,118216,118219,118234,118237,118240,118245,118249,118253,118256,118260,118264,118267,118272,118277,118281,118288,118296,118299,118306,118311,118316,118319,118324,118331,118336,118343,118347,118349,118354,118358,118361,118364,118369,118372,118377,118380,118385,118390,118395,118399,118404,118408,118449],[29,117727,117723],{"id":117728},"_2-linux装机教程",[33,117730,117732],{"id":117731},"_21-实体机","2.1 实体机",[38,117734,117735],{},"使用清华源：（Ubuntu24.04）",[38,117737,117738],{},[341,117739,117740],{"href":117740,"rel":117741},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23846],[33,117743,117745],{"id":117744},"_22-普通虚拟机","2.2 普通虚拟机",[63,117747,117749],{"id":117748},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[38,117751,117752],{},[341,117753,117754],{"href":117754,"rel":117755},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23846],[38,117757,117758],{},[1441,117759],{"alt":10,"src":117760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[38,117762,117763],{},[1441,117764],{"alt":10,"src":117765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[38,117767,117768],{},[1441,117769],{"alt":10,"src":117770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[38,117772,117773],{},[1441,117774],{"alt":10,"src":117775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[38,117777,117778],{},[1441,117779],{"alt":10,"src":117780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[38,117782,117783],{},"内存4G（4096MB）；",[38,117785,117786],{},"CPU给4个核；",[38,117788,117789],{},"硬盘动态分配60G；",[38,117791,117792],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[63,117794,117796],{"id":117795},"_222-安装ubuntu","2.2.2 安装Ubuntu",[38,117798,117799],{},"按照1.1的步骤下载Ubuntu",[38,117801,117802],{},[1441,117803],{"alt":10,"src":117804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[38,117806,117807],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[38,117809,117810],{},[1441,117811],{"alt":10,"src":117812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[38,117814,117815],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[38,117817,117818],{},[1441,117819],{"alt":10,"src":117820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[38,117822,117823,117824,117827],{},"选择“正常安装”(找不到都用Alt+F7)， ",[252,117825,117826],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[38,117829,117830],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[38,117832,117833],{},"将改动写入磁盘吗 继续",[38,117835,117836],{},"选择东八区（shanghai，大致在地图上点一下），继续",[38,117838,117839],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[38,117841,117842],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[38,117844,117845,117846,117849,117850,117853],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[252,117847,117848],{},"除了"," 选不发送系统信息与不升级之外， ",[252,117851,117852],{},"其它"," 都跳过或前进）",[63,117855,117857],{"id":117856},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21978,117859,117861],{"id":117860},"_2231-全屏","2.2.3.1 全屏",[38,117863,117864],{},[1441,117865],{"alt":10,"src":117866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[38,117868,117869],{},[1441,117870],{"alt":10,"src":117871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21978,117873,117875],{"id":117874},"_2232-文件交换","2.2.3.2 文件交换",[38,117877,117878],{},[1441,117879],{"alt":10,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21978,117882,117884],{"id":117883},"_2233-新建文本文档","2.2.3.3 新建文本文档",[38,117886,117887],{},[1441,117888],{"alt":10,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[33,117891,117893],{"id":117892},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[63,117895,117897],{"id":117896},"_231-简介与优缺点","2.3.1 简介与优缺点",[46,117899,117900],{},[49,117901,117902],{},"什么情况下推荐？",[38,117904,117905],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[46,117907,117908],{"start":11},[49,117909,117910,117911],{},"优缺点：",[46,117912,117913,117943],{},[49,117914,117915,117916],{},"优点：",[46,117917,117918,117921,117928,117931,117934,117937,117940],{},[49,117919,117920],{},"WSL2是最好的Linux发行版;(bushi)",[49,117922,117923,117924,117927],{},"性能损耗极低。且比在Windows上跑深度性能 ",[252,117925,117926],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[49,117929,117930],{},"非常方便调用USB设备，可以USB直通;",[49,117932,117933],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[49,117935,117936],{},"非常方便Win与WSL2互相传文件等协同操作;",[49,117938,117939],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[49,117941,117942],{},"非常方便使用Windows的VScode远程开发;",[49,117944,117945,117946],{},"缺点：",[46,117947,117948],{},[49,117949,117950],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[38,117952,117953],{},[1441,117954],{"alt":10,"src":117955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[63,117957,117959],{"id":117958},"_232-安装教程","2.3.2 安装教程",[21978,117961,117963],{"id":117962},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[46,117965,117966],{},[49,117967,117968],{},"方法一(图形界面)",[38,117970,117971,117972,24600],{},"用Win+R输入",[89,117973,117974],{},"appwiz.cpl",[38,117976,117977],{},[1441,117978],{"alt":10,"src":117979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[38,117981,117982,117983,117986,117987,26455],{},"点击OK进入 ",[252,117984,117985],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[252,117988,117989],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[38,117991,117992],{},[1441,117993],{"alt":10,"src":117994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[38,117996,117997,117998,100999,118001,118004],{},"选择 ",[252,117999,118000],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[252,118002,118003],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[38,118006,118007],{},[1441,118008],{"alt":10,"src":118009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[46,118011,118012],{"start":11},[49,118013,118014],{},"方法二(命令行)",[83,118016,118020],{"className":118017,"code":118018,"language":118019,"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,118021,118022,118027,118032,118037],{"__ignoreMap":10},[92,118023,118024],{"class":94,"line":95},[92,118025,118026],{},"# 开启 Linux 子系统\n",[92,118028,118029],{"class":94,"line":11},[92,118030,118031],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[92,118033,118034],{"class":94,"line":1158},[92,118035,118036],{},"# 开启虚拟机平台\n",[92,118038,118039],{"class":94,"line":1173},[92,118040,118041],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21978,118043,118045],{"id":118044},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[38,118047,118048],{},"用管理员权限打开powershell",[38,118050,118051],{},[1441,118052],{"alt":10,"src":118053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[38,118055,118056],{},"升级WSL并设置默认版本为WSL2",[83,118058,118060],{"className":118017,"code":118059,"language":118019,"meta":10,"style":10},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[89,118061,118062,118067,118072,118077],{"__ignoreMap":10},[92,118063,118064],{"class":94,"line":95},[92,118065,118066],{},"# 更新 wsl\n",[92,118068,118069],{"class":94,"line":11},[92,118070,118071],{},"wsl --update\n",[92,118073,118074],{"class":94,"line":1158},[92,118075,118076],{},"# 将 wsl 版本设置为 wsl2\n",[92,118078,118079],{"class":94,"line":1173},[92,118080,118081],{},"wsl --set-default-version 2\n",[21978,118083,118085],{"id":118084},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[46,118087,118088],{},[49,118089,118090],{},"方式一(商店下载)",[38,118092,118093],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[38,118095,118096],{},[1441,118097],{"alt":10,"src":118098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[46,118100,118101],{"start":11},[49,118102,118103],{},"方式二(命令行安装)",[83,118105,118107],{"className":118017,"code":118106,"language":118019,"meta":10,"style":10},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[89,118108,118109,118114,118119],{"__ignoreMap":10},[92,118110,118111],{"class":94,"line":95},[92,118112,118113],{},"# 列出可安装的 Linux 版本\n",[92,118115,118116],{"class":94,"line":11},[92,118117,118118],{},"#（需要科学手段）\n",[92,118120,118121],{"class":94,"line":1158},[92,118122,118123],{},"wsl --list --online\n",[38,118125,118126],{},[1441,118127],{"alt":10,"src":118128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[38,118130,118131],{},"选择对应发行版并安装",[83,118133,118135],{"className":118017,"code":118134,"language":118019,"meta":10,"style":10},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[89,118136,118137,118142],{"__ignoreMap":10},[92,118138,118139],{"class":94,"line":95},[92,118140,118141],{},"# Ubuntu安装完毕后需要重启系统\n",[92,118143,118144],{"class":94,"line":11},[92,118145,118146],{},"wsl --install -d Ubuntu-24.04\n",[21978,118148,118150],{"id":118149},"_2324-查看系统状态","2.3.2.4 查看系统状态",[83,118152,118154],{"className":118017,"code":118153,"language":118019,"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,118155,118156,118161,118166,118171,118176,118180,118184,118189,118194,118199],{"__ignoreMap":10},[92,118157,118158],{"class":94,"line":95},[92,118159,118160],{},"# 查看 wsl\n",[92,118162,118163],{"class":94,"line":11},[92,118164,118165],{},"wsl -l\n",[92,118167,118168],{"class":94,"line":1158},[92,118169,118170],{},"# 查看 wsl 运行版本或模式\n",[92,118172,118173],{"class":94,"line":1173},[92,118174,118175],{},"wsl -l -v\n",[92,118177,118178],{"class":94,"line":1179},[92,118179,2379],{"emptyLinePlaceholder":17},[92,118181,118182],{"class":94,"line":1193},[92,118183,2379],{"emptyLinePlaceholder":17},[92,118185,118186],{"class":94,"line":1199},[92,118187,118188],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[92,118190,118191],{"class":94,"line":1290},[92,118192,118193],{},"wsl --set-version \u003Cdistro> 2\n",[92,118195,118196],{"class":94,"line":1296},[92,118197,118198],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[92,118200,118201],{"class":94,"line":1308},[92,118202,118203],{},"wsl --unregister \u003Cdistro>\n",[38,118205,118206],{},"输出Version为2即正常",[38,118208,118209],{},[1441,118210],{"alt":10,"src":118211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21978,118213,118215],{"id":118214},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[38,118217,118218],{},"直接在Powershell里输入wsl命令进入子系统",[83,118220,118222],{"className":118017,"code":118221,"language":118019,"meta":10,"style":10},"# 进入子系统\nwsl\n",[89,118223,118224,118229],{"__ignoreMap":10},[92,118225,118226],{"class":94,"line":95},[92,118227,118228],{},"# 进入子系统\n",[92,118230,118231],{"class":94,"line":11},[92,118232,118233],{},"wsl\n",[38,118235,118236],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[38,118238,118239],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[38,118241,118242],{},[1441,118243],{"alt":10,"src":118244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[63,118246,118248],{"id":118247},"_233-配置各种环境","2.3.3 配置各种环境",[21978,118250,118252],{"id":118251},"_2331-换源","2.3.3.1 换源",[38,118254,118255],{},"(同实体机LINUX，往下找教程)",[21978,118257,118259],{"id":118258},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22890,118261,118263],{"id":118262},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[38,118265,118266],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[38,118268,118269],{},[1441,118270],{"alt":10,"src":118271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[38,118273,118274],{},[1441,118275],{"alt":10,"src":118276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22890,118278,118280],{"id":118279},"_23322-cuda","2.3.3.2.2 CUDA",[38,118282,118283,118284],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[341,118285,118286],{"href":118286,"rel":118287},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23846],[38,118289,118290,118293],{},[1441,118291],{"alt":10,"src":118292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1441,118294],{"alt":10,"src":118295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[38,118297,118298],{},"在下方的网站，选择合适的版本。",[38,118300,118301,118302],{},"WSL2 专属 CUDA 指南：",[341,118303,118304],{"href":118304,"rel":118305},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23846],[38,118307,118308],{},[252,118309,118310],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[38,118312,118313],{},[1441,118314],{"alt":10,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[38,118317,118318],{},"挨行敲一遍",[38,118320,118321],{},[1441,118322],{"alt":10,"src":118323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[38,118325,118326,118327,118330],{},"敲完后，输入",[89,118328,118329],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[38,118332,118333],{},[1441,118334],{"alt":10,"src":118335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[38,118337,118338,118339,118342],{},"（请详看下方教程的",[252,118340,118341],{},"安装CUDA的配置环境来看","如何配置环境）",[22890,118344,118346],{"id":118345},"_23323-cudnn","2.3.3.2.3 cuDNN",[38,118348,118255],{},[38,118350,118351],{},[1441,118352],{"alt":10,"src":118353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21978,118355,118357],{"id":118356},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[38,118359,118360],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[38,118362,118363],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[38,118365,118366],{},[1441,118367],{"alt":10,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[38,118370,118371],{},"连接WSL2",[38,118373,118374],{},[1441,118375],{"alt":10,"src":118376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[38,118378,118379],{},"远程开发成功。",[38,118381,118382],{},[1441,118383],{"alt":10,"src":118384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[38,118386,118387],{},[1441,118388],{"alt":10,"src":118389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[38,118391,118392],{},[1441,118393],{"alt":10,"src":118394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21978,118396,118398],{"id":118397},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[38,118400,118401],{},[1441,118402],{"alt":10,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21978,118405,118407],{"id":118406},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[83,118409,118411],{"className":117277,"code":118410,"language":117279,"meta":10,"style":10},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[89,118412,118413,118421,118429,118440,118444],{"__ignoreMap":10},[92,118414,118415,118417,118419],{"class":94,"line":95},[92,118416,24558],{"class":1942},[92,118418,117298],{"class":207},[92,118420,26224],{"class":207},[92,118422,118423,118425,118427],{"class":94,"line":11},[92,118424,24558],{"class":1942},[92,118426,117298],{"class":207},[92,118428,117314],{"class":207},[92,118430,118431,118433,118435,118437],{"class":94,"line":1158},[92,118432,24558],{"class":1942},[92,118434,117298],{"class":207},[92,118436,23815],{"class":207},[92,118438,118439],{"class":207}," mesa-utils\n",[92,118441,118442],{"class":94,"line":1173},[92,118443,2379],{"emptyLinePlaceholder":17},[92,118445,118446],{"class":94,"line":1179},[92,118447,118448],{"class":161},"#然后重启wsl2即可\n",[5106,118450,118451],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":118453},[118454,118455,118460],{"id":117731,"depth":11,"text":117732},{"id":117744,"depth":11,"text":117745,"children":118456},[118457,118458,118459],{"id":117748,"depth":1158,"text":117749},{"id":117795,"depth":1158,"text":117796},{"id":117856,"depth":1158,"text":117857},{"id":117892,"depth":11,"text":117893,"children":118461},[118462,118463,118464],{"id":117896,"depth":1158,"text":117897},{"id":117958,"depth":1158,"text":117959},{"id":118247,"depth":1158,"text":118248},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117723,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118471,"title":118472,"body":118473,"description":23357,"extension":14,"meta":121409,"navigation":17,"path":121410,"seo":121411,"stem":121412,"__hash__":121413},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118474,"toc":121381},[118475,118478,118482,118488,118492,118498,118502,118690,118693,118698,118702,118706,118709,118712,118718,118723,118726,118729,118734,118767,118772,118776,118853,118856,118861,118865,118868,118907,118910,118919,118937,118942,118949,119066,119071,119074,119101,119106,119110,119119,119169,119176,119180,119183,119197,119204,119238,119243,119247,119270,119273,119278,119282,119285,119288,119291,119333,119337,119340,119343,119384,119388,119392,119395,119400,119405,119408,119431,119434,119442,119447,119450,119455,119460,119463,119468,119472,119477,119500,119505,119567,119575,119580,119585,119588,119593,119596,119601,119606,119624,119629,119635,119640,119654,119658,119661,119664,119667,119710,119713,119718,119819,119822,119827,119831,119835,119872,119876,119880,119884,119930,119934,119979,119983,119990,119998,120053,120056,120133,120136,120159,120163,120166,120171,120176,120184,120187,120192,120197,120202,120205,120210,120219,120222,120227,120230,120301,120306,120309,120314,120317,120322,120325,120330,120333,120338,120343,120346,120421,120424,120437,120442,120445,120459,120462,120491,120496,120525,120528,120533,120537,120542,120551,120554,120559,120562,120567,120570,120573,120578,120581,120586,120591,120594,120599,120602,120727,120732,120762,120765,120770,120775,120792,120795,120838,120841,120868,120873,120886,121029,121033,121038,121052,121055,121106,121109,121139,121142,121158,121163,121177,121180,121247,121252,121261,121266,121269,121281,121286,121293,121317,121320,121325,121328,121347,121352,121359,121371,121378],[29,118476,118472],{"id":118477},"_3-安装必备配置",[33,118479,118481],{"id":118480},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[83,118483,118486],{"className":118484,"code":118485,"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,118487,118485],{"__ignoreMap":10},[63,118489,118491],{"id":118490},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[83,118493,118496],{"className":118494,"code":118495,"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,118497,118495],{"__ignoreMap":10},[63,118499,118501],{"id":118500},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[83,118503,118507],{"className":118504,"code":118505,"language":118506,"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,118508,118509,118517,118528,118540,118554,118558,118568,118573,118577,118581,118586,118590,118602,118606,118611,118615,118626,118630,118646,118650,118661,118665,118670,118674,118682],{"__ignoreMap":10},[92,118510,118511,118513,118515],{"class":94,"line":95},[92,118512,24558],{"class":1942},[92,118514,117298],{"class":207},[92,118516,26224],{"class":207},[92,118518,118519,118521,118523,118525],{"class":94,"line":11},[92,118520,24558],{"class":1942},[92,118522,117298],{"class":207},[92,118524,23815],{"class":207},[92,118526,118527],{"class":207}," vim\n",[92,118529,118530,118532,118535,118537],{"class":94,"line":1158},[92,118531,24558],{"class":1942},[92,118533,118534],{"class":207}," rm",[92,118536,25307],{"class":151},[92,118538,118539],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list\n",[92,118541,118542,118544,118546,118548,118551],{"class":94,"line":1173},[92,118543,24558],{"class":1942},[92,118545,118534],{"class":207},[92,118547,25307],{"class":151},[92,118549,118550],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[92,118552,118553],{"class":151},"**\n",[92,118555,118556],{"class":94,"line":1179},[92,118557,2379],{"emptyLinePlaceholder":17},[92,118559,118560,118562,118565],{"class":94,"line":1193},[92,118561,24558],{"class":1942},[92,118563,118564],{"class":207}," vim",[92,118566,118567],{"class":207}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[92,118569,118570],{"class":94,"line":1199},[92,118571,118572],{"class":207},"```\n",[92,118574,118575],{"class":94,"line":1290},[92,118576,2379],{"emptyLinePlaceholder":17},[92,118578,118579],{"class":94,"line":1296},[92,118580,2379],{"emptyLinePlaceholder":17},[92,118582,118583],{"class":94,"line":1308},[92,118584,118585],{"class":1942},"选择好Ubuntu版本后，复制下方的内容。\n",[92,118587,118588],{"class":94,"line":1591},[92,118589,2379],{"emptyLinePlaceholder":17},[92,118591,118592,118594,118597,118600],{"class":94,"line":1596},[92,118593,329],{"class":98},[92,118595,118596],{"class":207},"[](",[92,118598,118599],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[92,118601,109],{"class":207},[92,118603,118604],{"class":94,"line":1602},[92,118605,2379],{"emptyLinePlaceholder":17},[92,118607,118608],{"class":94,"line":1607},[92,118609,118610],{"class":1942},"粘贴进去\n",[92,118612,118613],{"class":94,"line":1621},[92,118614,2379],{"emptyLinePlaceholder":17},[92,118616,118617,118619,118621,118624],{"class":94,"line":1626},[92,118618,329],{"class":98},[92,118620,118596],{"class":207},[92,118622,118623],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[92,118625,109],{"class":207},[92,118627,118628],{"class":94,"line":1632},[92,118629,2379],{"emptyLinePlaceholder":17},[92,118631,118632,118635,118638,118641,118643],{"class":94,"line":1653},[92,118633,118634],{"class":1942},"按一下ESC，然后英文冒号，输入",[92,118636,118637],{"class":207}," `",[92,118639,118640],{"class":1942},":wq!",[92,118642,1075],{"class":207},[92,118644,118645],{"class":1942},"然后回车\n",[92,118647,118648],{"class":94,"line":1658},[92,118649,2379],{"emptyLinePlaceholder":17},[92,118651,118652,118654,118656,118659],{"class":94,"line":1672},[92,118653,329],{"class":98},[92,118655,118596],{"class":207},[92,118657,118658],{"class":1942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[92,118660,109],{"class":207},[92,118662,118663],{"class":94,"line":1677},[92,118664,2379],{"emptyLinePlaceholder":17},[92,118666,118667],{"class":94,"line":1706},[92,118668,118669],{"class":1942},"输入以下命令\n",[92,118671,118672],{"class":94,"line":1711},[92,118673,2379],{"emptyLinePlaceholder":17},[92,118675,118676,118679],{"class":94,"line":1728},[92,118677,118678],{"class":207},"```",[92,118680,118681],{"class":1942},"Bash\n",[92,118683,118684,118686,118688],{"class":94,"line":1733},[92,118685,24558],{"class":1942},[92,118687,117298],{"class":207},[92,118689,26224],{"class":207},[38,118691,118692],{},"这里被替换成对应学校则成功",[38,118694,118695],{},[1441,118696],{"alt":10,"src":118697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[33,118699,118701],{"id":118700},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[63,118703,118705],{"id":118704},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[38,118707,118708],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[38,118710,118711],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[38,118713,118714],{},[341,118715,118716],{"href":118716,"rel":118717},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23846],[38,118719,118720],{},[1441,118721],{"alt":10,"src":118722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[38,118724,118725],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[38,118727,118728],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[38,118730,118731],{},[1441,118732],{"alt":10,"src":118733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[83,118735,118737],{"className":117277,"code":118736,"language":117279,"meta":10,"style":10},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[89,118738,118739,118744,118751,118756],{"__ignoreMap":10},[92,118740,118741],{"class":94,"line":95},[92,118742,118743],{"class":161},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[92,118745,118746,118748],{"class":94,"line":11},[92,118747,101257],{"class":151},[92,118749,118750],{"class":207}," ~\u002FDownloads\n",[92,118752,118753],{"class":94,"line":1158},[92,118754,118755],{"class":161},"#下方chrome安装包名不一定是这个，根据名字来看\n",[92,118757,118758,118760,118762,118764],{"class":94,"line":1173},[92,118759,24558],{"class":1942},[92,118761,117298],{"class":207},[92,118763,23815],{"class":207},[92,118765,118766],{"class":207}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[38,118768,118769],{},[1441,118770],{"alt":10,"src":118771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[63,118773,118775],{"id":118774},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[83,118777,118779],{"className":117277,"code":118778,"language":117279,"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,118780,118781,118786,118794,118805,118810,118814,118819,118829,118837,118848],{"__ignoreMap":10},[92,118782,118783],{"class":94,"line":95},[92,118784,118785],{"class":161},"# 老版\n",[92,118787,118788,118790,118792],{"class":94,"line":11},[92,118789,24558],{"class":1942},[92,118791,117298],{"class":207},[92,118793,26224],{"class":207},[92,118795,118796,118798,118800,118802],{"class":94,"line":1158},[92,118797,24558],{"class":1942},[92,118799,117298],{"class":207},[92,118801,23815],{"class":207},[92,118803,118804],{"class":207}," neofetch\n",[92,118806,118807],{"class":94,"line":1173},[92,118808,118809],{"class":1942},"neofetch\n",[92,118811,118812],{"class":94,"line":1179},[92,118813,2379],{"emptyLinePlaceholder":17},[92,118815,118816],{"class":94,"line":1193},[92,118817,118818],{"class":161},"# 新版\n",[92,118820,118821,118823,118826],{"class":94,"line":1199},[92,118822,24558],{"class":1942},[92,118824,118825],{"class":207}," add-apt-repository",[92,118827,118828],{"class":207}," ppa:zhangsongcui3371\u002Ffastfetch\n",[92,118830,118831,118833,118835],{"class":94,"line":1290},[92,118832,24558],{"class":1942},[92,118834,117298],{"class":207},[92,118836,26224],{"class":207},[92,118838,118839,118841,118843,118845],{"class":94,"line":1296},[92,118840,24558],{"class":1942},[92,118842,117298],{"class":207},[92,118844,23815],{"class":207},[92,118846,118847],{"class":207}," fastfetch\n",[92,118849,118850],{"class":94,"line":1308},[92,118851,118852],{"class":1942},"fastfetch\n",[38,118854,118855],{},"这里显示，一共有3162个debian的程序，7个snap程序",[38,118857,118858],{},[1441,118859],{"alt":10,"src":118860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[63,118862,118864],{"id":118863},"_323-移除snap应用","3.2.3 移除snap应用",[38,118866,118867],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[83,118869,118871],{"className":117277,"code":118870,"language":117279,"meta":10,"style":10},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[89,118872,118873,118885,118896],{"__ignoreMap":10},[92,118874,118875,118877,118879,118882],{"class":94,"line":95},[92,118876,24558],{"class":1942},[92,118878,26495],{"class":207},[92,118880,118881],{"class":207}," disable",[92,118883,118884],{"class":207}," snapd.service\n",[92,118886,118887,118889,118891,118893],{"class":94,"line":11},[92,118888,24558],{"class":1942},[92,118890,26495],{"class":207},[92,118892,118881],{"class":207},[92,118894,118895],{"class":207}," snapd.socket\n",[92,118897,118898,118900,118902,118904],{"class":94,"line":1158},[92,118899,24558],{"class":1942},[92,118901,26495],{"class":207},[92,118903,118881],{"class":207},[92,118905,118906],{"class":207}," snapd.seeded.service\n",[38,118908,118909],{},"然后查看snap应用列表",[38,118911,118912,118913,118918],{},"根据你安装的选择不同（最小安装或普通安装），有",[341,118914,118917],{"href":118915,"rel":118916},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23846],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[83,118920,118922],{"className":117277,"code":118921,"language":117279,"meta":10,"style":10},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[89,118923,118924,118929],{"__ignoreMap":10},[92,118925,118926],{"class":94,"line":95},[92,118927,118928],{"class":161},"# 查询当前系统上snap安装了哪些app\n",[92,118930,118931,118934],{"class":94,"line":11},[92,118932,118933],{"class":1942},"snap",[92,118935,118936],{"class":207}," list\n",[38,118938,118939],{},[1441,118940],{"alt":10,"src":118941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[38,118943,118944,118945,118948],{},"卸载掉图中所有应用，按照 ",[252,118946,118947],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[83,118950,118952],{"className":117277,"code":118951,"language":117279,"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,118953,118954,118959,118971,118976,118987,118992,119003,119008,119019,119024,119028,119033,119044,119055],{"__ignoreMap":10},[92,118955,118956],{"class":94,"line":95},[92,118957,118958],{"class":161},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[92,118960,118961,118963,118966,118968],{"class":94,"line":11},[92,118962,24558],{"class":1942},[92,118964,118965],{"class":207}," snap",[92,118967,26061],{"class":207},[92,118969,118970],{"class":207}," snap-store\n",[92,118972,118973],{"class":94,"line":1158},[92,118974,118975],{"class":161},"#移除firefox浏览器\n",[92,118977,118978,118980,118982,118984],{"class":94,"line":1173},[92,118979,24558],{"class":1942},[92,118981,118965],{"class":207},[92,118983,26061],{"class":207},[92,118985,118986],{"class":207}," firefox\n",[92,118988,118989],{"class":94,"line":1179},[92,118990,118991],{"class":161},"#移除gnome-42-2204\n",[92,118993,118994,118996,118998,119000],{"class":94,"line":1193},[92,118995,24558],{"class":1942},[92,118997,118965],{"class":207},[92,118999,26061],{"class":207},[92,119001,119002],{"class":207}," gnome-42-2204\n",[92,119004,119005],{"class":94,"line":1199},[92,119006,119007],{"class":161},"#移除gtk-common-themes\n",[92,119009,119010,119012,119014,119016],{"class":94,"line":1290},[92,119011,24558],{"class":1942},[92,119013,118965],{"class":207},[92,119015,26061],{"class":207},[92,119017,119018],{"class":207}," gtk-common-themes\n",[92,119020,119021],{"class":94,"line":1296},[92,119022,119023],{"class":161},"#移除其它...\n",[92,119025,119026],{"class":94,"line":1308},[92,119027,2653],{"class":102},[92,119029,119030],{"class":94,"line":1591},[92,119031,119032],{"class":161},"#移除core22,bare以及snapd\n",[92,119034,119035,119037,119039,119041],{"class":94,"line":1596},[92,119036,24558],{"class":1942},[92,119038,118965],{"class":207},[92,119040,26061],{"class":207},[92,119042,119043],{"class":207}," core22\n",[92,119045,119046,119048,119050,119052],{"class":94,"line":1602},[92,119047,24558],{"class":1942},[92,119049,118965],{"class":207},[92,119051,26061],{"class":207},[92,119053,119054],{"class":207}," bare\n",[92,119056,119057,119059,119061,119063],{"class":94,"line":1607},[92,119058,24558],{"class":1942},[92,119060,118965],{"class":207},[92,119062,26061],{"class":207},[92,119064,119065],{"class":207}," snapd\n",[38,119067,119068],{},[1441,119069],{"alt":10,"src":119070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[38,119072,119073],{},"输入以下命令查看是否还有snap包",[83,119075,119077],{"className":117277,"code":119076,"language":117279,"meta":10,"style":10},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[89,119078,119079,119085,119089,119093,119097],{"__ignoreMap":10},[92,119080,119081,119083],{"class":94,"line":95},[92,119082,118933],{"class":1942},[92,119084,118936],{"class":207},[92,119086,119087],{"class":94,"line":11},[92,119088,118785],{"class":161},[92,119090,119091],{"class":94,"line":1158},[92,119092,118809],{"class":1942},[92,119094,119095],{"class":94,"line":1173},[92,119096,118818],{"class":161},[92,119098,119099],{"class":94,"line":1179},[92,119100,118852],{"class":1942},[38,119102,119103],{},[1441,119104],{"alt":10,"src":119105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[63,119107,119109],{"id":119108},"_324-移除snap","3.2.4 移除snap",[38,119111,119112,119113,119118],{},"在删除掉",[341,119114,119117],{"href":119115,"rel":119116},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23846],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[83,119120,119122],{"className":117277,"code":119121,"language":117279,"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,119123,119124,119129,119142,119147,119158],{"__ignoreMap":10},[92,119125,119126],{"class":94,"line":95},[92,119127,119128],{"class":161}," #使用apt移除掉snap\n",[92,119130,119131,119133,119135,119137,119140],{"class":94,"line":11},[92,119132,24558],{"class":1942},[92,119134,117298],{"class":207},[92,119136,117606],{"class":207},[92,119138,119139],{"class":151}," --purge",[92,119141,119065],{"class":207},[92,119143,119144],{"class":94,"line":1158},[92,119145,119146],{"class":161},"#移除snapd的一些目录\n",[92,119148,119149,119151,119153,119155],{"class":94,"line":1173},[92,119150,24558],{"class":1942},[92,119152,118534],{"class":207},[92,119154,25307],{"class":151},[92,119156,119157],{"class":207}," \u002Fvar\u002Fcache\u002Fsnapd\n",[92,119159,119160,119162,119164,119166],{"class":94,"line":1179},[92,119161,24558],{"class":1942},[92,119163,118534],{"class":207},[92,119165,25307],{"class":151},[92,119167,119168],{"class":207}," ~\u002Fsnap\n",[38,119170,119171,119172,119175],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[89,119173,119174],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[63,119177,119179],{"id":119178},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[38,119181,119182],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[83,119184,119186],{"className":117277,"code":119185,"language":117279,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[89,119187,119188],{"__ignoreMap":10},[92,119189,119190,119192,119194],{"class":94,"line":95},[92,119191,24558],{"class":1942},[92,119193,118564],{"class":207},[92,119195,119196],{"class":207}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[38,119198,119199,119200,119203],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[89,119201,119202],{},":wq"," 回车",[83,119205,119207],{"className":117277,"code":119206,"language":117279,"meta":10,"style":10},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[89,119208,119209,119216,119230],{"__ignoreMap":10},[92,119210,119211,119214],{"class":94,"line":95},[92,119212,119213],{"class":1942},"Package:",[92,119215,119065],{"class":207},[92,119217,119218,119221,119224,119227],{"class":94,"line":11},[92,119219,119220],{"class":1942},"Pin:",[92,119222,119223],{"class":207}," release",[92,119225,119226],{"class":207}," a=",[92,119228,119229],{"class":151},"*\n",[92,119231,119232,119235],{"class":94,"line":1158},[92,119233,119234],{"class":1942},"Pin-Priority:",[92,119236,119237],{"class":151}," -10\n",[38,119239,119240],{},[1441,119241],{"alt":10,"src":119242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[63,119244,119246],{"id":119245},"_326-测试是否成功","3.2.6 测试是否成功",[83,119248,119250],{"className":117277,"code":119249,"language":117279,"meta":10,"style":10},"sudo apt update\nsudo apt install firefox\n",[89,119251,119252,119260],{"__ignoreMap":10},[92,119253,119254,119256,119258],{"class":94,"line":95},[92,119255,24558],{"class":1942},[92,119257,117298],{"class":207},[92,119259,26224],{"class":207},[92,119261,119262,119264,119266,119268],{"class":94,"line":11},[92,119263,24558],{"class":1942},[92,119265,117298],{"class":207},[92,119267,23815],{"class":207},[92,119269,118986],{"class":207},[38,119271,119272],{},"这里提示snapd无法被安装，就证明成功了",[38,119274,119275],{},[1441,119276],{"alt":10,"src":119277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[63,119279,119281],{"id":119280},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[38,119283,119284],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[38,119286,119287],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[38,119289,119290],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[83,119292,119294],{"className":117277,"code":119293,"language":117279,"meta":10,"style":10},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[89,119295,119296,119301,119310,119315,119323],{"__ignoreMap":10},[92,119297,119298],{"class":94,"line":95},[92,119299,119300],{"class":161},"# 添加Mozilla提供的源\n",[92,119302,119303,119305,119307],{"class":94,"line":11},[92,119304,24558],{"class":1942},[92,119306,118825],{"class":207},[92,119308,119309],{"class":207}," ppa:mozillateam\u002Fppa\n",[92,119311,119312],{"class":94,"line":1158},[92,119313,119314],{"class":161},"# 安装Firefox\n",[92,119316,119317,119319,119321],{"class":94,"line":1173},[92,119318,24558],{"class":1942},[92,119320,117298],{"class":207},[92,119322,26224],{"class":207},[92,119324,119325,119327,119329,119331],{"class":94,"line":1179},[92,119326,24558],{"class":1942},[92,119328,117298],{"class":207},[92,119330,23815],{"class":207},[92,119332,118986],{"class":207},[63,119334,119336],{"id":119335},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[38,119338,119339],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[38,119341,119342],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[83,119344,119346],{"className":117277,"code":119345,"language":117279,"meta":10,"style":10},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[89,119347,119348,119353,119363,119371,119375],{"__ignoreMap":10},[92,119349,119350],{"class":94,"line":95},[92,119351,119352],{"class":161},"#删掉禁止安装snap的配置文件\n",[92,119354,119355,119357,119359,119361],{"class":94,"line":11},[92,119356,24558],{"class":1942},[92,119358,118534],{"class":207},[92,119360,25307],{"class":151},[92,119362,119196],{"class":207},[92,119364,119365,119367,119369],{"class":94,"line":1158},[92,119366,24558],{"class":1942},[92,119368,117298],{"class":207},[92,119370,26224],{"class":207},[92,119372,119373],{"class":94,"line":1173},[92,119374,2379],{"emptyLinePlaceholder":17},[92,119376,119377,119379,119381],{"class":94,"line":1179},[92,119378,24558],{"class":1942},[92,119380,117298],{"class":207},[92,119382,119383],{"class":207}," dist-update\n",[33,119385,119387],{"id":119386},"_33-中文输入法","3.3 中文输入法",[63,119389,119391],{"id":119390},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[38,119393,119394],{},"官网下载搜狗输入法",[38,119396,119397],{},[1441,119398],{"alt":10,"src":119399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[38,119401,119402],{},[1441,119403],{"alt":10,"src":119404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[38,119406,119407],{},"打开终端输入如下",[83,119409,119411],{"className":117277,"code":119410,"language":117279,"meta":10,"style":10},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[89,119412,119413,119420],{"__ignoreMap":10},[92,119414,119415,119417],{"class":94,"line":95},[92,119416,101257],{"class":151},[92,119418,119419],{"class":207}," ~\u002FDownloads\u002F\n",[92,119421,119422,119424,119426,119428],{"class":94,"line":11},[92,119423,24558],{"class":1942},[92,119425,117298],{"class":207},[92,119427,23815],{"class":207},[92,119429,119430],{"class":207}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[38,119432,119433],{},"打开Fcitx",[38,119435,119436,119439],{},[1441,119437],{"alt":10,"src":119438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1441,119440],{"alt":10,"src":119441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[38,119443,119444],{},[1441,119445],{"alt":10,"src":119446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[38,119448,119449],{},"添加搜狗输入法",[38,119451,119452],{},[1441,119453],{"alt":10,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[38,119456,119457],{},[1441,119458],{"alt":10,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[38,119461,119462],{},"将搜狗输入法设置为唯一输入法",[38,119464,119465],{},[1441,119466],{"alt":10,"src":119467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[63,119469,119471],{"id":119470},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[46,119473,119474],{},[49,119475,119476],{},"卸载旧输入法",[83,119478,119480],{"className":118504,"code":119479,"language":118506,"meta":10,"style":10},"sudo apt purge fcitx* ibus*\n",[89,119481,119482],{"__ignoreMap":10},[92,119483,119484,119486,119488,119490,119493,119495,119498],{"class":94,"line":95},[92,119485,24558],{"class":1942},[92,119487,117298],{"class":207},[92,119489,117639],{"class":207},[92,119491,119492],{"class":207}," fcitx",[92,119494,558],{"class":151},[92,119496,119497],{"class":207}," ibus",[92,119499,119229],{"class":151},[46,119501,119502],{"start":11},[49,119503,119504],{},"安装Fcitx5",[83,119506,119508],{"className":117277,"code":119507,"language":117279,"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,119509,119510,119515,119529,119533,119538,119547,119555],{"__ignoreMap":10},[92,119511,119512],{"class":94,"line":95},[92,119513,119514],{"class":161},"# Ubuntu22.04及以上、Debian12及以上\n",[92,119516,119517,119519,119521,119523,119526],{"class":94,"line":11},[92,119518,24558],{"class":1942},[92,119520,117298],{"class":207},[92,119522,23815],{"class":207},[92,119524,119525],{"class":207}," fcitx5",[92,119527,119528],{"class":207}," fcitx5-chinese-addons\n",[92,119530,119531],{"class":94,"line":1158},[92,119532,2379],{"emptyLinePlaceholder":17},[92,119534,119535],{"class":94,"line":1173},[92,119536,119537],{"class":161},"# Ubuntu20.04\n",[92,119539,119540,119542,119544],{"class":94,"line":1179},[92,119541,24558],{"class":1942},[92,119543,118825],{"class":207},[92,119545,119546],{"class":207}," ppa:zhsj\u002Ffcitx5\n",[92,119548,119549,119551,119553],{"class":94,"line":1193},[92,119550,24558],{"class":1942},[92,119552,117298],{"class":207},[92,119554,26224],{"class":207},[92,119556,119557,119559,119561,119563,119565],{"class":94,"line":1199},[92,119558,24558],{"class":1942},[92,119560,117298],{"class":207},[92,119562,23815],{"class":207},[92,119564,119525],{"class":207},[92,119566,119528],{"class":207},[46,119568,119569,119572],{"start":1158},[49,119570,119571],{},"Reboot System",[49,119573,119574],{},"启动Fcitx5",[38,119576,119577],{},[1441,119578],{"alt":10,"src":119579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[46,119581,119582],{"start":1179},[49,119583,119584],{},"修改一些设置",[38,119586,119587],{},"将Pinyin和Keyboard - English US加入到左边。",[38,119589,119590],{},[1441,119591],{"alt":10,"src":119592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[38,119594,119595],{},"添加快捷键以便于更好切换中英文",[38,119597,119598],{},[1441,119599],{"alt":10,"src":119600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[46,119602,119603],{"start":1193},[49,119604,119605],{},"重启",[83,119607,119609],{"className":118504,"code":119608,"language":118506,"meta":10,"style":10},"sudo shutdown -r now\n",[89,119610,119611],{"__ignoreMap":10},[92,119612,119613,119615,119618,119621],{"class":94,"line":95},[92,119614,24558],{"class":1942},[92,119616,119617],{"class":207}," shutdown",[92,119619,119620],{"class":151}," -r",[92,119622,119623],{"class":207}," now\n",[46,119625,119626],{"start":1199},[49,119627,119628],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[38,119630,119631],{},[341,119632,119633],{"href":119633,"rel":119634},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23846],[46,119636,119637],{"start":1290},[49,119638,119639],{},"再重启",[83,119641,119642],{"className":118504,"code":119608,"language":118506,"meta":10,"style":10},[89,119643,119644],{"__ignoreMap":10},[92,119645,119646,119648,119650,119652],{"class":94,"line":95},[92,119647,24558],{"class":1942},[92,119649,119617],{"class":207},[92,119651,119620],{"class":151},[92,119653,119623],{"class":207},[33,119655,119657],{"id":119656},"_34-pip3源替换","3.4 pip3源替换",[38,119659,119660],{},"非Debian系发行版需要做。",[38,119662,119663],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[38,119665,119666],{},"使用dnf的系统也可能不用做。",[83,119668,119670],{"className":117277,"code":119669,"language":117279,"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,119671,119672,119677,119684,119689,119694],{"__ignoreMap":10},[92,119673,119674],{"class":94,"line":95},[92,119675,119676],{"class":161},"# 检查是否已安装 pip\n",[92,119678,119679,119682],{"class":94,"line":11},[92,119680,119681],{"class":1942},"pip3",[92,119683,26275],{"class":151},[92,119685,119686],{"class":94,"line":1158},[92,119687,119688],{"class":161},"# 如果未安装，先安装 pip3（见下方）\n",[92,119690,119691],{"class":94,"line":1173},[92,119692,119693],{"class":161},"# 配置 pip 使用清华源\n",[92,119695,119696,119698,119701,119704,119707],{"class":94,"line":1179},[92,119697,119681],{"class":1942},[92,119699,119700],{"class":207}," config",[92,119702,119703],{"class":207}," set",[92,119705,119706],{"class":207}," global.index-url",[92,119708,119709],{"class":207}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[38,119711,119712],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[38,119714,119715],{},[1441,119716],{"alt":10,"src":119717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[83,119719,119721],{"className":117277,"code":119720,"language":117279,"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,119722,119723,119728,119736,119747,119751,119756,119775,119779,119784,119796,119800,119805],{"__ignoreMap":10},[92,119724,119725],{"class":94,"line":95},[92,119726,119727],{"class":161},"#安装pip3\n",[92,119729,119730,119732,119734],{"class":94,"line":11},[92,119731,24558],{"class":1942},[92,119733,117298],{"class":207},[92,119735,26224],{"class":207},[92,119737,119738,119740,119742,119744],{"class":94,"line":1158},[92,119739,24558],{"class":1942},[92,119741,26058],{"class":207},[92,119743,23815],{"class":207},[92,119745,119746],{"class":207}," python3-pip\n",[92,119748,119749],{"class":94,"line":1173},[92,119750,2379],{"emptyLinePlaceholder":17},[92,119752,119753],{"class":94,"line":1179},[92,119754,119755],{"class":161},"#更新pip3\n",[92,119757,119758,119760,119762,119764,119766,119768,119771,119773],{"class":94,"line":1193},[92,119759,100860],{"class":1942},[92,119761,100863],{"class":151},[92,119763,100886],{"class":207},[92,119765,23815],{"class":207},[92,119767,26412],{"class":151},[92,119769,119770],{"class":207}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[92,119772,100891],{"class":151},[92,119774,100894],{"class":207},[92,119776,119777],{"class":94,"line":1199},[92,119778,2379],{"emptyLinePlaceholder":17},[92,119780,119781],{"class":94,"line":1290},[92,119782,119783],{"class":161},"#设置pip源为清华源\n",[92,119785,119786,119788,119790,119792,119794],{"class":94,"line":1296},[92,119787,119681],{"class":1942},[92,119789,119700],{"class":207},[92,119791,119703],{"class":207},[92,119793,119706],{"class":207},[92,119795,119709],{"class":207},[92,119797,119798],{"class":94,"line":1308},[92,119799,2379],{"emptyLinePlaceholder":17},[92,119801,119802],{"class":94,"line":1591},[92,119803,119804],{"class":161},"#测试\n",[92,119806,119807,119809,119811,119813,119815,119817],{"class":94,"line":1596},[92,119808,100860],{"class":1942},[92,119810,100863],{"class":151},[92,119812,100886],{"class":207},[92,119814,23815],{"class":207},[92,119816,100891],{"class":151},[92,119818,100894],{"class":207},[38,119820,119821],{},"成功的话，会看到Looking后面是tsinghua字样。",[38,119823,119824],{},[1441,119825],{"alt":10,"src":119826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[33,119828,119830],{"id":119829},"_35-显卡驱动安装","3.5 显卡驱动安装",[63,119832,119834],{"id":119833},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[83,119836,119838],{"className":118504,"code":119837,"language":118506,"meta":10,"style":10},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[89,119839,119840,119845,119860,119865],{"__ignoreMap":10},[92,119841,119842],{"class":94,"line":95},[92,119843,119844],{"class":161},"# 如果是使用apt安装的驱动\n",[92,119846,119847,119849,119851,119853,119855,119858],{"class":94,"line":11},[92,119848,24558],{"class":1942},[92,119850,26058],{"class":207},[92,119852,26061],{"class":207},[92,119854,119139],{"class":151},[92,119856,119857],{"class":207}," nvidia",[92,119859,119229],{"class":151},[92,119861,119862],{"class":94,"line":1158},[92,119863,119864],{"class":161},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[92,119866,119867,119869],{"class":94,"line":1173},[92,119868,24558],{"class":1942},[92,119870,119871],{"class":207}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[63,119873,119875],{"id":119874},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21978,119877,119879],{"id":119878},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22890,119881,119883],{"id":119882},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[83,119885,119887],{"className":118504,"code":119886,"language":118506,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,119888,119889,119894,119905,119910,119920,119925],{"__ignoreMap":10},[92,119890,119891],{"class":94,"line":95},[92,119892,119893],{"class":161},"# 安装英伟达驱动\n",[92,119895,119896,119898,119900,119902],{"class":94,"line":11},[92,119897,24558],{"class":1942},[92,119899,117298],{"class":207},[92,119901,23815],{"class":207},[92,119903,119904],{"class":207}," nvidia-driver-版本号\n",[92,119906,119907],{"class":94,"line":1158},[92,119908,119909],{"class":161},"# 重启 \n",[92,119911,119912,119914,119916,119918],{"class":94,"line":1173},[92,119913,24558],{"class":1942},[92,119915,119617],{"class":207},[92,119917,119620],{"class":151},[92,119919,119623],{"class":207},[92,119921,119922],{"class":94,"line":1179},[92,119923,119924],{"class":161},"# 检查驱动是否安装成功\n",[92,119926,119927],{"class":94,"line":1193},[92,119928,119929],{"class":1942},"nvidia-smi\n",[22890,119931,119933],{"id":119932},"_35212-debian","3.5.2.1.2 Debian",[83,119935,119937],{"className":118504,"code":119936,"language":118506,"meta":10,"style":10},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,119938,119939,119943,119957,119961,119971,119975],{"__ignoreMap":10},[92,119940,119941],{"class":94,"line":95},[92,119942,119893],{"class":161},[92,119944,119945,119947,119949,119951,119954],{"class":94,"line":11},[92,119946,24558],{"class":1942},[92,119948,117298],{"class":207},[92,119950,23815],{"class":207},[92,119952,119953],{"class":207}," nvidia-driver",[92,119955,119956],{"class":207}," nvidia-settings\n",[92,119958,119959],{"class":94,"line":1158},[92,119960,119909],{"class":161},[92,119962,119963,119965,119967,119969],{"class":94,"line":1173},[92,119964,24558],{"class":1942},[92,119966,119617],{"class":207},[92,119968,119620],{"class":151},[92,119970,119623],{"class":207},[92,119972,119973],{"class":94,"line":1179},[92,119974,119924],{"class":161},[92,119976,119977],{"class":94,"line":1193},[92,119978,119929],{"class":1942},[21978,119980,119982],{"id":119981},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[38,119984,119985,119986,119989],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[252,119987,119988],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[38,119991,119992,119993],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23534,119994,119995],{},[252,119996,119997],{},"（也可以不禁用桌面环境，直接进行下一步。）",[83,119999,120001],{"className":118504,"code":120000,"language":118506,"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,120002,120003,120008,120018,120023,120036,120041],{"__ignoreMap":10},[92,120004,120005],{"class":94,"line":95},[92,120006,120007],{"class":161},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[92,120009,120010,120012,120015],{"class":94,"line":11},[92,120011,24558],{"class":1942},[92,120013,120014],{"class":207}," telinit",[92,120016,120017],{"class":151}," 3\n",[92,120019,120020],{"class":94,"line":1158},[92,120021,120022],{"class":161},"# ubuntu 使用下方命令\n",[92,120024,120025,120027,120030,120033],{"class":94,"line":1173},[92,120026,24558],{"class":1942},[92,120028,120029],{"class":207}," service",[92,120031,120032],{"class":207}," lightdm",[92,120034,120035],{"class":207}," stop\n",[92,120037,120038],{"class":94,"line":1179},[92,120039,120040],{"class":161},"# Fedora 使用下方命令\n",[92,120042,120043,120045,120047,120050],{"class":94,"line":1193},[92,120044,24558],{"class":1942},[92,120046,26495],{"class":207},[92,120048,120049],{"class":207}," isolate",[92,120051,120052],{"class":207}," multi-user.target\n",[38,120054,120055],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[83,120057,120059],{"className":118504,"code":120058,"language":118506,"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,120060,120061,120066,120077,120082,120089,120094,120106,120111,120118,120123],{"__ignoreMap":10},[92,120062,120063],{"class":94,"line":95},[92,120064,120065],{"class":161},"# 编译环境+准备工作\n",[92,120067,120068,120070,120072,120074],{"class":94,"line":11},[92,120069,24558],{"class":1942},[92,120071,117298],{"class":207},[92,120073,23815],{"class":207},[92,120075,120076],{"class":207}," build-essential\n",[92,120078,120079],{"class":94,"line":1158},[92,120080,120081],{"class":161},"# 进入到.run目录中\n",[92,120083,120084,120086],{"class":94,"line":1173},[92,120085,101257],{"class":151},[92,120087,120088],{"class":207}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[92,120090,120091],{"class":94,"line":1179},[92,120092,120093],{"class":161},"# 给驱动文件增加可执行权限：\n",[92,120095,120096,120098,120100,120103],{"class":94,"line":1193},[92,120097,24558],{"class":1942},[92,120099,24561],{"class":207},[92,120101,120102],{"class":207}," a+x",[92,120104,120105],{"class":207}," NVIDIA-Linux-x86_64-550.107.02.run\n",[92,120107,120108],{"class":94,"line":1199},[92,120109,120110],{"class":161},"# 然后执行安装：\n",[92,120112,120113,120115],{"class":94,"line":1290},[92,120114,24558],{"class":1942},[92,120116,120117],{"class":207}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[92,120119,120120],{"class":94,"line":1296},[92,120121,120122],{"class":161},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[92,120124,120125,120127,120130],{"class":94,"line":1308},[92,120126,24558],{"class":1942},[92,120128,120129],{"class":207}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[92,120131,120132],{"class":151},"  --no-opengl-files\n",[38,120134,120135],{},"安装完毕重启即可",[83,120137,120139],{"className":118504,"code":120138,"language":118506,"meta":10,"style":10},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[89,120140,120141,120145,120151,120155],{"__ignoreMap":10},[92,120142,120143],{"class":94,"line":95},[92,120144,119909],{"class":161},[92,120146,120147,120149],{"class":94,"line":11},[92,120148,24558],{"class":1942},[92,120150,26629],{"class":207},[92,120152,120153],{"class":94,"line":1158},[92,120154,119924],{"class":161},[92,120156,120157],{"class":94,"line":1173},[92,120158,119929],{"class":1942},[63,120160,120162],{"id":120161},"_353-安装cuda","3.5.3 安装CUDA",[38,120164,120165],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[38,120167,120168],{},[1441,120169],{"alt":10,"src":120170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[46,120172,120173],{},[49,120174,120175],{},"先查看显卡驱动所支持的最高CUDA版本",[83,120177,120178],{"className":118504,"code":119929,"language":118506,"meta":10,"style":10},[89,120179,120180],{"__ignoreMap":10},[92,120181,120182],{"class":94,"line":95},[92,120183,119929],{"class":1942},[38,120185,120186],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[38,120188,120189],{},[1441,120190],{"alt":10,"src":120191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[46,120193,120194],{"start":11},[49,120195,120196],{},"下载CUDA并安装CUDA",[38,120198,118283,120199],{},[341,120200,118286],{"href":118286,"rel":120201},[23846],[38,120203,120204],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[38,120206,120207],{},[1441,120208],{"alt":10,"src":120209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[38,120211,120212,120213,120218],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[341,120214,120217],{"href":120215,"rel":120216},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23846],"Vinci机器人队单片机教程","）",[38,120220,120221],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[38,120223,120224],{},[1441,120225],{"alt":10,"src":120226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[38,120228,120229],{},"将最下方框框里的命令敲入终端",[83,120231,120233],{"className":118504,"code":120232,"language":118506,"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,120234,120235,120240,120249,120254,120261,120266,120274,120279,120290,120295],{"__ignoreMap":10},[92,120236,120237],{"class":94,"line":95},[92,120238,120239],{"class":161},"# 在当前文件夹下创建一个ttt的子文件夹\n",[92,120241,120242,120244,120246],{"class":94,"line":11},[92,120243,101247],{"class":1942},[92,120245,29198],{"class":151},[92,120247,120248],{"class":207}," .\u002Fttt\n",[92,120250,120251],{"class":94,"line":1158},[92,120252,120253],{"class":161},"# 进入ttt文件夹\n",[92,120255,120256,120258],{"class":94,"line":1173},[92,120257,101257],{"class":151},[92,120259,120260],{"class":207}," ttt\n",[92,120262,120263],{"class":94,"line":1179},[92,120264,120265],{"class":161},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[92,120267,120268,120271],{"class":94,"line":1193},[92,120269,120270],{"class":1942},"wget",[92,120272,120273],{"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,120275,120276],{"class":94,"line":1199},[92,120277,120278],{"class":161},"# 给予权限\n",[92,120280,120281,120283,120285,120287],{"class":94,"line":1290},[92,120282,24558],{"class":1942},[92,120284,24561],{"class":207},[92,120286,120102],{"class":207},[92,120288,120289],{"class":207}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[92,120291,120292],{"class":94,"line":1296},[92,120293,120294],{"class":161},"# 运行脚本\n",[92,120296,120297,120299],{"class":94,"line":1308},[92,120298,24558],{"class":1942},[92,120300,120289],{"class":207},[38,120302,120303],{},[1441,120304],{"alt":10,"src":120305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[38,120307,120308],{},"正在安装中：",[38,120310,120311],{},[1441,120312],{"alt":10,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[38,120315,120316],{},"输入accept接受即可",[38,120318,120319],{},[1441,120320],{"alt":10,"src":120321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[38,120323,120324],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[38,120326,120327],{},[1441,120328],{"alt":10,"src":120329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[38,120331,120332],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[38,120334,120335],{},[1441,120336],{"alt":10,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[46,120339,120340],{"start":1158},[49,120341,120342],{},"配置环境",[38,120344,120345],{},"根据上方确认一下路径，比如我上面红色框起来的为",[83,120347,120349],{"className":118504,"code":120348,"language":118506,"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,120350,120351,120367,120382],{"__ignoreMap":10},[92,120352,120353,120356,120359,120362,120365],{"class":94,"line":95},[92,120354,120355],{"class":1942},"Please",[92,120357,120358],{"class":207}," make",[92,120360,120361],{"class":207}," sure",[92,120363,120364],{"class":207}," that",[92,120366,2653],{"class":102},[92,120368,120369,120371,120374,120377,120380],{"class":94,"line":11},[92,120370,52253],{"class":1942},[92,120372,120373],{"class":207},"   PATH",[92,120375,120376],{"class":207}," includes",[92,120378,120379],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[92,120381,2653],{"class":102},[92,120383,120384,120386,120389,120391,120394,120397,120399,120402,120405,120408,120411,120413,120416,120418],{"class":94,"line":1158},[92,120385,52253],{"class":1942},[92,120387,120388],{"class":207},"   LD_LIBRARY_PATH",[92,120390,120376],{"class":207},[92,120392,120393],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[92,120395,120396],{"class":207}," or,",[92,120398,5189],{"class":207},[92,120400,120401],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[92,120403,120404],{"class":207}," to",[92,120406,120407],{"class":207}," \u002Fetc\u002Fld.so.conf",[92,120409,120410],{"class":207}," and",[92,120412,27212],{"class":207},[92,120414,120415],{"class":207}," ldconfig",[92,120417,64586],{"class":207},[92,120419,120420],{"class":207}," root\n",[38,120422,120423],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[83,120425,120427],{"className":118504,"code":120426,"language":118506,"meta":10,"style":10},"which nvcc\n",[89,120428,120429],{"__ignoreMap":10},[92,120430,120431,120434],{"class":94,"line":95},[92,120432,120433],{"class":151},"which",[92,120435,120436],{"class":207}," nvcc\n",[38,120438,120439],{},[1441,120440],{"alt":10,"src":120441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[38,120443,120444],{},"所以我进行以下操作：",[83,120446,120448],{"className":118504,"code":120447,"language":118506,"meta":10,"style":10},"sudo vim ~\u002F.bashrc\n",[89,120449,120450],{"__ignoreMap":10},[92,120451,120452,120454,120456],{"class":94,"line":95},[92,120453,24558],{"class":1942},[92,120455,118564],{"class":207},[92,120457,120458],{"class":207}," ~\u002F.bashrc\n",[38,120460,120461],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[83,120463,120465],{"className":118504,"code":120464,"language":118506,"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,120466,120467,120479],{"__ignoreMap":10},[92,120468,120469,120471,120474,120476],{"class":94,"line":95},[92,120470,25024],{"class":98},[92,120472,120473],{"class":102}," PATH",[92,120475,148],{"class":98},[92,120477,120478],{"class":102},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[92,120480,120481,120483,120486,120488],{"class":94,"line":11},[92,120482,25024],{"class":98},[92,120484,120485],{"class":102}," LD_LIBRARY_PATH",[92,120487,148],{"class":98},[92,120489,120490],{"class":102},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[38,120492,120493],{},[1441,120494],{"alt":10,"src":120495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[83,120497,120499],{"className":118504,"code":120498,"language":118506,"meta":10,"style":10},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[89,120500,120501,120506,120512,120517],{"__ignoreMap":10},[92,120502,120503],{"class":94,"line":95},[92,120504,120505],{"class":161},"# 刷新当前终端的环境变量\n",[92,120507,120508,120510],{"class":94,"line":11},[92,120509,100874],{"class":151},[92,120511,120458],{"class":207},[92,120513,120514],{"class":94,"line":1158},[92,120515,120516],{"class":161},"# 验证CUDA是否安装成功\n",[92,120518,120519,120522],{"class":94,"line":1173},[92,120520,120521],{"class":1942},"nvcc",[92,120523,120524],{"class":151}," -V\n",[38,120526,120527],{},"出现下图这种则安装成功。",[38,120529,120530],{},[1441,120531],{"alt":10,"src":120532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[63,120534,120536],{"id":120535},"_354-安装cudnn","3.5.4 安装cuDNN",[46,120538,120539],{},[49,120540,120541],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[38,120543,120544,120545,120550],{},"前往 NVIDIA cuDNN 下载页面：",[341,120546,120549],{"href":120547,"rel":120548},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23846],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[38,120552,120553],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[38,120555,120556],{},[1441,120557],{"alt":10,"src":120558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[38,120560,120561],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[38,120563,120564],{},[1441,120565],{"alt":10,"src":120566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[38,120568,120569],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[38,120571,120572],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[38,120574,120575],{},[252,120576,120577],{},"我这里选择所有Linux X86_64最通用的办法：",[38,120579,120580],{},"下载好的：",[38,120582,120583],{},[1441,120584],{"alt":10,"src":120585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[46,120587,120588],{"start":11},[49,120589,120590],{},"安装cuDNN",[38,120592,120593],{},"找到该文件所在目录，并打开终端，cd到该目录。",[38,120595,120596],{},[1441,120597],{"alt":10,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[38,120600,120601],{},"解压文件，并复制到对应位置完成安装",[83,120603,120605],{"className":118504,"code":120604,"language":118506,"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,120606,120607,120612,120623,120628,120635,120640,120656,120670,120675,120686,120695,120699,120715],{"__ignoreMap":10},[92,120608,120609],{"class":94,"line":95},[92,120610,120611],{"class":161},"# 解压cuDNN文件\n",[92,120613,120614,120617,120620],{"class":94,"line":11},[92,120615,120616],{"class":1942},"tar",[92,120618,120619],{"class":151}," -xvf",[92,120621,120622],{"class":207}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[92,120624,120625],{"class":94,"line":1158},[92,120626,120627],{"class":161},"# cd进文件夹\n",[92,120629,120630,120632],{"class":94,"line":1173},[92,120631,101257],{"class":151},[92,120633,120634],{"class":207}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[92,120636,120637],{"class":94,"line":1179},[92,120638,120639],{"class":161},"# 复制cuDNN文件到CUDA目录\n",[92,120641,120642,120644,120646,120649,120651,120654],{"class":94,"line":1193},[92,120643,24558],{"class":1942},[92,120645,27843],{"class":207},[92,120647,120648],{"class":207}," include\u002Fcudnn",[92,120650,558],{"class":151},[92,120652,120653],{"class":207},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[92,120655,2653],{"class":102},[92,120657,120658,120660,120662,120665,120667],{"class":94,"line":1199},[92,120659,24558],{"class":1942},[92,120661,27843],{"class":207},[92,120663,120664],{"class":207}," lib\u002Flibcudnn",[92,120666,558],{"class":151},[92,120668,120669],{"class":207},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[92,120671,120672],{"class":94,"line":1290},[92,120673,120674],{"class":161},"# 对比一下有没有缺文件\n",[92,120676,120677,120679,120682,120684],{"class":94,"line":1296},[92,120678,26743],{"class":1942},[92,120680,120681],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[92,120683,558],{"class":151},[92,120685,2653],{"class":102},[92,120687,120688,120690,120693],{"class":94,"line":1308},[92,120689,26743],{"class":1942},[92,120691,120692],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[92,120694,119229],{"class":151},[92,120696,120697],{"class":94,"line":1591},[92,120698,120278],{"class":161},[92,120700,120701,120703,120705,120708,120710,120712],{"class":94,"line":1596},[92,120702,24558],{"class":1942},[92,120704,24561],{"class":207},[92,120706,120707],{"class":207}," a+r",[92,120709,120681],{"class":207},[92,120711,558],{"class":151},[92,120713,120714],{"class":102},"   \n",[92,120716,120717,120719,120721,120723,120725],{"class":94,"line":1602},[92,120718,24558],{"class":1942},[92,120720,24561],{"class":207},[92,120722,120707],{"class":207},[92,120724,120692],{"class":207},[92,120726,119229],{"class":151},[46,120728,120729],{"start":1158},[49,120730,120731],{},"检查是否安装成功",[83,120733,120735],{"className":118504,"code":120734,"language":118506,"meta":10,"style":10},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[89,120736,120737,120742],{"__ignoreMap":10},[92,120738,120739],{"class":94,"line":95},[92,120740,120741],{"class":161},"# 检查cuDNN版本命令\n",[92,120743,120744,120747,120750,120752,120754,120757,120760],{"class":94,"line":11},[92,120745,120746],{"class":1942},"cat",[92,120748,120749],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[92,120751,25091],{"class":98},[92,120753,30218],{"class":1942},[92,120755,120756],{"class":207}," CUDNN_MAJOR",[92,120758,120759],{"class":151}," -A",[92,120761,47705],{"class":151},[38,120763,120764],{},"出现下图这样的就是安装成功了",[38,120766,120767],{},[1441,120768],{"alt":10,"src":120769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[46,120771,120772],{"start":1173},[49,120773,120774],{},"软链接(一般不需要)",[83,120776,120778],{"className":118504,"code":120777,"language":118506,"meta":10,"style":10},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[89,120779,120780,120785],{"__ignoreMap":10},[92,120781,120782],{"class":94,"line":95},[92,120783,120784],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[92,120786,120787,120789],{"class":94,"line":11},[92,120788,24558],{"class":1942},[92,120790,120791],{"class":207}," ldconfig\n",[38,120793,120794],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[83,120796,120801],{"className":120797,"code":120798,"language":120799,"meta":120800,"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,120802,120803,120808,120813,120818,120823,120828,120833],{"__ignoreMap":10},[92,120804,120805],{"class":94,"line":95},[92,120806,120807],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[92,120809,120810],{"class":94,"line":11},[92,120811,120812],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[92,120814,120815],{"class":94,"line":1158},[92,120816,120817],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[92,120819,120820],{"class":94,"line":1173},[92,120821,120822],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[92,120824,120825],{"class":94,"line":1179},[92,120826,120827],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[92,120829,120830],{"class":94,"line":1193},[92,120831,120832],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[92,120834,120835],{"class":94,"line":1199},[92,120836,120837],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[38,120839,120840],{},"运行下方的命令",[83,120842,120844],{"className":118504,"code":120843,"language":118506,"meta":10,"style":10},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[89,120845,120846,120851,120858,120863],{"__ignoreMap":10},[92,120847,120848],{"class":94,"line":95},[92,120849,120850],{"class":161},"# cd进入CUDA路径\n",[92,120852,120853,120855],{"class":94,"line":11},[92,120854,101257],{"class":151},[92,120856,120857],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[92,120859,120860],{"class":94,"line":1158},[92,120861,120862],{"class":161}," # 查看本路径下的需要软链接的文件名\n",[92,120864,120865],{"class":94,"line":1173},[92,120866,120867],{"class":1942}," ls\n",[38,120869,120870],{},[1441,120871],{"alt":10,"src":120872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[38,120874,120875,120876,18390,120879,18390,120882,120885],{},"如上图，我需要将",[89,120877,120878],{},"libcudnn_xxx_xxxxx.so.8.9.7",[89,120880,120881],{},"libcudnn_xxx_xxxxx.so.8",[89,120883,120884],{},"libcudnn_xxx_xxxxx.so","软链接",[83,120887,120889],{"className":118504,"code":120888,"language":118506,"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,120890,120891,120896,120912,120926,120940,120954,120968,120982,120996,121001,121007,121012],{"__ignoreMap":10},[92,120892,120893],{"class":94,"line":95},[92,120894,120895],{"class":161},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[92,120897,120898,120900,120903,120906,120909],{"class":94,"line":11},[92,120899,24558],{"class":1942},[92,120901,120902],{"class":207}," ln",[92,120904,120905],{"class":151}," -sf",[92,120907,120908],{"class":207}," libcudnn_cnn_train.so.8.9.7",[92,120910,120911],{"class":207}," libcudnn_cnn_train.so.8\n",[92,120913,120914,120916,120918,120920,120923],{"class":94,"line":1158},[92,120915,24558],{"class":1942},[92,120917,120902],{"class":207},[92,120919,120905],{"class":151},[92,120921,120922],{"class":207}," libcudnn_adv_infer.so.8.9.7",[92,120924,120925],{"class":207}," libcudnn_adv_infer.so.8\n",[92,120927,120928,120930,120932,120934,120937],{"class":94,"line":1173},[92,120929,24558],{"class":1942},[92,120931,120902],{"class":207},[92,120933,120905],{"class":151},[92,120935,120936],{"class":207}," libcudnn_adv_train.so.8.9.7",[92,120938,120939],{"class":207}," libcudnn_adv_train.so.8\n",[92,120941,120942,120944,120946,120948,120951],{"class":94,"line":1179},[92,120943,24558],{"class":1942},[92,120945,120902],{"class":207},[92,120947,120905],{"class":151},[92,120949,120950],{"class":207}," libcudnn_cnn_infer.so.8.9.7",[92,120952,120953],{"class":207}," libcudnn_cnn_infer.so.8\n",[92,120955,120956,120958,120960,120962,120965],{"class":94,"line":1193},[92,120957,24558],{"class":1942},[92,120959,120902],{"class":207},[92,120961,120905],{"class":151},[92,120963,120964],{"class":207}," libcudnn.so.8.9.7",[92,120966,120967],{"class":207}," libcudnn.so.8\n",[92,120969,120970,120972,120974,120976,120979],{"class":94,"line":1199},[92,120971,24558],{"class":1942},[92,120973,120902],{"class":207},[92,120975,120905],{"class":151},[92,120977,120978],{"class":207}," libcudnn_ops_infer.so.8.9.7",[92,120980,120981],{"class":207}," libcudnn_ops_infer.so.8\n",[92,120983,120984,120986,120988,120990,120993],{"class":94,"line":1290},[92,120985,24558],{"class":1942},[92,120987,120902],{"class":207},[92,120989,120905],{"class":151},[92,120991,120992],{"class":207}," libcudnn_ops_train.so.8.9.7",[92,120994,120995],{"class":207}," libcudnn_ops_train.so.8\n",[92,120997,120998],{"class":94,"line":1296},[92,120999,121000],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[92,121002,121003,121005],{"class":94,"line":1308},[92,121004,24558],{"class":1942},[92,121006,120791],{"class":207},[92,121008,121009],{"class":94,"line":1591},[92,121010,121011],{"class":161},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[92,121013,121014,121016,121019,121022,121024,121027],{"class":94,"line":1596},[92,121015,26743],{"class":1942},[92,121017,121018],{"class":151}," -l",[92,121020,121021],{"class":207}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[92,121023,558],{"class":151},[92,121025,121026],{"class":207},".so",[92,121028,119229],{"class":151},[63,121030,121032],{"id":121031},"_355-常见问题","3.5.5 常见问题",[46,121034,121035],{},[49,121036,121037],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[83,121039,121041],{"className":118504,"code":121040,"language":118506,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[89,121042,121043],{"__ignoreMap":10},[92,121044,121045,121047,121049],{"class":94,"line":95},[92,121046,24558],{"class":1942},[92,121048,118564],{"class":207},[92,121050,121051],{"class":207}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[38,121053,121054],{},"blacklist-nouveau.conf文件内容如下：",[83,121056,121058],{"className":118504,"code":121057,"language":118506,"meta":10,"style":10},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[89,121059,121060,121068,121075,121087,121097],{"__ignoreMap":10},[92,121061,121062,121065],{"class":94,"line":95},[92,121063,121064],{"class":1942},"blacklist",[92,121066,121067],{"class":207}," nouveau\n",[92,121069,121070,121072],{"class":94,"line":11},[92,121071,121064],{"class":1942},[92,121073,121074],{"class":207}," lbm-nouveau\n",[92,121076,121077,121079,121082,121085],{"class":94,"line":1158},[92,121078,115911],{"class":1942},[92,121080,121081],{"class":207}," nouveau",[92,121083,121084],{"class":207}," modeset=",[92,121086,3064],{"class":151},[92,121088,121089,121092,121094],{"class":94,"line":1173},[92,121090,121091],{"class":151},"alias",[92,121093,121081],{"class":207},[92,121095,121096],{"class":207}," off\n",[92,121098,121099,121101,121104],{"class":94,"line":1179},[92,121100,121091],{"class":151},[92,121102,121103],{"class":207}," lbm-nouveau",[92,121105,121096],{"class":207},[38,121107,121108],{},"接着运行下方命令",[83,121110,121112],{"className":118504,"code":121111,"language":118506,"meta":10,"style":10},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[89,121113,121114,121124,121129],{"__ignoreMap":10},[92,121115,121116,121118,121121],{"class":94,"line":95},[92,121117,24558],{"class":1942},[92,121119,121120],{"class":207}," update-initramfs",[92,121122,121123],{"class":151}," -u\n",[92,121125,121126],{"class":94,"line":11},[92,121127,121128],{"class":1942},"或者\n",[92,121130,121131,121133,121136],{"class":94,"line":1158},[92,121132,24558],{"class":1942},[92,121134,121135],{"class":207}," dracut",[92,121137,121138],{"class":151}," --force\n",[38,121140,121141],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[83,121143,121145],{"className":118504,"code":121144,"language":118506,"meta":10,"style":10},"lsmod | grep nouveau\n",[89,121146,121147],{"__ignoreMap":10},[92,121148,121149,121152,121154,121156],{"class":94,"line":95},[92,121150,121151],{"class":1942},"lsmod",[92,121153,25091],{"class":98},[92,121155,30218],{"class":1942},[92,121157,121067],{"class":207},[46,121159,121160],{"start":11},[49,121161,121162],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[83,121164,121166],{"className":118504,"code":121165,"language":118506,"meta":10,"style":10},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[89,121167,121168],{"__ignoreMap":10},[92,121169,121170,121172,121174],{"class":94,"line":95},[92,121171,24558],{"class":1942},[92,121173,118564],{"class":207},[92,121175,121176],{"class":207}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[38,121178,121179],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[83,121181,121183],{"className":118504,"code":121182,"language":118506,"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,121184,121185,121193,121201,121209,121216,121224,121234,121242],{"__ignoreMap":10},[92,121186,121187,121190],{"class":94,"line":95},[92,121188,121189],{"class":1942},"Section",[92,121191,121192],{"class":207}," \"OutputClass\"\n",[92,121194,121195,121198],{"class":94,"line":11},[92,121196,121197],{"class":1942},"   Identifier",[92,121199,121200],{"class":207}," \"nvidia\"\n",[92,121202,121203,121206],{"class":94,"line":1158},[92,121204,121205],{"class":1942},"   MatchDriver",[92,121207,121208],{"class":207}," \"nvidia-drm\"\n",[92,121210,121211,121214],{"class":94,"line":1173},[92,121212,121213],{"class":1942},"   Driver",[92,121215,121200],{"class":207},[92,121217,121218,121221],{"class":94,"line":1179},[92,121219,121220],{"class":1942},"   Option",[92,121222,121223],{"class":207}," \"AllowEmptyInitialConfiguration\"\n",[92,121225,121226,121228,121231],{"class":94,"line":1193},[92,121227,121220],{"class":1942},[92,121229,121230],{"class":207}," \"PrimaryGPU\"",[92,121232,121233],{"class":207}," \"yes\"\n",[92,121235,121236,121239],{"class":94,"line":1199},[92,121237,121238],{"class":1942},"   ModulePath",[92,121240,121241],{"class":207}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[92,121243,121244],{"class":94,"line":1290},[92,121245,121246],{"class":1942},"EndSection\n",[46,121248,121249],{"start":1158},[49,121250,121251],{},"安装N卡驱动提示错误",[83,121253,121255],{"className":120797,"code":121254,"language":120799,"meta":120800,"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,121256,121257],{"__ignoreMap":10},[92,121258,121259],{"class":94,"line":95},[92,121260,121254],{},[46,121262,121263],{},[49,121264,121265],{},"检查当前运行的内核版本：",[38,121267,121268],{},"运行以下命令以查看你当前正在使用的内核版本：",[83,121270,121272],{"className":117277,"code":121271,"language":117279,"meta":10,"style":10},"uname -r\n",[89,121273,121274],{"__ignoreMap":10},[92,121275,121276,121278],{"class":94,"line":95},[92,121277,70186],{"class":1942},[92,121279,121280],{"class":151}," -r\n",[46,121282,121283],{"start":11},[49,121284,121285],{},"安装内核开发文件：",[38,121287,121288,121289,121292],{},"确保你已经安装了与当前内核版本相匹配的 ",[89,121290,121291],{},"kernel-devel"," 包。运行以下命令来安装：",[83,121294,121296],{"className":117277,"code":121295,"language":117279,"meta":10,"style":10},"sudo dnf install kernel-devel-$(uname -r)\n",[89,121297,121298],{"__ignoreMap":10},[92,121299,121300,121302,121304,121306,121309,121311,121313,121315],{"class":94,"line":95},[92,121301,24558],{"class":1942},[92,121303,26297],{"class":207},[92,121305,23815],{"class":207},[92,121307,121308],{"class":207}," kernel-devel-",[92,121310,25081],{"class":102},[92,121312,70186],{"class":1942},[92,121314,119620],{"class":151},[92,121316,109],{"class":102},[38,121318,121319],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[46,121321,121322],{"start":1158},[49,121323,121324],{},"安装内核源代码（如果需要）：",[38,121326,121327],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[83,121329,121331],{"className":117277,"code":121330,"language":117279,"meta":10,"style":10},"sudo dnf install kernel-headers kernel-source\n",[89,121332,121333],{"__ignoreMap":10},[92,121334,121335,121337,121339,121341,121344],{"class":94,"line":95},[92,121336,24558],{"class":1942},[92,121338,26297],{"class":207},[92,121340,23815],{"class":207},[92,121342,121343],{"class":207}," kernel-headers",[92,121345,121346],{"class":207}," kernel-source\n",[46,121348,121349],{"start":1173},[49,121350,121351],{},"检查安装：",[38,121353,121354,121355,121358],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[89,121356,121357],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[83,121360,121362],{"className":117277,"code":121361,"language":117279,"meta":10,"style":10},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[89,121363,121364],{"__ignoreMap":10},[92,121365,121366,121368],{"class":94,"line":95},[92,121367,26743],{"class":1942},[92,121369,121370],{"class":207}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[38,121372,121373,121374,121377],{},"如果仍然遇到问题，可以通过 ",[89,121375,121376],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5106,121379,121380],{},"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":121382},[121383,121387,121397,121401,121402],{"id":118480,"depth":11,"text":118481,"children":121384},[121385,121386],{"id":118490,"depth":1158,"text":118491},{"id":118500,"depth":1158,"text":118501},{"id":118700,"depth":11,"text":118701,"children":121388},[121389,121390,121391,121392,121393,121394,121395,121396],{"id":118704,"depth":1158,"text":118705},{"id":118774,"depth":1158,"text":118775},{"id":118863,"depth":1158,"text":118864},{"id":119108,"depth":1158,"text":119109},{"id":119178,"depth":1158,"text":119179},{"id":119245,"depth":1158,"text":119246},{"id":119280,"depth":1158,"text":119281},{"id":119335,"depth":1158,"text":119336},{"id":119386,"depth":11,"text":119387,"children":121398},[121399,121400],{"id":119390,"depth":1158,"text":119391},{"id":119470,"depth":1158,"text":119471},{"id":119656,"depth":11,"text":119657},{"id":119829,"depth":11,"text":119830,"children":121403},[121404,121405,121406,121407,121408],{"id":119833,"depth":1158,"text":119834},{"id":119874,"depth":1158,"text":119875},{"id":120161,"depth":1158,"text":120162},{"id":120535,"depth":1158,"text":120536},{"id":121031,"depth":1158,"text":121032},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118472,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121415,"title":121416,"body":121417,"description":23357,"extension":14,"meta":121757,"navigation":17,"path":121758,"seo":121759,"stem":121760,"__hash__":121761},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121418,"toc":121755},[121419,121422,121427,121430,121676,121681,121684,121720,121723,121752],[29,121420,121416],{"id":121421},"_4-命令教程长期积累",[46,121423,121424],{},[49,121425,121426],{},"大多数命令",[38,121428,121429],{},"常用 Linux 命令速查：",[83,121431,121433],{"className":117277,"code":121432,"language":117279,"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,121434,121435,121440,121447,121454,121462,121469,121476,121484,121492,121499,121506,121514,121518,121523,121530,121538,121545,121549,121554,121561,121569,121577,121585,121593,121597,121602,121610,121617,121624,121632,121640,121644,121649,121658,121667],{"__ignoreMap":10},[92,121436,121437],{"class":94,"line":95},[92,121438,121439],{"class":161},"# 文件与目录\n",[92,121441,121442,121444],{"class":94,"line":11},[92,121443,26743],{"class":1942},[92,121445,121446],{"class":161},"        # 列出目录内容\n",[92,121448,121449,121451],{"class":94,"line":1158},[92,121450,101257],{"class":151},[92,121452,121453],{"class":161},"        # 切换目录\n",[92,121455,121456,121459],{"class":94,"line":1173},[92,121457,121458],{"class":151},"pwd",[92,121460,121461],{"class":161},"       # 显示当前路径\n",[92,121463,121464,121466],{"class":94,"line":1179},[92,121465,101247],{"class":1942},[92,121467,121468],{"class":161},"     # 创建目录\n",[92,121470,121471,121473],{"class":94,"line":1193},[92,121472,25304],{"class":1942},[92,121474,121475],{"class":161},"        # 删除文件或目录\n",[92,121477,121478,121481],{"class":94,"line":1199},[92,121479,121480],{"class":1942},"cp",[92,121482,121483],{"class":161},"        # 复制文件或目录\n",[92,121485,121486,121489],{"class":94,"line":1290},[92,121487,121488],{"class":1942},"mv",[92,121490,121491],{"class":161},"        # 移动\u002F重命名文件或目录\n",[92,121493,121494,121496],{"class":94,"line":1296},[92,121495,101264],{"class":1942},[92,121497,121498],{"class":161},"     # 创建空文件\n",[92,121500,121501,121503],{"class":94,"line":1308},[92,121502,120746],{"class":1942},[92,121504,121505],{"class":161},"       # 查看文件内容\n",[92,121507,121508,121511],{"class":94,"line":1591},[92,121509,121510],{"class":1942},"head\u002Ftail",[92,121512,121513],{"class":161}," # 查看文件头部\u002F尾部\n",[92,121515,121516],{"class":94,"line":1596},[92,121517,2379],{"emptyLinePlaceholder":17},[92,121519,121520],{"class":94,"line":1602},[92,121521,121522],{"class":161},"# 权限管理\n",[92,121524,121525,121527],{"class":94,"line":1607},[92,121526,24593],{"class":1942},[92,121528,121529],{"class":161},"     # 修改文件权限\n",[92,121531,121532,121535],{"class":94,"line":1621},[92,121533,121534],{"class":1942},"chown",[92,121536,121537],{"class":161},"     # 修改文件所有者\n",[92,121539,121540,121542],{"class":94,"line":1626},[92,121541,24558],{"class":1942},[92,121543,121544],{"class":161},"      # 以管理员身份执行\n",[92,121546,121547],{"class":94,"line":1632},[92,121548,2379],{"emptyLinePlaceholder":17},[92,121550,121551],{"class":94,"line":1653},[92,121552,121553],{"class":161},"# 系统信息\n",[92,121555,121556,121558],{"class":94,"line":1658},[92,121557,70186],{"class":1942},[92,121559,121560],{"class":161},"     # 系统信息\n",[92,121562,121563,121566],{"class":94,"line":1672},[92,121564,121565],{"class":1942},"df",[92,121567,121568],{"class":161},"        # 磁盘使用情况\n",[92,121570,121571,121574],{"class":94,"line":1677},[92,121572,121573],{"class":1942},"free",[92,121575,121576],{"class":161},"      # 内存使用情况\n",[92,121578,121579,121582],{"class":94,"line":1706},[92,121580,121581],{"class":1942},"top\u002Fhtop",[92,121583,121584],{"class":161},"  # 进程监控\n",[92,121586,121587,121590],{"class":94,"line":1711},[92,121588,121589],{"class":1942},"ps",[92,121591,121592],{"class":161},"        # 查看进程\n",[92,121594,121595],{"class":94,"line":1728},[92,121596,2379],{"emptyLinePlaceholder":17},[92,121598,121599],{"class":94,"line":1733},[92,121600,121601],{"class":161},"# 网络\n",[92,121603,121604,121607],{"class":94,"line":1738},[92,121605,121606],{"class":1942},"ping",[92,121608,121609],{"class":161},"      # 测试网络连通性\n",[92,121611,121612,121614],{"class":94,"line":1743},[92,121613,26831],{"class":1942},[92,121615,121616],{"class":161},"      # 发送 HTTP 请求\n",[92,121618,121619,121621],{"class":94,"line":1757},[92,121620,120270],{"class":1942},[92,121622,121623],{"class":161},"      # 下载文件\n",[92,121625,121626,121629],{"class":94,"line":1762},[92,121627,121628],{"class":1942},"ssh",[92,121630,121631],{"class":161},"       # 远程登录\n",[92,121633,121634,121637],{"class":94,"line":2556},[92,121635,121636],{"class":1942},"scp",[92,121638,121639],{"class":161},"       # 远程文件传输\n",[92,121641,121642],{"class":94,"line":2570},[92,121643,2379],{"emptyLinePlaceholder":17},[92,121645,121646],{"class":94,"line":2578},[92,121647,121648],{"class":161},"# 包管理（Debian\u002FUbuntu）\n",[92,121650,121651,121653,121655],{"class":94,"line":2583},[92,121652,117349],{"class":1942},[92,121654,117328],{"class":207},[92,121656,121657],{"class":161},"   # 更新软件源\n",[92,121659,121660,121662,121664],{"class":94,"line":2589},[92,121661,117349],{"class":1942},[92,121663,23815],{"class":207},[92,121665,121666],{"class":161},"  # 安装软件包\n",[92,121668,121669,121671,121673],{"class":94,"line":2595},[92,121670,117349],{"class":1942},[92,121672,26061],{"class":207},[92,121674,121675],{"class":161},"   # 卸载软件包\n",[46,121677,121678],{"start":11},[49,121679,121680],{},"KDE Dolphin 以root打开",[38,121682,121683],{},"kde5",[83,121685,121687],{"className":117277,"code":121686,"language":117279,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[89,121688,121689],{"__ignoreMap":10},[92,121690,121691,121694,121697,121700,121702,121704,121707,121710,121712,121715,121717],{"class":94,"line":95},[92,121692,121693],{"class":1942},"pkexec",[92,121695,121696],{"class":207}," env",[92,121698,121699],{"class":207}," DISPLAY=",[92,121701,28125],{"class":102},[92,121703,28183],{"class":207},[92,121705,121706],{"class":102},"$XAUTHORITY ",[92,121708,121709],{"class":207},"KDE_SESSION_VERSION=",[92,121711,422],{"class":151},[92,121713,121714],{"class":207}," KDE_FULL_SESSION=",[92,121716,1341],{"class":151},[92,121718,121719],{"class":207}," dolphin\n",[38,121721,121722],{},"kde6",[83,121724,121726],{"className":117277,"code":121725,"language":117279,"meta":10,"style":10},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[89,121727,121728],{"__ignoreMap":10},[92,121729,121730,121732,121734,121736,121738,121740,121742,121744,121746,121748,121750],{"class":94,"line":95},[92,121731,121693],{"class":1942},[92,121733,121696],{"class":207},[92,121735,121699],{"class":207},[92,121737,28125],{"class":102},[92,121739,28183],{"class":207},[92,121741,121706],{"class":102},[92,121743,121709],{"class":207},[92,121745,447],{"class":151},[92,121747,121714],{"class":207},[92,121749,1341],{"class":151},[92,121751,121719],{"class":207},[5106,121753,121754],{},"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":121756},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121416,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121763,"title":121764,"body":121765,"description":23357,"extension":14,"meta":121779,"navigation":17,"path":121780,"seo":121781,"stem":121782,"__hash__":121783},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121766,"toc":121777},[121767,121770],[29,121768,121764],{"id":121769},"_5-各种环境配置",[38,121771,121772],{},[341,121773,121776],{"href":121774,"rel":121775},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23846],"电控组环境搭建大全",{"title":10,"searchDepth":11,"depth":11,"links":121778},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121764,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121785,"title":121786,"body":121787,"description":23357,"extension":14,"meta":122135,"navigation":17,"path":122136,"seo":122137,"stem":122138,"__hash__":122139},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121788,"toc":122127},[121789,121792,121796,121800,121804,121809,121816,121820,122113,122117,122124],[29,121790,121786],{"id":121791},"_6-拓展功能",[33,121793,121795],{"id":121794},"_61-wine","6.1 Wine",[33,121797,121799],{"id":121798},"_62-android","6.2 Android",[63,121801,121803],{"id":121802},"_621-i卡a卡","6.2.1 I卡、A卡",[46,121805,121806],{},[49,121807,121808],{},"Wayland-Waydroid(体验超级好)",[38,121810,121811,121812],{},"Waydroid 官网与安装指南：",[341,121813,121814],{"href":121814,"rel":121815},"https:\u002F\u002Fwaydro.id\u002F",[23846],[63,121817,121819],{"id":121818},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[46,121821,121822],{},[49,121823,121824,121825,121827,121828,121832,121834,121837,121842,122039],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53698,121826],{},"BlissOS 官网下载：",[341,121829,121830],{"href":121830,"rel":121831},"https:\u002F\u002Fblissos.org\u002F",[23846],[53698,121833],{},[1441,121835],{"alt":10,"src":121836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[46,121838,121839],{"start":1158},[49,121840,121841],{},"比较推荐的配置",[83,121843,121845],{"className":117277,"code":121844,"language":117279,"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,121846,121847,121854,121864,121874,121884,121896,121906,121913,121923,121932,121941,121951,121961,121970,121980,121990,122002,122012,122021,122031],{"__ignoreMap":10},[92,121848,121849,121852],{"class":94,"line":95},[92,121850,121851],{"class":1942},"qemu-system-x86_64",[92,121853,24660],{"class":151},[92,121855,121856,121859,121862],{"class":94,"line":11},[92,121857,121858],{"class":151},"        -M",[92,121860,121861],{"class":207}," q35,vmport=off",[92,121863,24660],{"class":151},[92,121865,121866,121869,121872],{"class":94,"line":1158},[92,121867,121868],{"class":151},"        -accel",[92,121870,121871],{"class":207}," kvm",[92,121873,24660],{"class":151},[92,121875,121876,121879,121882],{"class":94,"line":1173},[92,121877,121878],{"class":151},"        -cpu",[92,121880,121881],{"class":207}," qemu64,+sse3,+sse4.2",[92,121883,24660],{"class":151},[92,121885,121886,121889,121892,121894],{"class":94,"line":1179},[92,121887,121888],{"class":151},"        -smp",[92,121890,121891],{"class":207}," 8,cores=",[92,121893,396],{"class":151},[92,121895,24660],{"class":151},[92,121897,121898,121901,121904],{"class":94,"line":1193},[92,121899,121900],{"class":151},"        -m",[92,121902,121903],{"class":207}," 6G",[92,121905,24660],{"class":151},[92,121907,121908,121911],{"class":94,"line":1199},[92,121909,121910],{"class":151},"        -usb",[92,121912,24660],{"class":151},[92,121914,121915,121918,121921],{"class":94,"line":1290},[92,121916,121917],{"class":151},"        -device",[92,121919,121920],{"class":207}," virtio-tablet",[92,121922,24660],{"class":151},[92,121924,121925,121927,121930],{"class":94,"line":1296},[92,121926,121917],{"class":151},[92,121928,121929],{"class":207}," virtio-keyboard",[92,121931,24660],{"class":151},[92,121933,121934,121936,121939],{"class":94,"line":1308},[92,121935,121917],{"class":151},[92,121937,121938],{"class":207}," usb-tablet",[92,121940,24660],{"class":151},[92,121942,121943,121946,121949],{"class":94,"line":1591},[92,121944,121945],{"class":151},"        -bios",[92,121947,121948],{"class":207}," OVMF-pure-efi64.fd",[92,121950,24660],{"class":151},[92,121952,121953,121956,121959],{"class":94,"line":1596},[92,121954,121955],{"class":151},"        -net",[92,121957,121958],{"class":207}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[92,121960,24660],{"class":151},[92,121962,121963,121965,121968],{"class":94,"line":1602},[92,121964,121955],{"class":151},[92,121966,121967],{"class":207}," nic,model=virtio",[92,121969,24660],{"class":151},[92,121971,121972,121975,121978],{"class":94,"line":1607},[92,121973,121974],{"class":151},"        -audio",[92,121976,121977],{"class":207}," sdl,model=hda",[92,121979,24660],{"class":151},[92,121981,121982,121985,121988],{"class":94,"line":1621},[92,121983,121984],{"class":151},"        -display",[92,121986,121987],{"class":207}," sdl,gl=on,show-cursor=on",[92,121989,24660],{"class":151},[92,121991,121992,121994,121997,122000],{"class":94,"line":1626},[92,121993,121917],{"class":151},[92,121995,121996],{"class":207}," virtio-vga-gl,xres=1920,yres=",[92,121998,121999],{"class":151},"1080",[92,122001,24660],{"class":151},[92,122003,122004,122007,122010],{"class":94,"line":1632},[92,122005,122006],{"class":151},"        -drive",[92,122008,122009],{"class":207}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[92,122011,24660],{"class":151},[92,122013,122014,122016,122019],{"class":94,"line":1653},[92,122015,122006],{"class":151},[92,122017,122018],{"class":207}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[92,122020,24660],{"class":151},[92,122022,122023,122026,122029],{"class":94,"line":1658},[92,122024,122025],{"class":151},"        -monitor",[92,122027,122028],{"class":207}," stdio",[92,122030,24660],{"class":151},[92,122032,122033,122036],{"class":94,"line":1672},[92,122034,122035],{"class":151},"        -serial",[92,122037,122038],{"class":207}," none\n",[46,122040,122041],{"start":1179},[49,122042,122043,122044],{},"常用操作：",[46,122045,122046,122049,122105],{},[49,122047,122048],{},"全屏：Ctrl+Alt+F",[49,122050,122051,122052,122057],{},"adb调试",[46,122053,122054],{},[49,122055,122056],{},"使Linux与Android用ADB连接。",[83,122058,122060],{"className":117277,"code":122059,"language":117279,"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,122061,122062,122067,122078,122083,122095,122100],{"__ignoreMap":10},[92,122063,122064],{"class":94,"line":95},[92,122065,122066],{"class":161},"# 连接安卓\n",[92,122068,122069,122072,122075],{"class":94,"line":11},[92,122070,122071],{"class":1942},"adb",[92,122073,122074],{"class":207}," connect",[92,122076,122077],{"class":151}," 127.0.0.1\n",[92,122079,122080],{"class":94,"line":1158},[92,122081,122082],{"class":161},"# 打开shell\n",[92,122084,122085,122087,122089,122092],{"class":94,"line":1173},[92,122086,122071],{"class":1942},[92,122088,26865],{"class":151},[92,122090,122091],{"class":207}," 127.0.0.1:5555",[92,122093,122094],{"class":207}," shell\n",[92,122096,122097],{"class":94,"line":1179},[92,122098,122099],{"class":161},"# 使用root权限\n",[92,122101,122102],{"class":94,"line":1193},[92,122103,122104],{"class":1942},"su\n",[49,122106,122107,122108],{},"中文输入法",[46,122109,122110],{},[49,122111,122112],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[33,122114,122116],{"id":122115},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[38,122118,122119,122120],{},"rEFInd 官网与文档：",[341,122121,122122],{"href":122122,"rel":122123},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23846],[5106,122125,122126],{},"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":122128},[122129,122130,122134],{"id":121794,"depth":11,"text":121795},{"id":121798,"depth":11,"text":121799,"children":122131},[122132,122133],{"id":121802,"depth":1158,"text":121803},{"id":121818,"depth":1158,"text":121819},{"id":122115,"depth":11,"text":122116},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121786,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122141,"title":122142,"body":122143,"description":23357,"extension":14,"meta":125442,"navigation":17,"path":125443,"seo":125444,"stem":125445,"__hash__":125446},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122144,"toc":125416},[122145,122148,122152,122155,122162,122412,122415,122487,122490,122494,122498,122503,122506,122509,122512,122517,122520,122523,122526,122531,122534,122539,122542,122545,122550,122553,122558,122561,122565,122569,122572,122577,122580,122594,122597,122600,122609,122612,122621,122624,122627,122636,122639,122648,122651,122654,122663,122666,122669,122684,122687,122690,122699,122704,122707,122710,122719,122722,122731,122734,122743,122746,122755,122760,122763,122771,122776,122779,122788,122791,122799,122804,122807,122816,122819,122822,122826,122829,122834,122837,122842,122856,122861,122866,122877,122882,122888,122893,122908,122913,122916,122921,122926,122931,122939,122944,122951,122956,122967,122972,122975,122979,122982,122985,122990,122993,123012,123017,123020,123029,123034,123037,123059,123062,123092,123095,123100,123103,123117,123122,123141,123144,123147,123152,123164,123169,123174,123177,123182,123185,123200,123203,123208,123213,123217,123222,123262,123265,123269,123275,123281,123286,123289,123296,123301,123308,123311,123314,123321,123335,123338,123398,123401,123415,123427,123430,123433,123436,123500,123503,123506,123509,123529,123532,123537,123544,123548,123551,123555,123560,123565,123569,123572,123575,123617,123622,123625,123647,123662,123664,123669,123681,123741,123743,123745,123799,123801,123803,123809,123814,123817,123822,123826,123829,123891,123896,123899,123901,123905,123917,123999,124001,124003,124057,124063,124065,124069,124074,124076,124081,124085,124105,124140,124144,124147,124150,124153,124160,124163,124175,124178,124193,124196,124215,124263,124266,124283,124286,124300,124305,124308,124317,124332,124344,124382,124387,124396,124401,124406,124432,124441,124445,124449,124454,124457,124461,124465,124470,124473,124478,124481,124486,124489,124494,124497,124501,124506,124509,124514,124517,124521,124526,124529,124534,124537,124542,124545,124549,124554,124557,124562,124565,124570,124573,124577,124582,124585,124590,124593,124598,124601,124606,124609,124614,124617,124622,124625,124629,124634,124637,124642,124649,124653,124658,124661,124666,124669,124673,124678,124681,124684,124687,124690,124693,124697,124700,124710,124715,124720,124742,124747,124752,124759,124763,124768,124771,124774,124779,124782,124785,124788,124791,124794,124797,124800,124803,124806,124809,124812,124815,124820,124825,124830,124835,124840,124845,124850,124853,124857,124860,124864,124869,124874,124879,124884,124888,124894,124902,124907,124910,124915,124930,124933,124938,124972,124987,124990,125045,125071,125083,125086,125095,125098,125113,125118,125121,125127,125132,125135,125140,125143,125148,125153,125160,125163,125178,125181,125216,125221,125229,125267,125270,125273,125278,125281,125286,125297,125331,125336,125339,125348,125353,125359,125362,125367,125376,125381,125384,125387,125392,125400,125403,125408,125413],[29,122146,122142],{"id":122147},"_7-其他操作",[33,122149,122151],{"id":122150},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[38,122153,122154],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[38,122156,122157,122158,122161],{},"进入工控机的硬盘目录，进入",[89,122159,122160],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[83,122163,122167],{"className":122164,"code":122165,"language":122166,"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,122168,122169,122177,122188,122195,122202,122214,122221,122233,122244,122255,122262,122269,122276,122288,122300,122307,122319,122331,122338,122350,122362,122374,122385,122392,122403],{"__ignoreMap":10},[92,122170,122171,122174],{"class":94,"line":95},[92,122172,122173],{"class":51282},"network",[92,122175,122176],{"class":102},": \n",[92,122178,122179,122182,122184,122186],{"class":94,"line":11},[92,122180,122181],{"class":51282},"  version",[92,122183,51419],{"class":102},[92,122185,180],{"class":151},[92,122187,2653],{"class":102},[92,122189,122190,122193],{"class":94,"line":1158},[92,122191,122192],{"class":51282},"  wifis",[92,122194,122176],{"class":102},[92,122196,122197,122200],{"class":94,"line":1173},[92,122198,122199],{"class":51282},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[92,122201,122176],{"class":102},[92,122203,122204,122207,122209,122212],{"class":94,"line":1179},[92,122205,122206],{"class":51282},"      renderer",[92,122208,51419],{"class":102},[92,122210,122211],{"class":207},"NetworkManager",[92,122213,2653],{"class":102},[92,122215,122216,122219],{"class":94,"line":1193},[92,122217,122218],{"class":51282},"      match",[92,122220,122176],{"class":102},[92,122222,122223,122226,122228,122231],{"class":94,"line":1199},[92,122224,122225],{"class":51282},"        name",[92,122227,51419],{"class":102},[92,122229,122230],{"class":207},"\"wlan0\"",[92,122232,2653],{"class":102},[92,122234,122235,122238,122240,122242],{"class":94,"line":1290},[92,122236,122237],{"class":51282},"      dhcp4",[92,122239,51419],{"class":102},[92,122241,1341],{"class":151},[92,122243,2653],{"class":102},[92,122245,122246,122249,122251,122253],{"class":94,"line":1296},[92,122247,122248],{"class":51282},"      dhcp6",[92,122250,51419],{"class":102},[92,122252,1341],{"class":151},[92,122254,2653],{"class":102},[92,122256,122257,122260],{"class":94,"line":1308},[92,122258,122259],{"class":51282},"      access-points",[92,122261,122176],{"class":102},[92,122263,122264,122267],{"class":94,"line":1591},[92,122265,122266],{"class":207},"        \"EMIS_Vinci_Robocon_5G\"",[92,122268,122176],{"class":102},[92,122270,122271,122274],{"class":94,"line":1596},[92,122272,122273],{"class":51282},"          auth",[92,122275,122176],{"class":102},[92,122277,122278,122281,122283,122286],{"class":94,"line":1602},[92,122279,122280],{"class":51282},"            key-management",[92,122282,51419],{"class":102},[92,122284,122285],{"class":207},"\"psk\"",[92,122287,2653],{"class":102},[92,122289,122290,122293,122295,122298],{"class":94,"line":1607},[92,122291,122292],{"class":51282},"            password",[92,122294,51419],{"class":102},[92,122296,122297],{"class":207},"\"vinci666\"",[92,122299,2653],{"class":102},[92,122301,122302,122305],{"class":94,"line":1621},[92,122303,122304],{"class":51282},"          networkmanager",[92,122306,122176],{"class":102},[92,122308,122309,122312,122314,122317],{"class":94,"line":1626},[92,122310,122311],{"class":51282},"            uuid",[92,122313,51419],{"class":102},[92,122315,122316],{"class":207},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[92,122318,2653],{"class":102},[92,122320,122321,122324,122326,122329],{"class":94,"line":1632},[92,122322,122323],{"class":51282},"            name",[92,122325,51419],{"class":102},[92,122327,122328],{"class":207},"\"EMIS_Vinci_Robocon_5G\"",[92,122330,2653],{"class":102},[92,122332,122333,122336],{"class":94,"line":1653},[92,122334,122335],{"class":51282},"            passthrough",[92,122337,122176],{"class":102},[92,122339,122340,122343,122345,122348],{"class":94,"line":1658},[92,122341,122342],{"class":51282},"              wifi-security.auth-alg",[92,122344,51419],{"class":102},[92,122346,122347],{"class":207},"\"open\"",[92,122349,2653],{"class":102},[92,122351,122352,122355,122357,122360],{"class":94,"line":1672},[92,122353,122354],{"class":51282},"              ipv6.addr-gen-mode",[92,122356,51419],{"class":102},[92,122358,122359],{"class":207},"\"default\"",[92,122361,2653],{"class":102},[92,122363,122364,122367,122369,122372],{"class":94,"line":1677},[92,122365,122366],{"class":51282},"              ipv6.ip6-privacy",[92,122368,51419],{"class":102},[92,122370,122371],{"class":207},"\"-1\"",[92,122373,2653],{"class":102},[92,122375,122376,122379,122381,122383],{"class":94,"line":1706},[92,122377,122378],{"class":51282},"              proxy._",[92,122380,51419],{"class":102},[92,122382,7632],{"class":207},[92,122384,2653],{"class":102},[92,122386,122387,122390],{"class":94,"line":1711},[92,122388,122389],{"class":51282},"      networkmanager",[92,122391,122176],{"class":102},[92,122393,122394,122397,122399,122401],{"class":94,"line":1728},[92,122395,122396],{"class":51282},"        uuid",[92,122398,51419],{"class":102},[92,122400,122316],{"class":207},[92,122402,2653],{"class":102},[92,122404,122405,122407,122409],{"class":94,"line":1733},[92,122406,122225],{"class":51282},[92,122408,51419],{"class":102},[92,122410,122411],{"class":207},"\"EMIS_Vinci_Robocon_5G\"\n",[38,122413,122414],{},"将其改为新wifi的名和密码：",[83,122416,122418],{"className":122164,"code":122417,"language":122166,"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,122419,122420,122426,122435,122441,122448,122457,122465,122471,122477],{"__ignoreMap":10},[92,122421,122422,122424],{"class":94,"line":95},[92,122423,122173],{"class":51282},[92,122425,3718],{"class":102},[92,122427,122428,122430,122432],{"class":94,"line":11},[92,122429,122181],{"class":51282},[92,122431,51419],{"class":102},[92,122433,122434],{"class":151},"2\n",[92,122436,122437,122439],{"class":94,"line":1158},[92,122438,122192],{"class":51282},[92,122440,3718],{"class":102},[92,122442,122443,122446],{"class":94,"line":1173},[92,122444,122445],{"class":51282},"    wlan0",[92,122447,3718],{"class":102},[92,122449,122450,122452,122454],{"class":94,"line":1179},[92,122451,122237],{"class":51282},[92,122453,51419],{"class":102},[92,122455,122456],{"class":151},"true\n",[92,122458,122459,122461,122463],{"class":94,"line":1193},[92,122460,122248],{"class":51282},[92,122462,51419],{"class":102},[92,122464,122456],{"class":151},[92,122466,122467,122469],{"class":94,"line":1199},[92,122468,122259],{"class":51282},[92,122470,3718],{"class":102},[92,122472,122473,122475],{"class":94,"line":1290},[92,122474,122266],{"class":207},[92,122476,3718],{"class":102},[92,122478,122479,122482,122484],{"class":94,"line":1296},[92,122480,122481],{"class":51282},"          password",[92,122483,51419],{"class":102},[92,122485,122486],{"class":207},"\"vinci666\"\n",[38,122488,122489],{},"工控机开机即可连上网。",[33,122491,122493],{"id":122492},"_72-ssh远程开发","7.2 SSH远程开发",[63,122495,122497],{"id":122496},"_721-环境准备","7.2.1 环境准备",[38,122499,122500],{},[252,122501,122502],{},"1.硬件准备",[38,122504,122505],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[38,122507,122508],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[38,122510,122511],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[38,122513,122514],{},[252,122515,122516],{},"2.设置固定IP",[38,122518,122519],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[38,122521,122522],{},"1.进入设置界面",[38,122524,122525],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[38,122527,122528],{},[1441,122529],{"alt":10,"src":122530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[38,122532,122533],{},"2.配置所连接的网络",[38,122535,122536],{},[1441,122537],{"alt":10,"src":122538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[38,122540,122541],{},"3.设置固定IP",[38,122543,122544],{},"查看当前IP地址。",[38,122546,122547],{},[1441,122548],{"alt":10,"src":122549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[38,122551,122552],{},"设置固定IP。",[38,122554,122555],{},[1441,122556],{"alt":10,"src":122557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[38,122559,122560],{},"至此，IP配置完毕。",[63,122562,122564],{"id":122563},"_722-环境搭建","7.2.2 环境搭建",[38,122566,122567],{},[252,122568,25735],{},[38,122570,122571],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[38,122573,122574],{},[252,122575,122576],{},"实现",[38,122578,122579],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[46,122581,122582,122585,122588,122591],{},[49,122583,122584],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[49,122586,122587],{},"远程主机启动SSH服务；",[49,122589,122590],{},"本地主机登陆远程主机；",[49,122592,122593],{},"实现数据传输。",[38,122595,122596],{},"1.安装SSH客户端与服务端",[38,122598,122599],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[83,122601,122603],{"className":120797,"code":122602,"language":120799,"meta":120800,"style":10}," sudo apt install openssh-server\n",[89,122604,122605],{"__ignoreMap":10},[92,122606,122607],{"class":94,"line":95},[92,122608,122602],{},[38,122610,122611],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[83,122613,122615],{"className":120797,"code":122614,"language":120799,"meta":120800,"style":10},"sudo apt install openssh-client\n",[89,122616,122617],{"__ignoreMap":10},[92,122618,122619],{"class":94,"line":95},[92,122620,122614],{},[38,122622,122623],{},"2.远程主机启动SSH服务",[38,122625,122626],{},"远程主机启动 ssh 服务命令如下：",[83,122628,122630],{"className":120797,"code":122629,"language":120799,"meta":120800,"style":10},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[89,122631,122632],{"__ignoreMap":10},[92,122633,122634],{"class":94,"line":95},[92,122635,122629],{},[38,122637,122638],{},"启动后可使用如下命令查看服务是否正常运行：",[83,122640,122642],{"className":120797,"code":122641,"language":120799,"meta":120800,"style":10},"ps -e | grep ssh\n",[89,122643,122644],{"__ignoreMap":10},[92,122645,122646],{"class":94,"line":95},[92,122647,122641],{},[38,122649,122650],{},"如果启动成功，会包含 sshd 程序。",[38,122652,122653],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[83,122655,122657],{"className":120797,"code":122656,"language":120799,"meta":120800,"style":10},"sudo systemctl enable ssh\n",[89,122658,122659],{"__ignoreMap":10},[92,122660,122661],{"class":94,"line":95},[92,122662,122656],{},[38,122664,122665],{},"3.本地远程登录",[38,122667,122668],{},"登录远程主机可以调用如下命令:",[83,122670,122672],{"className":117277,"code":122671,"language":117279,"meta":10,"style":10},"ssh -X 用户名@ip地址\n",[89,122673,122674],{"__ignoreMap":10},[92,122675,122676,122678,122681],{"class":94,"line":95},[92,122677,121628],{"class":1942},[92,122679,122680],{"class":151}," -X",[92,122682,122683],{"class":207}," 用户名@ip地址\n",[38,122685,122686],{},"然后根据提示，录入登陆密码，即可成功登录。",[38,122688,122689],{},"如果退出，可以调用exit命令：",[83,122691,122693],{"className":120797,"code":122692,"language":120799,"meta":120800,"style":10},"exit\n",[89,122694,122695],{"__ignoreMap":10},[92,122696,122697],{"class":94,"line":95},[92,122698,122692],{},[38,122700,122701],{},[252,122702,122703],{},"4.实现数据传输",[38,122705,122706],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[38,122708,122709],{},"上传文件指令格式如下：",[83,122711,122713],{"className":120797,"code":122712,"language":120799,"meta":120800,"style":10},"scp 本地文件路径 账号@ip:路径\n",[89,122714,122715],{"__ignoreMap":10},[92,122716,122717],{"class":94,"line":95},[92,122718,122712],{},[38,122720,122721],{},"上传文件夹指令格式如下：",[83,122723,122725],{"className":120797,"code":122724,"language":120799,"meta":120800,"style":10},"scp -r 本地文件夹路径 账号@ip:路径\n",[89,122726,122727],{"__ignoreMap":10},[92,122728,122729],{"class":94,"line":95},[92,122730,122724],{},[38,122732,122733],{},"下载文件指令格式如下：",[83,122735,122737],{"className":120797,"code":122736,"language":120799,"meta":120800,"style":10},"scp 账号@ip:路径 本地文件夹路径\n",[89,122738,122739],{"__ignoreMap":10},[92,122740,122741],{"class":94,"line":95},[92,122742,122736],{},[38,122744,122745],{},"下载文件夹指令格式如下：",[83,122747,122749],{"className":120797,"code":122748,"language":120799,"meta":120800,"style":10},"scp -r 账号@ip:路径 本地文件夹路径\n",[89,122750,122751],{"__ignoreMap":10},[92,122752,122753],{"class":94,"line":95},[92,122754,122748],{},[38,122756,122757],{},[252,122758,122759],{},"优化",[38,122761,122762],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[46,122764,122765,122768],{},[49,122766,122767],{},"本地生成密钥对；",[49,122769,122770],{},"将公钥上传至远程主机。",[38,122772,122773],{},[252,122774,122775],{},"1.生成密钥对",[38,122777,122778],{},"本地客户端生成公私钥：（一路回车默认即可）",[83,122780,122782],{"className":120797,"code":122781,"language":120799,"meta":120800,"style":10},"ssh-keygen\n",[89,122783,122784],{"__ignoreMap":10},[92,122785,122786],{"class":94,"line":95},[92,122787,122781],{},[38,122789,122790],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[46,122792,122793,122796],{},[49,122794,122795],{},"id_rsa （私钥）；",[49,122797,122798],{},"id_rsa.pub (公钥)。",[38,122800,122801],{},[252,122802,122803],{},"2.公钥上传",[38,122805,122806],{},"上传指令如下：",[83,122808,122810],{"className":120797,"code":122809,"language":120799,"meta":120800,"style":10},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[89,122811,122812],{"__ignoreMap":10},[92,122813,122814],{"class":94,"line":95},[92,122815,122809],{},[38,122817,122818],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[38,122820,122821],{},"以后再远程登录就无需录入密码了。",[63,122823,122825],{"id":122824},"_723-使用vscode优化","7.2.3 使用VScode优化",[38,122827,122828],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[38,122830,122831],{},[252,122832,122833],{},"1.准备工作",[38,122835,122836],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[38,122838,122839],{},[252,122840,122841],{},"2.为VScode安装远程开发插件",[38,122843,122844,122845,122848,122849,122852,122853,28367],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[89,122846,122847],{},"扩展：商店","的搜索栏输入",[89,122850,122851],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[89,122854,122855],{},"安装",[38,122857,122858],{},[1441,122859],{"alt":10,"src":122860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[38,122862,122863],{},[252,122864,122865],{},"3.配置远程连接",[38,122867,122868,122869,122872,122873,122876],{},"步骤1：使用快捷键",[89,122870,122871],{},"ctrl + shift + p","打开命令输入窗口，并输入",[89,122874,122875],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[38,122878,122879],{},[1441,122880],{"alt":10,"src":122881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[38,122883,122884,122885,28367],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[89,122886,122887],{},"Add New SSH Host",[38,122889,122890],{},[1441,122891],{"alt":10,"src":122892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[38,122894,122895,122896,122899,122900,122903,122904,122907],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[89,122897,122898],{},"ssh +X ubuntu@192.168.43.164","，其中，",[89,122901,122902],{},"ubuntu","需要替换为你的登录用户名，",[89,122905,122906],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[38,122909,122910],{},[1441,122911],{"alt":10,"src":122912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[38,122914,122915],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[38,122917,122918],{},[1441,122919],{"alt":10,"src":122920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[38,122922,122923],{},[1441,122924],{"alt":10,"src":122925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[38,122927,122928],{},[252,122929,122930],{},"4.使用",[38,122932,122933,122934,122872,122936,122938],{},"步骤1：继续使用快捷键",[89,122935,122871],{},[89,122937,122875],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[38,122940,122941],{},[1441,122942],{"alt":10,"src":122943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[38,122945,122946,122947,122950],{},"或者，也可以点击侧边栏的",[89,122948,122949],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[38,122952,122953],{},[1441,122954],{"alt":10,"src":122955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[38,122957,122958,122959,122962,122963,122966],{},"步骤2：选择菜单栏的",[89,122960,122961],{},"文件","下的",[89,122964,122965],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[38,122968,122969],{},[1441,122970],{"alt":10,"src":122971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[38,122973,122974],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[33,122976,122978],{"id":122977},"_73-远程桌面","7.3 远程桌面",[38,122980,122981],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[38,122983,122984],{},"我们选择使用VNC来看。",[46,122986,122987],{},[49,122988,122989],{},"安装VNC服务器：",[38,122991,122992],{},"这里以TigerVNC为例进行安装：",[83,122994,122996],{"className":117277,"code":122995,"language":117279,"meta":10,"style":10},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[89,122997,122998],{"__ignoreMap":10},[92,122999,123000,123002,123004,123006,123009],{"class":94,"line":95},[92,123001,24558],{"class":1942},[92,123003,117298],{"class":207},[92,123005,23815],{"class":207},[92,123007,123008],{"class":207}," tigervnc-standalone-server",[92,123010,123011],{"class":207}," tigervnc-common\n",[46,123013,123014],{"start":11},[49,123015,123016],{},"设置VNC密码：",[38,123018,123019],{},"为VNC用户设置密码，运行以下命令：",[83,123021,123023],{"className":117277,"code":123022,"language":117279,"meta":10,"style":10},"vncpasswd\n",[89,123024,123025],{"__ignoreMap":10},[92,123026,123027],{"class":94,"line":95},[92,123028,123022],{"class":1942},[46,123030,123031],{"start":1158},[49,123032,123033],{},"配置VNC启动脚本:",[38,123035,123036],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[83,123038,123040],{"className":117277,"code":123039,"language":117279,"meta":10,"style":10},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[89,123041,123042,123051],{"__ignoreMap":10},[92,123043,123044,123046,123048],{"class":94,"line":95},[92,123045,101247],{"class":1942},[92,123047,29198],{"class":151},[92,123049,123050],{"class":207}," ~\u002F.vnc\n",[92,123052,123053,123056],{"class":94,"line":11},[92,123054,123055],{"class":1942},"nano",[92,123057,123058],{"class":207}," ~\u002F.vnc\u002Fxstartup\n",[38,123060,123061],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[83,123063,123065],{"className":117277,"code":123064,"language":117279,"meta":10,"style":10},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[89,123066,123067,123072,123080,123087],{"__ignoreMap":10},[92,123068,123069],{"class":94,"line":95},[92,123070,123071],{"class":161},"#!\u002Fbin\u002Fsh\n",[92,123073,123074,123077],{"class":94,"line":11},[92,123075,123076],{"class":151},"unset",[92,123078,123079],{"class":207}," SESSION_MANAGER\n",[92,123081,123082,123084],{"class":94,"line":1158},[92,123083,123076],{"class":151},[92,123085,123086],{"class":207}," DBUS_SESSION_BUS_ADDRESS\n",[92,123088,123089],{"class":94,"line":1173},[92,123090,123091],{"class":1942},"gnome-session\n",[38,123093,123094],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[46,123096,123097],{"start":1173},[49,123098,123099],{},"给予执行权限：",[38,123101,123102],{},"为xstartup文件设置执行权限：",[83,123104,123106],{"className":117277,"code":123105,"language":117279,"meta":10,"style":10},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[89,123107,123108],{"__ignoreMap":10},[92,123109,123110,123112,123115],{"class":94,"line":95},[92,123111,24593],{"class":1942},[92,123113,123114],{"class":207}," +x",[92,123116,123058],{"class":207},[46,123118,123119],{"start":1179},[49,123120,123121],{},"启动VNC服务器：",[83,123123,123125],{"className":117277,"code":123124,"language":117279,"meta":10,"style":10},"vncserver -geometry 1920x1080 -localhost=0\n",[89,123126,123127],{"__ignoreMap":10},[92,123128,123129,123132,123135,123138],{"class":94,"line":95},[92,123130,123131],{"class":1942},"vncserver",[92,123133,123134],{"class":151}," -geometry",[92,123136,123137],{"class":207}," 1920x1080",[92,123139,123140],{"class":151}," -localhost=0\n",[38,123142,123143],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[38,123145,123146],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[46,123148,123149],{"start":1193},[49,123150,123151],{},"查看已开启的VNC服务器：",[83,123153,123155],{"className":117277,"code":123154,"language":117279,"meta":10,"style":10},"vncserver -list\n",[89,123156,123157],{"__ignoreMap":10},[92,123158,123159,123161],{"class":94,"line":95},[92,123160,123131],{"class":1942},[92,123162,123163],{"class":151}," -list\n",[38,123165,123166],{},[1441,123167],{"alt":10,"src":123168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[46,123170,123171],{"start":1199},[49,123172,123173],{},"连接到VNC服务器：",[38,123175,123176],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[46,123178,123179],{"start":1290},[49,123180,123181],{},"停止VNC服务器：",[38,123183,123184],{},"如果需要停止VNC服务器，可以使用以下命令：",[83,123186,123188],{"className":117277,"code":123187,"language":117279,"meta":10,"style":10},"vncserver -kill :1\n",[89,123189,123190],{"__ignoreMap":10},[92,123191,123192,123194,123197],{"class":94,"line":95},[92,123193,123131],{"class":1942},[92,123195,123196],{"class":151}," -kill",[92,123198,123199],{"class":207}," :1\n",[38,123201,123202],{},"将:1替换为你实际使用的显示编号。",[38,123204,123205],{},[1441,123206],{"alt":10,"src":123207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[38,123209,123210],{},[1441,123211],{"alt":10,"src":123212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[33,123214,123216],{"id":123215},"_74-usb端口设置","7.4 USB端口设置",[38,123218,123219],{},[252,123220,123221],{},"首先先配置好权限",[83,123223,123225],{"className":117277,"code":123224,"language":117279,"meta":10,"style":10},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[89,123226,123227,123232,123245,123252,123257],{"__ignoreMap":10},[92,123228,123229],{"class":94,"line":95},[92,123230,123231],{"class":161},"# 将用户权限提高\n",[92,123233,123234,123236,123238,123240,123243],{"class":94,"line":11},[92,123235,24558],{"class":1942},[92,123237,26556],{"class":207},[92,123239,26559],{"class":151},[92,123241,123242],{"class":207}," dialout",[92,123244,26564],{"class":102},[92,123246,123247,123249],{"class":94,"line":1158},[92,123248,26583],{"class":1942},[92,123250,123251],{"class":207}," dialout\n",[92,123253,123254],{"class":94,"line":1173},[92,123255,123256],{"class":161},"# 查看下面命令是否输出dialout（若输出才正常）\n",[92,123258,123259],{"class":94,"line":1179},[92,123260,123261],{"class":1942},"groups\n",[38,123263,123264],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[63,123266,123268],{"id":123267},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[38,123270,123271,123274],{},[252,123272,123273],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[38,123276,123277,123280],{},[252,123278,123279],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[38,123282,123283],{},[252,123284,123285],{},"流程如下：",[38,123287,123288],{},"（1）.查找设备idVendor和idProduct",[38,123290,123291,123292,123295],{},"接入两个USB设备，在终端调用指令",[89,123293,123294],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[38,123297,123298],{},[1441,123299],{"alt":10,"src":123300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[38,123302,123303,123304,123307],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[89,123305,123306],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[38,123309,123310],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[38,123312,123313],{},"（2）.编写映射规则",[38,123315,123316,123317,123320],{},"在",[89,123318,123319],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[83,123322,123324],{"className":117277,"code":123323,"language":117279,"meta":10,"style":10},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[89,123325,123326],{"__ignoreMap":10},[92,123327,123328,123330,123332],{"class":94,"line":95},[92,123329,24558],{"class":1942},[92,123331,118564],{"class":207},[92,123333,123334],{"class":207}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[38,123336,123337],{},"输入如下内容：",[83,123339,123341],{"className":117277,"code":123340,"language":117279,"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,123342,123343,123373],{"__ignoreMap":10},[92,123344,123345,123348,123350,123353,123356,123359,123362,123364,123367,123370],{"class":94,"line":95},[92,123346,123347],{"class":102},"KERNEL",[92,123349,148],{"class":98},[92,123351,123352],{"class":207},"=\"ttyUSB*\",",[92,123354,123355],{"class":1942}," ATTRS",[92,123357,123358],{"class":207},"{idVendor}==",[92,123360,123361],{"class":1942},"\"10c4\"",[92,123363,481],{"class":1942},[92,123365,123366],{"class":207}," ATTRS{idProduct}==\"ea60\",",[92,123368,123369],{"class":207}," MODE:=\"0777\",",[92,123371,123372],{"class":207}," SYMLINK+=\"mylidar\"\n",[92,123374,123375,123377,123379,123381,123383,123385,123388,123390,123393,123395],{"class":94,"line":11},[92,123376,123347],{"class":102},[92,123378,148],{"class":98},[92,123380,123352],{"class":207},[92,123382,123355],{"class":1942},[92,123384,123358],{"class":207},[92,123386,123387],{"class":1942},"\"1a86\"",[92,123389,481],{"class":1942},[92,123391,123392],{"class":207}," ATTRS{idProduct}==\"7523\",",[92,123394,123369],{"class":207},[92,123396,123397],{"class":207}," SYMLINK+=\"mycar\"\n",[38,123399,123400],{},"代码解释：",[1110,123402,123403,123406,123409,123412],{},[49,123404,123405],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[49,123407,123408],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[49,123410,123411],{},"SYMLINK是符号连接，即绑定的别名；",[49,123413,123414],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[38,123416,123417,123418,123421,123424],{},"***小提示：***",[23534,123419,123420],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[89,123422,123423],{},"\u002Fetc\u002Fudev\u002Frule.d",[23534,123425,123426],{},"目录即可。",[38,123428,123429],{},"表格 还在加载中，请等待加载完成后再尝试复制",[38,123431,123432],{},"（3）.使规则生效",[38,123434,123435],{},"在终端下输入如下指令：",[83,123437,123439],{"className":117277,"code":123438,"language":117279,"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,123440,123441,123446,123458,123469,123473,123478,123491],{"__ignoreMap":10},[92,123442,123443],{"class":94,"line":95},[92,123444,123445],{"class":161},"# Ubuntu用下方命令\n",[92,123447,123448,123450,123452,123455],{"class":94,"line":11},[92,123449,24558],{"class":1942},[92,123451,120029],{"class":207},[92,123453,123454],{"class":207}," udev",[92,123456,123457],{"class":207}," reload\n",[92,123459,123460,123462,123464,123466],{"class":94,"line":1158},[92,123461,24558],{"class":1942},[92,123463,120029],{"class":207},[92,123465,123454],{"class":207},[92,123467,123468],{"class":207}," restart\n",[92,123470,123471],{"class":94,"line":1173},[92,123472,2379],{"emptyLinePlaceholder":17},[92,123474,123475],{"class":94,"line":1179},[92,123476,123477],{"class":161},"#Fedora用下方命令\n",[92,123479,123480,123482,123485,123488],{"class":94,"line":1193},[92,123481,24558],{"class":1942},[92,123483,123484],{"class":207}," udevadm",[92,123486,123487],{"class":207}," control",[92,123489,123490],{"class":151}," --reload\n",[92,123492,123493,123495,123497],{"class":94,"line":1199},[92,123494,24558],{"class":1942},[92,123496,123484],{"class":207},[92,123498,123499],{"class":207}," trigger\n",[38,123501,123502],{},"再重新插拔设备即可。",[38,123504,123505],{},"（4）.测试",[38,123507,123508],{},"终端下输入如下指令",[83,123510,123512],{"className":117277,"code":123511,"language":117279,"meta":10,"style":10},"ll \u002Fdev | grep ttyUSB\n",[89,123513,123514],{"__ignoreMap":10},[92,123515,123516,123519,123522,123524,123526],{"class":94,"line":95},[92,123517,123518],{"class":1942},"ll",[92,123520,123521],{"class":207}," \u002Fdev",[92,123523,25091],{"class":98},[92,123525,30218],{"class":1942},[92,123527,123528],{"class":207}," ttyUSB\n",[38,123530,123531],{},"运行结果如下：",[38,123533,123534],{},[1441,123535],{"alt":10,"src":123536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[38,123538,123539,123540,123543],{},"也可以多次插拔USB设备，会发现设备端口",[89,123541,123542],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[38,123545,123546],{},[252,123547,117945],{},[38,123549,123550],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[63,123552,123554],{"id":123553},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[38,123556,123557,123559],{},[252,123558,123273],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[38,123561,123562,123564],{},[252,123563,123279],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[38,123566,123567],{},[252,123568,123285],{},[38,123570,123571],{},"（1）.查看所连接的主机USB接口的KERNELS",[38,123573,123574],{},"调用如下指令查看第一台雷达的USB信息：",[83,123576,123578],{"className":117277,"code":123577,"language":117279,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[89,123579,123580,123600],{"__ignoreMap":10},[92,123581,123582,123585,123587,123590,123593,123595,123597],{"class":94,"line":95},[92,123583,123584],{"class":1942},"udevadm",[92,123586,69803],{"class":207},[92,123588,123589],{"class":151}," --attribute-walk",[92,123591,123592],{"class":151}," --name=\u002Fdev\u002FttyUSB0",[92,123594,25091],{"class":98},[92,123596,30218],{"class":1942},[92,123598,123599],{"class":207}," KERNELS\n",[92,123601,123602,123604,123606,123608,123611,123613,123615],{"class":94,"line":11},[92,123603,123584],{"class":1942},[92,123605,69803],{"class":207},[92,123607,123589],{"class":151},[92,123609,123610],{"class":151}," --name=\u002Fdev\u002FttyACM0",[92,123612,25091],{"class":98},[92,123614,30218],{"class":1942},[92,123616,123599],{"class":207},[38,123618,123619],{},[1441,123620],{"alt":10,"src":123621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[38,123623,123624],{},"调用如下指令查看第二台雷达的USB信息：",[83,123626,123628],{"className":117277,"code":123627,"language":117279,"meta":10,"style":10},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[89,123629,123630],{"__ignoreMap":10},[92,123631,123632,123634,123636,123638,123641,123643,123645],{"class":94,"line":95},[92,123633,123584],{"class":1942},[92,123635,69803],{"class":207},[92,123637,123589],{"class":151},[92,123639,123640],{"class":151}," --name=\u002Fdev\u002FttyUSB1",[92,123642,25091],{"class":98},[92,123644,30218],{"class":1942},[92,123646,123599],{"class":207},[38,123648,123649,123650,123653,123654,123657,123658,123661],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[89,123651,123652],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[89,123655,123656],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[252,123659,123660],{},"唯一性标识","”。",[38,123663,123313],{},[38,123665,123316,123666,123668],{},[89,123667,123319],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[83,123670,123671],{"className":117277,"code":123323,"language":117279,"meta":10,"style":10},[89,123672,123673],{"__ignoreMap":10},[92,123674,123675,123677,123679],{"class":94,"line":95},[92,123676,24558],{"class":1942},[92,123678,118564],{"class":207},[92,123680,123334],{"class":207},[83,123682,123684],{"className":117277,"code":123683,"language":117279,"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,123685,123686,123715],{"__ignoreMap":10},[92,123687,123688,123690,123692,123694,123697,123699,123702,123705,123707,123710,123712],{"class":94,"line":95},[92,123689,123347],{"class":102},[92,123691,148],{"class":98},[92,123693,123352],{"class":207},[92,123695,123696],{"class":102}," KERNELS",[92,123698,148],{"class":98},[92,123700,123701],{"class":207},"=\"1-1.3:1.0\",",[92,123703,123704],{"class":1942}," MODE:",[92,123706,148],{"class":207},[92,123708,123709],{"class":1942},"\"0777\"",[92,123711,481],{"class":1942},[92,123713,123714],{"class":207}," SYMLINK+=\"rplidar_front\"\n",[92,123716,123717,123719,123721,123723,123725,123727,123730,123732,123734,123736,123738],{"class":94,"line":11},[92,123718,123347],{"class":102},[92,123720,148],{"class":98},[92,123722,123352],{"class":207},[92,123724,123696],{"class":102},[92,123726,148],{"class":98},[92,123728,123729],{"class":207},"=\"1-1.4:1.0\",",[92,123731,123704],{"class":1942},[92,123733,148],{"class":207},[92,123735,123709],{"class":1942},[92,123737,481],{"class":1942},[92,123739,123740],{"class":207}," SYMLINK+=\"rplidar_back\"\n",[38,123742,123432],{},[38,123744,123435],{},[83,123746,123747],{"className":117277,"code":123438,"language":117279,"meta":10,"style":10},[89,123748,123749,123753,123763,123773,123777,123781,123791],{"__ignoreMap":10},[92,123750,123751],{"class":94,"line":95},[92,123752,123445],{"class":161},[92,123754,123755,123757,123759,123761],{"class":94,"line":11},[92,123756,24558],{"class":1942},[92,123758,120029],{"class":207},[92,123760,123454],{"class":207},[92,123762,123457],{"class":207},[92,123764,123765,123767,123769,123771],{"class":94,"line":1158},[92,123766,24558],{"class":1942},[92,123768,120029],{"class":207},[92,123770,123454],{"class":207},[92,123772,123468],{"class":207},[92,123774,123775],{"class":94,"line":1173},[92,123776,2379],{"emptyLinePlaceholder":17},[92,123778,123779],{"class":94,"line":1179},[92,123780,123477],{"class":161},[92,123782,123783,123785,123787,123789],{"class":94,"line":1193},[92,123784,24558],{"class":1942},[92,123786,123484],{"class":207},[92,123788,123487],{"class":207},[92,123790,123490],{"class":151},[92,123792,123793,123795,123797],{"class":94,"line":1199},[92,123794,24558],{"class":1942},[92,123796,123484],{"class":207},[92,123798,123499],{"class":207},[38,123800,123502],{},[38,123802,123505],{},[38,123804,123508,123805,123808],{},[89,123806,123807],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[38,123810,123811],{},[1441,123812],{"alt":10,"src":123813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[38,123815,123816],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[38,123818,123819,123821],{},[252,123820,117945],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[63,123823,123825],{"id":123824},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[38,123827,123828],{},"（1）.查看所连接的主机USB接口的信息",[83,123830,123832],{"className":117277,"code":123831,"language":117279,"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,123833,123834,123864],{"__ignoreMap":10},[92,123835,123836,123838,123840,123843,123845,123847,123849,123851,123854,123857,123859,123862],{"class":94,"line":95},[92,123837,123584],{"class":1942},[92,123839,69803],{"class":207},[92,123841,123842],{"class":151}," -a",[92,123844,29198],{"class":151},[92,123846,28404],{"class":102},[92,123848,123584],{"class":1942},[92,123850,69803],{"class":207},[92,123852,123853],{"class":151}," -q",[92,123855,123856],{"class":207}," path",[92,123858,25097],{"class":151},[92,123860,123861],{"class":207}," \u002Fdev\u002FttyACM0",[92,123863,109],{"class":102},[92,123865,123866,123868,123870,123872,123874,123876,123878,123880,123882,123884,123886,123889],{"class":94,"line":11},[92,123867,123584],{"class":1942},[92,123869,69803],{"class":207},[92,123871,123842],{"class":151},[92,123873,29198],{"class":151},[92,123875,28404],{"class":102},[92,123877,123584],{"class":1942},[92,123879,69803],{"class":207},[92,123881,123853],{"class":151},[92,123883,123856],{"class":207},[92,123885,25097],{"class":151},[92,123887,123888],{"class":207}," \u002Fdev\u002FttyUSB0",[92,123890,109],{"class":102},[38,123892,123893],{},[1441,123894],{"alt":10,"src":123895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[38,123897,123898],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[38,123900,123313],{},[38,123902,123316,123903,123668],{},[89,123904,123319],{},[83,123906,123907],{"className":117277,"code":123323,"language":117279,"meta":10,"style":10},[89,123908,123909],{"__ignoreMap":10},[92,123910,123911,123913,123915],{"class":94,"line":95},[92,123912,24558],{"class":1942},[92,123914,118564],{"class":207},[92,123916,123334],{"class":207},[83,123918,123920],{"className":117277,"code":123919,"language":117279,"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,123921,123922,123950,123976],{"__ignoreMap":10},[92,123923,123924,123926,123928,123931,123933,123935,123937,123939,123942,123945,123947],{"class":94,"line":95},[92,123925,123347],{"class":102},[92,123927,148],{"class":98},[92,123929,123930],{"class":207},"=\"ttyACM*\",",[92,123932,123355],{"class":1942},[92,123934,123358],{"class":207},[92,123936,123387],{"class":1942},[92,123938,481],{"class":1942},[92,123940,123941],{"class":207}," ATTRS{idProduct}==\"55d4\",",[92,123943,123944],{"class":207}," ATTRS{serial}==\"0001\",",[92,123946,123369],{"class":207},[92,123948,123949],{"class":207}," SYMLINK+=\"ttyACM_MCU\"\n",[92,123951,123952,123954,123956,123958,123960,123962,123964,123966,123968,123971,123973],{"class":94,"line":11},[92,123953,123347],{"class":102},[92,123955,148],{"class":98},[92,123957,123930],{"class":207},[92,123959,123355],{"class":1942},[92,123961,123358],{"class":207},[92,123963,123387],{"class":1942},[92,123965,481],{"class":1942},[92,123967,123941],{"class":207},[92,123969,123970],{"class":207}," ATTRS{serial}==\"0002\",",[92,123972,123369],{"class":207},[92,123974,123975],{"class":207}," SYMLINK+=\"ttyACM_Lidar\"\n",[92,123977,123978,123980,123982,123984,123986,123988,123990,123992,123994,123996],{"class":94,"line":1158},[92,123979,123347],{"class":102},[92,123981,148],{"class":98},[92,123983,123352],{"class":207},[92,123985,123355],{"class":1942},[92,123987,123358],{"class":207},[92,123989,123387],{"class":1942},[92,123991,481],{"class":1942},[92,123993,123392],{"class":207},[92,123995,123369],{"class":207},[92,123997,123998],{"class":207}," SYMLINK+=\"ttyUSB_IMU\"\n",[38,124000,123432],{},[38,124002,123435],{},[83,124004,124005],{"className":117277,"code":123438,"language":117279,"meta":10,"style":10},[89,124006,124007,124011,124021,124031,124035,124039,124049],{"__ignoreMap":10},[92,124008,124009],{"class":94,"line":95},[92,124010,123445],{"class":161},[92,124012,124013,124015,124017,124019],{"class":94,"line":11},[92,124014,24558],{"class":1942},[92,124016,120029],{"class":207},[92,124018,123454],{"class":207},[92,124020,123457],{"class":207},[92,124022,124023,124025,124027,124029],{"class":94,"line":1158},[92,124024,24558],{"class":1942},[92,124026,120029],{"class":207},[92,124028,123454],{"class":207},[92,124030,123468],{"class":207},[92,124032,124033],{"class":94,"line":1173},[92,124034,2379],{"emptyLinePlaceholder":17},[92,124036,124037],{"class":94,"line":1179},[92,124038,123477],{"class":161},[92,124040,124041,124043,124045,124047],{"class":94,"line":1193},[92,124042,24558],{"class":1942},[92,124044,123484],{"class":207},[92,124046,123487],{"class":207},[92,124048,123490],{"class":151},[92,124050,124051,124053,124055],{"class":94,"line":1199},[92,124052,24558],{"class":1942},[92,124054,123484],{"class":207},[92,124056,123499],{"class":207},[38,124058,124059,124060],{},"再重新插拔设备即可，或者 ",[252,124061,124062],{},"直接重启系统。",[38,124064,123505],{},[38,124066,123508,124067,123808],{},[89,124068,123807],{},[38,124070,124071],{},[1441,124072],{"alt":10,"src":124073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[38,124075,123816],{},[38,124077,124078,124080],{},[252,124079,117945],{}," 一些设备可能没有串口号等。",[63,124082,124084],{"id":124083},"_744-其他注意事项","7.4.4 其他注意事项",[38,124086,124087,124088,124090,124091,124094,124095,18390,124098,124101,124102,124104],{},"并非所有的USB设备端口号都是",[89,124089,123542],{},"的格式，比如Arduino的端口号可能是",[89,124092,124093],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[89,124096,124097],{},"videon",[89,124099,124100],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[89,124103,124097],{},"端口，绑定时需要关联的也是该接口。",[38,124106,124107,124108,124111,124112,124115,124116,124118,124119,124122,124123,124126,124127,124130,124131,124130,124134,124130,124137,28367],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[89,124109,124110],{},"KERNEL==\"ttyUSB*\"","修改为",[89,124113,124114],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[89,124117,124110],{},"修改为类似于",[89,124120,124121],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[89,124124,124125],{},"video[0,2,4,6]","表示可以绑定的端口为",[89,124128,124129],{},"video0","或",[89,124132,124133],{},"video2",[89,124135,124136],{},"video4",[89,124138,124139],{},"video6",[33,124141,124143],{"id":124142},"_75-挂载内网网页","7.5 挂载内网网页",[38,124145,124146],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[38,124148,124149],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[38,124151,124152],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[38,124154,124155,124156],{},"Termux 下载地址（F-Droid）：",[341,124157,124158],{"href":124158,"rel":124159},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23846],[38,124161,124162],{},"首先打开app后，先更新软件缓存：",[83,124164,124166],{"className":117277,"code":124165,"language":117279,"meta":10,"style":10},"pkg update\n",[89,124167,124168],{"__ignoreMap":10},[92,124169,124170,124173],{"class":94,"line":95},[92,124171,124172],{"class":1942},"pkg",[92,124174,26224],{"class":207},[38,124176,124177],{},"然后换源",[83,124179,124181],{"className":117277,"code":124180,"language":117279,"meta":10,"style":10},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[89,124182,124183],{"__ignoreMap":10},[92,124184,124185,124187,124190],{"class":94,"line":95},[92,124186,123055],{"class":1942},[92,124188,124189],{"class":102}," $PREFIX",[92,124191,124192],{"class":207},"\u002Fetc\u002Fapt\u002Fsources.list\n",[38,124194,124195],{},"将该文件内容替换为下面：",[83,124197,124199],{"className":117277,"code":124198,"language":117279,"meta":10,"style":10},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[89,124200,124201],{"__ignoreMap":10},[92,124202,124203,124206,124209,124212],{"class":94,"line":95},[92,124204,124205],{"class":1942},"deb",[92,124207,124208],{"class":207}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[92,124210,124211],{"class":207}," stable",[92,124213,124214],{"class":207}," main\n",[1110,124216,124217,124244],{},[49,124218,124219,124220,124222,124223],{},"如果你使用的是",[89,124221,123055],{},"编辑器：",[1110,124224,124225,124232,124238],{},[49,124226,124227,124228,124231],{},"按 ",[89,124229,124230],{},"Ctrl+O"," 保存文件。",[49,124233,124227,124234,124237],{},[89,124235,124236],{},"Enter"," 确认文件名。",[49,124239,124227,124240,124243],{},[89,124241,124242],{},"Ctrl+X"," 退出编辑器。",[49,124245,124219,124246,124222,124249],{},[89,124247,124248],{},"vim",[1110,124250,124251,124257],{},[49,124252,124227,124253,124256],{},[89,124254,124255],{},"Esc"," 退出编辑模式。",[49,124258,124259,124260,124262],{},"输入 ",[89,124261,119202],{}," 保存并退出。",[38,124264,124265],{},"接下来重新更新软件源：",[83,124267,124269],{"className":117277,"code":124268,"language":117279,"meta":10,"style":10},"pkg update && pkg upgrade\n",[89,124270,124271],{"__ignoreMap":10},[92,124272,124273,124275,124277,124279,124281],{"class":94,"line":95},[92,124274,124172],{"class":1942},[92,124276,117328],{"class":207},[92,124278,26172],{"class":102},[92,124280,124172],{"class":1942},[92,124282,117314],{"class":207},[38,124284,124285],{},"安装python：",[83,124287,124289],{"className":117277,"code":124288,"language":117279,"meta":10,"style":10},"pkg install python\n",[89,124290,124291],{"__ignoreMap":10},[92,124292,124293,124295,124297],{"class":94,"line":95},[92,124294,124172],{"class":1942},[92,124296,23815],{"class":207},[92,124298,124299],{"class":207}," python\n",[38,124301,124302,26455],{},[252,124303,124304],{},"通过Termux访问设备存储",[38,124306,124307],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[83,124309,124311],{"className":117277,"code":124310,"language":117279,"meta":10,"style":10},"termux-setup-storage\n",[89,124312,124313],{"__ignoreMap":10},[92,124314,124315],{"class":94,"line":95},[92,124316,124310],{"class":1942},[46,124318,124319],{},[49,124320,124321,26455,124324],{},[252,124322,124323],{},"进入HTML文件所在的目录",[46,124325,124326],{},[49,124327,124328,124329,124331],{},"使用",[89,124330,101257],{},"命令进入HTML文件所在的目录：",[83,124333,124335],{"className":117277,"code":124334,"language":117279,"meta":10,"style":10},"cd ~\u002Fyour_html_folder\n",[89,124336,124337],{"__ignoreMap":10},[92,124338,124339,124341],{"class":94,"line":95},[92,124340,101257],{"class":151},[92,124342,124343],{"class":207}," ~\u002Fyour_html_folder\n",[46,124345,124346],{"start":11},[49,124347,124348,26455,124351,124356,124373],{},[252,124349,124350],{},"启动Python HTTP服务器",[46,124352,124353],{},[49,124354,124355],{},"运行以下命令启动一个简单的HTTP服务器：",[83,124357,124359],{"className":117277,"code":124358,"language":117279,"meta":10,"style":10},"python -m http.server 8000\n",[89,124360,124361],{"__ignoreMap":10},[92,124362,124363,124365,124367,124370],{"class":94,"line":95},[92,124364,30362],{"class":1942},[92,124366,100863],{"class":151},[92,124368,124369],{"class":207}," http.server",[92,124371,124372],{"class":151}," 8000\n",[46,124374,124375],{"start":1158},[49,124376,124377,124378,124381],{},"这会在端口",[89,124379,124380],{},"8000","上启动一个Web服务器。",[1110,124383,124384],{},[49,124385,124386],{},"启动服务器后，Termux会显示日志信息，例如：",[83,124388,124390],{"className":120797,"code":124389,"language":120799,"meta":120800,"style":10},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[89,124391,124392],{"__ignoreMap":10},[92,124393,124394],{"class":94,"line":95},[92,124395,124389],{},[1110,124397,124398],{},[49,124399,124400],{},"这表示服务器已成功启动。",[38,124402,124403],{},[252,124404,124405],{},"在浏览器中访问HTML文件",[46,124407,124408],{},[49,124409,124410,26455,124413,124418],{},[252,124411,124412],{},"在同一设备上访问",[46,124414,124415],{},[49,124416,124417],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[83,124419,124422],{"className":124420,"code":124421,"language":71646,"meta":10,"style":10},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[89,124423,124424],{"__ignoreMap":10},[92,124425,124426,124429],{"class":94,"line":95},[92,124427,124428],{"class":102},"http:",[92,124430,124431],{"class":161},"\u002F\u002Flocalhost:8000\n",[1110,124433,124434],{},[49,124435,124436,124437,124440],{},"如果HTML文件中有",[89,124438,124439],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[33,124442,124444],{"id":124443},"_76-linux重点知识","7.6 Linux重点知识",[63,124446,124448],{"id":124447},"_761-关于点的说明","7.6.1 关于点的说明",[38,124450,124451],{},[1441,124452],{"alt":10,"src":124453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[38,124455,124456],{},"一点本目录，两点上目录",[63,124458,124460],{"id":124459},"_762-目录","7.6.2 目录",[21978,124462,124464],{"id":124463},"_7621-系统启动必须","7.6.2.1 系统启动必须",[38,124466,124467],{},[252,124468,124469],{},"\u002Fboot:",[38,124471,124472],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[38,124474,124475],{},[252,124476,124477],{},"\u002Fetc:",[38,124479,124480],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[38,124482,124483],{},[252,124484,124485],{},"\u002Flib：",[38,124487,124488],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[38,124490,124491],{},[252,124492,124493],{},"\u002Fsys:",[38,124495,124496],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21978,124498,124500],{"id":124499},"_7622-指令集合","7.6.2.2 指令集合",[38,124502,124503],{},[252,124504,124505],{},"\u002Fbin:",[38,124507,124508],{},"为二进制文件的缩写，存放最经常使用的命令",[38,124510,124511],{},[252,124512,124513],{},"\u002Fsbin:",[38,124515,124516],{},"只有系统管理员才能使用的程序和指令",[21978,124518,124520],{"id":124519},"_7623-外部文件管理","7.6.2.3 外部文件管理",[38,124522,124523],{},[252,124524,124525],{},"\u002Fdev:",[38,124527,124528],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[38,124530,124531],{},[252,124532,124533],{},"\u002Fmedia:",[38,124535,124536],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[38,124538,124539],{},[252,124540,124541],{},"\u002Fmnt:",[38,124543,124544],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21978,124546,124548],{"id":124547},"_7624-临时文件","7.6.2.4 临时文件",[38,124550,124551],{},[252,124552,124553],{},"\u002Frun:",[38,124555,124556],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[38,124558,124559],{},[252,124560,124561],{},"\u002Flost+found:",[38,124563,124564],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[38,124566,124567],{},[252,124568,124569],{},"\u002Ftmp:",[38,124571,124572],{},"这个目录是用来存放一些临时文件的",[21978,124574,124576],{"id":124575},"_7625-账户","7.6.2.5 账户",[38,124578,124579],{},[252,124580,124581],{},"\u002Froot：",[38,124583,124584],{},"系统管理员的用户主目录",[38,124586,124587,26455],{},[252,124588,124589],{},"\u002Fhome",[38,124591,124592],{},"用户的主目录，以用户的账号命名的",[38,124594,124595,26455],{},[252,124596,124597],{},"\u002Fusr",[38,124599,124600],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[38,124602,124603],{},[252,124604,124605],{},"\u002Fusr\u002Fbin：",[38,124607,124608],{},"系统用户使用的应用程序与指令",[38,124610,124611],{},[252,124612,124613],{},"\u002Fusr\u002Fsbin：",[38,124615,124616],{},"超级用户使用的比较高级的管理程序和系统守护程序",[38,124618,124619],{},[252,124620,124621],{},"\u002Fusr\u002Fsrc：",[38,124623,124624],{},"内核源代码默认的放置目录",[21978,124626,124628],{"id":124627},"_7626-运行过程要用","7.6.2.6 运行过程要用",[38,124630,124631],{},[252,124632,124633],{},"\u002Fvar：",[38,124635,124636],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[38,124638,124639],{},[252,124640,124641],{},"\u002Fproc:",[38,124643,124644,124645,124648],{},"管理 ",[252,124646,124647],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21978,124650,124652],{"id":124651},"_7627-扩展用的","7.6.2.7 扩展用的",[38,124654,124655],{},[252,124656,124657],{},"\u002Fopt:",[38,124659,124660],{},"默认是空的，我们安装额外软件可以放在这个里面",[38,124662,124663],{},[252,124664,124665],{},"\u002Fsrv:",[38,124667,124668],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[63,124670,124672],{"id":124671},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[38,124674,124675],{},[1441,124676],{"alt":10,"src":124677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[38,124679,124680],{},"windows-->linux:",[38,124682,124683],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[38,124685,124686],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[38,124688,124689],{},"linux传输文件到windows",[38,124691,124692],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[63,124694,124696],{"id":124695},"_764-易忘知识","7.6.4 易忘知识",[38,124698,124699],{},"操作系统内核查看",[83,124701,124702],{"className":117277,"code":121271,"language":117279,"meta":10,"style":10},[89,124703,124704],{"__ignoreMap":10},[92,124705,124706,124708],{"class":94,"line":95},[92,124707,70186],{"class":1942},[92,124709,121280],{"class":151},[38,124711,124712],{},[1441,124713],{"alt":10,"src":124714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[38,124716,124717],{},[1441,124718],{"alt":10,"src":124719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[83,124721,124723],{"className":117277,"code":124722,"language":117279,"meta":10,"style":10},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[89,124724,124725,124737],{"__ignoreMap":10},[92,124726,124727,124729,124732,124735],{"class":94,"line":95},[92,124728,121488],{"class":1942},[92,124730,124731],{"class":207}," mvtest",[92,124733,124734],{"class":207}," mvtest2",[92,124736,2653],{"class":102},[92,124738,124739],{"class":94,"line":11},[92,124740,124741],{"class":1942},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[38,124743,124744],{},[1441,124745],{"alt":10,"src":124746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[38,124748,124749],{},[1441,124750],{"alt":10,"src":124751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[38,124753,124754,124755,124758],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[89,124756,124757],{},"du -a"," 可以快速查看磁盘使用细节。",[63,124760,124762],{"id":124761},"_765-vim","7.6.5 Vim",[38,124764,124765],{},[1441,124766],{"alt":10,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[38,124769,124770],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[38,124772,124773],{},"一开始进去为命令模式，此时点击输入的字母为命令",[38,124775,124776],{},[252,124777,124778],{},"1.命令模式：",[38,124780,124781],{},"i 切换到输入模式，在光标当前位置开始输入文本",[38,124783,124784],{},"x 删除当前光标所在处的字符",[38,124786,124787],{},"：切换到底线命令模式，以在最底一行输入命令",[38,124789,124790],{},"a 进行插入模式，在光标下一个位置输入文本",[38,124792,124793],{},"o 在当前的下方插入一个新行，并进入插入模式",[38,124795,124796],{},"0 在当前行的上方插入一个新行，并进入插入模式",[38,124798,124799],{},"dd 剪切当前行",[38,124801,124802],{},"yy 复制当前行",[38,124804,124805],{},"p 粘贴剪贴板内容到光标下方",[38,124807,124808],{},"P 粘贴剪贴板内容到光标上方",[38,124810,124811],{},"u 撤销上一次操作",[38,124813,124814],{},"ctrl+r 重做上一次操作",[38,124816,124817,124819],{},[898,124818],{}," 保存文件",[38,124821,124822,124824],{},[748,124823],{}," 退出Vim编辑器",[38,124826,124827,124829],{},[748,124828],{},"! 强制退出Vim编辑器，不保存修改",[38,124831,124832],{},[252,124833,124834],{},"2.输入模式：",[38,124836,124837],{},[1441,124838],{"alt":10,"src":124839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[38,124841,124842],{},[252,124843,124844],{},"3.底线命令模式：",[38,124846,124847],{},[1441,124848],{"alt":10,"src":124849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[38,124851,124852],{},"按下esc可以退出底线命令模式",[63,124854,124856],{"id":124855},"_766-apt","7.6.6 apt",[38,124858,124859],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[63,124861,124863],{"id":124862},"_767-home与root的区别","7.6.7 home与root的区别",[38,124865,124866],{},[1441,124867],{"alt":10,"src":124868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[38,124870,124871],{},[1441,124872],{"alt":10,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[38,124875,124876],{},[1441,124877],{"alt":10,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[38,124880,124881],{},[1441,124882],{"alt":10,"src":124883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[63,124885,124887],{"id":124886},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[38,124889,124890],{},[341,124891,124892],{"href":124892,"rel":124893},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23846],[46,124895,124896,124899],{},[49,124897,124898],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[49,124900,124901],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[38,124903,124904],{},[1441,124905],{"alt":10,"src":124906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[38,124908,124909],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[38,124911,124912],{},[1441,124913],{"alt":10,"src":124914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[83,124916,124918],{"className":120797,"code":124917,"language":120799,"meta":120800,"style":10},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[89,124919,124920,124925],{"__ignoreMap":10},[92,124921,124922],{"class":94,"line":95},[92,124923,124924],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[92,124926,124927],{"class":94,"line":11},[92,124928,124929],{},".\u002Fpycharm.sh\n",[38,124931,124932],{},"3️⃣创建.desktop文件",[38,124934,124935],{},[252,124936,124937],{},"原理：",[1110,124939,124940,124950],{},[49,124941,124942,124943,124949],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[252,124944,124945,124948],{},[89,124946,124947],{},".desktop"," 文件"," 来识别应用。",[49,124951,124952,124954,124955],{},[89,124953,124947],{}," 文件相当于一个“应用注册表”，告诉系统：",[1110,124956,124957,124960,124963,124966,124969],{},[49,124958,124959],{},"应用名字（Name）",[49,124961,124962],{},"图标（Icon）",[49,124964,124965],{},"执行命令（Exec）",[49,124967,124968],{},"分类（Categories）",[49,124970,124971],{},"是否需要终端（Terminal）",[83,124973,124975],{"className":120797,"code":124974,"language":120799,"meta":120800,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[89,124976,124977,124982],{"__ignoreMap":10},[92,124978,124979],{"class":94,"line":95},[92,124980,124981],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[92,124983,124984],{"class":94,"line":11},[92,124985,124986],{},"nano pycharm.desktop\n",[38,124988,124989],{},"nano是一个命令行下的编辑器，也可以使用vim",[83,124991,124993],{"className":120797,"code":124992,"language":120799,"meta":120800,"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,124994,124995,125000,125005,125010,125015,125020,125025,125030,125035,125040],{"__ignoreMap":10},[92,124996,124997],{"class":94,"line":95},[92,124998,124999],{},"[Desktop Entry]\n",[92,125001,125002],{"class":94,"line":11},[92,125003,125004],{},"Version=1.0\n",[92,125006,125007],{"class":94,"line":1158},[92,125008,125009],{},"Type=Application\n",[92,125011,125012],{"class":94,"line":1173},[92,125013,125014],{},"Name=PyCharm\n",[92,125016,125017],{"class":94,"line":1179},[92,125018,125019],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[92,125021,125022],{"class":94,"line":1193},[92,125023,125024],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[92,125026,125027],{"class":94,"line":1199},[92,125028,125029],{},"Comment=JetBrains PyCharm IDE\n",[92,125031,125032],{"class":94,"line":1290},[92,125033,125034],{},"Categories=Development;IDE;\n",[92,125036,125037],{"class":94,"line":1296},[92,125038,125039],{},"Terminal=false\n",[92,125041,125042],{"class":94,"line":1308},[92,125043,125044],{},"StartupWMClass=jetbrains-pycharm\n",[1110,125046,125047,125053,125059,125065],{},[49,125048,125049,125052],{},[89,125050,125051],{},"Exec"," → 点击图标时执行的命令",[49,125054,125055,125058],{},[89,125056,125057],{},"Icon"," → 显示在菜单和桌面上的图标",[49,125060,125061,125064],{},[89,125062,125063],{},"Terminal=false"," → 不打开终端",[49,125066,125067,125070],{},[89,125068,125069],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125072,125073,125074],"blockquote",{},[38,125075,125076,125077,125079,125080],{},"可以理解成 ",[89,125078,124947],{}," 文件是 Linux 的 ",[252,125081,125082],{},"快捷方式配置文件",[38,125084,125085],{},"4️⃣设置可执行权限",[83,125087,125089],{"className":120797,"code":125088,"language":120799,"meta":120800,"style":10},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[89,125090,125091],{"__ignoreMap":10},[92,125092,125093],{"class":94,"line":95},[92,125094,125088],{},[38,125096,125097],{},"5️⃣桌面图标启动的话如下：",[83,125099,125101],{"className":120797,"code":125100,"language":120799,"meta":120800,"style":10},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[89,125102,125103,125108],{"__ignoreMap":10},[92,125104,125105],{"class":94,"line":95},[92,125106,125107],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[92,125109,125110],{"class":94,"line":11},[92,125111,125112],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,125114,125115],{"start":1158},[49,125116,125117],{},"下载Appimage文件实现软件的安装",[38,125119,125120],{},"1️⃣先下载appimage",[38,125122,125123],{},[341,125124,125125],{"href":125125,"rel":125126},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23846],[38,125128,125129],{},[1441,125130],{"alt":10,"src":125131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[38,125133,125134],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[38,125136,125137],{},[1441,125138],{"alt":10,"src":125139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[38,125141,125142],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[38,125144,125145],{},[1441,125146],{"alt":10,"src":125147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[38,125149,125150],{},[1441,125151],{"alt":10,"src":125152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[38,125154,125155,125156,125159],{},"3️⃣给他们放在",[89,125157,125158],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[38,125161,125162],{},"4️⃣给软件执行权限",[83,125164,125166],{"className":120797,"code":125165,"language":120799,"meta":120800,"style":10},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[89,125167,125168,125173],{"__ignoreMap":10},[92,125169,125170],{"class":94,"line":95},[92,125171,125172],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[92,125174,125175],{"class":94,"line":11},[92,125176,125177],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[38,125179,125180],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[83,125182,125184],{"className":117277,"code":125183,"language":117279,"meta":10,"style":10},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[89,125185,125186,125193,125200,125206],{"__ignoreMap":10},[92,125187,125188,125190],{"class":94,"line":95},[92,125189,101257],{"class":151},[92,125191,125192],{"class":207}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[92,125194,125195,125197],{"class":94,"line":11},[92,125196,101264],{"class":1942},[92,125198,125199],{"class":207}," .\u002Fqqmusic.desktop\n",[92,125201,125202,125204],{"class":94,"line":1158},[92,125203,124248],{"class":1942},[92,125205,125199],{"class":207},[92,125207,125208,125210,125212,125214],{"class":94,"line":1173},[92,125209,24558],{"class":1942},[92,125211,24561],{"class":207},[92,125213,123114],{"class":207},[92,125215,125199],{"class":207},[38,125217,125218,125220],{},[89,125219,101264],{},"：一个 Linux 命令，主要功能是：",[1110,125222,125223,125226],{},[49,125224,125225],{},"如果文件不存在，就创建一个新的空文件",[49,125227,125228],{},"如果文件已存在，就更新该文件的最后修改时间",[83,125230,125232],{"className":120797,"code":125231,"language":120799,"meta":120800,"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,125233,125234,125238,125243,125248,125253,125257,125262],{"__ignoreMap":10},[92,125235,125236],{"class":94,"line":95},[92,125237,124999],{},[92,125239,125240],{"class":94,"line":11},[92,125241,125242],{},"Name=QQ音乐\n",[92,125244,125245],{"class":94,"line":1158},[92,125246,125247],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[92,125249,125250],{"class":94,"line":1173},[92,125251,125252],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[92,125254,125255],{"class":94,"line":1179},[92,125256,125009],{},[92,125258,125259],{"class":94,"line":1193},[92,125260,125261],{},"Categories=Audio;Music;Player;\n",[92,125263,125264],{"class":94,"line":1199},[92,125265,125266],{},"Comment=QQ Music Client for Linux\n",[38,125268,125269],{},"将文件复制进去",[38,125271,125272],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[38,125274,125275],{},[1441,125276],{"alt":10,"src":125277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[38,125279,125280],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[38,125282,125283],{},[1441,125284],{"alt":10,"src":125285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[38,125287,125288,125289,125292,125293,125296],{},"如果你用的不是KDE，那么也可以直接修改",[89,125290,125291],{},"qqmuic.desktop","：在exec的末尾加上",[89,125294,125295],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[83,125298,125300],{"className":120797,"code":125299,"language":120799,"meta":120800,"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,125301,125302,125306,125310,125315,125319,125323,125327],{"__ignoreMap":10},[92,125303,125304],{"class":94,"line":95},[92,125305,124999],{},[92,125307,125308],{"class":94,"line":11},[92,125309,125242],{},[92,125311,125312],{"class":94,"line":1158},[92,125313,125314],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[92,125316,125317],{"class":94,"line":1173},[92,125318,125252],{},[92,125320,125321],{"class":94,"line":1179},[92,125322,125009],{},[92,125324,125325],{"class":94,"line":1193},[92,125326,125261],{},[92,125328,125329],{"class":94,"line":1199},[92,125330,125266],{},[38,125332,125333],{},[1441,125334],{"alt":10,"src":125335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[38,125337,125338],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[83,125340,125342],{"className":120797,"code":125341,"language":120799,"meta":120800,"style":10},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[89,125343,125344],{"__ignoreMap":10},[92,125345,125346],{"class":94,"line":95},[92,125347,125341],{},[46,125349,125350],{"start":1173},[49,125351,125352],{},"去Flathub上安装软件",[38,125354,125355],{},[341,125356,125357],{"href":125357,"rel":125358},"https:\u002F\u002Fflathub.org\u002F",[23846],[38,125360,125361],{},"1️⃣去上面的官网搜索软件+下载软件",[38,125363,125364],{},[1441,125365],{"alt":10,"src":125366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[83,125368,125370],{"className":120797,"code":125369,"language":120799,"meta":120800,"style":10},"flatpak install flathub com.obsproject.Studio\n",[89,125371,125372],{"__ignoreMap":10},[92,125373,125374],{"class":94,"line":95},[92,125375,125369],{},[38,125377,125378],{},[1441,125379],{"alt":10,"src":125380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[38,125382,125383],{},"2️⃣运行软件",[38,125385,125386],{},"a.官方方式：",[38,125388,125389],{},[1441,125390],{"alt":10,"src":125391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[83,125393,125394],{"className":120797,"code":125369,"language":120799,"meta":120800,"style":10},[89,125395,125396],{"__ignoreMap":10},[92,125397,125398],{"class":94,"line":95},[92,125399,125369],{},[38,125401,125402],{},"b.当普通软件运行：",[38,125404,125405],{},[1441,125406],{"alt":10,"src":125407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[38,125409,125410],{},[1441,125411],{"alt":10,"src":125412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5106,125414,125415],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":125417},[125418,125419,125424,125425,125431,125432],{"id":122150,"depth":11,"text":122151},{"id":122492,"depth":11,"text":122493,"children":125420},[125421,125422,125423],{"id":122496,"depth":1158,"text":122497},{"id":122563,"depth":1158,"text":122564},{"id":122824,"depth":1158,"text":122825},{"id":122977,"depth":11,"text":122978},{"id":123215,"depth":11,"text":123216,"children":125426},[125427,125428,125429,125430],{"id":123267,"depth":1158,"text":123268},{"id":123553,"depth":1158,"text":123554},{"id":123824,"depth":1158,"text":123825},{"id":124083,"depth":1158,"text":124084},{"id":124142,"depth":11,"text":124143},{"id":124443,"depth":11,"text":124444,"children":125433},[125434,125435,125436,125437,125438,125439,125440,125441],{"id":124447,"depth":1158,"text":124448},{"id":124459,"depth":1158,"text":124460},{"id":124671,"depth":1158,"text":124672},{"id":124695,"depth":1158,"text":124696},{"id":124761,"depth":1158,"text":124762},{"id":124855,"depth":1158,"text":124856},{"id":124862,"depth":1158,"text":124863},{"id":124886,"depth":1158,"text":124887},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122142,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125448,"title":125449,"body":125450,"description":23357,"extension":14,"meta":125454,"navigation":17,"path":125455,"seo":125456,"stem":125457,"__hash__":125458},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125451,"toc":125452},[],{"title":10,"searchDepth":11,"depth":11,"links":125453},[],{"category":30245},"\u002Fwiki\u002F2025-01-27-linux",{"title":125449,"description":23357},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125460,"title":125461,"body":125462,"description":125466,"extension":14,"meta":125857,"navigation":17,"path":125858,"seo":125859,"stem":125860,"__hash__":125861},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125463,"toc":125855},[125464,125467,125471,125488,125491,125544,125548,125550,125590,125599,125603,125606,125847,125852],[38,125465,125466],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[29,125468,125470],{"id":125469},"_1ubuntu环境配置","1.Ubuntu环境配置",[46,125472,125473,125476,125479,125482,125485],{},[49,125474,125475],{},"ubuntu环境换源",[49,125477,125478],{},"安装cuda",[49,125480,125481],{},"安装miniconda",[49,125483,125484],{},"安装pytorch",[49,125486,125487],{},"安装genesis",[38,125489,125490],{},"参考链接：",[83,125492,125494],{"className":23803,"code":125493,"language":23805,"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,125495,125496],{"__ignoreMap":10},[92,125497,125498,125501,125504,125507,125509,125512,125515,125517,125520,125523,125525,125528,125531,125533,125536,125539,125541],{"class":94,"line":95},[92,125499,125500],{"class":1942},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[92,125502,125503],{"class":207},"=blogdetail",[92,125505,125506],{"class":102},"&sharetype",[92,125508,148],{"class":98},[92,125510,125511],{"class":207},"blogdetail",[92,125513,125514],{"class":102},"&sharerId",[92,125516,148],{"class":98},[92,125518,125519],{"class":207},"144728092",[92,125521,125522],{"class":102},"&sharerefer",[92,125524,148],{"class":98},[92,125526,125527],{"class":207},"PC",[92,125529,125530],{"class":102},"&sharesource",[92,125532,148],{"class":98},[92,125534,125535],{"class":207},"qq_69379513",[92,125537,125538],{"class":102},"&sharefrom",[92,125540,148],{"class":98},[92,125542,125543],{"class":207},"from_link\n",[29,125545,125547],{"id":125546},"_2genesis-报错issue","2.Genesis 报错issue",[38,125549,125490],{},[83,125551,125552],{"className":23803,"code":125493,"language":23805,"meta":10,"style":10},[89,125553,125554],{"__ignoreMap":10},[92,125555,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588],{"class":94,"line":95},[92,125557,125500],{"class":1942},[92,125559,125503],{"class":207},[92,125561,125506],{"class":102},[92,125563,148],{"class":98},[92,125565,125511],{"class":207},[92,125567,125514],{"class":102},[92,125569,148],{"class":98},[92,125571,125519],{"class":207},[92,125573,125522],{"class":102},[92,125575,148],{"class":98},[92,125577,125527],{"class":207},[92,125579,125530],{"class":102},[92,125581,148],{"class":98},[92,125583,125535],{"class":207},[92,125585,125538],{"class":102},[92,125587,148],{"class":98},[92,125589,125543],{"class":207},[83,125591,125593],{"className":23803,"code":125592,"language":23805,"meta":10,"style":10},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[89,125594,125595],{"__ignoreMap":10},[92,125596,125597],{"class":94,"line":95},[92,125598,125592],{"class":1942},[29,125600,125602],{"id":125601},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[38,125604,125605],{},"hello_robot.py",[83,125607,125609],{"className":30360,"code":125608,"language":30362,"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,125610,125611,125617,125632,125636,125648,125660,125664,125677,125681,125700,125710,125720,125734,125738,125742,125747,125751,125761,125768,125782,125789,125799,125804,125808,125826,125831,125835,125842],{"__ignoreMap":10},[92,125612,125613,125615],{"class":94,"line":95},[92,125614,30374],{"class":98},[92,125616,45287],{"class":102},[92,125618,125619,125622,125625,125627,125629],{"class":94,"line":11},[92,125620,125621],{"class":102},"os.environ[",[92,125623,125624],{"class":207},"'PYOPENGL_PLATFORM'",[92,125626,4422],{"class":102},[92,125628,148],{"class":98},[92,125630,125631],{"class":207}," 'glx'\n",[92,125633,125634],{"class":94,"line":1158},[92,125635,2379],{"emptyLinePlaceholder":17},[92,125637,125638,125640,125643,125645],{"class":94,"line":1173},[92,125639,30374],{"class":98},[92,125641,125642],{"class":102}," genesis ",[92,125644,31365],{"class":98},[92,125646,125647],{"class":102}," gs\n",[92,125649,125650,125652,125655,125657],{"class":94,"line":1179},[92,125651,30719],{"class":98},[92,125653,125654],{"class":102}," pynput ",[92,125656,30374],{"class":98},[92,125658,125659],{"class":102}," keyboard\n",[92,125661,125662],{"class":94,"line":1193},[92,125663,2379],{"emptyLinePlaceholder":17},[92,125665,125666,125669,125672,125674],{"class":94,"line":1199},[92,125667,125668],{"class":102},"gs.init(",[92,125670,125671],{"class":5196},"backend",[92,125673,148],{"class":98},[92,125675,125676],{"class":102},"gs.gpu)\n",[92,125678,125679],{"class":94,"line":1290},[92,125680,2379],{"emptyLinePlaceholder":17},[92,125682,125683,125686,125688,125691,125694,125696,125698],{"class":94,"line":1296},[92,125684,125685],{"class":102},"scene ",[92,125687,148],{"class":98},[92,125689,125690],{"class":102}," gs.Scene(",[92,125692,125693],{"class":5196},"show_viewer",[92,125695,148],{"class":98},[92,125697,31458],{"class":151},[92,125699,109],{"class":102},[92,125701,125702,125705,125707],{"class":94,"line":1308},[92,125703,125704],{"class":102},"plane ",[92,125706,148],{"class":98},[92,125708,125709],{"class":102}," scene.add_entity(gs.morphs.Plane())\n",[92,125711,125712,125715,125717],{"class":94,"line":1591},[92,125713,125714],{"class":102},"franka ",[92,125716,148],{"class":98},[92,125718,125719],{"class":102}," scene.add_entity(\n",[92,125721,125722,125725,125727,125729,125732],{"class":94,"line":1596},[92,125723,125724],{"class":102},"    gs.morphs.MJCF(",[92,125726,45336],{"class":5196},[92,125728,148],{"class":98},[92,125730,125731],{"class":207},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[92,125733,38029],{"class":102},[92,125735,125736],{"class":94,"line":1602},[92,125737,109],{"class":102},[92,125739,125740],{"class":94,"line":1607},[92,125741,2379],{"emptyLinePlaceholder":17},[92,125743,125744],{"class":94,"line":1621},[92,125745,125746],{"class":102},"scene.build()\n",[92,125748,125749],{"class":94,"line":1626},[92,125750,2379],{"emptyLinePlaceholder":17},[92,125752,125753,125755,125758],{"class":94,"line":1632},[92,125754,31929],{"class":98},[92,125756,125757],{"class":1942}," on_press",[92,125759,125760],{"class":102},"(key):\n",[92,125762,125763,125766],{"class":94,"line":1653},[92,125764,125765],{"class":98},"    try",[92,125767,3718],{"class":102},[92,125769,125770,125772,125775,125777,125780],{"class":94,"line":1658},[92,125771,2476],{"class":98},[92,125773,125774],{"class":102}," key.char ",[92,125776,2928],{"class":98},[92,125778,125779],{"class":207}," 'q'",[92,125781,3718],{"class":102},[92,125783,125784,125786],{"class":94,"line":1672},[92,125785,15712],{"class":98},[92,125787,125788],{"class":151}," False\n",[92,125790,125791,125794,125797],{"class":94,"line":1677},[92,125792,125793],{"class":98},"    except",[92,125795,125796],{"class":151}," AttributeError",[92,125798,3718],{"class":102},[92,125800,125801],{"class":94,"line":1706},[92,125802,125803],{"class":98},"        pass\n",[92,125805,125806],{"class":94,"line":1711},[92,125807,2379],{"emptyLinePlaceholder":17},[92,125809,125810,125813,125815,125818,125821,125823],{"class":94,"line":1728},[92,125811,125812],{"class":102},"listener ",[92,125814,148],{"class":98},[92,125816,125817],{"class":102}," keyboard.Listener(",[92,125819,125820],{"class":5196},"on_press",[92,125822,148],{"class":98},[92,125824,125825],{"class":102},"on_press)\n",[92,125827,125828],{"class":94,"line":1733},[92,125829,125830],{"class":102},"listener.start()\n",[92,125832,125833],{"class":94,"line":1738},[92,125834,2379],{"emptyLinePlaceholder":17},[92,125836,125837,125839],{"class":94,"line":1743},[92,125838,108644],{"class":98},[92,125840,125841],{"class":102}," listener.running:\n",[92,125843,125844],{"class":94,"line":1757},[92,125845,125846],{"class":102},"    scene.step()\n",[38,125848,125849],{},[1441,125850],{"alt":10,"src":125851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5106,125853,125854],{},"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":125856},[],{"category":23359},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125461,"description":125466},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125863,"title":125864,"body":125865,"description":23357,"extension":14,"meta":125880,"navigation":17,"path":125881,"seo":125882,"stem":125883,"__hash__":125884},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125866,"toc":125877},[125867,125870,125874],[29,125868,125864],{"id":125869},"_1-基础知识",[33,125871,125873],{"id":125872},"_11-js的组成","1.1 js的组成",[38,125875,125876],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":10,"searchDepth":11,"depth":11,"links":125878},[125879],{"id":125872,"depth":11,"text":125873},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125864,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125886,"title":125887,"body":125888,"description":23357,"extension":14,"meta":126027,"navigation":17,"path":126028,"seo":126029,"stem":126030,"__hash__":126031},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125889,"toc":126015},[125890,125893,125897,125900,125904,125914,125918,125921,125924,125927,125931,125938,125944,125948,125954,125965,125969,125972,125976,125979,125983,125986,125990,125993,125997,126000,126003,126006,126009,126012],[29,125891,125887],{"id":125892},"_2-vscode必备内容",[33,125894,125896],{"id":125895},"_21-标签分类","2.1 标签分类",[38,125898,125899],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[33,125901,125903],{"id":125902},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[38,125905,125906,125907,125909,125910,125913],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[89,125908,329],{}," 然后按 ",[89,125911,125912],{},"Tab","，快速自动生成基本结构。",[33,125915,125917],{"id":125916},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[38,125919,125920],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[38,125922,125923],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[38,125925,125926],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[33,125928,125930],{"id":125929},"_24-视图缩放","2.4 视图缩放",[38,125932,125933,125934,125937],{},"缩放视图 ",[89,125935,125936],{},"ctrl+"," 可实现代码增大。",[38,125939,125940,125943],{},[89,125941,125942],{},"ctrl-"," 可实现代码减小。",[33,125945,125947],{"id":125946},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[38,125949,125950,125951,28367],{},"VSCode 新建文件快捷键为 ",[89,125952,125953],{},"ctrl+N",[38,125955,125956,125957,125960,125961,125964],{},"保存快捷键为 ",[89,125958,125959],{},"ctrl+S","，将文本保存为 ",[89,125962,125963],{},".html"," 文件。",[33,125966,125968],{"id":125967},"_26-auto-rename-tag","2.6 Auto Rename Tag",[38,125970,125971],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[33,125973,125975],{"id":125974},"_27-vscode-icons","2.7 vscode-icons",[38,125977,125978],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[33,125980,125982],{"id":125981},"_28-easy-less","2.8 Easy LESS",[38,125984,125985],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[33,125987,125989],{"id":125988},"_29-会了吧插件","2.9 会了吧插件",[38,125991,125992],{},"会了吧插件可以展示代码中英语单词的意思。",[33,125994,125996],{"id":125995},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[38,125998,125999],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[38,126001,126002],{},"②选定多个相同的单词:ctrl+D",[38,126004,126005],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[38,126007,126008],{},"④全局替换某些单词:ctrl+h",[38,126010,126011],{},"⑤快速定位到某一行:ctrl+g",[38,126013,126014],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":10,"searchDepth":11,"depth":11,"links":126016},[126017,126018,126019,126020,126021,126022,126023,126024,126025,126026],{"id":125895,"depth":11,"text":125896},{"id":125902,"depth":11,"text":125903},{"id":125916,"depth":11,"text":125917},{"id":125929,"depth":11,"text":125930},{"id":125946,"depth":11,"text":125947},{"id":125967,"depth":11,"text":125968},{"id":125974,"depth":11,"text":125975},{"id":125981,"depth":11,"text":125982},{"id":125988,"depth":11,"text":125989},{"id":125995,"depth":11,"text":125996},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125887,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126033,"title":126034,"body":126035,"description":23357,"extension":14,"meta":126194,"navigation":17,"path":126195,"seo":126196,"stem":126197,"__hash__":126198},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126036,"toc":126186},[126037,126040,126044,126054,126060,126066,126070,126079,126083,126088,126091,126094,126098,126101,126111,126120,126129,126138,126148,126155,126160,126165,126178],[29,126038,126034],{"id":126039},"_3-html文本与容器标签",[33,126041,126043],{"id":126042},"_31-标题标签","3.1 标题标签",[38,126045,126046,126049,126050,126053],{},[89,126047,126048],{},"\u003Ch1>","我是一级标签",[89,126051,126052],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[38,126055,126056,126049,126058],{},[89,126057,126048],{},[89,126059,126052],{},[38,126061,123316,126062,126065],{},[89,126063,126064],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[33,126067,126069],{"id":126068},"_32-段落标签","3.2 段落标签",[38,126071,126072,126075,126076],{},[89,126073,126074],{},"\u003Cp>","....",[89,126077,126078],{},"\u003C\u002Fp>",[33,126080,126082],{"id":126081},"_33-换行标签","3.3 换行标签",[38,126084,126085],{},[89,126086,126087],{},"\u003Cbr \u002F>",[38,126089,126090],{},"具有强制换行的作用",[38,126092,126093],{},"单标签",[33,126095,126097],{"id":126096},"_34-文本格式化标签","3.4 文本格式化标签",[38,126099,126100],{},"提供粗体、斜体和下划线等效果",[38,126102,126103,126104,82521,126107,126110],{},"加粗：",[89,126105,126106],{},"\u003Cstrong>...\u003C\u002Fstrong>",[89,126108,126109],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[38,126112,126113,126114,82521,126117,126110],{},"斜体：",[89,126115,126116],{},"\u003Cem>...\u003C\u002Fem>",[89,126118,126119],{},"\u003Ci>...\u003C\u002Fi>",[38,126121,126122,126123,82521,126126,126110],{},"删除线：",[89,126124,126125],{},"\u003Cdel>...\u003C\u002Fdel>",[89,126127,126128],{},"\u003Cs>...\u003C\u002Fs>",[38,126130,126131,126132,82521,126135,126110],{},"下划线：",[89,126133,126134],{},"\u003Cins>...\u003C\u002Fins>",[89,126136,126137],{},"\u003Cu>...\u003C\u002Fu>",[33,126139,126141,126142,18390,126145,102674],{"id":126140},"_35-div和span标签","3.5 ",[89,126143,126144],{},"\u003Cdiv>",[89,126146,126147],{},"\u003Cspan>",[38,126149,126150,100999,126152,126154],{},[89,126151,126144],{},[89,126153,126147],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[38,126156,126157],{},[89,126158,126159],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[38,126161,126162],{},[89,126163,126164],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[38,126166,126167,126168,126170,126171,126173,126174,126177],{},"两者特点：①",[89,126169,126144],{}," 标签用来布局，但一行通常只放一个 ",[89,126172,126144],{},"。可以理解为一个大盒子，独占一行，在 ",[89,126175,126176],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[38,126179,77231,126180,126182,126183,126185],{},[89,126181,126147],{}," 标签也可用于布局，一行可以放多个 ",[89,126184,126147],{},"，可理解为小盒子。",{"title":10,"searchDepth":11,"depth":11,"links":126187},[126188,126189,126190,126191,126192],{"id":126042,"depth":11,"text":126043},{"id":126068,"depth":11,"text":126069},{"id":126081,"depth":11,"text":126082},{"id":126096,"depth":11,"text":126097},{"id":126140,"depth":11,"text":126193},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126034,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126200,"title":126201,"body":126202,"description":23357,"extension":14,"meta":126399,"navigation":17,"path":126400,"seo":126401,"stem":126402,"__hash__":126403},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126203,"toc":126391},[126204,126207,126211,126214,126220,126227,126233,126239,126242,126245,126248,126251,126254,126257,126260,126264,126267,126270,126273,126279,126285,126291,126298,126302,126308,126314,126317,126320,126326,126332,126338,126341,126344,126348,126351,126361,126367,126371,126380,126384,126387],[29,126205,126201],{"id":126206},"_4-html图像与链接",[33,126208,126210],{"id":126209},"_41-图像标签","4.1 图像标签",[38,126212,126213],{},"（1）标签",[38,126215,126216,126219],{},[89,126217,126218],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[38,126221,126222,126223,126226],{},"src是",[89,126224,126225],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[38,126228,126229,126230],{},"alt:文本，替换文本。图像不能显示的文字 ",[89,126231,126232],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[38,126234,126235,126236],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[89,126237,126238],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[38,126240,126241],{},"width:像素，设置图像的宽度",[38,126243,126244],{},"height:像素，设置图像的高度",[38,126246,126247],{},"border：像素，设置图像的边框粗细",[38,126249,126250],{},"（2）图像标签属性的注意点：",[38,126252,126253],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[38,126255,126256],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[38,126258,126259],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[33,126261,126263],{"id":126262},"_42-路径注意要点","4.2 路径注意要点：",[38,126265,126266],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[38,126268,126269],{},"（2）根目录：就是打开文件夹的第一层根目录",[38,126271,126272],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[38,126274,126275,126276],{},"①同一级路径：图像文件位于HTML文件同一级，如",[89,126277,126278],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[38,126280,126281,126282],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[89,126283,126284],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[38,126286,126287,126288],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[89,126289,126290],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[38,126292,126293,126294,354],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[341,126295,126296],{"href":126296,"rel":126297},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23846],[33,126299,126301],{"id":126300},"_43-超链接标签","4.3 超链接标签",[38,126303,126304,126307],{},[89,126305,126306],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[38,126309,126310,126311],{},"①语法格式：",[89,126312,126313],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[38,126315,126316],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[38,126318,126319],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[38,126321,126322,126323],{},"③链接分类：外部链接：",[89,126324,126325],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[38,126327,126328,126329],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[89,126330,126331],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[38,126333,126334,126335],{},"空链接：如果当时没有确定链接目标时，",[89,126336,126337],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[38,126339,126340],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[38,126342,126343],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[33,126345,126347],{"id":126346},"_44-锚点链接","4.4 锚点链接",[38,126349,126350],{},"点我们点击链接，可以快速定位到页面中的某个位置",[38,126352,126353,126354,126357,126358],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[89,126355,126356],{},"\u003Ca href=\"#two\">","第二级",[89,126359,126360],{},"\u003C\u002Fa>",[38,126362,126363,126364],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[89,126365,126366],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[33,126368,126370],{"id":126369},"_45-注释标签","4.5 注释标签",[38,126372,126373,126376,126377],{},[89,126374,126375],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[89,126378,126379],{},"ctrl+\u002F",[33,126381,126383],{"id":126382},"_46-特殊字符","4.6 特殊字符",[38,126385,126386],{},"可以实现添加多个空格",[1441,126388],{"style":126389,"src":126390},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":10,"searchDepth":11,"depth":11,"links":126392},[126393,126394,126395,126396,126397,126398],{"id":126209,"depth":11,"text":126210},{"id":126262,"depth":11,"text":126263},{"id":126300,"depth":11,"text":126301},{"id":126346,"depth":11,"text":126347},{"id":126369,"depth":11,"text":126370},{"id":126382,"depth":11,"text":126383},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126201,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126405,"title":126406,"body":126407,"description":23357,"extension":14,"meta":126700,"navigation":17,"path":126701,"seo":126702,"stem":126703,"__hash__":126704},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126408,"toc":126691},[126409,126412,126416,126419,126422,126425,126428,126431,126434,126437,126440,126443,126463,126469,126473,126476,126479,126482,126485,126488,126491,126495,126498,126501,126504,126507,126520,126525,126528,126531,126546,126549,126552,126555,126558,126561,126565,126568,126575,126578,126581,126584,126587,126590,126596,126599,126602,126608,126611,126614,126617,126623,126626,126629,126643,126650,126653,126656,126663,126672,126675,126678,126681,126685,126688],[29,126410,126406],{"id":126411},"_5-html表格列表与表单",[33,126413,126415],{"id":126414},"_51-表格标签","5.1 表格标签",[38,126417,126418],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[38,126420,126421],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[38,126423,126424],{},"②表格基本语法：",[1441,126426],{"style":126389,"src":126427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[38,126429,126430],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1441,126432],{"style":126389,"src":126433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[38,126435,126436],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1441,126438],{"style":126389,"src":126439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[38,126441,126442],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[38,126444,126445,126448,126449,126451,126452,126455,126456,126458,126459,126462],{},[89,126446,126447],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[89,126450,126447],{},"内部必须拥有",[89,126453,126454],{},"\u003Ctr>","标签，一般位于第一行，",[89,126457,126447],{},"比",[89,126460,126461],{},"\u003Cth>","范围广",[38,126464,126465,126468],{},[89,126466,126467],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[33,126470,126472],{"id":126471},"_52-合并单元格","5.2 合并单元格",[38,126474,126475],{},"（1）合并单元格方式：",[38,126477,126478],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[38,126480,126481],{},"②跨列合并：colspan=\"合并单元格的个数\"",[38,126483,126484],{},"（2）目标单元格：",[38,126486,126487],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[38,126489,126490],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[33,126492,126494],{"id":126493},"_53-列表标签","5.3 列表标签",[38,126496,126497],{},"（1）分类：无序列表、有序列表、自定义列表",[38,126499,126500],{},"①无序列表：",[1441,126502],{"style":126389,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[38,126505,126506],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[38,126508,126509,126512,126513,126516,126517,126519],{},[89,126510,126511],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[89,126514,126515],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[89,126518,126511],{},"中输入其他标签或文字是不对的",[38,126521,126522,126524],{},[89,126523,126515],{},"之间相当于一个容器，可以容纳所有元素",[38,126526,126527],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[38,126529,126530],{},"在css中去除前边的小圆点采用如下代码:",[83,126532,126536],{"className":126533,"code":126534,"language":126535,"meta":10,"style":10},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[89,126537,126538],{"__ignoreMap":10},[92,126539,126540,126543],{"class":94,"line":95},[92,126541,126542],{"class":51282},"list-style",[92,126544,126545],{"class":102},": none;\n",[38,126547,126548],{},"②有序列表：",[1441,126550],{"style":126389,"src":126551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[38,126553,126554],{},"③自定义列表：",[1441,126556],{"style":126389,"src":126557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1441,126559],{"style":126389,"src":126560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[33,126562,126564],{"id":126563},"_54-表单标签","5.4 表单标签",[38,126566,126567],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[38,126569,126570,126571,126574],{},"（1）表单域：包含单元素的区域，",[89,126572,126573],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1441,126576],{"style":126389,"src":126577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[38,126579,126580],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[38,126582,126583],{},"表单元素提交必须有name属性",[38,126585,126586],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[38,126588,126589],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[38,126591,77208,126592,126595],{},[89,126593,126594],{},"\u003Cinput>","输入表单元素",[1441,126597],{"style":126389,"src":126598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1441,126600],{"style":126389,"src":126601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[38,126603,126604,126605],{},"单选按钮：",[89,126606,126607],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1441,126609],{"style":126389,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[38,126612,126613],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1441,126615],{"style":126389,"src":126616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[38,126618,126619,126622],{},[252,126620,126621],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[38,126624,126625],{},"②select下拉表单元素：可以节约页面控件",[1441,126627],{"style":126389,"src":126628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[38,126630,126631,13775,126633,126636,126637,126639,126640,126642],{},[252,126632,132],{},[89,126634,126635],{},"\u003Cselect>","中至少包含一对",[89,126638,102695],{},"；在",[89,126641,102695],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[38,126644,126645,126646,126649],{},"③",[89,126647,126648],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1441,126651],{"style":126389,"src":126652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[38,126654,126655],{},"3行20列",[33,126657,126659,126660,102674],{"id":126658},"_55-lable标签","5.5 ",[89,126661,126662],{},"\u003Clable>",[38,126664,126665,126666,126668,126669,126671],{},"它不是表单标签，但常常与表单标签搭配使用，",[89,126667,126662],{},"标签用于绑定一个表单标签，当点击",[89,126670,126662],{},"标签内的文本",[38,126673,126674],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1441,126676],{"style":126389,"src":126677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1441,126679],{"style":126389,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[33,126682,126684],{"id":126683},"_56-实例","5.6 实例",[1441,126686],{"style":126389,"src":126687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5106,126689,126690],{},"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":126692},[126693,126694,126695,126696,126697,126699],{"id":126414,"depth":11,"text":126415},{"id":126471,"depth":11,"text":126472},{"id":126493,"depth":11,"text":126494},{"id":126563,"depth":11,"text":126564},{"id":126658,"depth":11,"text":126698},"5.5 \u003Clable>标签",{"id":126683,"depth":11,"text":126684},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126406,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126706,"title":126707,"body":126708,"description":23357,"extension":14,"meta":127257,"navigation":17,"path":127258,"seo":127259,"stem":127260,"__hash__":127261},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126709,"toc":127232},[126710,126713,126717,126720,126723,126727,126730,126733,126736,126739,126742,126745,126748,126752,126755,126759,126762,126765,126768,126772,126775,126778,126781,126787,126790,126793,126796,126799,126802,126805,126808,126841,126845,126848,126851,126854,126858,126861,126864,126867,126870,126873,126877,126880,126883,126886,126890,126893,126897,126900,126904,126907,126912,126916,126919,126923,126926,126929,126932,126935,126962,126965,126969,126972,126975,126980,126983,126986,126990,126993,126998,127001,127004,127007,127011,127014,127017,127020,127024,127027,127030,127033,127037,127041,127044,127084,127087,127091,127098,127101,127105,127108,127154,127158,127161,127164,127167,127195,127199,127202,127229],[29,126711,126707],{"id":126712},"_6-css语法与文本样式",[33,126714,126716],{"id":126715},"_61-css语法规范","6.1 css语法规范",[38,126718,126719],{},"由两部分组成，选择器及一条或多条声明",[1441,126721],{"style":126389,"src":126722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[38,126724,126725],{},[252,126726,132],{},[38,126728,126729],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[38,126731,126732],{},"②属性与属性值以“键值对”的形式出现",[38,126734,126735],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[38,126737,126738],{},"④属性和属性值之间用英文“;”分开",[1441,126740],{"style":126389,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1441,126743],{"style":126389,"src":126744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1441,126746],{"style":126389,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[33,126749,126751],{"id":126750},"_62-css选择器","6.2 css选择器",[38,126753,126754],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[63,126756,126758],{"id":126757},"_621-标签选择器","6.2.1 标签选择器",[38,126760,126761],{},"①优点：能快速为页面中同类型的标签统一设置样式",[38,126763,126764],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1441,126766],{"style":126389,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[63,126769,126771],{"id":126770},"_622-类选择器","6.2.2 类选择器",[38,126773,126774],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[38,126776,126777],{},"②样例",[1441,126779],{"style":126389,"src":126780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[38,126782,126783,126784,126786],{},"③ ",[252,126785,126621],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[38,126788,126789],{},"可以理解为给这个标签起了个名字，来表示；",[38,126791,126792],{},"长名称或词组可以使用横线来为选择器命名；",[38,126794,126795],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[38,126797,126798],{},"命名要有意义；",[1441,126800],{"style":126389,"src":126801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[38,126803,126804],{},"类选择器也可以指定特殊的元素p.center{}",[38,126806,126807],{},"p.center和.center都对",[83,126809,126811],{"className":126533,"code":126810,"language":126535,"meta":10,"style":10},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[89,126812,126813,126818,126827,126837],{"__ignoreMap":10},[92,126814,126815],{"class":94,"line":95},[92,126816,126817],{"class":161},"\u002F* 类选择器指定特殊元素 *\u002F\n",[92,126819,126820,126822,126825],{"class":94,"line":11},[92,126821,38],{"class":51282},[92,126823,126824],{"class":1942},".center",[92,126826,15552],{"class":102},[92,126828,126829,126831,126833,126835],{"class":94,"line":1158},[92,126830,70508],{"class":151},[92,126832,51419],{"class":102},[92,126834,51574],{"class":151},[92,126836,1269],{"class":102},[92,126838,126839],{"class":94,"line":1173},[92,126840,1544],{"class":102},[63,126842,126844],{"id":126843},"_623-多类名使用","6.2.3 多类名使用",[38,126846,126847],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1441,126849],{"style":126389,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[38,126852,126853],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[63,126855,126857],{"id":126856},"_624-id选择器","6.2.4 id选择器",[38,126859,126860],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[38,126862,126863],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1441,126865],{"style":126389,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[38,126868,126869],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[38,126871,126872],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[63,126874,126876],{"id":126875},"_625-通配符选择器","6.2.5 通配符选择器",[38,126878,126879],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[38,126881,126882],{},"* {",[38,126884,126885],{},"color=\"red\"}",[63,126887,126889],{"id":126888},"_626-总结","6.2.6 总结",[1441,126891],{"style":126389,"src":126892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[33,126894,126896],{"id":126895},"_63-css字体属性","6.3 css字体属性",[38,126898,126899],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[63,126901,126903],{"id":126902},"_631-字体系列","6.3.1 字体系列",[38,126905,126906],{},"font-family: '宋体';",[38,126908,126909,126911],{},[252,126910,132],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[63,126913,126915],{"id":126914},"_632-字体大小","6.3.2 字体大小",[38,126917,126918],{},"font-size: 20px",[38,126920,126921,26455],{},[252,126922,126621],{},[38,126924,126925],{},"①px（像素）大小是网页的最常用单位",[38,126927,126928],{},"②谷歌浏览器默认为16px",[38,126930,126931],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[38,126933,126934],{},"④可以给body指定整个页面的大小：会自动引用",[83,126936,126938],{"className":126533,"code":126937,"language":126535,"meta":10,"style":10},"body {\n  font-size: 16px;\n}\n",[89,126939,126940,126946,126958],{"__ignoreMap":10},[92,126941,126942,126944],{"class":94,"line":95},[92,126943,51782],{"class":51282},[92,126945,15552],{"class":102},[92,126947,126948,126950,126952,126954,126956],{"class":94,"line":11},[92,126949,70608],{"class":151},[92,126951,51419],{"class":102},[92,126953,704],{"class":151},[92,126955,51474],{"class":98},[92,126957,1269],{"class":102},[92,126959,126960],{"class":94,"line":1158},[92,126961,1544],{"class":102},[38,126963,126964],{},"⑤标题标签比较特殊，需要单独指定大小",[63,126966,126968],{"id":126967},"_633-字体粗细","6.3.3 字体粗细",[38,126970,126971],{},"font-weight: bold;",[38,126973,126974],{},"font-weight: 100；",[38,126976,126977,126979],{},[252,126978,132],{}," ①粗体文字变细：尽量别用normal，多用数字",[38,126981,126982],{},"font-weight= 400;",[38,126984,126985],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[63,126987,126989],{"id":126988},"_634-文字样式","6.3.4 文字样式",[38,126991,126992],{},"font-style: normal；",[38,126994,126995,26455],{},[252,126996,126997],{},"属性值",[38,126999,127000],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[38,127002,127003],{},"②italic：浏览器会显示斜体的字体样式",[1441,127005],{"style":126389,"src":127006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[63,127008,127010],{"id":127009},"_635-字体符合属性","6.3.5 字体符合属性",[1441,127012],{"style":126389,"src":127013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1441,127015],{"style":126389,"src":127016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[38,127018,127019],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[38,127021,127022,26455],{},[252,127023,126621],{},[38,127025,127026],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[38,127028,127029],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[38,127031,127032],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[33,127034,127036],{"id":127035},"_64-css-test文本属性","6.4 css test文本属性",[63,127038,127040],{"id":127039},"_641-文本颜色","6.4.1 文本颜色",[38,127042,127043],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[83,127045,127047],{"className":126533,"code":127046,"language":126535,"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,127048,127049,127054,127060,127070,127075,127080],{"__ignoreMap":10},[92,127050,127051],{"class":94,"line":95},[92,127052,127053],{"class":161},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[92,127055,127056,127058],{"class":94,"line":11},[92,127057,38],{"class":51282},[92,127059,15552],{"class":102},[92,127061,127062,127064,127066,127068],{"class":94,"line":1158},[92,127063,70887],{"class":151},[92,127065,51419],{"class":102},[92,127067,57403],{"class":151},[92,127069,1269],{"class":102},[92,127071,127072],{"class":94,"line":1173},[92,127073,127074],{"class":161},"  \u002F* color: #ff0000; *\u002F\n",[92,127076,127077],{"class":94,"line":1179},[92,127078,127079],{"class":161},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[92,127081,127082],{"class":94,"line":1193},[92,127083,1544],{"class":102},[1441,127085],{"style":126389,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[63,127088,127090],{"id":127089},"_642-对齐文本","6.4.2 对齐文本",[38,127092,127093,127094,127097],{},"text-align属于用于设置元素内文本内容的 ",[252,127095,127096],{},"水平对齐"," 方式",[38,127099,127100],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[63,127102,127104],{"id":127103},"_643-装饰文本","6.4.3 装饰文本",[38,127106,127107],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[83,127109,127111],{"className":126533,"code":127110,"language":126535,"meta":10,"style":10},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[89,127112,127113,127119,127129,127133,127139,127150],{"__ignoreMap":10},[92,127114,127115,127117],{"class":94,"line":95},[92,127116,341],{"class":51282},[92,127118,15552],{"class":102},[92,127120,127121,127123,127125,127127],{"class":94,"line":11},[92,127122,70484],{"class":151},[92,127124,51419],{"class":102},[92,127126,54719],{"class":151},[92,127128,1269],{"class":102},[92,127130,127131],{"class":94,"line":1158},[92,127132,1544],{"class":102},[92,127134,127135,127137],{"class":94,"line":1173},[92,127136,38],{"class":51282},[92,127138,15552],{"class":102},[92,127140,127141,127143,127145,127148],{"class":94,"line":1179},[92,127142,70484],{"class":151},[92,127144,51419],{"class":102},[92,127146,127147],{"class":151},"underline",[92,127149,1269],{"class":102},[92,127151,127152],{"class":94,"line":1193},[92,127153,1544],{"class":102},[63,127155,127157],{"id":127156},"_644-文本缩进","6.4.4 文本缩进",[38,127159,127160],{},"实现文本的第一行首行缩进自己指定的距离",[38,127162,127163],{},"20px往右边走；-20px往左边走",[38,127165,127166],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[83,127168,127170],{"className":126533,"code":127169,"language":126535,"meta":10,"style":10},"p {\n  text-indent: 2em;\n}\n",[89,127171,127172,127178,127191],{"__ignoreMap":10},[92,127173,127174,127176],{"class":94,"line":95},[92,127175,38],{"class":51282},[92,127177,15552],{"class":102},[92,127179,127180,127183,127185,127187,127189],{"class":94,"line":11},[92,127181,127182],{"class":151},"  text-indent",[92,127184,51419],{"class":102},[92,127186,180],{"class":151},[92,127188,23534],{"class":98},[92,127190,1269],{"class":102},[92,127192,127193],{"class":94,"line":1158},[92,127194,1544],{"class":102},[63,127196,127198],{"id":127197},"_645-行间距","6.4.5 行间距",[38,127200,127201],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[83,127203,127205],{"className":126533,"code":127204,"language":126535,"meta":10,"style":10},"p {\n  line-height: 1.6;\n}\n",[89,127206,127207,127213,127225],{"__ignoreMap":10},[92,127208,127209,127211],{"class":94,"line":95},[92,127210,38],{"class":51282},[92,127212,15552],{"class":102},[92,127214,127215,127218,127220,127223],{"class":94,"line":11},[92,127216,127217],{"class":151},"  line-height",[92,127219,51419],{"class":102},[92,127221,127222],{"class":151},"1.6",[92,127224,1269],{"class":102},[92,127226,127227],{"class":94,"line":1158},[92,127228,1544],{"class":102},[5106,127230,127231],{},"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":127233},[127234,127235,127243,127250],{"id":126715,"depth":11,"text":126716},{"id":126750,"depth":11,"text":126751,"children":127236},[127237,127238,127239,127240,127241,127242],{"id":126757,"depth":1158,"text":126758},{"id":126770,"depth":1158,"text":126771},{"id":126843,"depth":1158,"text":126844},{"id":126856,"depth":1158,"text":126857},{"id":126875,"depth":1158,"text":126876},{"id":126888,"depth":1158,"text":126889},{"id":126895,"depth":11,"text":126896,"children":127244},[127245,127246,127247,127248,127249],{"id":126902,"depth":1158,"text":126903},{"id":126914,"depth":1158,"text":126915},{"id":126967,"depth":1158,"text":126968},{"id":126988,"depth":1158,"text":126989},{"id":127009,"depth":1158,"text":127010},{"id":127035,"depth":11,"text":127036,"children":127251},[127252,127253,127254,127255,127256],{"id":127039,"depth":1158,"text":127040},{"id":127089,"depth":1158,"text":127090},{"id":127103,"depth":1158,"text":127104},{"id":127156,"depth":1158,"text":127157},{"id":127197,"depth":1158,"text":127198},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126707,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127263,"title":127264,"body":127265,"description":23357,"extension":14,"meta":127914,"navigation":17,"path":127915,"seo":127916,"stem":127917,"__hash__":127918},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127266,"toc":127895},[127267,127270,127274,127278,127338,127342,127352,127355,127358,127362,127387,127391,127394,127397,127400,127403,127406,127410,127413,127416,127458,127461,127487,127493,127496,127500,127504,127510,127513,127516,127519,127522,127525,127528,127573,127577,127580,127583,127587,127591,127620,127623,127628,127631,127634,127637,127640,127644,127648,127651,127653,127656,127660,127663,127667,127670,127673,127676,127680,127684,127690,127700,127703,127706,127709,127712,127715,127838,127846,127854,127892],[29,127268,127264],{"id":127269},"_7-css引入方式与选择器进阶",[33,127271,127273],{"id":127272},"_71-css引入方式","7.1 css引入方式",[63,127275,127277],{"id":127276},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[83,127279,127283],{"className":127280,"code":127281,"language":127282,"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,127284,127285,127293,127300,127312,127325,127330],{"__ignoreMap":10},[92,127286,127287,127289,127291],{"class":94,"line":95},[92,127288,1013],{"class":102},[92,127290,5106],{"class":51282},[92,127292,51289],{"class":102},[92,127294,127295,127298],{"class":94,"line":11},[92,127296,127297],{"class":51282},"  h1",[92,127299,15552],{"class":102},[92,127301,127302,127305,127307,127310],{"class":94,"line":1158},[92,127303,127304],{"class":151},"    color",[92,127306,51419],{"class":102},[92,127308,127309],{"class":151},"blue",[92,127311,1269],{"class":102},[92,127313,127314,127317,127319,127321,127323],{"class":94,"line":1173},[92,127315,127316],{"class":151},"    font-size",[92,127318,51419],{"class":102},[92,127320,903],{"class":151},[92,127322,51474],{"class":98},[92,127324,1269],{"class":102},[92,127326,127327],{"class":94,"line":1179},[92,127328,127329],{"class":102},"  }\n",[92,127331,127332,127334,127336],{"class":94,"line":1193},[92,127333,51767],{"class":102},[92,127335,5106],{"class":51282},[92,127337,51289],{"class":102},[38,127339,127340,26455],{},[252,127341,126621],{},[38,127343,77208,127344,127347,127348,127351],{},[89,127345,127346],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[89,127349,127350],{},"\u003Chead>","标签中",[38,127353,127354],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[38,127356,127357],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[63,127359,127361],{"id":127360},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[83,127363,127365],{"className":127280,"code":127364,"language":127282,"meta":10,"style":10},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[89,127366,127367],{"__ignoreMap":10},[92,127368,127369,127371,127373,127375,127377,127380,127383,127385],{"class":94,"line":95},[92,127370,1013],{"class":102},[92,127372,38],{"class":51282},[92,127374,62608],{"class":1942},[92,127376,148],{"class":102},[92,127378,127379],{"class":207},"\"color: red; font-size: 16px;\"",[92,127381,127382],{"class":102},">这是一个段落\u003C\u002F",[92,127384,38],{"class":51282},[92,127386,51289],{"class":102},[38,127388,127389,26455],{},[252,127390,126621],{},[38,127392,127393],{},"①style其实就是标签的属性",[38,127395,127396],{},"②在双引号中间，写法要符合css规范",[38,127398,127399],{},"③可以控制当前的标签设置样式",[38,127401,127402],{},"④书写繁琐，简单时才用",[38,127404,127405],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[63,127407,127409],{"id":127408},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[38,127411,127412],{},"使用最多，单独建一个css文件，然后html引用",[38,127414,127415],{},"①css文件部分： style.css",[83,127417,127419],{"className":126533,"code":127418,"language":126535,"meta":10,"style":10},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[89,127420,127421,127426,127432,127442,127454],{"__ignoreMap":10},[92,127422,127423],{"class":94,"line":95},[92,127424,127425],{"class":161},"\u002F* style.css *\u002F\n",[92,127427,127428,127430],{"class":94,"line":11},[92,127429,29],{"class":51282},[92,127431,15552],{"class":102},[92,127433,127434,127436,127438,127440],{"class":94,"line":1158},[92,127435,70887],{"class":151},[92,127437,51419],{"class":102},[92,127439,127309],{"class":151},[92,127441,1269],{"class":102},[92,127443,127444,127446,127448,127450,127452],{"class":94,"line":1173},[92,127445,70608],{"class":151},[92,127447,51419],{"class":102},[92,127449,903],{"class":151},[92,127451,51474],{"class":98},[92,127453,1269],{"class":102},[92,127455,127456],{"class":94,"line":1179},[92,127457,1544],{"class":102},[38,127459,127460],{},"②html部分",[83,127462,127464],{"className":127280,"code":127463,"language":127282,"meta":10,"style":10},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[89,127465,127466],{"__ignoreMap":10},[92,127467,127468,127470,127472,127474,127476,127478,127480,127482,127485],{"class":94,"line":95},[92,127469,1013],{"class":102},[92,127471,68987],{"class":51282},[92,127473,68990],{"class":1942},[92,127475,148],{"class":102},[92,127477,68995],{"class":207},[92,127479,61039],{"class":1942},[92,127481,148],{"class":102},[92,127483,127484],{"class":207},"\"style.css\"",[92,127486,51289],{"class":102},[38,127488,127489,127492],{},[89,127490,127491],{},"\u003Chr>","水平线标签（但是不常用！）",[38,127494,127495],{},"ctrl+0回到页面原来大小",[33,127497,127499],{"id":127498},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[63,127501,127503],{"id":127502},"_721-快速生成html","7.2.1 快速生成html",[38,127505,127506,127507],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[89,127508,127509],{},"\u003Cdiv>``\u003C\u002Fdiv>",[38,127511,127512],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[38,127514,127515],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[38,127517,127518],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[38,127520,127521],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[38,127523,127524],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[38,127526,127527],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[83,127529,127531],{"className":127280,"code":127530,"language":127282,"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,127532,127533,127538,127543,127548,127553,127558,127563,127568],{"__ignoreMap":10},[92,127534,127535],{"class":94,"line":95},[92,127536,127537],{"class":161},"\u003C!-- Emmet 语法示例 -->\n",[92,127539,127540],{"class":94,"line":11},[92,127541,127542],{"class":161},"\u003C!-- div*3        → 生成3个div -->\n",[92,127544,127545],{"class":94,"line":1158},[92,127546,127547],{"class":161},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[92,127549,127550],{"class":94,"line":1173},[92,127551,127552],{"class":161},"\u003C!-- div+p        → 兄弟div和p -->\n",[92,127554,127555],{"class":94,"line":1179},[92,127556,127557],{"class":161},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[92,127559,127560],{"class":94,"line":1193},[92,127561,127562],{"class":161},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[92,127564,127565],{"class":94,"line":1199},[92,127566,127567],{"class":161},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[92,127569,127570],{"class":94,"line":1290},[92,127571,127572],{"class":161},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[63,127574,127576],{"id":127575},"_722-快速生成css","7.2.2 快速生成css",[38,127578,127579],{},"简写开头",[38,127581,127582],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[33,127584,127586],{"id":127585},"_73-css复合选择器","7.3 css复合选择器",[63,127588,127590],{"id":127589},"_731-后代选择器","7.3.1 后代选择器",[83,127592,127594],{"className":126533,"code":127593,"language":126535,"meta":10,"style":10},".parent .child {\n  color: blue;\n}\n",[89,127595,127596,127606,127616],{"__ignoreMap":10},[92,127597,127598,127601,127604],{"class":94,"line":95},[92,127599,127600],{"class":1942},".parent",[92,127602,127603],{"class":1942}," .child",[92,127605,15552],{"class":102},[92,127607,127608,127610,127612,127614],{"class":94,"line":11},[92,127609,70887],{"class":151},[92,127611,51419],{"class":102},[92,127613,127309],{"class":151},[92,127615,1269],{"class":102},[92,127617,127618],{"class":94,"line":1158},[92,127619,1544],{"class":102},[38,127621,127622],{},"元素1 元素2 {样式声明}",[38,127624,127625],{},[252,127626,127627],{},"注意点:",[38,127629,127630],{},"①元素1和元素2中间用空格隔开",[38,127632,127633],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[38,127635,127636],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[38,127638,127639],{},"④元素1和元素2可以是任意基础选择器",[63,127641,127643],{"id":127642},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[38,127645,127646],{},[252,127647,127627],{},[38,127649,127650],{},"①元素1和元素2中间用大于号隔开",[38,127652,127633],{},[38,127654,127655],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[63,127657,127659],{"id":127658},"_733-并集选择器","7.3.3 并集选择器",[38,127661,127662],{},"元素1，元素2 {样式声明}",[38,127664,127665],{},[252,127666,127627],{},[38,127668,127669],{},"①元素1和元素2中间用逗号隔开",[38,127671,127672],{},"②逗号可以理解为和的意思",[38,127674,127675],{},"③并集选择器通常用于集体声明",[63,127677,127679],{"id":127678},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[38,127681,127682],{},[252,127683,127627],{},[38,127685,127686,127687,127689],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68987,127688],{},"－:visited－:hover－:active。",[38,127691,127692,127693,127696,127697,25722],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127694,127695],"hover",{}," 、 ",[127698,127699],"first-child",{},[38,127701,127702],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[38,127704,127705],{},"link对没访问的进行设置",[38,127707,127708],{},"vistied对已访问的进行改变",[38,127710,127711],{},"hover鼠标经过就会变",[38,127713,127714],{},"active常按(点)就会变",[83,127716,127718],{"className":126533,"code":127717,"language":126535,"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,127719,127720,127725,127734,127744,127754,127758,127767,127778,127782,127790,127800,127810,127814,127823,127834],{"__ignoreMap":10},[92,127721,127722],{"class":94,"line":95},[92,127723,127724],{"class":161},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[92,127726,127727,127729,127732],{"class":94,"line":11},[92,127728,341],{"class":51282},[92,127730,127731],{"class":1942},":link",[92,127733,15552],{"class":102},[92,127735,127736,127738,127740,127742],{"class":94,"line":1158},[92,127737,70887],{"class":151},[92,127739,51419],{"class":102},[92,127741,62351],{"class":151},[92,127743,1269],{"class":102},[92,127745,127746,127748,127750,127752],{"class":94,"line":1173},[92,127747,70484],{"class":151},[92,127749,51419],{"class":102},[92,127751,54719],{"class":151},[92,127753,1269],{"class":102},[92,127755,127756],{"class":94,"line":1179},[92,127757,1544],{"class":102},[92,127759,127760,127762,127765],{"class":94,"line":1193},[92,127761,341],{"class":51282},[92,127763,127764],{"class":1942},":visited",[92,127766,15552],{"class":102},[92,127768,127769,127771,127773,127776],{"class":94,"line":1199},[92,127770,70887],{"class":151},[92,127772,51419],{"class":102},[92,127774,127775],{"class":151},"purple",[92,127777,1269],{"class":102},[92,127779,127780],{"class":94,"line":1290},[92,127781,1544],{"class":102},[92,127783,127784,127786,127788],{"class":94,"line":1296},[92,127785,341],{"class":51282},[92,127787,60922],{"class":1942},[92,127789,15552],{"class":102},[92,127791,127792,127794,127796,127798],{"class":94,"line":1308},[92,127793,70887],{"class":151},[92,127795,51419],{"class":102},[92,127797,54871],{"class":151},[92,127799,1269],{"class":102},[92,127801,127802,127804,127806,127808],{"class":94,"line":1591},[92,127803,70484],{"class":151},[92,127805,51419],{"class":102},[92,127807,127147],{"class":151},[92,127809,1269],{"class":102},[92,127811,127812],{"class":94,"line":1596},[92,127813,1544],{"class":102},[92,127815,127816,127818,127821],{"class":94,"line":1602},[92,127817,341],{"class":51282},[92,127819,127820],{"class":1942},":active",[92,127822,15552],{"class":102},[92,127824,127825,127827,127829,127832],{"class":94,"line":1607},[92,127826,70887],{"class":151},[92,127828,51419],{"class":102},[92,127830,127831],{"class":151},"green",[92,127833,1269],{"class":102},[92,127835,127836],{"class":94,"line":1621},[92,127837,1544],{"class":102},[63,127839,127841,127842,127845],{"id":127840},"_735-伪类选择器","7.3.5 ",[127843,127844],"focus",{},"伪类选择器",[38,127847,127848,127850,127851,127853],{},[127843,127849],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[89,127852,126594],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[83,127855,127857],{"className":126533,"code":127856,"language":126535,"meta":10,"style":10},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[89,127858,127859,127867,127878,127888],{"__ignoreMap":10},[92,127860,127861,127863,127865],{"class":94,"line":95},[92,127862,53803],{"class":51282},[92,127864,61882],{"class":1942},[92,127866,15552],{"class":102},[92,127868,127869,127872,127874,127876],{"class":94,"line":11},[92,127870,127871],{"class":151},"  border-color",[92,127873,51419],{"class":102},[92,127875,54871],{"class":151},[92,127877,1269],{"class":102},[92,127879,127880,127882,127884,127886],{"class":94,"line":1158},[92,127881,70780],{"class":151},[92,127883,51419],{"class":102},[92,127885,54719],{"class":151},[92,127887,1269],{"class":102},[92,127889,127890],{"class":94,"line":1173},[92,127891,1544],{"class":102},[5106,127893,127894],{},"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":127896},[127897,127902,127906],{"id":127272,"depth":11,"text":127273,"children":127898},[127899,127900,127901],{"id":127276,"depth":1158,"text":127277},{"id":127360,"depth":1158,"text":127361},{"id":127408,"depth":1158,"text":127409},{"id":127498,"depth":11,"text":127499,"children":127903},[127904,127905],{"id":127502,"depth":1158,"text":127503},{"id":127575,"depth":1158,"text":127576},{"id":127585,"depth":11,"text":127586,"children":127907},[127908,127909,127910,127911,127912],{"id":127589,"depth":1158,"text":127590},{"id":127642,"depth":1158,"text":127643},{"id":127658,"depth":1158,"text":127659},{"id":127678,"depth":1158,"text":127679},{"id":127840,"depth":1158,"text":127913},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127264,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127920,"title":127921,"body":127922,"description":23357,"extension":14,"meta":129845,"navigation":17,"path":129846,"seo":129847,"stem":129848,"__hash__":129849},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127923,"toc":129819},[127924,127927,127931,127940,127944,127970,127975,127978,127981,127984,127987,127991,127994,128004,128012,128016,128051,128056,128059,128062,128065,128068,128072,128075,128084,128088,128101,128106,128109,128112,128115,128119,128122,128126,128129,128184,128187,128218,128221,128275,128279,128282,128448,128571,128574,128577,128580,128583,128587,128590,128594,128597,128600,128604,128607,128638,128665,128693,128696,128700,128726,128769,128773,128867,128870,128897,128900,128903,128906,128909,128912,128915,128918,128921,128924,128928,128985,129012,129016,129064,129068,129109,129111,129114,129117,129120,129123,129127,129219,129222,129225,129228,129232,129355,129556,129560,129564,129567,129570,129573,129577,129580,129583,129608,129611,129614,129617,129620,129623,129627,129635,129697,129700,129758,129761,129764,129767,129770,129773,129776,129779,129816],[29,127925,127921],{"id":127926},"_8-css显示模式与背景特性",[33,127928,127930],{"id":127929},"_81-css元素显示模式","8.1 css元素显示模式",[38,127932,127933,127934,127936,127937,127939],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[89,127935,126144],{},"自己占一行，比如一行可以放多个",[89,127938,126147],{},"，HTML 元素一般分为块元素和行内元素两种类型",[63,127941,127943],{"id":127942},"_811-块元素","8.1.1 块元素",[38,127945,127946,127947,127949,127950,315,127953,315,127955,315,127957,315,127960,315,127963,127966,127967,127969],{},"常见的块元素有",[89,127948,126048],{},"~",[89,127951,127952],{},"\u003Ch6>",[89,127954,126074],{},[89,127956,126144],{},[89,127958,127959],{},"\u003Cul>",[89,127961,127962],{},"\u003Col>",[89,127964,127965],{},"\u003Cli>","等，其中 ",[89,127968,126144],{}," 标签是最典型的块元素",[38,127971,127972],{},[252,127973,127974],{},"块级元素的特点：",[38,127976,127977],{},"① 比较霸道，自己独占一行。",[38,127979,127980],{},"② 高度，宽度、外边距以及内边距都可以控制。",[38,127982,127983],{},"③ 宽度默认是容器（父级宽度）的100%。",[38,127985,127986],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[38,127988,127989],{},[252,127990,132],{},[38,127992,127993],{},"①文字类的元素内不能使用块级元素",[38,127995,77231,127996,127998,127999,128001,128002],{},[89,127997,126074],{}," 标签主要用于存放文字，因此 ",[89,128000,126074],{}," 里面不能放块级元素，特别是不能放",[89,128003,126144],{},[38,128005,128006,128007,127949,128009,128011],{},"⑥同理， ",[89,128008,126048],{},[89,128010,127952],{},"等都是文字类块级标签，里面也不能放其他块级元素",[63,128013,128015],{"id":128014},"_812-行内元素","8.1.2 行内元素",[38,128017,128018,128019,315,128021,315,128024,315,128027,315,128030,315,128033,315,128036,315,128039,315,128042,315,128045,128047,128048,128050],{},"常见的行内元素有 ",[89,128020,126306],{},[89,128022,128023],{},"\u003Cstrong>",[89,128025,128026],{},"\u003Cb>",[89,128028,128029],{},"\u003Cem>",[89,128031,128032],{},"\u003Ci>",[89,128034,128035],{},"\u003Cdel>",[89,128037,128038],{},"\u003Cs>",[89,128040,128041],{},"\u003Cins>",[89,128043,128044],{},"\u003Cu>",[89,128046,126147],{}," 等，其中 ",[89,128049,126147],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[38,128052,128053],{},[252,128054,128055],{},"特点：",[38,128057,128058],{},"① 相邻行内元素在一行上，一行可以显示多个。",[38,128060,128061],{},"② 高、宽直接设置是无效的。",[38,128063,128064],{},"③ 默认宽度就是它本身内容的宽度。",[38,128066,128067],{},"④ 行内元素只能容纳文本或其他行内元素。",[38,128069,128070],{},[252,128071,132],{},[38,128073,128074],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[38,128076,128077,128078,128080,128081,128083],{},"②特殊情况链接 ",[89,128079,126306],{}," 里面可以放块级元素，但是给 ",[89,128082,126306],{}," 转换一下块级模式最安全",[63,128085,128087],{"id":128086},"_813-行内块元素","8.1.3 行内块元素",[38,128089,128090,128091,315,128094,315,128097,128100],{},"在行内元素中有几个特殊的标签 —— ",[89,128092,128093],{},"\u003Cimg \u002F>",[89,128095,128096],{},"\u003Cinput \u002F>",[89,128098,128099],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[38,128102,128103],{},[252,128104,128105],{},"行内块元素的特点：",[38,128107,128108],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[38,128110,128111],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[38,128113,128114],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[63,128116,128118],{"id":128117},"_814-总结","8.1.4 总结",[1441,128120],{"style":126389,"src":128121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[63,128123,128125],{"id":128124},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[38,128127,128128],{},"①转换为块元素：display:block;",[83,128130,128132],{"className":126533,"code":128131,"language":126535,"meta":10,"style":10},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[89,128133,128134,128139,128145,128156,128168,128180],{"__ignoreMap":10},[92,128135,128136],{"class":94,"line":95},[92,128137,128138],{"class":161},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[92,128140,128141,128143],{"class":94,"line":11},[92,128142,341],{"class":51282},[92,128144,15552],{"class":102},[92,128146,128147,128150,128152,128154],{"class":94,"line":1158},[92,128148,128149],{"class":151},"  display",[92,128151,51419],{"class":102},[92,128153,60851],{"class":151},[92,128155,1269],{"class":102},[92,128157,128158,128160,128162,128164,128166],{"class":94,"line":1173},[92,128159,70550],{"class":151},[92,128161,51419],{"class":102},[92,128163,414],{"class":151},[92,128165,51474],{"class":98},[92,128167,1269],{"class":102},[92,128169,128170,128172,128174,128176,128178],{"class":94,"line":1179},[92,128171,70770],{"class":151},[92,128173,51419],{"class":102},[92,128175,504],{"class":151},[92,128177,51474],{"class":98},[92,128179,1269],{"class":102},[92,128181,128182],{"class":94,"line":1193},[92,128183,1544],{"class":102},[38,128185,128186],{},"②转换为行内元素：display:inline;",[83,128188,128190],{"className":126533,"code":128189,"language":126535,"meta":10,"style":10},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[89,128191,128192,128197,128203,128214],{"__ignoreMap":10},[92,128193,128194],{"class":94,"line":95},[92,128195,128196],{"class":161},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[92,128198,128199,128201],{"class":94,"line":11},[92,128200,51593],{"class":51282},[92,128202,15552],{"class":102},[92,128204,128205,128207,128209,128212],{"class":94,"line":1158},[92,128206,128149],{"class":151},[92,128208,51419],{"class":102},[92,128210,128211],{"class":151},"inline",[92,128213,1269],{"class":102},[92,128215,128216],{"class":94,"line":1173},[92,128217,1544],{"class":102},[38,128219,128220],{},"③转换为行内块：display:inline-block;",[83,128222,128224],{"className":126533,"code":128223,"language":126535,"meta":10,"style":10},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[89,128225,128226,128231,128237,128247,128259,128271],{"__ignoreMap":10},[92,128227,128228],{"class":94,"line":95},[92,128229,128230],{"class":161},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[92,128232,128233,128235],{"class":94,"line":11},[92,128234,92],{"class":51282},[92,128236,15552],{"class":102},[92,128238,128239,128241,128243,128245],{"class":94,"line":1158},[92,128240,128149],{"class":151},[92,128242,51419],{"class":102},[92,128244,72365],{"class":151},[92,128246,1269],{"class":102},[92,128248,128249,128251,128253,128255,128257],{"class":94,"line":1173},[92,128250,70550],{"class":151},[92,128252,51419],{"class":102},[92,128254,715],{"class":151},[92,128256,51474],{"class":98},[92,128258,1269],{"class":102},[92,128260,128261,128263,128265,128267,128269],{"class":94,"line":1179},[92,128262,70770],{"class":151},[92,128264,51419],{"class":102},[92,128266,1054],{"class":151},[92,128268,51474],{"class":98},[92,128270,1269],{"class":102},[92,128272,128273],{"class":94,"line":1193},[92,128274,1544],{"class":102},[63,128276,128278],{"id":128277},"_816-小米侧边栏","8.1.6 小米侧边栏",[1441,128280],{"style":126389,"src":128281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[83,128283,128285],{"className":127280,"code":128284,"language":127282,"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,128286,128287,128292,128307,128326,128345,128364,128383,128402,128421,128440],{"__ignoreMap":10},[92,128288,128289],{"class":94,"line":95},[92,128290,128291],{"class":161},"\u003C!-- 小米侧边栏案例 -->\n",[92,128293,128294,128296,128298,128300,128302,128305],{"class":94,"line":11},[92,128295,1013],{"class":102},[92,128297,51593],{"class":51282},[92,128299,53468],{"class":1942},[92,128301,148],{"class":102},[92,128303,128304],{"class":207},"\"sidebar\"",[92,128306,51289],{"class":102},[92,128308,128309,128311,128313,128315,128317,128319,128322,128324],{"class":94,"line":1158},[92,128310,52126],{"class":102},[92,128312,341],{"class":51282},[92,128314,61039],{"class":1942},[92,128316,148],{"class":102},[92,128318,61044],{"class":207},[92,128320,128321],{"class":102},">手机 电话卡\u003C\u002F",[92,128323,341],{"class":51282},[92,128325,51289],{"class":102},[92,128327,128328,128330,128332,128334,128336,128338,128341,128343],{"class":94,"line":1173},[92,128329,52126],{"class":102},[92,128331,341],{"class":51282},[92,128333,61039],{"class":1942},[92,128335,148],{"class":102},[92,128337,61044],{"class":207},[92,128339,128340],{"class":102},">电视 盒子\u003C\u002F",[92,128342,341],{"class":51282},[92,128344,51289],{"class":102},[92,128346,128347,128349,128351,128353,128355,128357,128360,128362],{"class":94,"line":1179},[92,128348,52126],{"class":102},[92,128350,341],{"class":51282},[92,128352,61039],{"class":1942},[92,128354,148],{"class":102},[92,128356,61044],{"class":207},[92,128358,128359],{"class":102},">笔记本 平板\u003C\u002F",[92,128361,341],{"class":51282},[92,128363,51289],{"class":102},[92,128365,128366,128368,128370,128372,128374,128376,128379,128381],{"class":94,"line":1193},[92,128367,52126],{"class":102},[92,128369,341],{"class":51282},[92,128371,61039],{"class":1942},[92,128373,148],{"class":102},[92,128375,61044],{"class":207},[92,128377,128378],{"class":102},">出行 穿戴\u003C\u002F",[92,128380,341],{"class":51282},[92,128382,51289],{"class":102},[92,128384,128385,128387,128389,128391,128393,128395,128398,128400],{"class":94,"line":1199},[92,128386,52126],{"class":102},[92,128388,341],{"class":51282},[92,128390,61039],{"class":1942},[92,128392,148],{"class":102},[92,128394,61044],{"class":207},[92,128396,128397],{"class":102},">智能 路由器\u003C\u002F",[92,128399,341],{"class":51282},[92,128401,51289],{"class":102},[92,128403,128404,128406,128408,128410,128412,128414,128417,128419],{"class":94,"line":1290},[92,128405,52126],{"class":102},[92,128407,341],{"class":51282},[92,128409,61039],{"class":1942},[92,128411,148],{"class":102},[92,128413,61044],{"class":207},[92,128415,128416],{"class":102},">健康 儿童\u003C\u002F",[92,128418,341],{"class":51282},[92,128420,51289],{"class":102},[92,128422,128423,128425,128427,128429,128431,128433,128436,128438],{"class":94,"line":1296},[92,128424,52126],{"class":102},[92,128426,341],{"class":51282},[92,128428,61039],{"class":1942},[92,128430,148],{"class":102},[92,128432,61044],{"class":207},[92,128434,128435],{"class":102},">耳机 音响\u003C\u002F",[92,128437,341],{"class":51282},[92,128439,51289],{"class":102},[92,128441,128442,128444,128446],{"class":94,"line":1308},[92,128443,51767],{"class":102},[92,128445,51593],{"class":51282},[92,128447,51289],{"class":102},[83,128449,128451],{"className":126533,"code":128450,"language":126535,"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,128452,128453,128462,128472,128485,128497,128509,128521,128531,128542,128546,128556,128567],{"__ignoreMap":10},[92,128454,128455,128458,128460],{"class":94,"line":95},[92,128456,128457],{"class":1942},".sidebar",[92,128459,1377],{"class":51282},[92,128461,15552],{"class":102},[92,128463,128464,128466,128468,128470],{"class":94,"line":11},[92,128465,128149],{"class":151},[92,128467,51419],{"class":102},[92,128469,60851],{"class":151},[92,128471,1269],{"class":102},[92,128473,128474,128476,128478,128481,128483],{"class":94,"line":1158},[92,128475,70550],{"class":151},[92,128477,51419],{"class":102},[92,128479,128480],{"class":151},"234",[92,128482,51474],{"class":98},[92,128484,1269],{"class":102},[92,128486,128487,128489,128491,128493,128495],{"class":94,"line":1173},[92,128488,70770],{"class":151},[92,128490,51419],{"class":102},[92,128492,555],{"class":151},[92,128494,51474],{"class":98},[92,128496,1269],{"class":102},[92,128498,128499,128501,128503,128505,128507],{"class":94,"line":1179},[92,128500,127217],{"class":151},[92,128502,51419],{"class":102},[92,128504,555],{"class":151},[92,128506,51474],{"class":98},[92,128508,1269],{"class":102},[92,128510,128511,128513,128515,128517,128519],{"class":94,"line":1193},[92,128512,70805],{"class":151},[92,128514,51419],{"class":102},[92,128516,1054],{"class":151},[92,128518,51474],{"class":98},[92,128520,1269],{"class":102},[92,128522,128523,128525,128527,128529],{"class":94,"line":1199},[92,128524,70887],{"class":151},[92,128526,51419],{"class":102},[92,128528,60824],{"class":151},[92,128530,1269],{"class":102},[92,128532,128533,128535,128537,128540],{"class":94,"line":1290},[92,128534,70860],{"class":151},[92,128536,51419],{"class":102},[92,128538,128539],{"class":151},"#55585a",[92,128541,1269],{"class":102},[92,128543,128544],{"class":94,"line":1296},[92,128545,1544],{"class":102},[92,128547,128548,128550,128552,128554],{"class":94,"line":1308},[92,128549,128457],{"class":1942},[92,128551,1377],{"class":51282},[92,128553,60922],{"class":1942},[92,128555,15552],{"class":102},[92,128557,128558,128560,128562,128565],{"class":94,"line":1591},[92,128559,70860],{"class":151},[92,128561,51419],{"class":102},[92,128563,128564],{"class":151},"#ff6700",[92,128566,1269],{"class":102},[92,128568,128569],{"class":94,"line":1596},[92,128570,1544],{"class":102},[1441,128572],{"style":126389,"src":128573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[38,128575,128576],{},"行高=盒子高度：实现文字的垂直居中",[38,128578,128579],{},"原理讲解：",[1441,128581],{"style":126389,"src":128582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[33,128584,128586],{"id":128585},"_82-css背景","8.2 css背景",[38,128588,128589],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[63,128591,128593],{"id":128592},"_821-背景颜色","8.2.1 背景颜色",[38,128595,128596],{},"background-color:颜色值;",[38,128598,128599],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[63,128601,128603],{"id":128602},"_822-背景图片","8.2.2 背景图片",[38,128605,128606],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[83,128608,128610],{"className":126533,"code":128609,"language":126535,"meta":10,"style":10},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[89,128611,128612,128618,128634],{"__ignoreMap":10},[92,128613,128614,128616],{"class":94,"line":95},[92,128615,51593],{"class":51282},[92,128617,15552],{"class":102},[92,128619,128620,128623,128625,128627,128629,128632],{"class":94,"line":11},[92,128621,128622],{"class":151},"  background-image",[92,128624,51419],{"class":102},[92,128626,61708],{"class":151},[92,128628,103],{"class":102},[92,128630,128631],{"class":5196},"images\u002Fbg.png",[92,128633,2698],{"class":102},[92,128635,128636],{"class":94,"line":1158},[92,128637,1544],{"class":102},[240,128639,128640,128649],{},[243,128641,128642],{},[246,128643,128644,128647],{},[249,128645,128646],{"align":23717},"参数值",[249,128648,102677],{"align":23717},[287,128650,128651,128658],{},[246,128652,128653,128655],{},[292,128654,54719],{"align":23717},[292,128656,128657],{"align":23717},"无背景图（默认的）",[246,128659,128660,128662],{},[292,128661,61708],{"align":23717},[292,128663,128664],{"align":23717},"使用绝对或相对地址指定背景图像",[83,128666,128667],{"className":126533,"code":128609,"language":126535,"meta":10,"style":10},[89,128668,128669,128675,128689],{"__ignoreMap":10},[92,128670,128671,128673],{"class":94,"line":95},[92,128672,51593],{"class":51282},[92,128674,15552],{"class":102},[92,128676,128677,128679,128681,128683,128685,128687],{"class":94,"line":11},[92,128678,128622],{"class":151},[92,128680,51419],{"class":102},[92,128682,61708],{"class":151},[92,128684,103],{"class":102},[92,128686,128631],{"class":5196},[92,128688,2698],{"class":102},[92,128690,128691],{"class":94,"line":1158},[92,128692,1544],{"class":102},[38,128694,128695],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[63,128697,128699],{"id":128698},"_823-背景平铺","8.2.3 背景平铺",[83,128701,128703],{"className":126533,"code":128702,"language":126535,"meta":10,"style":10},"div {\n  background-repeat: no-repeat;\n}\n",[89,128704,128705,128711,128722],{"__ignoreMap":10},[92,128706,128707,128709],{"class":94,"line":95},[92,128708,51593],{"class":51282},[92,128710,15552],{"class":102},[92,128712,128713,128716,128718,128720],{"class":94,"line":11},[92,128714,128715],{"class":151},"  background-repeat",[92,128717,51419],{"class":102},[92,128719,61718],{"class":151},[92,128721,1269],{"class":102},[92,128723,128724],{"class":94,"line":1158},[92,128725,1544],{"class":102},[240,128727,128728,128736],{},[243,128729,128730],{},[246,128731,128732,128734],{},[249,128733,128646],{"align":23717},[249,128735,102677],{"align":23717},[287,128737,128738,128746,128753,128761],{},[246,128739,128740,128743],{},[292,128741,128742],{"align":23717},"repeat",[292,128744,128745],{"align":23717},"背景图像在纵向和横向上平铺（默认的）",[246,128747,128748,128750],{},[292,128749,61718],{"align":23717},[292,128751,128752],{"align":23717},"背景图像不平铺",[246,128754,128755,128758],{},[292,128756,128757],{"align":23717},"repeat-x",[292,128759,128760],{"align":23717},"背景图像在横向上平铺",[246,128762,128763,128766],{},[292,128764,128765],{"align":23717},"repeat-y",[292,128767,128768],{"align":23717},"背景图像在纵向平铺",[63,128770,128772],{"id":128771},"_824-背景图片位置","8.2.4 背景图片位置",[83,128774,128776],{"className":126533,"code":128775,"language":126535,"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,128777,128778,128783,128789,128803,128807,128812,128818,128834,128838,128843,128849,128863],{"__ignoreMap":10},[92,128779,128780],{"class":94,"line":95},[92,128781,128782],{"class":161},"\u002F* 方位名词 *\u002F\n",[92,128784,128785,128787],{"class":94,"line":11},[92,128786,51593],{"class":51282},[92,128788,15552],{"class":102},[92,128790,128791,128794,128796,128798,128801],{"class":94,"line":1158},[92,128792,128793],{"class":151},"  background-position",[92,128795,51419],{"class":102},[92,128797,51574],{"class":151},[92,128799,128800],{"class":151}," top",[92,128802,1269],{"class":102},[92,128804,128805],{"class":94,"line":1173},[92,128806,1544],{"class":102},[92,128808,128809],{"class":94,"line":1179},[92,128810,128811],{"class":161},"\u002F* 精确单位 *\u002F\n",[92,128813,128814,128816],{"class":94,"line":1193},[92,128815,51593],{"class":51282},[92,128817,15552],{"class":102},[92,128819,128820,128822,128824,128826,128828,128830,128832],{"class":94,"line":1199},[92,128821,128793],{"class":151},[92,128823,51419],{"class":102},[92,128825,803],{"class":151},[92,128827,51474],{"class":98},[92,128829,57486],{"class":151},[92,128831,51474],{"class":98},[92,128833,1269],{"class":102},[92,128835,128836],{"class":94,"line":1290},[92,128837,1544],{"class":102},[92,128839,128840],{"class":94,"line":1296},[92,128841,128842],{"class":161},"\u002F* 混合单位 *\u002F\n",[92,128844,128845,128847],{"class":94,"line":1308},[92,128846,51593],{"class":51282},[92,128848,15552],{"class":102},[92,128850,128851,128853,128855,128857,128859,128861],{"class":94,"line":1591},[92,128852,128793],{"class":151},[92,128854,51419],{"class":102},[92,128856,803],{"class":151},[92,128858,51474],{"class":98},[92,128860,17124],{"class":151},[92,128862,1269],{"class":102},[92,128864,128865],{"class":94,"line":1596},[92,128866,1544],{"class":102},[38,128868,128869],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[240,128871,128872,128880],{},[243,128873,128874],{},[246,128875,128876,128878],{},[249,128877,128646],{"align":23717},[249,128879,25851],{"align":23717},[287,128881,128882,128889],{},[246,128883,128884,128886],{},[292,128885,51950],{"align":23717},[292,128887,128888],{"align":23717},"百分数|由浮点数和单位标识符组成的长度值",[246,128890,128891,128894],{},[292,128892,128893],{"align":23717},"position",[292,128895,128896],{"align":23717},"top|center|bottom|left|center|right 方位名词",[38,128898,128899],{},"其他说明：",[38,128901,128902],{},"①参数是方位名词",[38,128904,128905],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[38,128907,128908],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[38,128910,128911],{},"②参数是精确单位",[38,128913,128914],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[38,128916,128917],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[38,128919,128920],{},"③参数是混合单位",[38,128922,128923],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[63,128925,128927],{"id":128926},"_825-背景图片固定","8.2.5 背景图片固定",[83,128929,128931],{"className":126533,"code":128930,"language":126535,"meta":10,"style":10},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[89,128932,128933,128938,128944,128956,128960,128965,128971,128981],{"__ignoreMap":10},[92,128934,128935],{"class":94,"line":95},[92,128936,128937],{"class":161},"\u002F* 背景滚动（默认） *\u002F\n",[92,128939,128940,128942],{"class":94,"line":11},[92,128941,51593],{"class":51282},[92,128943,15552],{"class":102},[92,128945,128946,128949,128951,128954],{"class":94,"line":1158},[92,128947,128948],{"class":151},"  background-attachment",[92,128950,51419],{"class":102},[92,128952,128953],{"class":151},"scroll",[92,128955,1269],{"class":102},[92,128957,128958],{"class":94,"line":1173},[92,128959,1544],{"class":102},[92,128961,128962],{"class":94,"line":1179},[92,128963,128964],{"class":161},"\u002F* 背景固定 *\u002F\n",[92,128966,128967,128969],{"class":94,"line":1193},[92,128968,51593],{"class":51282},[92,128970,15552],{"class":102},[92,128972,128973,128975,128977,128979],{"class":94,"line":1199},[92,128974,128948],{"class":151},[92,128976,51419],{"class":102},[92,128978,86215],{"class":151},[92,128980,1269],{"class":102},[92,128982,128983],{"class":94,"line":1290},[92,128984,1544],{"class":102},[240,128986,128987,128996],{},[243,128988,128989],{},[246,128990,128991,128994],{},[249,128992,128993],{"align":23717},"参数",[249,128995,102677],{"align":23717},[287,128997,128998,129005],{},[246,128999,129000,129002],{},[292,129001,128953],{"align":23717},[292,129003,129004],{"align":23717},"背景图像是随对象内容滚动",[246,129006,129007,129009],{},[292,129008,86215],{"align":23717},[292,129010,129011],{"align":23717},"背景图像固定",[63,129013,129015],{"id":129014},"_826-背景样式合写","8.2.6 背景样式合写",[83,129017,129019],{"className":126533,"code":129018,"language":126535,"meta":10,"style":10},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[89,129020,129021,129026,129032,129060],{"__ignoreMap":10},[92,129022,129023],{"class":94,"line":95},[92,129024,129025],{"class":161},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[92,129027,129028,129030],{"class":94,"line":11},[92,129029,51593],{"class":51282},[92,129031,15552],{"class":102},[92,129033,129034,129036,129038,129040,129043,129045,129047,129049,129051,129054,129056,129058],{"class":94,"line":1158},[92,129035,70593],{"class":151},[92,129037,51419],{"class":102},[92,129039,60824],{"class":151},[92,129041,129042],{"class":151}," url",[92,129044,103],{"class":102},[92,129046,128631],{"class":5196},[92,129048,13694],{"class":102},[92,129050,61718],{"class":151},[92,129052,129053],{"class":151}," fixed",[92,129055,17124],{"class":151},[92,129057,128800],{"class":151},[92,129059,1269],{"class":102},[92,129061,129062],{"class":94,"line":1173},[92,129063,1544],{"class":102},[63,129065,129067],{"id":129066},"_827-背景色半透明","8.2.7 背景色半透明",[83,129069,129071],{"className":126533,"code":129070,"language":126535,"meta":10,"style":10},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[89,129072,129073,129079,129105],{"__ignoreMap":10},[92,129074,129075,129077],{"class":94,"line":95},[92,129076,51593],{"class":51282},[92,129078,15552],{"class":102},[92,129080,129081,129083,129085,129087,129089,129091,129093,129095,129097,129099,129101,129103],{"class":94,"line":11},[92,129082,70593],{"class":151},[92,129084,51419],{"class":102},[92,129086,55092],{"class":151},[92,129088,103],{"class":102},[92,129090,294],{"class":151},[92,129092,12415],{"class":102},[92,129094,294],{"class":151},[92,129096,12415],{"class":102},[92,129098,294],{"class":151},[92,129100,12415],{"class":102},[92,129102,100502],{"class":151},[92,129104,2698],{"class":102},[92,129106,129107],{"class":94,"line":1158},[92,129108,1544],{"class":102},[38,129110,99377],{},[38,129112,129113],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[38,129115,129116],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[38,129118,129119],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[38,129121,129122],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[63,129124,129126],{"id":129125},"_828-总结","8.2.8 总结",[240,129128,129129,129140],{},[243,129130,129131],{},[246,129132,129133,129136,129138],{},[249,129134,129135],{"align":23717},"属性",[249,129137,102677],{"align":23717},[249,129139,255],{"align":23717},[287,129141,129142,129153,129164,129175,129186,129197,129208],{},[246,129143,129144,129147,129150],{},[292,129145,129146],{"align":23717},"background-color",[292,129148,129149],{"align":23717},"背景颜色",[292,129151,129152],{"align":23717},"预定义的颜色值\u002F十六进制\u002FRGB代码",[246,129154,129155,129158,129161],{},[292,129156,129157],{"align":23717},"background-image",[292,129159,129160],{"align":23717},"背景图片",[292,129162,129163],{"align":23717},"url(图片路径)",[246,129165,129166,129169,129172],{},[292,129167,129168],{"align":23717},"background-repeat",[292,129170,129171],{"align":23717},"是否平铺",[292,129173,129174],{"align":23717},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[246,129176,129177,129180,129183],{},[292,129178,129179],{"align":23717},"background-position",[292,129181,129182],{"align":23717},"背景位置",[292,129184,129185],{"align":23717},"length\u002Fposition 分别是x和y坐标",[246,129187,129188,129191,129194],{},[292,129189,129190],{"align":23717},"background-attachment",[292,129192,129193],{"align":23717},"背景附着",[292,129195,129196],{"align":23717},"scroll(背景滚动) \u002Ffixed (背景固定)",[246,129198,129199,129202,129205],{},[292,129200,129201],{"align":23717},"背景简写",[292,129203,129204],{"align":23717},"书写更简单",[292,129206,129207],{"align":23717},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[246,129209,129210,129213,129216],{},[292,129211,129212],{"align":23717},"背景半透明",[292,129214,129215],{"align":23717},"背景颜色半透明",[292,129217,129218],{"align":23717},"background: rgba(0,0,0.3); 后面必须是4个值",[38,129220,129221],{},"颜色渐变：",[1441,129223],{"style":126389,"src":129224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1441,129226],{"style":126389,"src":129227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[63,129229,129231],{"id":129230},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[83,129233,129235],{"className":127280,"code":129234,"language":127282,"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,129236,129237,129252,129271,129290,129309,129328,129347],{"__ignoreMap":10},[92,129238,129239,129241,129243,129245,129247,129250],{"class":94,"line":95},[92,129240,1013],{"class":102},[92,129242,51593],{"class":51282},[92,129244,53468],{"class":1942},[92,129246,148],{"class":102},[92,129248,129249],{"class":207},"\"nav\"",[92,129251,51289],{"class":102},[92,129253,129254,129256,129258,129260,129262,129264,129267,129269],{"class":94,"line":11},[92,129255,52126],{"class":102},[92,129257,341],{"class":51282},[92,129259,61039],{"class":1942},[92,129261,148],{"class":102},[92,129263,61044],{"class":207},[92,129265,129266],{"class":102},">五彩导航1\u003C\u002F",[92,129268,341],{"class":51282},[92,129270,51289],{"class":102},[92,129272,129273,129275,129277,129279,129281,129283,129286,129288],{"class":94,"line":1158},[92,129274,52126],{"class":102},[92,129276,341],{"class":51282},[92,129278,61039],{"class":1942},[92,129280,148],{"class":102},[92,129282,61044],{"class":207},[92,129284,129285],{"class":102},">五彩导航2\u003C\u002F",[92,129287,341],{"class":51282},[92,129289,51289],{"class":102},[92,129291,129292,129294,129296,129298,129300,129302,129305,129307],{"class":94,"line":1173},[92,129293,52126],{"class":102},[92,129295,341],{"class":51282},[92,129297,61039],{"class":1942},[92,129299,148],{"class":102},[92,129301,61044],{"class":207},[92,129303,129304],{"class":102},">五彩导航3\u003C\u002F",[92,129306,341],{"class":51282},[92,129308,51289],{"class":102},[92,129310,129311,129313,129315,129317,129319,129321,129324,129326],{"class":94,"line":1179},[92,129312,52126],{"class":102},[92,129314,341],{"class":51282},[92,129316,61039],{"class":1942},[92,129318,148],{"class":102},[92,129320,61044],{"class":207},[92,129322,129323],{"class":102},">五彩导航4\u003C\u002F",[92,129325,341],{"class":51282},[92,129327,51289],{"class":102},[92,129329,129330,129332,129334,129336,129338,129340,129343,129345],{"class":94,"line":1193},[92,129331,52126],{"class":102},[92,129333,341],{"class":51282},[92,129335,61039],{"class":1942},[92,129337,148],{"class":102},[92,129339,61044],{"class":207},[92,129341,129342],{"class":102},">五彩导航5\u003C\u002F",[92,129344,341],{"class":51282},[92,129346,51289],{"class":102},[92,129348,129349,129351,129353],{"class":94,"line":1199},[92,129350,51767],{"class":102},[92,129352,51593],{"class":51282},[92,129354,51289],{"class":102},[83,129356,129358],{"className":126533,"code":129357,"language":126535,"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,129359,129360,129369,129379,129391,129403,129413,129425,129435,129439,129464,129487,129510,129533],{"__ignoreMap":10},[92,129361,129362,129365,129367],{"class":94,"line":95},[92,129363,129364],{"class":1942},".nav",[92,129366,1377],{"class":51282},[92,129368,15552],{"class":102},[92,129370,129371,129373,129375,129377],{"class":94,"line":11},[92,129372,128149],{"class":151},[92,129374,51419],{"class":102},[92,129376,72365],{"class":151},[92,129378,1269],{"class":102},[92,129380,129381,129383,129385,129387,129389],{"class":94,"line":1158},[92,129382,70550],{"class":151},[92,129384,51419],{"class":102},[92,129386,920],{"class":151},[92,129388,51474],{"class":98},[92,129390,1269],{"class":102},[92,129392,129393,129395,129397,129399,129401],{"class":94,"line":1173},[92,129394,70770],{"class":151},[92,129396,51419],{"class":102},[92,129398,959],{"class":151},[92,129400,51474],{"class":98},[92,129402,1269],{"class":102},[92,129404,129405,129407,129409,129411],{"class":94,"line":1179},[92,129406,70508],{"class":151},[92,129408,51419],{"class":102},[92,129410,51574],{"class":151},[92,129412,1269],{"class":102},[92,129414,129415,129417,129419,129421,129423],{"class":94,"line":1193},[92,129416,127217],{"class":151},[92,129418,51419],{"class":102},[92,129420,959],{"class":151},[92,129422,51474],{"class":98},[92,129424,1269],{"class":102},[92,129426,129427,129429,129431,129433],{"class":94,"line":1199},[92,129428,70887],{"class":151},[92,129430,51419],{"class":102},[92,129432,60824],{"class":151},[92,129434,1269],{"class":102},[92,129436,129437],{"class":94,"line":1290},[92,129438,1544],{"class":102},[92,129440,129441,129443,129445,129448,129450,129452,129455,129457,129459,129461],{"class":94,"line":1296},[92,129442,129364],{"class":1942},[92,129444,1377],{"class":51282},[92,129446,129447],{"class":1942},":nth-child",[92,129449,103],{"class":102},[92,129451,320],{"class":151},[92,129453,129454],{"class":102},") { ",[92,129456,129146],{"class":151},[92,129458,51419],{"class":102},[92,129460,128564],{"class":151},[92,129462,129463],{"class":102},"; }\n",[92,129465,129466,129468,129470,129472,129474,129476,129478,129480,129482,129485],{"class":94,"line":1308},[92,129467,129364],{"class":1942},[92,129469,1377],{"class":51282},[92,129471,129447],{"class":1942},[92,129473,103],{"class":102},[92,129475,180],{"class":151},[92,129477,129454],{"class":102},[92,129479,129146],{"class":151},[92,129481,51419],{"class":102},[92,129483,129484],{"class":151},"#ff0000",[92,129486,129463],{"class":102},[92,129488,129489,129491,129493,129495,129497,129499,129501,129503,129505,129508],{"class":94,"line":1591},[92,129490,129364],{"class":1942},[92,129492,1377],{"class":51282},[92,129494,129447],{"class":1942},[92,129496,103],{"class":102},[92,129498,174],{"class":151},[92,129500,129454],{"class":102},[92,129502,129146],{"class":151},[92,129504,51419],{"class":102},[92,129506,129507],{"class":151},"#00a4ff",[92,129509,129463],{"class":102},[92,129511,129512,129514,129516,129518,129520,129522,129524,129526,129528,129531],{"class":94,"line":1596},[92,129513,129364],{"class":1942},[92,129515,1377],{"class":51282},[92,129517,129447],{"class":1942},[92,129519,103],{"class":102},[92,129521,396],{"class":151},[92,129523,129454],{"class":102},[92,129525,129146],{"class":151},[92,129527,51419],{"class":102},[92,129529,129530],{"class":151},"#ff00ff",[92,129532,129463],{"class":102},[92,129534,129535,129537,129539,129541,129543,129545,129547,129549,129551,129554],{"class":94,"line":1602},[92,129536,129364],{"class":1942},[92,129538,1377],{"class":51282},[92,129540,129447],{"class":1942},[92,129542,103],{"class":102},[92,129544,422],{"class":151},[92,129546,129454],{"class":102},[92,129548,129146],{"class":151},[92,129550,51419],{"class":102},[92,129552,129553],{"class":151},"#00ff00",[92,129555,129463],{"class":102},[33,129557,129559],{"id":129558},"_83-css三大特性","8.3 css三大特性",[63,129561,129563],{"id":129562},"_831-层叠性","8.3.1 层叠性",[38,129565,129566],{},"为了解决样式冲突问题",[38,129568,129569],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[38,129571,129572],{},"   ②样式不冲突，不会层叠",[63,129574,129576],{"id":129575},"_832-继承性","8.3.2 继承性",[38,129578,129579],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[38,129581,129582],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[83,129584,129586],{"className":126533,"code":129585,"language":126535,"meta":10,"style":10},"p {\n  color: #333;\n}\n",[89,129587,129588,129594,129604],{"__ignoreMap":10},[92,129589,129590,129592],{"class":94,"line":95},[92,129591,38],{"class":51282},[92,129593,15552],{"class":102},[92,129595,129596,129598,129600,129602],{"class":94,"line":11},[92,129597,70887],{"class":151},[92,129599,51419],{"class":102},[92,129601,62351],{"class":151},[92,129603,1269],{"class":102},[92,129605,129606],{"class":94,"line":1158},[92,129607,1544],{"class":102},[1441,129609],{"style":126389,"src":129610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[38,129612,129613],{},"解释：①行高可以跟单位也可以不跟单位",[38,129615,129616],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[38,129618,129619],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[38,129621,129622],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[63,129624,129626],{"id":129625},"_833-优先级","8.3.3 优先级",[46,129628,129629,129632],{},[49,129630,129631],{},"选择器相同，则执行层叠性",[49,129633,129634],{},"选择器不同，则根据选择器权重执行",[240,129636,129637,129647],{},[243,129638,129639],{},[246,129640,129641,129644],{},[249,129642,129643],{"align":23717},"选择器",[249,129645,129646],{"align":23717},"选择器权重",[287,129648,129649,129657,129665,129673,129681,129689],{},[246,129650,129651,129654],{},[292,129652,129653],{"align":23717},"继承 或者*",[292,129655,129656],{"align":23717},"0，0，0，0",[246,129658,129659,129662],{},[292,129660,129661],{"align":23717},"标签选择器",[292,129663,129664],{"align":23717},"0，0，0，1",[246,129666,129667,129670],{},[292,129668,129669],{"align":23717},"类选择器，伪类选择器",[292,129671,129672],{"align":23717},"0，0，1，0",[246,129674,129675,129678],{},[292,129676,129677],{"align":23717},"ID选择器",[292,129679,129680],{"align":23717},"0，1，0，0",[246,129682,129683,129686],{},[292,129684,129685],{"align":23717},"行内样式",[292,129687,129688],{"align":23717},"1，0，0，0",[246,129690,129691,129694],{},[292,129692,129693],{"align":23717},"！important",[292,129695,129696],{"align":23717},"无穷大",[38,129698,129699],{},"! important用法：",[83,129701,129703],{"className":126533,"code":129702,"language":126535,"meta":10,"style":10},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[89,129704,129705,129710,129716,129729,129733,129738,129744,129754],{"__ignoreMap":10},[92,129706,129707],{"class":94,"line":95},[92,129708,129709],{"class":161},"\u002F* !important 拥有最高优先级 *\u002F\n",[92,129711,129712,129714],{"class":94,"line":11},[92,129713,51593],{"class":51282},[92,129715,15552],{"class":102},[92,129717,129718,129720,129722,129724,129727],{"class":94,"line":1158},[92,129719,70887],{"class":151},[92,129721,51419],{"class":102},[92,129723,51627],{"class":151},[92,129725,129726],{"class":98}," !important",[92,129728,1269],{"class":102},[92,129730,129731],{"class":94,"line":1173},[92,129732,1544],{"class":102},[92,129734,129735],{"class":94,"line":1179},[92,129736,129737],{"class":161},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[92,129739,129740,129742],{"class":94,"line":1193},[92,129741,51593],{"class":51282},[92,129743,15552],{"class":102},[92,129745,129746,129748,129750,129752],{"class":94,"line":1199},[92,129747,70887],{"class":151},[92,129749,51419],{"class":102},[92,129751,57403],{"class":151},[92,129753,1269],{"class":102},[92,129755,129756],{"class":94,"line":1290},[92,129757,1544],{"class":102},[38,129759,129760],{},"优先级注意点：",[38,129762,129763],{},"①权重是有4组数字组成,但是不会有进位",[38,129765,129766],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[38,129768,129769],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[38,129771,129772],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[38,129774,129775],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[38,129777,129778],{},"⑥复合选择器",[240,129780,129781,129791],{},[243,129782,129783],{},[246,129784,129785,129788],{},[249,129786,129787],{"align":23717},"div ul li",[249,129789,129790],{"align":23717},"0,0,0,3",[287,129792,129793,129801,129809],{},[246,129794,129795,129798],{},[292,129796,129797],{"align":23717},".nav ul li",[292,129799,129800],{"align":23717},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[246,129802,129803,129806],{},[292,129804,129805],{"align":23717},"a:hover",[292,129807,129808],{"align":23717},"0,0,1,1",[246,129810,129811,129814],{},[292,129812,129813],{"align":23717},".nav a",[292,129815,129808],{"align":23717},[5106,129817,129818],{},"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":129820},[129821,129829,129840],{"id":127929,"depth":11,"text":127930,"children":129822},[129823,129824,129825,129826,129827,129828],{"id":127942,"depth":1158,"text":127943},{"id":128014,"depth":1158,"text":128015},{"id":128086,"depth":1158,"text":128087},{"id":128117,"depth":1158,"text":128118},{"id":128124,"depth":1158,"text":128125},{"id":128277,"depth":1158,"text":128278},{"id":128585,"depth":11,"text":128586,"children":129830},[129831,129832,129833,129834,129835,129836,129837,129838,129839],{"id":128592,"depth":1158,"text":128593},{"id":128602,"depth":1158,"text":128603},{"id":128698,"depth":1158,"text":128699},{"id":128771,"depth":1158,"text":128772},{"id":128926,"depth":1158,"text":128927},{"id":129014,"depth":1158,"text":129015},{"id":129066,"depth":1158,"text":129067},{"id":129125,"depth":1158,"text":129126},{"id":129230,"depth":1158,"text":129231},{"id":129558,"depth":11,"text":129559,"children":129841},[129842,129843,129844],{"id":129562,"depth":1158,"text":129563},{"id":129575,"depth":1158,"text":129576},{"id":129625,"depth":1158,"text":129626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127921,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129851,"title":129852,"body":129853,"description":23357,"extension":14,"meta":131443,"navigation":17,"path":131444,"seo":131445,"stem":131446,"__hash__":131447},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129854,"toc":131422},[129855,129858,129862,129865,129868,129871,129874,129877,129880,129883,129887,129895,129932,129968,129971,129985,129990,130024,130027,130120,130125,130128,130158,130161,130166,130174,130178,130185,130231,130275,130280,130283,130286,130289,130292,130295,130298,130300,130303,130307,130312,130356,130361,130364,130367,130404,130409,130412,130415,130418,130421,130453,130456,130459,130462,130494,130497,130500,130503,130507,130510,130542,130545,130549,130569,130572,130580,130583,130587,130592,130595,130627,130632,130635,130673,130677,130682,130685,130688,130719,130722,130739,130744,130796,130856,130861,130915,130953,130957,130961,130964,130968,130976,130979,130981,130992,130997,131045,131079,131082,131085,131088,131091,131135,131138,131141,131144,131147,131150,131153,131197,131200,131203,131206,131209,131212,131215,131221,131224,131268,131271,131274,131277,131280,131283,131327,131330,131332,131335,131339,131343,131381,131385,131388,131391,131395,131403,131407,131410,131413,131416,131419],[29,129856,129852],{"id":129857},"_9-css盒模型浮动与切图",[33,129859,129861],{"id":129860},"_91-盒子模型","9.1 盒子模型",[38,129863,129864],{},"利用盒子来设计网页",[38,129866,129867],{},"盒子包含：边框、外边距、内边距、实际内容",[38,129869,129870],{},"网页布局设置：",[38,129872,129873],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[38,129875,129876],{},"②利用css设置好盒子样式，然后摆放到相应位置",[38,129878,129879],{},"③往盒子里装内容",[1441,129881],{"style":126389,"src":129882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[63,129884,129886],{"id":129885},"_911-边框border","9.1.1 边框（border）",[46,129888,129889,129892],{},[49,129890,129891],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[49,129893,129894],{},"语法",[83,129896,129898],{"className":126533,"code":129897,"language":126535,"meta":10,"style":10},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[89,129899,129900,129905,129911,129928],{"__ignoreMap":10},[92,129901,129902],{"class":94,"line":95},[92,129903,129904],{"class":161},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[92,129906,129907,129909],{"class":94,"line":11},[92,129908,51593],{"class":51282},[92,129910,15552],{"class":102},[92,129912,129913,129915,129917,129919,129921,129923,129926],{"class":94,"line":1158},[92,129914,70878],{"class":151},[92,129916,51419],{"class":102},[92,129918,320],{"class":151},[92,129920,51474],{"class":98},[92,129922,51503],{"class":151},[92,129924,129925],{"class":151}," #ccc",[92,129927,1269],{"class":102},[92,129929,129930],{"class":94,"line":1173},[92,129931,1544],{"class":102},[240,129933,129934,129942],{},[243,129935,129936],{},[246,129937,129938,129940],{},[249,129939,129135],{"align":23717},[249,129941,102677],{"align":23717},[287,129943,129944,129952,129960],{},[246,129945,129946,129949],{},[292,129947,129948],{"align":23717},"border-width",[292,129950,129951],{"align":23717},"定义边框粗细，单位是px",[246,129953,129954,129957],{},[292,129955,129956],{"align":23717},"border-style",[292,129958,129959],{"align":23717},"边框的样式",[246,129961,129962,129965],{},[292,129963,129964],{"align":23717},"border-color",[292,129966,129967],{"align":23717},"边框的颜色",[38,129969,129970],{},"边框样式 border-style 可以设置如下值：",[1110,129972,129973,129976,129979,129982],{},[49,129974,129975],{},"none：没有边框即忽略所有边框的宽度（默认值）",[49,129977,129978],{},"solid：边框为单实线(最为常用的)",[49,129980,129981],{},"dashed：边框为虚线",[49,129983,129984],{},"dotted：边框为点线",[46,129986,129987],{"start":1158},[49,129988,129989],{},"边框的合写分写",[83,129991,129992],{"className":126533,"code":129897,"language":126535,"meta":10,"style":10},[89,129993,129994,129998,130004,130020],{"__ignoreMap":10},[92,129995,129996],{"class":94,"line":95},[92,129997,129904],{"class":161},[92,129999,130000,130002],{"class":94,"line":11},[92,130001,51593],{"class":51282},[92,130003,15552],{"class":102},[92,130005,130006,130008,130010,130012,130014,130016,130018],{"class":94,"line":1158},[92,130007,70878],{"class":151},[92,130009,51419],{"class":102},[92,130011,320],{"class":151},[92,130013,51474],{"class":98},[92,130015,51503],{"class":151},[92,130017,129925],{"class":151},[92,130019,1269],{"class":102},[92,130021,130022],{"class":94,"line":1173},[92,130023,1544],{"class":102},[38,130025,130026],{},"边框分开写法：",[83,130028,130030],{"className":126533,"code":130029,"language":126535,"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,130031,130032,130037,130043,130061,130079,130098,130116],{"__ignoreMap":10},[92,130033,130034],{"class":94,"line":95},[92,130035,130036],{"class":161},"\u002F* 边框分开写法 *\u002F\n",[92,130038,130039,130041],{"class":94,"line":11},[92,130040,51593],{"class":51282},[92,130042,15552],{"class":102},[92,130044,130045,130048,130050,130052,130054,130056,130059],{"class":94,"line":1158},[92,130046,130047],{"class":151},"  border-top",[92,130049,51419],{"class":102},[92,130051,320],{"class":151},[92,130053,51474],{"class":98},[92,130055,51503],{"class":151},[92,130057,130058],{"class":151}," #000",[92,130060,1269],{"class":102},[92,130062,130063,130066,130068,130070,130072,130074,130077],{"class":94,"line":1173},[92,130064,130065],{"class":151},"  border-right",[92,130067,51419],{"class":102},[92,130069,180],{"class":151},[92,130071,51474],{"class":98},[92,130073,62223],{"class":151},[92,130075,130076],{"class":151}," #333",[92,130078,1269],{"class":102},[92,130080,130081,130084,130086,130088,130090,130093,130096],{"class":94,"line":1179},[92,130082,130083],{"class":151},"  border-bottom",[92,130085,51419],{"class":102},[92,130087,174],{"class":151},[92,130089,51474],{"class":98},[92,130091,130092],{"class":151}," dotted",[92,130094,130095],{"class":151}," #666",[92,130097,1269],{"class":102},[92,130099,130100,130103,130105,130107,130109,130111,130114],{"class":94,"line":1193},[92,130101,130102],{"class":151},"  border-left",[92,130104,51419],{"class":102},[92,130106,320],{"class":151},[92,130108,51474],{"class":98},[92,130110,51503],{"class":151},[92,130112,130113],{"class":151}," #999",[92,130115,1269],{"class":102},[92,130117,130118],{"class":94,"line":1199},[92,130119,1544],{"class":102},[46,130121,130122],{"start":1173},[49,130123,130124],{},"表格的细线边框",[38,130126,130127],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[83,130129,130131],{"className":126533,"code":130130,"language":126535,"meta":10,"style":10},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[89,130132,130133,130138,130144,130154],{"__ignoreMap":10},[92,130134,130135],{"class":94,"line":95},[92,130136,130137],{"class":161},"\u002F* 表格细线边框合并 *\u002F\n",[92,130139,130140,130142],{"class":94,"line":11},[92,130141,240],{"class":51282},[92,130143,15552],{"class":102},[92,130145,130146,130148,130150,130152],{"class":94,"line":1158},[92,130147,70560],{"class":151},[92,130149,51419],{"class":102},[92,130151,65017],{"class":151},[92,130153,1269],{"class":102},[92,130155,130156],{"class":94,"line":1173},[92,130157,1544],{"class":102},[38,130159,130160],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[46,130162,130163],{"start":1179},[49,130164,130165],{},"解决边框额外增加盒子的实际大小的方法：",[1110,130167,130168,130171],{},[49,130169,130170],{},"测量盒子大小的时候,不量边框",[49,130172,130173],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[63,130175,130177],{"id":130176},"_912-内边距","9.1.2 内边距",[46,130179,130180,130183],{},[49,130181,130182],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[49,130184,129894],{},[240,130186,130187,130197],{},[243,130188,130189],{},[246,130190,130191,130194],{},[249,130192,130193],{"align":23717},"值的个数",[249,130195,130196],{"align":23717},"表达意思",[287,130198,130199,130207,130215,130223],{},[246,130200,130201,130204],{},[292,130202,130203],{"align":23717},"padding: 5px;",[292,130205,130206],{"align":23717},"1个值，代表上下左右都有5个元素",[246,130208,130209,130212],{},[292,130210,130211],{"align":23717},"padding: 5px 10px;",[292,130213,130214],{"align":23717},"2个值，代表上下内边距为5像素，左右内边距为10像素",[246,130216,130217,130220],{},[292,130218,130219],{"align":23717},"padding: 5px 10px 20px;",[292,130221,130222],{"align":23717},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[246,130224,130225,130228],{},[292,130226,130227],{"align":23717},"padding: 5px 10px 20px 30px;",[292,130229,130230],{"align":23717},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[240,130232,130233,130241],{},[243,130234,130235],{},[246,130236,130237,130239],{},[249,130238,129135],{"align":23717},[249,130240,102677],{"align":23717},[287,130242,130243,130251,130259,130267],{},[246,130244,130245,130248],{},[292,130246,130247],{"align":23717},"padding-left",[292,130249,130250],{"align":23717},"左内边距",[246,130252,130253,130256],{},[292,130254,130255],{"align":23717},"padding-right",[292,130257,130258],{"align":23717},"右内边距",[246,130260,130261,130264],{},[292,130262,130263],{"align":23717},"padding-top",[292,130265,130266],{"align":23717},"上内边距",[246,130268,130269,130272],{},[292,130270,130271],{"align":23717},"padding-bottom",[292,130273,130274],{"align":23717},"下内边距",[46,130276,130277],{"start":1158},[49,130278,130279],{},"内边距会影响盒子的实际大小",[38,130281,130282],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[38,130284,130285],{},"①内容和边框有了距离，添加了内边距",[38,130287,130288],{},"②padding影响了盒子实际大小",[38,130290,130291],{},"内边距对盒子大小的影响：",[38,130293,130294],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[38,130296,130297],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[38,130299,95201],{},[38,130301,130302],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[63,130304,130306],{"id":130305},"_913-外边距","9.1.3 外边距",[46,130308,130309],{},[49,130310,130311],{},"控制盒子与盒子之间的距离",[240,130313,130314,130322],{},[243,130315,130316],{},[246,130317,130318,130320],{},[249,130319,129135],{"align":23717},[249,130321,102677],{"align":23717},[287,130323,130324,130332,130340,130348],{},[246,130325,130326,130329],{},[292,130327,130328],{"align":23717},"margin-left",[292,130330,130331],{"align":23717},"左外边距",[246,130333,130334,130337],{},[292,130335,130336],{"align":23717},"margin-right",[292,130338,130339],{"align":23717},"右外边距",[246,130341,130342,130345],{},[292,130343,130344],{"align":23717},"margin-top",[292,130346,130347],{"align":23717},"上外边距",[246,130349,130350,130353],{},[292,130351,130352],{"align":23717},"margin-bottom",[292,130354,130355],{"align":23717},"下外边距",[46,130357,130358],{"start":11},[49,130359,130360],{},"外边距可以让块级盒子水平居中的两个条件：",[38,130362,130363],{},"①盒子必须指定了宽度（width）",[38,130365,130366],{},"②盒子左右的外边距都设置为 auto",[83,130368,130370],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[89,130371,130372,130377,130384,130400],{"__ignoreMap":10},[92,130373,130374],{"class":94,"line":95},[92,130375,130376],{"class":161},"\u002F* margin 复合写法（同上） *\u002F\n",[92,130378,130379,130382],{"class":94,"line":11},[92,130380,130381],{"class":1942},".box",[92,130383,15552],{"class":102},[92,130385,130386,130388,130390,130392,130394,130397],{"class":94,"line":1158},[92,130387,70452],{"class":151},[92,130389,51419],{"class":102},[92,130391,294],{"class":151},[92,130393,51538],{"class":151},[92,130395,130396],{"class":102},";  ",[92,130398,130399],{"class":161},"\u002F* 块级盒子水平居中 *\u002F\n",[92,130401,130402],{"class":94,"line":1173},[92,130403,1544],{"class":102},[46,130405,130406],{"start":1158},[49,130407,130408],{},"外边距塌陷问题",[38,130410,130411],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1441,130413],{"style":126389,"src":130414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[38,130416,130417],{},"解决方案：",[38,130419,130420],{},"①可以为父亲元素定义上边距",[83,130422,130423],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,130424,130425,130429,130435,130449],{"__ignoreMap":10},[92,130426,130427],{"class":94,"line":95},[92,130428,130376],{"class":161},[92,130430,130431,130433],{"class":94,"line":11},[92,130432,130381],{"class":1942},[92,130434,15552],{"class":102},[92,130436,130437,130439,130441,130443,130445,130447],{"class":94,"line":1158},[92,130438,70452],{"class":151},[92,130440,51419],{"class":102},[92,130442,294],{"class":151},[92,130444,51538],{"class":151},[92,130446,130396],{"class":102},[92,130448,130399],{"class":161},[92,130450,130451],{"class":94,"line":1173},[92,130452,1544],{"class":102},[38,130454,130455],{},"②可以为父亲元素定义上内边距",[38,130457,130458],{},"③可以为父亲元素添加overflow:hidden",[1441,130460],{"style":126389,"src":130461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[83,130463,130464],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,130465,130466,130470,130476,130490],{"__ignoreMap":10},[92,130467,130468],{"class":94,"line":95},[92,130469,130376],{"class":161},[92,130471,130472,130474],{"class":94,"line":11},[92,130473,130381],{"class":1942},[92,130475,15552],{"class":102},[92,130477,130478,130480,130482,130484,130486,130488],{"class":94,"line":1158},[92,130479,70452],{"class":151},[92,130481,51419],{"class":102},[92,130483,294],{"class":151},[92,130485,51538],{"class":151},[92,130487,130396],{"class":102},[92,130489,130399],{"class":161},[92,130491,130492],{"class":94,"line":1173},[92,130493,1544],{"class":102},[1441,130495],{"style":126389,"src":130496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[38,130498,130499],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[38,130501,130502],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[63,130504,130506],{"id":130505},"_914-清除内外边距","9.1.4 清除内外边距",[38,130508,130509],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[83,130511,130512],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,130513,130514,130518,130524,130538],{"__ignoreMap":10},[92,130515,130516],{"class":94,"line":95},[92,130517,130376],{"class":161},[92,130519,130520,130522],{"class":94,"line":11},[92,130521,130381],{"class":1942},[92,130523,15552],{"class":102},[92,130525,130526,130528,130530,130532,130534,130536],{"class":94,"line":1158},[92,130527,70452],{"class":151},[92,130529,51419],{"class":102},[92,130531,294],{"class":151},[92,130533,51538],{"class":151},[92,130535,130396],{"class":102},[92,130537,130399],{"class":161},[92,130539,130540],{"class":94,"line":1173},[92,130541,1544],{"class":102},[38,130543,130544],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[63,130546,130548],{"id":130547},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1110,130550,130551,130554,130557,130560,130563,130566],{},[49,130552,130553],{},"文件→打开 ：可以打开我们要测量的图片",[49,130555,130556],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[49,130558,130559],{},"右击标尺，把里面的单位改为像素",[49,130561,130562],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[49,130564,130565],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[49,130567,130568],{},"用选区拖动 可以测量大小",[1441,130570],{"style":126389,"src":130571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1110,130573,130574,130577],{},[49,130575,130576],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[49,130578,130579],{},"吸管取色工具",[1441,130581],{"style":126389,"src":130582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[63,130584,130586],{"id":130585},"_916-案例","9.1.6 案例",[46,130588,130589],{},[49,130590,130591],{},"小米商品",[1441,130593],{"style":126389,"src":130594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[83,130596,130597],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,130598,130599,130603,130609,130623],{"__ignoreMap":10},[92,130600,130601],{"class":94,"line":95},[92,130602,130376],{"class":161},[92,130604,130605,130607],{"class":94,"line":11},[92,130606,130381],{"class":1942},[92,130608,15552],{"class":102},[92,130610,130611,130613,130615,130617,130619,130621],{"class":94,"line":1158},[92,130612,70452],{"class":151},[92,130614,51419],{"class":102},[92,130616,294],{"class":151},[92,130618,51538],{"class":151},[92,130620,130396],{"class":102},[92,130622,130399],{"class":161},[92,130624,130625],{"class":94,"line":1173},[92,130626,1544],{"class":102},[46,130628,130629],{"start":11},[49,130630,130631],{},"快报模块",[1441,130633],{"style":126389,"src":130634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[83,130636,130638],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[89,130639,130640,130645,130660,130665],{"__ignoreMap":10},[92,130641,130642],{"class":94,"line":95},[92,130643,130644],{"class":161},"\u003C!-- HTML 代码示例 -->\n",[92,130646,130647,130649,130651,130653,130655,130658],{"class":94,"line":11},[92,130648,1013],{"class":102},[92,130650,51593],{"class":51282},[92,130652,53468],{"class":1942},[92,130654,148],{"class":102},[92,130656,130657],{"class":207},"\"example\"",[92,130659,51289],{"class":102},[92,130661,130662],{"class":94,"line":1158},[92,130663,130664],{"class":102},"  示例内容\n",[92,130666,130667,130669,130671],{"class":94,"line":1173},[92,130668,51767],{"class":102},[92,130670,51593],{"class":51282},[92,130672,51289],{"class":102},[63,130674,130676],{"id":130675},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[46,130678,130679],{},[49,130680,130681],{},"圆角边框",[38,130683,130684],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1441,130686],{"style":126389,"src":130687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[83,130689,130691],{"className":126533,"code":130690,"language":126535,"meta":10,"style":10},"div {\n  border: 1px solid #ccc;\n}\n",[89,130692,130693,130699,130715],{"__ignoreMap":10},[92,130694,130695,130697],{"class":94,"line":95},[92,130696,51593],{"class":51282},[92,130698,15552],{"class":102},[92,130700,130701,130703,130705,130707,130709,130711,130713],{"class":94,"line":11},[92,130702,70878],{"class":151},[92,130704,51419],{"class":102},[92,130706,320],{"class":151},[92,130708,51474],{"class":98},[92,130710,51503],{"class":151},[92,130712,129925],{"class":151},[92,130714,1269],{"class":102},[92,130716,130717],{"class":94,"line":1158},[92,130718,1544],{"class":102},[38,130720,130721],{},"解释:",[1110,130723,130724,130727,130730,130733,130736],{},[49,130725,130726],{},"参数值可以为数值或百分比的形式",[49,130728,130729],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[49,130731,130732],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[49,130734,130735],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[49,130737,130738],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[46,130740,130741],{"start":11},[49,130742,130743],{},"盒子阴影",[83,130745,130747],{"className":126533,"code":130746,"language":126535,"meta":10,"style":10},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[89,130748,130749,130755,130792],{"__ignoreMap":10},[92,130750,130751,130753],{"class":94,"line":95},[92,130752,51593],{"class":51282},[92,130754,15552],{"class":102},[92,130756,130757,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790],{"class":94,"line":11},[92,130758,130759],{"class":151},"  box-shadow",[92,130761,51419],{"class":102},[92,130763,294],{"class":151},[92,130765,14735],{"class":151},[92,130767,51474],{"class":98},[92,130769,2017],{"class":151},[92,130771,51474],{"class":98},[92,130773,78749],{"class":151},[92,130775,103],{"class":102},[92,130777,294],{"class":151},[92,130779,12415],{"class":102},[92,130781,294],{"class":151},[92,130783,12415],{"class":102},[92,130785,294],{"class":151},[92,130787,12415],{"class":102},[92,130789,86192],{"class":151},[92,130791,2698],{"class":102},[92,130793,130794],{"class":94,"line":1158},[92,130795,1544],{"class":102},[240,130797,130798,130806],{},[243,130799,130800],{},[246,130801,130802,130804],{},[249,130803,255],{"align":23717},[249,130805,27471],{"align":23717},[287,130807,130808,130816,130824,130832,130840,130848],{},[246,130809,130810,130813],{},[292,130811,130812],{"align":23717},"h-shadow",[292,130814,130815],{"align":23717},"必需,水平阴影的位置,允许负值",[246,130817,130818,130821],{},[292,130819,130820],{"align":23717},"v-shadow",[292,130822,130823],{"align":23717},"必需,垂直阴影的位置,允许负值",[246,130825,130826,130829],{},[292,130827,130828],{"align":23717},"blur",[292,130830,130831],{"align":23717},"可选,模糊距离,就是影子的虚实",[246,130833,130834,130837],{},[292,130835,130836],{"align":23717},"spread",[292,130838,130839],{"align":23717},"可选,阴影尺寸",[246,130841,130842,130845],{},[292,130843,130844],{"align":23717},"color",[292,130846,130847],{"align":23717},"可选,阴影的颜色",[246,130849,130850,130853],{},[292,130851,130852],{"align":23717},"inset",[292,130854,130855],{"align":23717},"可选,将外部阴影(outset)改为内部阴影",[46,130857,130858],{"start":1158},[49,130859,130860],{},"文字阴影",[83,130862,130864],{"className":126533,"code":130863,"language":126535,"meta":10,"style":10},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[89,130865,130866,130872,130911],{"__ignoreMap":10},[92,130867,130868,130870],{"class":94,"line":95},[92,130869,38],{"class":51282},[92,130871,15552],{"class":102},[92,130873,130874,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909],{"class":94,"line":11},[92,130875,130876],{"class":151},"  text-shadow",[92,130878,51419],{"class":102},[92,130880,320],{"class":151},[92,130882,51474],{"class":98},[92,130884,25100],{"class":151},[92,130886,51474],{"class":98},[92,130888,14735],{"class":151},[92,130890,51474],{"class":98},[92,130892,78749],{"class":151},[92,130894,103],{"class":102},[92,130896,294],{"class":151},[92,130898,12415],{"class":102},[92,130900,294],{"class":151},[92,130902,12415],{"class":102},[92,130904,294],{"class":151},[92,130906,12415],{"class":102},[92,130908,100502],{"class":151},[92,130910,2698],{"class":102},[92,130912,130913],{"class":94,"line":1158},[92,130914,1544],{"class":102},[240,130916,130917,130925],{},[243,130918,130919],{},[246,130920,130921,130923],{},[249,130922,255],{"align":23717},[249,130924,27471],{"align":23717},[287,130926,130927,130933,130940,130947],{},[246,130928,130929,130931],{},[292,130930,130812],{"align":23717},[292,130932,130815],{"align":23717},[246,130934,130935,130937],{},[292,130936,130820],{"align":23717},[292,130938,130939],{"align":23717},"必需,垂直阴影位置,允许负值",[246,130941,130942,130944],{},[292,130943,130828],{"align":23717},[292,130945,130946],{"align":23717},"可选,模糊的距离",[246,130948,130949,130951],{},[292,130950,130844],{"align":23717},[292,130952,130847],{"align":23717},[33,130954,130956],{"id":130955},"_92-浮动","9.2 浮动",[63,130958,130960],{"id":130959},"_921-浮动介绍","9.2.1 浮动介绍",[38,130962,130963],{},"在16.2中详细介绍",[63,130965,130967],{"id":130966},"_922-清除浮动","9.2.2 清除浮动",[46,130969,130970,130973],{},[49,130971,130972],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[49,130974,130975],{},"清除浮动的本质",[38,130977,130978],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[38,130980,9005],{},[1110,130982,130983,130986,130989],{},[49,130984,130985],{},"如果父盒子本身有高度，则不需要清除浮动",[49,130987,130988],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[49,130990,130991],{},"父级有了高度，就不会影响下面的标准流了",[46,130993,130994],{"start":1158},[49,130995,130996],{},"清除浮动样式",[83,130998,131000],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[89,131001,131002,131009,131020,131024,131031,131041],{"__ignoreMap":10},[92,131003,131004,131007],{"class":94,"line":95},[92,131005,131006],{"class":1942},".left",[92,131008,15552],{"class":102},[92,131010,131011,131014,131016,131018],{"class":94,"line":11},[92,131012,131013],{"class":151},"  float",[92,131015,51419],{"class":102},[92,131017,23717],{"class":151},[92,131019,1269],{"class":102},[92,131021,131022],{"class":94,"line":1158},[92,131023,1544],{"class":102},[92,131025,131026,131029],{"class":94,"line":1173},[92,131027,131028],{"class":1942},".right",[92,131030,15552],{"class":102},[92,131032,131033,131035,131037,131039],{"class":94,"line":1179},[92,131034,131013],{"class":151},[92,131036,51419],{"class":102},[92,131038,72504],{"class":151},[92,131040,1269],{"class":102},[92,131042,131043],{"class":94,"line":1193},[92,131044,1544],{"class":102},[240,131046,131047,131055],{},[243,131048,131049],{},[246,131050,131051,131053],{},[249,131052,126997],{"align":23717},[249,131054,27471],{"align":23717},[287,131056,131057,131064,131071],{},[246,131058,131059,131061],{},[292,131060,23717],{"align":23717},[292,131062,131063],{"align":23717},"不允许左侧有浮动元素（清除左侧浮动的影响）",[246,131065,131066,131068],{},[292,131067,72504],{"align":23717},[292,131069,131070],{"align":23717},"不允许右侧有浮动元素（清除右侧浮动的影响）",[246,131072,131073,131076],{},[292,131074,131075],{"align":23717},"both",[292,131077,131078],{"align":23717},"同时清除左右侧浮动的影响",[38,131080,131081],{},"法一",[38,131083,131084],{},"额外标签法也称为隔墙法",[38,131086,131087],{},"使用方式：",[38,131089,131090],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[83,131092,131093],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,131094,131095,131101,131111,131115,131121,131131],{"__ignoreMap":10},[92,131096,131097,131099],{"class":94,"line":95},[92,131098,131006],{"class":1942},[92,131100,15552],{"class":102},[92,131102,131103,131105,131107,131109],{"class":94,"line":11},[92,131104,131013],{"class":151},[92,131106,51419],{"class":102},[92,131108,23717],{"class":151},[92,131110,1269],{"class":102},[92,131112,131113],{"class":94,"line":1158},[92,131114,1544],{"class":102},[92,131116,131117,131119],{"class":94,"line":1173},[92,131118,131028],{"class":1942},[92,131120,15552],{"class":102},[92,131122,131123,131125,131127,131129],{"class":94,"line":1179},[92,131124,131013],{"class":151},[92,131126,51419],{"class":102},[92,131128,72504],{"class":151},[92,131130,1269],{"class":102},[92,131132,131133],{"class":94,"line":1193},[92,131134,1544],{"class":102},[38,131136,131137],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[38,131139,131140],{},"优点： 通俗易懂，书写方便",[38,131142,131143],{},"缺点： 添加许多无意义的标签，结构化较差",[38,131145,131146],{},"注意： 要求这个新的空标签必须是块级元素。",[38,131148,131149],{},"法二",[38,131151,131152],{},"父级添加overflow属性",[83,131154,131155],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,131156,131157,131163,131173,131177,131183,131193],{"__ignoreMap":10},[92,131158,131159,131161],{"class":94,"line":95},[92,131160,131006],{"class":1942},[92,131162,15552],{"class":102},[92,131164,131165,131167,131169,131171],{"class":94,"line":11},[92,131166,131013],{"class":151},[92,131168,51419],{"class":102},[92,131170,23717],{"class":151},[92,131172,1269],{"class":102},[92,131174,131175],{"class":94,"line":1158},[92,131176,1544],{"class":102},[92,131178,131179,131181],{"class":94,"line":1173},[92,131180,131028],{"class":1942},[92,131182,15552],{"class":102},[92,131184,131185,131187,131189,131191],{"class":94,"line":1179},[92,131186,131013],{"class":151},[92,131188,51419],{"class":102},[92,131190,72504],{"class":151},[92,131192,1269],{"class":102},[92,131194,131195],{"class":94,"line":1193},[92,131196,1544],{"class":102},[38,131198,131199],{},"overflow: hidden;",[38,131201,131202],{},"优点：代码简洁",[38,131204,131205],{},"缺点：无法显示溢出的部分",[38,131207,131208],{},"注意：是给父元素添加代码",[38,131210,131211],{},"法三",[38,131213,131214],{},"父级添加after伪元素",[38,131216,131217,131220],{},[131218,131219],"after",{}," 方式是额外标签法的升级版",[38,131222,131223],{},"使用的时候复制就可以",[83,131225,131226],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,131227,131228,131234,131244,131248,131254,131264],{"__ignoreMap":10},[92,131229,131230,131232],{"class":94,"line":95},[92,131231,131006],{"class":1942},[92,131233,15552],{"class":102},[92,131235,131236,131238,131240,131242],{"class":94,"line":11},[92,131237,131013],{"class":151},[92,131239,51419],{"class":102},[92,131241,23717],{"class":151},[92,131243,1269],{"class":102},[92,131245,131246],{"class":94,"line":1158},[92,131247,1544],{"class":102},[92,131249,131250,131252],{"class":94,"line":1173},[92,131251,131028],{"class":1942},[92,131253,15552],{"class":102},[92,131255,131256,131258,131260,131262],{"class":94,"line":1179},[92,131257,131013],{"class":151},[92,131259,51419],{"class":102},[92,131261,72504],{"class":151},[92,131263,1269],{"class":102},[92,131265,131266],{"class":94,"line":1193},[92,131267,1544],{"class":102},[38,131269,131270],{},"优点：没有增加标签，结构更简单",[38,131272,131273],{},"缺点：照顾低版本浏览器",[38,131275,131276],{},"代表网站： 百度、淘宝网、网易等",[38,131278,131279],{},"法四",[38,131281,131282],{},"父级添加双伪元素",[83,131284,131285],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,131286,131287,131293,131303,131307,131313,131323],{"__ignoreMap":10},[92,131288,131289,131291],{"class":94,"line":95},[92,131290,131006],{"class":1942},[92,131292,15552],{"class":102},[92,131294,131295,131297,131299,131301],{"class":94,"line":11},[92,131296,131013],{"class":151},[92,131298,51419],{"class":102},[92,131300,23717],{"class":151},[92,131302,1269],{"class":102},[92,131304,131305],{"class":94,"line":1158},[92,131306,1544],{"class":102},[92,131308,131309,131311],{"class":94,"line":1173},[92,131310,131028],{"class":1942},[92,131312,15552],{"class":102},[92,131314,131315,131317,131319,131321],{"class":94,"line":1179},[92,131316,131013],{"class":151},[92,131318,51419],{"class":102},[92,131320,72504],{"class":151},[92,131322,1269],{"class":102},[92,131324,131325],{"class":94,"line":1193},[92,131326,1544],{"class":102},[38,131328,131329],{},"优点：代码更简洁",[38,131331,131273],{},[38,131333,131334],{},"代表网站：小米、腾讯等",[33,131336,131338],{"id":131337},"_93-ps切图","9.3 PS切图",[63,131340,131342],{"id":131341},"_931-常见图片格式","9.3.1 常见图片格式",[240,131344,131345,131355],{},[243,131346,131347],{},[246,131348,131349,131352],{},[249,131350,131351],{"align":23717},"jpg图像格式",[249,131353,131354],{"align":23717},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[287,131356,131357,131365,131373],{},[246,131358,131359,131362],{},[292,131360,131361],{"align":23717},"gif图像格式",[292,131363,131364],{"align":23717},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[246,131366,131367,131370],{},[292,131368,131369],{"align":23717},"png图像格式",[292,131371,131372],{"align":23717},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[246,131374,131375,131378],{},[292,131376,131377],{"align":23717},"PSD图像格式",[292,131379,131380],{"align":23717},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[63,131382,131384],{"id":131383},"_932-图层切图","9.3.2 图层切图",[38,131386,131387],{},"最简单的切图方式：右击图层 → 导出 → 切片",[38,131389,131390],{},"按住shift选中两个图层->图层菜单->合并图层",[63,131392,131394],{"id":131393},"_933-切片切图","9.3.3 切片切图",[1110,131396,131397,131400],{},[49,131398,131399],{},"利用切片工具手动划出",[49,131401,131402],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[63,131404,131406],{"id":131405},"_934-切图步骤","9.3.4 切图步骤",[38,131408,131409],{},"用切片工具选中：",[1441,131411],{"style":126389,"src":131412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[38,131414,131415],{},"文件 -> 导出",[1441,131417],{"style":126389,"src":131418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5106,131420,131421],{},"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":131423},[131424,131433,131437],{"id":129860,"depth":11,"text":129861,"children":131425},[131426,131427,131428,131429,131430,131431,131432],{"id":129885,"depth":1158,"text":129886},{"id":130176,"depth":1158,"text":130177},{"id":130305,"depth":1158,"text":130306},{"id":130505,"depth":1158,"text":130506},{"id":130547,"depth":1158,"text":130548},{"id":130585,"depth":1158,"text":130586},{"id":130675,"depth":1158,"text":130676},{"id":130955,"depth":11,"text":130956,"children":131434},[131435,131436],{"id":130959,"depth":1158,"text":130960},{"id":130966,"depth":1158,"text":130967},{"id":131337,"depth":11,"text":131338,"children":131438},[131439,131440,131441,131442],{"id":131341,"depth":1158,"text":131342},{"id":131383,"depth":1158,"text":131384},{"id":131393,"depth":1158,"text":131394},{"id":131405,"depth":1158,"text":131406},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129852,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131449,"title":131450,"body":131451,"description":23357,"extension":14,"meta":132092,"navigation":17,"path":132093,"seo":132094,"stem":132095,"__hash__":132096},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131452,"toc":132080},[131453,131456,131460,131486,131520,131524,131528,131531,131573,131580,131590,131598,131600,131603,131606,131609,131616,131630,131634,131637,131666,131670,131673,131687,131691,131694,131722,131726,131729,131755,131759,131764,131797,131802,131830,131834,131851,131897,131902,131946,131963,132070,132078],[29,131454,131450],{"id":131455},"_10-css规范与学成在线案例",[33,131457,131459],{"id":131458},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[46,131461,131462,131468,131474,131480],{},[49,131463,131464,131467],{},[252,131465,131466],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[49,131469,131470,131473],{},[252,131471,131472],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[49,131475,131476,131479],{},[252,131477,131478],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[49,131481,131482,131485],{},[252,131483,131484],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[83,131487,131488],{"className":126533,"code":129897,"language":126535,"meta":10,"style":10},[89,131489,131490,131494,131500,131516],{"__ignoreMap":10},[92,131491,131492],{"class":94,"line":95},[92,131493,129904],{"class":161},[92,131495,131496,131498],{"class":94,"line":11},[92,131497,51593],{"class":51282},[92,131499,15552],{"class":102},[92,131501,131502,131504,131506,131508,131510,131512,131514],{"class":94,"line":1158},[92,131503,70878],{"class":151},[92,131505,51419],{"class":102},[92,131507,320],{"class":151},[92,131509,51474],{"class":98},[92,131511,51503],{"class":151},[92,131513,129925],{"class":151},[92,131515,1269],{"class":102},[92,131517,131518],{"class":94,"line":1173},[92,131519,1544],{"class":102},[33,131521,131523],{"id":131522},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[63,131525,131527],{"id":131526},"_1021-header头部制作","10.2.1 header头部制作",[1441,131529],{"style":126389,"src":131530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1110,131532,131533,131540,131547,131553,131560,131567],{},[49,131534,131535,131536,131539],{},"1号是版心盒子 ",[252,131537,131538],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[49,131541,131542,131543,131546],{},"版心盒子 里面包含 2号盒子 ",[252,131544,131545],{},"logo"," 图标",[49,131548,131549,131550,131552],{},"版心盒子 里面包含 3号盒子 ",[252,131551,53695],{}," 导航栏",[49,131554,131555,131556,131559],{},"版心盒子 里面包含 4号盒子 ",[252,131557,131558],{},"search"," 搜索框",[49,131561,131562,131563,131566],{},"版心盒子 里面包含 5号盒子 ",[252,131564,131565],{},"user"," 个人信息",[49,131568,131569,131570],{},"注意，要求里面的 ",[252,131571,131572],{},"4个子盒子 必须都浮动",[46,131574,131575],{},[49,131576,131577],{},[252,131578,131579],{},"导航栏注意点:",[38,131581,131582,131583,131586,131587],{},"实际开发中， ",[252,131584,131585],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[252,131588,131589],{},"用 li 包含链接(li+a)的做法",[1110,131591,131592,131595],{},[49,131593,131594],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[49,131596,131597],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[38,131599,9005],{},[38,131601,131602],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[38,131604,131605],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[38,131607,131608],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[46,131610,131611],{"start":11},[49,131612,131613],{},[252,131614,131615],{},"4号盒子search的细节：",[1110,131617,131618,131621,131624],{},[49,131619,131620],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[49,131622,131623],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[49,131625,131626,131629],{},[89,131627,131628],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[63,131631,131633],{"id":131632},"_1022-banner制作","10.2.2 banner制作",[1441,131635],{"style":126389,"src":131636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1110,131638,131639,131646,131652,131659],{},[49,131640,131641,131642,131645],{},"1号盒子是通栏的大盒子 ",[252,131643,131644],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[49,131647,131648,131649,131651],{},"2号盒子是版心 ",[252,131650,898],{}," ， 要水平居中对齐",[49,131653,131654,131655,131658],{},"3号盒子版心内，左对齐 ",[252,131656,131657],{},"subnav"," 侧导航栏",[49,131660,131661,131662,131665],{},"4号盒子版心内，右对齐 ",[252,131663,131664],{},"course"," 课程",[63,131667,131669],{"id":131668},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1441,131671],{"style":126389,"src":131672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1110,131674,131675,131678,131681,131684],{},[49,131676,131677],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[49,131679,131680],{},"1号盒子是标题 H3 左侧浮动",[49,131682,131683],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[49,131685,131686],{},"3号盒子 右浮动 mod 修改",[63,131688,131690],{"id":131689},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1441,131692],{"style":126389,"src":131693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1110,131695,131696,131702,131709,131716,131719],{},[49,131697,131698,131699,131701],{},"1号盒子为最大的盒子 ",[252,131700,53696],{}," 版心水平居中对齐",[49,131703,131704,131705,131708],{},"2号盒子为上面部分 ",[252,131706,131707],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[49,131710,131711,131712,131715],{},"3号盒子为底下部分 ",[252,131713,131714],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[49,131717,131718],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[49,131720,131721],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[63,131723,131725],{"id":131724},"_1025-底部模块制作","10.2.5 底部模块制作",[1441,131727],{"style":126389,"src":131728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1110,131730,131731,131738,131741,131748],{},[49,131732,131733,131734,131737],{},"1号盒子通栏大盒子 底部 ",[252,131735,131736],{},"footer"," 给高度 底色是白色",[49,131739,131740],{},"2号盒子版心水平居中",[49,131742,131743,131744,131747],{},"3号盒子版权 ",[252,131745,131746],{},"copyright"," 左对齐",[49,131749,131750,131751,131754],{},"4号盒子 链接组 ",[252,131752,131753],{},"links"," 右对齐",[63,131756,131758],{"id":131757},"_1026-代码模块","10.2.6 代码模块",[46,131760,131761],{},[49,131762,131763],{},"html部分",[83,131765,131767],{"className":127280,"code":131766,"language":127282,"meta":10,"style":10},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[89,131768,131769],{"__ignoreMap":10},[92,131770,131771,131773,131775,131777,131779,131782,131785,131787,131790,131793,131795],{"class":94,"line":95},[92,131772,1013],{"class":102},[92,131774,341],{"class":51282},[92,131776,61039],{"class":1942},[92,131778,148],{"class":102},[92,131780,131781],{"class":207},"\"https:\u002F\u002Fexample.com\"",[92,131783,131784],{"class":1942}," target",[92,131786,148],{"class":102},[92,131788,131789],{"class":207},"\"_blank\"",[92,131791,131792],{"class":102},">链接文字\u003C\u002F",[92,131794,341],{"class":51282},[92,131796,51289],{"class":102},[46,131798,131799],{"start":11},[49,131800,131801],{},"css部分",[83,131803,131804],{"className":127280,"code":131766,"language":127282,"meta":10,"style":10},[89,131805,131806],{"__ignoreMap":10},[92,131807,131808,131810,131812,131814,131816,131818,131820,131822,131824,131826,131828],{"class":94,"line":95},[92,131809,1013],{"class":102},[92,131811,341],{"class":51282},[92,131813,61039],{"class":1942},[92,131815,148],{"class":102},[92,131817,131781],{"class":207},[92,131819,131784],{"class":1942},[92,131821,148],{"class":102},[92,131823,131789],{"class":207},[92,131825,131792],{"class":102},[92,131827,341],{"class":51282},[92,131829,51289],{"class":102},[63,131831,131833],{"id":131832},"_1027-收获","10.2.7 收获",[46,131835,131836,131839,131842,131845,131848],{},[49,131837,131838],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[49,131840,131841],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[49,131843,131844],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[49,131846,131847],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[49,131849,131850],{},"遗忘代码",[83,131852,131854],{"className":126533,"code":131853,"language":126535,"meta":10,"style":10},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[89,131855,131856,131878,131883,131893],{"__ignoreMap":10},[92,131857,131858,131860,131862,131864,131866,131868,131870,131872,131874,131876],{"class":94,"line":95},[92,131859,51593],{"class":51282},[92,131861,12415],{"class":102},[92,131863,38],{"class":51282},[92,131865,12415],{"class":102},[92,131867,29],{"class":51282},[92,131869,12415],{"class":102},[92,131871,1110],{"class":51282},[92,131873,12415],{"class":102},[92,131875,49],{"class":51282},[92,131877,15552],{"class":102},[92,131879,131880],{"class":94,"line":11},[92,131881,131882],{"class":161},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[92,131884,131885,131887,131889,131891],{"class":94,"line":1158},[92,131886,128149],{"class":151},[92,131888,51419],{"class":102},[92,131890,60851],{"class":151},[92,131892,1269],{"class":102},[92,131894,131895],{"class":94,"line":1173},[92,131896,1544],{"class":102},[46,131898,131899],{"start":1193},[49,131900,131901],{},"html引css的程序",[83,131903,131904],{"className":126533,"code":131853,"language":126535,"meta":10,"style":10},[89,131905,131906,131928,131932,131942],{"__ignoreMap":10},[92,131907,131908,131910,131912,131914,131916,131918,131920,131922,131924,131926],{"class":94,"line":95},[92,131909,51593],{"class":51282},[92,131911,12415],{"class":102},[92,131913,38],{"class":51282},[92,131915,12415],{"class":102},[92,131917,29],{"class":51282},[92,131919,12415],{"class":102},[92,131921,1110],{"class":51282},[92,131923,12415],{"class":102},[92,131925,49],{"class":51282},[92,131927,15552],{"class":102},[92,131929,131930],{"class":94,"line":11},[92,131931,131882],{"class":161},[92,131933,131934,131936,131938,131940],{"class":94,"line":1158},[92,131935,128149],{"class":151},[92,131937,51419],{"class":102},[92,131939,60851],{"class":151},[92,131941,1269],{"class":102},[92,131943,131944],{"class":94,"line":1173},[92,131945,1544],{"class":102},[46,131947,131948,131951,131954,131957,131960],{"start":1199},[49,131949,131950],{},"浮动的盒子不会有外边距合并问题",[49,131952,131953],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[49,131955,131956],{},"ctrl+g快速定位行；shift+alt多个光标",[49,131958,131959],{},"学习上方各个模块的选择器起名方法，以后就这样用",[49,131961,131962],{},"在写选择器时尽量写全一些，例如",[83,131964,131966],{"className":126533,"code":131965,"language":126535,"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,131967,131968,131973,131989,131994,132009,132014,132029,132034,132049,132054],{"__ignoreMap":10},[92,131969,131970],{"class":94,"line":95},[92,131971,131972],{"class":161},"\u002F* 静态定位（默认） *\u002F\n",[92,131974,131975,131978,131980,131982,131984,131987],{"class":94,"line":11},[92,131976,131977],{"class":1942},".static",[92,131979,79789],{"class":102},[92,131981,128893],{"class":151},[92,131983,51419],{"class":102},[92,131985,131986],{"class":151},"static",[92,131988,129463],{"class":102},[92,131990,131991],{"class":94,"line":1158},[92,131992,131993],{"class":161},"\u002F* 相对定位 *\u002F\n",[92,131995,131996,131999,132001,132003,132005,132007],{"class":94,"line":1173},[92,131997,131998],{"class":1942},".relative",[92,132000,79789],{"class":102},[92,132002,128893],{"class":151},[92,132004,51419],{"class":102},[92,132006,54746],{"class":151},[92,132008,129463],{"class":102},[92,132010,132011],{"class":94,"line":1179},[92,132012,132013],{"class":161},"\u002F* 绝对定位 *\u002F\n",[92,132015,132016,132019,132021,132023,132025,132027],{"class":94,"line":1193},[92,132017,132018],{"class":1942},".absolute",[92,132020,79789],{"class":102},[92,132022,128893],{"class":151},[92,132024,51419],{"class":102},[92,132026,54813],{"class":151},[92,132028,129463],{"class":102},[92,132030,132031],{"class":94,"line":1199},[92,132032,132033],{"class":161},"\u002F* 固定定位 *\u002F\n",[92,132035,132036,132039,132041,132043,132045,132047],{"class":94,"line":1290},[92,132037,132038],{"class":1942},".fixed",[92,132040,79789],{"class":102},[92,132042,128893],{"class":151},[92,132044,51419],{"class":102},[92,132046,86215],{"class":151},[92,132048,129463],{"class":102},[92,132050,132051],{"class":94,"line":1296},[92,132052,132053],{"class":161},"\u002F* 粘性定位 *\u002F\n",[92,132055,132056,132059,132061,132063,132065,132068],{"class":94,"line":1308},[92,132057,132058],{"class":1942},".sticky",[92,132060,79789],{"class":102},[92,132062,128893],{"class":151},[92,132064,51419],{"class":102},[92,132066,132067],{"class":151},"sticky",[92,132069,129463],{"class":102},[46,132071,132072,132075],{"start":1596},[49,132073,132074],{},"一定要用好注释",[49,132076,132077],{},"浮动的盒子不会有外边距合并的问题",[5106,132079,131421],{},{"title":10,"searchDepth":11,"depth":11,"links":132081},[132082,132083],{"id":131458,"depth":11,"text":131459},{"id":131522,"depth":11,"text":131523,"children":132084},[132085,132086,132087,132088,132089,132090,132091],{"id":131526,"depth":1158,"text":131527},{"id":131632,"depth":1158,"text":131633},{"id":131668,"depth":1158,"text":131669},{"id":131689,"depth":1158,"text":131690},{"id":131724,"depth":1158,"text":131725},{"id":131757,"depth":1158,"text":131758},{"id":131832,"depth":1158,"text":131833},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131450,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132098,"title":132099,"body":132100,"description":23357,"extension":14,"meta":133586,"navigation":17,"path":133587,"seo":133588,"stem":133589,"__hash__":133590},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132101,"toc":133578},[132102,132105,132109,132113,132124,132128,132145,132189,132222,132225,132242,132245,132248,132292,132296,132300,132303,132306,132310,132313,132324,132387,132428,132431,132446,132500,132508,132511,132522,132576,132602,132605,132618,132672,132704,132758,132781,132835,132838,132841,132848,132902,132923,132977,132980,132983,133068,133076,133133,133156,133160,133163,133181,133185,133204,133258,133296,133300,133303,133306,133328,133332,133340,133343,133348,133359,133362,133366,133380,133424,133427,133431,133434,133439,133465,133470,133547,133550,133554,133557,133560,133563,133566,133569,133572,133575],[29,132103,132099],{"id":132104},"_11-传统布局与定位体系",[33,132106,132108],{"id":132107},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[63,132110,132112],{"id":132111},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1110,132114,132115,132118,132121],{},[49,132116,132117],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[49,132119,132120],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[49,132122,132123],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[63,132125,132127],{"id":132126},"_1112-浮动","11.1.2 浮动",[1110,132129,132130,132133,132136,132139,132142],{},[49,132131,132132],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[49,132134,132135],{},"浮动可以改变元素标签默认的排列方式",[49,132137,132138],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[49,132140,132141],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[49,132143,132144],{},"在使用行内块转换时盒子之间是有空隙的",[83,132146,132147],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,132148,132149,132155,132165,132169,132175,132185],{"__ignoreMap":10},[92,132150,132151,132153],{"class":94,"line":95},[92,132152,131006],{"class":1942},[92,132154,15552],{"class":102},[92,132156,132157,132159,132161,132163],{"class":94,"line":11},[92,132158,131013],{"class":151},[92,132160,51419],{"class":102},[92,132162,23717],{"class":151},[92,132164,1269],{"class":102},[92,132166,132167],{"class":94,"line":1158},[92,132168,1544],{"class":102},[92,132170,132171,132173],{"class":94,"line":1173},[92,132172,131028],{"class":1942},[92,132174,15552],{"class":102},[92,132176,132177,132179,132181,132183],{"class":94,"line":1179},[92,132178,131013],{"class":151},[92,132180,51419],{"class":102},[92,132182,72504],{"class":151},[92,132184,1269],{"class":102},[92,132186,132187],{"class":94,"line":1193},[92,132188,1544],{"class":102},[240,132190,132191,132199],{},[243,132192,132193],{},[246,132194,132195,132197],{},[249,132196,126997],{"align":23717},[249,132198,27471],{"align":23717},[287,132200,132201,132208,132215],{},[246,132202,132203,132205],{},[292,132204,54719],{"align":23717},[292,132206,132207],{"align":23717},"元素不浮动（默认值）",[246,132209,132210,132212],{},[292,132211,23717],{"align":23717},[292,132213,132214],{"align":23717},"元素向左浮动",[246,132216,132217,132219],{},[292,132218,72504],{"align":23717},[292,132220,132221],{"align":23717},"元素向右浮动",[38,132223,132224],{},"浮动重点：",[1110,132226,132227,132230,132233,132236,132239],{},[49,132228,132229],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[49,132231,132232],{},"浮动的元素会一行内显示并且元素顶部对齐",[49,132234,132235],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[49,132237,132238],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[49,132240,132241],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[38,132243,132244],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[38,132246,132247],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[83,132249,132250],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,132251,132252,132258,132268,132272,132278,132288],{"__ignoreMap":10},[92,132253,132254,132256],{"class":94,"line":95},[92,132255,131006],{"class":1942},[92,132257,15552],{"class":102},[92,132259,132260,132262,132264,132266],{"class":94,"line":11},[92,132261,131013],{"class":151},[92,132263,51419],{"class":102},[92,132265,23717],{"class":151},[92,132267,1269],{"class":102},[92,132269,132270],{"class":94,"line":1158},[92,132271,1544],{"class":102},[92,132273,132274,132276],{"class":94,"line":1173},[92,132275,131028],{"class":1942},[92,132277,15552],{"class":102},[92,132279,132280,132282,132284,132286],{"class":94,"line":1179},[92,132281,131013],{"class":151},[92,132283,51419],{"class":102},[92,132285,72504],{"class":151},[92,132287,1269],{"class":102},[92,132289,132290],{"class":94,"line":1193},[92,132291,1544],{"class":102},[63,132293,132295],{"id":132294},"_1113-定位","11.1.3 定位",[21978,132297,132299],{"id":132298},"_11131-使用场景","11.1.3.1 使用场景",[38,132301,132302],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[38,132304,132305],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21978,132307,132309],{"id":132308},"_11132-定位组成","11.1.3.2 定位组成",[38,132311,132312],{},"定位 = 定位模式 + 边偏移",[46,132314,132315],{},[49,132316,132317,132320,132321],{},[252,132318,132319],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[252,132322,132323],{},"定位模式",[83,132325,132327],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[89,132328,132329,132335,132349,132366,132383],{"__ignoreMap":10},[92,132330,132331,132333],{"class":94,"line":95},[92,132332,130381],{"class":1942},[92,132334,15552],{"class":102},[92,132336,132337,132340,132342,132344,132346],{"class":94,"line":11},[92,132338,132339],{"class":151},"  position",[92,132341,51419],{"class":102},[92,132343,54746],{"class":151},[92,132345,130396],{"class":102},[92,132347,132348],{"class":161},"\u002F* 定位模式 *\u002F\n",[92,132350,132351,132354,132356,132358,132360,132363],{"class":94,"line":1158},[92,132352,132353],{"class":151},"  top",[92,132355,51419],{"class":102},[92,132357,549],{"class":151},[92,132359,51474],{"class":98},[92,132361,132362],{"class":102},";           ",[92,132364,132365],{"class":161},"\u002F* 边偏移：上 *\u002F\n",[92,132367,132368,132371,132373,132375,132377,132380],{"class":94,"line":1173},[92,132369,132370],{"class":151},"  left",[92,132372,51419],{"class":102},[92,132374,803],{"class":151},[92,132376,51474],{"class":98},[92,132378,132379],{"class":102},";          ",[92,132381,132382],{"class":161},"\u002F* 边偏移：左 *\u002F\n",[92,132384,132385],{"class":94,"line":1179},[92,132386,1544],{"class":102},[240,132388,132389,132398],{},[243,132390,132391],{},[246,132392,132393,132395],{},[249,132394,255],{"align":23717},[249,132396,132397],{"align":23717},"语义",[287,132399,132400,132407,132414,132421],{},[246,132401,132402,132404],{},[292,132403,131986],{"align":23717},[292,132405,132406],{"align":23717},"静态定位",[246,132408,132409,132411],{},[292,132410,54746],{"align":23717},[292,132412,132413],{"align":23717},"相对定位",[246,132415,132416,132418],{},[292,132417,54813],{"align":23717},[292,132419,132420],{"align":23717},"绝对定位",[246,132422,132423,132425],{},[292,132424,86215],{"align":23717},[292,132426,132427],{"align":23717},"固定定位",[38,132429,132430],{},"（1）静态定位：",[1110,132432,132433,132444],{},[49,132434,132435,132436,132439,132440,132443],{},"静态定位是元素的 ",[252,132437,132438],{},"默认定位方式"," ， ",[252,132441,132442],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[49,132445,5161],{},[83,132447,132448],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132449,132450,132456,132468,132482,132496],{"__ignoreMap":10},[92,132451,132452,132454],{"class":94,"line":95},[92,132453,130381],{"class":1942},[92,132455,15552],{"class":102},[92,132457,132458,132460,132462,132464,132466],{"class":94,"line":11},[92,132459,132339],{"class":151},[92,132461,51419],{"class":102},[92,132463,54746],{"class":151},[92,132465,130396],{"class":102},[92,132467,132348],{"class":161},[92,132469,132470,132472,132474,132476,132478,132480],{"class":94,"line":1158},[92,132471,132353],{"class":151},[92,132473,51419],{"class":102},[92,132475,549],{"class":151},[92,132477,51474],{"class":98},[92,132479,132362],{"class":102},[92,132481,132365],{"class":161},[92,132483,132484,132486,132488,132490,132492,132494],{"class":94,"line":1173},[92,132485,132370],{"class":151},[92,132487,51419],{"class":102},[92,132489,803],{"class":151},[92,132491,51474],{"class":98},[92,132493,132379],{"class":102},[92,132495,132382],{"class":161},[92,132497,132498],{"class":94,"line":1179},[92,132499,1544],{"class":102},[1110,132501,132502,132505],{},[49,132503,132504],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[49,132506,132507],{},"静态定位在布局时我们几乎不用的",[38,132509,132510],{},"（2）相对定位",[1110,132512,132513,132520],{},[49,132514,132515,132516,132519],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[252,132517,132518],{},"原来的位置"," 来说的（自恋型）",[49,132521,5161],{},[83,132523,132524],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132525,132526,132532,132544,132558,132572],{"__ignoreMap":10},[92,132527,132528,132530],{"class":94,"line":95},[92,132529,130381],{"class":1942},[92,132531,15552],{"class":102},[92,132533,132534,132536,132538,132540,132542],{"class":94,"line":11},[92,132535,132339],{"class":151},[92,132537,51419],{"class":102},[92,132539,54746],{"class":151},[92,132541,130396],{"class":102},[92,132543,132348],{"class":161},[92,132545,132546,132548,132550,132552,132554,132556],{"class":94,"line":1158},[92,132547,132353],{"class":151},[92,132549,51419],{"class":102},[92,132551,549],{"class":151},[92,132553,51474],{"class":98},[92,132555,132362],{"class":102},[92,132557,132365],{"class":161},[92,132559,132560,132562,132564,132566,132568,132570],{"class":94,"line":1173},[92,132561,132370],{"class":151},[92,132563,51419],{"class":102},[92,132565,803],{"class":151},[92,132567,51474],{"class":98},[92,132569,132379],{"class":102},[92,132571,132382],{"class":161},[92,132573,132574],{"class":94,"line":1179},[92,132575,1544],{"class":102},[1110,132577,132578],{},[49,132579,132580,132581,132583,132584,132586,132587,132590,132591,132594,132595,132597,132598,132601],{},"相对定位的特点：",[53698,132582],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53698,132585],{},"  ② ",[252,132588,132589],{},"原来"," 在标准流的 ",[252,132592,132593],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53698,132596],{},"  ③因此， ",[252,132599,132600],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[38,132603,132604],{},"（3）绝对定位",[1110,132606,132607,132616],{},[49,132608,132609,132611,132612,132615],{},[252,132610,132420],{}," 是元素在移动位置的时候，是相对于它 ",[252,132613,132614],{},"祖先元素"," 来说的（拼爹型）",[49,132617,5161],{},[83,132619,132620],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132621,132622,132628,132640,132654,132668],{"__ignoreMap":10},[92,132623,132624,132626],{"class":94,"line":95},[92,132625,130381],{"class":1942},[92,132627,15552],{"class":102},[92,132629,132630,132632,132634,132636,132638],{"class":94,"line":11},[92,132631,132339],{"class":151},[92,132633,51419],{"class":102},[92,132635,54746],{"class":151},[92,132637,130396],{"class":102},[92,132639,132348],{"class":161},[92,132641,132642,132644,132646,132648,132650,132652],{"class":94,"line":1158},[92,132643,132353],{"class":151},[92,132645,51419],{"class":102},[92,132647,549],{"class":151},[92,132649,51474],{"class":98},[92,132651,132362],{"class":102},[92,132653,132365],{"class":161},[92,132655,132656,132658,132660,132662,132664,132666],{"class":94,"line":1173},[92,132657,132370],{"class":151},[92,132659,51419],{"class":102},[92,132661,803],{"class":151},[92,132663,51474],{"class":98},[92,132665,132379],{"class":102},[92,132667,132382],{"class":161},[92,132669,132670],{"class":94,"line":1179},[92,132671,1544],{"class":102},[1110,132673,132674,132689,132698,132701],{},[49,132675,132676,132677,132679,132680,132682,132683,132685,132686,132688],{},"绝对定位的特点：",[53698,132678],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53698,132681],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53698,132684],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53698,132687],{},"  (4)固定定位",[49,132690,132691,132693,132694,132697],{},[252,132692,132427],{}," 是元素 ",[252,132695,132696],{},"固定于浏览器可视区的位置"," 。（认死理型）",[49,132699,132700],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[49,132702,132703],{},"语法:",[83,132705,132706],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132707,132708,132714,132726,132740,132754],{"__ignoreMap":10},[92,132709,132710,132712],{"class":94,"line":95},[92,132711,130381],{"class":1942},[92,132713,15552],{"class":102},[92,132715,132716,132718,132720,132722,132724],{"class":94,"line":11},[92,132717,132339],{"class":151},[92,132719,51419],{"class":102},[92,132721,54746],{"class":151},[92,132723,130396],{"class":102},[92,132725,132348],{"class":161},[92,132727,132728,132730,132732,132734,132736,132738],{"class":94,"line":1158},[92,132729,132353],{"class":151},[92,132731,51419],{"class":102},[92,132733,549],{"class":151},[92,132735,51474],{"class":98},[92,132737,132362],{"class":102},[92,132739,132365],{"class":161},[92,132741,132742,132744,132746,132748,132750,132752],{"class":94,"line":1173},[92,132743,132370],{"class":151},[92,132745,51419],{"class":102},[92,132747,803],{"class":151},[92,132749,51474],{"class":98},[92,132751,132379],{"class":102},[92,132753,132382],{"class":161},[92,132755,132756],{"class":94,"line":1179},[92,132757,1544],{"class":102},[1110,132759,132760,132769],{},[49,132761,132762,132763,132765,132766,132768],{},"特点:",[53698,132764],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53698,132767],{},"  ②固定定位不再占有原先的位置,完全脱标",[49,132770,132771,132772,132774,132775,132777,132778,132780],{},"固定在版心位置的方法:",[53698,132773],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53698,132776],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53698,132779],{},"  实例：",[83,132782,132783],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132784,132785,132791,132803,132817,132831],{"__ignoreMap":10},[92,132786,132787,132789],{"class":94,"line":95},[92,132788,130381],{"class":1942},[92,132790,15552],{"class":102},[92,132792,132793,132795,132797,132799,132801],{"class":94,"line":11},[92,132794,132339],{"class":151},[92,132796,51419],{"class":102},[92,132798,54746],{"class":151},[92,132800,130396],{"class":102},[92,132802,132348],{"class":161},[92,132804,132805,132807,132809,132811,132813,132815],{"class":94,"line":1158},[92,132806,132353],{"class":151},[92,132808,51419],{"class":102},[92,132810,549],{"class":151},[92,132812,51474],{"class":98},[92,132814,132362],{"class":102},[92,132816,132365],{"class":161},[92,132818,132819,132821,132823,132825,132827,132829],{"class":94,"line":1173},[92,132820,132370],{"class":151},[92,132822,51419],{"class":102},[92,132824,803],{"class":151},[92,132826,51474],{"class":98},[92,132828,132379],{"class":102},[92,132830,132382],{"class":161},[92,132832,132833],{"class":94,"line":1179},[92,132834,1544],{"class":102},[1441,132836],{"style":126389,"src":132837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[38,132839,132840],{},"(5)粘性定位",[1110,132842,132843,132846],{},[49,132844,132845],{},"粘性定位可以被认为是相对定位和固定定位的混合",[49,132847,5161],{},[83,132849,132850],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132851,132852,132858,132870,132884,132898],{"__ignoreMap":10},[92,132853,132854,132856],{"class":94,"line":95},[92,132855,130381],{"class":1942},[92,132857,15552],{"class":102},[92,132859,132860,132862,132864,132866,132868],{"class":94,"line":11},[92,132861,132339],{"class":151},[92,132863,51419],{"class":102},[92,132865,54746],{"class":151},[92,132867,130396],{"class":102},[92,132869,132348],{"class":161},[92,132871,132872,132874,132876,132878,132880,132882],{"class":94,"line":1158},[92,132873,132353],{"class":151},[92,132875,51419],{"class":102},[92,132877,549],{"class":151},[92,132879,51474],{"class":98},[92,132881,132362],{"class":102},[92,132883,132365],{"class":161},[92,132885,132886,132888,132890,132892,132894,132896],{"class":94,"line":1173},[92,132887,132370],{"class":151},[92,132889,51419],{"class":102},[92,132891,803],{"class":151},[92,132893,51474],{"class":98},[92,132895,132379],{"class":102},[92,132897,132382],{"class":161},[92,132899,132900],{"class":94,"line":1179},[92,132901,1544],{"class":102},[1110,132903,132904],{},[49,132905,132906,132907,132909,132910,132912,132913,132915,132916,132919,132920,132922],{},"粘性定位的特点：",[53698,132908],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53698,132911],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53698,132914],{},"  ③必须添加 top 、left、right、bottom ",[252,132917,132918],{},"其中一个"," 才有效",[53698,132921],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[83,132924,132925],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,132926,132927,132933,132945,132959,132973],{"__ignoreMap":10},[92,132928,132929,132931],{"class":94,"line":95},[92,132930,130381],{"class":1942},[92,132932,15552],{"class":102},[92,132934,132935,132937,132939,132941,132943],{"class":94,"line":11},[92,132936,132339],{"class":151},[92,132938,51419],{"class":102},[92,132940,54746],{"class":151},[92,132942,130396],{"class":102},[92,132944,132348],{"class":161},[92,132946,132947,132949,132951,132953,132955,132957],{"class":94,"line":1158},[92,132948,132353],{"class":151},[92,132950,51419],{"class":102},[92,132952,549],{"class":151},[92,132954,51474],{"class":98},[92,132956,132362],{"class":102},[92,132958,132365],{"class":161},[92,132960,132961,132963,132965,132967,132969,132971],{"class":94,"line":1173},[92,132962,132370],{"class":151},[92,132964,51419],{"class":102},[92,132966,803],{"class":151},[92,132968,51474],{"class":98},[92,132970,132379],{"class":102},[92,132972,132382],{"class":161},[92,132974,132975],{"class":94,"line":1179},[92,132976,1544],{"class":102},[1441,132978],{"style":126389,"src":132979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[38,132981,132982],{},"(6)总结",[240,132984,132985,133000],{},[243,132986,132987],{},[246,132988,132989,132991,132994,132997],{},[249,132990,132323],{"align":23717},[249,132992,132993],{"align":23717},"是否脱标",[249,132995,132996],{"align":23717},"移动位置",[249,132998,132999],{"align":23717},"是否常用",[287,133001,133002,133015,133029,133043,133056],{},[246,133003,133004,133007,133009,133012],{},[292,133005,133006],{"align":23717},"Static 静态定位",[292,133008,104659],{"align":23717},[292,133010,133011],{"align":23717},"不能使用边偏移",[292,133013,133014],{"align":23717},"很少",[246,133016,133017,133020,133023,133026],{},[292,133018,133019],{"align":23717},"Relative 相对定位",[292,133021,133022],{"align":23717},"否(占有位置)",[292,133024,133025],{"align":23717},"相对于自身位置移动",[292,133027,133028],{"align":23717},"基本单独使用",[246,133030,133031,133034,133037,133040],{},[292,133032,133033],{"align":23717},"Absolute 绝对定位",[292,133035,133036],{"align":23717},"是(不占有位置)",[292,133038,133039],{"align":23717},"带有定位的父级",[292,133041,133042],{"align":23717},"要和定位父级元素搭配使用",[246,133044,133045,133048,133050,133053],{},[292,133046,133047],{"align":23717},"Fixed 固定定位",[292,133049,133036],{"align":23717},[292,133051,133052],{"align":23717},"浏览器可视区",[292,133054,133055],{"align":23717},"单独使用,不需要父级",[246,133057,133058,133061,133063,133065],{},[292,133059,133060],{"align":23717},"Sticky 粘性定位",[292,133062,133022],{"align":23717},[292,133064,133052],{"align":23717},[292,133066,133067],{"align":23717},"当前阶段少",[46,133069,133070],{"start":11},[49,133071,133072,133075],{},[252,133073,133074],{},"边偏移"," 则决定了该元素的最终位置",[240,133077,133078,133089],{},[243,133079,133080],{},[246,133081,133082,133085,133087],{},[249,133083,133084],{"align":23717},"边偏移属性",[249,133086,27474],{"align":23717},[249,133088,27471],{"align":23717},[287,133090,133091,133102,133113,133123],{},[246,133092,133093,133096,133099],{},[292,133094,133095],{"align":23717},"top",[292,133097,133098],{"align":23717},"top: 80px;",[292,133100,133101],{"align":23717},"顶端偏移量，定义元素相对于父元素上边线的距离",[246,133103,133104,133107,133110],{},[292,133105,133106],{"align":23717},"bottom",[292,133108,133109],{"align":23717},"bottom: 80px ;",[292,133111,133112],{"align":23717},"底部偏移量，定义元素相对于其父元素下边线的距离",[246,133114,133115,133117,133120],{},[292,133116,23717],{"align":23717},[292,133118,133119],{"align":23717},"left: 80px ;",[292,133121,133122],{"align":23717},"左侧偏移量，定义元素相对于其父元素左边线的距离",[246,133124,133125,133127,133130],{},[292,133126,72504],{"align":23717},[292,133128,133129],{"align":23717},"right: 80px ;",[292,133131,133132],{"align":23717},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1110,133134,133135],{},[49,133136,9005,133137,133139,133140,133142,133143,133145,133146,133149,133150,133152,133153,133155],{},[53698,133138],{},"  ① ",[252,133141,133074],{}," 需要和 ",[252,133144,132323],{}," 联合使用， ",[252,133147,133148],{},"单独使用无效"," ；",[53698,133151],{},"  ②top和bottom不要同时使用",[53698,133154],{},"  ③left和right不要同时使用",[21978,133157,133159],{"id":133158},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[38,133161,133162],{},"子级是绝对定位的话，父级要用相对定位",[1110,133164,133165,133168,133171,133174],{},[49,133166,133167],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[49,133169,133170],{},"父盒子需要加定位限制子盒子在父盒子内显示",[49,133172,133173],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[49,133175,133176,133177,133180],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[252,133178,133179],{},"子绝父绝"," 也会遇到",[21978,133182,133184],{"id":133183},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1110,133186,133187,133202],{},[49,133188,133189,133190,133193,133194,133197,133198,133201],{},"在使用 ",[252,133191,133192],{},"定位"," 布局时，可能会 ",[252,133195,133196],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[252,133199,133200],{},"z-index"," 来控制盒子的前后次序 (z轴)",[49,133203,5161],{},[83,133205,133206],{"className":126533,"code":132326,"language":126535,"meta":10,"style":10},[89,133207,133208,133214,133226,133240,133254],{"__ignoreMap":10},[92,133209,133210,133212],{"class":94,"line":95},[92,133211,130381],{"class":1942},[92,133213,15552],{"class":102},[92,133215,133216,133218,133220,133222,133224],{"class":94,"line":11},[92,133217,132339],{"class":151},[92,133219,51419],{"class":102},[92,133221,54746],{"class":151},[92,133223,130396],{"class":102},[92,133225,132348],{"class":161},[92,133227,133228,133230,133232,133234,133236,133238],{"class":94,"line":1158},[92,133229,132353],{"class":151},[92,133231,51419],{"class":102},[92,133233,549],{"class":151},[92,133235,51474],{"class":98},[92,133237,132362],{"class":102},[92,133239,132365],{"class":161},[92,133241,133242,133244,133246,133248,133250,133252],{"class":94,"line":1173},[92,133243,132370],{"class":151},[92,133245,51419],{"class":102},[92,133247,803],{"class":151},[92,133249,51474],{"class":98},[92,133251,132379],{"class":102},[92,133253,132382],{"class":161},[92,133255,133256],{"class":94,"line":1179},[92,133257,1544],{"class":102},[1110,133259,133260],{},[49,133261,133262,133263,133139,133265,133267,133268,127696,133271,82521,133274,133276,133277,133279,133280,133283,133284,133149,133287,133289,133290,133293,133295],{},"z-index的特性",[53698,133264],{},[252,133266,126997],{}," ： ",[252,133269,133270],{},"正整数",[252,133272,133273],{},"负整数",[252,133275,294],{}," ，默认值是 0，数值越大，盒子越靠上；",[53698,133278],{},"  ②如果 ",[252,133281,133282],{},"属性值相同"," ，则按照书写顺序， ",[252,133285,133286],{},"后来居上",[53698,133288],{},"  ③数字后面 ",[252,133291,133292],{},"不能加单位",[53698,133294],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21978,133297,133299],{"id":133298},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[38,133301,133302],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[38,133304,133305],{},"方法:",[1110,133307,133308,133318],{},[49,133309,133310,133311,133314,133315],{},"left: 50%; 让 ",[252,133312,133313],{},"盒子的左侧"," 移动到 ",[252,133316,133317],{},"父级元素的水平中心位置",[49,133319,133320,133321,133324,133325],{},"margin-left: -100px; 让盒子 ",[252,133322,133323],{},"向左"," 移动 ",[252,133326,133327],{},"自身宽度的一半",[21978,133329,133331],{"id":133330},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[46,133333,133334,133337],{},[49,133335,133336],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[49,133338,133339],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[38,133341,133342],{},"也就是说绝对定位和固定定位和浮动类似",[46,133344,133345],{"start":1158},[49,133346,133347],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1110,133349,133350,133353,133356],{},[49,133351,133352],{},"可以用inline-block 转换为行内块",[49,133354,133355],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[49,133357,133358],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[38,133360,133361],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21978,133363,133365],{"id":133364},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[46,133367,133368,133371,133374,133377],{},[49,133369,133370],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[49,133372,133373],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[49,133375,133376],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[49,133378,133379],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[83,133381,133382],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,133383,133384,133390,133400,133404,133410,133420],{"__ignoreMap":10},[92,133385,133386,133388],{"class":94,"line":95},[92,133387,131006],{"class":1942},[92,133389,15552],{"class":102},[92,133391,133392,133394,133396,133398],{"class":94,"line":11},[92,133393,131013],{"class":151},[92,133395,51419],{"class":102},[92,133397,23717],{"class":151},[92,133399,1269],{"class":102},[92,133401,133402],{"class":94,"line":1158},[92,133403,1544],{"class":102},[92,133405,133406,133408],{"class":94,"line":1173},[92,133407,131028],{"class":1942},[92,133409,15552],{"class":102},[92,133411,133412,133414,133416,133418],{"class":94,"line":1179},[92,133413,131013],{"class":151},[92,133415,51419],{"class":102},[92,133417,72504],{"class":151},[92,133419,1269],{"class":102},[92,133421,133422],{"class":94,"line":1193},[92,133423,1544],{"class":102},[1441,133425],{"style":126389,"src":133426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21978,133428,133430],{"id":133429},"_11138-轮播图","11.1.3.8 轮播图",[1441,133432],{"style":126389,"src":133433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[46,133435,133436],{},[49,133437,133438],{},"制作顺序:",[1110,133440,133441,133444,133447,133456],{},[49,133442,133443],{},"大盒子我们类名为： tb-promo 淘宝广告",[49,133445,133446],{},"里面先放一张图片",[49,133448,133449,133450,133452,133453,133455],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53698,133451],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53698,133454],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[49,133457,133458,133459,133461,133462,133464],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53698,133460],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53698,133463],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[46,133466,133467],{"start":11},[49,133468,133469],{},"代码模块",[83,133471,133473],{"className":126533,"code":133472,"language":126535,"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,133474,133475,133480,133487,133497,133507,133517,133521,133526,133533,133543],{"__ignoreMap":10},[92,133476,133477],{"class":94,"line":95},[92,133478,133479],{"class":161},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[92,133481,133482,133485],{"class":94,"line":11},[92,133483,133484],{"class":1942},".son",[92,133486,15552],{"class":102},[92,133488,133489,133491,133493,133495],{"class":94,"line":1158},[92,133490,132339],{"class":151},[92,133492,51419],{"class":102},[92,133494,54813],{"class":151},[92,133496,1269],{"class":102},[92,133498,133499,133501,133503,133505],{"class":94,"line":1173},[92,133500,132353],{"class":151},[92,133502,51419],{"class":102},[92,133504,294],{"class":151},[92,133506,1269],{"class":102},[92,133508,133509,133511,133513,133515],{"class":94,"line":1179},[92,133510,132370],{"class":151},[92,133512,51419],{"class":102},[92,133514,294],{"class":151},[92,133516,1269],{"class":102},[92,133518,133519],{"class":94,"line":1193},[92,133520,1544],{"class":102},[92,133522,133523],{"class":94,"line":1199},[92,133524,133525],{"class":161},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[92,133527,133528,133531],{"class":94,"line":1290},[92,133529,133530],{"class":1942},".father",[92,133532,15552],{"class":102},[92,133534,133535,133537,133539,133541],{"class":94,"line":1296},[92,133536,132339],{"class":151},[92,133538,51419],{"class":102},[92,133540,54746],{"class":151},[92,133542,1269],{"class":102},[92,133544,133545],{"class":94,"line":1308},[92,133546,1544],{"class":102},[38,133548,133549],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[63,133551,133553],{"id":133552},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1441,133555],{"style":126389,"src":133556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[38,133558,133559],{},"✨ 黄金口诀：",[38,133561,133562],{},"\"TOP正下负上，LEFT正右负左\"",[38,133564,133565],{},"\"RIGHT正左负右，BOTTOM正上负下",[38,133567,133568],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[38,133570,133571],{},"✨ 简单记：",[38,133573,133574],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5106,133576,133577],{},"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":133579},[133580],{"id":132107,"depth":11,"text":132108,"children":133581},[133582,133583,133584,133585],{"id":132111,"depth":1158,"text":132112},{"id":132126,"depth":1158,"text":132127},{"id":132294,"depth":1158,"text":132295},{"id":133552,"depth":1158,"text":133553},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132099,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133592,"title":133593,"body":133594,"description":23357,"extension":14,"meta":135017,"navigation":17,"path":135018,"seo":135019,"stem":135020,"__hash__":135021},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133595,"toc":134996},[133596,133599,133603,133611,133615,133620,133628,133640,133644,133649,133657,133668,133672,133677,133718,133726,133730,133733,133736,133739,133833,133836,133930,133933,134027,134030,134033,134068,134071,134074,134104,134107,134110,134113,134116,134119,134122,134125,134195,134198,134202,134206,134247,134251,134257,134260,134263,134267,134270,134273,134276,134357,134360,134363,134367,134371,134374,134377,134380,134383,134386,134392,134401,134405,134424,134428,134438,134441,134444,134447,134450,134453,134456,134459,134462,134471,134475,134484,134487,134492,134545,134550,134716,134719,134722,134727,134730,134733,134736,134739,134744,134892,134895,134898,134903,134906,134911,134945,134948,134951,134955,134958,134965,134968,134971,134974,134977,134980,134983,134986,134990,134993],[29,133597,133593],{"id":133598},"_12-显示隐藏与图形资源",[33,133600,133602],{"id":133601},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1110,133604,133605,133608],{},[49,133606,133607],{},"目的:让一个元素在页面中消失或者显示出来",[49,133609,133610],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[63,133612,133614],{"id":133613},"_1211-display-显示","12.1.1 display 显示",[46,133616,133617],{},[49,133618,133619],{},"display 设置或检索对象是否及如何显示",[1110,133621,133622,133625],{},[49,133623,133624],{},"display: none;隐藏对象",[49,133626,133627],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[46,133629,133630,133637],{"start":11},[49,133631,133632,133633,133636],{},"特点： display 隐藏元素后， ",[252,133634,133635],{},"不再占"," 有原来的位置",[49,133638,133639],{},"在js中使用非常的广泛",[63,133641,133643],{"id":133642},"_1212-visibility可见性","12.1.2 visibility可见性",[46,133645,133646],{},[49,133647,133648],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1110,133650,133651,133654],{},[49,133652,133653],{},"visibility： visible；元素可见",[49,133655,133656],{},"visibility：hidden；元素隐藏",[46,133658,133659,133662,133665],{"start":11},[49,133660,133661],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[49,133663,133664],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[49,133666,133667],{},"隐藏后继续占有原有位置",[63,133669,133671],{"id":133670},"_1213-overflow溢出","12.1.3 overflow溢出",[1110,133673,133674],{},[49,133675,133676],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[240,133678,133679,133687],{},[243,133680,133681],{},[246,133682,133683,133685],{},[249,133684,126997],{"align":23717},[249,133686,27471],{"align":23717},[287,133688,133689,133697,133704,133711],{},[246,133690,133691,133694],{},[292,133692,133693],{"align":23717},"visible",[292,133695,133696],{"align":23717},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[246,133698,133699,133701],{},[292,133700,61696],{"align":23717},[292,133702,133703],{"align":23717},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[246,133705,133706,133708],{},[292,133707,128953],{"align":23717},[292,133709,133710],{"align":23717},"不管超出内容否，总是显示滚动条",[246,133712,133713,133715],{},[292,133714,72645],{"align":23717},[292,133716,133717],{"align":23717},"超出自动显示滚动条，不超出不显示滚动条",[1110,133719,133720,133723],{},[49,133721,133722],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[49,133724,133725],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[63,133727,133729],{"id":133728},"_1214-案例收获","12.1.4 案例收获",[1441,133731],{"style":126389,"src":133732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[38,133734,133735],{},"问题：没做出来动态效果，使用hover没实现",[38,133737,133738],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[83,133740,133741],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,133742,133743,133747,133761,133765,133779,133783,133797,133801,133815,133819],{"__ignoreMap":10},[92,133744,133745],{"class":94,"line":95},[92,133746,131972],{"class":161},[92,133748,133749,133751,133753,133755,133757,133759],{"class":94,"line":11},[92,133750,131977],{"class":1942},[92,133752,79789],{"class":102},[92,133754,128893],{"class":151},[92,133756,51419],{"class":102},[92,133758,131986],{"class":151},[92,133760,129463],{"class":102},[92,133762,133763],{"class":94,"line":1158},[92,133764,131993],{"class":161},[92,133766,133767,133769,133771,133773,133775,133777],{"class":94,"line":1173},[92,133768,131998],{"class":1942},[92,133770,79789],{"class":102},[92,133772,128893],{"class":151},[92,133774,51419],{"class":102},[92,133776,54746],{"class":151},[92,133778,129463],{"class":102},[92,133780,133781],{"class":94,"line":1179},[92,133782,132013],{"class":161},[92,133784,133785,133787,133789,133791,133793,133795],{"class":94,"line":1193},[92,133786,132018],{"class":1942},[92,133788,79789],{"class":102},[92,133790,128893],{"class":151},[92,133792,51419],{"class":102},[92,133794,54813],{"class":151},[92,133796,129463],{"class":102},[92,133798,133799],{"class":94,"line":1199},[92,133800,132033],{"class":161},[92,133802,133803,133805,133807,133809,133811,133813],{"class":94,"line":1290},[92,133804,132038],{"class":1942},[92,133806,79789],{"class":102},[92,133808,128893],{"class":151},[92,133810,51419],{"class":102},[92,133812,86215],{"class":151},[92,133814,129463],{"class":102},[92,133816,133817],{"class":94,"line":1296},[92,133818,132053],{"class":161},[92,133820,133821,133823,133825,133827,133829,133831],{"class":94,"line":1308},[92,133822,132058],{"class":1942},[92,133824,79789],{"class":102},[92,133826,128893],{"class":151},[92,133828,51419],{"class":102},[92,133830,132067],{"class":151},[92,133832,129463],{"class":102},[38,133834,133835],{},"完整代码：",[83,133837,133838],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,133839,133840,133844,133858,133862,133876,133880,133894,133898,133912,133916],{"__ignoreMap":10},[92,133841,133842],{"class":94,"line":95},[92,133843,131972],{"class":161},[92,133845,133846,133848,133850,133852,133854,133856],{"class":94,"line":11},[92,133847,131977],{"class":1942},[92,133849,79789],{"class":102},[92,133851,128893],{"class":151},[92,133853,51419],{"class":102},[92,133855,131986],{"class":151},[92,133857,129463],{"class":102},[92,133859,133860],{"class":94,"line":1158},[92,133861,131993],{"class":161},[92,133863,133864,133866,133868,133870,133872,133874],{"class":94,"line":1173},[92,133865,131998],{"class":1942},[92,133867,79789],{"class":102},[92,133869,128893],{"class":151},[92,133871,51419],{"class":102},[92,133873,54746],{"class":151},[92,133875,129463],{"class":102},[92,133877,133878],{"class":94,"line":1179},[92,133879,132013],{"class":161},[92,133881,133882,133884,133886,133888,133890,133892],{"class":94,"line":1193},[92,133883,132018],{"class":1942},[92,133885,79789],{"class":102},[92,133887,128893],{"class":151},[92,133889,51419],{"class":102},[92,133891,54813],{"class":151},[92,133893,129463],{"class":102},[92,133895,133896],{"class":94,"line":1199},[92,133897,132033],{"class":161},[92,133899,133900,133902,133904,133906,133908,133910],{"class":94,"line":1290},[92,133901,132038],{"class":1942},[92,133903,79789],{"class":102},[92,133905,128893],{"class":151},[92,133907,51419],{"class":102},[92,133909,86215],{"class":151},[92,133911,129463],{"class":102},[92,133913,133914],{"class":94,"line":1296},[92,133915,132053],{"class":161},[92,133917,133918,133920,133922,133924,133926,133928],{"class":94,"line":1308},[92,133919,132058],{"class":1942},[92,133921,79789],{"class":102},[92,133923,128893],{"class":151},[92,133925,51419],{"class":102},[92,133927,132067],{"class":151},[92,133929,129463],{"class":102},[38,133931,133932],{},"分布思路重点详解：",[83,133934,133935],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,133936,133937,133941,133955,133959,133973,133977,133991,133995,134009,134013],{"__ignoreMap":10},[92,133938,133939],{"class":94,"line":95},[92,133940,131972],{"class":161},[92,133942,133943,133945,133947,133949,133951,133953],{"class":94,"line":11},[92,133944,131977],{"class":1942},[92,133946,79789],{"class":102},[92,133948,128893],{"class":151},[92,133950,51419],{"class":102},[92,133952,131986],{"class":151},[92,133954,129463],{"class":102},[92,133956,133957],{"class":94,"line":1158},[92,133958,131993],{"class":161},[92,133960,133961,133963,133965,133967,133969,133971],{"class":94,"line":1173},[92,133962,131998],{"class":1942},[92,133964,79789],{"class":102},[92,133966,128893],{"class":151},[92,133968,51419],{"class":102},[92,133970,54746],{"class":151},[92,133972,129463],{"class":102},[92,133974,133975],{"class":94,"line":1179},[92,133976,132013],{"class":161},[92,133978,133979,133981,133983,133985,133987,133989],{"class":94,"line":1193},[92,133980,132018],{"class":1942},[92,133982,79789],{"class":102},[92,133984,128893],{"class":151},[92,133986,51419],{"class":102},[92,133988,54813],{"class":151},[92,133990,129463],{"class":102},[92,133992,133993],{"class":94,"line":1199},[92,133994,132033],{"class":161},[92,133996,133997,133999,134001,134003,134005,134007],{"class":94,"line":1290},[92,133998,132038],{"class":1942},[92,134000,79789],{"class":102},[92,134002,128893],{"class":151},[92,134004,51419],{"class":102},[92,134006,86215],{"class":151},[92,134008,129463],{"class":102},[92,134010,134011],{"class":94,"line":1296},[92,134012,132053],{"class":161},[92,134014,134015,134017,134019,134021,134023,134025],{"class":94,"line":1308},[92,134016,132058],{"class":1942},[92,134018,79789],{"class":102},[92,134020,128893],{"class":151},[92,134022,51419],{"class":102},[92,134024,132067],{"class":151},[92,134026,129463],{"class":102},[1441,134028],{"style":126389,"src":134029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[38,134031,134032],{},"图片太大，盒子太小，此时需要修改图片的大小",[83,134034,134036],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[89,134037,134038],{"__ignoreMap":10},[92,134039,134040,134042,134044,134046,134048,134051,134053,134055,134058,134061,134063,134066],{"class":94,"line":95},[92,134041,1013],{"class":102},[92,134043,1441],{"class":51282},[92,134045,55221],{"class":1942},[92,134047,148],{"class":102},[92,134049,134050],{"class":207},"\"images\u002Fpic.jpg\"",[92,134052,55229],{"class":1942},[92,134054,148],{"class":102},[92,134056,134057],{"class":207},"\"描述文字\"",[92,134059,134060],{"class":1942}," title",[92,134062,148],{"class":102},[92,134064,134065],{"class":207},"\"悬停提示\"",[92,134067,51289],{"class":102},[1441,134069],{"style":126389,"src":134070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[38,134072,134073],{},"制造遮罩层",[83,134075,134076],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,134077,134078],{"__ignoreMap":10},[92,134079,134080,134082,134084,134086,134088,134090,134092,134094,134096,134098,134100,134102],{"class":94,"line":95},[92,134081,1013],{"class":102},[92,134083,1441],{"class":51282},[92,134085,55221],{"class":1942},[92,134087,148],{"class":102},[92,134089,134050],{"class":207},[92,134091,55229],{"class":1942},[92,134093,148],{"class":102},[92,134095,134057],{"class":207},[92,134097,134060],{"class":1942},[92,134099,148],{"class":102},[92,134101,134065],{"class":207},[92,134103,51289],{"class":102},[38,134105,134106],{},"此时是这样的为标准流",[1441,134108],{"style":126389,"src":134109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[38,134111,134112],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[38,134114,134115],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[38,134117,134118],{},"让他在中间，用center(background-position)",[38,134120,134121],{},"将需要变的尽可能放到一个盒子中",[38,134123,134124],{},"放大盒子上内部盒子发生变化",[83,134126,134128],{"className":126533,"code":134127,"language":126535,"meta":10,"style":10},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[89,134129,134130,134136,134146,134150,134157,134167,134179,134191],{"__ignoreMap":10},[92,134131,134132,134134],{"class":94,"line":95},[92,134133,127600],{"class":1942},[92,134135,15552],{"class":102},[92,134137,134138,134140,134142,134144],{"class":94,"line":11},[92,134139,132339],{"class":151},[92,134141,51419],{"class":102},[92,134143,54746],{"class":151},[92,134145,1269],{"class":102},[92,134147,134148],{"class":94,"line":1158},[92,134149,1544],{"class":102},[92,134151,134152,134155],{"class":94,"line":1173},[92,134153,134154],{"class":1942},".child",[92,134156,15552],{"class":102},[92,134158,134159,134161,134163,134165],{"class":94,"line":1179},[92,134160,132339],{"class":151},[92,134162,51419],{"class":102},[92,134164,54813],{"class":151},[92,134166,1269],{"class":102},[92,134168,134169,134171,134173,134175,134177],{"class":94,"line":1193},[92,134170,132353],{"class":151},[92,134172,51419],{"class":102},[92,134174,759],{"class":151},[92,134176,431],{"class":98},[92,134178,1269],{"class":102},[92,134180,134181,134183,134185,134187,134189],{"class":94,"line":1199},[92,134182,132370],{"class":151},[92,134184,51419],{"class":102},[92,134186,759],{"class":151},[92,134188,431],{"class":98},[92,134190,1269],{"class":102},[92,134192,134193],{"class":94,"line":1290},[92,134194,1544],{"class":102},[38,134196,134197],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[33,134199,134201],{"id":134200},"_122-精灵图","12.2 精灵图",[63,134203,134205],{"id":134204},"_1221-理解","12.2.1 理解",[46,134207,134208,134226],{},[49,134209,134210,134211,132439,134214,134217,134218,134221,134222,134225],{},"目的： ",[252,134212,134213],{},"为了有效地减少服务器接收和发送请求的次数",[252,134215,134216],{},"提高"," 页面的 ",[252,134219,134220],{},"加载速度"," ，出现了 ",[252,134223,134224],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[49,134227,134228,134229,134231,134232,134234,134235,134237,134238,134240,134241,134243,134244,134246],{},"使用精灵图核心：",[53698,134230],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53698,134233],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53698,134236],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53698,134239],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53698,134242],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53698,134245],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[63,134248,134250],{"id":134249},"_1222-扒图","12.2.2 扒图",[83,134252,134255],{"className":134253,"code":134254,"language":5167},[5165],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[89,134256,134254],{"__ignoreMap":10},[1441,134258],{"style":126389,"src":134259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1441,134261],{"style":126389,"src":134262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[63,134264,134266],{"id":134265},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1441,134268],{"style":126389,"src":134269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[38,134271,134272],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1441,134274],{"style":126389,"src":134275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[83,134277,134279],{"className":126533,"code":134278,"language":126535,"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,134280,134281,134286,134293,134305,134317,134336,134353],{"__ignoreMap":10},[92,134282,134283],{"class":94,"line":95},[92,134284,134285],{"class":161},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[92,134287,134288,134291],{"class":94,"line":11},[92,134289,134290],{"class":1942},".icon",[92,134292,15552],{"class":102},[92,134294,134295,134297,134299,134301,134303],{"class":94,"line":1158},[92,134296,70550],{"class":151},[92,134298,51419],{"class":102},[92,134300,803],{"class":151},[92,134302,51474],{"class":98},[92,134304,1269],{"class":102},[92,134306,134307,134309,134311,134313,134315],{"class":94,"line":1173},[92,134308,70770],{"class":151},[92,134310,51419],{"class":102},[92,134312,803],{"class":151},[92,134314,51474],{"class":98},[92,134316,1269],{"class":102},[92,134318,134319,134321,134323,134325,134327,134330,134332,134334],{"class":94,"line":1179},[92,134320,70593],{"class":151},[92,134322,51419],{"class":102},[92,134324,61708],{"class":151},[92,134326,103],{"class":102},[92,134328,134329],{"class":5196},"sprites.png",[92,134331,13694],{"class":102},[92,134333,61718],{"class":151},[92,134335,1269],{"class":102},[92,134337,134338,134340,134342,134344,134346,134349,134351],{"class":94,"line":1193},[92,134339,128793],{"class":151},[92,134341,51419],{"class":102},[92,134343,51745],{"class":151},[92,134345,51474],{"class":98},[92,134347,134348],{"class":151}," -20",[92,134350,51474],{"class":98},[92,134352,1269],{"class":102},[92,134354,134355],{"class":94,"line":1199},[92,134356,1544],{"class":102},[1441,134358],{"style":126389,"src":134359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[38,134361,134362],{},"在前端中坐标轴的正方向是右和下",[33,134364,134366],{"id":134365},"_123-字体图标","12.3 字体图标",[63,134368,134370],{"id":134369},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[38,134372,134373],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[38,134375,134376],{},"精灵图是有诸多优点的，但是缺点很明显。",[38,134378,134379],{},"1.图片文件还是比较大的。",[38,134381,134382],{},"2.图片本身放大和缩小会失真。",[38,134384,134385],{},"3.一旦图片制作完毕想要更换非常复杂。",[38,134387,134388,134389,25722],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[252,134390,134391],{},"字体图标 iconfont",[38,134393,134394,134397,134398,28367],{},[252,134395,134396],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[252,134399,134400],{},"展示的是图标，本质属于字体",[63,134402,134404],{"id":134403},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1110,134406,134407,134412,134415,134418,134421],{},[49,134408,134409,134411],{},[252,134410,25858],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[49,134413,134414],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[49,134416,134417],{},"兼容性：几乎支持所有的浏览器，请放心使用",[49,134419,134420],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[49,134422,134423],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[63,134425,134427],{"id":134426},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1110,134429,134430],{},[49,134431,134432,134433],{},"icomoon字体库：",[341,134434,134437],{"href":134435,"rel":134436},"http:\u002F\u002Ficomoon.io\u002F",[23846],"http:\u002F\u002Ficomoon.io",[38,134439,134440],{},"进去之后点icomoon app",[1441,134442],{"style":126389,"src":134443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[38,134445,134446],{},"可以对其编辑：",[1441,134448],{"style":126389,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[38,134451,134452],{},"生成字体：",[1441,134454],{"style":126389,"src":134455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[38,134457,134458],{},"下载：",[1441,134460],{"style":126389,"src":134461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1110,134463,134464],{},[49,134465,134466,134467],{},"阿里iconfont字体库： ",[341,134468,134469],{"href":134469,"rel":134470},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23846],[63,134472,134474],{"id":134473},"_1234-字体图标的引入","12.3.4 字体图标的引入",[46,134476,134477],{},[49,134478,134479,134480,134483],{},"把下载包里面的 ",[252,134481,134482],{},"fonts"," 文件夹放入页面根目录下",[1441,134485],{"style":126389,"src":134486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[46,134488,134489],{"start":11},[49,134490,134491],{},"字体文件格式",[240,134493,134494,134503],{},[243,134495,134496],{},[246,134497,134498,134501],{},[249,134499,134500],{"align":23717},"格式",[249,134502,23721],{"align":23717},[287,134504,134505,134515,134525,134535],{},[246,134506,134507,134512],{},[292,134508,134509],{"align":23717},[252,134510,134511],{},".ttf",[292,134513,134514],{"align":23717},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[246,134516,134517,134522],{},[292,134518,134519],{"align":23717},[252,134520,134521],{},".woff",[292,134523,134524],{"align":23717},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[246,134526,134527,134532],{},[292,134528,134529],{"align":23717},[252,134530,134531],{},".eot",[292,134533,134534],{"align":23717},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[246,134536,134537,134542],{},[292,134538,134539],{"align":23717},[252,134540,134541],{},"svg",[292,134543,134544],{"align":23717},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[46,134546,134547],{"start":1158},[49,134548,134549],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[83,134551,134553],{"className":126533,"code":134552,"language":126535,"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,134554,134555,134560,134567,134579,134595,134620,134641,134661,134681,134685,134691,134701,134712],{"__ignoreMap":10},[92,134556,134557],{"class":94,"line":95},[92,134558,134559],{"class":161},"\u002F* 引入字体图标 *\u002F\n",[92,134561,134562,134565],{"class":94,"line":11},[92,134563,134564],{"class":98},"@font-face",[92,134566,15552],{"class":102},[92,134568,134569,134572,134574,134577],{"class":94,"line":1158},[92,134570,134571],{"class":151},"  font-family",[92,134573,51419],{"class":102},[92,134575,134576],{"class":207},"'icomoon'",[92,134578,1269],{"class":102},[92,134580,134581,134584,134586,134588,134590,134593],{"class":94,"line":1173},[92,134582,134583],{"class":151},"  src",[92,134585,51419],{"class":102},[92,134587,61708],{"class":151},[92,134589,103],{"class":102},[92,134591,134592],{"class":207},"'fonts\u002Ficomoon.eot'",[92,134594,2698],{"class":102},[92,134596,134597,134599,134601,134603,134605,134608,134610,134613,134615,134618],{"class":94,"line":1179},[92,134598,134583],{"class":151},[92,134600,51419],{"class":102},[92,134602,61708],{"class":151},[92,134604,103],{"class":102},[92,134606,134607],{"class":207},"'fonts\u002Ficomoon.eot?#iefix'",[92,134609,13694],{"class":102},[92,134611,134612],{"class":151},"format",[92,134614,103],{"class":102},[92,134616,134617],{"class":207},"'embedded-opentype'",[92,134619,38029],{"class":102},[92,134621,134622,134625,134627,134630,134632,134634,134636,134639],{"class":94,"line":1193},[92,134623,134624],{"class":151},"       url",[92,134626,103],{"class":102},[92,134628,134629],{"class":207},"'fonts\u002Ficomoon.woff'",[92,134631,13694],{"class":102},[92,134633,134612],{"class":151},[92,134635,103],{"class":102},[92,134637,134638],{"class":207},"'woff'",[92,134640,38029],{"class":102},[92,134642,134643,134645,134647,134650,134652,134654,134656,134659],{"class":94,"line":1199},[92,134644,134624],{"class":151},[92,134646,103],{"class":102},[92,134648,134649],{"class":207},"'fonts\u002Ficomoon.ttf'",[92,134651,13694],{"class":102},[92,134653,134612],{"class":151},[92,134655,103],{"class":102},[92,134657,134658],{"class":207},"'truetype'",[92,134660,38029],{"class":102},[92,134662,134663,134665,134667,134670,134672,134674,134676,134679],{"class":94,"line":1290},[92,134664,134624],{"class":151},[92,134666,103],{"class":102},[92,134668,134669],{"class":207},"'fonts\u002Ficomoon.svg#icomoon'",[92,134671,13694],{"class":102},[92,134673,134612],{"class":151},[92,134675,103],{"class":102},[92,134677,134678],{"class":207},"'svg'",[92,134680,2698],{"class":102},[92,134682,134683],{"class":94,"line":1296},[92,134684,1544],{"class":102},[92,134686,134687,134689],{"class":94,"line":1308},[92,134688,134290],{"class":1942},[92,134690,15552],{"class":102},[92,134692,134693,134695,134697,134699],{"class":94,"line":1591},[92,134694,134571],{"class":151},[92,134696,51419],{"class":102},[92,134698,134576],{"class":207},[92,134700,1269],{"class":102},[92,134702,134703,134706,134708,134710],{"class":94,"line":1596},[92,134704,134705],{"class":151},"  font-style",[92,134707,51419],{"class":102},[92,134709,63823],{"class":151},[92,134711,1269],{"class":102},[92,134713,134714],{"class":94,"line":1602},[92,134715,1544],{"class":102},[38,134717,134718],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1441,134720],{"style":126389,"src":134721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[46,134723,134724],{"start":1173},[49,134725,134726],{},"添加字体",[1441,134728],{"style":126389,"src":134729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[38,134731,134732],{},"复制：",[1441,134734],{"style":126389,"src":134735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[38,134737,134738],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[46,134740,134741],{"start":1179},[49,134742,134743],{},"代码展示：",[83,134745,134746],{"className":126533,"code":134552,"language":126535,"meta":10,"style":10},[89,134747,134748,134752,134758,134768,134782,134804,134822,134840,134858,134862,134868,134878,134888],{"__ignoreMap":10},[92,134749,134750],{"class":94,"line":95},[92,134751,134559],{"class":161},[92,134753,134754,134756],{"class":94,"line":11},[92,134755,134564],{"class":98},[92,134757,15552],{"class":102},[92,134759,134760,134762,134764,134766],{"class":94,"line":1158},[92,134761,134571],{"class":151},[92,134763,51419],{"class":102},[92,134765,134576],{"class":207},[92,134767,1269],{"class":102},[92,134769,134770,134772,134774,134776,134778,134780],{"class":94,"line":1173},[92,134771,134583],{"class":151},[92,134773,51419],{"class":102},[92,134775,61708],{"class":151},[92,134777,103],{"class":102},[92,134779,134592],{"class":207},[92,134781,2698],{"class":102},[92,134783,134784,134786,134788,134790,134792,134794,134796,134798,134800,134802],{"class":94,"line":1179},[92,134785,134583],{"class":151},[92,134787,51419],{"class":102},[92,134789,61708],{"class":151},[92,134791,103],{"class":102},[92,134793,134607],{"class":207},[92,134795,13694],{"class":102},[92,134797,134612],{"class":151},[92,134799,103],{"class":102},[92,134801,134617],{"class":207},[92,134803,38029],{"class":102},[92,134805,134806,134808,134810,134812,134814,134816,134818,134820],{"class":94,"line":1193},[92,134807,134624],{"class":151},[92,134809,103],{"class":102},[92,134811,134629],{"class":207},[92,134813,13694],{"class":102},[92,134815,134612],{"class":151},[92,134817,103],{"class":102},[92,134819,134638],{"class":207},[92,134821,38029],{"class":102},[92,134823,134824,134826,134828,134830,134832,134834,134836,134838],{"class":94,"line":1199},[92,134825,134624],{"class":151},[92,134827,103],{"class":102},[92,134829,134649],{"class":207},[92,134831,13694],{"class":102},[92,134833,134612],{"class":151},[92,134835,103],{"class":102},[92,134837,134658],{"class":207},[92,134839,38029],{"class":102},[92,134841,134842,134844,134846,134848,134850,134852,134854,134856],{"class":94,"line":1290},[92,134843,134624],{"class":151},[92,134845,103],{"class":102},[92,134847,134669],{"class":207},[92,134849,13694],{"class":102},[92,134851,134612],{"class":151},[92,134853,103],{"class":102},[92,134855,134678],{"class":207},[92,134857,2698],{"class":102},[92,134859,134860],{"class":94,"line":1296},[92,134861,1544],{"class":102},[92,134863,134864,134866],{"class":94,"line":1308},[92,134865,134290],{"class":1942},[92,134867,15552],{"class":102},[92,134869,134870,134872,134874,134876],{"class":94,"line":1591},[92,134871,134571],{"class":151},[92,134873,51419],{"class":102},[92,134875,134576],{"class":207},[92,134877,1269],{"class":102},[92,134879,134880,134882,134884,134886],{"class":94,"line":1596},[92,134881,134705],{"class":151},[92,134883,51419],{"class":102},[92,134885,63823],{"class":151},[92,134887,1269],{"class":102},[92,134889,134890],{"class":94,"line":1602},[92,134891,1544],{"class":102},[1441,134893],{"style":126389,"src":134894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[38,134896,134897],{},"更加细节展示：",[46,134899,134900],{},[49,134901,134902],{},"html 标签内添加小图标",[1441,134904],{"style":126389,"src":134905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[46,134907,134908],{"start":11},[49,134909,134910],{},"给标签定义字体",[83,134912,134913],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,134914,134915,134919,134933,134937],{"__ignoreMap":10},[92,134916,134917],{"class":94,"line":95},[92,134918,130644],{"class":161},[92,134920,134921,134923,134925,134927,134929,134931],{"class":94,"line":11},[92,134922,1013],{"class":102},[92,134924,51593],{"class":51282},[92,134926,53468],{"class":1942},[92,134928,148],{"class":102},[92,134930,130657],{"class":207},[92,134932,51289],{"class":102},[92,134934,134935],{"class":94,"line":1158},[92,134936,130664],{"class":102},[92,134938,134939,134941,134943],{"class":94,"line":1173},[92,134940,51767],{"class":102},[92,134942,51593],{"class":51282},[92,134944,51289],{"class":102},[38,134946,134947],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1441,134949],{"style":126389,"src":134950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[63,134952,134954],{"id":134953},"_1235-字体图标的追加","12.3.5 字体图标的追加",[38,134956,134957],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[38,134959,134960,134961,134964],{},"把压缩包里面的 ",[252,134962,134963],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[38,134966,134967],{},"打开网站，点下方：",[1441,134969],{"style":126389,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1441,134972],{"style":126389,"src":134973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1441,134975],{"style":126389,"src":134976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[38,134978,134979],{},"点yes重新加载",[38,134981,134982],{},"然后重复之前的操作就可以实现了",[38,134984,134985],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[63,134987,134989],{"id":134988},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1441,134991],{"style":126389,"src":134992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5106,134994,134995],{},"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":134997},[134998,135004,135009],{"id":133601,"depth":11,"text":133602,"children":134999},[135000,135001,135002,135003],{"id":133613,"depth":1158,"text":133614},{"id":133642,"depth":1158,"text":133643},{"id":133670,"depth":1158,"text":133671},{"id":133728,"depth":1158,"text":133729},{"id":134200,"depth":11,"text":134201,"children":135005},[135006,135007,135008],{"id":134204,"depth":1158,"text":134205},{"id":134249,"depth":1158,"text":134250},{"id":134265,"depth":1158,"text":134266},{"id":134365,"depth":11,"text":134366,"children":135010},[135011,135012,135013,135014,135015,135016],{"id":134369,"depth":1158,"text":134370},{"id":134403,"depth":1158,"text":134404},{"id":134426,"depth":1158,"text":134427},{"id":134473,"depth":1158,"text":134474},{"id":134953,"depth":1158,"text":134954},{"id":134988,"depth":1158,"text":134989},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133593,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135023,"title":135024,"body":135025,"description":23357,"extension":14,"meta":136252,"navigation":17,"path":136253,"seo":136254,"stem":136255,"__hash__":136256},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135026,"toc":136233},[135027,135030,135034,135037,135051,135119,135149,135152,135156,135160,135262,135309,135313,135316,135319,135353,135356,135359,135362,135365,135368,135371,135374,135376,135379,135382,135385,135388,135391,135394,135397,135425,135428,135432,135435,135442,135445,135448,135474,135477,135481,135484,135487,135494,135498,135501,135503,135535,135538,135541,135553,135559,135562,135565,135568,135570,135574,135577,135580,135583,135628,135632,135634,135637,135644,135686,135689,135693,135698,135712,135716,135719,135722,135725,135728,135731,135765,135768,135771,135825,135828,135831,135834,135837,135889,135892,135895,135944,135948,135950,135953,135956,135959,135962,135965,136023,136026,136032,136035,136038,136070,136073,136077,136081,136084,136116,136120,136123,136167,136171,136174,136177,136180,136183,136186,136189,136192,136194,136197,136199,136202,136205,136208,136211,136216,136219,136221,136224,136227,136230],[29,135028,135024],{"id":135029},"_13-界面样式与布局技巧",[33,135031,135033],{"id":135032},"_131-css三角","13.1 css三角",[38,135035,135036],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1110,135038,135039,135042,135045,135048],{},[49,135040,135041],{},"用css 边框可以模拟三角效果",[49,135043,135044],{},"宽度高度为0",[49,135046,135047],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[49,135049,135050],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[83,135052,135054],{"className":126533,"code":135053,"language":126535,"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,135055,135056,135061,135068,135078,135088,135104,135115],{"__ignoreMap":10},[92,135057,135058],{"class":94,"line":95},[92,135059,135060],{"class":161},"\u002F* CSS 实现三角形 *\u002F\n",[92,135062,135063,135066],{"class":94,"line":11},[92,135064,135065],{"class":1942},".triangle",[92,135067,15552],{"class":102},[92,135069,135070,135072,135074,135076],{"class":94,"line":1158},[92,135071,70550],{"class":151},[92,135073,51419],{"class":102},[92,135075,294],{"class":151},[92,135077,1269],{"class":102},[92,135079,135080,135082,135084,135086],{"class":94,"line":1173},[92,135081,70770],{"class":151},[92,135083,51419],{"class":102},[92,135085,294],{"class":151},[92,135087,1269],{"class":102},[92,135089,135090,135092,135094,135096,135098,135100,135102],{"class":94,"line":1179},[92,135091,70878],{"class":151},[92,135093,51419],{"class":102},[92,135095,549],{"class":151},[92,135097,51474],{"class":98},[92,135099,51503],{"class":151},[92,135101,63973],{"class":151},[92,135103,1269],{"class":102},[92,135105,135106,135109,135111,135113],{"class":94,"line":1193},[92,135107,135108],{"class":151},"  border-bottom-color",[92,135110,51419],{"class":102},[92,135112,62351],{"class":151},[92,135114,1269],{"class":102},[92,135116,135117],{"class":94,"line":1199},[92,135118,1544],{"class":102},[83,135120,135121],{"className":126533,"code":130690,"language":126535,"meta":10,"style":10},[89,135122,135123,135129,135145],{"__ignoreMap":10},[92,135124,135125,135127],{"class":94,"line":95},[92,135126,51593],{"class":51282},[92,135128,15552],{"class":102},[92,135130,135131,135133,135135,135137,135139,135141,135143],{"class":94,"line":11},[92,135132,70878],{"class":151},[92,135134,51419],{"class":102},[92,135136,320],{"class":151},[92,135138,51474],{"class":98},[92,135140,51503],{"class":151},[92,135142,129925],{"class":151},[92,135144,1269],{"class":102},[92,135146,135147],{"class":94,"line":1158},[92,135148,1544],{"class":102},[1441,135150],{"style":126389,"src":135151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[33,135153,135155],{"id":135154},"_132-css用户界面样式","13.2 css用户界面样式",[63,135157,135159],{"id":135158},"_1321-鼠标样式","13.2.1 鼠标样式",[83,135161,135163],{"className":126533,"code":135162,"language":126535,"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,135164,135165,135170,135189,135207,135226,135243],{"__ignoreMap":10},[92,135166,135167],{"class":94,"line":95},[92,135168,135169],{"class":161},"\u002F* 鼠标样式 *\u002F\n",[92,135171,135172,135174,135176,135179,135181,135183,135186],{"class":94,"line":11},[92,135173,51593],{"class":51282},[92,135175,79789],{"class":102},[92,135177,135178],{"class":151},"cursor",[92,135180,51419],{"class":102},[92,135182,62012],{"class":151},[92,135184,135185],{"class":102},"; }   ",[92,135187,135188],{"class":161},"\u002F* 手型 *\u002F\n",[92,135190,135191,135193,135195,135197,135199,135202,135204],{"class":94,"line":1158},[92,135192,51593],{"class":51282},[92,135194,79789],{"class":102},[92,135196,135178],{"class":151},[92,135198,51419],{"class":102},[92,135200,135201],{"class":151},"default",[92,135203,135185],{"class":102},[92,135205,135206],{"class":161},"\u002F* 默认 *\u002F\n",[92,135208,135209,135211,135213,135215,135217,135220,135223],{"class":94,"line":1173},[92,135210,51593],{"class":51282},[92,135212,79789],{"class":102},[92,135214,135178],{"class":151},[92,135216,51419],{"class":102},[92,135218,135219],{"class":151},"move",[92,135221,135222],{"class":102},"; }      ",[92,135224,135225],{"class":161},"\u002F* 移动 *\u002F\n",[92,135227,135228,135230,135232,135234,135236,135238,135240],{"class":94,"line":1179},[92,135229,51593],{"class":51282},[92,135231,79789],{"class":102},[92,135233,135178],{"class":151},[92,135235,51419],{"class":102},[92,135237,5167],{"class":151},[92,135239,135222],{"class":102},[92,135241,135242],{"class":161},"\u002F* 文本 *\u002F\n",[92,135244,135245,135247,135249,135251,135253,135256,135259],{"class":94,"line":1193},[92,135246,51593],{"class":51282},[92,135248,79789],{"class":102},[92,135250,135178],{"class":151},[92,135252,51419],{"class":102},[92,135254,135255],{"class":151},"not-allowed",[92,135257,135258],{"class":102},"; } ",[92,135260,135261],{"class":161},"\u002F* 禁止 *\u002F\n",[240,135263,135264,135272],{},[243,135265,135266],{},[246,135267,135268,135270],{},[249,135269,126997],{"align":23717},[249,135271,27471],{"align":23717},[287,135273,135274,135281,135288,135295,135302],{},[246,135275,135276,135278],{},[292,135277,135201],{"align":23717},[292,135279,135280],{"align":23717},"小白 默认",[246,135282,135283,135285],{},[292,135284,62012],{"align":23717},[292,135286,135287],{"align":23717},"小手",[246,135289,135290,135292],{},[292,135291,135219],{"align":23717},[292,135293,135294],{"align":23717},"移动",[246,135296,135297,135299],{},[292,135298,5167],{"align":23717},[292,135300,135301],{"align":23717},"文本",[246,135303,135304,135306],{},[292,135305,135255],{"align":23717},[292,135307,135308],{"align":23717},"禁止",[63,135310,135312],{"id":135311},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[38,135314,135315],{},"去除表单轮廓线",[38,135317,135318],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[83,135320,135321],{"className":126533,"code":129897,"language":126535,"meta":10,"style":10},[89,135322,135323,135327,135333,135349],{"__ignoreMap":10},[92,135324,135325],{"class":94,"line":95},[92,135326,129904],{"class":161},[92,135328,135329,135331],{"class":94,"line":11},[92,135330,51593],{"class":51282},[92,135332,15552],{"class":102},[92,135334,135335,135337,135339,135341,135343,135345,135347],{"class":94,"line":1158},[92,135336,70878],{"class":151},[92,135338,51419],{"class":102},[92,135340,320],{"class":151},[92,135342,51474],{"class":98},[92,135344,51503],{"class":151},[92,135346,129925],{"class":151},[92,135348,1269],{"class":102},[92,135350,135351],{"class":94,"line":1173},[92,135352,1544],{"class":102},[38,135354,135355],{},"文本域：",[1441,135357],{"style":126389,"src":135358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[38,135360,135361],{},"此时会有一个空白区域",[1441,135363],{"style":126389,"src":135364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[38,135366,135367],{},"写在同一行就不会出现这个问题",[1441,135369],{"style":126389,"src":135370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[38,135372,135373],{},"文本域是行内块元素，一定记住！！！",[38,135375,98214],{},[1441,135377],{"style":126389,"src":135378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[38,135380,135381],{},"文本域尽量放在一行",[38,135383,135384],{},"知识回顾：cols是列，rols是行",[1441,135386],{"style":126389,"src":135387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[38,135389,135390],{},"它可以进行拖动，显然这是我们不愿意看到的",[1441,135392],{"style":126389,"src":135393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[38,135395,135396],{},"使用resize进行解决",[83,135398,135400],{"className":126533,"code":135399,"language":126535,"meta":10,"style":10},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[89,135401,135402,135408,135421],{"__ignoreMap":10},[92,135403,135404,135406],{"class":94,"line":95},[92,135405,53803],{"class":51282},[92,135407,15552],{"class":102},[92,135409,135410,135412,135414,135416,135418],{"class":94,"line":11},[92,135411,70780],{"class":151},[92,135413,51419],{"class":102},[92,135415,54719],{"class":151},[92,135417,130396],{"class":102},[92,135419,135420],{"class":161},"\u002F* 取消表单轮廓线 *\u002F\n",[92,135422,135423],{"class":94,"line":1158},[92,135424,1544],{"class":102},[38,135426,135427],{},"此时就无法通过右下方实现拖动了",[63,135429,135431],{"id":135430},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[38,135433,135434],{},"实现一个盒子中的文字和图片对齐",[38,135436,135437,135438,135441],{},"用于设置一个元素的 ",[252,135439,135440],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[38,135443,135444],{},"图片和文字默认是基线对齐",[1441,135446],{"style":126389,"src":135447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[83,135449,135450],{"className":126533,"code":135399,"language":126535,"meta":10,"style":10},[89,135451,135452,135458,135470],{"__ignoreMap":10},[92,135453,135454,135456],{"class":94,"line":95},[92,135455,53803],{"class":51282},[92,135457,15552],{"class":102},[92,135459,135460,135462,135464,135466,135468],{"class":94,"line":11},[92,135461,70780],{"class":151},[92,135463,51419],{"class":102},[92,135465,54719],{"class":151},[92,135467,130396],{"class":102},[92,135469,135420],{"class":161},[92,135471,135472],{"class":94,"line":1158},[92,135473,1544],{"class":102},[1441,135475],{"style":126389,"src":135476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21978,135478,135480],{"id":135479},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[38,135482,135483],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1441,135485],{"style":126389,"src":135486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[38,135488,135489,135490,135493],{},"此时可以给图片、表单这些行内块元素的 ",[252,135491,135492],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21978,135495,135497],{"id":135496},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[38,135499,135500],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[38,135502,14613],{},[83,135504,135506],{"className":126533,"code":135505,"language":126535,"meta":10,"style":10},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[89,135507,135508,135513,135519,135531],{"__ignoreMap":10},[92,135509,135510],{"class":94,"line":95},[92,135511,135512],{"class":161},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[92,135514,135515,135517],{"class":94,"line":11},[92,135516,1441],{"class":51282},[92,135518,15552],{"class":102},[92,135520,135521,135524,135526,135529],{"class":94,"line":1158},[92,135522,135523],{"class":151},"  vertical-align",[92,135525,51419],{"class":102},[92,135527,135528],{"class":151},"middle",[92,135530,1269],{"class":102},[92,135532,135533],{"class":94,"line":1173},[92,135534,1544],{"class":102},[1441,135536],{"style":126389,"src":135537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[38,135539,135540],{},"主要解决方法有两种：",[46,135542,135543],{},[49,135544,135545,135548,135549,135552],{},[252,135546,135547],{},"给图片"," 添加 ",[252,135550,135551],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[38,135554,135555,135556],{},"2.把图片转换为块级元素 ",[252,135557,135558],{},"display: block",[38,135560,135561],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[38,135563,135564],{},"img {",[38,135566,135567],{},"vertical-align:middle;",[38,135569,1049],{},[63,135571,135573],{"id":135572},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[38,135575,135576],{},"效果：",[1441,135578],{"style":126389,"src":135579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[38,135581,135582],{},"单行文本溢出显示省略号--必须满足三个条件：",[83,135584,135586],{"className":126533,"code":135585,"language":126535,"meta":10,"style":10},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[89,135587,135588,135593,135599,135609,135614,135624],{"__ignoreMap":10},[92,135589,135590],{"class":94,"line":95},[92,135591,135592],{"class":161},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[92,135594,135595,135597],{"class":94,"line":11},[92,135596,1441],{"class":51282},[92,135598,15552],{"class":102},[92,135600,135601,135603,135605,135607],{"class":94,"line":1158},[92,135602,135523],{"class":151},[92,135604,51419],{"class":102},[92,135606,135528],{"class":151},[92,135608,1269],{"class":102},[92,135610,135611],{"class":94,"line":1173},[92,135612,135613],{"class":161},"  \u002F* 或 *\u002F\n",[92,135615,135616,135618,135620,135622],{"class":94,"line":1179},[92,135617,128149],{"class":151},[92,135619,51419],{"class":102},[92,135621,60851],{"class":151},[92,135623,1269],{"class":102},[92,135625,135626],{"class":94,"line":1193},[92,135627,1544],{"class":102},[63,135629,135631],{"id":135630},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[38,135633,135576],{},[1441,135635],{"style":126389,"src":135636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[38,135638,135639,135640,135643],{},"多行文本溢出显示省略号， ",[252,135641,135642],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[83,135645,135646],{"className":126533,"code":135585,"language":126535,"meta":10,"style":10},[89,135647,135648,135652,135658,135668,135672,135682],{"__ignoreMap":10},[92,135649,135650],{"class":94,"line":95},[92,135651,135592],{"class":161},[92,135653,135654,135656],{"class":94,"line":11},[92,135655,1441],{"class":51282},[92,135657,15552],{"class":102},[92,135659,135660,135662,135664,135666],{"class":94,"line":1158},[92,135661,135523],{"class":151},[92,135663,51419],{"class":102},[92,135665,135528],{"class":151},[92,135667,1269],{"class":102},[92,135669,135670],{"class":94,"line":1173},[92,135671,135613],{"class":161},[92,135673,135674,135676,135678,135680],{"class":94,"line":1179},[92,135675,128149],{"class":151},[92,135677,51419],{"class":102},[92,135679,60851],{"class":151},[92,135681,1269],{"class":102},[92,135683,135684],{"class":94,"line":1193},[92,135685,1544],{"class":102},[38,135687,135688],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[33,135690,135692],{"id":135691},"_133-常见布局技巧","13.3 常见布局技巧",[38,135694,135695],{},[252,135696,135697],{},"巧妙利用一个技术更快更好的布局：",[46,135699,135700,135703,135706,135709],{},[49,135701,135702],{},"margin负值的运用",[49,135704,135705],{},"文字围绕浮动元素",[49,135707,135708],{},"行内块的巧妙运用",[49,135710,135711],{},"CSS三角强化",[63,135713,135715],{"id":135714},"_1331-margin负值的运用","13.3.1 margin负值的运用",[38,135717,135718],{},"应用场景：",[1441,135720],{"style":126389,"src":135721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1441,135723],{"style":126389,"src":135724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[38,135726,135727],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[38,135729,135730],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[83,135732,135733],{"className":126533,"code":129897,"language":126535,"meta":10,"style":10},[89,135734,135735,135739,135745,135761],{"__ignoreMap":10},[92,135736,135737],{"class":94,"line":95},[92,135738,129904],{"class":161},[92,135740,135741,135743],{"class":94,"line":11},[92,135742,51593],{"class":51282},[92,135744,15552],{"class":102},[92,135746,135747,135749,135751,135753,135755,135757,135759],{"class":94,"line":1158},[92,135748,70878],{"class":151},[92,135750,51419],{"class":102},[92,135752,320],{"class":151},[92,135754,51474],{"class":98},[92,135756,51503],{"class":151},[92,135758,129925],{"class":151},[92,135760,1269],{"class":102},[92,135762,135763],{"class":94,"line":1173},[92,135764,1544],{"class":102},[1441,135766],{"style":126389,"src":135767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[38,135769,135770],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[83,135772,135774],{"className":126533,"code":135773,"language":126535,"meta":10,"style":10},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[89,135775,135776,135781,135787,135797,135809,135821],{"__ignoreMap":10},[92,135777,135778],{"class":94,"line":95},[92,135779,135780],{"class":161},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[92,135782,135783,135785],{"class":94,"line":11},[92,135784,130381],{"class":1942},[92,135786,15552],{"class":102},[92,135788,135789,135791,135793,135795],{"class":94,"line":1158},[92,135790,132339],{"class":151},[92,135792,51419],{"class":102},[92,135794,54746],{"class":151},[92,135796,1269],{"class":102},[92,135798,135799,135801,135803,135805,135807],{"class":94,"line":1173},[92,135800,132353],{"class":151},[92,135802,51419],{"class":102},[92,135804,549],{"class":151},[92,135806,51474],{"class":98},[92,135808,1269],{"class":102},[92,135810,135811,135813,135815,135817,135819],{"class":94,"line":1179},[92,135812,132370],{"class":151},[92,135814,51419],{"class":102},[92,135816,803],{"class":151},[92,135818,51474],{"class":98},[92,135820,1269],{"class":102},[92,135822,135823],{"class":94,"line":1193},[92,135824,1544],{"class":102},[38,135826,135827],{},"加上上述代码会发现：",[1441,135829],{"style":126389,"src":135830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[38,135832,135833],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[38,135835,135836],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[83,135838,135839],{"className":126533,"code":135773,"language":126535,"meta":10,"style":10},[89,135840,135841,135845,135851,135861,135873,135885],{"__ignoreMap":10},[92,135842,135843],{"class":94,"line":95},[92,135844,135780],{"class":161},[92,135846,135847,135849],{"class":94,"line":11},[92,135848,130381],{"class":1942},[92,135850,15552],{"class":102},[92,135852,135853,135855,135857,135859],{"class":94,"line":1158},[92,135854,132339],{"class":151},[92,135856,51419],{"class":102},[92,135858,54746],{"class":151},[92,135860,1269],{"class":102},[92,135862,135863,135865,135867,135869,135871],{"class":94,"line":1173},[92,135864,132353],{"class":151},[92,135866,51419],{"class":102},[92,135868,549],{"class":151},[92,135870,51474],{"class":98},[92,135872,1269],{"class":102},[92,135874,135875,135877,135879,135881,135883],{"class":94,"line":1179},[92,135876,132370],{"class":151},[92,135878,51419],{"class":102},[92,135880,803],{"class":151},[92,135882,51474],{"class":98},[92,135884,1269],{"class":102},[92,135886,135887],{"class":94,"line":1193},[92,135888,1544],{"class":102},[38,135890,135891],{},"解决方式2：",[38,135893,135894],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[83,135896,135898],{"className":126533,"code":135897,"language":126535,"meta":10,"style":10},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[89,135899,135900,135906,135916,135928,135940],{"__ignoreMap":10},[92,135901,135902,135904],{"class":94,"line":95},[92,135903,51593],{"class":51282},[92,135905,15552],{"class":102},[92,135907,135908,135910,135912,135914],{"class":94,"line":11},[92,135909,132339],{"class":151},[92,135911,51419],{"class":102},[92,135913,54746],{"class":151},[92,135915,1269],{"class":102},[92,135917,135918,135920,135922,135924,135926],{"class":94,"line":1158},[92,135919,132353],{"class":151},[92,135921,51419],{"class":102},[92,135923,549],{"class":151},[92,135925,51474],{"class":98},[92,135927,1269],{"class":102},[92,135929,135930,135932,135934,135936,135938],{"class":94,"line":1173},[92,135931,132370],{"class":151},[92,135933,51419],{"class":102},[92,135935,803],{"class":151},[92,135937,51474],{"class":98},[92,135939,1269],{"class":102},[92,135941,135942],{"class":94,"line":1179},[92,135943,1544],{"class":102},[63,135945,135947],{"id":135946},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[38,135949,135718],{},[1441,135951],{"style":126389,"src":135952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[38,135954,135955],{},"实现结构图：",[1441,135957],{"style":126389,"src":135958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[38,135960,135961],{},"巧妙运用浮动元素不会压住文字的特性",[38,135963,135964],{},"代码显示：",[83,135966,135968],{"className":126533,"code":135967,"language":126535,"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,135969,135970,135976,135986,135990,135995,135999,136005,136019],{"__ignoreMap":10},[92,135971,135972,135974],{"class":94,"line":95},[92,135973,130381],{"class":1942},[92,135975,15552],{"class":102},[92,135977,135978,135980,135982,135984],{"class":94,"line":11},[92,135979,131013],{"class":151},[92,135981,51419],{"class":102},[92,135983,23717],{"class":151},[92,135985,1269],{"class":102},[92,135987,135988],{"class":94,"line":1158},[92,135989,1544],{"class":102},[92,135991,135992],{"class":94,"line":1173},[92,135993,135994],{"class":102},"```Css\n",[92,135996,135997],{"class":94,"line":1179},[92,135998,130376],{"class":161},[92,136000,136001,136003],{"class":94,"line":1193},[92,136002,130381],{"class":1942},[92,136004,15552],{"class":102},[92,136006,136007,136009,136011,136013,136015,136017],{"class":94,"line":1199},[92,136008,70452],{"class":151},[92,136010,51419],{"class":102},[92,136012,294],{"class":151},[92,136014,51538],{"class":151},[92,136016,130396],{"class":102},[92,136018,130399],{"class":161},[92,136020,136021],{"class":94,"line":1290},[92,136022,1544],{"class":102},[38,136024,136025],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[83,136027,136030],{"className":136028,"code":136029,"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,136031,136029],{"__ignoreMap":10},[1441,136033],{"style":126389,"src":136034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[38,136036,136037],{},"最终展示结果：",[83,136039,136040],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,136041,136042,136046,136052,136066],{"__ignoreMap":10},[92,136043,136044],{"class":94,"line":95},[92,136045,130376],{"class":161},[92,136047,136048,136050],{"class":94,"line":11},[92,136049,130381],{"class":1942},[92,136051,15552],{"class":102},[92,136053,136054,136056,136058,136060,136062,136064],{"class":94,"line":1158},[92,136055,70452],{"class":151},[92,136057,51419],{"class":102},[92,136059,294],{"class":151},[92,136061,51538],{"class":151},[92,136063,130396],{"class":102},[92,136065,130399],{"class":161},[92,136067,136068],{"class":94,"line":1173},[92,136069,1544],{"class":102},[1441,136071],{"style":126389,"src":136072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[33,136074,136076],{"id":136075},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[63,136078,136080],{"id":136079},"_1341-原理","13.4.1 原理",[1441,136082],{"style":126389,"src":136083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[83,136085,136086],{"className":126533,"code":130369,"language":126535,"meta":10,"style":10},[89,136087,136088,136092,136098,136112],{"__ignoreMap":10},[92,136089,136090],{"class":94,"line":95},[92,136091,130376],{"class":161},[92,136093,136094,136096],{"class":94,"line":11},[92,136095,130381],{"class":1942},[92,136097,15552],{"class":102},[92,136099,136100,136102,136104,136106,136108,136110],{"class":94,"line":1158},[92,136101,70452],{"class":151},[92,136103,51419],{"class":102},[92,136105,294],{"class":151},[92,136107,51538],{"class":151},[92,136109,130396],{"class":102},[92,136111,130399],{"class":161},[92,136113,136114],{"class":94,"line":1173},[92,136115,1544],{"class":102},[63,136117,136119],{"id":136118},"_1342-实例","13.4.2 实例",[1441,136121],{"style":126389,"src":136122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[83,136124,136125],{"className":126533,"code":130999,"language":126535,"meta":10,"style":10},[89,136126,136127,136133,136143,136147,136153,136163],{"__ignoreMap":10},[92,136128,136129,136131],{"class":94,"line":95},[92,136130,131006],{"class":1942},[92,136132,15552],{"class":102},[92,136134,136135,136137,136139,136141],{"class":94,"line":11},[92,136136,131013],{"class":151},[92,136138,51419],{"class":102},[92,136140,23717],{"class":151},[92,136142,1269],{"class":102},[92,136144,136145],{"class":94,"line":1158},[92,136146,1544],{"class":102},[92,136148,136149,136151],{"class":94,"line":1173},[92,136150,131028],{"class":1942},[92,136152,15552],{"class":102},[92,136154,136155,136157,136159,136161],{"class":94,"line":1179},[92,136156,131013],{"class":151},[92,136158,51419],{"class":102},[92,136160,72504],{"class":151},[92,136162,1269],{"class":102},[92,136164,136165],{"class":94,"line":1193},[92,136166,1544],{"class":102},[33,136168,136170],{"id":136169},"_135-css的初始化","13.5 css的初始化",[38,136172,136173],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[38,136175,136176],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[38,136178,136179],{},"每个网页都必须首先进行 CSS初始化。",[38,136181,136182],{},"这里我们以 京东CSS初始化代码为例。",[38,136184,136185],{},"在网页右键查看网页源代码",[38,136187,136188],{},"找到css的link引入语句",[38,136190,136191],{},"然后ctrl+f 输入body",[38,136193,77208],{},[1441,136195],{"style":126389,"src":136196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[38,136198,77231],{},[1441,136200],{"style":126389,"src":136201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[38,136203,136204],{},"③打开了网页上传压缩的代码",[1441,136206],{"style":126389,"src":136207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[38,136209,136210],{},"④从body前可以查看这个网页的初始化代码",[38,136212,136213],{},[252,136214,136215],{},"Unicode编码字体：",[38,136217,136218],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[38,136220,83189],{},[38,136222,136223],{},"黑体 \\9ED1\\4F53",[38,136225,136226],{},"宋体 \\5B8B\\4F53",[38,136228,136229],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5106,136231,136232],{},"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":136234},[136235,136236,136243,136247,136251],{"id":135032,"depth":11,"text":135033},{"id":135154,"depth":11,"text":135155,"children":136237},[136238,136239,136240,136241,136242],{"id":135158,"depth":1158,"text":135159},{"id":135311,"depth":1158,"text":135312},{"id":135430,"depth":1158,"text":135431},{"id":135572,"depth":1158,"text":135573},{"id":135630,"depth":1158,"text":135631},{"id":135691,"depth":11,"text":135692,"children":136244},[136245,136246],{"id":135714,"depth":1158,"text":135715},{"id":135946,"depth":1158,"text":135947},{"id":136075,"depth":11,"text":136076,"children":136248},[136249,136250],{"id":136079,"depth":1158,"text":136080},{"id":136118,"depth":1158,"text":136119},{"id":136169,"depth":11,"text":136170},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135024,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136258,"title":136259,"body":136260,"description":23357,"extension":14,"meta":137946,"navigation":17,"path":137947,"seo":137948,"stem":137949,"__hash__":137950},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136261,"toc":137935},[136262,136265,136269,136273,136276,136283,136286,136289,136327,136330,136332,136346,136350,136359,136363,136368,136371,136374,136377,136412,136417,136420,136450,136453,136458,136461,136464,136494,136497,136551,136554,136558,136563,136575,136578,136582,136612,136615,136620,136623,136653,136656,136660,136677,136681,136685,136688,136721,136724,136728,136731,136734,136737,136740,136743,136854,136857,136860,136863,136965,136968,136972,136976,136980,136983,137023,137026,137028,137044,137048,137051,137056,137137,137140,137143,137269,137274,137277,137285,137288,137293,137378,137381,137385,137388,137391,137395,137415,137420,137504,137507,137512,137515,137518,137596,137599,137602,137605,137608,137611,137616,137619,137622,137694,137697,137702,137705,137802,137805,137811,137814,137817,137820,137823,137826,137829,137832,137835,137839,137844,137847,137880,137885,137888,137929,137932],[29,136263,136259],{"id":136264},"_14-html5与css3新特性",[33,136266,136268],{"id":136267},"_141-html5的新特性","14.1 HTML5的新特性",[63,136270,136272],{"id":136271},"_1411-基本标签","14.1.1 基本标签",[38,136274,136275],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[38,136277,136278,136279,136282],{},"这些新特性都有兼容性问题，基本是 ",[252,136280,136281],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[38,136284,136285],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[38,136287,136288],{},"现在使用的是新特性：",[1110,136290,136291,136297,136303,136309,136315,136321],{},[49,136292,136293,136296],{},[89,136294,136295],{},"\u003Cheader>"," 头部标签",[49,136298,136299,136302],{},[89,136300,136301],{},"\u003Cnav>"," 导航标签",[49,136304,136305,136308],{},[89,136306,136307],{},"\u003Carticle>"," 内容标签",[49,136310,136311,136314],{},[89,136312,136313],{},"\u003Csection>"," 定义文档某个区域",[49,136316,136317,136320],{},[89,136318,136319],{},"\u003Caside>"," 侧边栏标签",[49,136322,136323,136326],{},[89,136324,136325],{},"\u003Cfooter>"," 尾部标签",[1441,136328],{"style":126389,"src":136329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[38,136331,132],{},[1110,136333,136334,136337,136340,136343],{},[49,136335,136336],{},"这种语义化标准主要是针对搜索引擎的",[49,136338,136339],{},"这些标签页面中可以经常使用",[49,136341,136342],{},"在IE9中，需要把这些元素转换为块级元素",[49,136344,136345],{},"移动端更喜欢使用这些标签",[63,136347,136349],{"id":136348},"_1412-多媒体标签","14.1.2 多媒体标签",[38,136351,136352,136353,136355,136356,136358],{},"音频 ",[252,136354,28156],{}," 和视频 ",[252,136357,28165],{}," 两个标签",[21978,136360,136362],{"id":136361},"_14121-视频标签-video","14.1.2.1 视频标签- video",[46,136364,136365],{},[49,136366,136367],{},"支持格式：",[1441,136369],{"style":126389,"src":136370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[38,136372,136373],{},"尽量使用MP4，兼容性好",[38,136375,136376],{},"用MP4就可以",[83,136378,136380],{"className":127280,"code":136379,"language":127282,"meta":10,"style":10},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[89,136381,136382],{"__ignoreMap":10},[92,136383,136384,136386,136388,136390,136392,136395,136397,136400,136403,136406,136408,136410],{"class":94,"line":95},[92,136385,1013],{"class":102},[92,136387,28165],{"class":51282},[92,136389,55221],{"class":1942},[92,136391,148],{"class":102},[92,136393,136394],{"class":207},"\"movie.mp4\"",[92,136396,92405],{"class":1942},[92,136398,136399],{"class":1942}," autoplay",[92,136401,136402],{"class":1942}," muted",[92,136404,136405],{"class":1942}," loop",[92,136407,55296],{"class":102},[92,136409,28165],{"class":51282},[92,136411,51289],{"class":102},[46,136413,136414],{"start":11},[49,136415,136416],{},"兼容写法",[38,136418,136419],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[83,136421,136422],{"className":127280,"code":136379,"language":127282,"meta":10,"style":10},[89,136423,136424],{"__ignoreMap":10},[92,136425,136426,136428,136430,136432,136434,136436,136438,136440,136442,136444,136446,136448],{"class":94,"line":95},[92,136427,1013],{"class":102},[92,136429,28165],{"class":51282},[92,136431,55221],{"class":1942},[92,136433,148],{"class":102},[92,136435,136394],{"class":207},[92,136437,92405],{"class":1942},[92,136439,136399],{"class":1942},[92,136441,136402],{"class":1942},[92,136443,136405],{"class":1942},[92,136445,55296],{"class":102},[92,136447,28165],{"class":51282},[92,136449,51289],{"class":102},[38,136451,136452],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136454,136455],{"start":1158},[49,136456,136457],{},"video常用属性",[1441,136459],{"style":126389,"src":136460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[38,136462,136463],{},"poster属性后面是跟的等待加载图片的地址",[83,136465,136466],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,136467,136468],{"__ignoreMap":10},[92,136469,136470,136472,136474,136476,136478,136480,136482,136484,136486,136488,136490,136492],{"class":94,"line":95},[92,136471,1013],{"class":102},[92,136473,1441],{"class":51282},[92,136475,55221],{"class":1942},[92,136477,148],{"class":102},[92,136479,134050],{"class":207},[92,136481,55229],{"class":1942},[92,136483,148],{"class":102},[92,136485,134057],{"class":207},[92,136487,134060],{"class":1942},[92,136489,148],{"class":102},[92,136491,134065],{"class":207},[92,136493,51289],{"class":102},[38,136495,136496],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[83,136498,136500],{"className":126533,"code":136499,"language":126535,"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,136501,136502,136507,136513,136537,136542,136547],{"__ignoreMap":10},[92,136503,136504],{"class":94,"line":95},[92,136505,136506],{"class":161},"\u002F* 2D 位移 *\u002F\n",[92,136508,136509,136511],{"class":94,"line":11},[92,136510,51593],{"class":51282},[92,136512,15552],{"class":102},[92,136514,136515,136518,136520,136523,136525,136527,136529,136531,136533,136535],{"class":94,"line":1158},[92,136516,136517],{"class":151},"  transform",[92,136519,51419],{"class":102},[92,136521,136522],{"class":151},"translate",[92,136524,103],{"class":102},[92,136526,414],{"class":151},[92,136528,51474],{"class":98},[92,136530,12415],{"class":102},[92,136532,759],{"class":151},[92,136534,51474],{"class":98},[92,136536,2698],{"class":102},[92,136538,136539],{"class":94,"line":1173},[92,136540,136541],{"class":161},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[92,136543,136544],{"class":94,"line":1179},[92,136545,136546],{"class":161},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[92,136548,136549],{"class":94,"line":1193},[92,136550,1544],{"class":102},[38,136552,136553],{},"muted:自动静音属性",[21978,136555,136557],{"id":136556},"_14122-音频标签audio","14.1.2.2 音频标签audio",[46,136559,136560],{},[49,136561,136562],{},"基本使用",[38,136564,136565,136566,136571,136572],{},"当前 ",[252,136567,136568],{},[89,136569,136570],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[252,136573,136574],{},"mp3格式",[1441,136576],{"style":126389,"src":136577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[46,136579,136580],{"start":11},[49,136581,136416],{},[83,136583,136584],{"className":127280,"code":136379,"language":127282,"meta":10,"style":10},[89,136585,136586],{"__ignoreMap":10},[92,136587,136588,136590,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610],{"class":94,"line":95},[92,136589,1013],{"class":102},[92,136591,28165],{"class":51282},[92,136593,55221],{"class":1942},[92,136595,148],{"class":102},[92,136597,136394],{"class":207},[92,136599,92405],{"class":1942},[92,136601,136399],{"class":1942},[92,136603,136402],{"class":1942},[92,136605,136405],{"class":1942},[92,136607,55296],{"class":102},[92,136609,28165],{"class":51282},[92,136611,51289],{"class":102},[38,136613,136614],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[46,136616,136617],{"start":1158},[49,136618,136619],{},"常用属性",[1441,136621],{"style":126389,"src":136622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[83,136624,136625],{"className":127280,"code":136379,"language":127282,"meta":10,"style":10},[89,136626,136627],{"__ignoreMap":10},[92,136628,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647,136649,136651],{"class":94,"line":95},[92,136630,1013],{"class":102},[92,136632,28165],{"class":51282},[92,136634,55221],{"class":1942},[92,136636,148],{"class":102},[92,136638,136394],{"class":207},[92,136640,92405],{"class":1942},[92,136642,136399],{"class":1942},[92,136644,136402],{"class":1942},[92,136646,136405],{"class":1942},[92,136648,55296],{"class":102},[92,136650,28165],{"class":51282},[92,136652,51289],{"class":102},[38,136654,136655],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21978,136657,136659],{"id":136658},"_14123-总结","14.1.2.3 总结",[1110,136661,136662,136665,136668,136671,136674],{},[49,136663,136664],{},"音频标签和视频标签使用方式基本一致",[49,136666,136667],{},"浏览器支持情况不同",[49,136669,136670],{},"谷歌浏览器把音频和视频自动播放禁止了",[49,136672,136673],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[49,136675,136676],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[63,136678,136680],{"id":136679},"_1413-表单元素","14.1.3 表单元素",[21978,136682,136684],{"id":136683},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1441,136686],{"style":126389,"src":136687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[83,136689,136691],{"className":127280,"code":136690,"language":127282,"meta":10,"style":10},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[89,136692,136693],{"__ignoreMap":10},[92,136694,136695,136697,136699,136701,136703,136705,136707,136709,136712,136714,136716,136719],{"class":94,"line":95},[92,136696,1013],{"class":102},[92,136698,53803],{"class":51282},[92,136700,53806],{"class":1942},[92,136702,148],{"class":102},[92,136704,62681],{"class":207},[92,136706,14900],{"class":1942},[92,136708,148],{"class":102},[92,136710,136711],{"class":207},"\"username\"",[92,136713,61002],{"class":1942},[92,136715,148],{"class":102},[92,136717,136718],{"class":207},"\"请输入用户名\"",[92,136720,51289],{"class":102},[1441,136722],{"style":126389,"src":136723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21978,136725,136727],{"id":136726},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1441,136729],{"style":126389,"src":136730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[38,136732,136733],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[38,136735,136736],{},"快捷操作：",[1441,136738],{"style":126389,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[38,136741,136742],{},"例子1：",[83,136744,136746],{"className":127280,"code":136745,"language":127282,"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,136747,136748,136771,136798,136827,136846],{"__ignoreMap":10},[92,136749,136750,136752,136754,136756,136758,136761,136764,136766,136769],{"class":94,"line":95},[92,136751,1013],{"class":102},[92,136753,66607],{"class":51282},[92,136755,66610],{"class":1942},[92,136757,148],{"class":102},[92,136759,136760],{"class":207},"\"\u002Fsubmit\"",[92,136762,136763],{"class":1942}," method",[92,136765,148],{"class":102},[92,136767,136768],{"class":207},"\"post\"",[92,136770,51289],{"class":102},[92,136772,136773,136775,136777,136779,136781,136783,136785,136787,136789,136791,136793,136796],{"class":94,"line":11},[92,136774,52126],{"class":102},[92,136776,53803],{"class":51282},[92,136778,53806],{"class":1942},[92,136780,148],{"class":102},[92,136782,62681],{"class":207},[92,136784,14900],{"class":1942},[92,136786,148],{"class":102},[92,136788,136711],{"class":207},[92,136790,61002],{"class":1942},[92,136792,148],{"class":102},[92,136794,136795],{"class":207},"\"用户名\"",[92,136797,51289],{"class":102},[92,136799,136800,136802,136804,136806,136808,136811,136813,136815,136818,136820,136822,136825],{"class":94,"line":1158},[92,136801,52126],{"class":102},[92,136803,53803],{"class":51282},[92,136805,53806],{"class":1942},[92,136807,148],{"class":102},[92,136809,136810],{"class":207},"\"password\"",[92,136812,14900],{"class":1942},[92,136814,148],{"class":102},[92,136816,136817],{"class":207},"\"pwd\"",[92,136819,61002],{"class":1942},[92,136821,148],{"class":102},[92,136823,136824],{"class":207},"\"密码\"",[92,136826,51289],{"class":102},[92,136828,136829,136831,136833,136835,136837,136839,136842,136844],{"class":94,"line":1173},[92,136830,52126],{"class":102},[92,136832,53869],{"class":51282},[92,136834,53806],{"class":1942},[92,136836,148],{"class":102},[92,136838,66630],{"class":207},[92,136840,136841],{"class":102},">提交\u003C\u002F",[92,136843,53869],{"class":51282},[92,136845,51289],{"class":102},[92,136847,136848,136850,136852],{"class":94,"line":1179},[92,136849,51767],{"class":102},[92,136851,66607],{"class":51282},[92,136853,51289],{"class":102},[1441,136855],{"style":126389,"src":136856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[38,136858,136859],{},"value是表单域的内容",[38,136861,136862],{},"例子2：",[83,136864,136865],{"className":127280,"code":136745,"language":127282,"meta":10,"style":10},[89,136866,136867,136887,136913,136939,136957],{"__ignoreMap":10},[92,136868,136869,136871,136873,136875,136877,136879,136881,136883,136885],{"class":94,"line":95},[92,136870,1013],{"class":102},[92,136872,66607],{"class":51282},[92,136874,66610],{"class":1942},[92,136876,148],{"class":102},[92,136878,136760],{"class":207},[92,136880,136763],{"class":1942},[92,136882,148],{"class":102},[92,136884,136768],{"class":207},[92,136886,51289],{"class":102},[92,136888,136889,136891,136893,136895,136897,136899,136901,136903,136905,136907,136909,136911],{"class":94,"line":11},[92,136890,52126],{"class":102},[92,136892,53803],{"class":51282},[92,136894,53806],{"class":1942},[92,136896,148],{"class":102},[92,136898,62681],{"class":207},[92,136900,14900],{"class":1942},[92,136902,148],{"class":102},[92,136904,136711],{"class":207},[92,136906,61002],{"class":1942},[92,136908,148],{"class":102},[92,136910,136795],{"class":207},[92,136912,51289],{"class":102},[92,136914,136915,136917,136919,136921,136923,136925,136927,136929,136931,136933,136935,136937],{"class":94,"line":1158},[92,136916,52126],{"class":102},[92,136918,53803],{"class":51282},[92,136920,53806],{"class":1942},[92,136922,148],{"class":102},[92,136924,136810],{"class":207},[92,136926,14900],{"class":1942},[92,136928,148],{"class":102},[92,136930,136817],{"class":207},[92,136932,61002],{"class":1942},[92,136934,148],{"class":102},[92,136936,136824],{"class":207},[92,136938,51289],{"class":102},[92,136940,136941,136943,136945,136947,136949,136951,136953,136955],{"class":94,"line":1173},[92,136942,52126],{"class":102},[92,136944,53869],{"class":51282},[92,136946,53806],{"class":1942},[92,136948,148],{"class":102},[92,136950,66630],{"class":207},[92,136952,136841],{"class":102},[92,136954,53869],{"class":51282},[92,136956,51289],{"class":102},[92,136958,136959,136961,136963],{"class":94,"line":1179},[92,136960,51767],{"class":102},[92,136962,66607],{"class":51282},[92,136964,51289],{"class":102},[1441,136966],{"style":126389,"src":136967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[33,136969,136971],{"id":136970},"_142-css新特性","14.2 CSS新特性",[63,136973,136975],{"id":136974},"_1421-新增选择器","14.2.1 新增选择器",[21978,136977,136979],{"id":136978},"_14211-属性选择器","14.2.1.1 属性选择器",[1441,136981],{"style":126389,"src":136982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[83,136984,136986],{"className":126533,"code":136985,"language":126535,"meta":10,"style":10},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[89,136987,136988,137003,137019],{"__ignoreMap":10},[92,136989,136990,136992,136994,136996,136998,137000],{"class":94,"line":95},[92,136991,53803],{"class":51282},[92,136993,993],{"class":102},[92,136995,103088],{"class":1942},[92,136997,148],{"class":98},[92,136999,62681],{"class":207},[92,137001,137002],{"class":102},"] {\n",[92,137004,137005,137007,137009,137011,137013,137015,137017],{"class":94,"line":11},[92,137006,70878],{"class":151},[92,137008,51419],{"class":102},[92,137010,320],{"class":151},[92,137012,51474],{"class":98},[92,137014,51503],{"class":151},[92,137016,130113],{"class":151},[92,137018,1269],{"class":102},[92,137020,137021],{"class":94,"line":1158},[92,137022,1544],{"class":102},[1441,137024],{"style":126389,"src":137025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[38,137027,132],{},[1110,137029,137030,137033,137036,137039],{},[49,137031,137032],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[49,137034,137035],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[49,137037,137038],{},"属性选择器也可以选择出来自定义的属性",[49,137040,137041,137043],{},[252,137042,9005],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21978,137045,137047],{"id":137046},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1441,137049],{"style":126389,"src":137050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[46,137052,137053],{},[49,137054,137055],{},"fist-child",[83,137057,137059],{"className":126533,"code":137058,"language":126535,"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,137060,137061,137066,137081,137101,137119],{"__ignoreMap":10},[92,137062,137063],{"class":94,"line":95},[92,137064,137065],{"class":161},"\u002F* 属性选择器 *\u002F\n",[92,137067,137068,137070,137072,137074,137076,137078],{"class":94,"line":11},[92,137069,53803],{"class":51282},[92,137071,993],{"class":102},[92,137073,103088],{"class":1942},[92,137075,148],{"class":98},[92,137077,62681],{"class":207},[92,137079,137080],{"class":102},"] { }\n",[92,137082,137083,137085,137087,137089,137092,137095,137098],{"class":94,"line":1158},[92,137084,53803],{"class":51282},[92,137086,993],{"class":102},[92,137088,14674],{"class":1942},[92,137090,137091],{"class":98},"^=",[92,137093,137094],{"class":207},"\"icon\"",[92,137096,137097],{"class":102},"] { }  ",[92,137099,137100],{"class":161},"\u002F* 以 icon 开头 *\u002F\n",[92,137102,137103,137105,137107,137109,137112,137114,137116],{"class":94,"line":1173},[92,137104,53803],{"class":51282},[92,137106,993],{"class":102},[92,137108,14674],{"class":1942},[92,137110,137111],{"class":98},"$=",[92,137113,137094],{"class":207},[92,137115,137097],{"class":102},[92,137117,137118],{"class":161},"\u002F* 以 icon 结尾 *\u002F\n",[92,137120,137121,137123,137125,137127,137130,137132,137134],{"class":94,"line":1179},[92,137122,53803],{"class":51282},[92,137124,993],{"class":102},[92,137126,14674],{"class":1942},[92,137128,137129],{"class":98},"*=",[92,137131,137094],{"class":207},[92,137133,137097],{"class":102},[92,137135,137136],{"class":161},"\u002F* 包含 icon *\u002F\n",[38,137138,137139],{},"ul的第一个儿子文本为红色",[38,137141,137142],{},"一定要在冒号前加空格，不然就是选中所有的了",[83,137144,137146],{"className":126533,"code":137145,"language":126535,"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,137147,137148,137154,137164,137168,137172,137177,137190,137203,137219,137236,137253],{"__ignoreMap":10},[92,137149,137150,137152],{"class":94,"line":95},[92,137151,126824],{"class":1942},[92,137153,15552],{"class":102},[92,137155,137156,137158,137160,137162],{"class":94,"line":11},[92,137157,70887],{"class":151},[92,137159,51419],{"class":102},[92,137161,57403],{"class":151},[92,137163,1269],{"class":102},[92,137165,137166],{"class":94,"line":1158},[92,137167,1544],{"class":102},[92,137169,137170],{"class":94,"line":1173},[92,137171,135994],{"class":102},[92,137173,137174],{"class":94,"line":1179},[92,137175,137176],{"class":161},"\u002F* 结构伪类选择器 *\u002F\n",[92,137178,137179,137181,137184,137187],{"class":94,"line":1193},[92,137180,49],{"class":51282},[92,137182,137183],{"class":1942},":first-child",[92,137185,137186],{"class":102}," { }           ",[92,137188,137189],{"class":161},"\u002F* 第一个 *\u002F\n",[92,137191,137192,137194,137197,137200],{"class":94,"line":1199},[92,137193,49],{"class":51282},[92,137195,137196],{"class":1942},":last-child",[92,137198,137199],{"class":102}," { }            ",[92,137201,137202],{"class":161},"\u002F* 最后一个 *\u002F\n",[92,137204,137205,137207,137209,137211,137213,137216],{"class":94,"line":1290},[92,137206,49],{"class":51282},[92,137208,129447],{"class":1942},[92,137210,103],{"class":102},[92,137212,180],{"class":151},[92,137214,137215],{"class":102},") { }          ",[92,137217,137218],{"class":161},"\u002F* 第2个 *\u002F\n",[92,137220,137221,137223,137225,137227,137230,137233],{"class":94,"line":1296},[92,137222,49],{"class":51282},[92,137224,129447],{"class":1942},[92,137226,103],{"class":102},[92,137228,137229],{"class":151},"2n",[92,137231,137232],{"class":102},") { }         ",[92,137234,137235],{"class":161},"\u002F* 偶数 *\u002F\n",[92,137237,137238,137240,137242,137244,137247,137250],{"class":94,"line":1308},[92,137239,49],{"class":51282},[92,137241,129447],{"class":1942},[92,137243,103],{"class":102},[92,137245,137246],{"class":151},"2n+1",[92,137248,137249],{"class":102},") { }       ",[92,137251,137252],{"class":161},"\u002F* 奇数 *\u002F\n",[92,137254,137255,137257,137259,137261,137264,137266],{"class":94,"line":1591},[92,137256,49],{"class":51282},[92,137258,129447],{"class":1942},[92,137260,103],{"class":102},[92,137262,137263],{"class":151},"-n+3",[92,137265,137249],{"class":102},[92,137267,137268],{"class":161},"\u002F* 前3个 *\u002F\n",[51593,137270,137273],{"className":137271},[137272],"example","\n  示例内容\n",[38,137275,137276],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1110,137278,137279],{},[49,137280,137281,137284],{},[89,137282,137283],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[38,137286,137287],{},"也就是说它选择的是熊大",[46,137289,137290],{"start":1193},[49,137291,137292],{},"权重",[83,137294,137296],{"className":126533,"code":137295,"language":126535,"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,137297,137298,137302,137312,137322,137336,137350,137364],{"__ignoreMap":10},[92,137299,137300],{"class":94,"line":95},[92,137301,137176],{"class":161},[92,137303,137304,137306,137308,137310],{"class":94,"line":11},[92,137305,49],{"class":51282},[92,137307,137183],{"class":1942},[92,137309,137186],{"class":102},[92,137311,137189],{"class":161},[92,137313,137314,137316,137318,137320],{"class":94,"line":1158},[92,137315,49],{"class":51282},[92,137317,137196],{"class":1942},[92,137319,137199],{"class":102},[92,137321,137202],{"class":161},[92,137323,137324,137326,137328,137330,137332,137334],{"class":94,"line":1173},[92,137325,49],{"class":51282},[92,137327,129447],{"class":1942},[92,137329,103],{"class":102},[92,137331,180],{"class":151},[92,137333,137215],{"class":102},[92,137335,137218],{"class":161},[92,137337,137338,137340,137342,137344,137346,137348],{"class":94,"line":1179},[92,137339,49],{"class":51282},[92,137341,129447],{"class":1942},[92,137343,103],{"class":102},[92,137345,137229],{"class":151},[92,137347,137232],{"class":102},[92,137349,137235],{"class":161},[92,137351,137352,137354,137356,137358,137360,137362],{"class":94,"line":1193},[92,137353,49],{"class":51282},[92,137355,129447],{"class":1942},[92,137357,103],{"class":102},[92,137359,137246],{"class":151},[92,137361,137249],{"class":102},[92,137363,137252],{"class":161},[92,137365,137366,137368,137370,137372,137374,137376],{"class":94,"line":1199},[92,137367,49],{"class":51282},[92,137369,129447],{"class":1942},[92,137371,103],{"class":102},[92,137373,137263],{"class":151},[92,137375,137249],{"class":102},[92,137377,137268],{"class":161},[38,137379,137380],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21978,137382,137384],{"id":137383},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[38,137386,137387],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1441,137389],{"style":126389,"src":137390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[46,137392,137393],{},[49,137394,132],{},[1110,137396,137397,137400,137403,137406,137409,137412],{},[49,137398,137399],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[49,137401,137402],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[49,137404,137405],{},"语法： element::before {}",[49,137407,137408],{},"before 和 after 必须有 content 属性",[49,137410,137411],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[49,137413,137414],{},"伪元素选择器和标签选择器一样，权重为 1",[46,137416,137417],{"start":11},[49,137418,137419],{},"实例",[83,137421,137422],{"className":126533,"code":137295,"language":126535,"meta":10,"style":10},[89,137423,137424,137428,137438,137448,137462,137476,137490],{"__ignoreMap":10},[92,137425,137426],{"class":94,"line":95},[92,137427,137176],{"class":161},[92,137429,137430,137432,137434,137436],{"class":94,"line":11},[92,137431,49],{"class":51282},[92,137433,137183],{"class":1942},[92,137435,137186],{"class":102},[92,137437,137189],{"class":161},[92,137439,137440,137442,137444,137446],{"class":94,"line":1158},[92,137441,49],{"class":51282},[92,137443,137196],{"class":1942},[92,137445,137199],{"class":102},[92,137447,137202],{"class":161},[92,137449,137450,137452,137454,137456,137458,137460],{"class":94,"line":1173},[92,137451,49],{"class":51282},[92,137453,129447],{"class":1942},[92,137455,103],{"class":102},[92,137457,180],{"class":151},[92,137459,137215],{"class":102},[92,137461,137218],{"class":161},[92,137463,137464,137466,137468,137470,137472,137474],{"class":94,"line":1179},[92,137465,49],{"class":51282},[92,137467,129447],{"class":1942},[92,137469,103],{"class":102},[92,137471,137229],{"class":151},[92,137473,137232],{"class":102},[92,137475,137235],{"class":161},[92,137477,137478,137480,137482,137484,137486,137488],{"class":94,"line":1193},[92,137479,49],{"class":51282},[92,137481,129447],{"class":1942},[92,137483,103],{"class":102},[92,137485,137246],{"class":151},[92,137487,137249],{"class":102},[92,137489,137252],{"class":161},[92,137491,137492,137494,137496,137498,137500,137502],{"class":94,"line":1199},[92,137493,49],{"class":51282},[92,137495,129447],{"class":1942},[92,137497,103],{"class":102},[92,137499,137263],{"class":151},[92,137501,137249],{"class":102},[92,137503,137268],{"class":161},[1441,137505],{"style":126389,"src":137506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[46,137508,137509],{"start":1158},[49,137510,137511],{},"使用场景1",[1441,137513],{"style":126389,"src":137514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[38,137516,137517],{},"不需要再加盒子来整红色那部分了",[83,137519,137521],{"className":126533,"code":137520,"language":126535,"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,137522,137523,137528,137537,137548,137558,137562,137571,137582,137592],{"__ignoreMap":10},[92,137524,137525],{"class":94,"line":95},[92,137526,137527],{"class":161},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[92,137529,137530,137532,137535],{"class":94,"line":11},[92,137531,51593],{"class":51282},[92,137533,137534],{"class":1942},"::before",[92,137536,15552],{"class":102},[92,137538,137539,137542,137544,137546],{"class":94,"line":1158},[92,137540,137541],{"class":151},"  content",[92,137543,51419],{"class":102},[92,137545,7632],{"class":207},[92,137547,1269],{"class":102},[92,137549,137550,137552,137554,137556],{"class":94,"line":1173},[92,137551,128149],{"class":151},[92,137553,51419],{"class":102},[92,137555,60851],{"class":151},[92,137557,1269],{"class":102},[92,137559,137560],{"class":94,"line":1179},[92,137561,1544],{"class":102},[92,137563,137564,137566,137569],{"class":94,"line":1193},[92,137565,51593],{"class":51282},[92,137567,137568],{"class":1942},"::after",[92,137570,15552],{"class":102},[92,137572,137573,137575,137577,137580],{"class":94,"line":1199},[92,137574,137541],{"class":151},[92,137576,51419],{"class":102},[92,137578,137579],{"class":207},"\"→\"",[92,137581,1269],{"class":102},[92,137583,137584,137586,137588,137590],{"class":94,"line":1290},[92,137585,70887],{"class":151},[92,137587,51419],{"class":102},[92,137589,62052],{"class":151},[92,137591,1269],{"class":102},[92,137593,137594],{"class":94,"line":1296},[92,137595,1544],{"class":102},[1441,137597],{"style":126389,"src":137598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[38,137600,137601],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1441,137603],{"style":126389,"src":137604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[38,137606,137607],{},"但是在引用时需要先转义一下",[38,137609,137610],{},"content='\\e930'",[46,137612,137613],{"start":1173},[49,137614,137615],{},"使用场景2",[38,137617,137618],{},"仿土豆效果",[38,137620,137621],{},"通过使用伪元素选择器可以减少body中盒子的数量",[83,137623,137624],{"className":126533,"code":137520,"language":126535,"meta":10,"style":10},[89,137625,137626,137630,137638,137648,137658,137662,137670,137680,137690],{"__ignoreMap":10},[92,137627,137628],{"class":94,"line":95},[92,137629,137527],{"class":161},[92,137631,137632,137634,137636],{"class":94,"line":11},[92,137633,51593],{"class":51282},[92,137635,137534],{"class":1942},[92,137637,15552],{"class":102},[92,137639,137640,137642,137644,137646],{"class":94,"line":1158},[92,137641,137541],{"class":151},[92,137643,51419],{"class":102},[92,137645,7632],{"class":207},[92,137647,1269],{"class":102},[92,137649,137650,137652,137654,137656],{"class":94,"line":1173},[92,137651,128149],{"class":151},[92,137653,51419],{"class":102},[92,137655,60851],{"class":151},[92,137657,1269],{"class":102},[92,137659,137660],{"class":94,"line":1179},[92,137661,1544],{"class":102},[92,137663,137664,137666,137668],{"class":94,"line":1193},[92,137665,51593],{"class":51282},[92,137667,137568],{"class":1942},[92,137669,15552],{"class":102},[92,137671,137672,137674,137676,137678],{"class":94,"line":1199},[92,137673,137541],{"class":151},[92,137675,51419],{"class":102},[92,137677,137579],{"class":207},[92,137679,1269],{"class":102},[92,137681,137682,137684,137686,137688],{"class":94,"line":1290},[92,137683,70887],{"class":151},[92,137685,51419],{"class":102},[92,137687,62052],{"class":151},[92,137689,1269],{"class":102},[92,137691,137692],{"class":94,"line":1296},[92,137693,1544],{"class":102},[1441,137695],{"style":126389,"src":137696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[46,137698,137699],{"start":1179},[49,137700,137701],{},"使用场景3",[38,137703,137704],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[83,137706,137708],{"className":126533,"code":137707,"language":126535,"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,137709,137710,137716,137726,137730,137734,137738,137746,137756,137766,137770,137778,137788,137798],{"__ignoreMap":10},[92,137711,137712,137714],{"class":94,"line":95},[92,137713,130381],{"class":1942},[92,137715,15552],{"class":102},[92,137717,137718,137720,137722,137724],{"class":94,"line":11},[92,137719,131013],{"class":151},[92,137721,51419],{"class":102},[92,137723,23717],{"class":151},[92,137725,1269],{"class":102},[92,137727,137728],{"class":94,"line":1158},[92,137729,1544],{"class":102},[92,137731,137732],{"class":94,"line":1173},[92,137733,135994],{"class":102},[92,137735,137736],{"class":94,"line":1179},[92,137737,137527],{"class":161},[92,137739,137740,137742,137744],{"class":94,"line":1193},[92,137741,51593],{"class":51282},[92,137743,137534],{"class":1942},[92,137745,15552],{"class":102},[92,137747,137748,137750,137752,137754],{"class":94,"line":1199},[92,137749,137541],{"class":151},[92,137751,51419],{"class":102},[92,137753,7632],{"class":207},[92,137755,1269],{"class":102},[92,137757,137758,137760,137762,137764],{"class":94,"line":1290},[92,137759,128149],{"class":151},[92,137761,51419],{"class":102},[92,137763,60851],{"class":151},[92,137765,1269],{"class":102},[92,137767,137768],{"class":94,"line":1296},[92,137769,1544],{"class":102},[92,137771,137772,137774,137776],{"class":94,"line":1308},[92,137773,51593],{"class":51282},[92,137775,137568],{"class":1942},[92,137777,15552],{"class":102},[92,137779,137780,137782,137784,137786],{"class":94,"line":1591},[92,137781,137541],{"class":151},[92,137783,51419],{"class":102},[92,137785,137579],{"class":207},[92,137787,1269],{"class":102},[92,137789,137790,137792,137794,137796],{"class":94,"line":1596},[92,137791,70887],{"class":151},[92,137793,51419],{"class":102},[92,137795,62052],{"class":151},[92,137797,1269],{"class":102},[92,137799,137800],{"class":94,"line":1602},[92,137801,1544],{"class":102},[38,137803,137804],{},"div {\nmargin: 0 auto;\n}",[83,137806,137809],{"className":137807,"code":137808,"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,137810,137808],{"__ignoreMap":10},[38,137812,137813],{},"如果想让多个元素都发生变化",[38,137815,137816],{},"不能如下操作：",[38,137818,137819],{},"transition: width 2s ease 0.5s;",[38,137821,137822],{},"transition: height 2s ease 0.5s;不对！！！",[38,137824,137825],{},"上方会样式冲突，导致不显示任何过渡效果",[38,137827,137828],{},"使用如下：加逗号隔开",[38,137830,137831],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[38,137833,137834],{},"transition all 2s ease;",[63,137836,137838],{"id":137837},"_1426-过渡练习","14.2.6 过渡练习",[46,137840,137841],{},[49,137842,137843],{},"进度条",[1441,137845],{"style":126389,"src":137846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[83,137848,137850],{"className":126533,"code":137849,"language":126535,"meta":10,"style":10},"div {\n  transition: all 0.3s ease;\n}\n",[89,137851,137852,137858,137876],{"__ignoreMap":10},[92,137853,137854,137856],{"class":94,"line":95},[92,137855,51593],{"class":51282},[92,137857,15552],{"class":102},[92,137859,137860,137863,137865,137867,137870,137872,137874],{"class":94,"line":11},[92,137861,137862],{"class":151},"  transition",[92,137864,51419],{"class":102},[92,137866,28103],{"class":151},[92,137868,137869],{"class":151}," 0.3",[92,137871,798],{"class":98},[92,137873,78662],{"class":151},[92,137875,1269],{"class":102},[92,137877,137878],{"class":94,"line":1158},[92,137879,1544],{"class":102},[46,137881,137882],{"start":11},[49,137883,137884],{},"小米logo",[38,137886,137887],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[83,137889,137891],{"className":126533,"code":137890,"language":126535,"meta":10,"style":10},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[89,137892,137893,137898,137904,137920,137925],{"__ignoreMap":10},[92,137894,137895],{"class":94,"line":95},[92,137896,137897],{"class":161},"\u002F* CSS3 过渡 *\u002F\n",[92,137899,137900,137902],{"class":94,"line":11},[92,137901,51593],{"class":51282},[92,137903,15552],{"class":102},[92,137905,137906,137908,137910,137912,137914,137916,137918],{"class":94,"line":1158},[92,137907,137862],{"class":151},[92,137909,51419],{"class":102},[92,137911,28103],{"class":151},[92,137913,137869],{"class":151},[92,137915,798],{"class":98},[92,137917,78662],{"class":151},[92,137919,1269],{"class":102},[92,137921,137922],{"class":94,"line":1173},[92,137923,137924],{"class":161},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[92,137926,137927],{"class":94,"line":1179},[92,137928,1544],{"class":102},[38,137930,137931],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5106,137933,137934],{},"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":137936},[137937,137942],{"id":136267,"depth":11,"text":136268,"children":137938},[137939,137940,137941],{"id":136271,"depth":1158,"text":136272},{"id":136348,"depth":1158,"text":136349},{"id":136679,"depth":1158,"text":136680},{"id":136970,"depth":11,"text":136971,"children":137943},[137944,137945],{"id":136974,"depth":1158,"text":136975},{"id":137837,"depth":1158,"text":137838},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136259,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137952,"title":137953,"body":137954,"description":23357,"extension":14,"meta":139698,"navigation":17,"path":139699,"seo":139700,"stem":139701,"__hash__":139702},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137955,"toc":139679},[137956,137959,137963,137966,137972,137978,137982,137984,137987,137990,137993,137996,137999,138002,138005,138009,138013,138016,138019,138022,138026,138029,138032,138037,138040,138043,138046,138050,138053,138062,138065,138068,138072,138075,138078,138083,138090,138104,138112,138119,138124,138127,138130,138133,138140,138144,138150,138156,138159,138162,138167,138173,138175,138183,138188,138191,138197,138199,138204,138209,138212,138214,138219,138222,138227,138232,138266,138270,138274,138277,138281,138284,138370,138373,138410,138413,138449,138453,138458,138471,138525,138527,138555,138557,138585,138591,138605,138607,138651,138653,138697,138700,138707,138718,138720,138747,138749,138775,138782,138798,138800,138894,138896,138990,138997,139000,139005,139011,139085,139088,139090,139126,139128,139164,139167,139174,139193,139196,139199,139201,139226,139228,139252,139255,139258,139288,139292,139295,139358,139360,139426,139428,139492,139495,139527,139529,139555,139557,139583,139586,139617,139619,139645,139647,139673,139676],[29,137957,137953],{"id":137958},"_15-品优购项目上篇-搭建与公共模块",[33,137960,137962],{"id":137961},"_151-项目规划","15.1 项目规划",[1441,137964],{"style":126389,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[38,137967,137968,137971],{},[252,137969,137970],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[38,137973,137974,137977],{},[252,137975,137976],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[33,137979,137981],{"id":137980},"_152-项目介绍","15.2 项目介绍",[38,137983,137970],{},[1441,137985],{"style":126389,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[38,137988,137989],{},"主页：",[1441,137991],{"style":126389,"src":137992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[38,137994,137995],{},"列表页：",[1441,137997],{"style":126389,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[38,138000,138001],{},"注册页：",[1441,138003],{"style":126389,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[33,138006,138008],{"id":138007},"_153-项目搭建工作","15.3 项目搭建工作",[63,138010,138012],{"id":138011},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1441,138014],{"style":126389,"src":138015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[38,138017,138018],{},"经常更换的图片要放到upload文件夹中",[38,138020,138021],{},"不经常换的放到images文件夹中",[63,138023,138025],{"id":138024},"_1532-创建文件如下","15.3.2 创建文件如下",[1441,138027],{"style":126389,"src":138028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1441,138030],{"style":126389,"src":138031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[38,138033,138034],{},[252,138035,138036],{},"初始化样式：",[38,138038,138039],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[38,138041,138042],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[38,138044,138045],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[63,138047,138049],{"id":138048},"_1533-项目模块化开发","15.3.3 项目模块化开发",[38,138051,138052],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[38,138054,138055,138056,138061],{},"这里最典型的应用就是 ",[252,138057,138058],{},[89,138059,138060],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1441,138063],{"style":126389,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[38,138066,138067],{},"通过link方法来引入",[63,138069,138071],{"id":138070},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1441,138073],{"style":126389,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[38,138076,138077],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[46,138079,138080],{},[49,138081,138082],{},"制作favicon图标",[38,138084,138085,138086,138089],{},"①把品优购图标切成 ",[89,138087,138088],{},"png"," 图片",[38,138091,138092,138093,138095,138096,138099,138100],{},"②把 ",[89,138094,138088],{}," 图片转换为 ",[89,138097,138098],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[341,138101,138102],{"href":138102,"rel":138103},"http:\u002F\u002Fwww.bitbug.net\u002F",[23846],[46,138105,138106,138109],{"start":11},[49,138107,138108],{},"favicon图标放到网站根目录下",[49,138110,138111],{},"HTML页面引入favicon",[38,138113,138114,138115,138118],{},"在html 页面里面的 ",[89,138116,138117],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[38,138120,138121],{},[89,138122,138123],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[38,138125,138126],{},"复制这行代码或者在生成这个的网站进行复制",[1441,138128],{"style":126389,"src":138129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[38,138131,138132],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[38,138134,138135,138136],{},"例如:",[341,138137,138138],{"href":138138,"rel":138139},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23846],[63,138141,138143],{"id":138142},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[38,138145,138146,138149],{},[252,138147,138148],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[38,138151,138152,138155],{},[252,138153,138154],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[38,138157,138158],{},"页面必须有三个标签用来符合 SEO 优化",[1441,138160],{"style":126389,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[46,138163,138164],{},[49,138165,138166],{},"title网站标题",[38,138168,138169,138172],{},[252,138170,138171],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[38,138174,68772],{},[1110,138176,138177,138180],{},[49,138178,138179],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[49,138181,138182],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[46,138184,138185],{"start":11},[49,138186,138187],{},"description网站描述",[38,138189,138190],{},"简要说明我们网站主要是做什么的",[38,138192,138193,138196],{},[252,138194,138195],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[38,138198,68772],{},[38,138200,138201],{},[89,138202,138203],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[46,138205,138206],{"start":1158},[49,138207,138208],{},"keywords关键词",[38,138210,138211],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[38,138213,68772],{},[38,138215,138216],{},[89,138217,138218],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[38,138220,138221],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[38,138223,138224],{},[252,138225,138226],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[46,138228,138229],{"start":1173},[49,138230,138231],{},"代码总结",[83,138233,138234],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,138235,138236,138240,138254,138258],{"__ignoreMap":10},[92,138237,138238],{"class":94,"line":95},[92,138239,130644],{"class":161},[92,138241,138242,138244,138246,138248,138250,138252],{"class":94,"line":11},[92,138243,1013],{"class":102},[92,138245,51593],{"class":51282},[92,138247,53468],{"class":1942},[92,138249,148],{"class":102},[92,138251,130657],{"class":207},[92,138253,51289],{"class":102},[92,138255,138256],{"class":94,"line":1158},[92,138257,130664],{"class":102},[92,138259,138260,138262,138264],{"class":94,"line":1173},[92,138261,51767],{"class":102},[92,138263,51593],{"class":51282},[92,138265,51289],{"class":102},[33,138267,138269],{"id":138268},"_154-项目公共部分制作","15.4 项目公共部分制作",[63,138271,138273],{"id":138272},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1441,138275],{"style":126389,"src":138276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[63,138278,138280],{"id":138279},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[38,138282,138283],{},"布局思路：",[1110,138285,138286,138289,138292,138314,138347],{},[49,138287,138288],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[49,138290,138291],{},"里面包含版心的盒子",[49,138293,138294,138295],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1110,138296,138297,138305,138311],{},[49,138298,138299,138300,21480,138302,138304],{},"1 号盒子 里面包含一个",[89,138301,1110],{},[89,138303,1110],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[49,138306,138307,138308,138310],{},"里面的内容是水平排列，所以需要给",[89,138309,49],{},"设置浮动",[49,138312,138313],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[49,138315,138316,138317],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1110,138318,138319,138333,138338],{},[49,138320,138321,138322,21480,138324,138326,138327,138329,138330,138332],{},"2 号盒子 里面包含一个",[89,138323,1110],{},[89,138325,1110],{},"包裹",[89,138328,49],{},"，中间的",[89,138331,1024],{},"可以用样式去设置，也可以用字符 |",[49,138334,138335,138336,138310],{},"里面内容水平排列，给",[89,138337,49],{},[49,138339,138340,138341,138343,138344,138346],{},"找到里面所有偶数的 ",[89,138342,49],{}," 设置样式（偶数的 ",[89,138345,49],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[49,138348,138349,138350],{},"需要用到字体图标",[1110,138351,138352,138358,138361,138364,138367],{},[49,138353,138354,138355],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[89,138356,138357],{},"arrow-icon",[49,138359,138360],{},"先要引入字体图片的资源",[49,138362,138363],{},"在样式里面利用 font-face 来进行声明",[49,138365,138366],{},"在伪元素的 content属性设置 图标的编码",[49,138368,138369],{},"给伪元素设置font-family属性",[38,138371,138372],{},"结构实例代码：",[83,138374,138376],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},"div::before {\n  content: \"\";\n  display: block;\n}\n",[89,138377,138378,138386,138396,138406],{"__ignoreMap":10},[92,138379,138380,138382,138384],{"class":94,"line":95},[92,138381,51593],{"class":51282},[92,138383,137534],{"class":1942},[92,138385,15552],{"class":102},[92,138387,138388,138390,138392,138394],{"class":94,"line":11},[92,138389,137541],{"class":151},[92,138391,51419],{"class":102},[92,138393,7632],{"class":207},[92,138395,1269],{"class":102},[92,138397,138398,138400,138402,138404],{"class":94,"line":1158},[92,138399,128149],{"class":151},[92,138401,51419],{"class":102},[92,138403,60851],{"class":151},[92,138405,1269],{"class":102},[92,138407,138408],{"class":94,"line":1173},[92,138409,1544],{"class":102},[38,138411,138412],{},"样式实例代码：",[83,138414,138415],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,138416,138417,138425,138435,138445],{"__ignoreMap":10},[92,138418,138419,138421,138423],{"class":94,"line":95},[92,138420,51593],{"class":51282},[92,138422,137534],{"class":1942},[92,138424,15552],{"class":102},[92,138426,138427,138429,138431,138433],{"class":94,"line":11},[92,138428,137541],{"class":151},[92,138430,51419],{"class":102},[92,138432,7632],{"class":207},[92,138434,1269],{"class":102},[92,138436,138437,138439,138441,138443],{"class":94,"line":1158},[92,138438,128149],{"class":151},[92,138440,51419],{"class":102},[92,138442,60851],{"class":151},[92,138444,1269],{"class":102},[92,138446,138447],{"class":94,"line":1173},[92,138448,1544],{"class":102},[63,138450,138452],{"id":138451},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1110,138454,138455],{},[49,138456,138457],{},"header 盒子必须要有高度",[38,138459,138460,138461,138463,138464],{},"1 号盒子是 ",[89,138462,131545],{}," 标志定位，在正常开发过程中， ",[252,138465,138466,138467,138470],{},"logo的布局其实是有讲究的，需要进行 ",[89,138468,138469],{},"logoSEO","的优化 （★★★）",[1110,138472,138473,138481,138489,138516],{},[49,138474,138475,138477,138478,138480],{},[89,138476,131545],{}," 里面首先放一个 ",[89,138479,29],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[49,138482,138483,138485,138486,138488],{},[89,138484,29],{}," 里面再放一个链接，可以返回首页的，把 ",[89,138487,131545],{}," 的背景图片给链接即可",[49,138490,138491,138492],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1110,138493,138494,138509],{},[49,138495,138496,138497,138500,138501,138504,138505,138508],{},"方法1：",[89,138498,138499],{},"text-indent"," 移到盒子外面（",[89,138502,138503],{},"text-indent: -9999px",") ，然后 ",[89,138506,138507],{},"overflow:hidden"," ，淘宝的做法",[49,138510,138511,138512,138515],{},"方法2：直接给 ",[89,138513,138514],{},"font-size: 0;"," 就看不到文字了，京东的做法",[49,138517,138518,138519,138521,138522,138524],{},"最后给链接一个 ",[89,138520,51389],{}," 属性，这样鼠标放到 ",[89,138523,131545],{}," 上就可以看到提示文字了",[38,138526,138372],{},[83,138528,138529],{"className":127280,"code":131766,"language":127282,"meta":10,"style":10},[89,138530,138531],{"__ignoreMap":10},[92,138532,138533,138535,138537,138539,138541,138543,138545,138547,138549,138551,138553],{"class":94,"line":95},[92,138534,1013],{"class":102},[92,138536,341],{"class":51282},[92,138538,61039],{"class":1942},[92,138540,148],{"class":102},[92,138542,131781],{"class":207},[92,138544,131784],{"class":1942},[92,138546,148],{"class":102},[92,138548,131789],{"class":207},[92,138550,131792],{"class":102},[92,138552,341],{"class":51282},[92,138554,51289],{"class":102},[38,138556,138412],{},[83,138558,138559],{"className":127280,"code":131766,"language":127282,"meta":10,"style":10},[89,138560,138561],{"__ignoreMap":10},[92,138562,138563,138565,138567,138569,138571,138573,138575,138577,138579,138581,138583],{"class":94,"line":95},[92,138564,1013],{"class":102},[92,138566,341],{"class":51282},[92,138568,61039],{"class":1942},[92,138570,148],{"class":102},[92,138572,131781],{"class":207},[92,138574,131784],{"class":1942},[92,138576,148],{"class":102},[92,138578,131789],{"class":207},[92,138580,131792],{"class":102},[92,138582,341],{"class":51282},[92,138584,51289],{"class":102},[38,138586,138587,138588,138590],{},"2 号盒子是 ",[89,138589,131558],{}," 搜索模块定位",[1110,138592,138593,138596,138599,138602],{},[49,138594,138595],{},"search盒子利用定位的方式放在对应的位置",[49,138597,138598],{},"search盒子设置绝对定位，header盒子设置相对定位",[49,138600,138601],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[49,138603,138604],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[38,138606,138372],{},[83,138608,138609],{"className":126533,"code":131853,"language":126535,"meta":10,"style":10},[89,138610,138611,138633,138637,138647],{"__ignoreMap":10},[92,138612,138613,138615,138617,138619,138621,138623,138625,138627,138629,138631],{"class":94,"line":95},[92,138614,51593],{"class":51282},[92,138616,12415],{"class":102},[92,138618,38],{"class":51282},[92,138620,12415],{"class":102},[92,138622,29],{"class":51282},[92,138624,12415],{"class":102},[92,138626,1110],{"class":51282},[92,138628,12415],{"class":102},[92,138630,49],{"class":51282},[92,138632,15552],{"class":102},[92,138634,138635],{"class":94,"line":11},[92,138636,131882],{"class":161},[92,138638,138639,138641,138643,138645],{"class":94,"line":1158},[92,138640,128149],{"class":151},[92,138642,51419],{"class":102},[92,138644,60851],{"class":151},[92,138646,1269],{"class":102},[92,138648,138649],{"class":94,"line":1173},[92,138650,1544],{"class":102},[38,138652,138412],{},[83,138654,138655],{"className":126533,"code":131853,"language":126535,"meta":10,"style":10},[89,138656,138657,138679,138683,138693],{"__ignoreMap":10},[92,138658,138659,138661,138663,138665,138667,138669,138671,138673,138675,138677],{"class":94,"line":95},[92,138660,51593],{"class":51282},[92,138662,12415],{"class":102},[92,138664,38],{"class":51282},[92,138666,12415],{"class":102},[92,138668,29],{"class":51282},[92,138670,12415],{"class":102},[92,138672,1110],{"class":51282},[92,138674,12415],{"class":102},[92,138676,49],{"class":51282},[92,138678,15552],{"class":102},[92,138680,138681],{"class":94,"line":11},[92,138682,131882],{"class":161},[92,138684,138685,138687,138689,138691],{"class":94,"line":1158},[92,138686,128149],{"class":151},[92,138688,51419],{"class":102},[92,138690,60851],{"class":151},[92,138692,1269],{"class":102},[92,138694,138695],{"class":94,"line":1173},[92,138696,1544],{"class":102},[38,138698,138699],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[38,138701,138702,138703,138706],{},"3 号盒子是 ",[89,138704,138705],{},"hotwords"," 热词模块定位",[1110,138708,138709,138712,138715],{},[49,138710,138711],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[49,138713,138714],{},"给里面所有的a标签设置 左右10px的外边距",[49,138716,138717],{},"给第一个a标签设置文字变红色（#c81623）",[38,138719,138372],{},[83,138721,138723],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},"div {\n  margin: 0 auto;\n}\n",[89,138724,138725,138731,138743],{"__ignoreMap":10},[92,138726,138727,138729],{"class":94,"line":95},[92,138728,51593],{"class":51282},[92,138730,15552],{"class":102},[92,138732,138733,138735,138737,138739,138741],{"class":94,"line":11},[92,138734,70452],{"class":151},[92,138736,51419],{"class":102},[92,138738,294],{"class":151},[92,138740,51538],{"class":151},[92,138742,1269],{"class":102},[92,138744,138745],{"class":94,"line":1158},[92,138746,1544],{"class":102},[38,138748,138412],{},[83,138750,138751],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,138752,138753,138759,138771],{"__ignoreMap":10},[92,138754,138755,138757],{"class":94,"line":95},[92,138756,51593],{"class":51282},[92,138758,15552],{"class":102},[92,138760,138761,138763,138765,138767,138769],{"class":94,"line":11},[92,138762,70452],{"class":151},[92,138764,51419],{"class":102},[92,138766,294],{"class":151},[92,138768,51538],{"class":151},[92,138770,1269],{"class":102},[92,138772,138773],{"class":94,"line":1158},[92,138774,1544],{"class":102},[38,138776,138777,138778,138781],{},"4 号盒子是 ",[89,138779,138780],{},"shopcar"," 购物车模块",[1110,138783,138784,138789,138792,138795],{},[49,138785,123316,138786,138788],{},[89,138787,138780],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[49,138790,138791],{},"count 统计部分用绝对定位做",[49,138793,138794],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[49,138796,138797],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[38,138799,138372],{},[83,138801,138802],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,138803,138804,138808,138822,138826,138840,138844,138858,138862,138876,138880],{"__ignoreMap":10},[92,138805,138806],{"class":94,"line":95},[92,138807,131972],{"class":161},[92,138809,138810,138812,138814,138816,138818,138820],{"class":94,"line":11},[92,138811,131977],{"class":1942},[92,138813,79789],{"class":102},[92,138815,128893],{"class":151},[92,138817,51419],{"class":102},[92,138819,131986],{"class":151},[92,138821,129463],{"class":102},[92,138823,138824],{"class":94,"line":1158},[92,138825,131993],{"class":161},[92,138827,138828,138830,138832,138834,138836,138838],{"class":94,"line":1173},[92,138829,131998],{"class":1942},[92,138831,79789],{"class":102},[92,138833,128893],{"class":151},[92,138835,51419],{"class":102},[92,138837,54746],{"class":151},[92,138839,129463],{"class":102},[92,138841,138842],{"class":94,"line":1179},[92,138843,132013],{"class":161},[92,138845,138846,138848,138850,138852,138854,138856],{"class":94,"line":1193},[92,138847,132018],{"class":1942},[92,138849,79789],{"class":102},[92,138851,128893],{"class":151},[92,138853,51419],{"class":102},[92,138855,54813],{"class":151},[92,138857,129463],{"class":102},[92,138859,138860],{"class":94,"line":1199},[92,138861,132033],{"class":161},[92,138863,138864,138866,138868,138870,138872,138874],{"class":94,"line":1290},[92,138865,132038],{"class":1942},[92,138867,79789],{"class":102},[92,138869,128893],{"class":151},[92,138871,51419],{"class":102},[92,138873,86215],{"class":151},[92,138875,129463],{"class":102},[92,138877,138878],{"class":94,"line":1296},[92,138879,132053],{"class":161},[92,138881,138882,138884,138886,138888,138890,138892],{"class":94,"line":1308},[92,138883,132058],{"class":1942},[92,138885,79789],{"class":102},[92,138887,128893],{"class":151},[92,138889,51419],{"class":102},[92,138891,132067],{"class":151},[92,138893,129463],{"class":102},[38,138895,138412],{},[83,138897,138898],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,138899,138900,138904,138918,138922,138936,138940,138954,138958,138972,138976],{"__ignoreMap":10},[92,138901,138902],{"class":94,"line":95},[92,138903,131972],{"class":161},[92,138905,138906,138908,138910,138912,138914,138916],{"class":94,"line":11},[92,138907,131977],{"class":1942},[92,138909,79789],{"class":102},[92,138911,128893],{"class":151},[92,138913,51419],{"class":102},[92,138915,131986],{"class":151},[92,138917,129463],{"class":102},[92,138919,138920],{"class":94,"line":1158},[92,138921,131993],{"class":161},[92,138923,138924,138926,138928,138930,138932,138934],{"class":94,"line":1173},[92,138925,131998],{"class":1942},[92,138927,79789],{"class":102},[92,138929,128893],{"class":151},[92,138931,51419],{"class":102},[92,138933,54746],{"class":151},[92,138935,129463],{"class":102},[92,138937,138938],{"class":94,"line":1179},[92,138939,132013],{"class":161},[92,138941,138942,138944,138946,138948,138950,138952],{"class":94,"line":1193},[92,138943,132018],{"class":1942},[92,138945,79789],{"class":102},[92,138947,128893],{"class":151},[92,138949,51419],{"class":102},[92,138951,54813],{"class":151},[92,138953,129463],{"class":102},[92,138955,138956],{"class":94,"line":1199},[92,138957,132033],{"class":161},[92,138959,138960,138962,138964,138966,138968,138970],{"class":94,"line":1290},[92,138961,132038],{"class":1942},[92,138963,79789],{"class":102},[92,138965,128893],{"class":151},[92,138967,51419],{"class":102},[92,138969,86215],{"class":151},[92,138971,129463],{"class":102},[92,138973,138974],{"class":94,"line":1296},[92,138975,132053],{"class":161},[92,138977,138978,138980,138982,138984,138986,138988],{"class":94,"line":1308},[92,138979,132058],{"class":1942},[92,138981,79789],{"class":102},[92,138983,128893],{"class":151},[92,138985,51419],{"class":102},[92,138987,132067],{"class":151},[92,138989,129463],{"class":102},[63,138991,138993,138994,138996],{"id":138992},"_1544-nav导航模块制作","15.4.4 ",[89,138995,53695],{},"导航模块制作",[1441,138998],{"style":126389,"src":138999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[38,139001,139002,139004],{},[89,139003,53695],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[38,139006,139007,139008],{},"1 号盒子左侧浮动，",[89,139009,139010],{},"dropdown",[1110,139012,139013,139023,139031,139037,139045,139055,139063,139074],{},[49,139014,139015,139016,100999,139019,139022],{},"1号盒子有讲究，根据相关性 里面包含 ",[89,139017,139018],{},".dt",[89,139020,139021],{},".dd"," 两个盒子",[49,139024,139025,139027,139028,139030],{},[89,139026,139018],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[89,139029,139021],{}," 挤到下面去了",[49,139032,139033,139034,139036],{},"给 ",[89,139035,139021],{}," 盒子设置宽度 和 高度，以及背景颜色",[49,139038,139033,139039,139041,139042,120218],{},[89,139040,139021],{}," 盒子里面定义 无序列表 （",[89,139043,139044],{},"ul > li > a",[49,139046,139047,139048,139050,139051,139054],{},"每个 ",[89,139049,49],{}," 都有一个高度（",[89,139052,139053],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[49,139056,139033,139057,139059,139060,120218],{},[89,139058,49],{}," 里面的a设置文字大小（",[89,139061,139062],{},"14px",[49,139064,139033,139065,139067,139068,139070,139071,139073],{},[89,139066,49],{}," 设置 ",[89,139069,127694],{},"，当鼠标移入的时候，让",[89,139072,49],{},"的背景变成白色，让里面的文字变成红色",[49,139075,139076,139078,139079,139081,139082,139084],{},[89,139077,49],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[89,139080,49],{},"的右侧，那么给",[89,139083,49],{},"设置相对定位",[38,139086,139087],{},"一定要注意相关性",[38,139089,138372],{},[83,139091,139092],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,139093,139094,139102,139112,139122],{"__ignoreMap":10},[92,139095,139096,139098,139100],{"class":94,"line":95},[92,139097,51593],{"class":51282},[92,139099,137534],{"class":1942},[92,139101,15552],{"class":102},[92,139103,139104,139106,139108,139110],{"class":94,"line":11},[92,139105,137541],{"class":151},[92,139107,51419],{"class":102},[92,139109,7632],{"class":207},[92,139111,1269],{"class":102},[92,139113,139114,139116,139118,139120],{"class":94,"line":1158},[92,139115,128149],{"class":151},[92,139117,51419],{"class":102},[92,139119,60851],{"class":151},[92,139121,1269],{"class":102},[92,139123,139124],{"class":94,"line":1173},[92,139125,1544],{"class":102},[38,139127,138412],{},[83,139129,139130],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,139131,139132,139140,139150,139160],{"__ignoreMap":10},[92,139133,139134,139136,139138],{"class":94,"line":95},[92,139135,51593],{"class":51282},[92,139137,137534],{"class":1942},[92,139139,15552],{"class":102},[92,139141,139142,139144,139146,139148],{"class":94,"line":11},[92,139143,137541],{"class":151},[92,139145,51419],{"class":102},[92,139147,7632],{"class":207},[92,139149,1269],{"class":102},[92,139151,139152,139154,139156,139158],{"class":94,"line":1158},[92,139153,128149],{"class":151},[92,139155,51419],{"class":102},[92,139157,60851],{"class":151},[92,139159,1269],{"class":102},[92,139161,139162],{"class":94,"line":1173},[92,139163,1544],{"class":102},[38,139165,139166],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[38,139168,139169,139170,139173],{},"2 号盒子左侧浮动，",[89,139171,139172],{},"navitems"," 导航栏组",[1110,139175,139176,139181,139190],{},[49,139177,139178,139179],{},"里面结构是 ",[89,139180,139044],{},[49,139182,139183,139184,139186,139187,139189],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[89,139185,341],{},"左右的",[89,139188,30865],{},"把两侧撑开",[49,139191,139192],{},"让文字垂直居中（行高等于高度）",[1441,139194],{"style":126389,"src":139195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[38,139197,139198],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[38,139200,138372],{},[83,139202,139204],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},".box {\n  float: left;\n}\n",[89,139205,139206,139212,139222],{"__ignoreMap":10},[92,139207,139208,139210],{"class":94,"line":95},[92,139209,130381],{"class":1942},[92,139211,15552],{"class":102},[92,139213,139214,139216,139218,139220],{"class":94,"line":11},[92,139215,131013],{"class":151},[92,139217,51419],{"class":102},[92,139219,23717],{"class":151},[92,139221,1269],{"class":102},[92,139223,139224],{"class":94,"line":1158},[92,139225,1544],{"class":102},[38,139227,138412],{},[83,139229,139230],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,139231,139232,139238,139248],{"__ignoreMap":10},[92,139233,139234,139236],{"class":94,"line":95},[92,139235,130381],{"class":1942},[92,139237,15552],{"class":102},[92,139239,139240,139242,139244,139246],{"class":94,"line":11},[92,139241,131013],{"class":151},[92,139243,51419],{"class":102},[92,139245,23717],{"class":151},[92,139247,1269],{"class":102},[92,139249,139250],{"class":94,"line":1158},[92,139251,1544],{"class":102},[38,139253,139254],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1441,139256],{"style":126389,"src":139257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[83,139259,139260],{"className":126533,"code":130690,"language":126535,"meta":10,"style":10},[89,139261,139262,139268,139284],{"__ignoreMap":10},[92,139263,139264,139266],{"class":94,"line":95},[92,139265,51593],{"class":51282},[92,139267,15552],{"class":102},[92,139269,139270,139272,139274,139276,139278,139280,139282],{"class":94,"line":11},[92,139271,70878],{"class":151},[92,139273,51419],{"class":102},[92,139275,320],{"class":151},[92,139277,51474],{"class":98},[92,139279,51503],{"class":151},[92,139281,129925],{"class":151},[92,139283,1269],{"class":102},[92,139285,139286],{"class":94,"line":1158},[92,139287,1544],{"class":102},[63,139289,139291],{"id":139290},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1441,139293],{"style":126389,"src":139294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1110,139296,139297,139302,139307],{},[49,139298,139299,139301],{},[89,139300,131736],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[49,139303,139304,139306],{},[89,139305,131736],{}," 里面有一个大的版心",[49,139308,139309,139310,139313,139314],{},"版心里面包含 1 号盒子，",[89,139311,139312],{},"mod_service"," 是服务模块，mod 是模块的意思",[1110,139315,139316,139321,139334,139350,139355],{},[49,139317,139033,139318,139320],{},[89,139319,139312],{}," 设置高度（80px）和下边框",[49,139322,139323,139324,139327,139328,139330,139331,139333],{},"在里面定义 ",[89,139325,139326],{},"ul > li"," ,每个",[89,139329,49],{}," 宽度是300px 高度是 50px，给每个",[89,139332,49],{},"设置35px的左内边距",[49,139335,139336,139337,139339,139340,139342,139343,139345,139346,18390,139348,120218],{},"在每个",[89,139338,49],{},"里面，放一个 ",[89,139341,22890],{},"（里面放图标），一个",[89,139344,51593],{},"（里面放",[89,139347,51593],{},[89,139349,38],{},[49,139351,139033,139352,139354],{},[89,139353,22890],{},"设置浮动，让h5与这个div左右排列",[49,139356,139357],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[38,139359,138372],{},[83,139361,139363],{"className":126533,"code":139362,"language":126535,"meta":10,"style":10},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[89,139364,139365,139371,139383,139395,139422],{"__ignoreMap":10},[92,139366,139367,139369],{"class":94,"line":95},[92,139368,134290],{"class":1942},[92,139370,15552],{"class":102},[92,139372,139373,139375,139377,139379,139381],{"class":94,"line":11},[92,139374,70550],{"class":151},[92,139376,51419],{"class":102},[92,139378,803],{"class":151},[92,139380,51474],{"class":98},[92,139382,1269],{"class":102},[92,139384,139385,139387,139389,139391,139393],{"class":94,"line":1158},[92,139386,70770],{"class":151},[92,139388,51419],{"class":102},[92,139390,803],{"class":151},[92,139392,51474],{"class":98},[92,139394,1269],{"class":102},[92,139396,139397,139399,139401,139403,139405,139407,139409,139411,139414,139416,139418,139420],{"class":94,"line":1173},[92,139398,70593],{"class":151},[92,139400,51419],{"class":102},[92,139402,61708],{"class":151},[92,139404,103],{"class":102},[92,139406,134329],{"class":5196},[92,139408,13694],{"class":102},[92,139410,61718],{"class":151},[92,139412,139413],{"class":151}," -10",[92,139415,51474],{"class":98},[92,139417,134348],{"class":151},[92,139419,51474],{"class":98},[92,139421,1269],{"class":102},[92,139423,139424],{"class":94,"line":1179},[92,139425,1544],{"class":102},[38,139427,138412],{},[83,139429,139430],{"className":126533,"code":139362,"language":126535,"meta":10,"style":10},[89,139431,139432,139438,139450,139462,139488],{"__ignoreMap":10},[92,139433,139434,139436],{"class":94,"line":95},[92,139435,134290],{"class":1942},[92,139437,15552],{"class":102},[92,139439,139440,139442,139444,139446,139448],{"class":94,"line":11},[92,139441,70550],{"class":151},[92,139443,51419],{"class":102},[92,139445,803],{"class":151},[92,139447,51474],{"class":98},[92,139449,1269],{"class":102},[92,139451,139452,139454,139456,139458,139460],{"class":94,"line":1158},[92,139453,70770],{"class":151},[92,139455,51419],{"class":102},[92,139457,803],{"class":151},[92,139459,51474],{"class":98},[92,139461,1269],{"class":102},[92,139463,139464,139466,139468,139470,139472,139474,139476,139478,139480,139482,139484,139486],{"class":94,"line":1173},[92,139465,70593],{"class":151},[92,139467,51419],{"class":102},[92,139469,61708],{"class":151},[92,139471,103],{"class":102},[92,139473,134329],{"class":5196},[92,139475,13694],{"class":102},[92,139477,61718],{"class":151},[92,139479,139413],{"class":151},[92,139481,51474],{"class":98},[92,139483,134348],{"class":151},[92,139485,51474],{"class":98},[92,139487,1269],{"class":102},[92,139489,139490],{"class":94,"line":1179},[92,139491,1544],{"class":102},[38,139493,139494],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1110,139496,139497,139500,139506,139512,139524],{},[49,139498,139499],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[49,139501,139502,139503,120218],{},"里面的布局利用 自定义列表来实现（",[89,139504,139505],{},"dl > dt + dd",[49,139507,139033,139508,139511],{},[89,139509,139510],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[49,139513,139033,139514,139517,139518,18390,139520,139523],{},[89,139515,139516],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[89,139519,139516],{},[89,139521,139522],{},"dd","之间有些距离",[49,139525,139526],{},"最后一个 dl 结构和样式不一样，需要单独设置",[38,139528,138372],{},[83,139530,139531],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,139532,139533,139539,139551],{"__ignoreMap":10},[92,139534,139535,139537],{"class":94,"line":95},[92,139536,51593],{"class":51282},[92,139538,15552],{"class":102},[92,139540,139541,139543,139545,139547,139549],{"class":94,"line":11},[92,139542,70452],{"class":151},[92,139544,51419],{"class":102},[92,139546,294],{"class":151},[92,139548,51538],{"class":151},[92,139550,1269],{"class":102},[92,139552,139553],{"class":94,"line":1158},[92,139554,1544],{"class":102},[38,139556,138412],{},[83,139558,139559],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,139560,139561,139567,139579],{"__ignoreMap":10},[92,139562,139563,139565],{"class":94,"line":95},[92,139564,51593],{"class":51282},[92,139566,15552],{"class":102},[92,139568,139569,139571,139573,139575,139577],{"class":94,"line":11},[92,139570,70452],{"class":151},[92,139572,51419],{"class":102},[92,139574,294],{"class":151},[92,139576,51538],{"class":151},[92,139578,1269],{"class":102},[92,139580,139581],{"class":94,"line":1158},[92,139582,1544],{"class":102},[38,139584,139585],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1110,139587,139588,139597,139600,139611],{},[49,139589,139590,139591,139593,139594,139596],{},"分为上下两块，上面是 ",[89,139592,131753],{}," 友情链接，下面是 ",[89,139595,131746],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[49,139598,139599],{},"把内容分别复制到相应模块中",[49,139601,139033,139602,139604,139605,139607,139608,139610],{},[89,139603,131753],{}," 设置 15px 的下外边距，给",[89,139606,131753],{}," 里面 的 ",[89,139609,341],{}," 标签设置 左右 3px 的外边距",[49,139612,139613,139614,139616],{},"给",[89,139615,131746],{}," 设置 20px 的行高",[38,139618,138372],{},[83,139620,139621],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,139622,139623,139629,139641],{"__ignoreMap":10},[92,139624,139625,139627],{"class":94,"line":95},[92,139626,51593],{"class":51282},[92,139628,15552],{"class":102},[92,139630,139631,139633,139635,139637,139639],{"class":94,"line":11},[92,139632,70452],{"class":151},[92,139634,51419],{"class":102},[92,139636,294],{"class":151},[92,139638,51538],{"class":151},[92,139640,1269],{"class":102},[92,139642,139643],{"class":94,"line":1158},[92,139644,1544],{"class":102},[38,139646,138412],{},[83,139648,139649],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,139650,139651,139657,139669],{"__ignoreMap":10},[92,139652,139653,139655],{"class":94,"line":95},[92,139654,51593],{"class":51282},[92,139656,15552],{"class":102},[92,139658,139659,139661,139663,139665,139667],{"class":94,"line":11},[92,139660,70452],{"class":151},[92,139662,51419],{"class":102},[92,139664,294],{"class":151},[92,139666,51538],{"class":151},[92,139668,1269],{"class":102},[92,139670,139671],{"class":94,"line":1158},[92,139672,1544],{"class":102},[38,139674,139675],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5106,139677,139678],{},"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":139680},[139681,139682,139683,139690],{"id":137961,"depth":11,"text":137962},{"id":137980,"depth":11,"text":137981},{"id":138007,"depth":11,"text":138008,"children":139684},[139685,139686,139687,139688,139689],{"id":138011,"depth":1158,"text":138012},{"id":138024,"depth":1158,"text":138025},{"id":138048,"depth":1158,"text":138049},{"id":138070,"depth":1158,"text":138071},{"id":138142,"depth":1158,"text":138143},{"id":138268,"depth":11,"text":138269,"children":139691},[139692,139693,139694,139695,139697],{"id":138272,"depth":1158,"text":138273},{"id":138279,"depth":1158,"text":138280},{"id":138451,"depth":1158,"text":138452},{"id":138992,"depth":1158,"text":139696},"15.4.4 nav导航模块制作",{"id":139290,"depth":1158,"text":139291},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137953,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139704,"title":139705,"body":139706,"description":23357,"extension":14,"meta":142108,"navigation":17,"path":142109,"seo":142110,"stem":142111,"__hash__":142112},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139707,"toc":142085},[139708,139711,139715,139719,139731,139734,139737,139740,139751,139753,139777,139779,139803,139808,139811,139813,139849,139851,139887,139890,139895,139898,139901,139904,139934,139941,139944,139954,139956,139990,139993,140027,140033,140050,140052,140088,140090,140126,140131,140156,140158,140184,140186,140210,140217,140220,140284,140286,140328,140330,140370,140377,140382,140384,140414,140416,140446,140450,140453,140460,140472,140474,140500,140502,140526,140529,140531,140555,140561,140571,140573,140603,140605,140635,140642,140683,140685,140721,140723,140759,140763,140766,140769,140772,140778,140783,140786,140809,140812,140836,140839,140863,140868,140871,140874,140877,140880,140883,140957,140959,140989,140991,141021,141024,141027,141059,141063,141067,141081,141090,141093,141098,141100,141194,141196,141290,141313,141315,141339,141341,141365,141372,141375,141385,141387,141411,141416,141424,141426,141456,141461,141501,141503,141529,141531,141557,141561,141564,141569,141572,141576,141584,141591,141599,141601,141631,141633,141663,141671,141674,141677,141679,141709,141711,141741,141744,141749,141751,141775,141777,141801,141804,141889,141891,141915,141917,141941,141945,141947,141971,141973,142007,142011,142025,142028,142033,142036,142041,142044,142074,142082],[29,139709,139705],{"id":139710},"_16-品优购项目下篇-主体与页面开发",[33,139712,139714],{"id":139713},"_161-项目主体模块制作","16.1 项目主体模块制作",[63,139716,139718],{"id":139717},"_1611-首页制作","16.1.1 首页制作",[38,139720,139721,139723,139724,139726,139727,139730],{},[252,139722,102039],{}," 主体模块是 ",[252,139725,74040],{}," 里面专有的，注意需要新的样式文件 ",[252,139728,139729],{},"index.css，"," 就不要写在common.css中了",[1441,139732],{"style":126389,"src":139733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1441,139735],{"style":126389,"src":139736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[38,139738,139739],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1110,139741,139742,139745,139748],{},[49,139743,139744],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[49,139746,139747],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[49,139749,139750],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[38,139752,138372],{},[83,139754,139755],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,139756,139757,139763,139773],{"__ignoreMap":10},[92,139758,139759,139761],{"class":94,"line":95},[92,139760,130381],{"class":1942},[92,139762,15552],{"class":102},[92,139764,139765,139767,139769,139771],{"class":94,"line":11},[92,139766,131013],{"class":151},[92,139768,51419],{"class":102},[92,139770,23717],{"class":151},[92,139772,1269],{"class":102},[92,139774,139775],{"class":94,"line":1158},[92,139776,1544],{"class":102},[38,139778,138412],{},[83,139780,139781],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,139782,139783,139789,139799],{"__ignoreMap":10},[92,139784,139785,139787],{"class":94,"line":95},[92,139786,130381],{"class":1942},[92,139788,15552],{"class":102},[92,139790,139791,139793,139795,139797],{"class":94,"line":11},[92,139792,131013],{"class":151},[92,139794,51419],{"class":102},[92,139796,23717],{"class":151},[92,139798,1269],{"class":102},[92,139800,139801],{"class":94,"line":1158},[92,139802,1544],{"class":102},[46,139804,139805],{},[49,139806,139807],{},"左侧focus模块制作",[1441,139809],{"style":126389,"src":139810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[38,139812,138372],{},[83,139814,139815],{"className":126533,"code":127856,"language":126535,"meta":10,"style":10},[89,139816,139817,139825,139835,139845],{"__ignoreMap":10},[92,139818,139819,139821,139823],{"class":94,"line":95},[92,139820,53803],{"class":51282},[92,139822,61882],{"class":1942},[92,139824,15552],{"class":102},[92,139826,139827,139829,139831,139833],{"class":94,"line":11},[92,139828,127871],{"class":151},[92,139830,51419],{"class":102},[92,139832,54871],{"class":151},[92,139834,1269],{"class":102},[92,139836,139837,139839,139841,139843],{"class":94,"line":1158},[92,139838,70780],{"class":151},[92,139840,51419],{"class":102},[92,139842,54719],{"class":151},[92,139844,1269],{"class":102},[92,139846,139847],{"class":94,"line":1173},[92,139848,1544],{"class":102},[38,139850,138412],{},[83,139852,139853],{"className":126533,"code":127856,"language":126535,"meta":10,"style":10},[89,139854,139855,139863,139873,139883],{"__ignoreMap":10},[92,139856,139857,139859,139861],{"class":94,"line":95},[92,139858,53803],{"class":51282},[92,139860,61882],{"class":1942},[92,139862,15552],{"class":102},[92,139864,139865,139867,139869,139871],{"class":94,"line":11},[92,139866,127871],{"class":151},[92,139868,51419],{"class":102},[92,139870,54871],{"class":151},[92,139872,1269],{"class":102},[92,139874,139875,139877,139879,139881],{"class":94,"line":1158},[92,139876,70780],{"class":151},[92,139878,51419],{"class":102},[92,139880,54719],{"class":151},[92,139882,1269],{"class":102},[92,139884,139885],{"class":94,"line":1173},[92,139886,1544],{"class":102},[38,139888,139889],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[46,139891,139892],{"start":11},[49,139893,139894],{},"右侧newsflash模块制作",[1441,139896],{"style":126389,"src":139897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[38,139899,139900],{},"右侧的模块 分为上中下三个盒子",[38,139902,139903],{},"结构代码：",[83,139905,139906],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,139907,139908],{"__ignoreMap":10},[92,139909,139910,139912,139914,139916,139918,139920,139922,139924,139926,139928,139930,139932],{"class":94,"line":95},[92,139911,1013],{"class":102},[92,139913,1441],{"class":51282},[92,139915,55221],{"class":1942},[92,139917,148],{"class":102},[92,139919,134050],{"class":207},[92,139921,55229],{"class":1942},[92,139923,148],{"class":102},[92,139925,134057],{"class":207},[92,139927,134060],{"class":1942},[92,139929,148],{"class":102},[92,139931,134065],{"class":207},[92,139933,51289],{"class":102},[38,139935,139936,139937,139940],{},"1 号盒子为 ",[89,139938,139939],{},"news"," 新闻模块 高度为 165px",[1441,139942],{"style":126389,"src":139943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[38,139945,139946,139947,139950,139951],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[89,139948,139949],{},"news-hd","，下面是 ",[89,139952,139953],{},"news-bd",[38,139955,139903],{},[83,139957,139958],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,139959,139960,139964,139978,139982],{"__ignoreMap":10},[92,139961,139962],{"class":94,"line":95},[92,139963,130644],{"class":161},[92,139965,139966,139968,139970,139972,139974,139976],{"class":94,"line":11},[92,139967,1013],{"class":102},[92,139969,51593],{"class":51282},[92,139971,53468],{"class":1942},[92,139973,148],{"class":102},[92,139975,130657],{"class":207},[92,139977,51289],{"class":102},[92,139979,139980],{"class":94,"line":1158},[92,139981,130664],{"class":102},[92,139983,139984,139986,139988],{"class":94,"line":1173},[92,139985,51767],{"class":102},[92,139987,51593],{"class":51282},[92,139989,51289],{"class":102},[38,139991,139992],{},"样式代码：",[83,139994,139995],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,139996,139997,140001,140015,140019],{"__ignoreMap":10},[92,139998,139999],{"class":94,"line":95},[92,140000,130644],{"class":161},[92,140002,140003,140005,140007,140009,140011,140013],{"class":94,"line":11},[92,140004,1013],{"class":102},[92,140006,51593],{"class":51282},[92,140008,53468],{"class":1942},[92,140010,148],{"class":102},[92,140012,130657],{"class":207},[92,140014,51289],{"class":102},[92,140016,140017],{"class":94,"line":1158},[92,140018,130664],{"class":102},[92,140020,140021,140023,140025],{"class":94,"line":1173},[92,140022,51767],{"class":102},[92,140024,51593],{"class":51282},[92,140026,51289],{"class":102},[38,140028,140029,140030,140032],{},"上面是",[89,140031,139949],{},"，设置高度是 33px，设置下边框",[1110,140034,140035,140041],{},[49,140036,140037,140038,140040],{},"里面放一个",[89,140039,22890],{}," 标题",[49,140042,140043,140044,140046,140047,140049],{},"放一个a",[89,140045,102674],{},"，内容是 更多，然后让 ",[89,140048,341],{}," 进行右浮动，三角用伪元素设置字体图标就好",[38,140051,139903],{},[83,140053,140054],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,140055,140056,140064,140074,140084],{"__ignoreMap":10},[92,140057,140058,140060,140062],{"class":94,"line":95},[92,140059,51593],{"class":51282},[92,140061,137534],{"class":1942},[92,140063,15552],{"class":102},[92,140065,140066,140068,140070,140072],{"class":94,"line":11},[92,140067,137541],{"class":151},[92,140069,51419],{"class":102},[92,140071,7632],{"class":207},[92,140073,1269],{"class":102},[92,140075,140076,140078,140080,140082],{"class":94,"line":1158},[92,140077,128149],{"class":151},[92,140079,51419],{"class":102},[92,140081,60851],{"class":151},[92,140083,1269],{"class":102},[92,140085,140086],{"class":94,"line":1173},[92,140087,1544],{"class":102},[38,140089,139992],{},[83,140091,140092],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,140093,140094,140102,140112,140122],{"__ignoreMap":10},[92,140095,140096,140098,140100],{"class":94,"line":95},[92,140097,51593],{"class":51282},[92,140099,137534],{"class":1942},[92,140101,15552],{"class":102},[92,140103,140104,140106,140108,140110],{"class":94,"line":11},[92,140105,137541],{"class":151},[92,140107,51419],{"class":102},[92,140109,7632],{"class":207},[92,140111,1269],{"class":102},[92,140113,140114,140116,140118,140120],{"class":94,"line":1158},[92,140115,128149],{"class":151},[92,140117,51419],{"class":102},[92,140119,60851],{"class":151},[92,140121,1269],{"class":102},[92,140123,140124],{"class":94,"line":1173},[92,140125,1544],{"class":102},[38,140127,140128,140129],{},"下面是",[89,140130,139953],{},[1110,140132,140133,140141],{},[49,140134,140135,140136,100999,140138,140140],{},"里面包含 ",[89,140137,1110],{},[89,140139,49],{}," 还有链接",[49,140142,139613,140143,140145,140146,140148,140149,140152,140153],{},[89,140144,49],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[89,140147,131199],{}," 2.设置 ",[89,140150,140151],{},"white-space: nowrap;"," 3. 设置 ",[89,140154,140155],{},"text-overflow: ellipsis;",[38,140157,139903],{},[83,140159,140161],{"className":126533,"code":140160,"language":126535,"meta":10,"style":10},"div {\n  overflow: hidden;\n}\n",[89,140162,140163,140169,140180],{"__ignoreMap":10},[92,140164,140165,140167],{"class":94,"line":95},[92,140166,51593],{"class":51282},[92,140168,15552],{"class":102},[92,140170,140171,140174,140176,140178],{"class":94,"line":11},[92,140172,140173],{"class":151},"  overflow",[92,140175,51419],{"class":102},[92,140177,61696],{"class":151},[92,140179,1269],{"class":102},[92,140181,140182],{"class":94,"line":1158},[92,140183,1544],{"class":102},[38,140185,139992],{},[83,140187,140188],{"className":126533,"code":140160,"language":126535,"meta":10,"style":10},[89,140189,140190,140196,140206],{"__ignoreMap":10},[92,140191,140192,140194],{"class":94,"line":95},[92,140193,51593],{"class":51282},[92,140195,15552],{"class":102},[92,140197,140198,140200,140202,140204],{"class":94,"line":11},[92,140199,140173],{"class":151},[92,140201,51419],{"class":102},[92,140203,61696],{"class":151},[92,140205,1269],{"class":102},[92,140207,140208],{"class":94,"line":1158},[92,140209,1544],{"class":102},[38,140211,140212,140213,140216],{},"2 号盒子为 ",[89,140214,140215],{},"lifeservice"," 生活服务模块 高度为 209px",[1441,140218],{"style":126389,"src":140219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1110,140221,140222,140225,140235,140259,140270],{},[49,140223,140224],{},"设置边框（左右下边框）",[49,140226,140227,140228,140231,140232,140234],{},"里面的内容 是 ",[89,140229,140230],{},"ul > 12*li","，给",[89,140233,49],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[49,140236,140237,140238],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1110,140239,140240,140245,140254],{},[49,140241,140242,140244],{},[89,140243,140215],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[49,140246,140247,140248,140250,140251,140253],{},"可以让 ",[89,140249,140215],{}," 里面的 ",[89,140252,1110],{}," 宽度为 252，就可以装的下 4 个 小 li",[49,140255,140256,140258],{},[89,140257,140215],{}," 盒子 overflow 隐藏多余的部分就可以了",[49,140260,116448,140261,140263,140264,140266,140267,140269],{},[89,140262,49],{}," 里面放一个 ",[89,140265,544],{},"（里面放图标），下面的文本用 ",[89,140268,38],{}," 标签包裹",[49,140271,139033,140272,140274,140275,140277,140278,139067,140280,140283],{},[89,140273,544],{}," 设置 24px宽和28px的高（注意 ",[89,140276,544],{}," 是行内元素， 转成行内块），给 ",[89,140279,49],{},[89,140281,140282],{},"text-align:center"," 让里面内容居中显示",[38,140285,139903],{},[83,140287,140289],{"className":126533,"code":140288,"language":126535,"meta":10,"style":10},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[89,140290,140291,140309,140314,140324],{"__ignoreMap":10},[92,140292,140293,140295,140297,140299,140301,140303,140305,140307],{"class":94,"line":95},[92,140294,92],{"class":51282},[92,140296,12415],{"class":102},[92,140298,341],{"class":51282},[92,140300,12415],{"class":102},[92,140302,23534],{"class":51282},[92,140304,12415],{"class":102},[92,140306,252],{"class":51282},[92,140308,15552],{"class":102},[92,140310,140311],{"class":94,"line":11},[92,140312,140313],{"class":161},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[92,140315,140316,140318,140320,140322],{"class":94,"line":1158},[92,140317,128149],{"class":151},[92,140319,51419],{"class":102},[92,140321,128211],{"class":151},[92,140323,1269],{"class":102},[92,140325,140326],{"class":94,"line":1173},[92,140327,1544],{"class":102},[38,140329,139992],{},[83,140331,140332],{"className":126533,"code":140288,"language":126535,"meta":10,"style":10},[89,140333,140334,140352,140356,140366],{"__ignoreMap":10},[92,140335,140336,140338,140340,140342,140344,140346,140348,140350],{"class":94,"line":95},[92,140337,92],{"class":51282},[92,140339,12415],{"class":102},[92,140341,341],{"class":51282},[92,140343,12415],{"class":102},[92,140345,23534],{"class":51282},[92,140347,12415],{"class":102},[92,140349,252],{"class":51282},[92,140351,15552],{"class":102},[92,140353,140354],{"class":94,"line":11},[92,140355,140313],{"class":161},[92,140357,140358,140360,140362,140364],{"class":94,"line":1158},[92,140359,128149],{"class":151},[92,140361,51419],{"class":102},[92,140363,128211],{"class":151},[92,140365,1269],{"class":102},[92,140367,140368],{"class":94,"line":1173},[92,140369,1544],{"class":102},[38,140371,140372,140373,140376],{},"3 号盒子为 ",[89,140374,140375],{},"bargain"," 特价商品",[1110,140378,140379],{},[49,140380,140381],{},"这个比较简单，直接插入一张图片即可",[38,140383,139903],{},[83,140385,140386],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140387,140388],{"__ignoreMap":10},[92,140389,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408,140410,140412],{"class":94,"line":95},[92,140391,1013],{"class":102},[92,140393,1441],{"class":51282},[92,140395,55221],{"class":1942},[92,140397,148],{"class":102},[92,140399,134050],{"class":207},[92,140401,55229],{"class":1942},[92,140403,148],{"class":102},[92,140405,134057],{"class":207},[92,140407,134060],{"class":1942},[92,140409,148],{"class":102},[92,140411,134065],{"class":207},[92,140413,51289],{"class":102},[38,140415,139992],{},[83,140417,140418],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140419,140420],{"__ignoreMap":10},[92,140421,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440,140442,140444],{"class":94,"line":95},[92,140423,1013],{"class":102},[92,140425,1441],{"class":51282},[92,140427,55221],{"class":1942},[92,140429,148],{"class":102},[92,140431,134050],{"class":207},[92,140433,55229],{"class":1942},[92,140435,148],{"class":102},[92,140437,134057],{"class":207},[92,140439,134060],{"class":1942},[92,140441,148],{"class":102},[92,140443,134065],{"class":207},[92,140445,51289],{"class":102},[63,140447,140449],{"id":140448},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1441,140451],{"style":126389,"src":140452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[38,140454,140455,140456,140459],{},"大盒子 ",[89,140457,140458],{},"recom"," 推荐模块 recommend",[1110,140461,140462],{},[49,140463,140464,140465,140467,140468,140471],{},"给这个 ",[89,140466,140458],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[89,140469,140470],{},"#ebebeb","），设置距离上边 12px",[38,140473,139903],{},[83,140475,140477],{"className":126533,"code":140476,"language":126535,"meta":10,"style":10},"div {\n  background-color: #f0f0f0;\n}\n",[89,140478,140479,140485,140496],{"__ignoreMap":10},[92,140480,140481,140483],{"class":94,"line":95},[92,140482,51593],{"class":51282},[92,140484,15552],{"class":102},[92,140486,140487,140489,140491,140494],{"class":94,"line":11},[92,140488,70860],{"class":151},[92,140490,51419],{"class":102},[92,140492,140493],{"class":151},"#f0f0f0",[92,140495,1269],{"class":102},[92,140497,140498],{"class":94,"line":1158},[92,140499,1544],{"class":102},[38,140501,139992],{},[83,140503,140504],{"className":126533,"code":140476,"language":126535,"meta":10,"style":10},[89,140505,140506,140512,140522],{"__ignoreMap":10},[92,140507,140508,140510],{"class":94,"line":95},[92,140509,51593],{"class":51282},[92,140511,15552],{"class":102},[92,140513,140514,140516,140518,140520],{"class":94,"line":11},[92,140515,70860],{"class":151},[92,140517,51419],{"class":102},[92,140519,140493],{"class":151},[92,140521,1269],{"class":102},[92,140523,140524],{"class":94,"line":1158},[92,140525,1544],{"class":102},[38,140527,140528],{},"里面包含 2 个盒子， 浮动即可",[38,140530,139903],{},[83,140532,140533],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,140534,140535,140541,140551],{"__ignoreMap":10},[92,140536,140537,140539],{"class":94,"line":95},[92,140538,130381],{"class":1942},[92,140540,15552],{"class":102},[92,140542,140543,140545,140547,140549],{"class":94,"line":11},[92,140544,131013],{"class":151},[92,140546,51419],{"class":102},[92,140548,23717],{"class":151},[92,140550,1269],{"class":102},[92,140552,140553],{"class":94,"line":1158},[92,140554,1544],{"class":102},[38,140556,140557,140558],{},"1 号盒子 ",[89,140559,140560],{},"recom_hd",[1110,140562,140563,140566],{},[49,140564,140565],{},"设置宽度205px，高度163px",[49,140567,140037,140568,140570],{},[89,140569,1441],{},"标签，插入图片即可",[38,140572,139903],{},[83,140574,140575],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140576,140577],{"__ignoreMap":10},[92,140578,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601],{"class":94,"line":95},[92,140580,1013],{"class":102},[92,140582,1441],{"class":51282},[92,140584,55221],{"class":1942},[92,140586,148],{"class":102},[92,140588,134050],{"class":207},[92,140590,55229],{"class":1942},[92,140592,148],{"class":102},[92,140594,134057],{"class":207},[92,140596,134060],{"class":1942},[92,140598,148],{"class":102},[92,140600,134065],{"class":207},[92,140602,51289],{"class":102},[38,140604,139992],{},[83,140606,140607],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140608,140609],{"__ignoreMap":10},[92,140610,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629,140631,140633],{"class":94,"line":95},[92,140612,1013],{"class":102},[92,140614,1441],{"class":51282},[92,140616,55221],{"class":1942},[92,140618,148],{"class":102},[92,140620,134050],{"class":207},[92,140622,55229],{"class":1942},[92,140624,148],{"class":102},[92,140626,134057],{"class":207},[92,140628,134060],{"class":1942},[92,140630,148],{"class":102},[92,140632,134065],{"class":207},[92,140634,51289],{"class":102},[38,140636,140637,140638,140641],{},"2 号盒子 ",[89,140639,140640],{},"recom_bd"," ，注意里面的小竖线",[1110,140643,140644,140655,140658,140663,140668],{},[49,140645,140646,140647,140649,140650,140652,140653],{},"右侧结构里面放 ",[89,140648,1110],{}," 包含 4个 ",[89,140651,49],{},"，每个li里面包含一个",[89,140654,1441],{},[49,140656,140657],{},"直接利用切片工具把里面的内容当成一张图片",[49,140659,139033,140660,140662],{},[89,140661,49],{}," 设置浮动",[49,140664,139033,140665,140667],{},[89,140666,1441],{}," 设置宽高，宽度 248px，高度 163px",[49,140669,140670,140671,140231,140674,140676,140677,140679,140680],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[89,140672,140673],{},"top 10px",[89,140675,49],{},"设置相对定位（注意，最后一个",[89,140678,49],{},"不用设置伪元素），可以利用 ",[89,140681,140682],{},"nth-child(-n+3){...}",[38,140684,139903],{},[83,140686,140687],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,140688,140689,140697,140707,140717],{"__ignoreMap":10},[92,140690,140691,140693,140695],{"class":94,"line":95},[92,140692,51593],{"class":51282},[92,140694,137534],{"class":1942},[92,140696,15552],{"class":102},[92,140698,140699,140701,140703,140705],{"class":94,"line":11},[92,140700,137541],{"class":151},[92,140702,51419],{"class":102},[92,140704,7632],{"class":207},[92,140706,1269],{"class":102},[92,140708,140709,140711,140713,140715],{"class":94,"line":1158},[92,140710,128149],{"class":151},[92,140712,51419],{"class":102},[92,140714,60851],{"class":151},[92,140716,1269],{"class":102},[92,140718,140719],{"class":94,"line":1173},[92,140720,1544],{"class":102},[38,140722,139992],{},[83,140724,140725],{"className":126533,"code":138375,"language":126535,"meta":10,"style":10},[89,140726,140727,140735,140745,140755],{"__ignoreMap":10},[92,140728,140729,140731,140733],{"class":94,"line":95},[92,140730,51593],{"class":51282},[92,140732,137534],{"class":1942},[92,140734,15552],{"class":102},[92,140736,140737,140739,140741,140743],{"class":94,"line":11},[92,140738,137541],{"class":151},[92,140740,51419],{"class":102},[92,140742,7632],{"class":207},[92,140744,1269],{"class":102},[92,140746,140747,140749,140751,140753],{"class":94,"line":1158},[92,140748,128149],{"class":151},[92,140750,51419],{"class":102},[92,140752,60851],{"class":151},[92,140754,1269],{"class":102},[92,140756,140757],{"class":94,"line":1173},[92,140758,1544],{"class":102},[63,140760,140762],{"id":140761},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1441,140764],{"style":126389,"src":140765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[38,140767,140768],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[38,140770,140771],{},"第一楼是家用电器模块： 里面包含两个盒子",[38,140773,140774,140777],{},[89,140775,140776],{},"box_hd"," 制作",[38,140779,140557,140780,140782],{},[89,140781,140776],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1441,140784],{"style":126389,"src":140785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1110,140787,140788,140793,140798,140801],{},[49,140789,140790,140792],{},[89,140791,140776],{}," 给 30px 的高度，2个像素的下边框",[49,140794,140795,140796],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[89,140797,139044],{},[49,140799,140800],{},"左侧盒左浮动，右侧盒子右浮动",[49,140802,140803,140805,140806,140808],{},[89,140804,341],{},"标签之间的距离用左右的",[89,140807,30865],{},"撑开即可",[38,140810,140811],{},"结构代码",[83,140813,140814],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,140815,140816,140822,140832],{"__ignoreMap":10},[92,140817,140818,140820],{"class":94,"line":95},[92,140819,130381],{"class":1942},[92,140821,15552],{"class":102},[92,140823,140824,140826,140828,140830],{"class":94,"line":11},[92,140825,131013],{"class":151},[92,140827,51419],{"class":102},[92,140829,23717],{"class":151},[92,140831,1269],{"class":102},[92,140833,140834],{"class":94,"line":1158},[92,140835,1544],{"class":102},[38,140837,140838],{},"样式代码",[83,140840,140841],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,140842,140843,140849,140859],{"__ignoreMap":10},[92,140844,140845,140847],{"class":94,"line":95},[92,140846,130381],{"class":1942},[92,140848,15552],{"class":102},[92,140850,140851,140853,140855,140857],{"class":94,"line":11},[92,140852,131013],{"class":151},[92,140854,51419],{"class":102},[92,140856,23717],{"class":151},[92,140858,1269],{"class":102},[92,140860,140861],{"class":94,"line":1158},[92,140862,1544],{"class":102},[38,140864,140865,140777],{},[89,140866,140867],{},"box_bd",[38,140869,140870],{},"2 号盒子 box_bd，不要给高度",[1441,140872],{"style":126389,"src":140873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[38,140875,140876],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[38,140878,140879],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[38,140881,140882],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1110,140884,140885,140897,140913],{},[49,140886,140887,140889,140890,140893,140894,140896],{},[89,140888,140867],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[89,140891,140892],{},"tab_content","，在",[89,140895,140892],{}," 里面包裹tab选项卡对应的内容",[49,140898,140899,140900,140903,140904,140906,140907,140909,140910,140912],{},"内容被一个大盒子包裹（",[89,140901,140902],{},"tab_list_item","），里面是 ",[89,140905,1110],{}," 包裹 5个 ",[89,140908,49],{},"，每个",[89,140911,49],{},"设置对应的宽度，然后设置浮动",[49,140914,140915,140916,140918,140919,140921,140922],{},"而这5个",[89,140917,49],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[89,140920,49],{},"设置",[1110,140923,140924,140942,140945],{},[49,140925,140926,140927,140929,140930,140932,140933,140935,140936,140938,140939,140941],{},"第一个小 ",[89,140928,49],{}," 分为上下结构，上面是 ",[89,140931,1110],{}," 包裹 ",[89,140934,49],{}," ，",[89,140937,49],{},"里面包裹 ",[89,140940,341],{},"，下面插入一张图片",[49,140943,140944],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[49,140946,140947,140948,140950,140951,140953,140954,140956],{},"后面的小 ",[89,140949,49],{}," 里面先放一个",[89,140952,341],{},"标签，然后在",[89,140955,341],{},"标签里面插入图片即可",[38,140958,140811],{},[83,140960,140961],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140962,140963],{"__ignoreMap":10},[92,140964,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987],{"class":94,"line":95},[92,140966,1013],{"class":102},[92,140968,1441],{"class":51282},[92,140970,55221],{"class":1942},[92,140972,148],{"class":102},[92,140974,134050],{"class":207},[92,140976,55229],{"class":1942},[92,140978,148],{"class":102},[92,140980,134057],{"class":207},[92,140982,134060],{"class":1942},[92,140984,148],{"class":102},[92,140986,134065],{"class":207},[92,140988,51289],{"class":102},[38,140990,140838],{},[83,140992,140993],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,140994,140995],{"__ignoreMap":10},[92,140996,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019],{"class":94,"line":95},[92,140998,1013],{"class":102},[92,141000,1441],{"class":51282},[92,141002,55221],{"class":1942},[92,141004,148],{"class":102},[92,141006,134050],{"class":207},[92,141008,55229],{"class":1942},[92,141010,148],{"class":102},[92,141012,134057],{"class":207},[92,141014,134060],{"class":1942},[92,141016,148],{"class":102},[92,141018,134065],{"class":207},[92,141020,51289],{"class":102},[38,141022,141023],{},"tab栏切换需求！！！！！！介绍：",[1441,141025],{"style":126389,"src":141026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1110,141028,141029,141037,141043,141046],{},[49,141030,141031,141034,141035],{},[89,141032,141033],{},"tab","栏的布局是 ",[89,141036,139044],{},[49,141038,141039,141040,141042],{},"有多少个",[89,141041,141033],{},"选项卡，那么对应就有多少个内容",[49,141044,141045],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[49,141047,141048,141049,141052,141053,141055,141056,141058],{},"等后面我们学习了",[89,141050,141051],{},"js","之后，我们就会配合",[89,141054,141051],{},"来实现，",[89,141057,141033],{},"栏的切换",[33,141060,141062],{"id":141061},"_162-列表制作","16.2 列表制作",[63,141064,141066],{"id":141065},"_1621-准备工作","16.2.1 准备工作",[1110,141068,141069,141072,141075,141078],{},[49,141070,141071],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[49,141073,141074],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[49,141076,141077],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[49,141079,141080],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[63,141082,141084,141085,100999,141087,141089],{"id":141083},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[89,141086,131538],{},[89,141088,53695],{}," 修改",[1441,141091],{"style":126389,"src":141092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1110,141094,141095],{},[49,141096,141097],{},"秒杀盒子 sk（ second kill ） 定位即可",[38,141099,139903],{},[83,141101,141102],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,141103,141104,141108,141122,141126,141140,141144,141158,141162,141176,141180],{"__ignoreMap":10},[92,141105,141106],{"class":94,"line":95},[92,141107,131972],{"class":161},[92,141109,141110,141112,141114,141116,141118,141120],{"class":94,"line":11},[92,141111,131977],{"class":1942},[92,141113,79789],{"class":102},[92,141115,128893],{"class":151},[92,141117,51419],{"class":102},[92,141119,131986],{"class":151},[92,141121,129463],{"class":102},[92,141123,141124],{"class":94,"line":1158},[92,141125,131993],{"class":161},[92,141127,141128,141130,141132,141134,141136,141138],{"class":94,"line":1173},[92,141129,131998],{"class":1942},[92,141131,79789],{"class":102},[92,141133,128893],{"class":151},[92,141135,51419],{"class":102},[92,141137,54746],{"class":151},[92,141139,129463],{"class":102},[92,141141,141142],{"class":94,"line":1179},[92,141143,132013],{"class":161},[92,141145,141146,141148,141150,141152,141154,141156],{"class":94,"line":1193},[92,141147,132018],{"class":1942},[92,141149,79789],{"class":102},[92,141151,128893],{"class":151},[92,141153,51419],{"class":102},[92,141155,54813],{"class":151},[92,141157,129463],{"class":102},[92,141159,141160],{"class":94,"line":1199},[92,141161,132033],{"class":161},[92,141163,141164,141166,141168,141170,141172,141174],{"class":94,"line":1290},[92,141165,132038],{"class":1942},[92,141167,79789],{"class":102},[92,141169,128893],{"class":151},[92,141171,51419],{"class":102},[92,141173,86215],{"class":151},[92,141175,129463],{"class":102},[92,141177,141178],{"class":94,"line":1296},[92,141179,132053],{"class":161},[92,141181,141182,141184,141186,141188,141190,141192],{"class":94,"line":1308},[92,141183,132058],{"class":1942},[92,141185,79789],{"class":102},[92,141187,128893],{"class":151},[92,141189,51419],{"class":102},[92,141191,132067],{"class":151},[92,141193,129463],{"class":102},[38,141195,139992],{},[83,141197,141198],{"className":126533,"code":131965,"language":126535,"meta":10,"style":10},[89,141199,141200,141204,141218,141222,141236,141240,141254,141258,141272,141276],{"__ignoreMap":10},[92,141201,141202],{"class":94,"line":95},[92,141203,131972],{"class":161},[92,141205,141206,141208,141210,141212,141214,141216],{"class":94,"line":11},[92,141207,131977],{"class":1942},[92,141209,79789],{"class":102},[92,141211,128893],{"class":151},[92,141213,51419],{"class":102},[92,141215,131986],{"class":151},[92,141217,129463],{"class":102},[92,141219,141220],{"class":94,"line":1158},[92,141221,131993],{"class":161},[92,141223,141224,141226,141228,141230,141232,141234],{"class":94,"line":1173},[92,141225,131998],{"class":1942},[92,141227,79789],{"class":102},[92,141229,128893],{"class":151},[92,141231,51419],{"class":102},[92,141233,54746],{"class":151},[92,141235,129463],{"class":102},[92,141237,141238],{"class":94,"line":1179},[92,141239,132013],{"class":161},[92,141241,141242,141244,141246,141248,141250,141252],{"class":94,"line":1193},[92,141243,132018],{"class":1942},[92,141245,79789],{"class":102},[92,141247,128893],{"class":151},[92,141249,51419],{"class":102},[92,141251,54813],{"class":151},[92,141253,129463],{"class":102},[92,141255,141256],{"class":94,"line":1199},[92,141257,132033],{"class":161},[92,141259,141260,141262,141264,141266,141268,141270],{"class":94,"line":1290},[92,141261,132038],{"class":1942},[92,141263,79789],{"class":102},[92,141265,128893],{"class":151},[92,141267,51419],{"class":102},[92,141269,86215],{"class":151},[92,141271,129463],{"class":102},[92,141273,141274],{"class":94,"line":1296},[92,141275,132053],{"class":161},[92,141277,141278,141280,141282,141284,141286,141288],{"class":94,"line":1308},[92,141279,132058],{"class":1942},[92,141281,79789],{"class":102},[92,141283,128893],{"class":151},[92,141285,51419],{"class":102},[92,141287,132067],{"class":151},[92,141289,129463],{"class":102},[1110,141291,141292,141303],{},[49,141293,141294,141295,141298,141299,100999,141301],{},"1 号盒子左侧浮动 ",[89,141296,141297],{},"sk_list"," 里面包含 ",[89,141300,1110],{},[89,141302,49],{},[49,141304,141305,141306,141298,141309,100999,141311],{},"2 号盒子左侧浮动 ",[89,141307,141308],{},"sk_con",[89,141310,1110],{},[89,141312,49],{},[38,141314,139903],{},[83,141316,141317],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,141318,141319,141325,141335],{"__ignoreMap":10},[92,141320,141321,141323],{"class":94,"line":95},[92,141322,130381],{"class":1942},[92,141324,15552],{"class":102},[92,141326,141327,141329,141331,141333],{"class":94,"line":11},[92,141328,131013],{"class":151},[92,141330,51419],{"class":102},[92,141332,23717],{"class":151},[92,141334,1269],{"class":102},[92,141336,141337],{"class":94,"line":1158},[92,141338,1544],{"class":102},[38,141340,139992],{},[83,141342,141343],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,141344,141345,141351,141361],{"__ignoreMap":10},[92,141346,141347,141349],{"class":94,"line":95},[92,141348,130381],{"class":1942},[92,141350,15552],{"class":102},[92,141352,141353,141355,141357,141359],{"class":94,"line":11},[92,141354,131013],{"class":151},[92,141356,51419],{"class":102},[92,141358,23717],{"class":151},[92,141360,1269],{"class":102},[92,141362,141363],{"class":94,"line":1158},[92,141364,1544],{"class":102},[63,141366,141368,141369],{"id":141367},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[89,141370,141371],{},"sk_container",[1441,141373],{"style":126389,"src":141374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1110,141376,141377,141382],{},[49,141378,140557,141379,141381],{},[89,141380,141371],{}," 给宽度 1200，不要给高度",[49,141383,141384],{},"一定不要忘记清除浮动",[38,141386,139903],{},[83,141388,141389],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,141390,141391,141397,141407],{"__ignoreMap":10},[92,141392,141393,141395],{"class":94,"line":95},[92,141394,130381],{"class":1942},[92,141396,15552],{"class":102},[92,141398,141399,141401,141403,141405],{"class":94,"line":11},[92,141400,131013],{"class":151},[92,141402,51419],{"class":102},[92,141404,23717],{"class":151},[92,141406,1269],{"class":102},[92,141408,141409],{"class":94,"line":1158},[92,141410,1544],{"class":102},[46,141412,141413],{},[49,141414,141415],{},"sk_hd制作",[1110,141417,141418],{},[49,141419,140637,141420,141423],{},[89,141421,141422],{},"sk_hd"," ，插入图片即可",[38,141425,139903],{},[83,141427,141428],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,141429,141430],{"__ignoreMap":10},[92,141431,141432,141434,141436,141438,141440,141442,141444,141446,141448,141450,141452,141454],{"class":94,"line":95},[92,141433,1013],{"class":102},[92,141435,1441],{"class":51282},[92,141437,55221],{"class":1942},[92,141439,148],{"class":102},[92,141441,134050],{"class":207},[92,141443,55229],{"class":1942},[92,141445,148],{"class":102},[92,141447,134057],{"class":207},[92,141449,134060],{"class":1942},[92,141451,148],{"class":102},[92,141453,134065],{"class":207},[92,141455,51289],{"class":102},[46,141457,141458],{"start":11},[49,141459,141460],{},"sk_bd制作",[1110,141462,141463],{},[49,141464,141465,141466,141469,141470,100999,141472,141474],{},"3 号盒子 ",[89,141467,141468],{},"sk_bd"," ，里面包含很多的 ",[89,141471,1110],{},[89,141473,49],{},[1110,141475,141476,141485],{},[49,141477,141478,141479,141481,141482,141484],{},"当鼠标移入到 ",[89,141480,49],{}," 上面的时候显示红色的边框，在这里先给 ",[89,141483,49],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[49,141486,141487,141488,141490,141491,141493,141494,141497,141498,141500],{},"由于给每个 ",[89,141489,49],{}," 都设置了外边距，导致一行的最后一个 ",[89,141492,49],{}," 掉了下来，在这里我们利用 ",[89,141495,141496],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[89,141499,49],{},"，去掉外边距就好了",[38,141502,139903],{},[83,141504,141505],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,141506,141507,141513,141525],{"__ignoreMap":10},[92,141508,141509,141511],{"class":94,"line":95},[92,141510,51593],{"class":51282},[92,141512,15552],{"class":102},[92,141514,141515,141517,141519,141521,141523],{"class":94,"line":11},[92,141516,70452],{"class":151},[92,141518,51419],{"class":102},[92,141520,294],{"class":151},[92,141522,51538],{"class":151},[92,141524,1269],{"class":102},[92,141526,141527],{"class":94,"line":1158},[92,141528,1544],{"class":102},[38,141530,139992],{},[83,141532,141533],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,141534,141535,141541,141553],{"__ignoreMap":10},[92,141536,141537,141539],{"class":94,"line":95},[92,141538,51593],{"class":51282},[92,141540,15552],{"class":102},[92,141542,141543,141545,141547,141549,141551],{"class":94,"line":11},[92,141544,70452],{"class":151},[92,141546,51419],{"class":102},[92,141548,294],{"class":151},[92,141550,51538],{"class":151},[92,141552,1269],{"class":102},[92,141554,141555],{"class":94,"line":1158},[92,141556,1544],{"class":102},[33,141558,141560],{"id":141559},"_163-注册页面制作","16.3 注册页面制作",[1441,141562],{"style":126389,"src":141563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[38,141565,141566,141568],{},[252,141567,9005],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1441,141570],{"style":126389,"src":141571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[63,141573,141575],{"id":141574},"_1631-准备工作","16.3.1 准备工作",[1110,141577,141578,141581],{},[49,141579,141580],{},"创建register.html，引入 base.css，引入favicon图标",[49,141582,141583],{},"创建register.css ，在html页面进行引入",[63,141585,141587,141588,141590],{"id":141586},"_1632-header-头部实现","16.3.2 ",[89,141589,131538],{}," 头部实现",[1110,141592,141593,141596],{},[49,141594,141595],{},"整个内容用 版心 进行包裹",[49,141597,141598],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[38,141600,139903],{},[83,141602,141603],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,141604,141605],{"__ignoreMap":10},[92,141606,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625,141627,141629],{"class":94,"line":95},[92,141608,1013],{"class":102},[92,141610,1441],{"class":51282},[92,141612,55221],{"class":1942},[92,141614,148],{"class":102},[92,141616,134050],{"class":207},[92,141618,55229],{"class":1942},[92,141620,148],{"class":102},[92,141622,134057],{"class":207},[92,141624,134060],{"class":1942},[92,141626,148],{"class":102},[92,141628,134065],{"class":207},[92,141630,51289],{"class":102},[38,141632,139992],{},[83,141634,141635],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,141636,141637],{"__ignoreMap":10},[92,141638,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657,141659,141661],{"class":94,"line":95},[92,141640,1013],{"class":102},[92,141642,1441],{"class":51282},[92,141644,55221],{"class":1942},[92,141646,148],{"class":102},[92,141648,134050],{"class":207},[92,141650,55229],{"class":1942},[92,141652,148],{"class":102},[92,141654,134057],{"class":207},[92,141656,134060],{"class":1942},[92,141658,148],{"class":102},[92,141660,134065],{"class":207},[92,141662,51289],{"class":102},[63,141664,141666,141667,141670],{"id":141665},"_1633-registerarea-主体模块实现","16.3.3 ",[89,141668,141669],{},"registerarea"," 主体模块实现",[1441,141672],{"style":126389,"src":141673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[38,141675,141676],{},"整个大盒子 高度为 522px，设置4个边框",[38,141678,139903],{},[83,141680,141681],{"className":126533,"code":130690,"language":126535,"meta":10,"style":10},[89,141682,141683,141689,141705],{"__ignoreMap":10},[92,141684,141685,141687],{"class":94,"line":95},[92,141686,51593],{"class":51282},[92,141688,15552],{"class":102},[92,141690,141691,141693,141695,141697,141699,141701,141703],{"class":94,"line":11},[92,141692,70878],{"class":151},[92,141694,51419],{"class":102},[92,141696,320],{"class":151},[92,141698,51474],{"class":98},[92,141700,51503],{"class":151},[92,141702,129925],{"class":151},[92,141704,1269],{"class":102},[92,141706,141707],{"class":94,"line":1158},[92,141708,1544],{"class":102},[38,141710,139992],{},[83,141712,141713],{"className":126533,"code":130690,"language":126535,"meta":10,"style":10},[89,141714,141715,141721,141737],{"__ignoreMap":10},[92,141716,141717,141719],{"class":94,"line":95},[92,141718,51593],{"class":51282},[92,141720,15552],{"class":102},[92,141722,141723,141725,141727,141729,141731,141733,141735],{"class":94,"line":11},[92,141724,70878],{"class":151},[92,141726,51419],{"class":102},[92,141728,320],{"class":151},[92,141730,51474],{"class":98},[92,141732,51503],{"class":151},[92,141734,129925],{"class":151},[92,141736,1269],{"class":102},[92,141738,141739],{"class":94,"line":1158},[92,141740,1544],{"class":102},[38,141742,141743],{},"1号盒子 是一个 h3 标签，放标题",[1110,141745,141746],{},[49,141747,141748],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[38,141750,139903],{},[83,141752,141753],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,141754,141755,141761,141771],{"__ignoreMap":10},[92,141756,141757,141759],{"class":94,"line":95},[92,141758,130381],{"class":1942},[92,141760,15552],{"class":102},[92,141762,141763,141765,141767,141769],{"class":94,"line":11},[92,141764,131013],{"class":151},[92,141766,51419],{"class":102},[92,141768,23717],{"class":151},[92,141770,1269],{"class":102},[92,141772,141773],{"class":94,"line":1158},[92,141774,1544],{"class":102},[38,141776,139992],{},[83,141778,141779],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,141780,141781,141787,141797],{"__ignoreMap":10},[92,141782,141783,141785],{"class":94,"line":95},[92,141784,130381],{"class":1942},[92,141786,15552],{"class":102},[92,141788,141789,141791,141793,141795],{"class":94,"line":11},[92,141790,131013],{"class":151},[92,141792,51419],{"class":102},[92,141794,23717],{"class":151},[92,141796,1269],{"class":102},[92,141798,141799],{"class":94,"line":1158},[92,141800,1544],{"class":102},[38,141802,141803],{},"2号盒子 里面放注册的内容",[1110,141805,141806,141809,141818,141832,141845,141848,141851,141869,141883],{},[49,141807,141808],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[49,141810,141811,141812,141814,141815,141817],{},"里面的内容利用 ",[89,141813,1110],{}," 包含 ",[89,141816,49],{}," 来实现的（不需要用表格）",[49,141819,139047,141820,141822,141823,141825,141826,141828,141829,141831],{},[89,141821,49],{}," 里面，左侧放 ",[89,141824,33590],{}," 标签， 中间放",[89,141827,53803],{}," 标签， 右侧放 ",[89,141830,92],{}," 提示信息",[49,141833,141834,141835,141837,141838,141840,141841,141844],{},"左侧 ",[89,141836,33590],{},"里面的文字都是右对齐，我们可以给",[89,141839,33590],{},"设置一个宽度（88px），然后利用",[89,141842,141843],{},"text-align"," 来设置右对齐",[49,141846,141847],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[49,141849,141850],{},"右侧 span修饰一下文字颜色",[49,141852,141853,141854],{},"提示信息的样式优化",[1110,141855,141856,141859,141862],{},[49,141857,141858],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[49,141860,141861],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[49,141863,141864,141865,141868],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[89,141866,141867],{},"vertical-algin"," 来设置 图片与文字对齐方式",[49,141870,141871,141872],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1110,141873,141874,141880],{},[49,141875,141876,141877,141879],{},"设置 ",[89,141878,23534],{}," 的 左右 12px 的内边距，设置一下文字颜色",[49,141881,141882],{},"分别设置 背景颜色",[49,141884,141885,141886,141888],{},"同意协议 和 完成注册 都是用 ",[89,141887,49],{}," 进行包裹",[38,141890,139903],{},[83,141892,141893],{"className":126533,"code":140476,"language":126535,"meta":10,"style":10},[89,141894,141895,141901,141911],{"__ignoreMap":10},[92,141896,141897,141899],{"class":94,"line":95},[92,141898,51593],{"class":51282},[92,141900,15552],{"class":102},[92,141902,141903,141905,141907,141909],{"class":94,"line":11},[92,141904,70860],{"class":151},[92,141906,51419],{"class":102},[92,141908,140493],{"class":151},[92,141910,1269],{"class":102},[92,141912,141913],{"class":94,"line":1158},[92,141914,1544],{"class":102},[38,141916,139992],{},[83,141918,141919],{"className":126533,"code":140476,"language":126535,"meta":10,"style":10},[89,141920,141921,141927,141937],{"__ignoreMap":10},[92,141922,141923,141925],{"class":94,"line":95},[92,141924,51593],{"class":51282},[92,141926,15552],{"class":102},[92,141928,141929,141931,141933,141935],{"class":94,"line":11},[92,141930,70860],{"class":151},[92,141932,51419],{"class":102},[92,141934,140493],{"class":151},[92,141936,1269],{"class":102},[92,141938,141939],{"class":94,"line":1158},[92,141940,1544],{"class":102},[63,141942,141944],{"id":141943},"_1634-底部实现","16.3.4 底部实现",[38,141946,139903],{},[83,141948,141949],{"className":126533,"code":140476,"language":126535,"meta":10,"style":10},[89,141950,141951,141957,141967],{"__ignoreMap":10},[92,141952,141953,141955],{"class":94,"line":95},[92,141954,51593],{"class":51282},[92,141956,15552],{"class":102},[92,141958,141959,141961,141963,141965],{"class":94,"line":11},[92,141960,70860],{"class":151},[92,141962,51419],{"class":102},[92,141964,140493],{"class":151},[92,141966,1269],{"class":102},[92,141968,141969],{"class":94,"line":1158},[92,141970,1544],{"class":102},[38,141972,139992],{},[83,141974,141975],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,141976,141977,141981,141995,141999],{"__ignoreMap":10},[92,141978,141979],{"class":94,"line":95},[92,141980,130644],{"class":161},[92,141982,141983,141985,141987,141989,141991,141993],{"class":94,"line":11},[92,141984,1013],{"class":102},[92,141986,51593],{"class":51282},[92,141988,53468],{"class":1942},[92,141990,148],{"class":102},[92,141992,130657],{"class":207},[92,141994,51289],{"class":102},[92,141996,141997],{"class":94,"line":1158},[92,141998,130664],{"class":102},[92,142000,142001,142003,142005],{"class":94,"line":1173},[92,142002,51767],{"class":102},[92,142004,51593],{"class":51282},[92,142006,51289],{"class":102},[33,142008,142010],{"id":142009},"_164-项目总结","16.4 项目总结",[46,142012,142013,142016,142019,142022],{},[49,142014,142015],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[49,142017,142018],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[49,142020,142021],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[49,142023,142024],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1441,142026],{"style":126389,"src":142027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[46,142029,142030],{"start":1179},[49,142031,142032],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1441,142034],{"style":126389,"src":142035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[46,142037,142038],{"start":1193},[49,142039,142040],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1441,142042],{"style":126389,"src":142043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[83,142045,142046],{"className":127280,"code":136690,"language":127282,"meta":10,"style":10},[89,142047,142048],{"__ignoreMap":10},[92,142049,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072],{"class":94,"line":95},[92,142051,1013],{"class":102},[92,142053,53803],{"class":51282},[92,142055,53806],{"class":1942},[92,142057,148],{"class":102},[92,142059,62681],{"class":207},[92,142061,14900],{"class":1942},[92,142063,148],{"class":102},[92,142065,136711],{"class":207},[92,142067,61002],{"class":1942},[92,142069,148],{"class":102},[92,142071,136718],{"class":207},[92,142073,51289],{"class":102},[46,142075,142076,142079],{"start":1199},[49,142077,142078],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[49,142080,142081],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5106,142083,142084],{},"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":142086},[142087,142092,142099,142107],{"id":139713,"depth":11,"text":139714,"children":142088},[142089,142090,142091],{"id":139717,"depth":1158,"text":139718},{"id":140448,"depth":1158,"text":140449},{"id":140761,"depth":1158,"text":140762},{"id":141061,"depth":11,"text":141062,"children":142093},[142094,142095,142097],{"id":141065,"depth":1158,"text":141066},{"id":141083,"depth":1158,"text":142096},"16.2.2 列表页 header 和 nav 修改",{"id":141367,"depth":1158,"text":142098},"16.2.3 列表页主体 sk_container",{"id":141559,"depth":11,"text":141560,"children":142100},[142101,142102,142104,142106],{"id":141574,"depth":1158,"text":141575},{"id":141586,"depth":1158,"text":142103},"16.3.2 header 头部实现",{"id":141665,"depth":1158,"text":142105},"16.3.3 registerarea 主体模块实现",{"id":141943,"depth":1158,"text":141944},{"id":142009,"depth":11,"text":142010},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139705,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142114,"title":142115,"body":142116,"description":23357,"extension":14,"meta":142224,"navigation":17,"path":142225,"seo":142226,"stem":142227,"__hash__":142228},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142117,"toc":142219},[142118,142121,142125,142128,142131,142140,142149,142153,142158,142165,142183,142186,142189,142192,142195,142198,142201,142204,142207,142210,142213,142216],[29,142119,142115],{"id":142120},"_17-web服务器与网站发布",[33,142122,142124],{"id":142123},"_171-web服务器","17.1 Web服务器",[38,142126,142127],{},"把自己网站上传到服务器上，可以让其他人访问",[1441,142129],{"style":126389,"src":142130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[38,142132,142133,142136,142137],{},[252,142134,142135],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[252,142138,142139],{},"Web 服务器等",[38,142141,142142,142143,100999,142146,25722],{},"根据服务器在网络中所在的位置不同，又可分为 ",[252,142144,142145],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[252,142147,142148],{},"远程服务器",[63,142150,142152],{"id":142151},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[38,142154,142155],{},[252,142156,142157],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[38,142159,142160,142161],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[341,142162,142163],{"href":142163,"rel":142164},"http:\u002F\u002Ffree.3v.do\u002F",[23846],[1110,142166,142167,142170,142173,142180],{},[49,142168,142169],{},"去免费空间网站注册账号。",[49,142171,142172],{},"记录下主机名、用户名、密码、域名。",[49,142174,142175,142176,142179],{},"利用 ",[89,142177,142178],{},"utftp"," 软件 上传网站到远程服务器",[49,142181,142182],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[38,142184,142185],{},"使用软件上传，对上传软件文件进行解压",[1441,142187],{"style":126389,"src":142188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1441,142190],{"style":126389,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[38,142193,142194],{},"输入刚刚申请的服务器账号信息：",[1441,142196],{"style":126389,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1441,142199],{"style":126389,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1441,142202],{"style":126389,"src":142203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1441,142205],{"style":126389,"src":142206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[38,142208,142209],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1441,142211],{"style":126389,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[38,142214,142215],{},"浏览器输入域名即可访问",[38,142217,142218],{},"首页一定必须是index",{"title":10,"searchDepth":11,"depth":11,"links":142220},[142221],{"id":142123,"depth":11,"text":142124,"children":142222},[142223],{"id":142151,"depth":1158,"text":142152},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142115,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142230,"title":142231,"body":142232,"description":23357,"extension":14,"meta":143159,"navigation":17,"path":143160,"seo":143161,"stem":143162,"__hash__":143163},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142233,"toc":143142},[142234,142237,142241,142244,142247,142258,142261,142265,142269,142274,142277,142280,142283,142286,142290,142316,142320,142324,142327,142330,142334,142367,142371,142374,142377,142441,142445,142449,142452,142455,142458,142462,142507,142511,142514,142544,142548,142552,142555,142558,142562,142565,142634,142637,142745,142747,142753,142757,142760,142763,142859,142862,142866,142890,142894,142897,142901,142904,142908,142911,142914,142917,142920,142924,142927,142930,142934,142938,142941,142944,142947,142950,142954,142957,142961,142964,142967,143012,143016,143020,143023,143026,143029,143061,143065,143068,143102,143106,143109,143139],[29,142235,142231],{"id":142236},"_18-2d动画与3d转换",[33,142238,142240],{"id":142239},"_181-css3-2d转换","18.1 CSS3 2D转换",[38,142242,142243],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[38,142245,142246],{},"转换（transform）你可以简单理解为变形",[1110,142248,142249,142252,142255],{},[49,142250,142251],{},"移动：translate",[49,142253,142254],{},"旋转：rotate",[49,142256,142257],{},"缩放：scale",[1441,142259],{"style":126389,"src":142260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[63,142262,142264],{"id":142263},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21978,142266,142268],{"id":142267},"_18111-translate介绍","18.1.1.1 translate介绍",[38,142270,142271,142272],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[252,142273,133192],{},[1441,142275],{"style":126389,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[38,142278,142279],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[38,142281,142282],{},"对于行内元素无效",[38,142284,142285],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21978,142287,142289],{"id":142288},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[83,142291,142292],{"className":126533,"code":138722,"language":126535,"meta":10,"style":10},[89,142293,142294,142300,142312],{"__ignoreMap":10},[92,142295,142296,142298],{"class":94,"line":95},[92,142297,51593],{"class":51282},[92,142299,15552],{"class":102},[92,142301,142302,142304,142306,142308,142310],{"class":94,"line":11},[92,142303,70452],{"class":151},[92,142305,51419],{"class":102},[92,142307,294],{"class":151},[92,142309,51538],{"class":151},[92,142311,1269],{"class":102},[92,142313,142314],{"class":94,"line":1158},[92,142315,1544],{"class":102},[63,142317,142319],{"id":142318},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21978,142321,142323],{"id":142322},"_18121-rotate介绍","18.1.2.1 rotate介绍",[38,142325,142326],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1441,142328],{"style":126389,"src":142329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21978,142331,142333],{"id":142332},"_18122-旋转效果","18.1.2.2 旋转效果",[83,142335,142337],{"className":126533,"code":142336,"language":126535,"meta":10,"style":10},"div {\n  transform: rotate(45deg);\n}\n",[89,142338,142339,142345,142363],{"__ignoreMap":10},[92,142340,142341,142343],{"class":94,"line":95},[92,142342,51593],{"class":51282},[92,142344,15552],{"class":102},[92,142346,142347,142349,142351,142354,142356,142358,142361],{"class":94,"line":11},[92,142348,136517],{"class":151},[92,142350,51419],{"class":102},[92,142352,142353],{"class":151},"rotate",[92,142355,103],{"class":102},[92,142357,632],{"class":151},[92,142359,142360],{"class":98},"deg",[92,142362,2698],{"class":102},[92,142364,142365],{"class":94,"line":1158},[92,142366,1544],{"class":102},[21978,142368,142370],{"id":142369},"_18123-三角做法","18.1.2.3 三角做法",[38,142372,142373],{},"该下标当经过最外层大盒子时会实现向上反转",[1441,142375],{"style":126389,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[83,142378,142379],{"className":126533,"code":135053,"language":126535,"meta":10,"style":10},[89,142380,142381,142385,142391,142401,142411,142427,142437],{"__ignoreMap":10},[92,142382,142383],{"class":94,"line":95},[92,142384,135060],{"class":161},[92,142386,142387,142389],{"class":94,"line":11},[92,142388,135065],{"class":1942},[92,142390,15552],{"class":102},[92,142392,142393,142395,142397,142399],{"class":94,"line":1158},[92,142394,70550],{"class":151},[92,142396,51419],{"class":102},[92,142398,294],{"class":151},[92,142400,1269],{"class":102},[92,142402,142403,142405,142407,142409],{"class":94,"line":1173},[92,142404,70770],{"class":151},[92,142406,51419],{"class":102},[92,142408,294],{"class":151},[92,142410,1269],{"class":102},[92,142412,142413,142415,142417,142419,142421,142423,142425],{"class":94,"line":1179},[92,142414,70878],{"class":151},[92,142416,51419],{"class":102},[92,142418,549],{"class":151},[92,142420,51474],{"class":98},[92,142422,51503],{"class":151},[92,142424,63973],{"class":151},[92,142426,1269],{"class":102},[92,142428,142429,142431,142433,142435],{"class":94,"line":1193},[92,142430,135108],{"class":151},[92,142432,51419],{"class":102},[92,142434,62351],{"class":151},[92,142436,1269],{"class":102},[92,142438,142439],{"class":94,"line":1199},[92,142440,1544],{"class":102},[63,142442,142444],{"id":142443},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21978,142446,142448],{"id":142447},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[38,142450,142451],{},"设置中心点",[1441,142453],{"style":126389,"src":142454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[38,142456,142457],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21978,142459,142461],{"id":142460},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[83,142463,142465],{"className":126533,"code":142464,"language":126535,"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,142466,142467,142472,142478,142493,142498,142503],{"__ignoreMap":10},[92,142468,142469],{"class":94,"line":95},[92,142470,142471],{"class":161},"\u002F* 转换中心点 *\u002F\n",[92,142473,142474,142476],{"class":94,"line":11},[92,142475,51593],{"class":51282},[92,142477,15552],{"class":102},[92,142479,142480,142483,142485,142487,142489,142491],{"class":94,"line":1158},[92,142481,142482],{"class":151},"  transform-origin",[92,142484,51419],{"class":102},[92,142486,51574],{"class":151},[92,142488,17124],{"class":151},[92,142490,130396],{"class":102},[92,142492,135206],{"class":161},[92,142494,142495],{"class":94,"line":1173},[92,142496,142497],{"class":161},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[92,142499,142500],{"class":94,"line":1179},[92,142501,142502],{"class":161},"  \u002F* transform-origin: left top; *\u002F\n",[92,142504,142505],{"class":94,"line":1193},[92,142506,1544],{"class":102},[21978,142508,142510],{"id":142509},"_18133-旋转案例","18.1.3.3 旋转案例",[1441,142512],{"style":126389,"src":142513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[83,142515,142516],{"className":126533,"code":142336,"language":126535,"meta":10,"style":10},[89,142517,142518,142524,142540],{"__ignoreMap":10},[92,142519,142520,142522],{"class":94,"line":95},[92,142521,51593],{"class":51282},[92,142523,15552],{"class":102},[92,142525,142526,142528,142530,142532,142534,142536,142538],{"class":94,"line":11},[92,142527,136517],{"class":151},[92,142529,51419],{"class":102},[92,142531,142353],{"class":151},[92,142533,103],{"class":102},[92,142535,632],{"class":151},[92,142537,142360],{"class":98},[92,142539,2698],{"class":102},[92,142541,142542],{"class":94,"line":1158},[92,142543,1544],{"class":102},[63,142545,142547],{"id":142546},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21978,142549,142551],{"id":142550},"_18141-scale介绍","18.1.4.1 scale介绍",[38,142553,142554],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1441,142556],{"style":126389,"src":142557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21978,142559,142561],{"id":142560},"_18142-分页按钮","18.1.4.2 分页按钮",[1441,142563],{"style":126389,"src":142564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[83,142566,142568],{"className":126533,"code":142567,"language":126535,"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,142569,142570,142576,142592,142596,142600,142605,142611,142625,142630],{"__ignoreMap":10},[92,142571,142572,142574],{"class":94,"line":95},[92,142573,51593],{"class":51282},[92,142575,15552],{"class":102},[92,142577,142578,142580,142582,142585,142587,142590],{"class":94,"line":11},[92,142579,136517],{"class":151},[92,142581,51419],{"class":102},[92,142583,142584],{"class":151},"scale",[92,142586,103],{"class":102},[92,142588,142589],{"class":151},"1.2",[92,142591,2698],{"class":102},[92,142593,142594],{"class":94,"line":1158},[92,142595,1544],{"class":102},[92,142597,142598],{"class":94,"line":1173},[92,142599,135994],{"class":102},[92,142601,142602],{"class":94,"line":1179},[92,142603,142604],{"class":161},"\u002F* 2D 缩放 *\u002F\n",[92,142606,142607,142609],{"class":94,"line":1193},[92,142608,51593],{"class":51282},[92,142610,15552],{"class":102},[92,142612,142613,142615,142617,142619,142621,142623],{"class":94,"line":1199},[92,142614,136517],{"class":151},[92,142616,51419],{"class":102},[92,142618,142584],{"class":151},[92,142620,103],{"class":102},[92,142622,142589],{"class":151},[92,142624,2698],{"class":102},[92,142626,142627],{"class":94,"line":1290},[92,142628,142629],{"class":161},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[92,142631,142632],{"class":94,"line":1296},[92,142633,1544],{"class":102},[38,142635,142636],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[83,142638,142640],{"className":126533,"code":142639,"language":126535,"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,142641,142642,142647,142657,142678,142699,142703,142708,142714,142741],{"__ignoreMap":10},[92,142643,142644],{"class":94,"line":95},[92,142645,142646],{"class":161},"\u002F* 定义动画 *\u002F\n",[92,142648,142649,142652,142655],{"class":94,"line":11},[92,142650,142651],{"class":98},"@keyframes",[92,142653,142654],{"class":5196}," move",[92,142656,15552],{"class":102},[92,142658,142659,142662,142664,142666,142668,142671,142673,142675],{"class":94,"line":1158},[92,142660,142661],{"class":1942},"  0%",[92,142663,79789],{"class":102},[92,142665,48116],{"class":151},[92,142667,51419],{"class":102},[92,142669,142670],{"class":151},"translateX",[92,142672,103],{"class":102},[92,142674,294],{"class":151},[92,142676,142677],{"class":102},"); }\n",[92,142679,142680,142683,142685,142687,142689,142691,142693,142695,142697],{"class":94,"line":1173},[92,142681,142682],{"class":1942},"  100%",[92,142684,79789],{"class":102},[92,142686,48116],{"class":151},[92,142688,51419],{"class":102},[92,142690,142670],{"class":151},[92,142692,103],{"class":102},[92,142694,414],{"class":151},[92,142696,51474],{"class":98},[92,142698,142677],{"class":102},[92,142700,142701],{"class":94,"line":1179},[92,142702,1544],{"class":102},[92,142704,142705],{"class":94,"line":1193},[92,142706,142707],{"class":161},"\u002F* 调用动画 *\u002F\n",[92,142709,142710,142712],{"class":94,"line":1199},[92,142711,51593],{"class":51282},[92,142713,15552],{"class":102},[92,142715,142716,142719,142721,142723,142725,142727,142729,142731,142733,142736,142739],{"class":94,"line":1290},[92,142717,142718],{"class":151},"  animation",[92,142720,51419],{"class":102},[92,142722,135219],{"class":151},[92,142724,25100],{"class":151},[92,142726,798],{"class":98},[92,142728,78662],{"class":151},[92,142730,4072],{"class":151},[92,142732,798],{"class":98},[92,142734,142735],{"class":151}," infinite",[92,142737,142738],{"class":151}," alternate",[92,142740,1269],{"class":102},[92,142742,142743],{"class":94,"line":1296},[92,142744,1544],{"class":102},[38,142746,142636],{},[83,142748,142751],{"className":142749,"code":142750,"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,142752,142750],{"__ignoreMap":10},[21978,142754,142756],{"id":142755},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[38,142758,142759],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1441,142761],{"style":126389,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[83,142764,142765],{"className":126533,"code":142639,"language":126535,"meta":10,"style":10},[89,142766,142767,142771,142779,142797,142817,142821,142825,142831,142855],{"__ignoreMap":10},[92,142768,142769],{"class":94,"line":95},[92,142770,142646],{"class":161},[92,142772,142773,142775,142777],{"class":94,"line":11},[92,142774,142651],{"class":98},[92,142776,142654],{"class":5196},[92,142778,15552],{"class":102},[92,142780,142781,142783,142785,142787,142789,142791,142793,142795],{"class":94,"line":1158},[92,142782,142661],{"class":1942},[92,142784,79789],{"class":102},[92,142786,48116],{"class":151},[92,142788,51419],{"class":102},[92,142790,142670],{"class":151},[92,142792,103],{"class":102},[92,142794,294],{"class":151},[92,142796,142677],{"class":102},[92,142798,142799,142801,142803,142805,142807,142809,142811,142813,142815],{"class":94,"line":1173},[92,142800,142682],{"class":1942},[92,142802,79789],{"class":102},[92,142804,48116],{"class":151},[92,142806,51419],{"class":102},[92,142808,142670],{"class":151},[92,142810,103],{"class":102},[92,142812,414],{"class":151},[92,142814,51474],{"class":98},[92,142816,142677],{"class":102},[92,142818,142819],{"class":94,"line":1179},[92,142820,1544],{"class":102},[92,142822,142823],{"class":94,"line":1193},[92,142824,142707],{"class":161},[92,142826,142827,142829],{"class":94,"line":1199},[92,142828,51593],{"class":51282},[92,142830,15552],{"class":102},[92,142832,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851,142853],{"class":94,"line":1290},[92,142834,142718],{"class":151},[92,142836,51419],{"class":102},[92,142838,135219],{"class":151},[92,142840,25100],{"class":151},[92,142842,798],{"class":98},[92,142844,78662],{"class":151},[92,142846,4072],{"class":151},[92,142848,798],{"class":98},[92,142850,142735],{"class":151},[92,142852,142738],{"class":151},[92,142854,1269],{"class":102},[92,142856,142857],{"class":94,"line":1296},[92,142858,1544],{"class":102},[38,142860,142861],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[63,142863,142865],{"id":142864},"_1823-知识点回顾","18.2.3 知识点回顾",[83,142867,142868],{"className":126533,"code":128702,"language":126535,"meta":10,"style":10},[89,142869,142870,142876,142886],{"__ignoreMap":10},[92,142871,142872,142874],{"class":94,"line":95},[92,142873,51593],{"class":51282},[92,142875,15552],{"class":102},[92,142877,142878,142880,142882,142884],{"class":94,"line":11},[92,142879,128715],{"class":151},[92,142881,51419],{"class":102},[92,142883,61718],{"class":151},[92,142885,1269],{"class":102},[92,142887,142888],{"class":94,"line":1158},[92,142889,1544],{"class":102},[33,142891,142893],{"id":142892},"_183-3d-转换","18.3 3D 转换",[38,142895,142896],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[63,142898,142900],{"id":142899},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1441,142902],{"style":126389,"src":142903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[63,142905,142907],{"id":142906},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1441,142909],{"style":126389,"src":142910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[38,142912,142913],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[38,142915,142916],{},"translate3d的效果需要搭配透视perspective来使用",[1441,142918],{"style":126389,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[63,142921,142923],{"id":142922},"_1833-透视-perspective","18.3.3 透视 perspective",[1441,142925],{"style":126389,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[38,142928,142929],{},"透视写在父盒子上，单位为像素",[63,142931,142933],{"id":142932},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21978,142935,142937],{"id":142936},"_18341-分开解释","18.3.4.1 分开解释",[1441,142939],{"style":126389,"src":142940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1441,142942],{"style":126389,"src":142943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1441,142945],{"style":126389,"src":142946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[38,142948,142949],{},"总结来说就是左手原则",[21978,142951,142953],{"id":142952},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1441,142955],{"style":126389,"src":142956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[63,142958,142960],{"id":142959},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1441,142962],{"style":126389,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1441,142965],{"style":126389,"src":142966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[83,142968,142970],{"className":126533,"code":142969,"language":126535,"meta":10,"style":10},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[89,142971,142972,142978,142991,143008],{"__ignoreMap":10},[92,142973,142974,142976],{"class":94,"line":95},[92,142975,51593],{"class":51282},[92,142977,15552],{"class":102},[92,142979,142980,142983,142985,142987,142989],{"class":94,"line":11},[92,142981,142982],{"class":151},"  perspective",[92,142984,51419],{"class":102},[92,142986,65056],{"class":151},[92,142988,51474],{"class":98},[92,142990,1269],{"class":102},[92,142992,142993,142995,142997,143000,143002,143004,143006],{"class":94,"line":1158},[92,142994,136517],{"class":151},[92,142996,51419],{"class":102},[92,142998,142999],{"class":151},"rotateX",[92,143001,103],{"class":102},[92,143003,632],{"class":151},[92,143005,142360],{"class":98},[92,143007,2698],{"class":102},[92,143009,143010],{"class":94,"line":1173},[92,143011,1544],{"class":102},[63,143013,143015],{"id":143014},"_1836-案例","18.3.6 案例",[21978,143017,143019],{"id":143018},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1441,143021],{"style":126389,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1441,143024],{"style":126389,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1441,143027],{"style":126389,"src":143028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[83,143030,143032],{"className":126533,"code":143031,"language":126535,"meta":10,"style":10},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[89,143033,143034,143039,143045,143057],{"__ignoreMap":10},[92,143035,143036],{"class":94,"line":95},[92,143037,143038],{"class":161},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[92,143040,143041,143043],{"class":94,"line":11},[92,143042,133530],{"class":1942},[92,143044,15552],{"class":102},[92,143046,143047,143049,143051,143053,143055],{"class":94,"line":1158},[92,143048,142982],{"class":151},[92,143050,51419],{"class":102},[92,143052,65056],{"class":151},[92,143054,51474],{"class":98},[92,143056,1269],{"class":102},[92,143058,143059],{"class":94,"line":1173},[92,143060,1544],{"class":102},[21978,143062,143064],{"id":143063},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1441,143066],{"style":126389,"src":143067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[83,143069,143070],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,143071,143072,143076,143090,143094],{"__ignoreMap":10},[92,143073,143074],{"class":94,"line":95},[92,143075,130644],{"class":161},[92,143077,143078,143080,143082,143084,143086,143088],{"class":94,"line":11},[92,143079,1013],{"class":102},[92,143081,51593],{"class":51282},[92,143083,53468],{"class":1942},[92,143085,148],{"class":102},[92,143087,130657],{"class":207},[92,143089,51289],{"class":102},[92,143091,143092],{"class":94,"line":1158},[92,143093,130664],{"class":102},[92,143095,143096,143098,143100],{"class":94,"line":1173},[92,143097,51767],{"class":102},[92,143099,51593],{"class":51282},[92,143101,51289],{"class":102},[21978,143103,143105],{"id":143104},"_18363-旋转木马","18.3.6.3 旋转木马",[1441,143107],{"style":126389,"src":143108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[83,143110,143111],{"className":126533,"code":142336,"language":126535,"meta":10,"style":10},[89,143112,143113,143119,143135],{"__ignoreMap":10},[92,143114,143115,143117],{"class":94,"line":95},[92,143116,51593],{"class":51282},[92,143118,15552],{"class":102},[92,143120,143121,143123,143125,143127,143129,143131,143133],{"class":94,"line":11},[92,143122,136517],{"class":151},[92,143124,51419],{"class":102},[92,143126,142353],{"class":151},[92,143128,103],{"class":102},[92,143130,632],{"class":151},[92,143132,142360],{"class":98},[92,143134,2698],{"class":102},[92,143136,143137],{"class":94,"line":1158},[92,143138,1544],{"class":102},[5106,143140,143141],{},"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":143143},[143144,143151],{"id":142239,"depth":11,"text":142240,"children":143145},[143146,143147,143148,143149,143150],{"id":142263,"depth":1158,"text":142264},{"id":142318,"depth":1158,"text":142319},{"id":142443,"depth":1158,"text":142444},{"id":142546,"depth":1158,"text":142547},{"id":142864,"depth":1158,"text":142865},{"id":142892,"depth":11,"text":142893,"children":143152},[143153,143154,143155,143156,143157,143158],{"id":142899,"depth":1158,"text":142900},{"id":142906,"depth":1158,"text":142907},{"id":142922,"depth":1158,"text":142923},{"id":142932,"depth":1158,"text":142933},{"id":142959,"depth":1158,"text":142960},{"id":143014,"depth":1158,"text":143015},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142231,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143165,"title":143166,"body":143167,"description":23357,"extension":14,"meta":143370,"navigation":17,"path":143371,"seo":143372,"stem":143373,"__hash__":143374},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143168,"toc":143359},[143169,143172,143176,143179,143182,143186,143189,143192,143195,143199,143202,143206,143209,143213,143216,143220,143234,143238,143263,143266,143269,143286,143290,143294,143297,143300,143304,143307,143310,143328,143332,143335,143349,143353,143356],[29,143170,143166],{"id":143171},"_19-移动端基础-前缀现状与视口",[33,143173,143175],{"id":143174},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1441,143177],{"style":126389,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[38,143180,143181],{},"意思就是加个前缀，增加兼容性",[33,143183,143185],{"id":143184},"_192-移动端现状认识","19.2 移动端现状认识",[1441,143187],{"style":126389,"src":143188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[38,143190,143191],{},"调试方法：",[1441,143193],{"style":126389,"src":143194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[33,143196,143198],{"id":143197},"_193-视口","19.3 视口",[38,143200,143201],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[63,143203,143205],{"id":143204},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1441,143207],{"style":126389,"src":143208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[63,143210,143212],{"id":143211},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1441,143214],{"style":126389,"src":143215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[63,143217,143219],{"id":143218},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1110,143221,143222,143225,143228,143231],{},[49,143223,143224],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[49,143226,143227],{},"理想视口，对设备来讲，是最理想的视口尺寸",[49,143229,143230],{},"需要手动添写meta视口标签通知浏览器操作",[49,143232,143233],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[63,143235,143237],{"id":143236},"_1934-meta视口标签","19.3.4 meta视口标签",[83,143239,143241],{"className":127280,"code":143240,"language":127282,"meta":10,"style":10},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[89,143242,143243],{"__ignoreMap":10},[92,143244,143245,143247,143249,143251,143253,143255,143257,143259,143261],{"class":94,"line":95},[92,143246,1013],{"class":102},[92,143248,51326],{"class":51282},[92,143250,14900],{"class":1942},[92,143252,148],{"class":102},[92,143254,51373],{"class":207},[92,143256,51353],{"class":1942},[92,143258,148],{"class":102},[92,143260,51380],{"class":207},[92,143262,51289],{"class":102},[1441,143264],{"style":126389,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[38,143267,143268],{},"标准视口设置：",[46,143270,143271,143274,143277,143280,143283],{},[49,143272,143273],{},"视口宽度和设备保持一致",[49,143275,143276],{},"视口的默认缩放比例1.0",[49,143278,143279],{},"不允许用户自行缩放",[49,143281,143282],{},"最大允许的缩放比例1.0",[49,143284,143285],{},"最小允许的缩放比例1.0",[63,143287,143289],{"id":143288},"_1935-二倍图","19.3.5 二倍图",[21978,143291,143293],{"id":143292},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1441,143295],{"style":126389,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1441,143298],{"style":126389,"src":143299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21978,143301,143303],{"id":143302},"_19352-多倍图","19.3.5.2 多倍图",[1441,143305],{"style":126389,"src":143306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[38,143308,143309],{},"二倍图法，代码如下：",[83,143311,143313],{"className":126533,"code":143312,"language":126535,"meta":10,"style":10},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[89,143314,143315,143320],{"__ignoreMap":10},[92,143316,143317],{"class":94,"line":95},[92,143318,143319],{"class":161},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[92,143321,143322,143325],{"class":94,"line":11},[92,143323,143324],{"class":51282},"background-size",[92,143326,143327],{"class":102},": 50% 50%;\n",[21978,143329,143331],{"id":143330},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1441,143333],{"style":126389,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[46,143336,143337,143340,143343,143346],{},[49,143338,143339],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[49,143341,143342],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[49,143344,143345],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[49,143347,143348],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21978,143350,143352],{"id":143351},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1441,143354],{"style":126389,"src":143355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5106,143357,143358],{},"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":143360},[143361,143362,143363],{"id":143174,"depth":11,"text":143175},{"id":143184,"depth":11,"text":143185},{"id":143197,"depth":11,"text":143198,"children":143364},[143365,143366,143367,143368,143369],{"id":143204,"depth":1158,"text":143205},{"id":143211,"depth":1158,"text":143212},{"id":143218,"depth":1158,"text":143219},{"id":143236,"depth":1158,"text":143237},{"id":143288,"depth":1158,"text":143289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143166,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143376,"title":143377,"body":143378,"description":23357,"extension":14,"meta":144255,"navigation":17,"path":144256,"seo":144257,"stem":144258,"__hash__":144259},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143379,"toc":144239},[143380,143383,143387,143394,143397,143404,143407,143412,143415,143419,143423,143430,143433,143436,143440,143443,143446,143449,143452,143455,143459,143462,143466,143468,143471,143474,143477,143480,143482,143485,143487,143517,143519,143549,143553,143556,143560,143563,143580,143583,143586,143662,143664,143667,143670,143673,143676,143678,143681,143684,143688,143710,143713,143716,143720,143723,143729,143732,143736,143739,143742,143746,143749,143752,143755,143759,143762,143765,143768,143771,143775,143778,143782,143789,143792,143795,143798,143801,143811,143814,143817,143824,143827,143831,143834,143837,143841,143844,143847,143850,143895,143898,143901,143904,143906,144035,144037,144075,144078,144081,144083,144201,144203,144237],[29,143381,143377],{"id":143382},"_20-移动端布局实战上篇",[33,143384,143386],{"id":143385},"_201-移动端主流方案","20.1 移动端主流方案",[46,143388,143389],{},[49,143390,143391],{},[252,143392,143393],{},"单独移动端页面（主流）",[1441,143395],{"style":126389,"src":143396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[46,143398,143399],{"start":11},[49,143400,143401],{},[252,143402,143403],{},"响应式兼容PC移动端",[1441,143405],{"style":126389,"src":143406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[46,143408,143409],{"start":1158},[49,143410,143411],{},"两种页面选型布局方式",[1441,143413],{"style":126389,"src":143414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[33,143416,143418],{"id":143417},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[63,143420,143422],{"id":143421},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[38,143424,143425,143426],{},"官网地址： ",[341,143427,143428],{"href":143428,"rel":143429},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23846],[1441,143431],{"style":126389,"src":143432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1441,143434],{"style":126389,"src":143435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[63,143437,143439],{"id":143438},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1441,143441],{"style":126389,"src":143442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1441,143444],{"style":126389,"src":143445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[38,143447,143448],{},"去除高亮：",[38,143450,143451],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[38,143453,143454],{},"-webkit- tap-highlight-color: transparent;",[33,143456,143458],{"id":143457},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1441,143460],{"style":126389,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[33,143463,143465],{"id":143464},"_204-流式布局案例","20.4 流式布局案例",[38,143467,132],{},[38,143469,143470],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[38,143472,143473],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[38,143475,143476],{},"图片格式：",[1441,143478],{"style":126389,"src":143479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[38,143481,135576],{},[1441,143483],{"style":126389,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[38,143486,139903],{},[83,143488,143489],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,143490,143491],{"__ignoreMap":10},[92,143492,143493,143495,143497,143499,143501,143503,143505,143507,143509,143511,143513,143515],{"class":94,"line":95},[92,143494,1013],{"class":102},[92,143496,1441],{"class":51282},[92,143498,55221],{"class":1942},[92,143500,148],{"class":102},[92,143502,134050],{"class":207},[92,143504,55229],{"class":1942},[92,143506,148],{"class":102},[92,143508,134057],{"class":207},[92,143510,134060],{"class":1942},[92,143512,148],{"class":102},[92,143514,134065],{"class":207},[92,143516,51289],{"class":102},[38,143518,139992],{},[83,143520,143521],{"className":127280,"code":134035,"language":127282,"meta":10,"style":10},[89,143522,143523],{"__ignoreMap":10},[92,143524,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543,143545,143547],{"class":94,"line":95},[92,143526,1013],{"class":102},[92,143528,1441],{"class":51282},[92,143530,55221],{"class":1942},[92,143532,148],{"class":102},[92,143534,134050],{"class":207},[92,143536,55229],{"class":1942},[92,143538,148],{"class":102},[92,143540,134057],{"class":207},[92,143542,134060],{"class":1942},[92,143544,148],{"class":102},[92,143546,134065],{"class":207},[92,143548,51289],{"class":102},[33,143550,143552],{"id":143551},"_205-flex布局","20.5 flex布局",[1441,143554],{"style":126389,"src":143555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[63,143557,143559],{"id":143558},"_2051-布局原理","20.5.1 布局原理",[38,143561,143562],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1110,143564,143565,143568,143571,143574,143577],{},[49,143566,143567],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[49,143569,143570],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[49,143572,143573],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[49,143575,143576],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[49,143578,143579],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[38,143581,143582],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[38,143584,143585],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[83,143587,143589],{"className":126533,"code":143588,"language":126535,"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,143590,143591,143596,143603,143613,143625,143636,143647,143658],{"__ignoreMap":10},[92,143592,143593],{"class":94,"line":95},[92,143594,143595],{"class":161},"\u002F* Flex 弹性布局 *\u002F\n",[92,143597,143598,143601],{"class":94,"line":11},[92,143599,143600],{"class":1942},".container",[92,143602,15552],{"class":102},[92,143604,143605,143607,143609,143611],{"class":94,"line":1158},[92,143606,128149],{"class":151},[92,143608,51419],{"class":102},[92,143610,51459],{"class":151},[92,143612,1269],{"class":102},[92,143614,143615,143618,143620,143623],{"class":94,"line":1173},[92,143616,143617],{"class":151},"  flex-direction",[92,143619,51419],{"class":102},[92,143621,143622],{"class":151},"row",[92,143624,1269],{"class":102},[92,143626,143627,143630,143632,143634],{"class":94,"line":1179},[92,143628,143629],{"class":151},"  justify-content",[92,143631,51419],{"class":102},[92,143633,51650],{"class":151},[92,143635,1269],{"class":102},[92,143637,143638,143641,143643,143645],{"class":94,"line":1193},[92,143639,143640],{"class":151},"  align-items",[92,143642,51419],{"class":102},[92,143644,51574],{"class":151},[92,143646,1269],{"class":102},[92,143648,143649,143652,143654,143656],{"class":94,"line":1199},[92,143650,143651],{"class":151},"  flex-wrap",[92,143653,51419],{"class":102},[92,143655,78592],{"class":151},[92,143657,1269],{"class":102},[92,143659,143660],{"class":94,"line":1290},[92,143661,1544],{"class":102},[38,143663,70435],{},[38,143665,143666],{},".form-item .male-label {",[38,143668,143669],{},"   margin-right: 20px;",[38,143671,143672],{},"   display: inline-flex;",[38,143674,143675],{},"   align-items: center;",[38,143677,1049],{},[1441,143679],{"style":126389,"src":143680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1441,143682],{"style":126389,"src":143683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[63,143685,143687],{"id":143686},"_2052-常见父项属性","20.5.2 常见父项属性",[46,143689,143690,143693,143696,143699,143702,143705,143708],{},[49,143691,143692],{},"flex-direction：设置主轴的方向",[49,143694,143695],{},"justify-content：设置主轴上的子元素排列方式",[49,143697,143698],{},"flex-wrap：设置子元素是否换行",[49,143700,143701],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[49,143703,143704],{},"align-items：设置侧轴上的子元素排列方式（单行）",[49,143706,143707],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[49,143709,143692],{},[1441,143711],{"style":126389,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1441,143714],{"style":126389,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[46,143717,143718],{"start":11},[49,143719,143695],{},[1441,143721],{"style":126389,"src":143722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[38,143724,143725,143728],{},[89,143726,143727],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[38,143730,143731],{},"跟着主轴走",[46,143733,143734],{"start":1158},[49,143735,143698],{},[1441,143737],{"style":126389,"src":143738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[38,143740,143741],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[46,143743,143744],{"start":1173},[49,143745,143701],{},[1441,143747],{"style":126389,"src":143748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[38,143750,143751],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[38,143753,143754],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[46,143756,143757],{"start":1179},[49,143758,143704],{},[1441,143760],{"style":126389,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[38,143763,143764],{},"align-items与align-content之间的区别：",[38,143766,143767],{},"单找items，多找content",[1441,143769],{"style":126389,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[46,143772,143773],{"start":1193},[49,143774,143707],{},[1441,143776],{"style":126389,"src":143777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[63,143779,143781],{"id":143780},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[46,143783,143784],{},[49,143785,143786],{},[252,143787,143788],{},"flex 属性",[38,143790,143791],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1441,143793],{"style":126389,"src":143794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[38,143796,143797],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[38,143799,143800],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[46,143802,143803],{"start":11},[49,143804,143805,13775,143808],{},[252,143806,143807],{},"align-self",[252,143809,143810],{},"控制子项自己在侧轴上的排列方式",[1441,143812],{"style":126389,"src":143813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[38,143815,143816],{},"单个子盒子在父盒子侧轴上的排列方式",[46,143818,143819],{"start":1158},[49,143820,143821,143823],{},[252,143822,95278],{}," 属性定义项目的排列顺序",[1441,143825],{"style":126389,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[63,143828,143830],{"id":143829},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1441,143832],{"style":126389,"src":143833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[38,143835,143836],{},"必须要添加浏览器的私有前缀",[63,143838,143840],{"id":143839},"_2055-携程网首页案例","20.5.5 携程网首页案例",[38,143842,143843],{},"学到最重要的知识：",[38,143845,143846],{},"flex处理这样的布局思路",[1441,143848],{"style":126389,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[83,143851,143853],{"className":126533,"code":143852,"language":126535,"meta":10,"style":10},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[89,143854,143855,143861,143871,143881,143891],{"__ignoreMap":10},[92,143856,143857,143859],{"class":94,"line":95},[92,143858,143600],{"class":1942},[92,143860,15552],{"class":102},[92,143862,143863,143865,143867,143869],{"class":94,"line":11},[92,143864,128149],{"class":151},[92,143866,51419],{"class":102},[92,143868,51459],{"class":151},[92,143870,1269],{"class":102},[92,143872,143873,143875,143877,143879],{"class":94,"line":1158},[92,143874,143629],{"class":151},[92,143876,51419],{"class":102},[92,143878,51574],{"class":151},[92,143880,1269],{"class":102},[92,143882,143883,143885,143887,143889],{"class":94,"line":1173},[92,143884,143640],{"class":151},[92,143886,51419],{"class":102},[92,143888,51574],{"class":151},[92,143890,1269],{"class":102},[92,143892,143893],{"class":94,"line":1179},[92,143894,1544],{"class":102},[38,143896,143897],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[38,143899,143900],{},"使用属性选择器",[1441,143902],{"style":126389,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[38,143905,68871],{},[83,143907,143909],{"className":127280,"code":143908,"language":127282,"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,143910,143911,143916,143930,143935,143955,143960,143979,143984,144003,144008,144027],{"__ignoreMap":10},[92,143912,143913],{"class":94,"line":95},[92,143914,143915],{"class":161},"\u003C!-- 携程网移动端案例结构 -->\n",[92,143917,143918,143920,143922,143924,143926,143928],{"class":94,"line":11},[92,143919,1013],{"class":102},[92,143921,51593],{"class":51282},[92,143923,53468],{"class":1942},[92,143925,148],{"class":102},[92,143927,92305],{"class":207},[92,143929,51289],{"class":102},[92,143931,143932],{"class":94,"line":1158},[92,143933,143934],{"class":161},"  \u003C!-- 搜索栏 -->\n",[92,143936,143937,143939,143941,143943,143945,143948,143951,143953],{"class":94,"line":1173},[92,143938,52126],{"class":102},[92,143940,51593],{"class":51282},[92,143942,53468],{"class":1942},[92,143944,148],{"class":102},[92,143946,143947],{"class":207},"\"search-index\"",[92,143949,143950],{"class":102},">...\u003C\u002F",[92,143952,51593],{"class":51282},[92,143954,51289],{"class":102},[92,143956,143957],{"class":94,"line":1179},[92,143958,143959],{"class":161},"  \u003C!-- 焦点图 -->\n",[92,143961,143962,143964,143966,143968,143970,143973,143975,143977],{"class":94,"line":1193},[92,143963,52126],{"class":102},[92,143965,51593],{"class":51282},[92,143967,53468],{"class":1942},[92,143969,148],{"class":102},[92,143971,143972],{"class":207},"\"focus\"",[92,143974,143950],{"class":102},[92,143976,51593],{"class":51282},[92,143978,51289],{"class":102},[92,143980,143981],{"class":94,"line":1199},[92,143982,143983],{"class":161},"  \u003C!-- 主导航 -->\n",[92,143985,143986,143988,143990,143992,143994,143997,143999,144001],{"class":94,"line":1290},[92,143987,52126],{"class":102},[92,143989,51593],{"class":51282},[92,143991,53468],{"class":1942},[92,143993,148],{"class":102},[92,143995,143996],{"class":207},"\"local-nav\"",[92,143998,143950],{"class":102},[92,144000,51593],{"class":51282},[92,144002,51289],{"class":102},[92,144004,144005],{"class":94,"line":1296},[92,144006,144007],{"class":161},"  \u003C!-- 子导航 -->\n",[92,144009,144010,144012,144014,144016,144018,144021,144023,144025],{"class":94,"line":1308},[92,144011,52126],{"class":102},[92,144013,51593],{"class":51282},[92,144015,53468],{"class":1942},[92,144017,148],{"class":102},[92,144019,144020],{"class":207},"\"nav-common\"",[92,144022,143950],{"class":102},[92,144024,51593],{"class":51282},[92,144026,51289],{"class":102},[92,144028,144029,144031,144033],{"class":94,"line":1591},[92,144030,51767],{"class":102},[92,144032,51593],{"class":51282},[92,144034,51289],{"class":102},[38,144036,70435],{},[83,144038,144039],{"className":126533,"code":136985,"language":126535,"meta":10,"style":10},[89,144040,144041,144055,144071],{"__ignoreMap":10},[92,144042,144043,144045,144047,144049,144051,144053],{"class":94,"line":95},[92,144044,53803],{"class":51282},[92,144046,993],{"class":102},[92,144048,103088],{"class":1942},[92,144050,148],{"class":98},[92,144052,62681],{"class":207},[92,144054,137002],{"class":102},[92,144056,144057,144059,144061,144063,144065,144067,144069],{"class":94,"line":11},[92,144058,70878],{"class":151},[92,144060,51419],{"class":102},[92,144062,320],{"class":151},[92,144064,51474],{"class":98},[92,144066,51503],{"class":151},[92,144068,130113],{"class":151},[92,144070,1269],{"class":102},[92,144072,144073],{"class":94,"line":1158},[92,144074,1544],{"class":102},[38,144076,144077],{},"总代码和效果展示：",[1441,144079],{"style":126389,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[38,144082,68871],{},[83,144084,144085],{"className":127280,"code":143908,"language":127282,"meta":10,"style":10},[89,144086,144087,144091,144105,144109,144127,144131,144149,144153,144171,144175,144193],{"__ignoreMap":10},[92,144088,144089],{"class":94,"line":95},[92,144090,143915],{"class":161},[92,144092,144093,144095,144097,144099,144101,144103],{"class":94,"line":11},[92,144094,1013],{"class":102},[92,144096,51593],{"class":51282},[92,144098,53468],{"class":1942},[92,144100,148],{"class":102},[92,144102,92305],{"class":207},[92,144104,51289],{"class":102},[92,144106,144107],{"class":94,"line":1158},[92,144108,143934],{"class":161},[92,144110,144111,144113,144115,144117,144119,144121,144123,144125],{"class":94,"line":1173},[92,144112,52126],{"class":102},[92,144114,51593],{"class":51282},[92,144116,53468],{"class":1942},[92,144118,148],{"class":102},[92,144120,143947],{"class":207},[92,144122,143950],{"class":102},[92,144124,51593],{"class":51282},[92,144126,51289],{"class":102},[92,144128,144129],{"class":94,"line":1179},[92,144130,143959],{"class":161},[92,144132,144133,144135,144137,144139,144141,144143,144145,144147],{"class":94,"line":1193},[92,144134,52126],{"class":102},[92,144136,51593],{"class":51282},[92,144138,53468],{"class":1942},[92,144140,148],{"class":102},[92,144142,143972],{"class":207},[92,144144,143950],{"class":102},[92,144146,51593],{"class":51282},[92,144148,51289],{"class":102},[92,144150,144151],{"class":94,"line":1199},[92,144152,143983],{"class":161},[92,144154,144155,144157,144159,144161,144163,144165,144167,144169],{"class":94,"line":1290},[92,144156,52126],{"class":102},[92,144158,51593],{"class":51282},[92,144160,53468],{"class":1942},[92,144162,148],{"class":102},[92,144164,143996],{"class":207},[92,144166,143950],{"class":102},[92,144168,51593],{"class":51282},[92,144170,51289],{"class":102},[92,144172,144173],{"class":94,"line":1296},[92,144174,144007],{"class":161},[92,144176,144177,144179,144181,144183,144185,144187,144189,144191],{"class":94,"line":1308},[92,144178,52126],{"class":102},[92,144180,51593],{"class":51282},[92,144182,53468],{"class":1942},[92,144184,148],{"class":102},[92,144186,144020],{"class":207},[92,144188,143950],{"class":102},[92,144190,51593],{"class":51282},[92,144192,51289],{"class":102},[92,144194,144195,144197,144199],{"class":94,"line":1591},[92,144196,51767],{"class":102},[92,144198,51593],{"class":51282},[92,144200,51289],{"class":102},[38,144202,70435],{},[83,144204,144205],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,144206,144207,144211,144225,144229],{"__ignoreMap":10},[92,144208,144209],{"class":94,"line":95},[92,144210,130644],{"class":161},[92,144212,144213,144215,144217,144219,144221,144223],{"class":94,"line":11},[92,144214,1013],{"class":102},[92,144216,51593],{"class":51282},[92,144218,53468],{"class":1942},[92,144220,148],{"class":102},[92,144222,130657],{"class":207},[92,144224,51289],{"class":102},[92,144226,144227],{"class":94,"line":1158},[92,144228,130664],{"class":102},[92,144230,144231,144233,144235],{"class":94,"line":1173},[92,144232,51767],{"class":102},[92,144234,51593],{"class":51282},[92,144236,51289],{"class":102},[5106,144238,137934],{},{"title":10,"searchDepth":11,"depth":11,"links":144240},[144241,144242,144246,144247,144248],{"id":143385,"depth":11,"text":143386},{"id":143417,"depth":11,"text":143418,"children":144243},[144244,144245],{"id":143421,"depth":1158,"text":143422},{"id":143438,"depth":1158,"text":143439},{"id":143457,"depth":11,"text":143458},{"id":143464,"depth":11,"text":143465},{"id":143551,"depth":11,"text":143552,"children":144249},[144250,144251,144252,144253,144254],{"id":143558,"depth":1158,"text":143559},{"id":143686,"depth":1158,"text":143687},{"id":143780,"depth":1158,"text":143781},{"id":143829,"depth":1158,"text":143830},{"id":143839,"depth":1158,"text":143840},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143377,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144261,"title":144262,"body":144263,"description":23357,"extension":14,"meta":145490,"navigation":17,"path":145491,"seo":145492,"stem":145493,"__hash__":145494},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144264,"toc":145468},[144265,144268,144272,144276,144279,144282,144286,144291,144294,144297,144300,144303,144306,144363,144366,144371,144374,144377,144381,144392,144396,144399,144402,144409,144414,144418,144421,144427,144430,144434,144437,144444,144447,144450,144457,144460,144467,144470,144473,144480,144483,144486,144488,144505,144509,144512,144515,144518,144522,144525,144528,144531,144534,144537,144540,144542,144545,144548,144610,144613,144723,144730,144736,144739,144742,144746,144749,144753,144758,144761,144768,144771,144777,144782,144785,144788,144791,144794,144797,144800,144803,144806,144862,144864,144890,144894,144897,144900,144903,144911,144914,144917,144921,144977,144980,144984,144990,145001,145004,145009,145012,145015,145021,145024,145027,145030,145033,145036,145039,145042,145045,145070,145076,145079,145082,145085,145088,145091,145094,145099,145102,145105,145108,145116,145119,145126,145129,145132,145134,145158,145160,145163,145166,145169,145172,145175,145178,145181,145215,145218,145221,145255,145262,145265,145268,145271,145274,145277,145280,145287,145290,145293,145296,145299,145306,145309,145312,145319,145322,145325,145329,145332,145335,145338,145341,145344,145347,145350,145353,145355,145379,145381,145405,145409,145420,145423,145426,145429,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459,145462,145465],[29,144266,144262],{"id":144267},"_21-移动端布局实战下篇",[33,144269,144271],{"id":144270},"_211-rem适配布局","21.1 rem适配布局",[63,144273,144275],{"id":144274},"_2111-rem单位","21.1.1 rem单位",[1441,144277],{"style":126389,"src":144278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[38,144280,144281],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[63,144283,144285],{"id":144284},"_2112-媒体查询","21.1.2 媒体查询",[46,144287,144288],{},[49,144289,144290],{},"参数介绍",[1441,144292],{"style":126389,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1441,144295],{"style":126389,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1441,144298],{"style":126389,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1441,144301],{"style":126389,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1441,144304],{"style":126389,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[83,144307,144309],{"className":126533,"code":144308,"language":126535,"meta":10,"style":10},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[89,144310,144311,144316,144335,144342,144355,144359],{"__ignoreMap":10},[92,144312,144313],{"class":94,"line":95},[92,144314,144315],{"class":161},"\u002F* 媒体查询 *\u002F\n",[92,144317,144318,144321,144323,144326,144328,144331,144333],{"class":94,"line":11},[92,144319,144320],{"class":98},"@media",[92,144322,1637],{"class":102},[92,144324,144325],{"class":151},"max-width",[92,144327,51419],{"class":102},[92,144329,144330],{"class":151},"768",[92,144332,51474],{"class":98},[92,144334,12422],{"class":102},[92,144336,144337,144340],{"class":94,"line":1158},[92,144338,144339],{"class":1942},"  .container",[92,144341,15552],{"class":102},[92,144343,144344,144347,144349,144351,144353],{"class":94,"line":1173},[92,144345,144346],{"class":151},"    width",[92,144348,51419],{"class":102},[92,144350,414],{"class":151},[92,144352,431],{"class":98},[92,144354,1269],{"class":102},[92,144356,144357],{"class":94,"line":1179},[92,144358,127329],{"class":102},[92,144360,144361],{"class":94,"line":1193},[92,144362,1544],{"class":102},[38,144364,144365],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[46,144367,144368],{"start":11},[49,144369,144370],{},"引入资源",[1441,144372],{"style":126389,"src":144373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[38,144375,144376],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[63,144378,144380],{"id":144379},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1110,144382,144383,144386,144389],{},[49,144384,144385],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[49,144387,144388],{},"媒体查询可以根据不同设备宽度来修改样式",[49,144390,144391],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[33,144393,144395],{"id":144394},"_212-less基础","21.2 Less基础",[38,144397,144398],{},"css冗余度较高，不利于复用，没有很好的计算能力",[38,144400,144401],{},"Less可以解决该问题，它是css的扩展语言",[38,144403,144404,144405],{},"Less中文网址： ",[341,144406,144407],{"href":144407,"rel":144408},"http:\u002F\u002Flesscss.cn\u002F",[23846],[38,144410,144411],{},[252,144412,144413],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[63,144415,144417],{"id":144416},"_2121-less安装","21.2.1 less安装",[38,144419,144420],{},"如果使用vscode，则无需进行下方安装步骤",[38,144422,144423],{},[341,144424,144425],{"href":144425,"rel":144426},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23846],[1441,144428],{"style":126389,"src":144429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[63,144431,144433],{"id":144432},"_2122-less使用","21.2.2 less使用",[38,144435,144436],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[46,144438,144439],{},[49,144440,144441],{},[252,144442,144443],{},"Less 变量",[1441,144445],{"style":126389,"src":144446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1441,144448],{"style":126389,"src":144449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[46,144451,144452],{"start":11},[49,144453,144454],{},[252,144455,144456],{},"Less 编译",[1441,144458],{"style":126389,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[46,144461,144462],{"start":1158},[49,144463,144464],{},[252,144465,144466],{},"Less 嵌套",[1441,144468],{"style":126389,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1441,144471],{"style":126389,"src":144472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[46,144474,144475],{"start":1173},[49,144476,144477],{},[252,144478,144479],{},"Less 运算",[1441,144481],{"style":126389,"src":144482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[38,144484,144485],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[38,144487,132],{},[1110,144489,144490,144493,144496,144499,144502],{},[49,144491,144492],{},"乘号（*）和除号（\u002F）的写法",[49,144494,144495],{},"运算符中间左右有个空格隔开 1px + 5",[49,144497,144498],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[49,144500,144501],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[49,144503,144504],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[33,144506,144508],{"id":144507},"_213-rem-适配方案","21.3 rem 适配方案",[38,144510,144511],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[38,144513,144514],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1441,144516],{"style":126389,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[63,144519,144521],{"id":144520},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[38,144523,144524],{},"rem + 媒体查询 + less 技术",[1441,144526],{"style":126389,"src":144527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[38,144529,144530],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[38,144532,144533],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1441,144535],{"style":126389,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[38,144538,144539],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[38,144541,14613],{},[1441,144543],{"style":126389,"src":144544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[38,144546,144547],{},"index.html:",[83,144549,144551],{"className":126533,"code":144550,"language":126535,"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,144552,144553,144558,144564,144580,144584,144590,144606],{"__ignoreMap":10},[92,144554,144555],{"class":94,"line":95},[92,144556,144557],{"class":161},"\u002F* rem 适配方案 *\u002F\n",[92,144559,144560,144562],{"class":94,"line":11},[92,144561,50617],{"class":51282},[92,144563,15552],{"class":102},[92,144565,144566,144568,144570,144573,144575,144577],{"class":94,"line":1158},[92,144567,70608],{"class":151},[92,144569,51419],{"class":102},[92,144571,144572],{"class":151},"62.5",[92,144574,431],{"class":98},[92,144576,130396],{"class":102},[92,144578,144579],{"class":161},"\u002F* 1rem = 10px *\u002F\n",[92,144581,144582],{"class":94,"line":1173},[92,144583,1544],{"class":102},[92,144585,144586,144588],{"class":94,"line":1179},[92,144587,130381],{"class":1942},[92,144589,15552],{"class":102},[92,144591,144592,144594,144596,144598,144601,144603],{"class":94,"line":1193},[92,144593,70550],{"class":151},[92,144595,51419],{"class":102},[92,144597,549],{"class":151},[92,144599,144600],{"class":98},"rem",[92,144602,130396],{"class":102},[92,144604,144605],{"class":161},"\u002F* 100px *\u002F\n",[92,144607,144608],{"class":94,"line":1199},[92,144609,1544],{"class":102},[38,144611,144612],{},"common.less",[83,144614,144616],{"className":126533,"code":144615,"language":126535,"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,144617,144618,144624,144639,144643,144649,144663,144667,144671,144675,144681,144695,144699,144705,144719],{"__ignoreMap":10},[92,144619,144620,144622],{"class":94,"line":95},[92,144621,50617],{"class":51282},[92,144623,15552],{"class":102},[92,144625,144626,144628,144630,144632,144634,144636],{"class":94,"line":11},[92,144627,70608],{"class":151},[92,144629,51419],{"class":102},[92,144631,144572],{"class":151},[92,144633,431],{"class":98},[92,144635,26049],{"class":102},[92,144637,144638],{"class":161},"\u002F* 10px *\u002F\n",[92,144640,144641],{"class":94,"line":1158},[92,144642,1544],{"class":102},[92,144644,144645,144647],{"class":94,"line":1173},[92,144646,51593],{"class":51282},[92,144648,15552],{"class":102},[92,144650,144651,144653,144655,144657,144659,144661],{"class":94,"line":1179},[92,144652,70550],{"class":151},[92,144654,51419],{"class":102},[92,144656,549],{"class":151},[92,144658,144600],{"class":98},[92,144660,26049],{"class":102},[92,144662,144605],{"class":161},[92,144664,144665],{"class":94,"line":1193},[92,144666,1544],{"class":102},[92,144668,144669],{"class":94,"line":1199},[92,144670,135994],{"class":102},[92,144672,144673],{"class":94,"line":1290},[92,144674,144557],{"class":161},[92,144676,144677,144679],{"class":94,"line":1296},[92,144678,50617],{"class":51282},[92,144680,15552],{"class":102},[92,144682,144683,144685,144687,144689,144691,144693],{"class":94,"line":1308},[92,144684,70608],{"class":151},[92,144686,51419],{"class":102},[92,144688,144572],{"class":151},[92,144690,431],{"class":98},[92,144692,130396],{"class":102},[92,144694,144579],{"class":161},[92,144696,144697],{"class":94,"line":1591},[92,144698,1544],{"class":102},[92,144700,144701,144703],{"class":94,"line":1596},[92,144702,130381],{"class":1942},[92,144704,15552],{"class":102},[92,144706,144707,144709,144711,144713,144715,144717],{"class":94,"line":1602},[92,144708,70550],{"class":151},[92,144710,51419],{"class":102},[92,144712,549],{"class":151},[92,144714,144600],{"class":98},[92,144716,130396],{"class":102},[92,144718,144605],{"class":161},[92,144720,144721],{"class":94,"line":1607},[92,144722,1544],{"class":102},[38,144724,144725,144726,144729],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23534,144727,144728],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[83,144731,144734],{"className":144732,"code":144733,"language":5167},[5165],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[89,144735,144733],{"__ignoreMap":10},[38,144737,144738],{},"less保存时会自动变成.css文件",[38,144740,144741],{},"好好搞懂上述代码写法",[63,144743,144745],{"id":144744},"_2132-样式导入样式","21.3.2 样式导入样式",[1441,144747],{"style":126389,"src":144748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[63,144750,144752],{"id":144751},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[46,144754,144755],{},[49,144756,144757],{},"准备工作",[1441,144759],{"style":126389,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[38,144762,144763,144764],{},"github地址：",[341,144765,144766],{"href":144766,"rel":144767},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23846],[38,144769,144770],{},"下载之后，将index.js文件拖到项目中就可以了",[38,144772,144773,144774],{},"js文件引入到index.html中使用的是",[89,144775,144776],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[46,144778,144779],{"start":11},[49,144780,144781],{},"vscode插件",[1441,144783],{"style":126389,"src":144784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[38,144786,144787],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[38,144789,144790],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1441,144792],{"style":126389,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[38,144795,144796],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1441,144798],{"style":126389,"src":144799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[38,144801,144802],{},"修改成75就可以，alt+z为快捷键",[38,144804,144805],{},"index.css：",[83,144807,144808],{"className":126533,"code":144550,"language":126535,"meta":10,"style":10},[89,144809,144810,144814,144820,144834,144838,144844,144858],{"__ignoreMap":10},[92,144811,144812],{"class":94,"line":95},[92,144813,144557],{"class":161},[92,144815,144816,144818],{"class":94,"line":11},[92,144817,50617],{"class":51282},[92,144819,15552],{"class":102},[92,144821,144822,144824,144826,144828,144830,144832],{"class":94,"line":1158},[92,144823,70608],{"class":151},[92,144825,51419],{"class":102},[92,144827,144572],{"class":151},[92,144829,431],{"class":98},[92,144831,130396],{"class":102},[92,144833,144579],{"class":161},[92,144835,144836],{"class":94,"line":1173},[92,144837,1544],{"class":102},[92,144839,144840,144842],{"class":94,"line":1179},[92,144841,130381],{"class":1942},[92,144843,15552],{"class":102},[92,144845,144846,144848,144850,144852,144854,144856],{"class":94,"line":1193},[92,144847,70550],{"class":151},[92,144849,51419],{"class":102},[92,144851,549],{"class":151},[92,144853,144600],{"class":98},[92,144855,130396],{"class":102},[92,144857,144605],{"class":161},[92,144859,144860],{"class":94,"line":1199},[92,144861,1544],{"class":102},[38,144863,144547],{},[83,144865,144866],{"className":126533,"code":126937,"language":126535,"meta":10,"style":10},[89,144867,144868,144874,144886],{"__ignoreMap":10},[92,144869,144870,144872],{"class":94,"line":95},[92,144871,51782],{"class":51282},[92,144873,15552],{"class":102},[92,144875,144876,144878,144880,144882,144884],{"class":94,"line":11},[92,144877,70608],{"class":151},[92,144879,51419],{"class":102},[92,144881,704],{"class":151},[92,144883,51474],{"class":98},[92,144885,1269],{"class":102},[92,144887,144888],{"class":94,"line":1158},[92,144889,1544],{"class":102},[33,144891,144893],{"id":144892},"_214-响应式开发","21.4 响应式开发",[38,144895,144896],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1441,144898],{"style":126389,"src":144899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[38,144901,144902],{},"做法：",[1110,144904,144905,144908],{},[49,144906,144907],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[49,144909,144910],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1441,144912],{"style":126389,"src":144913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[38,144915,144916],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[63,144918,144920],{"id":144919},"_2141-简单代码示范","21.4.1 简单代码示范",[83,144922,144923],{"className":126533,"code":144550,"language":126535,"meta":10,"style":10},[89,144924,144925,144929,144935,144949,144953,144959,144973],{"__ignoreMap":10},[92,144926,144927],{"class":94,"line":95},[92,144928,144557],{"class":161},[92,144930,144931,144933],{"class":94,"line":11},[92,144932,50617],{"class":51282},[92,144934,15552],{"class":102},[92,144936,144937,144939,144941,144943,144945,144947],{"class":94,"line":1158},[92,144938,70608],{"class":151},[92,144940,51419],{"class":102},[92,144942,144572],{"class":151},[92,144944,431],{"class":98},[92,144946,130396],{"class":102},[92,144948,144579],{"class":161},[92,144950,144951],{"class":94,"line":1173},[92,144952,1544],{"class":102},[92,144954,144955,144957],{"class":94,"line":1179},[92,144956,130381],{"class":1942},[92,144958,15552],{"class":102},[92,144960,144961,144963,144965,144967,144969,144971],{"class":94,"line":1193},[92,144962,70550],{"class":151},[92,144964,51419],{"class":102},[92,144966,549],{"class":151},[92,144968,144600],{"class":98},[92,144970,130396],{"class":102},[92,144972,144605],{"class":161},[92,144974,144975],{"class":94,"line":1199},[92,144976,1544],{"class":102},[38,144978,144979],{},"父盒子一般命名为container",[63,144981,144983],{"id":144982},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[38,144985,144986,144987],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[252,144988,144989],{},"使得 Web 开发更加快捷",[1110,144991,144992],{},[49,144993,144994,144995],{},"官网：",[252,144996,144997],{},[341,144998,144999],{"href":144999,"rel":145000},"http:\u002F\u002Fgetbootstrap.com\u002F",[23846],[38,145002,145003],{},"可以直接去官网拿现成的东西",[46,145005,145006],{},[49,145007,145008],{},"Bootstrap的使用",[38,145010,145011],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[38,145013,145014],{},"Bootstrap 使用四步曲：",[38,145016,145017,145020],{},[252,145018,145019],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1441,145022],{"style":126389,"src":145023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[38,145025,145026],{},"打开Bootstrap官网，然后下载",[1441,145028],{"style":126389,"src":145029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1441,145031],{"style":126389,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[38,145034,145035],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[38,145037,145038],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[38,145040,145041],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1441,145043],{"style":126389,"src":145044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[83,145046,145048],{"className":126533,"code":145047,"language":126535,"meta":10,"style":10},".center {\n  color: red;\n}\n",[89,145049,145050,145056,145066],{"__ignoreMap":10},[92,145051,145052,145054],{"class":94,"line":95},[92,145053,126824],{"class":1942},[92,145055,15552],{"class":102},[92,145057,145058,145060,145062,145064],{"class":94,"line":11},[92,145059,70887],{"class":151},[92,145061,51419],{"class":102},[92,145063,57403],{"class":151},[92,145065,1269],{"class":102},[92,145067,145068],{"class":94,"line":1158},[92,145069,1544],{"class":102},[38,145071,145072,145075],{},[89,145073,145074],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1441,145077],{"style":126389,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1441,145080],{"style":126389,"src":145081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1441,145083],{"style":126389,"src":145084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[38,145086,145087],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1441,145089],{"style":126389,"src":145090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[38,145092,145093],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[46,145095,145096],{"start":11},[49,145097,145098],{},"布局容器",[1441,145100],{"style":126389,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[38,145103,145104],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[38,145106,145107],{},"container-fluid用于移动式布局比较方便",[46,145109,145110],{"start":1158},[49,145111,145112,145113],{},"bootstrap ",[252,145114,145115],{},"栅格系统原理",[1441,145117],{"style":126389,"src":145118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[46,145120,145121],{"start":1173},[49,145122,145123],{},[252,145124,145125],{},"栅格选项参数",[1441,145127],{"style":126389,"src":145128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[38,145130,145131],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[38,145133,14613],{},[83,145135,145136],{"className":126533,"code":145047,"language":126535,"meta":10,"style":10},[89,145137,145138,145144,145154],{"__ignoreMap":10},[92,145139,145140,145142],{"class":94,"line":95},[92,145141,126824],{"class":1942},[92,145143,15552],{"class":102},[92,145145,145146,145148,145150,145152],{"class":94,"line":11},[92,145147,70887],{"class":151},[92,145149,51419],{"class":102},[92,145151,57403],{"class":151},[92,145153,1269],{"class":102},[92,145155,145156],{"class":94,"line":1158},[92,145157,1544],{"class":102},[38,145159,135576],{},[1441,145161],{"style":126389,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[38,145164,145165],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[38,145167,145168],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[38,145170,145171],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[38,145173,145174],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[38,145176,145177],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[38,145179,145180],{},"汇总展示说明：",[83,145182,145183],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,145184,145185,145189,145203,145207],{"__ignoreMap":10},[92,145186,145187],{"class":94,"line":95},[92,145188,130644],{"class":161},[92,145190,145191,145193,145195,145197,145199,145201],{"class":94,"line":11},[92,145192,1013],{"class":102},[92,145194,51593],{"class":51282},[92,145196,53468],{"class":1942},[92,145198,148],{"class":102},[92,145200,130657],{"class":207},[92,145202,51289],{"class":102},[92,145204,145205],{"class":94,"line":1158},[92,145206,130664],{"class":102},[92,145208,145209,145211,145213],{"class":94,"line":1173},[92,145210,51767],{"class":102},[92,145212,51593],{"class":51282},[92,145214,51289],{"class":102},[1441,145216],{"style":126389,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[38,145219,145220],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[83,145222,145223],{"className":127280,"code":130637,"language":127282,"meta":10,"style":10},[89,145224,145225,145229,145243,145247],{"__ignoreMap":10},[92,145226,145227],{"class":94,"line":95},[92,145228,130644],{"class":161},[92,145230,145231,145233,145235,145237,145239,145241],{"class":94,"line":11},[92,145232,1013],{"class":102},[92,145234,51593],{"class":51282},[92,145236,53468],{"class":1942},[92,145238,148],{"class":102},[92,145240,130657],{"class":207},[92,145242,51289],{"class":102},[92,145244,145245],{"class":94,"line":1158},[92,145246,130664],{"class":102},[92,145248,145249,145251,145253],{"class":94,"line":1173},[92,145250,51767],{"class":102},[92,145252,51593],{"class":51282},[92,145254,51289],{"class":102},[46,145256,145257],{"start":1179},[49,145258,145259],{},[252,145260,145261],{},"列嵌套",[1441,145263],{"style":126389,"src":145264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[38,145266,145267],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[38,145269,145270],{},"没加row内部这样：",[1441,145272],{"style":126389,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[38,145275,145276],{},"加上row之后内部为：",[1441,145278],{"style":126389,"src":145279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[46,145281,145282],{"start":1193},[49,145283,145284],{},[252,145285,145286],{},"列偏移",[1441,145288],{"style":126389,"src":145289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[38,145291,145292],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[38,145294,145295],{},"要加偏移量，即偏移份数",[38,145297,145298],{},"偏移的份数=12-两个盒子的份数",[46,145300,145301],{"start":1199},[49,145302,145303],{},[252,145304,145305],{},"列排序",[1441,145307],{"style":126389,"src":145308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[38,145310,145311],{},"pull拉左；push推右",[46,145313,145314],{"start":1290},[49,145315,145316],{},[252,145317,145318],{},"响应式工具",[1441,145320],{"style":126389,"src":145321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[38,145323,145324],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[63,145326,145328],{"id":145327},"_2143-响应式小项目","21.4.3 响应式小项目",[38,145330,145331],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[38,145333,145334],{},"ul {",[38,145336,145337],{},"list-style: none;",[38,145339,145340],{},"margin:0;",[38,145342,145343],{},"padding:0; }",[1441,145345],{"style":126389,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1441,145348],{"style":126389,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[38,145351,145352],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[38,145354,68871],{},[83,145356,145357],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,145358,145359,145365,145375],{"__ignoreMap":10},[92,145360,145361,145363],{"class":94,"line":95},[92,145362,130381],{"class":1942},[92,145364,15552],{"class":102},[92,145366,145367,145369,145371,145373],{"class":94,"line":11},[92,145368,131013],{"class":151},[92,145370,51419],{"class":102},[92,145372,23717],{"class":151},[92,145374,1269],{"class":102},[92,145376,145377],{"class":94,"line":1158},[92,145378,1544],{"class":102},[38,145380,70435],{},[83,145382,145383],{"className":126533,"code":139203,"language":126535,"meta":10,"style":10},[89,145384,145385,145391,145401],{"__ignoreMap":10},[92,145386,145387,145389],{"class":94,"line":95},[92,145388,130381],{"class":1942},[92,145390,15552],{"class":102},[92,145392,145393,145395,145397,145399],{"class":94,"line":11},[92,145394,131013],{"class":151},[92,145396,51419],{"class":102},[92,145398,23717],{"class":151},[92,145400,1269],{"class":102},[92,145402,145403],{"class":94,"line":1158},[92,145404,1544],{"class":102},[33,145406,145408],{"id":145407},"_215-swiper-插件使用","21.5 swiper 插件使用",[1110,145410,145411,145414,145417],{},[49,145412,145413],{},"下载需要的css和js文件html页面中 引入相关文件",[49,145415,145416],{},"官网找到类似案例，复制html结构，css样式 js 语法",[49,145418,145419],{},"根据需求定制修改模块",[1441,145421],{"style":126389,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[38,145424,145425],{},"解压后将这两部分放到项目中",[1441,145427],{"style":126389,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[38,145430,145431],{},"这个插件可以帮助我们实现轮播图效果",[38,145433,145434],{},"用法：",[1441,145436],{"style":126389,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[38,145439,145440],{},"找到自己喜欢的",[1441,145442],{"style":126389,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[38,145445,145446],{},"右键，查看网页源代码",[1441,145448],{"style":126389,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[38,145451,145452],{},"复制人家的结构内容",[38,145454,145455],{},"然后去看API文档：",[1441,145457],{"style":126389,"src":145458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[38,145460,145461],{},"可以看看如何修改样式",[38,145463,145464],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5106,145466,145467],{},"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":145469},[145470,145475,145479,145484,145489],{"id":144270,"depth":11,"text":144271,"children":145471},[145472,145473,145474],{"id":144274,"depth":1158,"text":144275},{"id":144284,"depth":1158,"text":144285},{"id":144379,"depth":1158,"text":144380},{"id":144394,"depth":11,"text":144395,"children":145476},[145477,145478],{"id":144416,"depth":1158,"text":144417},{"id":144432,"depth":1158,"text":144433},{"id":144507,"depth":11,"text":144508,"children":145480},[145481,145482,145483],{"id":144520,"depth":1158,"text":144521},{"id":144744,"depth":1158,"text":144745},{"id":144751,"depth":1158,"text":144752},{"id":144892,"depth":11,"text":144893,"children":145485},[145486,145487,145488],{"id":144919,"depth":1158,"text":144920},{"id":144982,"depth":1158,"text":144983},{"id":145327,"depth":1158,"text":145328},{"id":145407,"depth":11,"text":145408},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144262,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145496,"title":145497,"body":145498,"description":23357,"extension":14,"meta":145718,"navigation":17,"path":145719,"seo":145720,"stem":145721,"__hash__":145722},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145499,"toc":145714},[145500,145503,145507,145510,145525,145530,145533,145538,145573,145578,145590,145595,145608,145613,145630,145635,145655,145660,145678,145681,145684,145687,145690,145694,145697,145700,145703,145706,145709,145712],[29,145501,145497],{"id":145502},"_22-代码提交与新型相对单位",[33,145504,145506],{"id":145505},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[38,145508,145509],{},"法1：",[46,145511,145512,145519,145522],{},[49,145513,145514,145515],{},"登录网站注册：",[341,145516,145517],{"href":145517,"rel":145518},"https:\u002F\u002Fgitee.com\u002F",[23846],[49,145520,145521],{},"码云创建新的仓库",[49,145523,145524],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1110,145526,145527],{},[49,145528,145529],{},"在网站根目录右键-- Git Bash Here",[1441,145531],{"style":126389,"src":145532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1110,145534,145535],{},[49,145536,145537],{},"如果是第一次利用git提交，请配置好全局选项",[83,145539,145541],{"className":117277,"code":145540,"language":117279,"meta":10,"style":10},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[89,145542,145543,145559],{"__ignoreMap":10},[92,145544,145545,145548,145550,145553,145556],{"class":94,"line":95},[92,145546,145547],{"class":1942},"git",[92,145549,119700],{"class":207},[92,145551,145552],{"class":151}," --global",[92,145554,145555],{"class":207}," user.name",[92,145557,145558],{"class":207}," \"你的名字\"\n",[92,145560,145561,145563,145565,145567,145570],{"class":94,"line":11},[92,145562,145547],{"class":1942},[92,145564,119700],{"class":207},[92,145566,145552],{"class":151},[92,145568,145569],{"class":207}," user.email",[92,145571,145572],{"class":207}," \"你的邮箱\"\n",[1110,145574,145575],{},[49,145576,145577],{},"初始化仓库",[83,145579,145581],{"className":117277,"code":145580,"language":117279,"meta":10,"style":10},"git init\n",[89,145582,145583],{"__ignoreMap":10},[92,145584,145585,145587],{"class":94,"line":95},[92,145586,145547],{"class":1942},[92,145588,145589],{"class":207}," init\n",[1110,145591,145592],{},[49,145593,145594],{},"把本地文件放到暂存区",[83,145596,145598],{"className":117277,"code":145597,"language":117279,"meta":10,"style":10},"git add .\n",[89,145599,145600],{"__ignoreMap":10},[92,145601,145602,145604,145606],{"class":94,"line":95},[92,145603,145547],{"class":1942},[92,145605,5189],{"class":207},[92,145607,28723],{"class":207},[1110,145609,145610],{},[49,145611,145612],{},"把本地文件放到本地仓库里面",[83,145614,145616],{"className":117277,"code":145615,"language":117279,"meta":10,"style":10},"git commit -m \"first commit\"\n",[89,145617,145618],{"__ignoreMap":10},[92,145619,145620,145622,145625,145627],{"class":94,"line":95},[92,145621,145547],{"class":1942},[92,145623,145624],{"class":207}," commit",[92,145626,100863],{"class":151},[92,145628,145629],{"class":207}," \"first commit\"\n",[1110,145631,145632],{},[49,145633,145634],{},"链接远程仓库",[83,145636,145638],{"className":117277,"code":145637,"language":117279,"meta":10,"style":10},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[89,145639,145640],{"__ignoreMap":10},[92,145641,145642,145644,145647,145649,145652],{"class":94,"line":95},[92,145643,145547],{"class":1942},[92,145645,145646],{"class":207}," remote",[92,145648,5189],{"class":207},[92,145650,145651],{"class":207}," origin",[92,145653,145654],{"class":207}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1110,145656,145657],{},[49,145658,145659],{},"把本地仓库的文件推送到远程仓库 push",[83,145661,145663],{"className":117277,"code":145662,"language":117279,"meta":10,"style":10},"git push -u origin master\n",[89,145664,145665],{"__ignoreMap":10},[92,145666,145667,145669,145671,145673,145675],{"class":94,"line":95},[92,145668,145547],{"class":1942},[92,145670,28998],{"class":207},[92,145672,28272],{"class":151},[92,145674,145651],{"class":207},[92,145676,145677],{"class":207}," master\n",[1441,145679],{"style":126389,"src":145680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[38,145682,145683],{},"上方方法暂未实现，后边学完git后在整",[38,145685,145686],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1441,145688],{"style":126389,"src":145689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[33,145691,145693],{"id":145692},"_222-新型相对单位","22.2 新型相对单位",[1441,145695],{"style":126389,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1441,145698],{"style":126389,"src":145699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[38,145701,145702],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[38,145704,145705],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1441,145707],{"style":126389,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[38,145710,145711],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5106,145713,23939],{},{"title":10,"searchDepth":11,"depth":11,"links":145715},[145716,145717],{"id":145505,"depth":11,"text":145506},{"id":145692,"depth":11,"text":145693},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145497,"description":23357},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":4,"title":5,"body":145724,"description":13,"extension":14,"meta":145728,"navigation":17,"path":18,"seo":145729,"stem":20,"__hash__":21},{"type":7,"value":145725,"toc":145726},[],{"title":10,"searchDepth":11,"depth":11,"links":145727},[],{"category":16},{"title":5,"description":13},{"id":145731,"title":145732,"body":145733,"description":23357,"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,28367],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[89,145760,145761],{},"os",[89,145763,145764],{},"sys",[89,145766,145767],{},"json",[89,145769,57842],{},[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":23803,"code":145791,"language":23805,"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,30362],{"class":1942},[92,145799,26275],{"class":151},[92,145801,145802,145804],{"class":94,"line":11},[92,145803,100860],{"class":1942},[92,145805,26275],{"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":30360,"code":145821,"language":30362,"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,25100],{"class":151},[92,145832,45548],{"class":98},[92,145834,47705],{"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":30360,"code":145864,"language":30362,"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",[23846],[49,145901,145902],{},"下载 Windows Installer。",[49,145904,145905,145906,28367],{},"安装时勾选 ",[89,145907,145908],{},"Add Python to PATH",[49,145910,145911,145912,28367],{},"点击 ",[89,145913,145914],{},"Install Now",[49,145916,145917],{},"安装完成后打开命令提示符验证：",[83,145919,145921],{"className":23803,"code":145920,"language":23805,"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,30362],{"class":1942},[92,145928,26275],{"class":151},[92,145930,145931,145933],{"class":94,"line":11},[92,145932,23812],{"class":1942},[92,145934,26275],{"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":23803,"code":145951,"language":23805,"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,23815],{"class":207},[92,145962,124299],{"class":207},[92,145964,145965,145967],{"class":94,"line":11},[92,145966,100860],{"class":1942},[92,145968,26275],{"class":151},[92,145970,145971,145973],{"class":94,"line":1158},[92,145972,119681],{"class":1942},[92,145974,26275],{"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":23803,"code":145987,"language":23805,"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,24558],{"class":1942},[92,145995,117298],{"class":207},[92,145997,26224],{"class":207},[92,145999,146000,146002,146004,146006,146008,146010],{"class":94,"line":11},[92,146001,24558],{"class":1942},[92,146003,117298],{"class":207},[92,146005,23815],{"class":207},[92,146007,104384],{"class":207},[92,146009,100779],{"class":207},[92,146011,146012],{"class":207}," python3-venv\n",[92,146014,146015,146017],{"class":94,"line":1158},[92,146016,100860],{"class":1942},[92,146018,26275],{"class":151},[92,146020,146021,146023],{"class":94,"line":1173},[92,146022,119681],{"class":1942},[92,146024,26275],{"class":151},[38,146026,146027],{},"Fedora：",[83,146029,146031],{"className":23803,"code":146030,"language":23805,"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,24558],{"class":1942},[92,146038,26297],{"class":207},[92,146040,23815],{"class":207},[92,146042,104384],{"class":207},[92,146044,119746],{"class":207},[38,146046,146047,146048,146050],{},"Linux 上通常使用 ",[89,146049,100860],{}," 命令，避免和系统旧版本 Python 冲突。",[33,146052,146054],{"id":146053},"_14-pip包管理器","1.4 pip包管理器",[38,146056,146057,146059],{},[89,146058,23812],{}," 用来安装第三方库。",[83,146061,146063],{"className":23803,"code":146062,"language":23805,"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,23812],{"class":1942},[92,146070,23815],{"class":207},[92,146072,146073],{"class":207}," requests\n",[92,146075,146076,146078,146081],{"class":94,"line":11},[92,146077,23812],{"class":1942},[92,146079,146080],{"class":207}," uninstall",[92,146082,146073],{"class":207},[92,146084,146085,146087,146089],{"class":94,"line":1158},[92,146086,23812],{"class":1942},[92,146088,117555],{"class":207},[92,146090,146073],{"class":207},[92,146092,146093,146095],{"class":94,"line":1173},[92,146094,23812],{"class":1942},[92,146096,118936],{"class":207},[92,146098,146099,146101],{"class":94,"line":1179},[92,146100,23812],{"class":1942},[92,146102,146103],{"class":207}," freeze\n",[38,146105,146106],{},"国内网络较慢时可以临时使用镜像：",[83,146108,146110],{"className":23803,"code":146109,"language":23805,"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,23812],{"class":1942},[92,146117,23815],{"class":207},[92,146119,146120],{"class":207}," requests",[92,146122,26412],{"class":151},[92,146124,119709],{"class":207},[38,146126,146127],{},"常见第三方库：",[240,146129,146130,146139],{},[243,146131,146132],{},[246,146133,146134,146137],{},[249,146135,146136],{},"库",[249,146138,102677],{},[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,100607],{},[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":23803,"code":146212,"language":23805,"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,30362],{"class":1942},[92,146220,100863],{"class":151},[92,146222,100866],{"class":207},[92,146224,100869],{"class":207},[38,146226,146227],{},"Windows 激活：",[83,146229,146231],{"className":23803,"code":146230,"language":23805,"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":23803,"code":146242,"language":23805,"meta":10,"style":10},"source .venv\u002Fbin\u002Factivate\n",[89,146244,146245],{"__ignoreMap":10},[92,146246,146247,146249],{"class":94,"line":95},[92,146248,100874],{"class":151},[92,146250,100877],{"class":207},[38,146252,146253],{},"退出虚拟环境：",[83,146255,146257],{"className":23803,"code":146256,"language":23805,"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":23803,"code":146268,"language":23805,"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,23812],{"class":1942},[92,146276,146277],{"class":207}," freeze",[92,146279,26204],{"class":98},[92,146281,146282],{"class":207}," requirements.txt\n",[38,146284,146285],{},"安装依赖：",[83,146287,146289],{"className":23803,"code":146288,"language":23805,"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,23812],{"class":1942},[92,146296,23815],{"class":207},[92,146298,119620],{"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,122043],{},[46,146315,146316,146319,146322,146328,146331],{},[49,146317,146318],{},"New Project：创建项目。",[49,146320,146321],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[49,146323,146324,146325,125964],{},"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,24600],{},"创建文件 ",[89,146372,146373],{},"hello.py",[83,146375,146377],{"className":30360,"code":146376,"language":30362,"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,30397],{"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,30397],{"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":23803,"code":146406,"language":23805,"meta":10,"style":10},"python hello.py\n",[89,146408,146409],{"__ignoreMap":10},[92,146410,146411,146413],{"class":94,"line":95},[92,146412,30362],{"class":1942},[92,146414,146415],{"class":207}," hello.py\n",[38,146417,146418],{},"或：",[83,146420,146422],{"className":23803,"code":146421,"language":23805,"meta":10,"style":10},"python3 hello.py\n",[89,146423,146424],{"__ignoreMap":10},[92,146425,146426,146428],{"class":94,"line":95},[92,146427,100860],{"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":30360,"code":146451,"language":30362,"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,30397],{"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,30397],{"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,30397],{"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,30397],{"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":30360,"code":146504,"language":30362,"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,30397],{"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":30360,"code":146549,"language":30362,"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,30397],{"class":151},[92,146557,103],{"class":102},[92,146559,146560],{"class":207},"\"2024\"",[92,146562,12415],{"class":102},[92,146564,54298],{"class":207},[92,146566,12415],{"class":102},[92,146568,54298],{"class":207},[92,146570,12415],{"class":102},[92,146572,146573],{"class":5196},"sep",[92,146575,148],{"class":98},[92,146577,32465],{"class":207},[92,146579,109],{"class":102},[38,146581,146582],{},"修改结尾符：",[83,146584,146586],{"className":30360,"code":146585,"language":30362,"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,30397],{"class":151},[92,146593,103],{"class":102},[92,146595,5824],{"class":207},[92,146597,12415],{"class":102},[92,146599,45783],{"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,30397],{"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":30360,"code":146626,"language":30362,"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,120017],{"class":151},[92,146640,146641],{"class":94,"line":11},[92,146642,146643],{"class":151},"30\n",[38,146645,146646],{},"脚本运行适合保存程序：",[83,146648,146650],{"className":30360,"code":146649,"language":30362,"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,54409],{"class":151},[92,146672,146673,146675,146678,146680],{"class":94,"line":1158},[92,146674,30397],{"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,125964],{},"写完整练习，用 ",[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,28367],{},"Linux\u002FmacOS 应该使用 ",[89,146728,100860],{},[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":30360,"code":146757,"language":30362,"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,107814],{"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,31365],{"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,104347,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,104347,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,104347,146847,146849,146850,146852],{},[89,146848,45783],{}," 让两次 ",[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146886,"title":146887,"body":146888,"description":23357,"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,23721],{},[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":30360,"code":146980,"language":30362,"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,101639],{"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,51419],{"class":102},[92,146999,69251],{"class":207},[92,147001,31448],{"class":102},[92,147003,147004,147007,147009],{"class":94,"line":1158},[92,147005,147006],{"class":207},"    \"value\"",[92,147008,51419],{"class":102},[92,147010,97439],{"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,51419],{"class":102},[92,147036,69251],{"class":207},[92,147038,31448],{"class":102},[92,147040,147041,147044,147046],{"class":94,"line":1158},[92,147042,147043],{"class":151},"  \"value\"",[92,147045,51419],{"class":102},[92,147047,97439],{"class":151},[92,147049,147050],{"class":94,"line":1173},[92,147051,1544],{"class":102},[38,147053,147054],{},"Python 与 JSON 的转换：",[83,147056,147058],{"className":30360,"code":147057,"language":30362,"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,30374],{"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,101639],{"class":102},[92,147076,148],{"class":98},[92,147078,4427],{"class":102},[92,147080,62661],{"class":207},[92,147082,51419],{"class":102},[92,147084,69251],{"class":207},[92,147086,12415],{"class":102},[92,147088,147089],{"class":207},"\"value\"",[92,147091,51419],{"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,33969],{"class":151},[92,147118,109],{"class":102},[92,147120,147121,147123],{"class":94,"line":1193},[92,147122,30397],{"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,30397],{"class":151},[92,147145,147146],{"class":102},"(new_data)\n",[33,147148,147150],{"id":147149},"_103-安装pyecharts","10.3 安装pyecharts",[83,147152,147154],{"className":23803,"code":147153,"language":23805,"meta":10,"style":10},"pip install pyecharts\n",[89,147155,147156],{"__ignoreMap":10},[92,147157,147158,147160,147162],{"class":94,"line":95},[92,147159,23812],{"class":1942},[92,147161,23815],{"class":207},[92,147163,147164],{"class":207}," pyecharts\n",[38,147166,147167],{},"验证：",[83,147169,147171],{"className":30360,"code":147170,"language":30362,"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,30374],{"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,30397],{"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":30360,"code":147204,"language":30362,"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,30719],{"class":98},[92,147212,147213],{"class":102}," pyecharts.charts ",[92,147215,30374],{"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,77500],{"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":30360,"code":147345,"language":30362,"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,30719],{"class":98},[92,147353,147354],{"class":102}," pyecharts ",[92,147356,30374],{"class":98},[92,147358,147359],{"class":102}," options ",[92,147361,31365],{"class":98},[92,147363,147364],{"class":102}," opts\n",[92,147366,147367,147369,147371,147373],{"class":94,"line":11},[92,147368,30719],{"class":98},[92,147370,147213],{"class":102},[92,147372,30374],{"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,77500],{"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,51389],{"class":5196},[92,147457,148],{"class":98},[92,147459,147460],{"class":207},"\"一周销售额\"",[92,147462,38029],{"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,79792],{"class":5196},[92,147476,148],{"class":98},[92,147478,147479],{"class":207},"\"日期\"",[92,147481,38029],{"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,79792],{"class":5196},[92,147494,148],{"class":98},[92,147496,147497],{"class":207},"\"金额\"",[92,147499,38029],{"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,38029],{"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,102677],{},[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":30360,"code":147617,"language":30362,"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,31448],{"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,87818],{"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,31458],{"class":151},[92,147675,31448],{"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,31458],{"class":151},[92,147694,38029],{"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":30360,"code":147740,"language":30362,"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,30719],{"class":98},[92,147748,147354],{"class":102},[92,147750,30374],{"class":98},[92,147752,147359],{"class":102},[92,147754,31365],{"class":98},[92,147756,147364],{"class":102},[92,147758,147759,147761,147763,147765],{"class":94,"line":11},[92,147760,30719],{"class":98},[92,147762,147213],{"class":102},[92,147764,30374],{"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,52208],{"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,33228],{"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,77500],{"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,112183],{"class":102},[92,147848,147720],{"class":5196},[92,147850,148],{"class":98},[92,147852,31458],{"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,77500],{"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,112183],{"class":102},[92,147885,147720],{"class":5196},[92,147887,148],{"class":98},[92,147889,31458],{"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,51389],{"class":5196},[92,147907,148],{"class":98},[92,147909,147910],{"class":207},"\"线上线下销售趋势\"",[92,147912,38029],{"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,38029],{"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,24600],{},"假设 ",[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,51419],{"class":102},[92,147976,147240],{"class":207},[92,147978,12415],{"class":102},[92,147980,147981],{"class":151},"\"online\"",[92,147983,51419],{"class":102},[92,147985,414],{"class":151},[92,147987,12415],{"class":102},[92,147989,147990],{"class":151},"\"offline\"",[92,147992,51419],{"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,51419],{"class":102},[92,148006,147245],{"class":207},[92,148008,12415],{"class":102},[92,148010,147981],{"class":151},[92,148012,51419],{"class":102},[92,148014,147832],{"class":151},[92,148016,12415],{"class":102},[92,148018,147990],{"class":151},[92,148020,51419],{"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,51419],{"class":102},[92,148034,147250],{"class":207},[92,148036,12415],{"class":102},[92,148038,147981],{"class":151},[92,148040,51419],{"class":102},[92,148042,920],{"class":151},[92,148044,12415],{"class":102},[92,148046,147990],{"class":151},[92,148048,51419],{"class":102},[92,148050,414],{"class":151},[92,148052,1544],{"class":102},[92,148054,148055],{"class":94,"line":1179},[92,148056,33228],{"class":102},[38,148058,148059],{},"读取并绘图：",[83,148061,148063],{"className":30360,"code":148062,"language":30362,"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,30374],{"class":98},[92,148070,147066],{"class":102},[92,148072,148073,148075,148077,148079,148081,148083],{"class":94,"line":11},[92,148074,30719],{"class":98},[92,148076,147354],{"class":102},[92,148078,30374],{"class":98},[92,148080,147359],{"class":102},[92,148082,31365],{"class":98},[92,148084,147364],{"class":102},[92,148086,148087,148089,148091,148093],{"class":94,"line":1158},[92,148088,30719],{"class":98},[92,148090,147213],{"class":102},[92,148092,30374],{"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,107814],{"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,31365],{"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,101402],{"class":102},[92,148136,148],{"class":98},[92,148138,148139],{"class":102}," json.load(",[92,148141,45336],{"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,51820],{"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,51820],{"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,51820],{"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,26025],{"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,31458],{"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,31458],{"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,51389],{"class":5196},[92,148282,148],{"class":98},[92,148284,148285],{"class":207},"\"销售趋势\"",[92,148287,38029],{"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,38029],{"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":30360,"code":148344,"language":30362,"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,55429],{"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,51419],{"class":102},[92,148366,147240],{"class":207},[92,148368,12415],{"class":102},[92,148370,148371],{"class":207},"\"sales\"",[92,148373,51419],{"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,51419],{"class":102},[92,148388,147245],{"class":207},[92,148390,12415],{"class":102},[92,148392,148371],{"class":207},[92,148394,51419],{"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,51419],{"class":102},[92,148408,147250],{"class":207},[92,148410,12415],{"class":102},[92,148412,148371],{"class":207},[92,148414,51419],{"class":102},[92,148416,148417],{"class":207},"\"120\"",[92,148419,4909],{"class":102},[92,148421,148422],{"class":94,"line":1179},[92,148423,33228],{"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,51820],{"class":102},[92,148437,148438,148441,148443],{"class":94,"line":1290},[92,148439,148440],{"class":102},"sales ",[92,148442,148],{"class":98},[92,148444,51820],{"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,26025],{"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,38912],{"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,30397],{"class":151},[92,148519,148520],{"class":102},"(dates)\n",[92,148522,148523,148525],{"class":94,"line":1658},[92,148524,30397],{"class":151},[92,148526,148527],{"class":102},"(sales)\n",[33,148529,148531],{"id":148530},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[83,148533,148535],{"className":30360,"code":148534,"language":30362,"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,30719],{"class":98},[92,148542,147354],{"class":102},[92,148544,30374],{"class":98},[92,148546,147359],{"class":102},[92,148548,31365],{"class":98},[92,148550,147364],{"class":102},[92,148552,148553,148555,148557,148559],{"class":94,"line":11},[92,148554,30719],{"class":98},[92,148556,147213],{"class":102},[92,148558,30374],{"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,55429],{"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,51419],{"class":102},[92,148582,148583],{"class":207},"\"2024-10-01\"",[92,148585,12415],{"class":102},[92,148587,84066],{"class":207},[92,148589,51419],{"class":102},[92,148591,92005],{"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,51419],{"class":102},[92,148603,148604],{"class":207},"\"2024-10-02\"",[92,148606,12415],{"class":102},[92,148608,84066],{"class":207},[92,148610,51419],{"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,51419],{"class":102},[92,148625,148626],{"class":207},"\"2024-10-03\"",[92,148628,12415],{"class":102},[92,148630,84066],{"class":207},[92,148632,51419],{"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,51419],{"class":102},[92,148647,148648],{"class":207},"\"2024-10-04\"",[92,148650,12415],{"class":102},[92,148652,84066],{"class":207},[92,148654,51419],{"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,51419],{"class":102},[92,148669,148670],{"class":207},"\"2024-10-05\"",[92,148672,12415],{"class":102},[92,148674,84066],{"class":207},[92,148676,51419],{"class":102},[92,148678,148679],{"class":151},"2600",[92,148681,4909],{"class":102},[92,148683,148684],{"class":94,"line":1308},[92,148685,33228],{"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,26025],{"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,84066],{"class":207},[92,148724,4422],{"class":102},[92,148726,3004],{"class":98},[92,148728,148184],{"class":102},[92,148730,26025],{"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,31448],{"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,31458],{"class":151},[92,148781,31448],{"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,31458],{"class":151},[92,148797,38029],{"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,51389],{"class":5196},[92,148817,148],{"class":98},[92,148819,148820],{"class":207},"\"每日销售额\"",[92,148822,38029],{"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,79792],{"class":5196},[92,148834,148],{"class":98},[92,148836,147479],{"class":207},[92,148838,38029],{"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,79792],{"class":5196},[92,148850,148],{"class":98},[92,148852,147497],{"class":207},[92,148854,38029],{"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,38029],{"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":30360,"code":148909,"language":30362,"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,101639],{"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,51419],{"class":102},[92,148937,148938],{"class":207},"\"2024-01-01\"",[92,148940,12415],{"class":102},[92,148942,148943],{"class":207},"\"confirm\"",[92,148945,51419],{"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,51419],{"class":102},[92,148959,148960],{"class":207},"\"2024-01-02\"",[92,148962,12415],{"class":102},[92,148964,148943],{"class":207},[92,148966,51419],{"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,51419],{"class":102},[92,148992,148938],{"class":207},[92,148994,12415],{"class":102},[92,148996,148943],{"class":207},[92,148998,51419],{"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,51419],{"class":102},[92,149012,148960],{"class":207},[92,149014,12415],{"class":102},[92,149016,148943],{"class":207},[92,149018,51419],{"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":30360,"code":149036,"language":30362,"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,30719],{"class":98},[92,149044,147354],{"class":102},[92,149046,30374],{"class":98},[92,149048,147359],{"class":102},[92,149050,31365],{"class":98},[92,149052,147364],{"class":102},[92,149054,149055,149057,149059,149061],{"class":94,"line":11},[92,149056,30719],{"class":98},[92,149058,147213],{"class":102},[92,149060,30374],{"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,26025],{"class":98},[92,149086,149087],{"class":102}," data[",[92,149089,69251],{"class":207},[92,149091,77509],{"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,26025],{"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,26025],{"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,31458],{"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,51389],{"class":5196},[92,149178,148],{"class":98},[92,149180,149181],{"class":207},"\"多地区趋势图\"",[92,149183,38029],{"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,38029],{"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,28367],{},"JSON 字符串用 ",[89,149238,149239],{},"json.loads()","，JSON 文件用 ",[89,149242,149243],{},"json.load()",[49,149245,149246,149247,28367],{},"中文 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":23357},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149298,"title":149299,"body":149300,"description":23357,"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":30360,"code":149317,"language":30362,"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,31929],{"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,31281],{"class":151},[92,149356,103],{"class":102},[92,149358,155],{"class":98},[92,149360,149361],{"class":207},"\"我叫",[92,149363,999],{"class":151},[92,149365,79792],{"class":102},[92,149367,1049],{"class":151},[92,149369,149370],{"class":207},"，今年",[92,149372,999],{"class":151},[92,149374,70203],{"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":30360,"code":149396,"language":30362,"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,30783],{"class":98},[92,149412,149347],{"class":1942},[92,149414,30789],{"class":102},[92,149416,149417,149419,149421,149423,149425,149428,149430,149432,149434,149436,149438,149440,149442],{"class":94,"line":1158},[92,149418,32433],{"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,80283],{"class":102},[92,149431,1049],{"class":151},[92,149433,149370],{"class":207},[92,149435,149427],{"class":151},[92,149437,80295],{"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":30360,"code":149497,"language":30362,"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,100999,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":30360,"code":149561,"language":30362,"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,30397],{"class":151},[92,149617,149618],{"class":102},"(student.name)\n",[92,149620,149621,149623],{"class":94,"line":1308},[92,149622,30397],{"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":30360,"code":149396,"language":30362,"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,30783],{"class":98},[92,149653,149347],{"class":1942},[92,149655,30789],{"class":102},[92,149657,149658,149660,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682],{"class":94,"line":1158},[92,149659,32433],{"class":151},[92,149661,103],{"class":102},[92,149663,155],{"class":98},[92,149665,149361],{"class":207},[92,149667,149427],{"class":151},[92,149669,80283],{"class":102},[92,149671,1049],{"class":151},[92,149673,149370],{"class":207},[92,149675,149427],{"class":151},[92,149677,80295],{"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,30805],{}," 表示当前对象。调用方法时不需要手动传入 ",[89,149726,30805],{},"，Python 会自动传。",[33,149729,149731],{"id":149730},"_115-构造方法__init__","11.5 构造方法__init__",[38,149733,149734,149736],{},[89,149735,30811],{}," 在对象创建时自动执行，用于初始化属性。",[83,149738,149740],{"className":30360,"code":149739,"language":30362,"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,30783],{"class":98},[92,149755,30786],{"class":151},[92,149757,149758],{"class":102},"(self, name, age, score):\n",[92,149760,149761,149763,149766,149768],{"class":94,"line":1158},[92,149762,30827],{"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,30827],{"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,30827],{"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,30783],{"class":98},[92,149803,149347],{"class":1942},[92,149805,30789],{"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,32433],{"class":151},[92,149811,103],{"class":102},[92,149813,155],{"class":98},[92,149815,149361],{"class":207},[92,149817,149427],{"class":151},[92,149819,80283],{"class":102},[92,149821,1049],{"class":151},[92,149823,149370],{"class":207},[92,149825,149427],{"class":151},[92,149827,80295],{"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,28367],{},"直接打印对象时，默认输出不直观。可以定义 ",[89,149902,149903],{},"__str__",[83,149905,149907],{"className":30360,"code":149906,"language":30362,"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,30783],{"class":98},[92,149922,30786],{"class":151},[92,149924,149925],{"class":102},"(self, name, age):\n",[92,149927,149928,149930,149932,149934],{"class":94,"line":1158},[92,149929,30827],{"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,30827],{"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,30783],{"class":98},[92,149955,149956],{"class":151}," __str__",[92,149958,30789],{"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,80283],{"class":102},[92,149974,1049],{"class":151},[92,149976,149977],{"class":207},", age=",[92,149979,149427],{"class":151},[92,149981,80295],{"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,30397],{"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":30360,"code":150030,"language":30362,"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,30783],{"class":98},[92,150047,30786],{"class":151},[92,150049,150050],{"class":102},"(self, owner, balance):\n",[92,150052,150053,150055,150058,150060],{"class":94,"line":1158},[92,150054,30827],{"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,30827],{"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,30783],{"class":98},[92,150084,150085],{"class":1942}," get_balance",[92,150087,30789],{"class":102},[92,150089,150090,150092,150094],{"class":94,"line":1199},[92,150091,14732],{"class":98},[92,150093,38855],{"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,30783],{"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,34632],{"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,30827],{"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,30783],{"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,34632],{"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,38855],{"class":151},[92,150202,150203],{"class":102},".__balance:\n",[92,150205,150206,150208,150210,150213],{"class":94,"line":1672},[92,150207,34632],{"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,30827],{"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,30397],{"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":30360,"code":150293,"language":30362,"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,30783],{"class":98},[92,150310,150311],{"class":1942}," eat",[92,150313,30789],{"class":102},[92,150315,150316,150318,150320,150323],{"class":94,"line":1158},[92,150317,32433],{"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,30768],{"class":102},[92,150348,150349,150351,150354],{"class":94,"line":1199},[92,150350,30783],{"class":98},[92,150352,150353],{"class":1942}," bark",[92,150355,30789],{"class":102},[92,150357,150358,150360,150362,150365],{"class":94,"line":1290},[92,150359,32433],{"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":30360,"code":150404,"language":30362,"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,30783],{"class":98},[92,150420,150421],{"class":1942}," speak",[92,150423,30789],{"class":102},[92,150425,150426,150428,150430,150433],{"class":94,"line":1158},[92,150427,32433],{"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,30768],{"class":102},[92,150456,150457,150459,150461],{"class":94,"line":1199},[92,150458,30783],{"class":98},[92,150460,150421],{"class":1942},[92,150462,30789],{"class":102},[92,150464,150465,150467,150469,150471],{"class":94,"line":1290},[92,150466,32433],{"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,30768],{"class":102},[92,150495,150496,150498,150500],{"class":94,"line":1596},[92,150497,30783],{"class":98},[92,150499,150421],{"class":1942},[92,150501,30789],{"class":102},[92,150503,150504,150506,150508,150511],{"class":94,"line":1602},[92,150505,32433],{"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":30360,"code":150566,"language":30362,"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,30783],{"class":98},[92,150582,30786],{"class":151},[92,150584,150585],{"class":102},"(self, name):\n",[92,150587,150588,150590,150592,150594],{"class":94,"line":1158},[92,150589,30827],{"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,30768],{"class":102},[92,150617,150618,150620,150622],{"class":94,"line":1199},[92,150619,30783],{"class":98},[92,150621,30786],{"class":151},[92,150623,150624],{"class":102},"(self, name, score):\n",[92,150626,150627,150629,150631,150633],{"class":94,"line":1290},[92,150628,30799],{"class":151},[92,150630,17241],{"class":102},[92,150632,30811],{"class":151},[92,150634,150635],{"class":102},"(name)\n",[92,150637,150638,150640,150642,150644],{"class":94,"line":1296},[92,150639,30827],{"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,30397],{"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":30360,"code":150686,"language":30362,"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,30783],{"class":98},[92,150702,150421],{"class":1942},[92,150704,30789],{"class":102},[92,150706,150707,150709,150711,150713],{"class":94,"line":1158},[92,150708,32433],{"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,30783],{"class":98},[92,150736,150421],{"class":1942},[92,150738,30789],{"class":102},[92,150740,150741,150743,150745,150747],{"class":94,"line":1290},[92,150742,32433],{"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,31929],{"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":30360,"code":150802,"language":30362,"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,30783],{"class":98},[92,150818,30786],{"class":151},[92,150820,150585],{"class":102},[92,150822,150823,150825,150827,150829],{"class":94,"line":1158},[92,150824,30827],{"class":151},[92,150826,149765],{"class":102},[92,150828,148],{"class":98},[92,150830,149770],{"class":102},[38,150832,150833],{},"类属性属于类，所有对象共享：",[83,150835,150837],{"className":30360,"code":150836,"language":30362,"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,30783],{"class":98},[92,150866,30786],{"class":151},[92,150868,150585],{"class":102},[92,150870,150871,150873,150875,150877],{"class":94,"line":1179},[92,150872,30827],{"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,30397],{"class":151},[92,150923,150924],{"class":102},"(s1.school)\n",[92,150926,150927,150929],{"class":94,"line":1596},[92,150928,30397],{"class":151},[92,150930,150931],{"class":102},"(s2.school)\n",[92,150933,150934,150936],{"class":94,"line":1602},[92,150935,30397],{"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,28367],{},"类方法使用 ",[89,150954,150955],{},"@classmethod","，第一个参数通常是 ",[89,150958,150959],{},"cls",[83,150961,150963],{"className":30360,"code":150962,"language":30362,"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,30783],{"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,30397],{"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":30360,"code":151041,"language":30362,"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,30783],{"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,30397],{"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,30479],{"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":30360,"code":151118,"language":30362,"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,30719],{"class":98},[92,151126,151127],{"class":102}," dataclasses ",[92,151129,30374],{"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,30397],{"class":151},[92,151211,150017],{"class":102},[38,151213,151214,151215,315,151217,151220],{},"它会自动生成 ",[89,151216,30811],{},[89,151218,151219],{},"__repr__"," 等方法。适合数据模型类。",[33,151222,151224],{"id":151223},"_1115-小案例学生类","11.15 小案例：学生类",[83,151226,151228],{"className":30360,"code":151227,"language":30362,"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,30783],{"class":98},[92,151243,30786],{"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,30827],{"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,30827],{"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,30827],{"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,30827],{"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,30783],{"class":98},[92,151298,151299],{"class":1942}," is_passed",[92,151301,30789],{"class":102},[92,151303,151304,151306,151308,151310,151312],{"class":94,"line":1296},[92,151305,14732],{"class":98},[92,151307,38855],{"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,30783],{"class":98},[92,151324,151325],{"class":1942}," to_dict",[92,151327,30789],{"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,51419],{"class":102},[92,151342,30805],{"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,51419],{"class":102},[92,151354,30805],{"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,51419],{"class":102},[92,151366,30805],{"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,51419],{"class":102},[92,151378,30805],{"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,30783],{"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,87818],{"class":102},[92,151426,151427,151429,151431],{"class":94,"line":1711},[92,151428,151419],{"class":102},[92,151430,62661],{"class":207},[92,151432,87818],{"class":102},[92,151434,151435,151437,151439],{"class":94,"line":1728},[92,151436,151419],{"class":102},[92,151438,69106],{"class":207},[92,151440,87818],{"class":102},[92,151442,151443,151445,151448],{"class":94,"line":1733},[92,151444,151419],{"class":102},[92,151446,151447],{"class":207},"\"score\"",[92,151449,87818],{"class":102},[92,151451,151452],{"class":94,"line":1738},[92,151453,38108],{"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,30783],{"class":98},[92,151463,149956],{"class":151},[92,151465,30789],{"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,80283],{"class":102},[92,151487,1049],{"class":151},[92,151489,151483],{"class":151},[92,151491,80295],{"class":102},[92,151493,1049],{"class":151},[92,151495,151483],{"class":151},[92,151497,149837],{"class":102},[92,151499,1049],{"class":151},[92,151501,25115],{"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,30397],{"class":151},[92,151540,151541],{"class":102},"(student.is_passed())\n",[92,151543,151544,151546],{"class":94,"line":2589},[92,151545,30397],{"class":151},[92,151547,151548],{"class":102},"(student.to_dict())\n",[38,151550,151551,100999,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,28367],{},"类名推荐使用大驼峰，如 ",[89,151568,151569],{},"StudentManager",[49,151571,151572,151573,151575],{},"方法第一个参数必须写 ",[89,151574,30805],{},"，调用时不用传。",[49,151577,151578,151580],{},[89,151579,30811],{}," 不是普通方法，它在创建对象时自动执行。",[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,104347,151628,151630,151631,28367],{},[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151666,"title":151667,"body":151668,"description":23357,"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":30360,"code":151772,"language":30362,"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,30374],{"class":98},[92,151780,147066],{"class":102},[92,151782,151783,151785,151787,151789],{"class":94,"line":11},[92,151784,30719],{"class":98},[92,151786,108292],{"class":102},[92,151788,30374],{"class":98},[92,151790,108297],{"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,108526],{"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,31929],{"class":98},[92,151822,151823],{"class":1942}," load_students",[92,151825,31935],{"class":102},[92,151827,151828,151830,151832,151835],{"class":94,"line":1290},[92,151829,3080],{"class":98},[92,151831,38912],{"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,51820],{"class":102},[92,151845,151846],{"class":94,"line":1308},[92,151847,2379],{"emptyLinePlaceholder":17},[92,151849,151850,151852],{"class":94,"line":1591},[92,151851,125765],{"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,31365],{"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,45336],{"class":5196},[92,151894,109],{"class":102},[92,151896,151897,151899],{"class":94,"line":1607},[92,151898,125793],{"class":98},[92,151900,151901],{"class":102}," json.JSONDecodeError:\n",[92,151903,151904,151906,151908,151911],{"class":94,"line":1621},[92,151905,32433],{"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,51820],{"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,31929],{"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,34160],{"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,31365],{"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,45336],{"class":5196},[92,151976,12415],{"class":102},[92,151978,147112],{"class":5196},[92,151980,148],{"class":98},[92,151982,33969],{"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,31929],{"class":98},[92,152007,152008],{"class":1942}," show_menu",[92,152010,31935],{"class":102},[92,152012,152013,152015,152017,152020],{"class":94,"line":1733},[92,152014,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31929],{"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,26025],{"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,31929],{"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,95273],{"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,53803],{"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,34632],{"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,31929],{"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,95273],{"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,109778],{"class":151},[92,152253,103],{"class":102},[92,152255,53803],{"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,34632],{"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,31929],{"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,60587],{"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,32433],{"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,60587],{"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,33443],{"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,31281],{"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,31929],{"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,60587],{"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,38909],{"class":98},[92,152503,38915],{"class":151},[92,152505,3718],{"class":102},[92,152507,152508,152510,152512,152515],{"class":94,"line":16800},[92,152509,32433],{"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,31281],{"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,31929],{"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,60587],{"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,38909],{"class":98},[92,152598,38915],{"class":151},[92,152600,3718],{"class":102},[92,152602,152603,152605,152607,152609],{"class":94,"line":16907},[92,152604,32433],{"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":32615},[92,152618,2379],{"emptyLinePlaceholder":17},[92,152620,152621,152623,152625,152627,152629,152632],{"class":94,"line":32621},[92,152622,152345],{"class":102},[92,152624,148],{"class":98},[92,152626,60587],{"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":32627},[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":32633},[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":32639},[92,152663,2379],{"emptyLinePlaceholder":17},[92,152665,152666,152669,152671,152673,152675],{"class":94,"line":32650},[92,152667,152668],{"class":102},"    student[",[92,152670,62661],{"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":32656},[92,152680,152668],{"class":102},[92,152682,69106],{"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":32676},[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":32682},[92,152704,2379],{"emptyLinePlaceholder":17},[92,152706,152707],{"class":94,"line":32693},[92,152708,152436],{"class":102},[92,152710,152711,152713,152715,152718],{"class":94,"line":32699},[92,152712,31281],{"class":151},[92,152714,103],{"class":102},[92,152716,152717],{"class":207},"\"修改成功\"",[92,152719,109],{"class":102},[92,152721,152722],{"class":94,"line":32705},[92,152723,2379],{"emptyLinePlaceholder":17},[92,152725,152726],{"class":94,"line":32711},[92,152727,2379],{"emptyLinePlaceholder":17},[92,152729,152730,152732,152735],{"class":94,"line":32717},[92,152731,31929],{"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":32723},[92,152740,152298],{"class":102},[92,152742,148],{"class":98},[92,152744,60587],{"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":32729},[92,152755,152484],{"class":102},[92,152757,148],{"class":98},[92,152759,152489],{"class":102},[92,152761,152762],{"class":94,"line":32735},[92,152763,2379],{"emptyLinePlaceholder":17},[92,152765,152766,152768,152770,152772,152774],{"class":94,"line":32755},[92,152767,3080],{"class":98},[92,152769,152112],{"class":102},[92,152771,38909],{"class":98},[92,152773,38915],{"class":151},[92,152775,3718],{"class":102},[92,152777,152778,152780,152782,152784],{"class":94,"line":32761},[92,152779,32433],{"class":151},[92,152781,103],{"class":102},[92,152783,152514],{"class":207},[92,152785,109],{"class":102},[92,152787,152788],{"class":94,"line":32777},[92,152789,152336],{"class":98},[92,152791,152792],{"class":94,"line":32783},[92,152793,2379],{"emptyLinePlaceholder":17},[92,152795,152796],{"class":94,"line":32797},[92,152797,152798],{"class":102},"    print_student(student)\n",[92,152800,152801],{"class":94,"line":32803},[92,152802,2379],{"emptyLinePlaceholder":17},[92,152804,152805],{"class":94,"line":32818},[92,152806,2379],{"emptyLinePlaceholder":17},[92,152808,152809,152811,152814],{"class":94,"line":32824},[92,152810,31929],{"class":98},[92,152812,152813],{"class":1942}," print_student",[92,152815,152816],{"class":102},"(student):\n",[92,152818,152819,152821],{"class":94,"line":32833},[92,152820,31281],{"class":151},[92,152822,151414],{"class":102},[92,152824,152825,152828,152830,152832,152835,152838,152840,152843],{"class":94,"line":32839},[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,25115],{"class":207},[92,152846,152847,152849,152851,152853,152855,152858,152860,152862],{"class":94,"line":32848},[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,25115],{"class":207},[92,152865,152866,152868,152870,152872,152874,152877,152879,152881],{"class":94,"line":32854},[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,25115],{"class":207},[92,152884,152885,152887,152889,152891,152893,152896,152898,152900],{"class":94,"line":32860},[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,25115],{"class":207},[92,152903,152904],{"class":94,"line":32869},[92,152905,152906],{"class":102},"    )\n",[92,152908,152909],{"class":94,"line":32875},[92,152910,2379],{"emptyLinePlaceholder":17},[92,152912,152913],{"class":94,"line":32886},[92,152914,2379],{"emptyLinePlaceholder":17},[92,152916,152917,152919,152922],{"class":94,"line":32892},[92,152918,31929],{"class":98},[92,152920,152921],{"class":1942}," show_all_students",[92,152923,151936],{"class":102},[92,152925,152926,152928,152930],{"class":94,"line":32911},[92,152927,3080],{"class":98},[92,152929,38912],{"class":98},[92,152931,152117],{"class":102},[92,152933,152934,152936,152938,152941],{"class":94,"line":32917},[92,152935,32433],{"class":151},[92,152937,103],{"class":102},[92,152939,152940],{"class":207},"\"暂无学生\"",[92,152942,109],{"class":102},[92,152944,152945],{"class":94,"line":32928},[92,152946,152336],{"class":98},[92,152948,152949],{"class":94,"line":32934},[92,152950,2379],{"emptyLinePlaceholder":17},[92,152952,152953,152955,152957,152960,152962,152965,152967,152970,152972,152975],{"class":94,"line":32954},[92,152954,31281],{"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":32970},[92,152980,3180],{"class":98},[92,152982,152112],{"class":102},[92,152984,26025],{"class":98},[92,152986,152117],{"class":102},[92,152988,152989],{"class":94,"line":32976},[92,152990,152991],{"class":102},"        print_student(student)\n",[92,152993,152994],{"class":94,"line":32990},[92,152995,2379],{"emptyLinePlaceholder":17},[92,152997,152998],{"class":94,"line":32996},[92,152999,2379],{"emptyLinePlaceholder":17},[92,153001,153002,153004,153006],{"class":94,"line":33002},[92,153003,31929],{"class":98},[92,153005,1952],{"class":1942},[92,153007,31935],{"class":102},[92,153009,153010,153013,153015],{"class":94,"line":33013},[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":33019},[92,153021,2379],{"emptyLinePlaceholder":17},[92,153023,153024,153026,153028],{"class":94,"line":33025},[92,153025,2230],{"class":98},[92,153027,95273],{"class":151},[92,153029,3718],{"class":102},[92,153031,153032],{"class":94,"line":33035},[92,153033,153034],{"class":102},"        show_menu()\n",[92,153036,153037,153040,153042,153044,153046,153049],{"class":94,"line":33041},[92,153038,153039],{"class":102},"        choice ",[92,153041,148],{"class":98},[92,153043,60587],{"class":151},[92,153045,103],{"class":102},[92,153047,153048],{"class":207},"\"请输入操作:\"",[92,153050,109],{"class":102},[92,153052,153053],{"class":94,"line":33052},[92,153054,2379],{"emptyLinePlaceholder":17},[92,153056,153057,153059,153062,153064,153067],{"class":94,"line":33058},[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":33068},[92,153072,153073],{"class":102},"            add_student(students)\n",[92,153075,153076,153079,153081,153083,153086],{"class":94,"line":33073},[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":33079},[92,153091,153092],{"class":102},"            delete_student(students)\n",[92,153094,153095,153097,153099,153101,153104],{"class":94,"line":33128},[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":33175},[92,153109,153110],{"class":102},"            update_student(students)\n",[92,153112,153113,153115,153117,153119,153122],{"class":94,"line":33180},[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":33186},[92,153127,153128],{"class":102},"            query_student(students)\n",[92,153130,153131,153133,153135,153137,153140],{"class":94,"line":33205},[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":33211},[92,153145,153146],{"class":102},"            show_all_students(students)\n",[92,153148,153149,153151,153153,153155,153158],{"class":94,"line":33231},[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":33237},[92,153163,34632],{"class":151},[92,153165,103],{"class":102},[92,153167,153168],{"class":207},"\"退出系统\"",[92,153170,109],{"class":102},[92,153172,153173],{"class":94,"line":33243},[92,153174,115079],{"class":98},[92,153176,153177,153179],{"class":94,"line":33253},[92,153178,2513],{"class":98},[92,153180,3718],{"class":102},[92,153182,153183,153185,153187,153190],{"class":94,"line":33258},[92,153184,34632],{"class":151},[92,153186,103],{"class":102},[92,153188,153189],{"class":207},"\"输入错误\"",[92,153191,109],{"class":102},[92,153193,153194],{"class":94,"line":33264},[92,153195,2379],{"emptyLinePlaceholder":17},[92,153197,153198],{"class":94,"line":33280},[92,153199,2379],{"emptyLinePlaceholder":17},[92,153201,153202,153204,153206,153208,153210],{"class":94,"line":33325},[92,153203,1510],{"class":98},[92,153205,31202],{"class":151},[92,153207,101540],{"class":98},[92,153209,101543],{"class":207},[92,153211,3718],{"class":102},[92,153213,153214],{"class":94,"line":33331},[92,153215,101550],{"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,28367],{},[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":30360,"code":153264,"language":30362,"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,30719],{"class":98},[92,153272,151127],{"class":102},[92,153274,30374],{"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,30783],{"class":98},[92,153331,151325],{"class":1942},[92,153333,30789],{"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,51419],{"class":102},[92,153347,30805],{"class":151},[92,153349,151345],{"class":102},[92,153351,153352,153354,153356,153358],{"class":94,"line":1607},[92,153353,151350],{"class":207},[92,153355,51419],{"class":102},[92,153357,30805],{"class":151},[92,153359,151357],{"class":102},[92,153361,153362,153364,153366,153368],{"class":94,"line":1621},[92,153363,151362],{"class":207},[92,153365,51419],{"class":102},[92,153367,30805],{"class":151},[92,153369,151369],{"class":102},[92,153371,153372,153374,153376,153378],{"class":94,"line":1626},[92,153373,151374],{"class":207},[92,153375,51419],{"class":102},[92,153377,30805],{"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,30783],{"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,87818],{"class":102},[92,153419,153420,153422,153424],{"class":94,"line":1711},[92,153421,151419],{"class":102},[92,153423,62661],{"class":207},[92,153425,87818],{"class":102},[92,153427,153428,153430,153432],{"class":94,"line":1728},[92,153429,151419],{"class":102},[92,153431,69106],{"class":207},[92,153433,87818],{"class":102},[92,153435,153436,153438,153440],{"class":94,"line":1733},[92,153437,151419],{"class":102},[92,153439,151447],{"class":207},[92,153441,87818],{"class":102},[92,153443,153444],{"class":94,"line":1738},[92,153445,38108],{"class":102},[38,153447,153448],{},"管理器示意：",[83,153450,153452],{"className":30360,"code":153451,"language":30362,"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,30783],{"class":98},[92,153468,30786],{"class":151},[92,153470,30789],{"class":102},[92,153472,153473,153475,153478,153480],{"class":94,"line":1158},[92,153474,30827],{"class":151},[92,153476,153477],{"class":102},".students ",[92,153479,148],{"class":98},[92,153481,51820],{"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,30783],{"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,26025],{"class":98},[92,153505,38855],{"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,30783],{"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,38855],{"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,125788],{"class":151},[92,153562,153563,153565],{"class":94,"line":1607},[92,153564,30827],{"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":30360,"code":153588,"language":30362,"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,55429],{"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,51419],{"class":102},[92,153608,148583],{"class":207},[92,153610,12415],{"class":102},[92,153612,153613],{"class":207},"\"category\"",[92,153615,51419],{"class":102},[92,153617,153618],{"class":207},"\"手机\"",[92,153620,12415],{"class":102},[92,153622,84066],{"class":207},[92,153624,51419],{"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,51419],{"class":102},[92,153639,148583],{"class":207},[92,153641,12415],{"class":102},[92,153643,153613],{"class":207},[92,153645,51419],{"class":102},[92,153647,153648],{"class":207},"\"电脑\"",[92,153650,12415],{"class":102},[92,153652,84066],{"class":207},[92,153654,51419],{"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,51419],{"class":102},[92,153669,148604],{"class":207},[92,153671,12415],{"class":102},[92,153673,153613],{"class":207},[92,153675,51419],{"class":102},[92,153677,153618],{"class":207},[92,153679,12415],{"class":102},[92,153681,84066],{"class":207},[92,153683,51419],{"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,51419],{"class":102},[92,153698,148604],{"class":207},[92,153700,12415],{"class":102},[92,153702,153613],{"class":207},[92,153704,51419],{"class":102},[92,153706,153648],{"class":207},[92,153708,12415],{"class":102},[92,153710,84066],{"class":207},[92,153712,51419],{"class":102},[92,153714,153715],{"class":151},"16000",[92,153717,4909],{"class":102},[92,153719,153720],{"class":94,"line":1193},[92,153721,33228],{"class":102},[63,153723,153725],{"id":153724},"_1252-按日期统计","12.5.2 按日期统计",[83,153727,153729],{"className":30360,"code":153728,"language":30362,"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,87850],{"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,26025],{"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,33228],{"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,84066],{"class":207},[92,153781,33228],{"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,30397],{"class":151},[92,153810,153811],{"class":102},"(daily_total)\n",[63,153813,153815],{"id":153814},"_1253-按类别统计","12.5.3 按类别统计",[83,153817,153819],{"className":30360,"code":153818,"language":30362,"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,87850],{"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,26025],{"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,33228],{"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,84066],{"class":207},[92,153868,33228],{"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,30397],{"class":151},[92,153896,153897],{"class":102},"(category_total)\n",[63,153899,153901],{"id":153900},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[83,153903,153905],{"className":30360,"code":153904,"language":30362,"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,30397],{"class":151},[92,153937,153938],{"class":102},"(top_date, top_amount)\n",[33,153940,153942],{"id":153941},"_126-绘制柱状图","12.6 绘制柱状图",[83,153944,153946],{"className":30360,"code":153945,"language":30362,"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,30719],{"class":98},[92,153953,147354],{"class":102},[92,153955,30374],{"class":98},[92,153957,147359],{"class":102},[92,153959,31365],{"class":98},[92,153961,147364],{"class":102},[92,153963,153964,153966,153968,153970],{"class":94,"line":11},[92,153965,30719],{"class":98},[92,153967,147213],{"class":102},[92,153969,30374],{"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,51419],{"class":102},[92,153993,153994],{"class":151},"27000",[92,153996,31448],{"class":102},[92,153998,153999,154002,154004,154007],{"class":94,"line":1193},[92,154000,154001],{"class":207},"    \"电脑\"",[92,154003,51419],{"class":102},[92,154005,154006],{"class":151},"34000",[92,154008,31448],{"class":102},[92,154010,154011,154014,154016,154018],{"class":94,"line":1199},[92,154012,154013],{"class":207},"    \"耳机\"",[92,154015,51419],{"class":102},[92,154017,124380],{"class":151},[92,154019,31448],{"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,51389],{"class":5196},[92,154079,148],{"class":98},[92,154081,154082],{"class":207},"\"品类销售额\"",[92,154084,38029],{"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,79792],{"class":5196},[92,154096,148],{"class":98},[92,154098,154099],{"class":207},"\"品类\"",[92,154101,38029],{"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,79792],{"class":5196},[92,154113,148],{"class":98},[92,154115,147270],{"class":207},[92,154117,38029],{"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":30360,"code":154141,"language":30362,"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,30719],{"class":98},[92,154149,147354],{"class":102},[92,154151,30374],{"class":98},[92,154153,147359],{"class":102},[92,154155,31365],{"class":98},[92,154157,147364],{"class":102},[92,154159,154160,154162,154164,154166],{"class":94,"line":11},[92,154161,30719],{"class":98},[92,154163,147213],{"class":102},[92,154165,30374],{"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,101639],{"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,51419],{"class":102},[92,154194,153627],{"class":151},[92,154196,12415],{"class":102},[92,154198,153648],{"class":207},[92,154200,51419],{"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,51419],{"class":102},[92,154217,153686],{"class":151},[92,154219,12415],{"class":102},[92,154221,153648],{"class":207},[92,154223,51419],{"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,51419],{"class":102},[92,154240,154241],{"class":151},"17000",[92,154243,12415],{"class":102},[92,154245,153648],{"class":207},[92,154247,51419],{"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,26025],{"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,51389],{"class":5196},[92,154334,148],{"class":98},[92,154336,155],{"class":98},[92,154338,354],{"class":207},[92,154340,999],{"class":151},[92,154342,73908],{"class":102},[92,154344,1049],{"class":151},[92,154346,154347],{"class":207},"销售额\"",[92,154349,30479],{"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":30360,"code":154378,"language":30362,"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,30719],{"class":98},[92,154386,147354],{"class":102},[92,154388,30374],{"class":98},[92,154390,147359],{"class":102},[92,154392,31365],{"class":98},[92,154394,147364],{"class":102},[92,154396,154397,154399,154401,154403],{"class":94,"line":11},[92,154398,30719],{"class":98},[92,154400,147213],{"class":102},[92,154402,30374],{"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,101639],{"class":102},[92,154415,148],{"class":98},[92,154417,55429],{"class":102},[92,154419,154420,154423,154425,154427,154429],{"class":94,"line":1179},[92,154421,154422],{"class":102},"    (",[92,154424,69251],{"class":207},[92,154426,12415],{"class":102},[92,154428,920],{"class":151},[92,154430,38029],{"class":102},[92,154432,154433,154435,154437,154439,154441],{"class":94,"line":1193},[92,154434,154422],{"class":102},[92,154436,69271],{"class":207},[92,154438,12415],{"class":102},[92,154440,147287],{"class":151},[92,154442,38029],{"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,38029],{"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,38029],{"class":102},[92,154470,154471],{"class":94,"line":1296},[92,154472,33228],{"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,51389],{"class":5196},[92,154518,148],{"class":98},[92,154520,154521],{"class":207},"\"地区销售额\"",[92,154523,38029],{"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,38029],{"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,28367],{},"会写 ",[89,154632,154633],{},"if elif else",[49,154635,154630,154636,100999,154638,28367],{},[89,154637,108644],{},[89,154639,3004],{},[49,154641,154642,154643,100999,154645,28367],{},"理解 ",[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,24581],{},[46,154803,154804,154810,154820],{},[49,154805,154806,154807,28367],{},"异常类型是 ",[89,154808,154809],{},"ValueError",[49,154811,107326,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,28367],{},"自动化办公：",[89,154851,154852],{},"openpyxl",[89,154854,154855],{},"python-docx",[89,154857,154858],{},"pdfplumber",[49,154860,154861,154862,315,154864,315,154866,28367],{},"数据分析：",[89,154863,100607],{},[89,154865,146160],{},[89,154867,146168],{},[49,154869,154870,154871,315,154874,315,154877,28367],{},"Web 后端：",[89,154872,154873],{},"Flask",[89,154875,154876],{},"FastAPI",[89,154878,154879],{},"Django",[49,154881,154882,154883,315,154885,315,154888,28367],{},"爬虫：",[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,28367],{},"人工智能：",[89,154904,100607],{},[89,154906,146160],{},[89,154908,154909],{},"pytorch",[49,154911,154912,154913,315,154915,315,154918,28367],{},"运维脚本：",[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154987,"title":154988,"body":154989,"description":23357,"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":30360,"code":155006,"language":30362,"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,30397],{"class":151},[92,155019,103],{"class":102},[92,155021,5824],{"class":207},[92,155023,109],{"class":102},[38,155025,155026],{},"多行说明常用三引号：",[83,155028,155030],{"className":30360,"code":155029,"language":30362,"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,95679],{"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,95679],{"class":207},[38,155051,155052],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[38,155054,155055],{},"不好：",[83,155057,155059],{"className":30360,"code":155058,"language":30362,"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,55681],{"class":151},[38,155079,155080],{},"较好：",[83,155082,155084],{"className":30360,"code":155083,"language":30362,"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,55681],{"class":151},[33,155104,155106],{"id":155105},"_22-字面量","2.2 字面量",[38,155108,155109],{},"字面量就是代码中直接写出来的数据。",[83,155111,155113],{"className":30360,"code":155112,"language":30362,"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,31458],{"class":151},[92,155141,155142],{"class":161},"         # 布尔值\n",[92,155144,155145,155147],{"class":94,"line":1179},[92,155146,95667],{"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,23718],{},[249,155162,27474],{},[249,155164,25851],{},[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,31458],{},[89,155209,33969],{},[292,155211,65997],{},[246,155213,155214,155217,155221],{},[292,155215,155216],{},"NoneType",[292,155218,155219],{},[89,155220,95667],{},[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,114527],{},[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":30360,"code":155283,"language":30362,"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":30360,"code":155326,"language":30362,"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":30360,"code":155374,"language":30362,"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":30360,"code":155410,"language":30362,"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":77385},"2age",[92,155419,13544],{"class":98},[92,155421,146526],{"class":151},[92,155423,155424,155426,155428,155430,155432],{"class":94,"line":11},[92,155425,131565],{"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":30360,"code":155448,"language":30362,"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,30374],{"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,30397],{"class":151},[92,155467,155468],{"class":102},"(keyword.kwlist)\n",[38,155470,155471],{},"推荐命名风格：",[83,155473,155475],{"className":30360,"code":155474,"language":30362,"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,125788],{"class":151},[38,155506,155507],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[33,155509,50714],{"id":50713},[38,155511,104347,155512,155515],{},[89,155513,155514],{},"type()"," 查看数据类型：",[83,155517,155519],{"className":30360,"code":155518,"language":30362,"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,30397],{"class":151},[92,155526,103],{"class":102},[92,155528,103088],{"class":151},[92,155530,103],{"class":102},[92,155532,414],{"class":151},[92,155534,30479],{"class":102},[92,155536,155537,155539,155541,155543,155545,155547],{"class":94,"line":11},[92,155538,30397],{"class":151},[92,155540,103],{"class":102},[92,155542,103088],{"class":151},[92,155544,103],{"class":102},[92,155546,152],{"class":151},[92,155548,30479],{"class":102},[92,155550,155551,155553,155555,155557,155559,155561],{"class":94,"line":1158},[92,155552,30397],{"class":151},[92,155554,103],{"class":102},[92,155556,103088],{"class":151},[92,155558,103],{"class":102},[92,155560,5824],{"class":207},[92,155562,30479],{"class":102},[92,155564,155565,155567,155569,155571,155573,155575],{"class":94,"line":1173},[92,155566,30397],{"class":151},[92,155568,103],{"class":102},[92,155570,103088],{"class":151},[92,155572,103],{"class":102},[92,155574,31458],{"class":151},[92,155576,30479],{"class":102},[92,155578,155579,155581,155583,155585,155587,155589],{"class":94,"line":1179},[92,155580,30397],{"class":151},[92,155582,103],{"class":102},[92,155584,103088],{"class":151},[92,155586,103],{"class":102},[92,155588,95667],{"class":151},[92,155590,30479],{"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,107264,155604,155606,155607,155609,155610,21480,155612,155609,155614,155616],{},[89,155603,1333],{},[89,155605,106],{}," 的子类，",[89,155608,31458],{}," 可以当作 ",[89,155611,320],{},[89,155613,33969],{},[89,155615,294],{},"，但业务代码中不要滥用。",[83,155618,155620],{"className":30360,"code":155619,"language":30362,"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,30397],{"class":151},[92,155627,103],{"class":102},[92,155629,31458],{"class":151},[92,155631,45548],{"class":98},[92,155633,25100],{"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,30397],{"class":151},[92,155645,103],{"class":102},[92,155647,33969],{"class":151},[92,155649,45548],{"class":98},[92,155651,25100],{"class":151},[92,155653,45790],{"class":102},[92,155655,155656],{"class":161},"# 1\n",[33,155658,155660],{"id":155659},"_26-类型转换","2.6 类型转换",[38,155662,155663],{},"常用转换函数：",[83,155665,155667],{"className":30360,"code":155666,"language":30362,"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,54298],{"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":30360,"code":155714,"language":30362,"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,30397],{"class":151},[92,155742,155743],{"class":102},"(age ",[92,155745,584],{"class":98},[92,155747,25100],{"class":151},[92,155749,109],{"class":102},[38,155751,155752],{},"输入得到的内容永远是字符串：",[83,155754,155756],{"className":30360,"code":155755,"language":30362,"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,60587],{"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,30397],{"class":151},[92,155779,103],{"class":102},[92,155781,103088],{"class":151},[92,155783,155784],{"class":102},"(num))  ",[92,155786,155787],{"class":161},"# str\n",[38,155789,155790],{},"如果要做数学运算，必须转换：",[83,155792,155794],{"className":30360,"code":155793,"language":30362,"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,53803],{"class":151},[92,155809,103],{"class":102},[92,155811,155771],{"class":207},[92,155813,30479],{"class":102},[92,155815,155816,155818,155820,155822,155824],{"class":94,"line":11},[92,155817,30397],{"class":151},[92,155819,45601],{"class":102},[92,155821,584],{"class":98},[92,155823,2017],{"class":151},[92,155825,109],{"class":102},[38,155827,155828],{},"常见错误：",[83,155830,155832],{"className":30360,"code":155831,"language":30362,"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":30360,"code":155866,"language":30362,"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,109778],{"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,25851],{},[249,155903,27474],{},[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,33311],{},[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":30360,"code":156008,"language":30362,"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,30397],{"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,30397],{"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,45790],{"class":102},[92,156045,155639],{"class":161},[92,156047,156048,156050,156052,156054,156057,156059,156061],{"class":94,"line":1158},[92,156049,30397],{"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,30397],{"class":151},[92,156068,103],{"class":102},[92,156070,180],{"class":151},[92,156072,156073],{"class":98}," **",[92,156075,78052],{"class":151},[92,156077,45790],{"class":102},[92,156079,156080],{"class":161},"# 8\n",[63,156082,156084],{"id":156083},"_272-赋值运算符","2.7.2 赋值运算符",[83,156086,156088],{"className":30360,"code":156087,"language":30362,"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,58410],{"class":151},[92,156099,156100,156102,156104],{"class":94,"line":11},[92,156101,155762],{"class":102},[92,156103,9457],{"class":98},[92,156105,54409],{"class":151},[92,156107,156108,156110,156112],{"class":94,"line":1158},[92,156109,155762],{"class":102},[92,156111,150227],{"class":98},[92,156113,47705],{"class":151},[92,156115,156116,156118,156120],{"class":94,"line":1173},[92,156117,155762],{"class":102},[92,156119,137129],{"class":98},[92,156121,120017],{"class":151},[92,156123,156124,156126,156129],{"class":94,"line":1179},[92,156125,155762],{"class":102},[92,156127,156128],{"class":98},"\u002F=",[92,156130,47705],{"class":151},[38,156132,156133],{},"等价关系：",[83,156135,156137],{"className":30360,"code":156136,"language":30362,"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,55681],{"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,55681],{"class":151},[38,156161,156162,156163,100999,156166,28367],{},"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":30360,"code":156178,"language":30362,"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,30397],{"class":151},[92,156186,103],{"class":102},[92,156188,549],{"class":151},[92,156190,26204],{"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,30397],{"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,30397],{"class":151},[92,156215,103],{"class":102},[92,156217,549],{"class":151},[92,156219,101540],{"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,30397],{"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,28367],{},"注意：判断相等用 ",[89,156243,2928],{},"，赋值用 ",[89,156246,148],{},[83,156248,156250],{"className":30360,"code":156249,"language":30362,"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,25851],{},[287,156290,156291,156300,156309],{},[246,156292,156293,156297],{},[292,156294,156295],{},[89,156296,30444],{},[292,156298,156299],{},"并且",[246,156301,156302,156306],{},[292,156303,156304],{},[89,156305,115071],{},[292,156307,156308],{},"或者",[246,156310,156311,156316],{},[292,156312,156313],{},[89,156314,156315],{},"not",[292,156317,156318],{},"取反",[83,156320,156322],{"className":30360,"code":156321,"language":30362,"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,88047],{"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,30397],{"class":151},[92,156350,155743],{"class":102},[92,156352,1689],{"class":98},[92,156354,156260],{"class":151},[92,156356,120410],{"class":98},[92,156358,156359],{"class":102}," has_ticket)\n",[92,156361,156362,156364,156366,156368,156370,156372],{"class":94,"line":1179},[92,156363,30397],{"class":151},[92,156365,155743],{"class":102},[92,156367,1013],{"class":98},[92,156369,156260],{"class":151},[92,156371,114182],{"class":98},[92,156373,156359],{"class":102},[92,156375,156376,156378,156380,156382],{"class":94,"line":1193},[92,156377,30397],{"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":30360,"code":156393,"language":30362,"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":30360,"code":156435,"language":30362,"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,25115],{"class":207},[38,156479,156480],{},"常见转义字符：",[240,156482,156483,156492],{},[243,156484,156485],{},[246,156486,156487,156490],{},[249,156488,156489],{},"写法",[249,156491,100681],{},[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":30360,"code":156548,"language":30362,"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,30397],{"class":151},[92,156564,103],{"class":102},[92,156566,156567],{"class":207},"\"你好，\"",[92,156569,45548],{"class":98},[92,156571,156572],{"class":102}," name)\n",[38,156574,156575],{},"字符串只能和字符串拼接：",[83,156577,156579],{"className":30360,"code":156578,"language":30362,"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,30397],{"class":151},[92,156594,103],{"class":102},[92,156596,146492],{"class":207},[92,156598,45548],{"class":98},[92,156600,73901],{"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":30360,"code":156617,"language":30362,"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,30397],{"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,25851],{},[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":30360,"code":156726,"language":30362,"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,30397],{"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":30360,"code":156762,"language":30362,"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,30397],{"class":151},[92,156790,103],{"class":102},[92,156792,156657],{"class":207},[92,156794,32441],{"class":151},[92,156796,156663],{"class":207},[92,156798,32441],{"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,30397],{"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,30397],{"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,79792],{"class":5196},[92,156848,148],{"class":98},[92,156850,156851],{"class":102},"name, ",[92,156853,70203],{"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":30360,"code":156868,"language":30362,"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,30397],{"class":151},[92,156904,103],{"class":102},[92,156906,155],{"class":98},[92,156908,156657],{"class":207},[92,156910,999],{"class":151},[92,156912,79792],{"class":102},[92,156914,1049],{"class":151},[92,156916,156663],{"class":207},[92,156918,999],{"class":151},[92,156920,70203],{"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":30360,"code":156944,"language":30362,"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,54409],{"class":151},[92,156964,156965,156967,156969,156971,156974,156976,156978,156980,156983,156985,156988],{"class":94,"line":1158},[92,156966,30397],{"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":30360,"code":157002,"language":30362,"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,60587],{"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,30397],{"class":151},[92,157024,103],{"class":102},[92,157026,155],{"class":98},[92,157028,157029],{"class":207},"\"你好，",[92,157031,999],{"class":151},[92,157033,79792],{"class":102},[92,157035,1049],{"class":151},[92,157037,354],{"class":207},[92,157039,109],{"class":102},[38,157041,157042],{},"输入整数：",[83,157044,157046],{"className":30360,"code":157045,"language":30362,"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,53803],{"class":151},[92,157061,103],{"class":102},[92,157063,152369],{"class":207},[92,157065,30479],{"class":102},[92,157067,157068,157070,157072,157074,157077,157079,157081,157083,157086,157088],{"class":94,"line":11},[92,157069,30397],{"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":30360,"code":157095,"language":30362,"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,109778],{"class":151},[92,157107,103],{"class":102},[92,157109,53803],{"class":151},[92,157111,103],{"class":102},[92,157113,157114],{"class":207},"\"请输入身高:\"",[92,157116,30479],{"class":102},[92,157118,157119,157121,157123,157125,157128,157130,157132,157135,157137,157140],{"class":94,"line":11},[92,157120,30397],{"class":151},[92,157122,103],{"class":102},[92,157124,155],{"class":98},[92,157126,157127],{"class":207},"\"身高:",[92,157129,999],{"class":151},[92,157131,24963],{"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,123273],{},[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":30360,"code":157166,"language":30362,"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,109778],{"class":151},[92,157178,103],{"class":102},[92,157180,53803],{"class":151},[92,157182,103],{"class":102},[92,157184,157185],{"class":207},"\"请输入商品单价:\"",[92,157187,30479],{"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,53803],{"class":151},[92,157201,103],{"class":102},[92,157203,157204],{"class":207},"\"请输入购买数量:\"",[92,157206,30479],{"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,109778],{"class":151},[92,157217,103],{"class":102},[92,157219,53803],{"class":151},[92,157221,103],{"class":102},[92,157223,157224],{"class":207},"\"请输入折扣:\"",[92,157226,30479],{"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,30397],{"class":151},[92,157260,103],{"class":102},[92,157262,155],{"class":98},[92,157264,157265],{"class":207},"\"商品单价:",[92,157267,999],{"class":151},[92,157269,79797],{"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,30397],{"class":151},[92,157283,103],{"class":102},[92,157285,155],{"class":98},[92,157287,157288],{"class":207},"\"购买数量:",[92,157290,999],{"class":151},[92,157292,84416],{"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,30397],{"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,30397],{"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,28367],{},"字符串拼接时，数字要先 ",[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":30360,"code":157378,"language":30362,"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,30397],{"class":151},[92,157386,103],{"class":102},[92,157388,86192],{"class":151},[92,157390,45548],{"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":50713,"depth":11,"text":50714},{"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":23357},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157464,"title":157465,"body":157466,"description":23357,"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":30360,"code":157480,"language":30362,"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":30360,"code":157498,"language":30362,"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,30397],{"class":151},[92,157514,155743],{"class":102},[92,157516,1689],{"class":98},[92,157518,156260],{"class":151},[92,157520,45790],{"class":102},[92,157522,157523],{"class":161},"# True\n",[33,157525,157527],{"id":157526},"_32-if基础语法","3.2 if基础语法",[83,157529,157531],{"className":30360,"code":157530,"language":30362,"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,53803],{"class":151},[92,157546,103],{"class":102},[92,157548,152369],{"class":207},[92,157550,30479],{"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,31281],{"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":30360,"code":157601,"language":30362,"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,31281],{"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":30360,"code":157634,"language":30362,"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,53803],{"class":151},[92,157650,103],{"class":102},[92,157652,152369],{"class":207},[92,157654,30479],{"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,31281],{"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,31281],{"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":30360,"code":157727,"language":30362,"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,53803],{"class":151},[92,157743,103],{"class":102},[92,157745,152384],{"class":207},[92,157747,30479],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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":30360,"code":157855,"language":30362,"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,31281],{"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,31281],{"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":30360,"code":157917,"language":30362,"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,53803],{"class":151},[92,157933,103],{"class":102},[92,157935,152369],{"class":207},[92,157937,30479],{"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,60587],{"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,32433],{"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,32433],{"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,31281],{"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":30360,"code":158044,"language":30362,"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,88047],{"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,120410],{"class":98},[92,158080,158081],{"class":102}," has_ticket:\n",[92,158083,158084,158086,158088,158090],{"class":94,"line":1179},[92,158085,31281],{"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":30360,"code":158101,"language":30362,"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,125788],{"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,115071],{"class":98},[92,158136,158137],{"class":102}," coupon:\n",[92,158139,158140,158142,158144,158147],{"class":94,"line":1179},[92,158141,31281],{"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":30360,"code":158158,"language":30362,"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,125788],{"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,38912],{"class":98},[92,158181,158182],{"class":102}," is_closed:\n",[92,158184,158185,158187,158189,158192],{"class":94,"line":1173},[92,158186,31281],{"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":30360,"code":158203,"language":30362,"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,31281],{"class":151},[92,158241,103],{"class":102},[92,158243,158244],{"class":207},"\"成绩合法\"",[92,158246,109],{"class":102},[38,158248,158249],{},"等价于：",[83,158251,158253],{"className":30360,"code":158252,"language":30362,"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,120410],{"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,31281],{"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,116448,158291,158293],{},[89,158292,1510],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[38,158295,158296],{},"假值：",[83,158298,158300],{"className":30360,"code":158299,"language":30362,"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,32324],{"class":151},[92,158320,158321],{"class":94,"line":1179},[92,158322,158323],{"class":207},"\"\"\n",[92,158325,158326],{"class":94,"line":1193},[92,158327,32339],{"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":30360,"code":158347,"language":30362,"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,60587],{"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,31281],{"class":151},[92,158380,103],{"class":102},[92,158382,155],{"class":98},[92,158384,157029],{"class":207},[92,158386,999],{"class":151},[92,158388,79792],{"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,31281],{"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,71247],{},"。它适合处理固定选项。",[83,158423,158425],{"className":30360,"code":158424,"language":30362,"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,60587],{"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,71247],{"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,32433],{"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,32433],{"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,32433],{"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,32433],{"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,71247],{}," 可以作为补充。",[33,158543,158545],{"id":158544},"_310-小案例成绩等级","3.10 小案例：成绩等级",[38,158547,123273],{},[46,158549,158550,158553,158556],{},[49,158551,158552],{},"输入成绩。",[49,158554,158555],{},"判断成绩是否合法。",[49,158557,158558],{},"输出等级。",[38,158560,10015],{},[83,158562,158564],{"className":30360,"code":158563,"language":30362,"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,109778],{"class":151},[92,158575,103],{"class":102},[92,158577,53803],{"class":151},[92,158579,103],{"class":102},[92,158581,152384],{"class":207},[92,158583,30479],{"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,38912],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,123273],{},[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":30360,"code":158751,"language":30362,"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,109778],{"class":151},[92,158764,103],{"class":102},[92,158766,53803],{"class":151},[92,158768,103],{"class":102},[92,158770,158771],{"class":207},"\"请输入消费金额:\"",[92,158773,30479],{"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,60587],{"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,55681],{"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,55681],{"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,31281],{"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,30397],{"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,28367],{},"判断相等用 ",[89,158982,2928],{},[49,158984,158985],{},"字符串比较区分大小写：",[83,158987,158989],{"className":30360,"code":158988,"language":30362,"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,101540],{"class":98},[92,158999,157980],{"class":207},[92,159001,159002],{"class":161},"  # False\n",[38,159004,159005],{},"可转换后再判断：",[83,159007,159009],{"className":30360,"code":159008,"language":30362,"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,60587],{"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,31281],{"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":23357},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159108,"title":159109,"body":159110,"description":23357,"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":30360,"code":159153,"language":30362,"meta":10,"style":10},"while 条件:\n    循环体\n",[89,159155,159156,159163],{"__ignoreMap":10},[92,159157,159158,159160],{"class":94,"line":95},[92,159159,108644],{"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":30360,"code":159172,"language":30362,"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,100129],{"class":102},[92,159180,148],{"class":98},[92,159182,55681],{"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,108644],{"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,31281],{"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,55681],{"class":151},[38,159216,80911],{},[46,159218,159219,159225,159228,159231],{},[49,159220,159221,159222,28367],{},"判断条件 ",[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":30360,"code":159243,"language":30362,"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,100129],{"class":102},[92,159251,148],{"class":98},[92,159253,55681],{"class":151},[92,159255,159256,159258,159260],{"class":94,"line":11},[92,159257,157235],{"class":102},[92,159259,148],{"class":98},[92,159261,47315],{"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,108644],{"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,55681],{"class":151},[92,159297,159298],{"class":94,"line":1199},[92,159299,2379],{"emptyLinePlaceholder":17},[92,159301,159302,159304],{"class":94,"line":1290},[92,159303,30397],{"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":30360,"code":159334,"language":30362,"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,30374],{"class":98},[92,159342,45310],{"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,47315],{"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,108644],{"class":98},[92,159381,95273],{"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,53803],{"class":151},[92,159398,103],{"class":102},[92,159400,159401],{"class":207},"\"请输入1到100之间的数字:\"",[92,159403,30479],{"class":102},[92,159405,159406,159409,159411],{"class":94,"line":1290},[92,159407,159408],{"class":102},"    count ",[92,159410,9457],{"class":98},[92,159412,55681],{"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,32433],{"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,39275],{"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,32433],{"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,32433],{"class":151},[92,159472,103],{"class":102},[92,159474,155],{"class":98},[92,159476,159477],{"class":207},"\"猜对了，一共猜了",[92,159479,999],{"class":151},[92,159481,84416],{"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,31609],{"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":30360,"code":159517,"language":30362,"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,26025],{"class":98},[92,159529,32425],{"class":151},[92,159531,103],{"class":102},[92,159533,320],{"class":151},[92,159535,12415],{"class":102},[92,159537,447],{"class":151},[92,159539,30768],{"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,78052],{"class":151},[92,159551,3718],{"class":102},[92,159553,159554],{"class":94,"line":1158},[92,159555,31609],{"class":98},[92,159557,159558,159560],{"class":94,"line":1173},[92,159559,31281],{"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":30360,"code":159581,"language":30362,"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,26025],{"class":98},[92,159593,32425],{"class":151},[92,159595,103],{"class":102},[92,159597,320],{"class":151},[92,159599,12415],{"class":102},[92,159601,447],{"class":151},[92,159603,30768],{"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,78052],{"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,31281],{"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":30360,"code":159645,"language":30362,"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,26025],{"class":98},[92,159671,158374],{"class":102},[92,159673,159674,159676],{"class":94,"line":1173},[92,159675,31281],{"class":151},[92,159677,159678],{"class":102},"(ch)\n",[38,159680,159681],{},"遍历列表：",[83,159683,159685],{"className":30360,"code":159684,"language":30362,"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,52208],{"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,33228],{"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,26025],{"class":98},[92,159722,152117],{"class":102},[92,159724,159725,159727],{"class":94,"line":1173},[92,159726,31281],{"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":30360,"code":159741,"language":30362,"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,33398],{"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,33398],{"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,33398],{"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,24600],{},"配合 ",[89,159801,3004],{},[83,159803,159805],{"className":30360,"code":159804,"language":30362,"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,26025],{"class":98},[92,159816,32425],{"class":151},[92,159818,103],{"class":102},[92,159820,320],{"class":151},[92,159822,12415],{"class":102},[92,159824,447],{"class":151},[92,159826,30768],{"class":102},[92,159828,159829,159831],{"class":94,"line":11},[92,159830,31281],{"class":151},[92,159832,159205],{"class":102},[38,159834,9005,159835,159837],{},[89,159836,33398],{}," 的结束值不包含在内。",[33,159839,159841],{"id":159840},"_48-for循环求和","4.8 for循环求和",[83,159843,159845],{"className":30360,"code":159844,"language":30362,"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,47315],{"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,26025],{"class":98},[92,159868,32425],{"class":151},[92,159870,103],{"class":102},[92,159872,320],{"class":151},[92,159874,12415],{"class":102},[92,159876,440],{"class":151},[92,159878,30768],{"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,30397],{"class":151},[92,159896,159306],{"class":102},[38,159898,159899],{},"求偶数和：",[83,159901,159903],{"className":30360,"code":159902,"language":30362,"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,47315],{"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,26025],{"class":98},[92,159926,32425],{"class":151},[92,159928,103],{"class":102},[92,159930,320],{"class":151},[92,159932,12415],{"class":102},[92,159934,440],{"class":151},[92,159936,30768],{"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,101540],{"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,30397],{"class":151},[92,159971,159306],{"class":102},[38,159973,159974],{},"也可以：",[83,159976,159978],{"className":30360,"code":159977,"language":30362,"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,47315],{"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,26025],{"class":98},[92,160001,32425],{"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,30768],{"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,30397],{"class":151},[92,160033,159306],{"class":102},[33,160035,160037],{"id":160036},"_49-循环嵌套","4.9 循环嵌套",[38,160039,160040],{},"嵌套循环就是循环里面再写循环。",[83,160042,160044],{"className":30360,"code":160043,"language":30362,"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,26025],{"class":98},[92,160055,32425],{"class":151},[92,160057,103],{"class":102},[92,160059,320],{"class":151},[92,160061,12415],{"class":102},[92,160063,396],{"class":151},[92,160065,30768],{"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,26025],{"class":98},[92,160075,32425],{"class":151},[92,160077,103],{"class":102},[92,160079,320],{"class":151},[92,160081,12415],{"class":102},[92,160083,396],{"class":151},[92,160085,30768],{"class":102},[92,160087,160088,160090,160092,160094,160097,160099,160101,160103,160106,160108,160110,160112,160114],{"class":94,"line":1158},[92,160089,32433],{"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":30360,"code":160125,"language":30362,"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,26025],{"class":98},[92,160137,32425],{"class":151},[92,160139,103],{"class":102},[92,160141,320],{"class":151},[92,160143,12415],{"class":102},[92,160145,549],{"class":151},[92,160147,30768],{"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,26025],{"class":98},[92,160157,32425],{"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,25100],{"class":151},[92,160170,30768],{"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,32433],{"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,100129],{"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,45783],{"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,31281],{"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":30360,"code":160276,"language":30362,"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,26025],{"class":98},[92,160288,32425],{"class":151},[92,160290,103],{"class":102},[92,160292,320],{"class":151},[92,160294,12415],{"class":102},[92,160296,447],{"class":151},[92,160298,30768],{"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,32433],{"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,31609],{"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,31281],{"class":151},[92,160337,103],{"class":102},[92,160339,160340],{"class":207},"\"没找到\"",[92,160342,109],{"class":102},[38,160344,160345],{},"常用于搜索。",[83,160347,160349],{"className":30360,"code":160348,"language":30362,"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,52208],{"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,33228],{"class":102},[92,160373,160374,160376,160378],{"class":94,"line":11},[92,160375,111559],{"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,26025],{"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,32433],{"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,31609],{"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,31281],{"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,123273],{},[46,160445,160446,160449,160452],{},[49,160447,160448],{},"用户最多输入 3 次密码。",[49,160450,160451],{},"密码正确则登录成功。",[49,160453,160454],{},"3 次都错误则锁定账号。",[38,160456,10015],{},[83,160458,160460],{"className":30360,"code":160459,"language":30362,"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,26025],{"class":98},[92,160485,32425],{"class":151},[92,160487,103],{"class":102},[92,160489,174],{"class":151},[92,160491,30768],{"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,60587],{"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,32433],{"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,31609],{"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,32433],{"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,52253],{"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,31281],{"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":30360,"code":160593,"language":30362,"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,108644],{"class":98},[92,160601,95273],{"class":151},[92,160603,3718],{"class":102},[92,160605,160606,160608,160610,160613],{"class":94,"line":11},[92,160607,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,60587],{"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,32433],{"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,39275],{"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,32433],{"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,39275],{"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,32433],{"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,39275],{"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,32433],{"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,31609],{"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,32433],{"class":151},[92,160788,103],{"class":102},[92,160790,153189],{"class":207},[92,160792,109],{"class":102},[38,160794,160795,160796,160798,160799,28367],{},"菜单类程序通常使用 ",[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,108644],{}," 循环必须更新控制变量。",[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160885,"title":160886,"body":160887,"description":23357,"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":30360,"code":160941,"language":30362,"meta":10,"style":10},"def 函数名():\n    函数体\n",[89,160943,160944,160953],{"__ignoreMap":10},[92,160945,160946,160948,160951],{"class":94,"line":95},[92,160947,31929],{"class":98},[92,160949,160950],{"class":1942}," 函数名",[92,160952,31935],{"class":102},[92,160954,160955],{"class":94,"line":11},[92,160956,160957],{"class":102},"    函数体\n",[38,160959,15115],{},[83,160961,160963],{"className":30360,"code":160962,"language":30362,"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,31929],{"class":98},[92,160970,160971],{"class":1942}," say_hello",[92,160973,31935],{"class":102},[92,160975,160976,160978,160980,160982],{"class":94,"line":11},[92,160977,31281],{"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,31281],{"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":30360,"code":161029,"language":30362,"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,31929],{"class":98},[92,161037,161038],{"class":1942}," print_menu",[92,161040,31935],{"class":102},[92,161042,161043,161045,161047,161050],{"class":94,"line":11},[92,161044,31281],{"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,31281],{"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,31281],{"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,31281],{"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":30360,"code":161113,"language":30362,"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,31929],{"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,31281],{"class":151},[92,161130,103],{"class":102},[92,161132,155],{"class":98},[92,161134,157029],{"class":207},[92,161136,999],{"class":151},[92,161138,79792],{"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,79792],{}," 是形参，",[89,161176,149863],{}," 是实参。",[38,161179,161180],{},"多个参数：",[83,161182,161184],{"className":30360,"code":161183,"language":30362,"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,31929],{"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,31281],{"class":151},[92,161212,76567],{"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":30360,"code":161248,"language":30362,"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,31929],{"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,30397],{"class":151},[92,161300,76567],{"class":102},[38,161302,161303,161304,161306,161307,28367],{},"如果函数没有写 ",[89,161305,17026],{},"，默认返回 ",[89,161308,95667],{},[83,161310,161312],{"className":30360,"code":161311,"language":30362,"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,31929],{"class":98},[92,161319,160971],{"class":1942},[92,161321,31935],{"class":102},[92,161323,161324,161326,161328,161330],{"class":94,"line":11},[92,161325,31281],{"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,30397],{"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":30360,"code":161378,"language":30362,"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,31929],{"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,30397],{"class":151},[92,161457,161458],{"class":102},"(check_age(",[92,161460,803],{"class":151},[92,161462,30479],{"class":102},[92,161464,161465,161467,161469,161471,161473],{"class":94,"line":1596},[92,161466,30397],{"class":151},[92,161468,161458],{"class":102},[92,161470,635],{"class":98},[92,161472,320],{"class":151},[92,161474,30479],{"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,95667],{}," 表示空值或没有结果。",[38,161491,161492],{},"常见使用场景：",[46,161494,161495,161498,161501],{},[49,161496,161497],{},"函数没有返回值。",[49,161499,161500],{},"变量暂时没有具体值。",[49,161502,161503],{},"表示查询不到结果。",[83,161505,161507],{"className":30360,"code":161506,"language":30362,"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,38909],{"class":98},[92,161531,38915],{"class":151},[92,161533,3718],{"class":102},[92,161535,161536,161538,161540,161543],{"class":94,"line":1173},[92,161537,31281],{"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,28367],{},"判断 ",[89,161549,95667],{}," 推荐使用 ",[89,161552,161553],{},"is None","，不要写成 ",[89,161556,161557],{},"== None",[33,161559,161561],{"id":161560},"_58-函数文档字符串","5.8 函数文档字符串",[38,161563,161564],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[83,161566,161568],{"className":30360,"code":161567,"language":30362,"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,31929],{"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,47705],{"class":151},[38,161602,161603],{},"查看说明：",[83,161605,161607],{"className":30360,"code":161606,"language":30362,"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":30360,"code":161622,"language":30362,"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,31929],{"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,47705],{"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":30360,"code":161693,"language":30362,"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,31929],{"class":98},[92,161701,161702],{"class":1942}," test",[92,161704,31935],{"class":102},[92,161706,161707,161709,161711],{"class":94,"line":11},[92,161708,45575],{"class":102},[92,161710,148],{"class":98},[92,161712,58410],{"class":151},[92,161714,161715,161717],{"class":94,"line":1158},[92,161716,31281],{"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,30397],{"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":30360,"code":161751,"language":30362,"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,31929],{"class":98},[92,161775,160971],{"class":1942},[92,161777,31935],{"class":102},[92,161779,161780,161782],{"class":94,"line":1179},[92,161781,31281],{"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,28367],{},"如果要在函数内部修改全局变量，需要 ",[89,161800,161801],{},"global",[83,161803,161805],{"className":30360,"code":161804,"language":30362,"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,47315],{"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,31929],{"class":98},[92,161828,161829],{"class":1942}," add_count",[92,161831,31935],{"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,55681],{"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,30397],{"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":30360,"code":161880,"language":30362,"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,31929],{"class":98},[92,161888,161889],{"class":1942}," print_line",[92,161891,31935],{"class":102},[92,161893,161894,161896,161898,161900,161902,161904],{"class":94,"line":11},[92,161895,31281],{"class":151},[92,161897,103],{"class":102},[92,161899,32465],{"class":207},[92,161901,6498],{"class":98},[92,161903,78647],{"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,31929],{"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,31281],{"class":151},[92,161933,103],{"class":102},[92,161935,155],{"class":98},[92,161937,156657],{"class":207},[92,161939,999],{"class":151},[92,161941,79792],{"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,31281],{"class":151},[92,161953,103],{"class":102},[92,161955,155],{"class":98},[92,161957,161958],{"class":207},"\"年龄:",[92,161960,999],{"class":151},[92,161962,70203],{"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":30360,"code":162006,"language":30362,"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,31929],{"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,38909],{"class":98},[92,162084,38915],{"class":151},[92,162086,3718],{"class":102},[92,162088,162089,162091,162093,162096],{"class":94,"line":1308},[92,162090,31281],{"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,31281],{"class":151},[92,162109,76567],{"class":102},[33,162111,162113],{"id":162112},"_512-类型提示","5.12 类型提示",[38,162115,162116],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[83,162118,162120],{"className":30360,"code":162119,"language":30362,"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,31929],{"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":30360,"code":162160,"language":30362,"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,31929],{"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,95667],{"class":151},[92,162179,3718],{"class":102},[92,162181,162182,162184,162186,162188,162190,162192,162194,162196,162198],{"class":94,"line":11},[92,162183,31281],{"class":151},[92,162185,103],{"class":102},[92,162187,155],{"class":98},[92,162189,157029],{"class":207},[92,162191,999],{"class":151},[92,162193,79792],{"class":102},[92,162195,1049],{"class":151},[92,162197,354],{"class":207},[92,162199,109],{"class":102},[38,162201,162202],{},"列表参数：",[83,162204,162206],{"className":30360,"code":162205,"language":30362,"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,31929],{"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,47315],{"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,26025],{"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":30360,"code":162272,"language":30362,"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,31929],{"class":98},[92,162298,152008],{"class":1942},[92,162300,31935],{"class":102},[92,162302,162303,162305,162307,162310],{"class":94,"line":1179},[92,162304,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31281],{"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,31929],{"class":98},[92,162365,162366],{"class":1942}," show_balance",[92,162368,31935],{"class":102},[92,162370,162371,162373,162375,162377,162380,162382,162385,162387,162389],{"class":94,"line":1602},[92,162372,31281],{"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,31929],{"class":98},[92,162404,162405],{"class":1942}," save_money",[92,162407,31935],{"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,109778],{"class":151},[92,162424,103],{"class":102},[92,162426,53803],{"class":151},[92,162428,103],{"class":102},[92,162430,162431],{"class":207},"\"请输入存款金额:\"",[92,162433,30479],{"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,32433],{"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,31281],{"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,31929],{"class":98},[92,162499,162500],{"class":1942}," withdraw_money",[92,162502,31935],{"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,109778],{"class":151},[92,162518,103],{"class":102},[92,162520,53803],{"class":151},[92,162522,103],{"class":102},[92,162524,162525],{"class":207},"\"请输入取款金额:\"",[92,162527,30479],{"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,32433],{"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,32433],{"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,31281],{"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,108644],{"class":98},[92,162615,95273],{"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,60587],{"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,39275],{"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,39275],{"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,39275],{"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,32433],{"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,31609],{"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,32433],{"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,28367],{},"没有返回值的函数默认返回 ",[89,162758,95667],{},[49,162760,162761],{},"局部变量不能在函数外部访问。",[49,162763,162764,162765,162767],{},"不要滥用 ",[89,162766,161801],{},"，更好的方式是让函数返回新值。",[38,162769,162770,162771,162773],{},"例如不用 ",[89,162772,161801],{}," 改写存款：",[83,162775,162777],{"className":30360,"code":162776,"language":30362,"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,31929],{"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,30397],{"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":23357},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162898,"title":162899,"body":162900,"description":23357,"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,25753],{},[249,162924,162925],{},"是否有序",[249,162927,162928],{},"是否可变",[249,162930,162931],{},"是否允许重复",[249,162933,27474],{},[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":30360,"code":163031,"language":30362,"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,52208],{"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,33228],{"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,52208],{"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,33228],{"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,52208],{"class":102},[92,163089,149863],{"class":207},[92,163091,12415],{"class":102},[92,163093,753],{"class":151},[92,163095,12415],{"class":102},[92,163097,31458],{"class":151},[92,163099,33228],{"class":102},[92,163101,163102,163105,163107],{"class":94,"line":1173},[92,163103,163104],{"class":102},"empty ",[92,163106,148],{"class":98},[92,163108,51820],{"class":102},[38,163110,163111],{},"推荐一个列表中保存同类数据，代码更清晰。",[33,163113,163115],{"id":163114},"_63-列表索引","6.3 列表索引",[38,163117,163118],{},"正向索引从 0 开始：",[83,163120,163122],{"className":30360,"code":163121,"language":30362,"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,52208],{"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,33228],{"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,30397],{"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,30397],{"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,30397],{"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":30360,"code":163184,"language":30362,"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,30397],{"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,30397],{"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":30360,"code":163223,"language":30362,"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,30397],{"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":30360,"code":163242,"language":30362,"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,52208],{"class":102},[92,163254,149863],{"class":207},[92,163256,12415],{"class":102},[92,163258,150911],{"class":207},[92,163260,33228],{"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,30397],{"class":151},[92,163311,163312],{"class":102},"(names)\n",[38,163314,163315],{},"删除元素：",[83,163317,163319],{"className":30360,"code":163318,"language":30362,"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,33228],{"class":102},[92,163367,163368],{"class":94,"line":1179},[92,163369,163370],{"class":102},"names.clear()\n",[38,163372,163373],{},"查询和统计：",[83,163375,163377],{"className":30360,"code":163376,"language":30362,"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,52208],{"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,33228],{"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,30397],{"class":151},[92,163416,163417],{"class":102},"(numbers.index(",[92,163419,174],{"class":151},[92,163421,30479],{"class":102},[92,163423,163424,163426,163429,163431],{"class":94,"line":1173},[92,163425,30397],{"class":151},[92,163427,163428],{"class":102},"(numbers.count(",[92,163430,180],{"class":151},[92,163432,30479],{"class":102},[92,163434,163435,163437,163439,163441],{"class":94,"line":1179},[92,163436,30397],{"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":30360,"code":163449,"language":30362,"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,52208],{"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,33228],{"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,30397],{"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,31458],{"class":151},[92,163509,109],{"class":102},[92,163511,163512,163514],{"class":94,"line":1199},[92,163513,30397],{"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,30397],{"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":30360,"code":163543,"language":30362,"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,52208],{"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,33228],{"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,30397],{"class":151},[92,163591,163491],{"class":102},[92,163593,163594,163596],{"class":94,"line":1179},[92,163595,30397],{"class":151},[92,163597,163598],{"class":102},"(new_numbers)\n",[33,163600,163602],{"id":163601},"_65-列表遍历","6.5 列表遍历",[83,163604,163606],{"className":30360,"code":163605,"language":30362,"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,52208],{"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,33228],{"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,26025],{"class":98},[92,163641,160396],{"class":102},[92,163643,163644,163646],{"class":94,"line":1173},[92,163645,31281],{"class":151},[92,163647,150635],{"class":102},[38,163649,163650],{},"需要索引时：",[83,163652,163654],{"className":30360,"code":163653,"language":30362,"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,26025],{"class":98},[92,163666,31588],{"class":151},[92,163668,163669],{"class":102},"(names):\n",[92,163671,163672,163674],{"class":94,"line":11},[92,163673,31281],{"class":151},[92,163675,163676],{"class":102},"(index, name)\n",[38,163678,163679],{},"统计总分：",[83,163681,163683],{"className":30360,"code":163682,"language":30362,"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,52208],{"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,33228],{"class":102},[92,163711,163712,163714,163716],{"class":94,"line":11},[92,163713,157235],{"class":102},[92,163715,148],{"class":98},[92,163717,47315],{"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,26025],{"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,30397],{"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":30360,"code":163795,"language":30362,"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,116295],{"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,69251],{"class":207},[92,163834,109],{"class":102},[38,163836,163837],{},"单元素元组必须加逗号：",[83,163839,163841],{"className":30360,"code":163840,"language":30362,"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,30397],{"class":151},[92,163879,103],{"class":102},[92,163881,103088],{"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,30397],{"class":151},[92,163893,103],{"class":102},[92,163895,103088],{"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":30360,"code":163914,"language":30362,"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,30397],{"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,30397],{"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,26025],{"class":98},[92,163965,163966],{"class":102}," text:\n",[92,163968,163969,163971],{"class":94,"line":1199},[92,163970,31281],{"class":151},[92,163972,159678],{"class":102},[38,163974,163975],{},"字符串不可变：",[83,163977,163979],{"className":30360,"code":163978,"language":30362,"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":30360,"code":164011,"language":30362,"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,45548],{"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,30397],{"class":151},[92,164045,164046],{"class":102},"(text)\n",[33,164048,164050],{"id":164049},"_68-切片","6.8 切片",[38,164052,164053],{},"切片用于从序列中取一部分。",[83,164055,164057],{"className":30360,"code":164056,"language":30362,"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":30360,"code":164068,"language":30362,"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,52208],{"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,33228],{"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,30397],{"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,30397],{"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,30397],{"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,30397],{"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,30397],{"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":30360,"code":164195,"language":30362,"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,30397],{"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,30397],{"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":30360,"code":164254,"language":30362,"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,30397],{"class":151},[92,164290,164291],{"class":102},"(nums)\n",[38,164293,164294],{},"创建空集合：",[83,164296,164298],{"className":30360,"code":164297,"language":30362,"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,119703],{"class":151},[92,164309,1955],{"class":102},[38,164311,9005,164312,164314],{},[89,164313,32441],{}," 是空字典，不是空集合。",[38,164316,164317],{},"集合常用操作：",[83,164319,164321],{"className":30360,"code":164320,"language":30362,"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,30397],{"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":30360,"code":164390,"language":30362,"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,30397],{"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,30397],{"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,30397],{"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":30360,"code":164487,"language":30362,"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,51419],{"class":102},[92,164505,149863],{"class":207},[92,164507,31448],{"class":102},[92,164509,164510,164513,164515,164517],{"class":94,"line":1158},[92,164511,164512],{"class":207},"    \"age\"",[92,164514,51419],{"class":102},[92,164516,753],{"class":151},[92,164518,31448],{"class":102},[92,164520,164521,164524,164526],{"class":94,"line":1173},[92,164522,164523],{"class":207},"    \"score\"",[92,164525,51419],{"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":30360,"code":164538,"language":30362,"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,30397],{"class":151},[92,164546,164547],{"class":102},"(student[",[92,164549,62661],{"class":207},[92,164551,4636],{"class":102},[92,164553,164554,164556,164559,164561],{"class":94,"line":11},[92,164555,30397],{"class":151},[92,164557,164558],{"class":102},"(student.get(",[92,164560,62661],{"class":207},[92,164562,30479],{"class":102},[38,164564,15368],{},[83,164566,164568],{"className":30360,"code":164567,"language":30362,"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":30360,"code":164600,"language":30362,"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,30397],{"class":151},[92,164608,164558],{"class":102},[92,164610,164576],{"class":207},[92,164612,12415],{"class":102},[92,164614,164615],{"class":207},"\"未知\"",[92,164617,30479],{"class":102},[38,164619,164620],{},"新增和修改：",[83,164622,164624],{"className":30360,"code":164623,"language":30362,"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,69106],{"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":30360,"code":164657,"language":30362,"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,69106],{"class":207},[92,164682,33228],{"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":30360,"code":164697,"language":30362,"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,26025],{"class":98},[92,164710,164711],{"class":102}," student:\n",[92,164713,164714,164716],{"class":94,"line":11},[92,164715,31281],{"class":151},[92,164717,164718],{"class":102},"(key, student[key])\n",[38,164720,164721],{},"遍历 value：",[83,164723,164725],{"className":30360,"code":164724,"language":30362,"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,26025],{"class":98},[92,164737,164738],{"class":102}," student.values():\n",[92,164740,164741,164743],{"class":94,"line":11},[92,164742,31281],{"class":151},[92,164744,164745],{"class":102},"(value)\n",[38,164747,164748],{},"遍历 key 和 value：",[83,164750,164752],{"className":30360,"code":164751,"language":30362,"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,26025],{"class":98},[92,164764,164765],{"class":102}," student.items():\n",[92,164767,164768,164770],{"class":94,"line":11},[92,164769,31281],{"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":30360,"code":164782,"language":30362,"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,55429],{"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,62661],{"class":207},[92,164800,51419],{"class":102},[92,164802,149863],{"class":207},[92,164804,12415],{"class":102},[92,164806,69106],{"class":207},[92,164808,51419],{"class":102},[92,164810,753],{"class":151},[92,164812,12415],{"class":102},[92,164814,151447],{"class":207},[92,164816,51419],{"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,62661],{"class":207},[92,164828,51419],{"class":102},[92,164830,150911],{"class":207},[92,164832,12415],{"class":102},[92,164834,69106],{"class":207},[92,164836,51419],{"class":102},[92,164838,728],{"class":151},[92,164840,12415],{"class":102},[92,164842,151447],{"class":207},[92,164844,51419],{"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,62661],{"class":207},[92,164856,51419],{"class":102},[92,164858,159706],{"class":207},[92,164860,12415],{"class":102},[92,164862,69106],{"class":207},[92,164864,51419],{"class":102},[92,164866,778],{"class":151},[92,164868,12415],{"class":102},[92,164870,151447],{"class":207},[92,164872,51419],{"class":102},[92,164874,509],{"class":151},[92,164876,4909],{"class":102},[92,164878,164879],{"class":94,"line":1179},[92,164880,33228],{"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,26025],{"class":98},[92,164894,152117],{"class":102},[92,164896,164897,164899,164901,164903,164906,164908],{"class":94,"line":1290},[92,164898,31281],{"class":151},[92,164900,164547],{"class":102},[92,164902,62661],{"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":30360,"code":164915,"language":30362,"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,47315],{"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,26025],{"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,33228],{"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,30397],{"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":30360,"code":164998,"language":30362,"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,111559],{"class":102},[92,165006,148],{"class":98},[92,165008,60587],{"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,26025],{"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,62661],{"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,32433],{"class":151},[92,165049,150017],{"class":102},[92,165051,165052],{"class":94,"line":1193},[92,165053,31609],{"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,31281],{"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":30360,"code":165080,"language":30362,"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,62661],{"class":207},[92,165122,51419],{"class":102},[92,165124,149863],{"class":207},[92,165126,165127],{"class":102},"})\n",[38,165129,165130],{},"最大最小：",[83,165132,165134],{"className":30360,"code":165133,"language":30362,"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":30360,"code":165178,"language":30362,"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":30360,"code":165204,"language":30362,"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":30360,"code":165231,"language":30362,"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":30360,"code":165289,"language":30362,"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,30397],{"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,30397],{"class":151},[92,165314,103],{"class":102},[92,165316,320],{"class":151},[92,165318,165303],{"class":98},[92,165320,52208],{"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,30397],{"class":151},[92,165338,103],{"class":102},[92,165340,62661],{"class":207},[92,165342,165303],{"class":98},[92,165344,4427],{"class":102},[92,165346,62661],{"class":207},[92,165348,51419],{"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":30360,"code":165365,"language":30362,"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,26025],{"class":98},[92,165384,32425],{"class":151},[92,165386,103],{"class":102},[92,165388,320],{"class":151},[92,165390,12415],{"class":102},[92,165392,447],{"class":151},[92,165394,97281],{"class":102},[92,165396,165397,165399],{"class":94,"line":11},[92,165398,30397],{"class":151},[92,165400,164291],{"class":102},[38,165402,165403],{},"带条件：",[83,165405,165407],{"className":30360,"code":165406,"language":30362,"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,26025],{"class":98},[92,165425,32425],{"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,101540],{"class":98},[92,165447,4072],{"class":151},[92,165449,33228],{"class":102},[92,165451,165452,165454],{"class":94,"line":11},[92,165453,30397],{"class":151},[92,165455,165456],{"class":102},"(even_nums)\n",[38,165458,165459],{},"字典推导式：",[83,165461,165463],{"className":30360,"code":165462,"language":30362,"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,26025],{"class":98},[92,165487,32425],{"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,30397],{"class":151},[92,165504,165505],{"class":102},"(squares)\n",[38,165507,165508],{},"集合推导式：",[83,165510,165512],{"className":30360,"code":165511,"language":30362,"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,26025],{"class":98},[92,165531,165532],{"class":207}," \"hello\"",[92,165534,1544],{"class":102},[92,165536,165537,165539],{"class":94,"line":11},[92,165538,30397],{"class":151},[92,165540,165541],{"class":102},"(chars)\n",[38,165543,165544],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[33,165546,165548],{"id":165547},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[83,165550,165552],{"className":30360,"code":165551,"language":30362,"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,55429],{"class":102},[92,165563,165564,165566,165568,165570,165572,165574,165576,165578,165580],{"class":94,"line":11},[92,165565,148360],{"class":102},[92,165567,62661],{"class":207},[92,165569,51419],{"class":102},[92,165571,149863],{"class":207},[92,165573,12415],{"class":102},[92,165575,151447],{"class":207},[92,165577,51419],{"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,62661],{"class":207},[92,165589,51419],{"class":102},[92,165591,150911],{"class":207},[92,165593,12415],{"class":102},[92,165595,151447],{"class":207},[92,165597,51419],{"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,62661],{"class":207},[92,165609,51419],{"class":102},[92,165611,159706],{"class":207},[92,165613,12415],{"class":102},[92,165615,151447],{"class":207},[92,165617,51419],{"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,62661],{"class":207},[92,165629,51419],{"class":102},[92,165631,163285],{"class":207},[92,165633,12415],{"class":102},[92,165635,151447],{"class":207},[92,165637,51419],{"class":102},[92,165639,985],{"class":151},[92,165641,4909],{"class":102},[92,165643,165644],{"class":94,"line":1193},[92,165645,33228],{"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,47315],{"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,33228],{"class":102},[92,165673,165674,165677,165679],{"class":94,"line":1308},[92,165675,165676],{"class":102},"passed ",[92,165678,148],{"class":98},[92,165680,51820],{"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,26025],{"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,33228],{"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,30397],{"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,30397],{"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,30397],{"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,28367],{},"空集合要用 ",[89,165887,165888],{},"set()",[49,165890,104347,165891,165894,165895,28367],{},[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165950,"title":165951,"body":165952,"description":23357,"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":30360,"code":165966,"language":30362,"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,31929],{"class":98},[92,165974,165975],{"class":1942}," get_info",[92,165977,31935],{"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,30397],{"class":151},[92,166032,76567],{"class":102},[92,166034,166035,166037,166039,166041],{"class":94,"line":1308},[92,166036,30397],{"class":151},[92,166038,103],{"class":102},[92,166040,103088],{"class":151},[92,166042,166043],{"class":102},"(result))\n",[38,166045,166046],{},"可以直接解包：",[83,166048,166050],{"className":30360,"code":166049,"language":30362,"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,30397],{"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":30360,"code":166080,"language":30362,"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,31929],{"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,31281],{"class":151},[92,166096,103],{"class":102},[92,166098,155],{"class":98},[92,166100,149361],{"class":207},[92,166102,999],{"class":151},[92,166104,79792],{"class":102},[92,166106,1049],{"class":151},[92,166108,149370],{"class":207},[92,166110,999],{"class":151},[92,166112,70203],{"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":30360,"code":166145,"language":30362,"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":30360,"code":166169,"language":30362,"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,79792],{"class":5196},[92,166179,148],{"class":98},[92,166181,149863],{"class":207},[92,166183,12415],{"class":102},[92,166185,70203],{"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,70203],{"class":5196},[92,166199,148],{"class":98},[92,166201,753],{"class":151},[92,166203,12415],{"class":102},[92,166205,79792],{"class":5196},[92,166207,148],{"class":98},[92,166209,149863],{"class":207},[92,166211,109],{"class":102},[38,166213,117915],{},[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":30360,"code":166231,"language":30362,"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,31929],{"class":98},[92,166239,122074],{"class":1942},[92,166241,166242],{"class":102},"(host, port",[92,166244,148],{"class":98},[92,166246,166247],{"class":151},"3306",[92,166249,30768],{"class":102},[92,166251,166252,166254,166256,166258,166261,166263,166265,166267,166269,166271,166274,166276,166278],{"class":94,"line":11},[92,166253,31281],{"class":151},[92,166255,103],{"class":102},[92,166257,155],{"class":98},[92,166259,166260],{"class":207},"\"连接",[92,166262,999],{"class":151},[92,166264,27377],{"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":30360,"code":166319,"language":30362,"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,31929],{"class":98},[92,166327,122074],{"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":30360,"code":166347,"language":30362,"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,31929],{"class":98},[92,166355,122074],{"class":1942},[92,166357,166242],{"class":102},[92,166359,148],{"class":98},[92,166361,166247],{"class":151},[92,166363,30768],{"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":30360,"code":166379,"language":30362,"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,31929],{"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,30397],{"class":151},[92,166422,166423],{"class":102},"(add_item(",[92,166425,165300],{"class":207},[92,166427,30479],{"class":102},[92,166429,166430,166432,166434,166437],{"class":94,"line":1199},[92,166431,30397],{"class":151},[92,166433,166423],{"class":102},[92,166435,166436],{"class":207},"\"b\"",[92,166438,30479],{"class":102},[38,166440,166441],{},"第二次调用会复用第一次的列表。",[38,166443,155863],{},[83,166445,166447],{"className":30360,"code":166446,"language":30362,"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,31929],{"class":98},[92,166454,166388],{"class":1942},[92,166456,166391],{"class":102},[92,166458,148],{"class":98},[92,166460,95667],{"class":151},[92,166462,30768],{"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,38909],{"class":98},[92,166473,38915],{"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,51820],{"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":30360,"code":166511,"language":30362,"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,31929],{"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,47315],{"class":151},[92,166536,166537,166539,166541,166543],{"class":94,"line":1158},[92,166538,3180],{"class":98},[92,166540,156155],{"class":102},[92,166542,26025],{"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,30397],{"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,30479],{"class":102},[92,166589,166590,166592,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612],{"class":94,"line":1296},[92,166591,30397],{"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,30479],{"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":30360,"code":166626,"language":30362,"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,31929],{"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,26025],{"class":98},[92,166651,166652],{"class":102}," kwargs.items():\n",[92,166654,166655,166657],{"class":94,"line":1158},[92,166656,32433],{"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,79792],{"class":5196},[92,166674,148],{"class":98},[92,166676,149863],{"class":207},[92,166678,12415],{"class":102},[92,166680,70203],{"class":5196},[92,166682,148],{"class":98},[92,166684,753],{"class":151},[92,166686,12415],{"class":102},[92,166688,70254],{"class":5196},[92,166690,148],{"class":98},[92,166692,69251],{"class":207},[92,166694,109],{"class":102},[33,166696,166698],{"id":166697},"_77-参数解包","7.7 参数解包",[38,166700,166701],{},"列表或元组解包为位置参数：",[83,166703,166705],{"className":30360,"code":166704,"language":30362,"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,31929],{"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,52208],{"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,33228],{"class":102},[92,166760,166761,166763,166765,166767],{"class":94,"line":1193},[92,166762,30397],{"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":30360,"code":166775,"language":30362,"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,31929],{"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,31281],{"class":151},[92,166791,103],{"class":102},[92,166793,155],{"class":98},[92,166795,354],{"class":207},[92,166797,999],{"class":151},[92,166799,79792],{"class":102},[92,166801,1049],{"class":151},[92,166803,4427],{"class":151},[92,166805,70203],{"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,116295],{"class":102},[92,166825,148],{"class":98},[92,166827,4427],{"class":102},[92,166829,62661],{"class":207},[92,166831,51419],{"class":102},[92,166833,149863],{"class":207},[92,166835,12415],{"class":102},[92,166837,69106],{"class":207},[92,166839,51419],{"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":30360,"code":166865,"language":30362,"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,30397],{"class":151},[92,166890,166575],{"class":102},[92,166892,320],{"class":151},[92,166894,12415],{"class":102},[92,166896,180],{"class":151},[92,166898,30479],{"class":102},[38,166900,166901],{},"常和排序、过滤等函数一起使用。",[38,166903,166904],{},"按分数排序：",[83,166906,166908],{"className":30360,"code":166907,"language":30362,"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,55429],{"class":102},[92,166919,166920,166922,166924,166926,166928,166930,166932,166934,166936],{"class":94,"line":11},[92,166921,148360],{"class":102},[92,166923,62661],{"class":207},[92,166925,51419],{"class":102},[92,166927,149863],{"class":207},[92,166929,12415],{"class":102},[92,166931,151447],{"class":207},[92,166933,51419],{"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,62661],{"class":207},[92,166945,51419],{"class":102},[92,166947,150911],{"class":207},[92,166949,12415],{"class":102},[92,166951,151447],{"class":207},[92,166953,51419],{"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,62661],{"class":207},[92,166965,51419],{"class":102},[92,166967,159706],{"class":207},[92,166969,12415],{"class":102},[92,166971,151447],{"class":207},[92,166973,51419],{"class":102},[92,166975,509],{"class":151},[92,166977,4909],{"class":102},[92,166979,166980],{"class":94,"line":1179},[92,166981,33228],{"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,112183],{"class":102},[92,167002,163503],{"class":5196},[92,167004,148],{"class":98},[92,167006,31458],{"class":151},[92,167008,109],{"class":102},[92,167010,167011,167013],{"class":94,"line":1290},[92,167012,30397],{"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":30360,"code":167030,"language":30362,"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,31929],{"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,31929],{"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,30397],{"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,74026],{}," 对每个元素执行函数。",[83,167117,167119],{"className":30360,"code":167118,"language":30362,"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,52208],{"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,33228],{"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,30397],{"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,80033],{}," 保留满足条件的元素。",[83,167188,167190],{"className":30360,"code":167189,"language":30362,"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,52208],{"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,33228],{"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,101540],{"class":98},[92,167242,4072],{"class":151},[92,167244,167167],{"class":102},[92,167246,167247,167249,167251,167253],{"class":94,"line":1158},[92,167248,30397],{"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":30360,"code":167266,"language":30362,"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,55429],{"class":102},[92,167278,167279,167281,167283,167285,167287,167289,167291,167293,167295],{"class":94,"line":11},[92,167280,148360],{"class":102},[92,167282,62661],{"class":207},[92,167284,51419],{"class":102},[92,167286,149863],{"class":207},[92,167288,12415],{"class":102},[92,167290,151447],{"class":207},[92,167292,51419],{"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,62661],{"class":207},[92,167304,51419],{"class":102},[92,167306,150911],{"class":207},[92,167308,12415],{"class":102},[92,167310,151447],{"class":207},[92,167312,51419],{"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,62661],{"class":207},[92,167324,51419],{"class":102},[92,167326,159706],{"class":207},[92,167328,12415],{"class":102},[92,167330,151447],{"class":207},[92,167332,51419],{"class":102},[92,167334,509],{"class":151},[92,167336,4909],{"class":102},[92,167338,167339],{"class":94,"line":1179},[92,167340,33228],{"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,112183],{"class":102},[92,167367,163503],{"class":5196},[92,167369,148],{"class":98},[92,167371,31458],{"class":151},[92,167373,109],{"class":102},[92,167375,167376,167378],{"class":94,"line":1290},[92,167377,30397],{"class":151},[92,167379,76567],{"class":102},[33,167381,167383],{"id":167382},"_711-闭包入门","7.11 闭包入门",[38,167385,167386],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[83,167388,167390],{"className":30360,"code":167389,"language":30362,"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,31929],{"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,30783],{"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,30397],{"class":151},[92,167461,167462],{"class":102},"(add_10(",[92,167464,422],{"class":151},[92,167466,30479],{"class":102},[38,167468,167469],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[33,167471,167473],{"id":167472},"_712-装饰器入门","7.12 装饰器入门",[38,167475,167476],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[83,167478,167480],{"className":30360,"code":167479,"language":30362,"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,31929],{"class":98},[92,167487,87173],{"class":1942},[92,167489,167490],{"class":102},"(func):\n",[92,167492,167493,167495,167498],{"class":94,"line":11},[92,167494,30783],{"class":98},[92,167496,167497],{"class":1942}," wrapper",[92,167499,31935],{"class":102},[92,167501,167502,167504,167506,167509],{"class":94,"line":1158},[92,167503,32433],{"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,32433],{"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,31929],{"class":98},[92,167556,160971],{"class":1942},[92,167558,31935],{"class":102},[92,167560,167561,167563,167565,167567],{"class":94,"line":1596},[92,167562,31281],{"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":30360,"code":167585,"language":30362,"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":30360,"code":167607,"language":30362,"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,31929],{"class":98},[92,167615,87173],{"class":1942},[92,167617,167490],{"class":102},[92,167619,167620,167622,167624,167626,167628,167631,167633],{"class":94,"line":11},[92,167621,30783],{"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,32433],{"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,32433],{"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,31929],{"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,30397],{"class":151},[92,167734,166575],{"class":102},[92,167736,549],{"class":151},[92,167738,12415],{"class":102},[92,167740,803],{"class":151},[92,167742,30479],{"class":102},[38,167744,167745,167746,100999,167748,167750],{},"这个写法使用 ",[89,167747,166507],{},[89,167749,166622],{}," 接收原函数的所有参数。",[33,167752,167754],{"id":167753},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[38,167756,123273],{},[46,167758,167759,167762,167765],{},[49,167760,167761],{},"给定一组学生数据。",[49,167763,167764],{},"封装函数，根据传入规则筛选学生。",[49,167766,167767],{},"筛选及格、优秀、未成年学生。",[38,167769,10015],{},[83,167771,167773],{"className":30360,"code":167772,"language":30362,"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,55429],{"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,62661],{"class":207},[92,167790,51419],{"class":102},[92,167792,149863],{"class":207},[92,167794,12415],{"class":102},[92,167796,69106],{"class":207},[92,167798,51419],{"class":102},[92,167800,753],{"class":151},[92,167802,12415],{"class":102},[92,167804,151447],{"class":207},[92,167806,51419],{"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,62661],{"class":207},[92,167818,51419],{"class":102},[92,167820,150911],{"class":207},[92,167822,12415],{"class":102},[92,167824,69106],{"class":207},[92,167826,51419],{"class":102},[92,167828,728],{"class":151},[92,167830,12415],{"class":102},[92,167832,151447],{"class":207},[92,167834,51419],{"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,62661],{"class":207},[92,167846,51419],{"class":102},[92,167848,159706],{"class":207},[92,167850,12415],{"class":102},[92,167852,69106],{"class":207},[92,167854,51419],{"class":102},[92,167856,778],{"class":151},[92,167858,12415],{"class":102},[92,167860,151447],{"class":207},[92,167862,51419],{"class":102},[92,167864,985],{"class":151},[92,167866,4909],{"class":102},[92,167868,167869],{"class":94,"line":1179},[92,167870,33228],{"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,31929],{"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,51820],{"class":102},[92,167898,167899,167901,167903,167905],{"class":94,"line":1308},[92,167900,3180],{"class":98},[92,167902,152112],{"class":102},[92,167904,26025],{"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,69106],{"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,30397],{"class":151},[92,168012,168013],{"class":102},"(passed)\n",[92,168015,168016,168018],{"class":94,"line":1677},[92,168017,30397],{"class":151},[92,168019,168020],{"class":102},"(excellent)\n",[92,168022,168023,168025],{"class":94,"line":1706},[92,168024,30397],{"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,100999,168054,168056,168057,168060],{},[89,168053,74026],{},[89,168055,80033],{}," 的结果是迭代器，常用 ",[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,104347,168085,168087],{},[89,168086,166861],{}," 对学生列表按年龄排序。",[49,168089,104347,168090,168092],{},[89,168091,80033],{}," 找出成绩不及格的学生。",[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":23357},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168130,"title":168131,"body":168132,"description":23357,"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":30360,"code":168191,"language":30362,"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,86897],{"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":30360,"code":168225,"language":30362,"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,86897],{"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,86897],{"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":30360,"code":168279,"language":30362,"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":30360,"code":168297,"language":30362,"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":47959},"D:",[92,168314,168315],{"class":151},"\\d",[92,168317,168318],{"class":47959},"ata",[92,168320,168315],{"class":151},[92,168322,168318],{"class":47959},[92,168324,661],{"class":151},[92,168326,168327],{"class":47959},"txt",[92,168329,25115],{"class":207},[33,168331,168333],{"id":168332},"_83-open函数","8.3 open函数",[38,168335,5161],{},[83,168337,168339],{"className":30360,"code":168338,"language":30362,"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,45336],{"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,25851],{},[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":30360,"code":168436,"language":30362,"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,45336],{"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,30397],{"class":151},[92,168482,168483],{"class":102},"(content)\n",[92,168485,168486,168488],{"class":94,"line":1173},[92,168487,45336],{"class":5196},[92,168489,168490],{"class":102},".close()\n",[38,168492,168493],{},"可以指定读取字符数：",[83,168495,168497],{"className":30360,"code":168496,"language":30362,"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":30360,"code":168523,"language":30362,"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,45336],{"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,30397],{"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,45336],{"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":30360,"code":168593,"language":30362,"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,45336],{"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,30397],{"class":151},[92,168639,168640],{"class":102},"(lines)\n",[92,168642,168643,168645],{"class":94,"line":1173},[92,168644,45336],{"class":5196},[92,168646,168490],{"class":102},[38,168648,168649,168650,168653],{},"每一行通常带有换行符，可以用 ",[89,168651,168652],{},"strip()"," 去掉：",[83,168655,168657],{"className":30360,"code":168656,"language":30362,"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,26025],{"class":98},[92,168669,168670],{"class":102}," lines:\n",[92,168672,168673,168675],{"class":94,"line":11},[92,168674,31281],{"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":30360,"code":168687,"language":30362,"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,45336],{"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,26025],{"class":98},[92,168729,148128],{"class":5196},[92,168731,3718],{"class":102},[92,168733,168734,168736],{"class":94,"line":1173},[92,168735,31281],{"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,45336],{"class":5196},[92,168747,168490],{"class":102},[33,168749,168751],{"id":168750},"_85-with语句","8.5 with语句",[38,168753,168754,168756],{},[89,168755,107814],{}," 会自动关闭文件，推荐使用。",[83,168758,168760],{"className":30360,"code":168759,"language":30362,"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,107814],{"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,31365],{"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,31281],{"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":30360,"code":168822,"language":30362,"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,107814],{"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,31365],{"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":30360,"code":168892,"language":30362,"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,52208],{"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,33228],{"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,107814],{"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,31365],{"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":30360,"code":168983,"language":30362,"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,107814],{"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,31365],{"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":30360,"code":169058,"language":30362,"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,107814],{"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,31365],{"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":30360,"code":169107,"language":30362,"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,107814],{"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,31365],{"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":30360,"code":169163,"language":30362,"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,30719],{"class":98},[92,169171,108292],{"class":102},[92,169173,30374],{"class":98},[92,169175,108297],{"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,108526],{"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,30397],{"class":151},[92,169203,169204],{"class":102},"(path)\n",[38,169206,169207],{},"创建目录：",[83,169209,169211],{"className":30360,"code":169210,"language":30362,"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,30719],{"class":98},[92,169218,108292],{"class":102},[92,169220,30374],{"class":98},[92,169222,108297],{"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,108526],{"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,31458],{"class":151},[92,169253,109],{"class":102},[38,169255,169256],{},"判断文件是否存在：",[83,169258,169260],{"className":30360,"code":169259,"language":30362,"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,108526],{"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,31281],{"class":151},[92,169291,103],{"class":102},[92,169293,169294],{"class":207},"\"文件存在\"",[92,169296,109],{"class":102},[38,169298,169299],{},"读写文本：",[83,169301,169303],{"className":30360,"code":169302,"language":30362,"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,108526],{"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,30397],{"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":30360,"code":169370,"language":30362,"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,30374],{"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,51419],{"class":102},[92,169398,149863],{"class":207},[92,169400,31448],{"class":102},[92,169402,169403,169405,169407,169409],{"class":94,"line":1179},[92,169404,164512],{"class":207},[92,169406,51419],{"class":102},[92,169408,753],{"class":151},[92,169410,31448],{"class":102},[92,169412,169413,169415,169417],{"class":94,"line":1193},[92,169414,164523],{"class":207},[92,169416,51419],{"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,33969],{"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,30397],{"class":151},[92,169457,164046],{"class":102},[38,169459,169460],{},"写入 JSON 文件：",[83,169462,169464],{"className":30360,"code":169463,"language":30362,"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,30374],{"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,55429],{"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,62661],{"class":207},[92,169491,51419],{"class":102},[92,169493,149863],{"class":207},[92,169495,12415],{"class":102},[92,169497,69106],{"class":207},[92,169499,51419],{"class":102},[92,169501,753],{"class":151},[92,169503,12415],{"class":102},[92,169505,151447],{"class":207},[92,169507,51419],{"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,62661],{"class":207},[92,169519,51419],{"class":102},[92,169521,150911],{"class":207},[92,169523,12415],{"class":102},[92,169525,69106],{"class":207},[92,169527,51419],{"class":102},[92,169529,728],{"class":151},[92,169531,12415],{"class":102},[92,169533,151447],{"class":207},[92,169535,51419],{"class":102},[92,169537,914],{"class":151},[92,169539,4909],{"class":102},[92,169541,169542],{"class":94,"line":1193},[92,169543,33228],{"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,107814],{"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,31365],{"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,45336],{"class":5196},[92,169586,12415],{"class":102},[92,169588,147112],{"class":5196},[92,169590,148],{"class":98},[92,169592,33969],{"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":30360,"code":169608,"language":30362,"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,30374],{"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,107814],{"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,31365],{"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,45336],{"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,30397],{"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":30360,"code":169685,"language":30362,"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,30374],{"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,55429],{"class":102},[92,169708,169709,169712,169714,169716,169718,169720,169723],{"class":94,"line":1173},[92,169710,169711],{"class":102},"    [",[92,169713,73081],{"class":207},[92,169715,12415],{"class":102},[92,169717,73114],{"class":207},[92,169719,12415],{"class":102},[92,169721,169722],{"class":207},"\"成绩\"",[92,169724,87818],{"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,87818],{"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,87818],{"class":102},[92,169758,169759],{"class":94,"line":1199},[92,169760,33228],{"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,107814],{"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,31365],{"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,45336],{"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":30360,"code":169829,"language":30362,"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,30374],{"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,107814],{"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,31365],{"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,45336],{"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,26025],{"class":98},[92,169896,169897],{"class":102}," reader:\n",[92,169899,169900,169902],{"class":94,"line":1193},[92,169901,32433],{"class":151},[92,169903,169904],{"class":102},"(row)\n",[38,169906,169907],{},"使用字典写入：",[83,169909,169911],{"className":30360,"code":169910,"language":30362,"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,30374],{"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,55429],{"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,62661],{"class":207},[92,169938,51419],{"class":102},[92,169940,149863],{"class":207},[92,169942,12415],{"class":102},[92,169944,69106],{"class":207},[92,169946,51419],{"class":102},[92,169948,753],{"class":151},[92,169950,12415],{"class":102},[92,169952,151447],{"class":207},[92,169954,51419],{"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,62661],{"class":207},[92,169966,51419],{"class":102},[92,169968,150911],{"class":207},[92,169970,12415],{"class":102},[92,169972,69106],{"class":207},[92,169974,51419],{"class":102},[92,169976,728],{"class":151},[92,169978,12415],{"class":102},[92,169980,151447],{"class":207},[92,169982,51419],{"class":102},[92,169984,914],{"class":151},[92,169986,4909],{"class":102},[92,169988,169989],{"class":94,"line":1193},[92,169990,33228],{"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,107814],{"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,31365],{"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,52208],{"class":102},[92,170043,62661],{"class":207},[92,170045,12415],{"class":102},[92,170047,69106],{"class":207},[92,170049,12415],{"class":102},[92,170051,151447],{"class":207},[92,170053,33228],{"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,45336],{"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,123273],{},[46,170091,170092,170095,170098],{},[49,170093,170094],{},"读取文本文件。",[49,170096,170097],{},"统计每个单词出现次数。",[49,170099,170100],{},"输出出现次数最多的前 10 个单词。",[38,170102,10015],{},[83,170104,170106],{"className":30360,"code":170105,"language":30362,"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,30719],{"class":98},[92,170113,108292],{"class":102},[92,170115,30374],{"class":98},[92,170117,108297],{"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,108526],{"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,87850],{"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,26025],{"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,38912],{"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,55681],{"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,112183],{"class":102},[92,170268,163503],{"class":5196},[92,170270,148],{"class":98},[92,170272,31458],{"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,26025],{"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,31281],{"class":151},[92,170300,170301],{"class":102},"(word, count)\n",[33,170303,170305],{"id":170304},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[83,170307,170309],{"className":30360,"code":170308,"language":30362,"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,30374],{"class":98},[92,170316,147066],{"class":102},[92,170318,170319,170321,170323,170325],{"class":94,"line":11},[92,170320,30719],{"class":98},[92,170322,108292],{"class":102},[92,170324,30374],{"class":98},[92,170326,108297],{"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,108526],{"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,31929],{"class":98},[92,170356,151823],{"class":1942},[92,170358,31935],{"class":102},[92,170360,170361,170363,170365,170367],{"class":94,"line":1290},[92,170362,3080],{"class":98},[92,170364,38912],{"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,51820],{"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,34160],{"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,31365],{"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,45336],{"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,31929],{"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,34160],{"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,31365],{"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,45336],{"class":5196},[92,170472,12415],{"class":102},[92,170474,147112],{"class":5196},[92,170476,148],{"class":98},[92,170478,33969],{"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,62661],{"class":207},[92,170513,51419],{"class":102},[92,170515,149863],{"class":207},[92,170517,12415],{"class":102},[92,170519,69106],{"class":207},[92,170521,51419],{"class":102},[92,170523,753],{"class":151},[92,170525,12415],{"class":102},[92,170527,151447],{"class":207},[92,170529,51419],{"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,30397],{"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,28367],{},"读写中文要指定 ",[89,170564,170565],{},"encoding=\"utf-8\"",[49,170567,170568,170569,28367],{},"打开文件后要关闭，推荐使用 ",[89,170570,107814],{},[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,104336,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":23357},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170657,"title":170658,"body":170659,"description":23357,"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,25851],{},[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":30360,"code":170770,"language":30362,"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,28367],{},"会触发 ",[89,170791,154809],{},[33,170793,170795],{"id":170794},"_92-为什么要处理异常","9.2 为什么要处理异常",[38,170797,170798],{},"如果不处理异常，程序会直接终止。",[38,170800,170801],{},"例如用户输入年龄：",[83,170803,170805],{"className":30360,"code":170804,"language":30362,"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,53803],{"class":151},[92,170820,103],{"class":102},[92,170822,152369],{"class":207},[92,170824,30479],{"class":102},[92,170826,170827,170829],{"class":94,"line":11},[92,170828,30397],{"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":30360,"code":170850,"language":30362,"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":30360,"code":170881,"language":30362,"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,53803],{"class":151},[92,170903,103],{"class":102},[92,170905,152369],{"class":207},[92,170907,30479],{"class":102},[92,170909,170910,170912],{"class":94,"line":1158},[92,170911,31281],{"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,31281],{"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":30360,"code":170939,"language":30362,"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,53803],{"class":151},[92,170961,103],{"class":102},[92,170963,152369],{"class":207},[92,170965,30479],{"class":102},[92,170967,170968,170970],{"class":94,"line":1158},[92,170969,31281],{"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,31281],{"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":30360,"code":170996,"language":30362,"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,52208],{"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,33228],{"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,53803],{"class":151},[92,171040,103],{"class":102},[92,171042,171043],{"class":207},"\"请输入索引:\"",[92,171045,30479],{"class":102},[92,171047,171048,171050],{"class":94,"line":1173},[92,171049,31281],{"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,31281],{"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,31281],{"class":151},[92,171086,103],{"class":102},[92,171088,171089],{"class":207},"\"索引越界\"",[92,171091,109],{"class":102},[38,171093,171094],{},"多个异常使用相同处理逻辑：",[83,171096,171098],{"className":30360,"code":171097,"language":30362,"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,45575],{"class":102},[92,171111,148],{"class":98},[92,171113,2361],{"class":151},[92,171115,103],{"class":102},[92,171117,53803],{"class":151},[92,171119,103],{"class":102},[92,171121,155771],{"class":207},[92,171123,30479],{"class":102},[92,171125,171126,171128,171130,171132,171134],{"class":94,"line":1158},[92,171127,31281],{"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,30768],{"class":102},[92,171152,171153,171155,171157,171160],{"class":94,"line":1179},[92,171154,31281],{"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":30360,"code":171168,"language":30362,"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,45575],{"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,64586],{"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,31281],{"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":30360,"code":171248,"language":30362,"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,45575],{"class":102},[92,171262,148],{"class":98},[92,171264,2361],{"class":151},[92,171266,103],{"class":102},[92,171268,53803],{"class":151},[92,171270,103],{"class":102},[92,171272,155771],{"class":207},[92,171274,30479],{"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,31281],{"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,31281],{"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,31281],{"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":30360,"code":171351,"language":30362,"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,31929],{"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,103413],{"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,31281],{"class":151},[92,171393,103],{"class":102},[92,171395,155],{"class":98},[92,171397,161958],{"class":207},[92,171399,999],{"class":151},[92,171401,70203],{"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":30360,"code":171432,"language":30362,"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,64586],{"class":98},[92,171461,171201],{"class":102},[92,171463,171464,171466],{"class":94,"line":1173},[92,171465,31281],{"class":151},[92,171467,66981],{"class":102},[33,171469,171471],{"id":171470},"_98-自定义异常","9.8 自定义异常",[83,171473,171475],{"className":30360,"code":171474,"language":30362,"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,30768],{"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,31929],{"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,103413],{"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,31365],{"class":98},[92,171583,171201],{"class":102},[92,171585,171586,171588],{"class":94,"line":1607},[92,171587,31281],{"class":151},[92,171589,66981],{"class":102},[38,171591,171592],{},"入门阶段大多数情况使用内置异常即可。",[33,171594,171596],{"id":171595},"_99-traceback","9.9 traceback",[38,171598,171599],{},"调试时可以输出完整异常堆栈。",[83,171601,171603],{"className":30360,"code":171602,"language":30362,"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,30374],{"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,125964],{},"模块就是一个 ",[89,171656,146327],{},[38,171658,171659,171660,24600],{},"例如创建 ",[89,171661,171662],{},"my_math.py",[83,171664,171666],{"className":30360,"code":171665,"language":30362,"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,31929],{"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,31929],{"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":30360,"code":171718,"language":30362,"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,30374],{"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,30397],{"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,30479],{"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":30360,"code":171757,"language":30362,"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,30374],{"class":98},[92,171765,45310],{"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,30397],{"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,30479],{"class":102},[63,171786,171788],{"id":171787},"_9112-导入指定内容","9.11.2 导入指定内容",[83,171790,171792],{"className":30360,"code":171791,"language":30362,"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,30719],{"class":98},[92,171799,57778],{"class":102},[92,171801,30374],{"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,30397],{"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,30479],{"class":102},[63,171825,171827],{"id":171826},"_9113-起别名","9.11.3 起别名",[83,171829,171831],{"className":30360,"code":171830,"language":30362,"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,30374],{"class":98},[92,171838,57778],{"class":102},[92,171840,31365],{"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,30397],{"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,30479],{"class":102},[83,171864,171866],{"className":30360,"code":171865,"language":30362,"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,30719],{"class":98},[92,171873,57778],{"class":102},[92,171875,30374],{"class":98},[92,171877,171878],{"class":102}," randint ",[92,171880,31365],{"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,30397],{"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,30479],{"class":102},[63,171904,171906],{"id":171905},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[83,171908,171910],{"className":30360,"code":171909,"language":30362,"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,30719],{"class":98},[92,171917,57778],{"class":102},[92,171919,30374],{"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":30360,"code":171936,"language":30362,"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,30374],{"class":98},[92,171944,45310],{"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,30397],{"class":151},[92,171954,171776],{"class":102},[92,171956,320],{"class":151},[92,171958,12415],{"class":102},[92,171960,549],{"class":151},[92,171962,30479],{"class":102},[92,171964,171965,171967,171970,171972,171974,171976,171978,171980],{"class":94,"line":1173},[92,171966,30397],{"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,33125],{"class":102},[92,171983,171984,171986,171989,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011],{"class":94,"line":1179},[92,171985,30397],{"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,112183],{"class":102},[92,172010,180],{"class":151},[92,172012,30479],{"class":102},[63,172014,172016],{"id":172015},"_9122-time","9.12.2 time",[83,172018,172020],{"className":30360,"code":172019,"language":30362,"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,30374],{"class":98},[92,172027,31811],{"class":102},[92,172029,172030],{"class":94,"line":11},[92,172031,2379],{"emptyLinePlaceholder":17},[92,172033,172034,172036],{"class":94,"line":1158},[92,172035,30397],{"class":151},[92,172037,172038],{"class":102},"(time.time())\n",[92,172040,172041,172043,172045],{"class":94,"line":1173},[92,172042,95052],{"class":102},[92,172044,320],{"class":151},[92,172046,109],{"class":102},[92,172048,172049,172051,172053,172056],{"class":94,"line":1179},[92,172050,30397],{"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":30360,"code":172064,"language":30362,"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,30719],{"class":98},[92,172072,172073],{"class":102}," datetime ",[92,172075,30374],{"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,30397],{"class":151},[92,172098,172099],{"class":102},"(now)\n",[92,172101,172102,172104,172107,172110,172112,172115],{"class":94,"line":1179},[92,172103,30397],{"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,30479],{"class":102},[63,172118,172120],{"id":172119},"_9124-os","9.12.4 os",[83,172122,172124],{"className":30360,"code":172123,"language":30362,"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,30374],{"class":98},[92,172131,45287],{"class":102},[92,172133,172134],{"class":94,"line":11},[92,172135,2379],{"emptyLinePlaceholder":17},[92,172137,172138,172140],{"class":94,"line":1158},[92,172139,30397],{"class":151},[92,172141,172142],{"class":102},"(os.getcwd())\n",[92,172144,172145,172147,172150,172153],{"class":94,"line":1173},[92,172146,30397],{"class":151},[92,172148,172149],{"class":102},"(os.listdir(",[92,172151,172152],{"class":207},"\".\"",[92,172154,30479],{"class":102},[63,172156,172158],{"id":172157},"_9125-sys","9.12.5 sys",[83,172160,172162],{"className":30360,"code":172161,"language":30362,"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,30374],{"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,30397],{"class":151},[92,172180,172181],{"class":102},"(sys.version)\n",[92,172183,172184,172186],{"class":94,"line":1173},[92,172185,30397],{"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,79792],{}," == \"",[252,172197,102039],{},[38,172199,172200,172201,172204],{},"模块被直接运行和被导入时，",[89,172202,172203],{},"__name__"," 的值不同。",[38,172206,172207,172208,24600],{},"创建 ",[89,172209,172210],{},"my_module.py",[83,172212,172214],{"className":30360,"code":172213,"language":30362,"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,31929],{"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,31202],{"class":151},[92,172249,101540],{"class":98},[92,172251,101543],{"class":207},[92,172253,3718],{"class":102},[92,172255,172256,172258,172260,172262,172264,172266],{"class":94,"line":1193},[92,172257,31281],{"class":151},[92,172259,166575],{"class":102},[92,172261,320],{"class":151},[92,172263,12415],{"class":102},[92,172265,180],{"class":151},[92,172267,30479],{"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":30360,"code":172307,"language":30362,"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,30719],{"class":98},[92,172315,172316],{"class":102}," utils.file_utils ",[92,172318,30374],{"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,23812],{}," 安装。",[83,172338,172340],{"className":23803,"code":172339,"language":23805,"meta":10,"style":10},"pip install requests\n",[89,172341,172342],{"__ignoreMap":10},[92,172343,172344,172346,172348],{"class":94,"line":95},[92,172345,23812],{"class":1942},[92,172347,23815],{"class":207},[92,172349,146073],{"class":207},[38,172351,172352],{},"使用：",[83,172354,172356],{"className":30360,"code":172355,"language":30362,"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,30374],{"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,30397],{"class":151},[92,172388,172389],{"class":102},"(response.status_code)\n",[38,172391,172392],{},"查看已安装包：",[83,172394,172396],{"className":23803,"code":172395,"language":23805,"meta":10,"style":10},"pip list\n",[89,172397,172398],{"__ignoreMap":10},[92,172399,172400,172402],{"class":94,"line":95},[92,172401,23812],{"class":1942},[92,172403,118936],{"class":207},[38,172405,172406],{},"导出项目依赖：",[83,172408,172409],{"className":23803,"code":146268,"language":23805,"meta":10,"style":10},[89,172410,172411],{"__ignoreMap":10},[92,172412,172413,172415,172417,172419],{"class":94,"line":95},[92,172414,23812],{"class":1942},[92,172416,146277],{"class":207},[92,172418,26204],{"class":98},[92,172420,146282],{"class":207},[38,172422,172423],{},"安装项目依赖：",[83,172425,172426],{"className":23803,"code":146288,"language":23805,"meta":10,"style":10},[89,172427,172428],{"__ignoreMap":10},[92,172429,172430,172432,172434,172436],{"class":94,"line":95},[92,172431,23812],{"class":1942},[92,172433,23815],{"class":207},[92,172435,119620],{"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":30360,"code":172451,"language":30362,"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,30374],{"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,26025],{"class":98},[92,172474,172475],{"class":102}," sys.path:\n",[92,172477,172478,172480],{"class":94,"line":1173},[92,172479,31281],{"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,24600],{},[89,172511,172512],{},"utils\u002Ffile_utils.py",[83,172514,172516],{"className":30360,"code":172515,"language":30362,"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,30374],{"class":98},[92,172523,147066],{"class":102},[92,172525,172526,172528,172530,172532],{"class":94,"line":11},[92,172527,30719],{"class":98},[92,172529,108292],{"class":102},[92,172531,30374],{"class":98},[92,172533,108297],{"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,31929],{"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,38912],{"class":98},[92,172569,169285],{"class":102},[92,172571,172572,172574],{"class":94,"line":1290},[92,172573,14732],{"class":98},[92,172575,51820],{"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,34160],{"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,31365],{"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,45336],{"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,31929],{"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,34160],{"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,31365],{"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,45336],{"class":5196},[92,172669,12415],{"class":102},[92,172671,147112],{"class":5196},[92,172673,148],{"class":98},[92,172675,33969],{"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,24600],{},[89,172689,154582],{},[83,172691,172693],{"className":30360,"code":172692,"language":30362,"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,30719],{"class":98},[92,172700,172316],{"class":102},[92,172702,30374],{"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,62661],{"class":207},[92,172730,51419],{"class":102},[92,172732,149863],{"class":207},[92,172734,12415],{"class":102},[92,172736,151447],{"class":207},[92,172738,51419],{"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,28367],{},"能指定异常类型就不要裸写 ",[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":23357},"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,117059],{"id":117059},[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",[23846],[49,172991,172992,172993],{},"Python 官方中文教程：",[341,172994,172995],{"href":172995,"rel":172996},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23846],[49,172998,172999,173000],{},"Python 标准库文档：",[341,173001,173002],{"href":173002,"rel":173003},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23846],[49,173005,173006,173007],{},"pyecharts 文档：",[341,173008,173009],{"href":173009,"rel":173010},"https:\u002F\u002Fpyecharts.org\u002F",[23846],{"title":10,"searchDepth":11,"depth":11,"links":173012},[173013,173014,173015],{"id":117059,"depth":11,"text":117059},{"id":172953,"depth":11,"text":172953},{"id":172980,"depth":11,"text":172980},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23359},"\u002Fwiki\u002F2024-10-10-python",{"title":172852,"description":173016},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331412946]