[{"data":1,"prerenderedAt":173037},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-09-02-js-xue-xi\u002Fch1-gong-ju":3,"wiki-doc-nav":47},{"id":4,"title":5,"body":6,"description":39,"extension":40,"meta":41,"navigation":42,"path":43,"seo":44,"stem":45,"__hash__":46},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":8,"toc":36},"minimark",[9,13,17,24,33],[10,11,5],"h1",{"id":12},"_1工具",[14,15,16],"p",{},"提示错误插件：有问题会提前报错",[14,18,19],{},[20,21],"img",{"alt":22,"src":23},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,25,26],{},[27,28,32],"a",{"href":29,"rel":30},"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",[31],"nofollow","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,34,35],{},"alt键加上下箭头可以实现语句的移动",{"title":22,"searchDepth":37,"depth":37,"links":38},2,[],null,"md",{},true,"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":5,"description":39},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",[48,5163,6271,7691,10680,12031,13520,14609,23372,23384,23982,24008,24132,24373,24438,24456,24469,24516,24640,24809,25008,25188,25393,25529,25624,25661,25674,25984,26725,27433,27454,28474,30105,30256,30269,30281,30582,50394,50409,50426,50448,53320,76668,92813,92834,92947,93068,93838,94501,94862,94900,95006,95106,95149,95175,95236,96890,96991,97016,97507,98007,99087,99370,100112,100614,100626,102642,104306,105809,107507,109424,111343,113365,116835,117267,117730,118479,121423,121771,121793,122149,125456,125468,125871,125894,126041,126208,126413,126714,127271,127928,129859,131457,132106,133600,135031,136266,137960,139712,142122,142238,143173,143384,144269,145504,145732,145745,146900,149312,151680,155001,157478,159122,160899,162912,165964,168144,170671,172865],{"id":49,"title":50,"body":51,"description":22,"extension":40,"meta":5158,"navigation":42,"path":5159,"seo":5160,"stem":5161,"__hash__":5162},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":52,"toc":5130},[53,56,61,64,68,81,85,90,93,96,99,102,105,140,144,147,150,153,156,209,213,232,234,248,251,259,262,1124,1131,1148,1152,1243,1247,1253,1342,1346,1384,1388,1452,1456,1460,1466,1477,1481,1486,1490,1495,1499,1504,1508,1512,1517,1787,1792,1930,1935,2192,2195,2203,2207,2212,2315,2318,2624,2633,2734,2737,2740,2743,2746,3006,3011,3151,3154,3333,3336,3464,3467,3619,3623,3628,3631,3642,3650,3653,3760,3764,3768,3773,3823,3828,3833,3857,3862,3915,3918,3923,4100,4105,4390,4395,4792,4796,4801,4858,4863,4871,4874,5014,5017,5126],[10,54,50],{"id":55},"_1基础入门",[57,58,60],"h2",{"id":59},"_11注释","1.1注释",[14,62,63],{},"\u002F\u002F或者\u002F* *\u002F",[57,65,67],{"id":66},"_12命名","1.2命名",[69,70,71,75,78],"ol",{},[72,73,74],"li",{},"字母数字下划线",[72,76,77],{},"开头必须是字母或_",[72,79,80],{},"不能使用关键词",[57,82,84],{"id":83},"_13数据类型","1.3数据类型",[86,87,89],"h3",{"id":88},"_131整形","1.3.1整形",[14,91,92],{},"short 短整形 2",[14,94,95],{},"int 整形 4",[14,97,98],{},"long 长整形 win4 linux32位4 linux64位8",[14,100,101],{},"long long 长长整形 8",[14,103,104],{},"利用sizeof可以求数据类型占用的内存空间大小",[106,107,111],"pre",{"className":108,"code":109,"language":110,"meta":22,"style":22},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[112,113,114,133],"code",{"__ignoreMap":22},[115,116,119,123,127,130],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"szBVR","sizeof",[115,124,126],{"class":125},"sVt8B","(",[115,128,129],{"class":121},"int",[115,131,132],{"class":125},")\n",[115,134,135,137],{"class":117,"line":37},[115,136,122],{"class":121},[115,138,139],{"class":125},"(num)\n",[86,141,143],{"id":142},"_132浮点型","1.3.2浮点型",[14,145,146],{},"float 单精度 4节 7位有效数字",[14,148,149],{},"double 双精度 8节 15-16有效数字",[14,151,152],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,154,155],{},"注意点：",[106,157,159],{"className":108,"code":158,"language":110,"meta":22,"style":22},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[112,160,161,186],{"__ignoreMap":22},[115,162,163,166,169,172,176,179,182],{"class":117,"line":118},[115,164,165],{"class":121},"float",[115,167,168],{"class":125}," f1",[115,170,171],{"class":121},"=",[115,173,175],{"class":174},"sj4cs","3.14",[115,177,178],{"class":121},"f",[115,180,181],{"class":125},";",[115,183,185],{"class":184},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[115,187,188,190,193,195,198,201,204,206],{"class":117,"line":37},[115,189,165],{"class":121},[115,191,192],{"class":125}," f2",[115,194,171],{"class":121},[115,196,197],{"class":174},"3",[115,199,200],{"class":121},"e",[115,202,203],{"class":174},"2",[115,205,181],{"class":125},[115,207,208],{"class":184}," \u002F\u002F科学记数法\n",[86,210,212],{"id":211},"_133字符型","1.3.3字符型",[106,214,216],{"className":108,"code":215,"language":110,"meta":22,"style":22},"char ch='a'\n",[112,217,218],{"__ignoreMap":22},[115,219,220,223,226,228],{"class":117,"line":118},[115,221,222],{"class":121},"char",[115,224,225],{"class":125}," ch",[115,227,171],{"class":121},[115,229,231],{"class":230},"sZZnC","'a'\n",[14,233,155],{},[69,235,236,239,242,245],{},[72,237,238],{},"在显示字符型变量时，只能单引号，双引号x",[72,240,241],{},"单引号内只能一个字符，不能字符串",[72,243,244],{},"c和c++字符型变量只占用一个字符",[72,246,247],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,249,250],{},"ASCII码大致由以下两部分组成：",[69,252,253,256],{},[72,254,255],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[72,257,258],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,260,261],{},"ASCII码表格：",[263,264,265,309],"table",{},[266,267,268],"thead",{},[269,270,271,279,284,288,293,297,301,305],"tr",{},[272,273,274,278],"th",{},[275,276,277],"strong",{},"ASCII","值",[272,280,281],{},[275,282,283],{},"控制字符",[272,285,286,278],{},[275,287,277],{},[272,289,290],{},[275,291,292],{},"字符",[272,294,295,278],{},[275,296,277],{},[272,298,299],{},[275,300,292],{},[272,302,303,278],{},[275,304,277],{},[272,306,307],{},[275,308,292],{},[310,311,312,339,364,389,414,440,465,490,516,541,567,593,619,644,670,696,722,746,771,796,821,846,871,896,921,946,971,997,1022,1047,1072,1098],"tbody",{},[269,313,314,318,321,324,327,330,333,336],{},[315,316,317],"td",{},"0",[315,319,320],{},"NUT",[315,322,323],{},"32",[315,325,326],{},"(space)",[315,328,329],{},"64",[315,331,332],{},"@",[315,334,335],{},"96",[315,337,338],{},"、",[269,340,341,344,347,350,353,356,359,362],{},[315,342,343],{},"1",[315,345,346],{},"SOH",[315,348,349],{},"33",[315,351,352],{},"!",[315,354,355],{},"65",[315,357,358],{},"A",[315,360,361],{},"97",[315,363,27],{},[269,365,366,368,371,374,377,380,383,386],{},[315,367,203],{},[315,369,370],{},"STX",[315,372,373],{},"34",[315,375,376],{},"\"",[315,378,379],{},"66",[315,381,382],{},"B",[315,384,385],{},"98",[315,387,388],{},"b",[269,390,391,393,396,399,402,405,408,411],{},[315,392,197],{},[315,394,395],{},"ETX",[315,397,398],{},"35",[315,400,401],{},"#",[315,403,404],{},"67",[315,406,407],{},"C",[315,409,410],{},"99",[315,412,413],{},"c",[269,415,416,419,422,425,428,431,434,437],{},[315,417,418],{},"4",[315,420,421],{},"EOT",[315,423,424],{},"36",[315,426,427],{},"$",[315,429,430],{},"68",[315,432,433],{},"D",[315,435,436],{},"100",[315,438,439],{},"d",[269,441,442,445,448,451,454,457,460,463],{},[315,443,444],{},"5",[315,446,447],{},"ENQ",[315,449,450],{},"37",[315,452,453],{},"%",[315,455,456],{},"69",[315,458,459],{},"E",[315,461,462],{},"101",[315,464,200],{},[269,466,467,470,473,476,479,482,485,488],{},[315,468,469],{},"6",[315,471,472],{},"ACK",[315,474,475],{},"38",[315,477,478],{},"&",[315,480,481],{},"70",[315,483,484],{},"F",[315,486,487],{},"102",[315,489,178],{},[269,491,492,495,498,501,504,507,510,513],{},[315,493,494],{},"7",[315,496,497],{},"BEL",[315,499,500],{},"39",[315,502,503],{},",",[315,505,506],{},"71",[315,508,509],{},"G",[315,511,512],{},"103",[315,514,515],{},"g",[269,517,518,521,524,527,529,532,535,538],{},[315,519,520],{},"8",[315,522,523],{},"BS",[315,525,526],{},"40",[315,528,126],{},[315,530,531],{},"72",[315,533,534],{},"H",[315,536,537],{},"104",[315,539,540],{},"h",[269,542,543,546,549,552,555,558,561,564],{},[315,544,545],{},"9",[315,547,548],{},"HT",[315,550,551],{},"41",[315,553,554],{},")",[315,556,557],{},"73",[315,559,560],{},"I",[315,562,563],{},"105",[315,565,566],{},"i",[269,568,569,572,575,578,581,584,587,590],{},[315,570,571],{},"10",[315,573,574],{},"LF",[315,576,577],{},"42",[315,579,580],{},"*",[315,582,583],{},"74",[315,585,586],{},"J",[315,588,589],{},"106",[315,591,592],{},"j",[269,594,595,598,601,604,607,610,613,616],{},[315,596,597],{},"11",[315,599,600],{},"VT",[315,602,603],{},"43",[315,605,606],{},"+",[315,608,609],{},"75",[315,611,612],{},"K",[315,614,615],{},"107",[315,617,618],{},"k",[269,620,621,624,627,630,632,635,638,641],{},[315,622,623],{},"12",[315,625,626],{},"FF",[315,628,629],{},"44",[315,631,503],{},[315,633,634],{},"76",[315,636,637],{},"L",[315,639,640],{},"108",[315,642,643],{},"l",[269,645,646,649,652,655,658,661,664,667],{},[315,647,648],{},"13",[315,650,651],{},"CR",[315,653,654],{},"45",[315,656,657],{},"-",[315,659,660],{},"77",[315,662,663],{},"M",[315,665,666],{},"109",[315,668,669],{},"m",[269,671,672,675,678,681,684,687,690,693],{},[315,673,674],{},"14",[315,676,677],{},"SO",[315,679,680],{},"46",[315,682,683],{},".",[315,685,686],{},"78",[315,688,689],{},"N",[315,691,692],{},"110",[315,694,695],{},"n",[269,697,698,701,704,707,710,713,716,719],{},[315,699,700],{},"15",[315,702,703],{},"SI",[315,705,706],{},"47",[315,708,709],{},"\u002F",[315,711,712],{},"79",[315,714,715],{},"O",[315,717,718],{},"111",[315,720,721],{},"o",[269,723,724,727,730,733,735,738,741,744],{},[315,725,726],{},"16",[315,728,729],{},"DLE",[315,731,732],{},"48",[315,734,317],{},[315,736,737],{},"80",[315,739,740],{},"P",[315,742,743],{},"112",[315,745,14],{},[269,747,748,751,754,757,759,762,765,768],{},[315,749,750],{},"17",[315,752,753],{},"DCI",[315,755,756],{},"49",[315,758,343],{},[315,760,761],{},"81",[315,763,764],{},"Q",[315,766,767],{},"113",[315,769,770],{},"q",[269,772,773,776,779,782,784,787,790,793],{},[315,774,775],{},"18",[315,777,778],{},"DC2",[315,780,781],{},"50",[315,783,203],{},[315,785,786],{},"82",[315,788,789],{},"R",[315,791,792],{},"114",[315,794,795],{},"r",[269,797,798,801,804,807,809,812,815,818],{},[315,799,800],{},"19",[315,802,803],{},"DC3",[315,805,806],{},"51",[315,808,197],{},[315,810,811],{},"83",[315,813,814],{},"S",[315,816,817],{},"115",[315,819,820],{},"s",[269,822,823,826,829,832,834,837,840,843],{},[315,824,825],{},"20",[315,827,828],{},"DC4",[315,830,831],{},"52",[315,833,418],{},[315,835,836],{},"84",[315,838,839],{},"T",[315,841,842],{},"116",[315,844,845],{},"t",[269,847,848,851,854,857,859,862,865,868],{},[315,849,850],{},"21",[315,852,853],{},"NAK",[315,855,856],{},"53",[315,858,444],{},[315,860,861],{},"85",[315,863,864],{},"U",[315,866,867],{},"117",[315,869,870],{},"u",[269,872,873,876,879,882,884,887,890,893],{},[315,874,875],{},"22",[315,877,878],{},"SYN",[315,880,881],{},"54",[315,883,469],{},[315,885,886],{},"86",[315,888,889],{},"V",[315,891,892],{},"118",[315,894,895],{},"v",[269,897,898,901,904,907,909,912,915,918],{},[315,899,900],{},"23",[315,902,903],{},"TB",[315,905,906],{},"55",[315,908,494],{},[315,910,911],{},"87",[315,913,914],{},"W",[315,916,917],{},"119",[315,919,920],{},"w",[269,922,923,926,929,932,934,937,940,943],{},[315,924,925],{},"24",[315,927,928],{},"CAN",[315,930,931],{},"56",[315,933,520],{},[315,935,936],{},"88",[315,938,939],{},"X",[315,941,942],{},"120",[315,944,945],{},"x",[269,947,948,951,954,957,959,962,965,968],{},[315,949,950],{},"25",[315,952,953],{},"EM",[315,955,956],{},"57",[315,958,545],{},[315,960,961],{},"89",[315,963,964],{},"Y",[315,966,967],{},"121",[315,969,970],{},"y",[269,972,973,976,979,982,985,988,991,994],{},[315,974,975],{},"26",[315,977,978],{},"SUB",[315,980,981],{},"58",[315,983,984],{},":",[315,986,987],{},"90",[315,989,990],{},"Z",[315,992,993],{},"122",[315,995,996],{},"z",[269,998,999,1002,1005,1008,1010,1013,1016,1019],{},[315,1000,1001],{},"27",[315,1003,1004],{},"ESC",[315,1006,1007],{},"59",[315,1009,181],{},[315,1011,1012],{},"91",[315,1014,1015],{},"[",[315,1017,1018],{},"123",[315,1020,1021],{},"{",[269,1023,1024,1027,1030,1033,1036,1039,1041,1044],{},[315,1025,1026],{},"28",[315,1028,1029],{},"FS",[315,1031,1032],{},"60",[315,1034,1035],{},"\u003C",[315,1037,1038],{},"92",[315,1040,709],{},[315,1042,1043],{},"124",[315,1045,1046],{},"|",[269,1048,1049,1052,1055,1058,1060,1063,1066,1069],{},[315,1050,1051],{},"29",[315,1053,1054],{},"GS",[315,1056,1057],{},"61",[315,1059,171],{},[315,1061,1062],{},"93",[315,1064,1065],{},"]",[315,1067,1068],{},"125",[315,1070,1071],{},"}",[269,1073,1074,1077,1080,1083,1086,1089,1092,1095],{},[315,1075,1076],{},"30",[315,1078,1079],{},"RS",[315,1081,1082],{},"62",[315,1084,1085],{},">",[315,1087,1088],{},"94",[315,1090,1091],{},"^",[315,1093,1094],{},"126",[315,1096,1097],{},"`",[269,1099,1100,1103,1106,1109,1112,1115,1118,1121],{},[315,1101,1102],{},"31",[315,1104,1105],{},"US",[315,1107,1108],{},"63",[315,1110,1111],{},"?",[315,1113,1114],{},"95",[315,1116,1117],{},"_",[315,1119,1120],{},"127",[315,1122,1123],{},"DEL",[14,1125,1126,1127,1130],{},"ASCII 码大致由以下",[275,1128,1129],{},"两部分组","成：",[1132,1133,1134,1141],"ul",{},[72,1135,1136,1137,1140],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[275,1138,1139],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[72,1142,1143,1144,1147],{},"ASCII 打印字符：数字 ",[275,1145,1146],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[86,1149,1151],{"id":1150},"_134转义字符","1.3.4转义字符",[106,1153,1155],{"className":108,"code":1154,"language":110,"meta":22,"style":22},"\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",[112,1156,1157,1162,1178,1193,1199,1213,1219],{"__ignoreMap":22},[115,1158,1159],{"class":117,"line":118},[115,1160,1161],{"class":184},"\u002F\u002F换行符\n",[115,1163,1164,1167,1170,1173,1175],{"class":117,"line":37},[115,1165,1166],{"class":125},"cout ",[115,1168,1169],{"class":121},"\u003C\u003C",[115,1171,1172],{"class":230},"\"hello world\u002Fn\"",[115,1174,181],{"class":125},[115,1176,1177],{"class":184}," \u002F\u002F就等同于如下：\n",[115,1179,1181,1183,1185,1188,1190],{"class":117,"line":1180},3,[115,1182,1166],{"class":125},[115,1184,1169],{"class":121},[115,1186,1187],{"class":230},"\"hello world\"",[115,1189,1169],{"class":121},[115,1191,1192],{"class":125},"endl;\n",[115,1194,1196],{"class":117,"line":1195},4,[115,1197,1198],{"class":184},"\u002F\u002F反斜杠\n",[115,1200,1202,1204,1206,1209,1211],{"class":117,"line":1201},5,[115,1203,1166],{"class":125},[115,1205,1169],{"class":121},[115,1207,1208],{"class":230},"\"\u002F\u002F\"",[115,1210,1169],{"class":121},[115,1212,1192],{"class":125},[115,1214,1216],{"class":117,"line":1215},6,[115,1217,1218],{"class":184},"\u002F\u002F水平制表符\n",[115,1220,1222,1224,1226,1229,1232,1235,1237,1240],{"class":117,"line":1221},7,[115,1223,1166],{"class":125},[115,1225,1169],{"class":121},[115,1227,1228],{"class":230},"\"aaaa",[115,1230,1231],{"class":174},"\\t",[115,1233,1234],{"class":230},"helloworld\"",[115,1236,1169],{"class":121},[115,1238,1239],{"class":125},"endl;",[115,1241,1242],{"class":184}," \u002F\u002F输出窗口时有对齐效果\n",[86,1244,1246],{"id":1245},"_135字符串型","1.3.5字符串型",[14,1248,1249,1250,1252],{},"char 变量名",[115,1251],{},"=\"字符串值\"",[106,1254,1256],{"className":108,"code":1255,"language":110,"meta":22,"style":22},"\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",[112,1257,1258,1263,1268,1273,1278,1292,1305,1310,1316,1328],{"__ignoreMap":22},[115,1259,1260],{"class":117,"line":118},[115,1261,1262],{"class":184},"\u002F\u002Fc风格字符串\n",[115,1264,1265],{"class":117,"line":37},[115,1266,1267],{"class":184},"\u002F\u002F注意事项：\n",[115,1269,1270],{"class":117,"line":1180},[115,1271,1272],{"class":184},"\u002F\u002F1.char字符串名[]\n",[115,1274,1275],{"class":117,"line":1195},[115,1276,1277],{"class":184},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[115,1279,1280,1282,1285,1287,1289],{"class":117,"line":1201},[115,1281,222],{"class":121},[115,1283,1284],{"class":125}," str[]",[115,1286,171],{"class":121},[115,1288,1187],{"class":230},[115,1290,1291],{"class":125},";\n",[115,1293,1294,1296,1298,1301,1303],{"class":117,"line":1215},[115,1295,1166],{"class":125},[115,1297,1169],{"class":121},[115,1299,1300],{"class":125},"str",[115,1302,1169],{"class":121},[115,1304,1192],{"class":125},[115,1306,1307],{"class":117,"line":1221},[115,1308,1309],{"class":184},"\u002F\u002Fc++风格字符串\n",[115,1311,1313],{"class":117,"line":1312},8,[115,1314,1315],{"class":184},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[115,1317,1319,1322,1324,1326],{"class":117,"line":1318},9,[115,1320,1321],{"class":125},"string str2",[115,1323,171],{"class":121},[115,1325,1187],{"class":230},[115,1327,1291],{"class":125},[115,1329,1331,1333,1335,1338,1340],{"class":117,"line":1330},10,[115,1332,1166],{"class":125},[115,1334,1169],{"class":121},[115,1336,1337],{"class":125},"str2",[115,1339,1169],{"class":121},[115,1341,1192],{"class":125},[86,1343,1345],{"id":1344},"_136布尔类型bool","1.3.6布尔类型bool",[106,1347,1349],{"className":108,"code":1348,"language":110,"meta":22,"style":22},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[112,1350,1351,1366],{"__ignoreMap":22},[115,1352,1353,1356,1359,1361,1364],{"class":117,"line":118},[115,1354,1355],{"class":121},"bool",[115,1357,1358],{"class":125}," flag",[115,1360,171],{"class":121},[115,1362,1363],{"class":174},"true",[115,1365,1291],{"class":125},[115,1367,1368,1371,1374,1377,1379,1381],{"class":117,"line":37},[115,1369,1370],{"class":125},"cout",[115,1372,1373],{"class":121},"\u003C\u003Csizeof",[115,1375,1376],{"class":125},"(flag)",[115,1378,1169],{"class":121},[115,1380,1239],{"class":125},[115,1382,1383],{"class":184}," \u002F\u002F查看布尔占内存空间\n",[57,1385,1387],{"id":1386},"_14键盘输入cin","1.4键盘输入cin",[106,1389,1391],{"className":108,"code":1390,"language":110,"meta":22,"style":22},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[112,1392,1393,1406,1423,1434],{"__ignoreMap":22},[115,1394,1395,1397,1400,1402,1404],{"class":117,"line":118},[115,1396,129],{"class":121},[115,1398,1399],{"class":125}," a",[115,1401,171],{"class":121},[115,1403,317],{"class":174},[115,1405,1291],{"class":125},[115,1407,1408,1410,1412,1415,1417,1419,1421],{"class":117,"line":37},[115,1409,1370],{"class":125},[115,1411,1169],{"class":121},[115,1413,1414],{"class":230},"\"请给整型变量a赋值\"",[115,1416,1169],{"class":121},[115,1418,27],{"class":125},[115,1420,1169],{"class":121},[115,1422,1192],{"class":125},[115,1424,1425,1428,1431],{"class":117,"line":1180},[115,1426,1427],{"class":125},"cin ",[115,1429,1430],{"class":121},">>",[115,1432,1433],{"class":125}," a;\n",[115,1435,1436,1438,1440,1443,1446,1448,1450],{"class":117,"line":1195},[115,1437,1166],{"class":125},[115,1439,1169],{"class":121},[115,1441,1442],{"class":230}," \"整型变量a=\"",[115,1444,1445],{"class":121}," \u003C\u003C",[115,1447,27],{"class":125},[115,1449,1169],{"class":121},[115,1451,1192],{"class":125},[57,1453,1455],{"id":1454},"_15运算符","1.5运算符",[86,1457,1459],{"id":1458},"_151算术运算符","1.5.1算术运算符",[14,1461,1462,1465],{},[20,1463],{"alt":22,"src":1464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[69,1467,1468,1471,1474],{},[72,1469,1470],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[72,1472,1473],{},"两个小数不可以做取模运算",[72,1475,1476],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[86,1478,1480],{"id":1479},"_152赋值运算符","1.5.2赋值运算符",[14,1482,1483],{},[20,1484],{"alt":22,"src":1485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[86,1487,1489],{"id":1488},"_153比较运算符","1.5.3比较运算符",[14,1491,1492],{},[20,1493],{"alt":22,"src":1494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[86,1496,1498],{"id":1497},"_154逻辑运算符","1.5.4逻辑运算符",[14,1500,1501],{},[20,1502],{"alt":22,"src":1503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[57,1505,1507],{"id":1506},"_16程序流程结构","1.6程序流程结构",[86,1509,1511],{"id":1510},"_161选择结构","1.6.1选择结构",[69,1513,1514],{},[72,1515,1516],{},"if语句\n单行、多行、多条件if语句",[106,1518,1520],{"className":108,"code":1519,"language":110,"meta":22,"style":22},"\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",[112,1521,1522,1527,1542,1547,1561,1566,1571,1580,1593,1597,1610,1615,1621,1626,1640,1645,1651,1672,1677,1691,1696,1725,1730,1747,1752,1757,1762,1776,1781],{"__ignoreMap":22},[115,1523,1524],{"class":117,"line":118},[115,1525,1526],{"class":184},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[115,1528,1529,1532,1535,1537,1540],{"class":117,"line":37},[115,1530,1531],{"class":121},"if",[115,1533,1534],{"class":125},"(score",[115,1536,1085],{"class":121},[115,1538,1539],{"class":174},"600",[115,1541,132],{"class":125},[115,1543,1544],{"class":117,"line":1180},[115,1545,1546],{"class":125},"{\n",[115,1548,1549,1552,1554,1557,1559],{"class":117,"line":1195},[115,1550,1551],{"class":125},"    cout",[115,1553,1169],{"class":121},[115,1555,1556],{"class":230},"'这是单行if语句'",[115,1558,1169],{"class":121},[115,1560,1192],{"class":125},[115,1562,1563],{"class":117,"line":1201},[115,1564,1565],{"class":125},"}\n",[115,1567,1568],{"class":117,"line":1215},[115,1569,1570],{"class":184},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[115,1572,1573,1575,1577],{"class":117,"line":1221},[115,1574,1427],{"class":125},[115,1576,1430],{"class":121},[115,1578,1579],{"class":125}," score\n",[115,1581,1582,1584,1586,1589,1591],{"class":117,"line":1312},[115,1583,1531],{"class":121},[115,1585,1534],{"class":125},[115,1587,1588],{"class":121},"\u003C=",[115,1590,1539],{"class":174},[115,1592,132],{"class":125},[115,1594,1595],{"class":117,"line":1318},[115,1596,1546],{"class":125},[115,1598,1599,1601,1603,1606,1608],{"class":117,"line":1330},[115,1600,1551],{"class":125},[115,1602,1430],{"class":121},[115,1604,1605],{"class":230},"\"小于等于600\"",[115,1607,1169],{"class":121},[115,1609,1192],{"class":125},[115,1611,1613],{"class":117,"line":1612},11,[115,1614,1565],{"class":125},[115,1616,1618],{"class":117,"line":1617},12,[115,1619,1620],{"class":121},"else\n",[115,1622,1624],{"class":117,"line":1623},13,[115,1625,1546],{"class":125},[115,1627,1629,1631,1633,1636,1638],{"class":117,"line":1628},14,[115,1630,1551],{"class":125},[115,1632,1430],{"class":121},[115,1634,1635],{"class":230},"\"大于600\"",[115,1637,1430],{"class":121},[115,1639,1192],{"class":125},[115,1641,1643],{"class":117,"line":1642},15,[115,1644,1565],{"class":125},[115,1646,1648],{"class":117,"line":1647},16,[115,1649,1650],{"class":184},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[115,1652,1654,1656,1659,1661,1663,1666,1668,1670],{"class":117,"line":1653},17,[115,1655,1531],{"class":121},[115,1657,1658],{"class":125}," (",[115,1660,317],{"class":174},[115,1662,1035],{"class":121},[115,1664,1665],{"class":125},"num",[115,1667,1035],{"class":121},[115,1669,436],{"class":174},[115,1671,132],{"class":125},[115,1673,1675],{"class":117,"line":1674},18,[115,1676,1546],{"class":125},[115,1678,1680,1682,1684,1687,1689],{"class":117,"line":1679},19,[115,1681,1551],{"class":125},[115,1683,1169],{"class":121},[115,1685,1686],{"class":230},"\"小于100\"",[115,1688,1169],{"class":121},[115,1690,1192],{"class":125},[115,1692,1694],{"class":117,"line":1693},20,[115,1695,1565],{"class":125},[115,1697,1699,1702,1705,1708,1711,1713,1716,1718,1720,1723],{"class":117,"line":1698},21,[115,1700,1701],{"class":121},"else",[115,1703,1704],{"class":121}," if",[115,1706,1707],{"class":125}," (nmu",[115,1709,1710],{"class":121},">=",[115,1712,436],{"class":174},[115,1714,1715],{"class":121},"&&",[115,1717,1665],{"class":125},[115,1719,1035],{"class":121},[115,1721,1722],{"class":174},"200",[115,1724,132],{"class":125},[115,1726,1728],{"class":117,"line":1727},22,[115,1729,1546],{"class":125},[115,1731,1733,1735,1737,1740,1742,1744],{"class":117,"line":1732},23,[115,1734,1551],{"class":125},[115,1736,1169],{"class":121},[115,1738,1739],{"class":230},"\"不小于100且小于200\"",[115,1741,1169],{"class":121},[115,1743,1239],{"class":125},[115,1745,1746],{"class":184}," \u002F\u002F可以无限else if,python中是elif：\n",[115,1748,1750],{"class":117,"line":1749},24,[115,1751,1565],{"class":125},[115,1753,1755],{"class":117,"line":1754},25,[115,1756,1620],{"class":121},[115,1758,1760],{"class":117,"line":1759},26,[115,1761,1546],{"class":125},[115,1763,1765,1767,1769,1772,1774],{"class":117,"line":1764},27,[115,1766,1551],{"class":125},[115,1768,1169],{"class":121},[115,1770,1771],{"class":230},"\"不小于200\"",[115,1773,1169],{"class":121},[115,1775,1192],{"class":125},[115,1777,1779],{"class":117,"line":1778},28,[115,1780,1565],{"class":125},[115,1782,1784],{"class":117,"line":1783},29,[115,1785,1786],{"class":184},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[69,1788,1789],{"start":37},[72,1790,1791],{},"三目运算符",[106,1793,1795],{"className":108,"code":1794,"language":110,"meta":22,"style":22},"\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",[112,1796,1797,1802,1807,1833,1855,1872,1877,1900,1915],{"__ignoreMap":22},[115,1798,1799],{"class":117,"line":118},[115,1800,1801],{"class":184},"\u002F\u002F创建三个变量a,b,c\n",[115,1803,1804],{"class":117,"line":37},[115,1805,1806],{"class":184},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[115,1808,1809,1811,1813,1815,1817,1820,1822,1824,1827,1829,1831],{"class":117,"line":1180},[115,1810,129],{"class":121},[115,1812,1399],{"class":125},[115,1814,171],{"class":121},[115,1816,825],{"class":174},[115,1818,1819],{"class":125},",b",[115,1821,171],{"class":121},[115,1823,571],{"class":174},[115,1825,1826],{"class":125},",c",[115,1828,171],{"class":121},[115,1830,317],{"class":174},[115,1832,1291],{"class":125},[115,1834,1835,1837,1839,1842,1844,1846,1848,1850,1852],{"class":117,"line":1195},[115,1836,413],{"class":125},[115,1838,171],{"class":121},[115,1840,1841],{"class":125},"(a",[115,1843,1085],{"class":121},[115,1845,388],{"class":125},[115,1847,1111],{"class":121},[115,1849,27],{"class":125},[115,1851,984],{"class":121},[115,1853,1854],{"class":125},"b)\n",[115,1856,1857,1859,1861,1864,1866,1868,1870],{"class":117,"line":1201},[115,1858,1370],{"class":125},[115,1860,1169],{"class":121},[115,1862,1863],{"class":230},"\"c=\"",[115,1865,1169],{"class":121},[115,1867,413],{"class":125},[115,1869,1169],{"class":121},[115,1871,1192],{"class":125},[115,1873,1874],{"class":117,"line":1215},[115,1875,1876],{"class":184},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[115,1878,1879,1881,1883,1885,1887,1889,1891,1894,1896,1898],{"class":117,"line":1221},[115,1880,1841],{"class":125},[115,1882,1085],{"class":121},[115,1884,388],{"class":125},[115,1886,1111],{"class":121},[115,1888,27],{"class":125},[115,1890,984],{"class":121},[115,1892,1893],{"class":125},"b)",[115,1895,171],{"class":121},[115,1897,436],{"class":174},[115,1899,1291],{"class":125},[115,1901,1902,1904,1906,1908,1910,1912],{"class":117,"line":1312},[115,1903,1370],{"class":125},[115,1905,1169],{"class":121},[115,1907,27],{"class":125},[115,1909,1169],{"class":121},[115,1911,1239],{"class":125},[115,1913,1914],{"class":184}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[115,1916,1917,1919,1921,1923,1925,1927],{"class":117,"line":1318},[115,1918,1370],{"class":125},[115,1920,1169],{"class":121},[115,1922,388],{"class":125},[115,1924,1169],{"class":121},[115,1926,1239],{"class":125},[115,1928,1929],{"class":184}," \u002F\u002F10   a>b,b还是原值\n",[69,1931,1932],{"start":1180},[72,1933,1934],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[106,1936,1938],{"className":108,"code":1937,"language":110,"meta":22,"style":22},"\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",[112,1939,1940,1945,1953,1967,1977,1981,1995,2008,2018,2026,2031,2056,2077,2099,2120,2142,2163,2183,2188],{"__ignoreMap":22},[115,1941,1942],{"class":117,"line":118},[115,1943,1944],{"class":184},"\u002F\u002F案例-电影打分\n",[115,1946,1947,1950],{"class":117,"line":37},[115,1948,1949],{"class":121},"#include",[115,1951,1952],{"class":230},"\u003Ciostream>\n",[115,1954,1955,1958,1961,1965],{"class":117,"line":1180},[115,1956,1957],{"class":121},"using",[115,1959,1960],{"class":121}," namespace",[115,1962,1964],{"class":1963},"sScJk"," std",[115,1966,1291],{"class":125},[115,1968,1969,1971,1974],{"class":117,"line":1195},[115,1970,129],{"class":121},[115,1972,1973],{"class":1963}," main",[115,1975,1976],{"class":125},"()\n",[115,1978,1979],{"class":117,"line":1201},[115,1980,1546],{"class":125},[115,1982,1983,1986,1989,1991,1993],{"class":117,"line":1215},[115,1984,1985],{"class":121},"    int",[115,1987,1988],{"class":125}," score",[115,1990,171],{"class":121},[115,1992,317],{"class":174},[115,1994,1291],{"class":125},[115,1996,1997,1999,2001,2004,2006],{"class":117,"line":1221},[115,1998,1551],{"class":125},[115,2000,1169],{"class":121},[115,2002,2003],{"class":230},"\"电影打分：\"",[115,2005,1169],{"class":121},[115,2007,1192],{"class":125},[115,2009,2010,2013,2015],{"class":117,"line":1312},[115,2011,2012],{"class":125},"    cin",[115,2014,1430],{"class":121},[115,2016,2017],{"class":125},"score;\n",[115,2019,2020,2023],{"class":117,"line":1318},[115,2021,2022],{"class":121},"    switch",[115,2024,2025],{"class":125},"(score)\n",[115,2027,2028],{"class":117,"line":1330},[115,2029,2030],{"class":125},"    {\n",[115,2032,2033,2036,2039,2042,2044,2047,2049,2051,2054],{"class":117,"line":1612},[115,2034,2035],{"class":121},"        case",[115,2037,2038],{"class":174}," 10",[115,2040,2041],{"class":125},":cout",[115,2043,1169],{"class":121},[115,2045,2046],{"class":230},"\"经典\"",[115,2048,1169],{"class":121},[115,2050,1239],{"class":125},[115,2052,2053],{"class":121},"break",[115,2055,1291],{"class":125},[115,2057,2058,2060,2063,2065,2067,2069,2071,2073,2075],{"class":117,"line":1617},[115,2059,2035],{"class":121},[115,2061,2062],{"class":174}," 9",[115,2064,2041],{"class":125},[115,2066,1169],{"class":121},[115,2068,2046],{"class":230},[115,2070,1169],{"class":121},[115,2072,1239],{"class":125},[115,2074,2053],{"class":121},[115,2076,1291],{"class":125},[115,2078,2079,2081,2084,2086,2088,2091,2093,2095,2097],{"class":117,"line":1623},[115,2080,2035],{"class":121},[115,2082,2083],{"class":174}," 8",[115,2085,2041],{"class":125},[115,2087,1169],{"class":121},[115,2089,2090],{"class":230},"\"非常好\"",[115,2092,1169],{"class":121},[115,2094,1239],{"class":125},[115,2096,2053],{"class":121},[115,2098,1291],{"class":125},[115,2100,2101,2103,2106,2108,2110,2112,2114,2116,2118],{"class":117,"line":1628},[115,2102,2035],{"class":121},[115,2104,2105],{"class":174}," 7",[115,2107,2041],{"class":125},[115,2109,1169],{"class":121},[115,2111,2090],{"class":230},[115,2113,1169],{"class":121},[115,2115,1239],{"class":125},[115,2117,2053],{"class":121},[115,2119,1291],{"class":125},[115,2121,2122,2124,2127,2129,2131,2134,2136,2138,2140],{"class":117,"line":1642},[115,2123,2035],{"class":121},[115,2125,2126],{"class":174}," 6",[115,2128,2041],{"class":125},[115,2130,1169],{"class":121},[115,2132,2133],{"class":230},"\"一般\"",[115,2135,1169],{"class":121},[115,2137,1239],{"class":125},[115,2139,2053],{"class":121},[115,2141,1291],{"class":125},[115,2143,2144,2146,2149,2151,2153,2155,2157,2159,2161],{"class":117,"line":1647},[115,2145,2035],{"class":121},[115,2147,2148],{"class":174}," 5",[115,2150,2041],{"class":125},[115,2152,1169],{"class":121},[115,2154,2133],{"class":230},[115,2156,1169],{"class":121},[115,2158,1239],{"class":125},[115,2160,2053],{"class":121},[115,2162,1291],{"class":125},[115,2164,2165,2168,2170,2172,2175,2177,2179,2181],{"class":117,"line":1653},[115,2166,2167],{"class":121},"        default",[115,2169,2041],{"class":125},[115,2171,1169],{"class":121},[115,2173,2174],{"class":230},"\"烂片\"",[115,2176,1169],{"class":121},[115,2178,1239],{"class":125},[115,2180,2053],{"class":121},[115,2182,1291],{"class":125},[115,2184,2185],{"class":117,"line":1674},[115,2186,2187],{"class":125},"    }\n",[115,2189,2190],{"class":117,"line":1679},[115,2191,1565],{"class":125},[14,2193,2194],{},"if和switch区别：",[1132,2196,2197,2200],{},[72,2198,2199],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[72,2201,2202],{},"switch优点：结构清晰，执行效率高",[86,2204,2206],{"id":2205},"_162循环结构","1.6.2循环结构",[69,2208,2209],{},[72,2210,2211],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[106,2213,2215],{"className":108,"code":2214,"language":110,"meta":22,"style":22},"\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",[112,2216,2217,2222,2230,2234,2247,2261,2265,2285,2295,2299,2311],{"__ignoreMap":22},[115,2218,2219],{"class":117,"line":118},[115,2220,2221],{"class":184},"\u002F\u002F打印0-9数字\n",[115,2223,2224,2226,2228],{"class":117,"line":37},[115,2225,129],{"class":121},[115,2227,1973],{"class":1963},[115,2229,1976],{"class":125},[115,2231,2232],{"class":117,"line":1180},[115,2233,1546],{"class":125},[115,2235,2236,2238,2241,2243,2245],{"class":117,"line":1195},[115,2237,1985],{"class":121},[115,2239,2240],{"class":125}," num",[115,2242,171],{"class":121},[115,2244,317],{"class":174},[115,2246,1291],{"class":125},[115,2248,2249,2252,2255,2257,2259],{"class":117,"line":1201},[115,2250,2251],{"class":121},"    while",[115,2253,2254],{"class":125},"(num",[115,2256,1035],{"class":121},[115,2258,571],{"class":174},[115,2260,132],{"class":125},[115,2262,2263],{"class":117,"line":1215},[115,2264,2030],{"class":125},[115,2266,2267,2270,2273,2275,2277,2279,2282],{"class":117,"line":1221},[115,2268,2269],{"class":1963},"       std",[115,2271,2272],{"class":125},"::cout",[115,2274,1169],{"class":121},[115,2276,1665],{"class":125},[115,2278,1169],{"class":121},[115,2280,2281],{"class":1963},"std",[115,2283,2284],{"class":125},"::endl;\n",[115,2286,2287,2290,2293],{"class":117,"line":1312},[115,2288,2289],{"class":125},"        num",[115,2291,2292],{"class":121},"++",[115,2294,1291],{"class":125},[115,2296,2297],{"class":117,"line":1318},[115,2298,2187],{"class":125},[115,2300,2301,2304,2306,2309],{"class":117,"line":1330},[115,2302,2303],{"class":1963},"    system",[115,2305,126],{"class":125},[115,2307,2308],{"class":230},"\"pause\"",[115,2310,132],{"class":125},[115,2312,2313],{"class":117,"line":1612},[115,2314,1565],{"class":125},[14,2316,2317],{},"注意：写好循环条件，避免死循环情况",[106,2319,2321],{"className":108,"code":2320,"language":110,"meta":22,"style":22},"\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",[112,2322,2323,2328,2335,2342,2352,2360,2364,2369,2396,2401,2406,2414,2441,2446,2451,2464,2474,2478,2488,2493,2506,2511,2525,2530,2545,2549,2562,2566,2571,2575,2589,2597,2602,2608,2614,2619],{"__ignoreMap":22},[115,2324,2325],{"class":117,"line":118},[115,2326,2327],{"class":184},"\u002F\u002F循环结构-猜数字\n",[115,2329,2330,2332],{"class":117,"line":37},[115,2331,1949],{"class":121},[115,2333,2334],{"class":230}," \u003Ciostream>\n",[115,2336,2337,2339],{"class":117,"line":1180},[115,2338,1949],{"class":121},[115,2340,2341],{"class":230}," \u003Cctime>\n",[115,2343,2344,2346,2348,2350],{"class":117,"line":1195},[115,2345,1957],{"class":121},[115,2347,1960],{"class":121},[115,2349,1964],{"class":1963},[115,2351,1291],{"class":125},[115,2353,2354,2356,2358],{"class":117,"line":1201},[115,2355,129],{"class":121},[115,2357,1973],{"class":1963},[115,2359,1976],{"class":125},[115,2361,2362],{"class":117,"line":1215},[115,2363,1546],{"class":125},[115,2365,2366],{"class":117,"line":1221},[115,2367,2368],{"class":184},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[115,2370,2371,2374,2377,2380,2383,2385,2388,2390,2393],{"class":117,"line":1312},[115,2372,2373],{"class":1963},"    srand",[115,2375,2376],{"class":125},"((",[115,2378,2379],{"class":121},"unsigned",[115,2381,2382],{"class":121}," int",[115,2384,554],{"class":125},[115,2386,2387],{"class":1963},"time",[115,2389,126],{"class":125},[115,2391,2392],{"class":174},"NULL",[115,2394,2395],{"class":125},"));\n",[115,2397,2398],{"class":117,"line":1318},[115,2399,2400],{"emptyLinePlaceholder":42},"\n",[115,2402,2403],{"class":117,"line":1330},[115,2404,2405],{"class":184},"    \u002F\u002F1.系统生成随机数\n",[115,2407,2408,2411],{"class":117,"line":1612},[115,2409,2410],{"class":184},"    \u002F\u002Frand()%100",[115,2412,2413],{"class":184}," \u002F\u002F生成0-99的随机数\n",[115,2415,2416,2418,2420,2422,2425,2428,2430,2432,2434,2436,2438],{"class":117,"line":1617},[115,2417,1985],{"class":121},[115,2419,2240],{"class":125},[115,2421,171],{"class":121},[115,2423,2424],{"class":1963},"rand",[115,2426,2427],{"class":125},"()",[115,2429,453],{"class":121},[115,2431,436],{"class":174},[115,2433,606],{"class":121},[115,2435,343],{"class":174},[115,2437,181],{"class":125},[115,2439,2440],{"class":184}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[115,2442,2443],{"class":117,"line":1623},[115,2444,2445],{"class":184},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[115,2447,2448],{"class":117,"line":1628},[115,2449,2450],{"class":184},"    \u002F\u002F2.玩家猜测\n",[115,2452,2453,2455,2458,2460,2462],{"class":117,"line":1642},[115,2454,1985],{"class":121},[115,2456,2457],{"class":125}," val",[115,2459,171],{"class":121},[115,2461,317],{"class":174},[115,2463,1291],{"class":125},[115,2465,2466,2468,2470,2472],{"class":117,"line":1647},[115,2467,2251],{"class":121},[115,2469,1658],{"class":125},[115,2471,343],{"class":174},[115,2473,132],{"class":125},[115,2475,2476],{"class":117,"line":1653},[115,2477,2030],{"class":125},[115,2479,2480,2483,2485],{"class":117,"line":1674},[115,2481,2482],{"class":125},"        cin",[115,2484,1430],{"class":121},[115,2486,2487],{"class":125},"val;\n",[115,2489,2490],{"class":117,"line":1679},[115,2491,2492],{"class":184},"        \u002F\u002F3.判断玩家猜测\n",[115,2494,2495,2498,2501,2503],{"class":117,"line":1693},[115,2496,2497],{"class":121},"        if",[115,2499,2500],{"class":125},"(val",[115,2502,1035],{"class":121},[115,2504,2505],{"class":125},"num) \n",[115,2507,2508],{"class":117,"line":1698},[115,2509,2510],{"class":125},"        {\n",[115,2512,2513,2516,2518,2521,2523],{"class":117,"line":1727},[115,2514,2515],{"class":125},"            cout",[115,2517,1169],{"class":121},[115,2519,2520],{"class":230},"\"猜小了！\"",[115,2522,1169],{"class":121},[115,2524,1192],{"class":125},[115,2526,2527],{"class":117,"line":1732},[115,2528,2529],{"class":125},"        }\n",[115,2531,2532,2535,2537,2540,2542],{"class":117,"line":1749},[115,2533,2534],{"class":121},"        else",[115,2536,1704],{"class":121},[115,2538,2539],{"class":125}," (val",[115,2541,1085],{"class":121},[115,2543,2544],{"class":125},"num)\n",[115,2546,2547],{"class":117,"line":1754},[115,2548,2510],{"class":125},[115,2550,2551,2553,2555,2558,2560],{"class":117,"line":1759},[115,2552,2515],{"class":125},[115,2554,1169],{"class":121},[115,2556,2557],{"class":230},"\"猜大了！\"",[115,2559,1169],{"class":121},[115,2561,1192],{"class":125},[115,2563,2564],{"class":117,"line":1764},[115,2565,2529],{"class":125},[115,2567,2568],{"class":117,"line":1778},[115,2569,2570],{"class":121},"        else\n",[115,2572,2573],{"class":117,"line":1783},[115,2574,2510],{"class":125},[115,2576,2578,2580,2582,2585,2587],{"class":117,"line":2577},30,[115,2579,2515],{"class":125},[115,2581,1169],{"class":121},[115,2583,2584],{"class":230},"\"猜对了！\"",[115,2586,1169],{"class":121},[115,2588,1192],{"class":125},[115,2590,2592,2595],{"class":117,"line":2591},31,[115,2593,2594],{"class":121},"            break",[115,2596,1291],{"class":125},[115,2598,2600],{"class":117,"line":2599},32,[115,2601,2529],{"class":125},[115,2603,2605],{"class":117,"line":2604},33,[115,2606,2607],{"class":184},"        \u002F\u002F猜对 退出游戏\n",[115,2609,2611],{"class":117,"line":2610},34,[115,2612,2613],{"class":184},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[115,2615,2617],{"class":117,"line":2616},35,[115,2618,2187],{"class":125},[115,2620,2622],{"class":117,"line":2621},36,[115,2623,1565],{"class":125},[69,2625,2626],{"start":37},[72,2627,2628,2629,2632],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[275,2630,2631],{},"do...while会先执行一次循环语句","，在判断循环语句",[106,2634,2636],{"className":108,"code":2635,"language":110,"meta":22,"style":22},"\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",[112,2637,2638,2643,2651,2655,2667,2675,2679,2696,2703,2707,2720,2730],{"__ignoreMap":22},[115,2639,2640],{"class":117,"line":118},[115,2641,2642],{"class":184},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[115,2644,2645,2647,2649],{"class":117,"line":37},[115,2646,129],{"class":121},[115,2648,1973],{"class":1963},[115,2650,1976],{"class":125},[115,2652,2653],{"class":117,"line":1180},[115,2654,1546],{"class":125},[115,2656,2657,2659,2661,2663,2665],{"class":117,"line":1195},[115,2658,1985],{"class":121},[115,2660,2240],{"class":125},[115,2662,171],{"class":121},[115,2664,317],{"class":174},[115,2666,1291],{"class":125},[115,2668,2669,2672],{"class":117,"line":1201},[115,2670,2671],{"class":121},"    do",[115,2673,2674],{"class":125}," \n",[115,2676,2677],{"class":117,"line":1215},[115,2678,2030],{"class":125},[115,2680,2681,2684,2686,2688,2690,2692,2694],{"class":117,"line":1221},[115,2682,2683],{"class":1963},"        std",[115,2685,2272],{"class":125},[115,2687,1169],{"class":121},[115,2689,1665],{"class":125},[115,2691,1169],{"class":121},[115,2693,2281],{"class":1963},[115,2695,2284],{"class":125},[115,2697,2698,2700],{"class":117,"line":1312},[115,2699,2289],{"class":125},[115,2701,2702],{"class":121},"++\n",[115,2704,2705],{"class":117,"line":1318},[115,2706,2187],{"class":125},[115,2708,2709,2711,2713,2715,2717],{"class":117,"line":1330},[115,2710,2251],{"class":121},[115,2712,2254],{"class":125},[115,2714,1035],{"class":121},[115,2716,571],{"class":174},[115,2718,2719],{"class":125},");\n",[115,2721,2722,2724,2726,2728],{"class":117,"line":1612},[115,2723,2303],{"class":1963},[115,2725,126],{"class":125},[115,2727,2308],{"class":230},[115,2729,2719],{"class":125},[115,2731,2732],{"class":117,"line":1617},[115,2733,1565],{"class":125},[14,2735,2736],{},"案例-水仙花数",[14,2738,2739],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2741,2742],{},"例如：1^3+5^3+3^3=153",[14,2744,2745],{},"请用do...while语句，求出所有3位数的水仙花数",[106,2747,2749],{"className":108,"code":2748,"language":110,"meta":22,"style":22},"#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",[112,2750,2751,2757,2767,2775,2779,2784,2796,2802,2806,2811,2827,2843,2859,2874,2893,2908,2956,2960,2972,2976,2984,2988,3002],{"__ignoreMap":22},[115,2752,2753,2755],{"class":117,"line":118},[115,2754,1949],{"class":121},[115,2756,2334],{"class":230},[115,2758,2759,2761,2763,2765],{"class":117,"line":37},[115,2760,1957],{"class":121},[115,2762,1960],{"class":121},[115,2764,1964],{"class":1963},[115,2766,1291],{"class":125},[115,2768,2769,2771,2773],{"class":117,"line":1180},[115,2770,129],{"class":121},[115,2772,1973],{"class":1963},[115,2774,1976],{"class":125},[115,2776,2777],{"class":117,"line":1195},[115,2778,1546],{"class":125},[115,2780,2781],{"class":117,"line":1201},[115,2782,2783],{"class":184},"    \u002F\u002F1.先打印所有三位数字\n",[115,2785,2786,2788,2790,2792,2794],{"class":117,"line":1215},[115,2787,1985],{"class":121},[115,2789,2240],{"class":125},[115,2791,171],{"class":121},[115,2793,436],{"class":174},[115,2795,1291],{"class":125},[115,2797,2798,2800],{"class":117,"line":1221},[115,2799,2671],{"class":121},[115,2801,2674],{"class":125},[115,2803,2804],{"class":117,"line":1312},[115,2805,2030],{"class":125},[115,2807,2808],{"class":117,"line":1318},[115,2809,2810],{"class":184},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[115,2812,2813,2816,2818,2820,2822,2824],{"class":117,"line":1330},[115,2814,2815],{"class":121},"        int",[115,2817,1399],{"class":125},[115,2819,171],{"class":121},[115,2821,317],{"class":174},[115,2823,181],{"class":125},[115,2825,2826],{"class":184}," \u002F\u002F个位\n",[115,2828,2829,2831,2834,2836,2838,2840],{"class":117,"line":1612},[115,2830,2815],{"class":121},[115,2832,2833],{"class":125}," b",[115,2835,171],{"class":121},[115,2837,317],{"class":174},[115,2839,181],{"class":125},[115,2841,2842],{"class":184}," \u002F\u002F十位\n",[115,2844,2845,2847,2850,2852,2854,2856],{"class":117,"line":1617},[115,2846,2815],{"class":121},[115,2848,2849],{"class":125}," c",[115,2851,171],{"class":121},[115,2853,317],{"class":174},[115,2855,181],{"class":125},[115,2857,2858],{"class":184}," \u002F\u002F百位\n",[115,2860,2861,2864,2866,2868,2870,2872],{"class":117,"line":1623},[115,2862,2863],{"class":125},"        a",[115,2865,171],{"class":121},[115,2867,1665],{"class":125},[115,2869,453],{"class":121},[115,2871,571],{"class":174},[115,2873,1291],{"class":125},[115,2875,2876,2879,2881,2883,2885,2887,2889,2891],{"class":117,"line":1628},[115,2877,2878],{"class":125},"        b",[115,2880,171],{"class":121},[115,2882,1665],{"class":125},[115,2884,709],{"class":121},[115,2886,571],{"class":174},[115,2888,453],{"class":121},[115,2890,571],{"class":174},[115,2892,1291],{"class":125},[115,2894,2895,2898,2900,2902,2904,2906],{"class":117,"line":1642},[115,2896,2897],{"class":125},"        c",[115,2899,171],{"class":121},[115,2901,1665],{"class":125},[115,2903,709],{"class":121},[115,2905,436],{"class":174},[115,2907,1291],{"class":125},[115,2909,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2947,2950,2953],{"class":117,"line":1647},[115,2911,2497],{"class":121},[115,2913,1841],{"class":125},[115,2915,580],{"class":121},[115,2917,27],{"class":125},[115,2919,580],{"class":121},[115,2921,27],{"class":125},[115,2923,606],{"class":121},[115,2925,388],{"class":125},[115,2927,580],{"class":121},[115,2929,388],{"class":125},[115,2931,580],{"class":121},[115,2933,388],{"class":125},[115,2935,606],{"class":121},[115,2937,413],{"class":125},[115,2939,580],{"class":121},[115,2941,413],{"class":125},[115,2943,580],{"class":121},[115,2945,2946],{"class":125},"c ",[115,2948,2949],{"class":121},"==",[115,2951,2952],{"class":125}," num)",[115,2954,2955],{"class":184}," \u002F\u002F如果是水仙花数，才打印\n",[115,2957,2958],{"class":117,"line":1653},[115,2959,2510],{"class":125},[115,2961,2962,2964,2966,2968,2970],{"class":117,"line":1674},[115,2963,2515],{"class":125},[115,2965,1169],{"class":121},[115,2967,1665],{"class":125},[115,2969,1169],{"class":121},[115,2971,1192],{"class":125},[115,2973,2974],{"class":117,"line":1679},[115,2975,2529],{"class":125},[115,2977,2978,2980,2982],{"class":117,"line":1693},[115,2979,2289],{"class":125},[115,2981,2292],{"class":121},[115,2983,1291],{"class":125},[115,2985,2986],{"class":117,"line":1698},[115,2987,2187],{"class":125},[115,2989,2990,2992,2995,2997,3000],{"class":117,"line":1727},[115,2991,2251],{"class":121},[115,2993,2994],{"class":125}," (num ",[115,2996,1035],{"class":121},[115,2998,2999],{"class":174}," 1000",[115,3001,2719],{"class":125},[115,3003,3004],{"class":117,"line":1732},[115,3005,1565],{"class":125},[69,3007,3008],{"start":1180},[72,3009,3010],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[106,3012,3014],{"className":108,"code":3013,"language":110,"meta":22,"style":22},"\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",[112,3015,3016,3021,3050,3054,3066,3070,3075,3086,3093,3097,3111,3115,3122,3126,3138,3147],{"__ignoreMap":22},[115,3017,3018],{"class":117,"line":118},[115,3019,3020],{"class":184},"\u002F\u002F从数字0-9打印\n",[115,3022,3023,3026,3028,3030,3033,3035,3037,3040,3042,3044,3046,3048],{"class":117,"line":37},[115,3024,3025],{"class":121},"for",[115,3027,126],{"class":125},[115,3029,129],{"class":121},[115,3031,3032],{"class":125}," i",[115,3034,171],{"class":121},[115,3036,317],{"class":174},[115,3038,3039],{"class":125},";i",[115,3041,1035],{"class":121},[115,3043,571],{"class":174},[115,3045,3039],{"class":125},[115,3047,2292],{"class":121},[115,3049,132],{"class":125},[115,3051,3052],{"class":117,"line":1180},[115,3053,1546],{"class":125},[115,3055,3056,3058,3060,3062,3064],{"class":117,"line":1195},[115,3057,1551],{"class":125},[115,3059,1169],{"class":121},[115,3061,566],{"class":125},[115,3063,1169],{"class":121},[115,3065,1192],{"class":125},[115,3067,3068],{"class":117,"line":1201},[115,3069,1565],{"class":125},[115,3071,3072],{"class":117,"line":1215},[115,3073,3074],{"class":184},"\u002F\u002F上式可以进行拆分\n",[115,3076,3077,3079,3081,3083],{"class":117,"line":1221},[115,3078,129],{"class":121},[115,3080,3032],{"class":125},[115,3082,171],{"class":121},[115,3084,3085],{"class":174},"0\n",[115,3087,3088,3090],{"class":117,"line":1312},[115,3089,3025],{"class":121},[115,3091,3092],{"class":125},"(;;;)\n",[115,3094,3095],{"class":117,"line":1318},[115,3096,1546],{"class":125},[115,3098,3099,3102,3105,3107,3109],{"class":117,"line":1330},[115,3100,3101],{"class":121},"    if",[115,3103,3104],{"class":125},"(i",[115,3106,1710],{"class":121},[115,3108,571],{"class":174},[115,3110,132],{"class":125},[115,3112,3113],{"class":117,"line":1612},[115,3114,2030],{"class":125},[115,3116,3117,3120],{"class":117,"line":1617},[115,3118,3119],{"class":121},"        break",[115,3121,1291],{"class":125},[115,3123,3124],{"class":117,"line":1623},[115,3125,2187],{"class":125},[115,3127,3128,3130,3132,3134,3136],{"class":117,"line":1628},[115,3129,1551],{"class":125},[115,3131,1169],{"class":121},[115,3133,566],{"class":125},[115,3135,1169],{"class":121},[115,3137,1192],{"class":125},[115,3139,3140,3143,3145],{"class":117,"line":1642},[115,3141,3142],{"class":125},"    i",[115,3144,2292],{"class":121},[115,3146,1291],{"class":125},[115,3148,3149],{"class":117,"line":1647},[115,3150,1565],{"class":125},[14,3152,3153],{},"小练习",[106,3155,3157],{"className":108,"code":3156,"language":110,"meta":22,"style":22},"#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",[112,3158,3159,3165,3175,3183,3187,3192,3197,3225,3229,3234,3239,3280,3284,3297,3301,3305,3309,3321,3325,3329],{"__ignoreMap":22},[115,3160,3161,3163],{"class":117,"line":118},[115,3162,1949],{"class":121},[115,3164,1952],{"class":230},[115,3166,3167,3169,3171,3173],{"class":117,"line":37},[115,3168,1957],{"class":121},[115,3170,1960],{"class":121},[115,3172,1964],{"class":1963},[115,3174,1291],{"class":125},[115,3176,3177,3179,3181],{"class":117,"line":1180},[115,3178,129],{"class":121},[115,3180,1973],{"class":1963},[115,3182,1976],{"class":125},[115,3184,3185],{"class":117,"line":1195},[115,3186,1546],{"class":125},[115,3188,3189],{"class":117,"line":1201},[115,3190,3191],{"class":184},"    \u002F\u002F敲桌子案例\n",[115,3193,3194],{"class":117,"line":1215},[115,3195,3196],{"class":184},"    \u002F\u002F1.先输出1-100的数字\n",[115,3198,3199,3202,3204,3206,3208,3210,3212,3215,3217,3219,3221,3223],{"class":117,"line":1221},[115,3200,3201],{"class":121},"    for",[115,3203,126],{"class":125},[115,3205,129],{"class":121},[115,3207,3032],{"class":125},[115,3209,171],{"class":121},[115,3211,343],{"class":174},[115,3213,3214],{"class":125},"; i",[115,3216,1588],{"class":121},[115,3218,436],{"class":174},[115,3220,3214],{"class":125},[115,3222,2292],{"class":121},[115,3224,132],{"class":125},[115,3226,3227],{"class":117,"line":1312},[115,3228,2030],{"class":125},[115,3230,3231],{"class":117,"line":1318},[115,3232,3233],{"class":184},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[115,3235,3236],{"class":117,"line":1330},[115,3237,3238],{"class":184},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[115,3240,3241,3243,3245,3247,3249,3251,3253,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278],{"class":117,"line":1612},[115,3242,2497],{"class":121},[115,3244,3104],{"class":125},[115,3246,453],{"class":121},[115,3248,494],{"class":174},[115,3250,2949],{"class":121},[115,3252,317],{"class":174},[115,3254,3255],{"class":121}," ||",[115,3257,3032],{"class":125},[115,3259,453],{"class":121},[115,3261,571],{"class":174},[115,3263,2949],{"class":121},[115,3265,494],{"class":174},[115,3267,3255],{"class":121},[115,3269,3032],{"class":125},[115,3271,709],{"class":121},[115,3273,571],{"class":174},[115,3275,2949],{"class":121},[115,3277,494],{"class":174},[115,3279,132],{"class":125},[115,3281,3282],{"class":117,"line":1617},[115,3283,2510],{"class":125},[115,3285,3286,3288,3290,3293,3295],{"class":117,"line":1623},[115,3287,2515],{"class":125},[115,3289,1169],{"class":121},[115,3291,3292],{"class":230},"\"敲桌子\"",[115,3294,1169],{"class":121},[115,3296,1192],{"class":125},[115,3298,3299],{"class":117,"line":1628},[115,3300,2529],{"class":125},[115,3302,3303],{"class":117,"line":1642},[115,3304,2570],{"class":121},[115,3306,3307],{"class":117,"line":1647},[115,3308,2510],{"class":125},[115,3310,3311,3313,3315,3317,3319],{"class":117,"line":1653},[115,3312,2515],{"class":125},[115,3314,1169],{"class":121},[115,3316,566],{"class":125},[115,3318,1169],{"class":121},[115,3320,1192],{"class":125},[115,3322,3323],{"class":117,"line":1674},[115,3324,2529],{"class":125},[115,3326,3327],{"class":117,"line":1679},[115,3328,2187],{"class":125},[115,3330,3331],{"class":117,"line":1693},[115,3332,1565],{"class":125},[14,3334,3335],{},"嵌套实现星图",[106,3337,3339],{"className":108,"code":3338,"language":110,"meta":22,"style":22},"#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",[112,3340,3341,3347,3357,3365,3369,3395,3399,3428,3432,3443,3447,3456,3460],{"__ignoreMap":22},[115,3342,3343,3345],{"class":117,"line":118},[115,3344,1949],{"class":121},[115,3346,1952],{"class":230},[115,3348,3349,3351,3353,3355],{"class":117,"line":37},[115,3350,1957],{"class":121},[115,3352,1960],{"class":121},[115,3354,1964],{"class":1963},[115,3356,1291],{"class":125},[115,3358,3359,3361,3363],{"class":117,"line":1180},[115,3360,129],{"class":121},[115,3362,1973],{"class":1963},[115,3364,1976],{"class":125},[115,3366,3367],{"class":117,"line":1195},[115,3368,1546],{"class":125},[115,3370,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393],{"class":117,"line":1201},[115,3372,3201],{"class":121},[115,3374,1658],{"class":125},[115,3376,129],{"class":121},[115,3378,3032],{"class":125},[115,3380,171],{"class":121},[115,3382,317],{"class":174},[115,3384,3039],{"class":125},[115,3386,1035],{"class":121},[115,3388,571],{"class":174},[115,3390,3039],{"class":125},[115,3392,2292],{"class":121},[115,3394,132],{"class":125},[115,3396,3397],{"class":117,"line":1215},[115,3398,2030],{"class":125},[115,3400,3401,3404,3406,3408,3411,3413,3415,3418,3420,3422,3424,3426],{"class":117,"line":1221},[115,3402,3403],{"class":121},"        for",[115,3405,1658],{"class":125},[115,3407,129],{"class":121},[115,3409,3410],{"class":125}," j",[115,3412,171],{"class":121},[115,3414,317],{"class":174},[115,3416,3417],{"class":125},";j",[115,3419,1035],{"class":121},[115,3421,571],{"class":174},[115,3423,3417],{"class":125},[115,3425,2292],{"class":121},[115,3427,132],{"class":125},[115,3429,3430],{"class":117,"line":1312},[115,3431,2510],{"class":125},[115,3433,3434,3436,3438,3441],{"class":117,"line":1318},[115,3435,2515],{"class":125},[115,3437,1169],{"class":121},[115,3439,3440],{"class":230},"\"*\"",[115,3442,1291],{"class":125},[115,3444,3445],{"class":117,"line":1330},[115,3446,2529],{"class":125},[115,3448,3449,3452,3454],{"class":117,"line":1612},[115,3450,3451],{"class":125},"        cout",[115,3453,1169],{"class":121},[115,3455,1192],{"class":125},[115,3457,3458],{"class":117,"line":1617},[115,3459,2187],{"class":125},[115,3461,3462],{"class":117,"line":1623},[115,3463,1565],{"class":125},[14,3465,3466],{},"乘法口诀表",[106,3468,3470],{"className":108,"code":3469,"language":110,"meta":22,"style":22},"#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",[112,3471,3472,3478,3488,3496,3500,3526,3530,3555,3559,3599,3603,3611,3615],{"__ignoreMap":22},[115,3473,3474,3476],{"class":117,"line":118},[115,3475,1949],{"class":121},[115,3477,2334],{"class":230},[115,3479,3480,3482,3484,3486],{"class":117,"line":37},[115,3481,1957],{"class":121},[115,3483,1960],{"class":121},[115,3485,1964],{"class":1963},[115,3487,1291],{"class":125},[115,3489,3490,3492,3494],{"class":117,"line":1180},[115,3491,129],{"class":121},[115,3493,1973],{"class":1963},[115,3495,1976],{"class":125},[115,3497,3498],{"class":117,"line":1195},[115,3499,1546],{"class":125},[115,3501,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524],{"class":117,"line":1201},[115,3503,3201],{"class":121},[115,3505,126],{"class":125},[115,3507,129],{"class":121},[115,3509,3032],{"class":125},[115,3511,171],{"class":121},[115,3513,343],{"class":174},[115,3515,3039],{"class":125},[115,3517,1035],{"class":121},[115,3519,571],{"class":174},[115,3521,3039],{"class":125},[115,3523,2292],{"class":121},[115,3525,132],{"class":125},[115,3527,3528],{"class":117,"line":1215},[115,3529,2030],{"class":125},[115,3531,3532,3534,3536,3538,3540,3542,3544,3546,3548,3551,3553],{"class":117,"line":1221},[115,3533,3403],{"class":121},[115,3535,126],{"class":125},[115,3537,129],{"class":121},[115,3539,3410],{"class":125},[115,3541,171],{"class":121},[115,3543,343],{"class":174},[115,3545,3417],{"class":125},[115,3547,1588],{"class":121},[115,3549,3550],{"class":125},"i;j",[115,3552,2292],{"class":121},[115,3554,132],{"class":125},[115,3556,3557],{"class":117,"line":1312},[115,3558,2510],{"class":125},[115,3560,3561,3563,3565,3567,3569,3571,3573,3575,3577,3580,3582,3584,3586,3588,3590,3593,3595,3597],{"class":117,"line":1318},[115,3562,2515],{"class":125},[115,3564,1169],{"class":121},[115,3566,592],{"class":125},[115,3568,1169],{"class":121},[115,3570,3440],{"class":230},[115,3572,1169],{"class":121},[115,3574,566],{"class":125},[115,3576,1169],{"class":121},[115,3578,3579],{"class":230},"\"=\"",[115,3581,1169],{"class":121},[115,3583,566],{"class":125},[115,3585,580],{"class":121},[115,3587,592],{"class":125},[115,3589,1169],{"class":121},[115,3591,3592],{"class":230},"'",[115,3594,1231],{"class":174},[115,3596,3592],{"class":230},[115,3598,1291],{"class":125},[115,3600,3601],{"class":117,"line":1330},[115,3602,2529],{"class":125},[115,3604,3605,3607,3609],{"class":117,"line":1612},[115,3606,3451],{"class":125},[115,3608,1169],{"class":121},[115,3610,1192],{"class":125},[115,3612,3613],{"class":117,"line":1617},[115,3614,2187],{"class":125},[115,3616,3617],{"class":117,"line":1623},[115,3618,1565],{"class":125},[86,3620,3622],{"id":3621},"_163跳出语句","1.6.3跳出语句",[69,3624,3625],{},[72,3626,3627],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3629,3630],{},"break使用时机：",[1132,3632,3633,3636,3639],{},[72,3634,3635],{},"出现在switch条件语句中，作用是终止case并跳出switch",[72,3637,3638],{},"出现在循环结构中，作用是跳出当前的循环结构",[72,3640,3641],{},"出现在嵌套循环中，跳出最近的内层循环语句",[69,3643,3644,3647],{"start":37},[72,3645,3646],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[72,3648,3649],{},"goto语句\n语法：goto 标记;",[14,3651,3652],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[106,3654,3656],{"className":108,"code":3655,"language":110,"meta":22,"style":22},"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",[112,3657,3658,3666,3670,3683,3693,3706,3719,3732,3740,3756],{"__ignoreMap":22},[115,3659,3660,3662,3664],{"class":117,"line":118},[115,3661,129],{"class":121},[115,3663,1973],{"class":1963},[115,3665,1976],{"class":125},[115,3667,3668],{"class":117,"line":37},[115,3669,1546],{"class":125},[115,3671,3672,3674,3676,3679,3681],{"class":117,"line":1180},[115,3673,1551],{"class":125},[115,3675,1169],{"class":121},[115,3677,3678],{"class":230},"\"1\"",[115,3680,1169],{"class":121},[115,3682,1192],{"class":125},[115,3684,3685,3688,3691],{"class":117,"line":1195},[115,3686,3687],{"class":121},"    goto",[115,3689,3690],{"class":1963}," FLAG",[115,3692,1291],{"class":125},[115,3694,3695,3697,3699,3702,3704],{"class":117,"line":1201},[115,3696,1551],{"class":125},[115,3698,1169],{"class":121},[115,3700,3701],{"class":230},"\"2\"",[115,3703,1169],{"class":121},[115,3705,1192],{"class":125},[115,3707,3708,3710,3712,3715,3717],{"class":117,"line":1215},[115,3709,1551],{"class":125},[115,3711,1169],{"class":121},[115,3713,3714],{"class":230},"\"3\"",[115,3716,1169],{"class":121},[115,3718,1192],{"class":125},[115,3720,3721,3723,3725,3728,3730],{"class":117,"line":1221},[115,3722,1551],{"class":125},[115,3724,1169],{"class":121},[115,3726,3727],{"class":230},"\"4\"",[115,3729,1169],{"class":121},[115,3731,1192],{"class":125},[115,3733,3734,3737],{"class":117,"line":1312},[115,3735,3736],{"class":1963},"    FLAG",[115,3738,3739],{"class":125},":\n",[115,3741,3742,3744,3746,3749,3751,3753],{"class":117,"line":1318},[115,3743,1551],{"class":125},[115,3745,1169],{"class":121},[115,3747,3748],{"class":230},"\"5\"",[115,3750,1169],{"class":121},[115,3752,1239],{"class":125},[115,3754,3755],{"class":184},"\u002F\u002F跳过了2,3,4,直接到5\n",[115,3757,3758],{"class":117,"line":1330},[115,3759,1565],{"class":125},[57,3761,3763],{"id":3762},"_17数组","1.7数组",[86,3765,3767],{"id":3766},"_171一维数组","1.7.1一维数组",[69,3769,3770],{},[72,3771,3772],{},"一维数组定义方式",[263,3774,3775,3785],{},[266,3776,3777],{},[269,3778,3779,3782],{},[272,3780,3781],{},"方式",[272,3783,3784],{},"注意事项",[310,3786,3787,3801,3811],{},[269,3788,3789,3795],{},[315,3790,3791,3792,181],{},"数据类型 数组名",[115,3793,3794],{},"数组长度",[315,3796,3797,3798,3800],{},"这种方式是先定义再arr",[115,3799,566],{},"赋值",[269,3802,3803,3808],{},[315,3804,3791,3805,3807],{},[115,3806,3794],{},"={值1,值2....};",[315,3809,3810],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[269,3812,3813,3817],{},[315,3814,3791,3815,3807],{},[115,3816],{},[315,3818,3819,3820,3822],{},"int arr",[115,3821],{},";这是不正确的，按照这样的方式定义必须有初始长度",[69,3824,3825],{"start":37},[72,3826,3827],{},"一维数组数组名\n用途：",[1132,3829,3830],{},[72,3831,3832],{},"1.可以统计整个数组在内存中的长度：",[106,3834,3836],{"className":108,"code":3835,"language":110,"meta":22,"style":22},"sizeof(arr);\nsizeof(arr[0]);\n",[112,3837,3838,3845],{"__ignoreMap":22},[115,3839,3840,3842],{"class":117,"line":118},[115,3841,122],{"class":121},[115,3843,3844],{"class":125},"(arr);\n",[115,3846,3847,3849,3852,3854],{"class":117,"line":37},[115,3848,122],{"class":121},[115,3850,3851],{"class":125},"(arr[",[115,3853,317],{"class":174},[115,3855,3856],{"class":125},"]);\n",[1132,3858,3859],{},[72,3860,3861],{},"2.可以获取数组在内存中的首地址:",[106,3863,3865],{"className":108,"code":3864,"language":110,"meta":22,"style":22},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[112,3866,3867,3872,3885,3890],{"__ignoreMap":22},[115,3868,3869],{"class":117,"line":118},[115,3870,3871],{"class":184},"\u002F\u002F查看16进制的首地址\n",[115,3873,3874,3876,3878,3881,3883],{"class":117,"line":37},[115,3875,1370],{"class":125},[115,3877,1169],{"class":121},[115,3879,3880],{"class":125},"arr",[115,3882,1169],{"class":121},[115,3884,1192],{"class":125},[115,3886,3887],{"class":117,"line":1180},[115,3888,3889],{"class":184},"\u002F\u002F看10进制数\n",[115,3891,3892,3894,3896,3898,3900,3902,3904,3907,3909,3911,3913],{"class":117,"line":1195},[115,3893,1370],{"class":125},[115,3895,1169],{"class":121},[115,3897,126],{"class":125},[115,3899,129],{"class":121},[115,3901,554],{"class":125},[115,3903,478],{"class":121},[115,3905,3906],{"class":125},"arr[",[115,3908,317],{"class":174},[115,3910,1065],{"class":125},[115,3912,1169],{"class":121},[115,3914,1192],{"class":125},[14,3916,3917],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1132,3919,3920],{},[72,3921,3922],{},"1️⃣五只小猪称体重",[106,3924,3926],{"className":108,"code":3925,"language":110,"meta":22,"style":22},"#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",[112,3927,3928,3934,3944,3952,3956,3996,4009,4035,4039,4051,4055,4065,4069,4073,4086,4096],{"__ignoreMap":22},[115,3929,3930,3932],{"class":117,"line":118},[115,3931,1949],{"class":121},[115,3933,1952],{"class":230},[115,3935,3936,3938,3940,3942],{"class":117,"line":37},[115,3937,1957],{"class":121},[115,3939,1960],{"class":121},[115,3941,1964],{"class":1963},[115,3943,1291],{"class":125},[115,3945,3946,3948,3950],{"class":117,"line":1180},[115,3947,129],{"class":121},[115,3949,1973],{"class":1963},[115,3951,1976],{"class":125},[115,3953,3954],{"class":117,"line":1195},[115,3955,1546],{"class":125},[115,3957,3958,3960,3963,3965,3967,3969,3971,3974,3976,3979,3981,3983,3985,3988,3990,3993],{"class":117,"line":1201},[115,3959,1985],{"class":121},[115,3961,3962],{"class":125}," arr[",[115,3964,444],{"class":174},[115,3966,1065],{"class":125},[115,3968,171],{"class":121},[115,3970,1021],{"class":125},[115,3972,3973],{"class":174},"300",[115,3975,503],{"class":125},[115,3977,3978],{"class":174},"350",[115,3980,503],{"class":125},[115,3982,1722],{"class":174},[115,3984,503],{"class":125},[115,3986,3987],{"class":174},"400",[115,3989,503],{"class":125},[115,3991,3992],{"class":174},"250",[115,3994,3995],{"class":125},"};\n",[115,3997,3998,4000,4003,4005,4007],{"class":117,"line":1215},[115,3999,1985],{"class":121},[115,4001,4002],{"class":125}," tmp",[115,4004,171],{"class":121},[115,4006,317],{"class":174},[115,4008,1291],{"class":125},[115,4010,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029,4031,4033],{"class":117,"line":1221},[115,4012,3201],{"class":121},[115,4014,1658],{"class":125},[115,4016,129],{"class":121},[115,4018,3032],{"class":125},[115,4020,171],{"class":121},[115,4022,317],{"class":174},[115,4024,3039],{"class":125},[115,4026,1035],{"class":121},[115,4028,444],{"class":174},[115,4030,3039],{"class":125},[115,4032,2292],{"class":121},[115,4034,132],{"class":125},[115,4036,4037],{"class":117,"line":1312},[115,4038,2030],{"class":125},[115,4040,4041,4043,4046,4048],{"class":117,"line":1318},[115,4042,2497],{"class":121},[115,4044,4045],{"class":125},"(tmp",[115,4047,1035],{"class":121},[115,4049,4050],{"class":125},"arr[i])\n",[115,4052,4053],{"class":117,"line":1330},[115,4054,2510],{"class":125},[115,4056,4057,4060,4062],{"class":117,"line":1612},[115,4058,4059],{"class":125},"            tmp",[115,4061,171],{"class":121},[115,4063,4064],{"class":125},"arr[i];\n",[115,4066,4067],{"class":117,"line":1617},[115,4068,2529],{"class":125},[115,4070,4071],{"class":117,"line":1623},[115,4072,2187],{"class":125},[115,4074,4075,4077,4079,4082,4084],{"class":117,"line":1628},[115,4076,1551],{"class":125},[115,4078,1169],{"class":121},[115,4080,4081],{"class":125},"tmp",[115,4083,1169],{"class":121},[115,4085,1192],{"class":125},[115,4087,4088,4091,4094],{"class":117,"line":1642},[115,4089,4090],{"class":121},"    return",[115,4092,4093],{"class":174}," 0",[115,4095,1291],{"class":125},[115,4097,4098],{"class":117,"line":1647},[115,4099,1565],{"class":125},[1132,4101,4102],{},[72,4103,4104],{},"2️⃣数组元素逆置",[106,4106,4108],{"className":108,"code":4107,"language":110,"meta":22,"style":22},"\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",[112,4109,4110,4115,4121,4131,4139,4143,4178,4194,4226,4239,4244,4249,4261,4271,4281,4286,4295,4305,4310,4315,4342,4346,4362,4366,4377,4386],{"__ignoreMap":22},[115,4111,4112],{"class":117,"line":118},[115,4113,4114],{"class":184},"\u002F\u002F元素逆置\n",[115,4116,4117,4119],{"class":117,"line":37},[115,4118,1949],{"class":121},[115,4120,1952],{"class":230},[115,4122,4123,4125,4127,4129],{"class":117,"line":1180},[115,4124,1957],{"class":121},[115,4126,1960],{"class":121},[115,4128,1964],{"class":1963},[115,4130,1291],{"class":125},[115,4132,4133,4135,4137],{"class":117,"line":1195},[115,4134,129],{"class":121},[115,4136,1973],{"class":1963},[115,4138,1976],{"class":125},[115,4140,4141],{"class":117,"line":1201},[115,4142,1546],{"class":125},[115,4144,4145,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176],{"class":117,"line":1215},[115,4146,4147],{"class":121},"   int",[115,4149,3962],{"class":125},[115,4151,444],{"class":174},[115,4153,1065],{"class":125},[115,4155,171],{"class":121},[115,4157,1021],{"class":125},[115,4159,343],{"class":174},[115,4161,503],{"class":125},[115,4163,203],{"class":174},[115,4165,503],{"class":125},[115,4167,197],{"class":174},[115,4169,503],{"class":125},[115,4171,418],{"class":174},[115,4173,503],{"class":125},[115,4175,444],{"class":174},[115,4177,3995],{"class":125},[115,4179,4180,4182,4185,4187,4189,4191],{"class":117,"line":1221},[115,4181,4147],{"class":121},[115,4183,4184],{"class":125}," start",[115,4186,171],{"class":121},[115,4188,317],{"class":174},[115,4190,181],{"class":125},[115,4192,4193],{"class":184},"\u002F\u002F起始下标\n",[115,4195,4196,4198,4201,4204,4207,4210,4212,4214,4217,4219,4221,4223],{"class":117,"line":1312},[115,4197,4147],{"class":121},[115,4199,4200],{"class":125}," end",[115,4202,4203],{"class":121},"=sizeof",[115,4205,4206],{"class":125},"(arr)",[115,4208,4209],{"class":121},"\u002Fsizeof",[115,4211,3851],{"class":125},[115,4213,317],{"class":174},[115,4215,4216],{"class":125},"])",[115,4218,657],{"class":121},[115,4220,343],{"class":174},[115,4222,181],{"class":125},[115,4224,4225],{"class":184},"\u002F\u002F结束下标\n",[115,4227,4228,4231,4234,4236],{"class":117,"line":1318},[115,4229,4230],{"class":121},"   while",[115,4232,4233],{"class":125}," (start",[115,4235,1035],{"class":121},[115,4237,4238],{"class":125},"end)\n",[115,4240,4241],{"class":117,"line":1330},[115,4242,4243],{"class":125},"   {\n",[115,4245,4246],{"class":117,"line":1612},[115,4247,4248],{"class":184},"    \u002F\u002F实现元素互换代码\n",[115,4250,4251,4253,4256,4258],{"class":117,"line":1617},[115,4252,1985],{"class":121},[115,4254,4255],{"class":125}," temp",[115,4257,171],{"class":121},[115,4259,4260],{"class":125},"arr[start];\n",[115,4262,4263,4266,4268],{"class":117,"line":1623},[115,4264,4265],{"class":125},"    arr[start]",[115,4267,171],{"class":121},[115,4269,4270],{"class":125},"arr[end];\n",[115,4272,4273,4276,4278],{"class":117,"line":1628},[115,4274,4275],{"class":125},"    arr[end]",[115,4277,171],{"class":121},[115,4279,4280],{"class":125},"temp;\n",[115,4282,4283],{"class":117,"line":1642},[115,4284,4285],{"class":184},"    \u002F\u002F下标更新\n",[115,4287,4288,4291,4293],{"class":117,"line":1647},[115,4289,4290],{"class":125},"    start",[115,4292,2292],{"class":121},[115,4294,1291],{"class":125},[115,4296,4297,4300,4303],{"class":117,"line":1653},[115,4298,4299],{"class":125},"    end",[115,4301,4302],{"class":121},"--",[115,4304,1291],{"class":125},[115,4306,4307],{"class":117,"line":1674},[115,4308,4309],{"class":125},"   }\n",[115,4311,4312],{"class":117,"line":1679},[115,4313,4314],{"class":184},"   \u002F\u002F输出逆置后的数组\n",[115,4316,4317,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340],{"class":117,"line":1693},[115,4318,4319],{"class":121},"   for",[115,4321,1658],{"class":125},[115,4323,129],{"class":121},[115,4325,3032],{"class":125},[115,4327,171],{"class":121},[115,4329,317],{"class":174},[115,4331,3039],{"class":125},[115,4333,1035],{"class":121},[115,4335,444],{"class":174},[115,4337,3039],{"class":125},[115,4339,2292],{"class":121},[115,4341,132],{"class":125},[115,4343,4344],{"class":117,"line":1698},[115,4345,4243],{"class":125},[115,4347,4348,4350,4352,4355,4357,4360],{"class":117,"line":1727},[115,4349,1551],{"class":125},[115,4351,1169],{"class":121},[115,4353,4354],{"class":125},"arr[i]",[115,4356,1169],{"class":121},[115,4358,4359],{"class":230},"\" \"",[115,4361,1291],{"class":125},[115,4363,4364],{"class":117,"line":1732},[115,4365,4309],{"class":125},[115,4367,4368,4371,4373,4375],{"class":117,"line":1749},[115,4369,4370],{"class":1963},"   system",[115,4372,126],{"class":125},[115,4374,2308],{"class":230},[115,4376,2719],{"class":125},[115,4378,4379,4382,4384],{"class":117,"line":1754},[115,4380,4381],{"class":121},"   return",[115,4383,4093],{"class":174},[115,4385,1291],{"class":125},[115,4387,4388],{"class":117,"line":1759},[115,4389,1565],{"class":125},[1132,4391,4392],{},[72,4393,4394],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[106,4396,4398],{"className":108,"code":4397,"language":110,"meta":22,"style":22},"\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",[112,4399,4400,4405,4411,4421,4429,4433,4485,4498,4524,4528,4542,4546,4551,4556,4586,4590,4595,4629,4633,4638,4658,4663,4675,4691,4706,4711,4715,4719,4732,4758,4762,4776,4780,4788],{"__ignoreMap":22},[115,4401,4402],{"class":117,"line":118},[115,4403,4404],{"class":184},"\u002F\u002F冒泡排序,升序\n",[115,4406,4407,4409],{"class":117,"line":37},[115,4408,1949],{"class":121},[115,4410,1952],{"class":230},[115,4412,4413,4415,4417,4419],{"class":117,"line":1180},[115,4414,1957],{"class":121},[115,4416,1960],{"class":121},[115,4418,1964],{"class":1963},[115,4420,1291],{"class":125},[115,4422,4423,4425,4427],{"class":117,"line":1195},[115,4424,129],{"class":121},[115,4426,1973],{"class":1963},[115,4428,1976],{"class":125},[115,4430,4431],{"class":117,"line":1201},[115,4432,1546],{"class":125},[115,4434,4435,4437,4439,4441,4444,4446,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483],{"class":117,"line":1215},[115,4436,1985],{"class":121},[115,4438,3962],{"class":125},[115,4440,545],{"class":174},[115,4442,4443],{"class":125},"] ",[115,4445,171],{"class":121},[115,4447,4448],{"class":125}," {",[115,4450,418],{"class":174},[115,4452,503],{"class":125},[115,4454,203],{"class":174},[115,4456,503],{"class":125},[115,4458,520],{"class":174},[115,4460,503],{"class":125},[115,4462,317],{"class":174},[115,4464,503],{"class":125},[115,4466,444],{"class":174},[115,4468,503],{"class":125},[115,4470,494],{"class":174},[115,4472,503],{"class":125},[115,4474,343],{"class":174},[115,4476,503],{"class":125},[115,4478,197],{"class":174},[115,4480,503],{"class":125},[115,4482,545],{"class":174},[115,4484,3995],{"class":125},[115,4486,4487,4489,4491,4494,4496],{"class":117,"line":1221},[115,4488,1551],{"class":125},[115,4490,1169],{"class":121},[115,4492,4493],{"class":230},"\"排序前：\"",[115,4495,1169],{"class":121},[115,4497,1192],{"class":125},[115,4499,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":117,"line":1312},[115,4501,3201],{"class":121},[115,4503,1658],{"class":125},[115,4505,129],{"class":121},[115,4507,3032],{"class":125},[115,4509,171],{"class":121},[115,4511,317],{"class":174},[115,4513,3039],{"class":125},[115,4515,1035],{"class":121},[115,4517,545],{"class":174},[115,4519,3039],{"class":125},[115,4521,2292],{"class":121},[115,4523,132],{"class":125},[115,4525,4526],{"class":117,"line":1318},[115,4527,2030],{"class":125},[115,4529,4530,4532,4534,4536,4538,4540],{"class":117,"line":1330},[115,4531,3451],{"class":125},[115,4533,1169],{"class":121},[115,4535,4354],{"class":125},[115,4537,1169],{"class":121},[115,4539,4359],{"class":230},[115,4541,1291],{"class":125},[115,4543,4544],{"class":117,"line":1612},[115,4545,2187],{"class":125},[115,4547,4548],{"class":117,"line":1617},[115,4549,4550],{"class":184},"    \u002F\u002F开始冒泡排序\n",[115,4552,4553],{"class":117,"line":1623},[115,4554,4555],{"class":184},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[115,4557,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584],{"class":117,"line":1628},[115,4559,3201],{"class":121},[115,4561,1658],{"class":125},[115,4563,129],{"class":121},[115,4565,3032],{"class":125},[115,4567,171],{"class":121},[115,4569,317],{"class":174},[115,4571,3039],{"class":125},[115,4573,1035],{"class":121},[115,4575,545],{"class":174},[115,4577,657],{"class":121},[115,4579,343],{"class":174},[115,4581,3039],{"class":125},[115,4583,2292],{"class":121},[115,4585,132],{"class":125},[115,4587,4588],{"class":117,"line":1642},[115,4589,2030],{"class":125},[115,4591,4592],{"class":117,"line":1647},[115,4593,4594],{"class":184},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[115,4596,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627],{"class":117,"line":1653},[115,4598,3403],{"class":121},[115,4600,1658],{"class":125},[115,4602,129],{"class":121},[115,4604,3410],{"class":125},[115,4606,171],{"class":121},[115,4608,317],{"class":174},[115,4610,3417],{"class":125},[115,4612,1035],{"class":121},[115,4614,545],{"class":174},[115,4616,657],{"class":121},[115,4618,566],{"class":125},[115,4620,657],{"class":121},[115,4622,343],{"class":174},[115,4624,3417],{"class":125},[115,4626,2292],{"class":121},[115,4628,132],{"class":125},[115,4630,4631],{"class":117,"line":1674},[115,4632,2510],{"class":125},[115,4634,4635],{"class":117,"line":1679},[115,4636,4637],{"class":184},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[115,4639,4640,4643,4646,4648,4651,4653,4655],{"class":117,"line":1693},[115,4641,4642],{"class":121},"            if",[115,4644,4645],{"class":125},"(arr[j]",[115,4647,1085],{"class":121},[115,4649,4650],{"class":125},"arr[j",[115,4652,606],{"class":121},[115,4654,343],{"class":174},[115,4656,4657],{"class":125},"])\n",[115,4659,4660],{"class":117,"line":1698},[115,4661,4662],{"class":125},"            {\n",[115,4664,4665,4668,4670,4672],{"class":117,"line":1727},[115,4666,4667],{"class":121},"                int",[115,4669,4255],{"class":125},[115,4671,171],{"class":121},[115,4673,4674],{"class":125},"arr[j];\n",[115,4676,4677,4680,4682,4684,4686,4688],{"class":117,"line":1732},[115,4678,4679],{"class":125},"                arr[j]",[115,4681,171],{"class":121},[115,4683,4650],{"class":125},[115,4685,606],{"class":121},[115,4687,343],{"class":174},[115,4689,4690],{"class":125},"];\n",[115,4692,4693,4696,4698,4700,4702,4704],{"class":117,"line":1749},[115,4694,4695],{"class":125},"                arr[j",[115,4697,606],{"class":121},[115,4699,343],{"class":174},[115,4701,1065],{"class":125},[115,4703,171],{"class":121},[115,4705,4280],{"class":125},[115,4707,4708],{"class":117,"line":1754},[115,4709,4710],{"class":125},"            }\n",[115,4712,4713],{"class":117,"line":1759},[115,4714,2529],{"class":125},[115,4716,4717],{"class":117,"line":1764},[115,4718,2187],{"class":125},[115,4720,4721,4723,4725,4728,4730],{"class":117,"line":1778},[115,4722,1551],{"class":125},[115,4724,1169],{"class":121},[115,4726,4727],{"class":230},"\"排序后：\"",[115,4729,1169],{"class":121},[115,4731,1192],{"class":125},[115,4733,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756],{"class":117,"line":1783},[115,4735,3201],{"class":121},[115,4737,1658],{"class":125},[115,4739,129],{"class":121},[115,4741,3032],{"class":125},[115,4743,171],{"class":121},[115,4745,317],{"class":174},[115,4747,3039],{"class":125},[115,4749,1035],{"class":121},[115,4751,545],{"class":174},[115,4753,3039],{"class":125},[115,4755,2292],{"class":121},[115,4757,132],{"class":125},[115,4759,4760],{"class":117,"line":2577},[115,4761,2030],{"class":125},[115,4763,4764,4766,4768,4770,4772,4774],{"class":117,"line":2591},[115,4765,3451],{"class":125},[115,4767,1169],{"class":121},[115,4769,4354],{"class":125},[115,4771,1169],{"class":121},[115,4773,4359],{"class":230},[115,4775,1291],{"class":125},[115,4777,4778],{"class":117,"line":2599},[115,4779,2187],{"class":125},[115,4781,4782,4784,4786],{"class":117,"line":2604},[115,4783,4090],{"class":121},[115,4785,4093],{"class":174},[115,4787,1291],{"class":125},[115,4789,4790],{"class":117,"line":2610},[115,4791,1565],{"class":125},[86,4793,4795],{"id":4794},"_172二维数组","1.7.2二维数组",[69,4797,4798],{},[72,4799,4800],{},"二维数组的四种定义方式",[263,4802,4803,4812],{},[266,4804,4805],{},[269,4806,4807,4810],{},[272,4808,4809],{},"序号",[272,4811,3781],{},[310,4813,4814,4824,4833,4842,4851],{},[269,4815,4816,4818],{},[315,4817,343],{},[315,4819,4820,4821,181],{},"数据类型 数组名[行数]",[115,4822,4823],{},"列数",[269,4825,4826,4828],{},[315,4827,203],{},[315,4829,4820,4830,4832],{},[115,4831,4823],{},"={ {数据1,数据2}，{数据3，数据4}... }",[269,4834,4835,4837],{},[315,4836,197],{},[315,4838,4820,4839,4841],{},[115,4840,4823],{},"={数据1,数据2,数据3...}",[269,4843,4844,4846],{},[315,4845,418],{},[315,4847,4848,4849,4841],{},"数据类型 数组名[]",[115,4850,4823],{},[269,4852,4853,4856],{},[315,4854,4855],{},"注意：不能只省略列数",[315,4857],{},[69,4859,4860],{"start":37},[72,4861,4862],{},"二维数组数组名",[1132,4864,4865,4868],{},[72,4866,4867],{},"1.查看二维数组所占内存空间",[72,4869,4870],{},"2.获取二维数组首地址",[14,4872,4873],{},"已知二维数组，求二维数组的行数与列数",[106,4875,4877],{"className":108,"code":4876,"language":110,"meta":22,"style":22},"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",[112,4878,4879,4887,4891,4909,4913,4931,4947,4952,4977,5010],{"__ignoreMap":22},[115,4880,4881,4883,4885],{"class":117,"line":118},[115,4882,129],{"class":121},[115,4884,1973],{"class":1963},[115,4886,1976],{"class":125},[115,4888,4889],{"class":117,"line":37},[115,4890,1546],{"class":125},[115,4892,4893,4895,4897,4899,4902,4904,4906],{"class":117,"line":1180},[115,4894,1985],{"class":121},[115,4896,3962],{"class":125},[115,4898,203],{"class":174},[115,4900,4901],{"class":125},"][",[115,4903,197],{"class":174},[115,4905,1065],{"class":125},[115,4907,4908],{"class":121},"=\n",[115,4910,4911],{"class":117,"line":1195},[115,4912,2030],{"class":125},[115,4914,4915,4918,4920,4922,4924,4926,4928],{"class":117,"line":1201},[115,4916,4917],{"class":125},"        {",[115,4919,343],{"class":174},[115,4921,503],{"class":125},[115,4923,203],{"class":174},[115,4925,503],{"class":125},[115,4927,197],{"class":174},[115,4929,4930],{"class":125},"},\n",[115,4932,4933,4935,4937,4939,4941,4943,4945],{"class":117,"line":1215},[115,4934,4917],{"class":125},[115,4936,418],{"class":174},[115,4938,503],{"class":125},[115,4940,444],{"class":174},[115,4942,503],{"class":125},[115,4944,469],{"class":174},[115,4946,1565],{"class":125},[115,4948,4949],{"class":117,"line":1221},[115,4950,4951],{"class":125},"    };\n",[115,4953,4954,4956,4958,4961,4963,4965,4967,4969,4971,4973,4975],{"class":117,"line":1312},[115,4955,1551],{"class":125},[115,4957,1169],{"class":121},[115,4959,4960],{"class":230},"\"二维数组的行数\"",[115,4962,1373],{"class":121},[115,4964,4206],{"class":125},[115,4966,4209],{"class":121},[115,4968,3851],{"class":125},[115,4970,317],{"class":174},[115,4972,4216],{"class":125},[115,4974,1169],{"class":121},[115,4976,1192],{"class":125},[115,4978,4979,4981,4983,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008],{"class":117,"line":1318},[115,4980,1551],{"class":125},[115,4982,1169],{"class":121},[115,4984,4985],{"class":230},"\"二维数组的列数\"",[115,4987,1373],{"class":121},[115,4989,3851],{"class":125},[115,4991,317],{"class":174},[115,4993,4216],{"class":125},[115,4995,4209],{"class":121},[115,4997,3851],{"class":125},[115,4999,317],{"class":174},[115,5001,4901],{"class":125},[115,5003,317],{"class":174},[115,5005,4216],{"class":125},[115,5007,1169],{"class":121},[115,5009,1192],{"class":125},[115,5011,5012],{"class":117,"line":1330},[115,5013,1565],{"class":125},[14,5015,5016],{},"查看二维数组首地址",[106,5018,5020],{"className":108,"code":5019,"language":110,"meta":22,"style":22},"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",[112,5021,5022,5039,5065,5090],{"__ignoreMap":22},[115,5023,5024,5026,5028,5031,5033,5035,5037],{"class":117,"line":118},[115,5025,1370],{"class":125},[115,5027,1169],{"class":121},[115,5029,5030],{"class":230},"\"二维数组首地址：\"",[115,5032,1169],{"class":121},[115,5034,3880],{"class":125},[115,5036,1169],{"class":121},[115,5038,1192],{"class":125},[115,5040,5041,5043,5045,5048,5050,5052,5054,5057,5059,5061,5063],{"class":117,"line":37},[115,5042,1370],{"class":125},[115,5044,1169],{"class":121},[115,5046,5047],{"class":230},"\"二维数组第一行的首地址：\"",[115,5049,1169],{"class":121},[115,5051,126],{"class":125},[115,5053,129],{"class":121},[115,5055,5056],{"class":125},")arr[",[115,5058,317],{"class":174},[115,5060,1065],{"class":125},[115,5062,1169],{"class":121},[115,5064,1192],{"class":125},[115,5066,5067,5069,5071,5074,5076,5078,5080,5082,5084,5086,5088],{"class":117,"line":1180},[115,5068,1370],{"class":125},[115,5070,1169],{"class":121},[115,5072,5073],{"class":230},"\"二维数组第二行的首地址：\"",[115,5075,1169],{"class":121},[115,5077,126],{"class":125},[115,5079,129],{"class":121},[115,5081,5056],{"class":125},[115,5083,343],{"class":174},[115,5085,1065],{"class":125},[115,5087,1169],{"class":121},[115,5089,1192],{"class":125},[115,5091,5092,5094,5096,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123],{"class":117,"line":1195},[115,5093,1370],{"class":125},[115,5095,1169],{"class":121},[115,5097,5098],{"class":230},"\"二维数组第一个元素的首地址:\"",[115,5100,1169],{"class":121},[115,5102,126],{"class":125},[115,5104,129],{"class":121},[115,5106,554],{"class":125},[115,5108,478],{"class":121},[115,5110,3906],{"class":125},[115,5112,317],{"class":174},[115,5114,4901],{"class":125},[115,5116,317],{"class":174},[115,5118,1065],{"class":125},[115,5120,1169],{"class":121},[115,5122,1239],{"class":125},[115,5124,5125],{"class":184},"\u002F\u002F对于数，要加取址符\n",[5127,5128,5129],"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":22,"searchDepth":37,"depth":37,"links":5131},[5132,5133,5134,5142,5143,5149,5154],{"id":59,"depth":37,"text":60},{"id":66,"depth":37,"text":67},{"id":83,"depth":37,"text":84,"children":5135},[5136,5137,5138,5139,5140,5141],{"id":88,"depth":1180,"text":89},{"id":142,"depth":1180,"text":143},{"id":211,"depth":1180,"text":212},{"id":1150,"depth":1180,"text":1151},{"id":1245,"depth":1180,"text":1246},{"id":1344,"depth":1180,"text":1345},{"id":1386,"depth":37,"text":1387},{"id":1454,"depth":37,"text":1455,"children":5144},[5145,5146,5147,5148],{"id":1458,"depth":1180,"text":1459},{"id":1479,"depth":1180,"text":1480},{"id":1488,"depth":1180,"text":1489},{"id":1497,"depth":1180,"text":1498},{"id":1506,"depth":37,"text":1507,"children":5150},[5151,5152,5153],{"id":1510,"depth":1180,"text":1511},{"id":2205,"depth":1180,"text":2206},{"id":3621,"depth":1180,"text":3622},{"id":3762,"depth":37,"text":3763,"children":5155},[5156,5157],{"id":3766,"depth":1180,"text":3767},{"id":4794,"depth":1180,"text":4795},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":50,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5164,"title":5165,"body":5166,"description":22,"extension":40,"meta":6266,"navigation":42,"path":6267,"seo":6268,"stem":6269,"__hash__":6270},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5167,"toc":6258},[5168,5171,5175,5183,5191,5194,5260,5264,5267,5343,5347,5350,5353,5356,5569,5573,5578,5642,5647,5714,5719,5810,5813,5918,5922,5925,5931,6075,6079,6082,6096,6099,6144,6147,6255],[10,5169,5165],{"id":5170},"_2函数",[57,5172,5174],{"id":5173},"_21函数概述","2.1函数概述",[69,5176,5177,5180],{},[72,5178,5179],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[72,5181,5182],{},"语法：",[106,5184,5189],{"className":5185,"code":5187,"language":5188,"meta":22},[5186],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[112,5190,5187],{"__ignoreMap":22},[14,5192,5193],{},"小案例",[106,5195,5197],{"className":108,"code":5196,"language":110,"meta":22,"style":22},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[112,5198,5199,5204,5228,5232,5249,5256],{"__ignoreMap":22},[115,5200,5201],{"class":117,"line":118},[115,5202,5203],{"class":184},"\u002F\u002Fnum1,num2形参\n",[115,5205,5206,5208,5211,5213,5215,5219,5221,5223,5226],{"class":117,"line":37},[115,5207,129],{"class":121},[115,5209,5210],{"class":1963}," add",[115,5212,126],{"class":125},[115,5214,129],{"class":121},[115,5216,5218],{"class":5217},"s4XuR"," num1",[115,5220,503],{"class":125},[115,5222,129],{"class":121},[115,5224,5225],{"class":5217}," num2",[115,5227,132],{"class":125},[115,5229,5230],{"class":117,"line":1180},[115,5231,1546],{"class":125},[115,5233,5234,5236,5239,5241,5244,5246],{"class":117,"line":1195},[115,5235,1985],{"class":121},[115,5237,5238],{"class":125}," sum",[115,5240,171],{"class":121},[115,5242,5243],{"class":125},"num1",[115,5245,606],{"class":121},[115,5247,5248],{"class":125},"num2;\n",[115,5250,5251,5253],{"class":117,"line":1201},[115,5252,4090],{"class":121},[115,5254,5255],{"class":125}," sum;\n",[115,5257,5258],{"class":117,"line":1215},[115,5259,1565],{"class":125},[57,5261,5263],{"id":5262},"_22函数调用","2.2函数调用",[14,5265,5266],{},"调用刚刚写的求和函数",[106,5268,5270],{"className":108,"code":5269,"language":110,"meta":22,"style":22},"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",[112,5271,5272,5280,5284,5289,5301,5313,5322,5327,5339],{"__ignoreMap":22},[115,5273,5274,5276,5278],{"class":117,"line":118},[115,5275,129],{"class":121},[115,5277,1973],{"class":1963},[115,5279,1976],{"class":125},[115,5281,5282],{"class":117,"line":37},[115,5283,1546],{"class":125},[115,5285,5286],{"class":117,"line":1180},[115,5287,5288],{"class":184},"    \u002F\u002Fa,b实参\n",[115,5290,5291,5293,5295,5297,5299],{"class":117,"line":1195},[115,5292,1985],{"class":121},[115,5294,1399],{"class":125},[115,5296,171],{"class":121},[115,5298,317],{"class":174},[115,5300,1291],{"class":125},[115,5302,5303,5305,5307,5309,5311],{"class":117,"line":1201},[115,5304,1985],{"class":121},[115,5306,2833],{"class":125},[115,5308,171],{"class":121},[115,5310,317],{"class":174},[115,5312,1291],{"class":125},[115,5314,5315,5317,5319],{"class":117,"line":1215},[115,5316,2012],{"class":125},[115,5318,1430],{"class":121},[115,5320,5321],{"class":125},"a,b;\n",[115,5323,5324],{"class":117,"line":1221},[115,5325,5326],{"class":184},"    \u002F\u002F调用函数时，实参值传给了形参\n",[115,5328,5329,5331,5333,5336],{"class":117,"line":1312},[115,5330,1551],{"class":125},[115,5332,1169],{"class":121},[115,5334,5335],{"class":1963},"add",[115,5337,5338],{"class":125},"(a,b);\n",[115,5340,5341],{"class":117,"line":1318},[115,5342,1565],{"class":125},[57,5344,5346],{"id":5345},"_23值传递","2.3值传递",[14,5348,5349],{},"值传递就是函数调用时实参将数值传给形参",[14,5351,5352],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5354,5355],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[106,5357,5359],{"className":108,"code":5358,"language":110,"meta":22,"style":22},"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",[112,5360,5361,5383,5387,5400,5417,5435,5446,5455,5464,5477,5493,5509,5518,5522,5530,5534,5546,5558,5565],{"__ignoreMap":22},[115,5362,5363,5366,5369,5371,5373,5375,5377,5379,5381],{"class":117,"line":118},[115,5364,5365],{"class":121},"void",[115,5367,5368],{"class":1963}," swap",[115,5370,126],{"class":125},[115,5372,129],{"class":121},[115,5374,5218],{"class":5217},[115,5376,503],{"class":125},[115,5378,129],{"class":121},[115,5380,5225],{"class":5217},[115,5382,132],{"class":125},[115,5384,5385],{"class":117,"line":37},[115,5386,1546],{"class":125},[115,5388,5389,5391,5393,5396,5398],{"class":117,"line":1180},[115,5390,1551],{"class":125},[115,5392,1169],{"class":121},[115,5394,5395],{"class":230},"\"交换前：\"",[115,5397,1169],{"class":121},[115,5399,1192],{"class":125},[115,5401,5402,5404,5406,5409,5411,5413,5415],{"class":117,"line":1195},[115,5403,1551],{"class":125},[115,5405,1169],{"class":121},[115,5407,5408],{"class":230},"\"num1=\"",[115,5410,1169],{"class":121},[115,5412,5243],{"class":125},[115,5414,1169],{"class":121},[115,5416,1192],{"class":125},[115,5418,5419,5421,5423,5426,5428,5431,5433],{"class":117,"line":1201},[115,5420,1551],{"class":125},[115,5422,1169],{"class":121},[115,5424,5425],{"class":230},"\"num2=\"",[115,5427,1169],{"class":121},[115,5429,5430],{"class":125},"num2",[115,5432,1169],{"class":121},[115,5434,1192],{"class":125},[115,5436,5437,5439,5441,5443],{"class":117,"line":1215},[115,5438,1985],{"class":121},[115,5440,4255],{"class":125},[115,5442,171],{"class":121},[115,5444,5445],{"class":125},"num1;\n",[115,5447,5448,5451,5453],{"class":117,"line":1221},[115,5449,5450],{"class":125},"    num1",[115,5452,171],{"class":121},[115,5454,5248],{"class":125},[115,5456,5457,5460,5462],{"class":117,"line":1312},[115,5458,5459],{"class":125},"    num2",[115,5461,171],{"class":121},[115,5463,4280],{"class":125},[115,5465,5466,5468,5470,5473,5475],{"class":117,"line":1318},[115,5467,1551],{"class":125},[115,5469,1169],{"class":121},[115,5471,5472],{"class":230},"\"交换后：\"",[115,5474,1169],{"class":121},[115,5476,1192],{"class":125},[115,5478,5479,5481,5483,5485,5487,5489,5491],{"class":117,"line":1330},[115,5480,1551],{"class":125},[115,5482,1169],{"class":121},[115,5484,5408],{"class":230},[115,5486,1169],{"class":121},[115,5488,5243],{"class":125},[115,5490,1169],{"class":121},[115,5492,1192],{"class":125},[115,5494,5495,5497,5499,5501,5503,5505,5507],{"class":117,"line":1612},[115,5496,1551],{"class":125},[115,5498,1169],{"class":121},[115,5500,5425],{"class":230},[115,5502,1169],{"class":121},[115,5504,5430],{"class":125},[115,5506,1169],{"class":121},[115,5508,1192],{"class":125},[115,5510,5511,5513,5515],{"class":117,"line":1617},[115,5512,4090],{"class":121},[115,5514,181],{"class":125},[115,5516,5517],{"class":184},"\u002F\u002F或者不写\n",[115,5519,5520],{"class":117,"line":1623},[115,5521,1565],{"class":125},[115,5523,5524,5526,5528],{"class":117,"line":1628},[115,5525,129],{"class":121},[115,5527,1973],{"class":1963},[115,5529,1976],{"class":125},[115,5531,5532],{"class":117,"line":1642},[115,5533,1546],{"class":125},[115,5535,5536,5538,5540,5542,5544],{"class":117,"line":1647},[115,5537,1985],{"class":121},[115,5539,1399],{"class":125},[115,5541,171],{"class":121},[115,5543,571],{"class":174},[115,5545,1291],{"class":125},[115,5547,5548,5550,5552,5554,5556],{"class":117,"line":1653},[115,5549,1985],{"class":121},[115,5551,2833],{"class":125},[115,5553,171],{"class":121},[115,5555,825],{"class":174},[115,5557,1291],{"class":125},[115,5559,5560,5563],{"class":117,"line":1674},[115,5561,5562],{"class":1963},"    swap",[115,5564,5338],{"class":125},[115,5566,5567],{"class":117,"line":1679},[115,5568,1565],{"class":125},[57,5570,5572],{"id":5571},"_24函数的常见形式","2.4函数的常见形式",[69,5574,5575],{},[72,5576,5577],{},"无参无返",[106,5579,5581],{"className":108,"code":5580,"language":110,"meta":22,"style":22},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[112,5582,5583,5592,5596,5609,5613,5621,5625,5630,5638],{"__ignoreMap":22},[115,5584,5585,5587,5590],{"class":117,"line":118},[115,5586,5365],{"class":121},[115,5588,5589],{"class":1963}," test01",[115,5591,1976],{"class":125},[115,5593,5594],{"class":117,"line":37},[115,5595,1546],{"class":125},[115,5597,5598,5600,5602,5605,5607],{"class":117,"line":1180},[115,5599,1551],{"class":125},[115,5601,1169],{"class":121},[115,5603,5604],{"class":230},"\"你好\"",[115,5606,1169],{"class":121},[115,5608,1192],{"class":125},[115,5610,5611],{"class":117,"line":1195},[115,5612,1565],{"class":125},[115,5614,5615,5617,5619],{"class":117,"line":1201},[115,5616,129],{"class":121},[115,5618,1973],{"class":1963},[115,5620,1976],{"class":125},[115,5622,5623],{"class":117,"line":1215},[115,5624,1546],{"class":125},[115,5626,5627],{"class":117,"line":1221},[115,5628,5629],{"class":184},"    \u002F\u002F函数调用\n",[115,5631,5632,5635],{"class":117,"line":1312},[115,5633,5634],{"class":1963},"    test01",[115,5636,5637],{"class":125},"();\n",[115,5639,5640],{"class":117,"line":1318},[115,5641,1565],{"class":125},[69,5643,5644],{"start":37},[72,5645,5646],{},"有参无返",[106,5648,5650],{"className":108,"code":5649,"language":110,"meta":22,"style":22},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[112,5651,5652,5667,5671,5683,5687,5695,5699,5710],{"__ignoreMap":22},[115,5653,5654,5656,5659,5661,5663,5665],{"class":117,"line":118},[115,5655,5365],{"class":121},[115,5657,5658],{"class":1963}," test02",[115,5660,126],{"class":125},[115,5662,129],{"class":121},[115,5664,1399],{"class":5217},[115,5666,132],{"class":125},[115,5668,5669],{"class":117,"line":37},[115,5670,1546],{"class":125},[115,5672,5673,5675,5677,5679,5681],{"class":117,"line":1180},[115,5674,1551],{"class":125},[115,5676,1169],{"class":121},[115,5678,5604],{"class":230},[115,5680,1169],{"class":121},[115,5682,1192],{"class":125},[115,5684,5685],{"class":117,"line":1195},[115,5686,1565],{"class":125},[115,5688,5689,5691,5693],{"class":117,"line":1201},[115,5690,129],{"class":121},[115,5692,1973],{"class":1963},[115,5694,1976],{"class":125},[115,5696,5697],{"class":117,"line":1215},[115,5698,1546],{"class":125},[115,5700,5701,5704,5706,5708],{"class":117,"line":1221},[115,5702,5703],{"class":1963},"    test02",[115,5705,126],{"class":125},[115,5707,436],{"class":174},[115,5709,2719],{"class":125},[115,5711,5712],{"class":117,"line":1312},[115,5713,1565],{"class":125},[69,5715,5716],{"start":1180},[72,5717,5718],{},"无参有返",[106,5720,5722],{"className":108,"code":5721,"language":110,"meta":22,"style":22},"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",[112,5723,5724,5733,5737,5749,5758,5762,5770,5774,5787,5806],{"__ignoreMap":22},[115,5725,5726,5728,5731],{"class":117,"line":118},[115,5727,129],{"class":121},[115,5729,5730],{"class":1963}," test03",[115,5732,1976],{"class":125},[115,5734,5735],{"class":117,"line":37},[115,5736,1546],{"class":125},[115,5738,5739,5741,5743,5745,5747],{"class":117,"line":1180},[115,5740,1551],{"class":125},[115,5742,1169],{"class":121},[115,5744,5604],{"class":230},[115,5746,1169],{"class":121},[115,5748,1192],{"class":125},[115,5750,5751,5753,5756],{"class":117,"line":1195},[115,5752,4090],{"class":121},[115,5754,5755],{"class":174}," 100",[115,5757,1291],{"class":125},[115,5759,5760],{"class":117,"line":1201},[115,5761,1565],{"class":125},[115,5763,5764,5766,5768],{"class":117,"line":1215},[115,5765,129],{"class":121},[115,5767,1973],{"class":1963},[115,5769,1976],{"class":125},[115,5771,5772],{"class":117,"line":1221},[115,5773,1546],{"class":125},[115,5775,5776,5778,5780,5782,5785],{"class":117,"line":1312},[115,5777,1985],{"class":121},[115,5779,5218],{"class":125},[115,5781,171],{"class":121},[115,5783,5784],{"class":1963},"test03",[115,5786,5637],{"class":125},[115,5788,5789,5791,5793,5795,5797,5799,5801,5803],{"class":117,"line":1318},[115,5790,1551],{"class":125},[115,5792,1169],{"class":121},[115,5794,5408],{"class":230},[115,5796,1169],{"class":121},[115,5798,5243],{"class":125},[115,5800,1169],{"class":121},[115,5802,1239],{"class":125},[115,5804,5805],{"class":184}," \u002F\u002F100\n",[115,5807,5808],{"class":117,"line":1330},[115,5809,1565],{"class":125},[14,5811,5812],{},"4.有参有返",[106,5814,5816],{"className":108,"code":5815,"language":110,"meta":22,"style":22},"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",[112,5817,5818,5833,5837,5850,5856,5860,5869,5873,5885,5899,5914],{"__ignoreMap":22},[115,5819,5820,5822,5825,5827,5829,5831],{"class":117,"line":118},[115,5821,129],{"class":121},[115,5823,5824],{"class":1963}," test04",[115,5826,126],{"class":125},[115,5828,129],{"class":121},[115,5830,1399],{"class":5217},[115,5832,132],{"class":125},[115,5834,5835],{"class":117,"line":37},[115,5836,1546],{"class":125},[115,5838,5839,5841,5843,5846,5848],{"class":117,"line":1180},[115,5840,1551],{"class":125},[115,5842,1169],{"class":121},[115,5844,5845],{"class":230},"\"hello\"",[115,5847,1169],{"class":121},[115,5849,1192],{"class":125},[115,5851,5852,5854],{"class":117,"line":1195},[115,5853,4090],{"class":121},[115,5855,1433],{"class":125},[115,5857,5858],{"class":117,"line":1201},[115,5859,1565],{"class":125},[115,5861,5862,5864,5867],{"class":117,"line":1215},[115,5863,129],{"class":121},[115,5865,5866],{"class":1963}," mian",[115,5868,1976],{"class":125},[115,5870,5871],{"class":117,"line":1221},[115,5872,1546],{"class":125},[115,5874,5875,5877,5879,5881,5883],{"class":117,"line":1312},[115,5876,1985],{"class":121},[115,5878,2833],{"class":125},[115,5880,171],{"class":121},[115,5882,343],{"class":174},[115,5884,1291],{"class":125},[115,5886,5887,5889,5891,5893,5896],{"class":117,"line":1318},[115,5888,1985],{"class":121},[115,5890,2849],{"class":125},[115,5892,171],{"class":121},[115,5894,5895],{"class":1963},"test04",[115,5897,5898],{"class":125},"(b);\n",[115,5900,5901,5903,5905,5907,5909,5911],{"class":117,"line":1330},[115,5902,1551],{"class":125},[115,5904,1169],{"class":121},[115,5906,413],{"class":125},[115,5908,1169],{"class":121},[115,5910,1239],{"class":125},[115,5912,5913],{"class":184}," \u002F\u002F1\n",[115,5915,5916],{"class":117,"line":1612},[115,5917,1565],{"class":125},[57,5919,5921],{"id":5920},"_25函数的声明","2.5函数的声明",[14,5923,5924],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5926,5927,5928],{},"函数的",[275,5929,5930],{},"声明可以多次，但是函数的定义只能有一次",[106,5932,5934],{"className":108,"code":5933,"language":110,"meta":22,"style":22},"\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",[112,5935,5936,5941,5946,5971,5980,5984,5996,6008,6024,6028,6048,6052,6071],{"__ignoreMap":22},[115,5937,5938],{"class":117,"line":118},[115,5939,5940],{"class":184},"\u002F\u002F函数声明\n",[115,5942,5943],{"class":117,"line":37},[115,5944,5945],{"class":184},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[115,5947,5948,5950,5953,5955,5957,5959,5961,5963,5965,5968],{"class":117,"line":1180},[115,5949,129],{"class":121},[115,5951,5952],{"class":1963}," max",[115,5954,126],{"class":125},[115,5956,129],{"class":121},[115,5958,1399],{"class":5217},[115,5960,503],{"class":125},[115,5962,129],{"class":121},[115,5964,2833],{"class":5217},[115,5966,5967],{"class":125},");",[115,5969,5970],{"class":184},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[115,5972,5973,5975,5977],{"class":117,"line":1195},[115,5974,129],{"class":121},[115,5976,1973],{"class":1963},[115,5978,5979],{"class":125},"() \n",[115,5981,5982],{"class":117,"line":1201},[115,5983,1546],{"class":125},[115,5985,5986,5988,5990,5992,5994],{"class":117,"line":1215},[115,5987,1985],{"class":121},[115,5989,1399],{"class":125},[115,5991,171],{"class":121},[115,5993,571],{"class":174},[115,5995,1291],{"class":125},[115,5997,5998,6000,6002,6004,6006],{"class":117,"line":1221},[115,5999,1985],{"class":121},[115,6001,2833],{"class":125},[115,6003,171],{"class":121},[115,6005,825],{"class":174},[115,6007,1291],{"class":125},[115,6009,6010,6012,6014,6017,6020,6022],{"class":117,"line":1312},[115,6011,1551],{"class":125},[115,6013,1169],{"class":121},[115,6015,6016],{"class":1963},"max",[115,6018,6019],{"class":125},"(a,b)",[115,6021,1169],{"class":121},[115,6023,1192],{"class":125},[115,6025,6026],{"class":117,"line":1318},[115,6027,1565],{"class":125},[115,6029,6030,6032,6034,6036,6038,6040,6042,6044,6046],{"class":117,"line":1330},[115,6031,129],{"class":121},[115,6033,5952],{"class":1963},[115,6035,126],{"class":125},[115,6037,129],{"class":121},[115,6039,1399],{"class":5217},[115,6041,503],{"class":125},[115,6043,129],{"class":121},[115,6045,2833],{"class":5217},[115,6047,132],{"class":125},[115,6049,6050],{"class":117,"line":1612},[115,6051,1546],{"class":125},[115,6053,6054,6056,6058,6060,6062,6064,6066,6068],{"class":117,"line":1617},[115,6055,4090],{"class":121},[115,6057,1399],{"class":125},[115,6059,1085],{"class":121},[115,6061,388],{"class":125},[115,6063,1111],{"class":121},[115,6065,27],{"class":125},[115,6067,984],{"class":121},[115,6069,6070],{"class":125},"b;\n",[115,6072,6073],{"class":117,"line":1623},[115,6074,1565],{"class":125},[57,6076,6078],{"id":6077},"_26函数的分文件编写","2.6函数的分文件编写",[14,6080,6081],{},"4个步骤：",[1132,6083,6084,6087,6090,6093],{},[72,6085,6086],{},"1.创建后缀名为.h的头文件",[72,6088,6089],{},"2.创建后缀名为.cpp的源文件",[72,6091,6092],{},"3.在头文件中写函数的定义",[72,6094,6095],{},"4.在源文件中写函数的定义\n示例：",[14,6097,6098],{},"头文件：swap.h",[106,6100,6102],{"className":108,"code":6101,"language":110,"meta":22,"style":22},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[112,6103,6104,6110,6120,6124],{"__ignoreMap":22},[115,6105,6106,6108],{"class":117,"line":118},[115,6107,1949],{"class":121},[115,6109,1952],{"class":230},[115,6111,6112,6114,6116,6118],{"class":117,"line":37},[115,6113,1957],{"class":121},[115,6115,1960],{"class":121},[115,6117,1964],{"class":1963},[115,6119,1291],{"class":125},[115,6121,6122],{"class":117,"line":1180},[115,6123,5940],{"class":184},[115,6125,6126,6128,6130,6132,6134,6136,6138,6140,6142],{"class":117,"line":1195},[115,6127,5365],{"class":121},[115,6129,5368],{"class":1963},[115,6131,126],{"class":125},[115,6133,129],{"class":121},[115,6135,1399],{"class":5217},[115,6137,503],{"class":125},[115,6139,129],{"class":121},[115,6141,2833],{"class":5217},[115,6143,2719],{"class":125},[14,6145,6146],{},"源文件：swap.cpp",[106,6148,6150],{"className":108,"code":6149,"language":110,"meta":22,"style":22},"#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",[112,6151,6152,6159,6164,6184,6188,6199,6208,6217,6234,6251],{"__ignoreMap":22},[115,6153,6154,6156],{"class":117,"line":118},[115,6155,1949],{"class":121},[115,6157,6158],{"class":230}," \"swap.h\"\n",[115,6160,6161],{"class":117,"line":37},[115,6162,6163],{"class":184},"\u002F\u002F函数的定义\n",[115,6165,6166,6168,6170,6172,6174,6176,6178,6180,6182],{"class":117,"line":1180},[115,6167,5365],{"class":121},[115,6169,5368],{"class":1963},[115,6171,126],{"class":125},[115,6173,129],{"class":121},[115,6175,1399],{"class":5217},[115,6177,503],{"class":125},[115,6179,129],{"class":121},[115,6181,2833],{"class":5217},[115,6183,132],{"class":125},[115,6185,6186],{"class":117,"line":1195},[115,6187,1546],{"class":125},[115,6189,6190,6192,6194,6196],{"class":117,"line":1201},[115,6191,1985],{"class":121},[115,6193,4255],{"class":125},[115,6195,171],{"class":121},[115,6197,6198],{"class":125},"a;\n",[115,6200,6201,6204,6206],{"class":117,"line":1215},[115,6202,6203],{"class":125},"    a",[115,6205,171],{"class":121},[115,6207,6070],{"class":125},[115,6209,6210,6213,6215],{"class":117,"line":1221},[115,6211,6212],{"class":125},"    b",[115,6214,171],{"class":121},[115,6216,4280],{"class":125},[115,6218,6219,6221,6223,6226,6228,6230,6232],{"class":117,"line":1312},[115,6220,1551],{"class":125},[115,6222,1169],{"class":121},[115,6224,6225],{"class":230},"\"a=\"",[115,6227,1169],{"class":121},[115,6229,27],{"class":125},[115,6231,1169],{"class":121},[115,6233,1192],{"class":125},[115,6235,6236,6238,6240,6243,6245,6247,6249],{"class":117,"line":1318},[115,6237,1551],{"class":125},[115,6239,1169],{"class":121},[115,6241,6242],{"class":230},"\"b=\"",[115,6244,1169],{"class":121},[115,6246,388],{"class":125},[115,6248,1169],{"class":121},[115,6250,1192],{"class":125},[115,6252,6253],{"class":117,"line":1330},[115,6254,1565],{"class":125},[5127,6256,6257],{},"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":22,"searchDepth":37,"depth":37,"links":6259},[6260,6261,6262,6263,6264,6265],{"id":5173,"depth":37,"text":5174},{"id":5262,"depth":37,"text":5263},{"id":5345,"depth":37,"text":5346},{"id":5571,"depth":37,"text":5572},{"id":5920,"depth":37,"text":5921},{"id":6077,"depth":37,"text":6078},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5165,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6272,"title":6273,"body":6274,"description":6281,"extension":40,"meta":7686,"navigation":42,"path":7687,"seo":7688,"stem":7689,"__hash__":7690},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6275,"toc":7676},[6276,6279,6282,6286,6448,6452,6455,6458,6461,6464,6604,6608,6611,6614,6617,6682,6686,6691,6758,6761,6765,6768,6779,6784,6804,6807,6812,6831,6834,6838,6857,6860,6864,7099,7103,7106,7109,7112,7274,7277,7281,7284,7290,7673],[10,6277,6273],{"id":6278},"_3指针",[14,6280,6281],{},"通过指针保存一个地址，指针就是个地址",[57,6283,6285],{"id":6284},"_31定义指针","3.1定义指针",[106,6287,6289],{"className":108,"code":6288,"language":110,"meta":22,"style":22},"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",[112,6290,6291,6299,6303,6308,6320,6325,6333,6343,6361,6381,6385,6390,6395,6400,6414,6430,6444],{"__ignoreMap":22},[115,6292,6293,6295,6297],{"class":117,"line":118},[115,6294,129],{"class":121},[115,6296,1973],{"class":1963},[115,6298,1976],{"class":125},[115,6300,6301],{"class":117,"line":37},[115,6302,1546],{"class":125},[115,6304,6305],{"class":117,"line":1180},[115,6306,6307],{"class":184},"    \u002F\u002F1.定义指针\n",[115,6309,6310,6312,6314,6316,6318],{"class":117,"line":1195},[115,6311,1985],{"class":121},[115,6313,1399],{"class":125},[115,6315,171],{"class":121},[115,6317,571],{"class":174},[115,6319,1291],{"class":125},[115,6321,6322],{"class":117,"line":1201},[115,6323,6324],{"class":184},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[115,6326,6327,6330],{"class":117,"line":1215},[115,6328,6329],{"class":121},"    int*",[115,6331,6332],{"class":125},"p;\n",[115,6334,6335,6338,6341],{"class":117,"line":1221},[115,6336,6337],{"class":125},"    p",[115,6339,6340],{"class":121},"=&",[115,6342,6198],{"class":125},[115,6344,6345,6347,6349,6352,6355,6357,6359],{"class":117,"line":1312},[115,6346,1551],{"class":125},[115,6348,1169],{"class":121},[115,6350,6351],{"class":230},"\"a的地址为：\"",[115,6353,6354],{"class":121},"\u003C\u003C&",[115,6356,27],{"class":125},[115,6358,1169],{"class":121},[115,6360,1192],{"class":125},[115,6362,6363,6365,6367,6370,6372,6374,6376,6378],{"class":117,"line":1318},[115,6364,1551],{"class":125},[115,6366,1169],{"class":121},[115,6368,6369],{"class":230},"\"指针p为：\"",[115,6371,1169],{"class":121},[115,6373,14],{"class":125},[115,6375,1169],{"class":121},[115,6377,1239],{"class":125},[115,6379,6380],{"class":184},"\u002F\u002F指针p表示的就是a的地址\n",[115,6382,6383],{"class":117,"line":1330},[115,6384,2400],{"emptyLinePlaceholder":42},[115,6386,6387],{"class":117,"line":1612},[115,6388,6389],{"class":184},"    \u002F\u002F2.使用指针\n",[115,6391,6392],{"class":117,"line":1617},[115,6393,6394],{"class":184},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[115,6396,6397],{"class":117,"line":1623},[115,6398,6399],{"class":184},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[115,6401,6402,6405,6407,6409,6412],{"class":117,"line":1628},[115,6403,6404],{"class":121},"    *",[115,6406,14],{"class":125},[115,6408,171],{"class":121},[115,6410,6411],{"class":174},"1000",[115,6413,1291],{"class":125},[115,6415,6416,6418,6421,6423,6425,6427],{"class":117,"line":1642},[115,6417,1551],{"class":125},[115,6419,6420],{"class":121},"\u003C\u003C*",[115,6422,14],{"class":125},[115,6424,1169],{"class":121},[115,6426,1239],{"class":125},[115,6428,6429],{"class":184},"\u002F\u002F1000\n",[115,6431,6432,6434,6436,6438,6440,6442],{"class":117,"line":1647},[115,6433,1551],{"class":125},[115,6435,1169],{"class":121},[115,6437,27],{"class":125},[115,6439,1169],{"class":121},[115,6441,1239],{"class":125},[115,6443,6429],{"class":184},[115,6445,6446],{"class":117,"line":1653},[115,6447,1565],{"class":125},[57,6449,6451],{"id":6450},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6453,6454],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6456,6457],{},"在32位操作系统下：占用4个字节空间",[14,6459,6460],{},"在64位操作系统下：占用8个字节空间",[14,6462,6463],{},"上方是不管啥数据类型的",[106,6465,6467],{"className":108,"code":6466,"language":110,"meta":22,"style":22},"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",[112,6468,6469,6477,6481,6486,6498,6503,6508,6513,6526,6548,6574,6600],{"__ignoreMap":22},[115,6470,6471,6473,6475],{"class":117,"line":118},[115,6472,129],{"class":121},[115,6474,1973],{"class":1963},[115,6476,1976],{"class":125},[115,6478,6479],{"class":117,"line":37},[115,6480,1546],{"class":125},[115,6482,6483],{"class":117,"line":1180},[115,6484,6485],{"class":184},"    \u002F\u002F指针所占内存空间\n",[115,6487,6488,6490,6492,6494,6496],{"class":117,"line":1195},[115,6489,1985],{"class":121},[115,6491,1399],{"class":125},[115,6493,171],{"class":121},[115,6495,571],{"class":174},[115,6497,1291],{"class":125},[115,6499,6500],{"class":117,"line":1201},[115,6501,6502],{"class":184},"    \u002F\u002Fint *p;\n",[115,6504,6505],{"class":117,"line":1215},[115,6506,6507],{"class":184},"    \u002F\u002Fp=&a;\n",[115,6509,6510],{"class":117,"line":1221},[115,6511,6512],{"class":184},"    \u002F\u002F上述可以写为以下：\n",[115,6514,6515,6517,6520,6522,6524],{"class":117,"line":1312},[115,6516,1985],{"class":121},[115,6518,6519],{"class":121}," *",[115,6521,14],{"class":125},[115,6523,6340],{"class":121},[115,6525,6198],{"class":125},[115,6527,6528,6531,6533,6536,6538,6541,6543,6545],{"class":117,"line":1318},[115,6529,6530],{"class":125},"    cout ",[115,6532,1169],{"class":121},[115,6534,6535],{"class":230},"\"sizeof(int *)\"",[115,6537,1373],{"class":121},[115,6539,6540],{"class":125},"(p)",[115,6542,1169],{"class":121},[115,6544,1239],{"class":125},[115,6546,6547],{"class":184},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[115,6549,6550,6552,6554,6556,6558,6560,6562,6564,6566,6568,6571],{"class":117,"line":1330},[115,6551,6530],{"class":125},[115,6553,1169],{"class":121},[115,6555,6535],{"class":230},[115,6557,1373],{"class":121},[115,6559,126],{"class":125},[115,6561,129],{"class":121},[115,6563,6519],{"class":121},[115,6565,554],{"class":125},[115,6567,1169],{"class":121},[115,6569,6570],{"class":125},"endl",[115,6572,6573],{"class":184},"  \u002F\u002F4字节(32位的话)\n",[115,6575,6576,6578,6580,6583,6585,6587,6589,6591,6593,6595,6597],{"class":117,"line":1612},[115,6577,6530],{"class":125},[115,6579,1169],{"class":121},[115,6581,6582],{"class":230},"\"sizeof(char *)\"",[115,6584,1373],{"class":121},[115,6586,126],{"class":125},[115,6588,222],{"class":121},[115,6590,6519],{"class":121},[115,6592,554],{"class":125},[115,6594,1169],{"class":121},[115,6596,1239],{"class":125},[115,6598,6599],{"class":184}," \u002F\u002F4字节(32位的话)\n",[115,6601,6602],{"class":117,"line":1617},[115,6603,1565],{"class":125},[57,6605,6607],{"id":6606},"_33空指针","3.3空指针",[14,6609,6610],{},"空指针：指针变量指向内存中编号为0的空间",[14,6612,6613],{},"用途：初始化指针变量",[14,6615,6616],{},"注意：空指针指向的内存是不可以访问的",[106,6618,6620],{"className":108,"code":6619,"language":110,"meta":22,"style":22},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[112,6621,6622,6630,6634,6639,6653,6658,6673,6678],{"__ignoreMap":22},[115,6623,6624,6626,6628],{"class":117,"line":118},[115,6625,129],{"class":121},[115,6627,1973],{"class":1963},[115,6629,1976],{"class":125},[115,6631,6632],{"class":117,"line":37},[115,6633,1546],{"class":125},[115,6635,6636],{"class":117,"line":1180},[115,6637,6638],{"class":184},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[115,6640,6641,6643,6645,6647,6649,6651],{"class":117,"line":1195},[115,6642,1985],{"class":121},[115,6644,6519],{"class":121},[115,6646,14],{"class":125},[115,6648,171],{"class":121},[115,6650,2392],{"class":174},[115,6652,1291],{"class":125},[115,6654,6655],{"class":117,"line":1201},[115,6656,6657],{"class":184},"    \u002F\u002F2.空指针不能进行访问\n",[115,6659,6660,6662,6664,6666,6668,6670],{"class":117,"line":1215},[115,6661,6404],{"class":121},[115,6663,14],{"class":125},[115,6665,171],{"class":121},[115,6667,436],{"class":174},[115,6669,181],{"class":125},[115,6671,6672],{"class":184},"\u002F\u002F直接报错，压根不能访问\n",[115,6674,6675],{"class":117,"line":1221},[115,6676,6677],{"class":184},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[115,6679,6680],{"class":117,"line":1312},[115,6681,1565],{"class":125},[57,6683,6685],{"id":6684},"_34野指针","3.4野指针",[14,6687,6688],{},[275,6689,6690],{},"指针变量指向非法的内存空间",[106,6692,6694],{"className":108,"code":6693,"language":110,"meta":22,"style":22},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[112,6695,6696,6704,6708,6737,6742,6754],{"__ignoreMap":22},[115,6697,6698,6700,6702],{"class":117,"line":118},[115,6699,129],{"class":121},[115,6701,1973],{"class":1963},[115,6703,1976],{"class":125},[115,6705,6706],{"class":117,"line":37},[115,6707,1546],{"class":125},[115,6709,6710,6712,6714,6716,6718,6720,6722,6724,6726,6729,6732,6734],{"class":117,"line":1180},[115,6711,1985],{"class":121},[115,6713,6519],{"class":121},[115,6715,14],{"class":125},[115,6717,171],{"class":121},[115,6719,126],{"class":125},[115,6721,129],{"class":121},[115,6723,6519],{"class":121},[115,6725,554],{"class":125},[115,6727,6728],{"class":121},"0x",[115,6730,6731],{"class":174},"1100",[115,6733,181],{"class":125},[115,6735,6736],{"class":184}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[115,6738,6739],{"class":117,"line":1195},[115,6740,6741],{"class":184},"    \u002F\u002F访问野指针报错\n",[115,6743,6744,6746,6748,6750,6752],{"class":117,"line":1201},[115,6745,1551],{"class":125},[115,6747,6420],{"class":121},[115,6749,14],{"class":125},[115,6751,1169],{"class":121},[115,6753,1192],{"class":125},[115,6755,6756],{"class":117,"line":1215},[115,6757,1565],{"class":125},[14,6759,6760],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[57,6762,6764],{"id":6763},"_35const修饰指针","3.5const修饰指针",[14,6766,6767],{},"三种情况：",[1132,6769,6770,6773,6776],{},[72,6771,6772],{},"const修饰指针 常量指针",[72,6774,6775],{},"const修饰常量 指针常量",[72,6777,6778],{},"const即修饰指针，又修饰常量",[69,6780,6781],{},[72,6782,6783],{},"常量指针",[106,6785,6787],{"className":108,"code":6786,"language":110,"meta":22,"style":22},"const int *p=&a;\n",[112,6788,6789],{"__ignoreMap":22},[115,6790,6791,6794,6796,6798,6800,6802],{"class":117,"line":118},[115,6792,6793],{"class":121},"const",[115,6795,2382],{"class":121},[115,6797,6519],{"class":121},[115,6799,14],{"class":125},[115,6801,6340],{"class":121},[115,6803,6198],{"class":125},[14,6805,6806],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[69,6808,6809],{"start":37},[72,6810,6811],{},"指针常量",[106,6813,6815],{"className":108,"code":6814,"language":110,"meta":22,"style":22},"int *const p=&a;\n",[112,6816,6817],{"__ignoreMap":22},[115,6818,6819,6821,6824,6827,6829],{"class":117,"line":118},[115,6820,129],{"class":121},[115,6822,6823],{"class":121}," *const",[115,6825,6826],{"class":125}," p",[115,6828,6340],{"class":121},[115,6830,6198],{"class":125},[14,6832,6833],{},"指针的指向不可以改，指针指向的值可以改",[69,6835,6836],{"start":1180},[72,6837,6778],{},[106,6839,6841],{"className":108,"code":6840,"language":110,"meta":22,"style":22},"const int *const p=&a;\n",[112,6842,6843],{"__ignoreMap":22},[115,6844,6845,6847,6849,6851,6853,6855],{"class":117,"line":118},[115,6846,6793],{"class":121},[115,6848,2382],{"class":121},[115,6850,6823],{"class":121},[115,6852,6826],{"class":125},[115,6854,6340],{"class":121},[115,6856,6198],{"class":125},[14,6858,6859],{},"指针的指向和指针指向的值都不可以改变",[57,6861,6863],{"id":6862},"_36指针和数组","3.6指针和数组",[106,6865,6867],{"className":108,"code":6866,"language":110,"meta":22,"style":22},"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",[112,6868,6869,6877,6881,6886,6940,6961,6977,6993,7004,7021,7026,7040,7066,7070,7082,7091,7095],{"__ignoreMap":22},[115,6870,6871,6873,6875],{"class":117,"line":118},[115,6872,129],{"class":121},[115,6874,1973],{"class":1963},[115,6876,1976],{"class":125},[115,6878,6879],{"class":117,"line":37},[115,6880,1546],{"class":125},[115,6882,6883],{"class":117,"line":1180},[115,6884,6885],{"class":184},"    \u002F\u002F利用指针访问数组中的元素\n",[115,6887,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938],{"class":117,"line":1195},[115,6889,1985],{"class":121},[115,6891,3962],{"class":125},[115,6893,571],{"class":174},[115,6895,1065],{"class":125},[115,6897,171],{"class":121},[115,6899,1021],{"class":125},[115,6901,343],{"class":174},[115,6903,503],{"class":125},[115,6905,203],{"class":174},[115,6907,503],{"class":125},[115,6909,197],{"class":174},[115,6911,503],{"class":125},[115,6913,418],{"class":174},[115,6915,503],{"class":125},[115,6917,444],{"class":174},[115,6919,503],{"class":125},[115,6921,469],{"class":174},[115,6923,503],{"class":125},[115,6925,494],{"class":174},[115,6927,503],{"class":125},[115,6929,520],{"class":174},[115,6931,503],{"class":125},[115,6933,545],{"class":174},[115,6935,503],{"class":125},[115,6937,571],{"class":174},[115,6939,3995],{"class":125},[115,6941,6942,6944,6946,6949,6951,6953,6955,6957,6959],{"class":117,"line":1201},[115,6943,1551],{"class":125},[115,6945,1169],{"class":121},[115,6947,6948],{"class":230},"\"数组的第一个元素为：\"",[115,6950,1169],{"class":121},[115,6952,3906],{"class":125},[115,6954,317],{"class":174},[115,6956,1065],{"class":125},[115,6958,1169],{"class":121},[115,6960,1192],{"class":125},[115,6962,6963,6965,6967,6969,6971,6974],{"class":117,"line":1215},[115,6964,1985],{"class":121},[115,6966,6519],{"class":121},[115,6968,14],{"class":125},[115,6970,171],{"class":121},[115,6972,6973],{"class":125},"arr;",[115,6975,6976],{"class":184},"\u002F\u002F注意数才要加取地址符号&\n",[115,6978,6979,6981,6983,6985,6987,6989,6991],{"class":117,"line":1221},[115,6980,1551],{"class":125},[115,6982,1169],{"class":121},[115,6984,6948],{"class":230},[115,6986,6420],{"class":121},[115,6988,14],{"class":125},[115,6990,1169],{"class":121},[115,6992,1192],{"class":125},[115,6994,6995,6997,6999,7001],{"class":117,"line":1312},[115,6996,6337],{"class":125},[115,6998,2292],{"class":121},[115,7000,181],{"class":125},[115,7002,7003],{"class":184}," \u002F\u002F让指针向后偏移4个字节\n",[115,7005,7006,7008,7010,7013,7015,7017,7019],{"class":117,"line":1318},[115,7007,1551],{"class":125},[115,7009,1169],{"class":121},[115,7011,7012],{"class":230},"\"数组的第二个元素为：\"",[115,7014,6420],{"class":121},[115,7016,14],{"class":125},[115,7018,1169],{"class":121},[115,7020,1192],{"class":125},[115,7022,7023],{"class":117,"line":1330},[115,7024,7025],{"class":184},"    \u002F\u002F利用指针遍历数组\n",[115,7027,7028,7030,7032,7035,7037],{"class":117,"line":1612},[115,7029,1985],{"class":121},[115,7031,6519],{"class":121},[115,7033,7034],{"class":125},"p2",[115,7036,171],{"class":121},[115,7038,7039],{"class":125},"arr;\n",[115,7041,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064],{"class":117,"line":1617},[115,7043,3201],{"class":121},[115,7045,1658],{"class":125},[115,7047,129],{"class":121},[115,7049,3032],{"class":125},[115,7051,171],{"class":121},[115,7053,317],{"class":174},[115,7055,3039],{"class":125},[115,7057,1035],{"class":121},[115,7059,571],{"class":174},[115,7061,3039],{"class":125},[115,7063,2292],{"class":121},[115,7065,132],{"class":125},[115,7067,7068],{"class":117,"line":1623},[115,7069,2030],{"class":125},[115,7071,7072,7074,7076,7078,7080],{"class":117,"line":1628},[115,7073,3451],{"class":125},[115,7075,6420],{"class":121},[115,7077,7034],{"class":125},[115,7079,1169],{"class":121},[115,7081,1192],{"class":125},[115,7083,7084,7087,7089],{"class":117,"line":1642},[115,7085,7086],{"class":125},"        p2",[115,7088,2292],{"class":121},[115,7090,1291],{"class":125},[115,7092,7093],{"class":117,"line":1647},[115,7094,2187],{"class":125},[115,7096,7097],{"class":117,"line":1653},[115,7098,1565],{"class":125},[57,7100,7102],{"id":7101},"_37指针和函数","3.7指针和函数",[14,7104,7105],{},"利用指针做函数参数，可以修改实参的值",[14,7107,7108],{},"值传递：只改变形参，不改变实参",[14,7110,7111],{},"地址传递：",[106,7113,7115],{"className":108,"code":7114,"language":110,"meta":22,"style":22},"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",[112,7116,7117,7142,7146,7158,7169,7179,7183,7191,7195,7207,7219,7224,7240,7255,7270],{"__ignoreMap":22},[115,7118,7119,7121,7123,7125,7127,7129,7132,7134,7136,7138,7140],{"class":117,"line":118},[115,7120,5365],{"class":121},[115,7122,5368],{"class":1963},[115,7124,126],{"class":125},[115,7126,129],{"class":121},[115,7128,6519],{"class":121},[115,7130,7131],{"class":5217},"p1",[115,7133,503],{"class":125},[115,7135,129],{"class":121},[115,7137,6519],{"class":121},[115,7139,7034],{"class":5217},[115,7141,132],{"class":125},[115,7143,7144],{"class":117,"line":37},[115,7145,1546],{"class":125},[115,7147,7148,7150,7152,7155],{"class":117,"line":1180},[115,7149,1985],{"class":121},[115,7151,4255],{"class":125},[115,7153,7154],{"class":121},"=*",[115,7156,7157],{"class":125},"p1;\n",[115,7159,7160,7162,7164,7166],{"class":117,"line":1195},[115,7161,6404],{"class":121},[115,7163,7131],{"class":125},[115,7165,7154],{"class":121},[115,7167,7168],{"class":125},"p2;\n",[115,7170,7171,7173,7175,7177],{"class":117,"line":1201},[115,7172,6404],{"class":121},[115,7174,7034],{"class":125},[115,7176,171],{"class":121},[115,7178,4280],{"class":125},[115,7180,7181],{"class":117,"line":1215},[115,7182,1565],{"class":125},[115,7184,7185,7187,7189],{"class":117,"line":1221},[115,7186,129],{"class":121},[115,7188,1973],{"class":1963},[115,7190,1976],{"class":125},[115,7192,7193],{"class":117,"line":1312},[115,7194,1546],{"class":125},[115,7196,7197,7199,7201,7203,7205],{"class":117,"line":1318},[115,7198,1985],{"class":121},[115,7200,1399],{"class":125},[115,7202,171],{"class":121},[115,7204,571],{"class":174},[115,7206,1291],{"class":125},[115,7208,7209,7211,7213,7215,7217],{"class":117,"line":1330},[115,7210,1985],{"class":121},[115,7212,2833],{"class":125},[115,7214,171],{"class":121},[115,7216,825],{"class":174},[115,7218,1291],{"class":125},[115,7220,7221],{"class":117,"line":1612},[115,7222,7223],{"class":184},"    \u002F\u002F地址传递\n",[115,7225,7226,7228,7230,7232,7235,7237],{"class":117,"line":1617},[115,7227,5562],{"class":1963},[115,7229,126],{"class":125},[115,7231,478],{"class":121},[115,7233,7234],{"class":125},"a,",[115,7236,478],{"class":121},[115,7238,7239],{"class":125},"b);\n",[115,7241,7242,7244,7246,7248,7250,7252],{"class":117,"line":1623},[115,7243,1551],{"class":125},[115,7245,1169],{"class":121},[115,7247,27],{"class":125},[115,7249,1169],{"class":121},[115,7251,1239],{"class":125},[115,7253,7254],{"class":184},"\u002F\u002F20\n",[115,7256,7257,7259,7261,7263,7265,7267],{"class":117,"line":1628},[115,7258,1551],{"class":125},[115,7260,1169],{"class":121},[115,7262,388],{"class":125},[115,7264,1169],{"class":121},[115,7266,1239],{"class":125},[115,7268,7269],{"class":184},"\u002F\u002F10\n",[115,7271,7272],{"class":117,"line":1642},[115,7273,1565],{"class":125},[14,7275,7276],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[57,7278,7280],{"id":7279},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7282,7283],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7285,7286,7287,7289],{},"例如数组：int arr",[115,7288,571],{},"={4,3,6,9,1,2,10,8,7,5}",[106,7291,7293],{"className":108,"code":7292,"language":110,"meta":22,"style":22},"#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",[112,7294,7295,7301,7311,7335,7339,7370,7374,7408,7412,7430,7434,7445,7460,7475,7479,7483,7487,7491,7495,7503,7507,7512,7566,7578,7590,7595,7603,7607,7612,7637,7641,7656,7665,7669],{"__ignoreMap":22},[115,7296,7297,7299],{"class":117,"line":118},[115,7298,1949],{"class":121},[115,7300,1952],{"class":230},[115,7302,7303,7305,7307,7309],{"class":117,"line":37},[115,7304,1957],{"class":121},[115,7306,1960],{"class":121},[115,7308,1964],{"class":1963},[115,7310,1291],{"class":125},[115,7312,7313,7315,7318,7320,7322,7324,7326,7328,7330,7333],{"class":117,"line":1180},[115,7314,5365],{"class":121},[115,7316,7317],{"class":1963}," bubbleSort",[115,7319,126],{"class":125},[115,7321,129],{"class":121},[115,7323,6519],{"class":121},[115,7325,14],{"class":5217},[115,7327,503],{"class":125},[115,7329,129],{"class":121},[115,7331,7332],{"class":5217}," len",[115,7334,132],{"class":125},[115,7336,7337],{"class":117,"line":1195},[115,7338,1546],{"class":125},[115,7340,7341,7343,7345,7347,7349,7351,7353,7355,7357,7360,7362,7364,7366,7368],{"class":117,"line":1201},[115,7342,3201],{"class":121},[115,7344,126],{"class":125},[115,7346,129],{"class":121},[115,7348,3032],{"class":125},[115,7350,171],{"class":121},[115,7352,317],{"class":174},[115,7354,3039],{"class":125},[115,7356,1035],{"class":121},[115,7358,7359],{"class":125},"len",[115,7361,657],{"class":121},[115,7363,343],{"class":174},[115,7365,3039],{"class":125},[115,7367,2292],{"class":121},[115,7369,132],{"class":125},[115,7371,7372],{"class":117,"line":1215},[115,7373,2030],{"class":125},[115,7375,7376,7378,7380,7382,7384,7386,7388,7390,7392,7394,7396,7398,7400,7402,7404,7406],{"class":117,"line":1221},[115,7377,3403],{"class":121},[115,7379,126],{"class":125},[115,7381,129],{"class":121},[115,7383,3410],{"class":125},[115,7385,171],{"class":121},[115,7387,317],{"class":174},[115,7389,3417],{"class":125},[115,7391,1035],{"class":121},[115,7393,7359],{"class":125},[115,7395,657],{"class":121},[115,7397,566],{"class":125},[115,7399,657],{"class":121},[115,7401,343],{"class":174},[115,7403,3417],{"class":125},[115,7405,2292],{"class":121},[115,7407,132],{"class":125},[115,7409,7410],{"class":117,"line":1312},[115,7411,2510],{"class":125},[115,7413,7414,7416,7419,7421,7424,7426,7428],{"class":117,"line":1318},[115,7415,4642],{"class":121},[115,7417,7418],{"class":125},"(p[j]",[115,7420,1085],{"class":121},[115,7422,7423],{"class":125},"p[j",[115,7425,606],{"class":121},[115,7427,343],{"class":174},[115,7429,4657],{"class":125},[115,7431,7432],{"class":117,"line":1330},[115,7433,4662],{"class":125},[115,7435,7436,7438,7440,7442],{"class":117,"line":1612},[115,7437,4667],{"class":121},[115,7439,4255],{"class":125},[115,7441,171],{"class":121},[115,7443,7444],{"class":125},"p[j];\n",[115,7446,7447,7450,7452,7454,7456,7458],{"class":117,"line":1617},[115,7448,7449],{"class":125},"                p[j]",[115,7451,171],{"class":121},[115,7453,7423],{"class":125},[115,7455,606],{"class":121},[115,7457,343],{"class":174},[115,7459,4690],{"class":125},[115,7461,7462,7465,7467,7469,7471,7473],{"class":117,"line":1623},[115,7463,7464],{"class":125},"                p[j",[115,7466,606],{"class":121},[115,7468,343],{"class":174},[115,7470,1065],{"class":125},[115,7472,171],{"class":121},[115,7474,4280],{"class":125},[115,7476,7477],{"class":117,"line":1628},[115,7478,4710],{"class":125},[115,7480,7481],{"class":117,"line":1642},[115,7482,2529],{"class":125},[115,7484,7485],{"class":117,"line":1647},[115,7486,2187],{"class":125},[115,7488,7489],{"class":117,"line":1653},[115,7490,1565],{"class":125},[115,7492,7493],{"class":117,"line":1674},[115,7494,2400],{"emptyLinePlaceholder":42},[115,7496,7497,7499,7501],{"class":117,"line":1679},[115,7498,129],{"class":121},[115,7500,1973],{"class":1963},[115,7502,1976],{"class":125},[115,7504,7505],{"class":117,"line":1693},[115,7506,1546],{"class":125},[115,7508,7509],{"class":117,"line":1698},[115,7510,7511],{"class":184},"    \u002F\u002F 1.创建数组\n",[115,7513,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564],{"class":117,"line":1727},[115,7515,1985],{"class":121},[115,7517,3962],{"class":125},[115,7519,571],{"class":174},[115,7521,1065],{"class":125},[115,7523,171],{"class":121},[115,7525,1021],{"class":125},[115,7527,418],{"class":174},[115,7529,503],{"class":125},[115,7531,197],{"class":174},[115,7533,503],{"class":125},[115,7535,469],{"class":174},[115,7537,503],{"class":125},[115,7539,545],{"class":174},[115,7541,503],{"class":125},[115,7543,343],{"class":174},[115,7545,503],{"class":125},[115,7547,203],{"class":174},[115,7549,503],{"class":125},[115,7551,571],{"class":174},[115,7553,503],{"class":125},[115,7555,520],{"class":174},[115,7557,503],{"class":125},[115,7559,494],{"class":174},[115,7561,503],{"class":125},[115,7563,444],{"class":174},[115,7565,3995],{"class":125},[115,7567,7568,7570,7572,7574,7576],{"class":117,"line":1732},[115,7569,1985],{"class":121},[115,7571,7332],{"class":125},[115,7573,171],{"class":121},[115,7575,571],{"class":174},[115,7577,1291],{"class":125},[115,7579,7580,7582,7584,7586,7588],{"class":117,"line":1749},[115,7581,1985],{"class":121},[115,7583,6519],{"class":121},[115,7585,14],{"class":125},[115,7587,171],{"class":121},[115,7589,7039],{"class":125},[115,7591,7592],{"class":117,"line":1754},[115,7593,7594],{"class":184},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[115,7596,7597,7600],{"class":117,"line":1759},[115,7598,7599],{"class":1963},"    bubbleSort",[115,7601,7602],{"class":125},"(p,len);\n",[115,7604,7605],{"class":117,"line":1764},[115,7606,2400],{"emptyLinePlaceholder":42},[115,7608,7609],{"class":117,"line":1778},[115,7610,7611],{"class":184},"    \u002F\u002F 3.打印排序后的数组\n",[115,7613,7614,7616,7618,7620,7622,7624,7626,7628,7630,7633,7635],{"class":117,"line":1783},[115,7615,3201],{"class":121},[115,7617,1658],{"class":125},[115,7619,129],{"class":121},[115,7621,3032],{"class":125},[115,7623,171],{"class":121},[115,7625,317],{"class":174},[115,7627,3214],{"class":125},[115,7629,1035],{"class":121},[115,7631,7632],{"class":125},"len; i",[115,7634,2292],{"class":121},[115,7636,132],{"class":125},[115,7638,7639],{"class":117,"line":2577},[115,7640,2030],{"class":125},[115,7642,7643,7645,7647,7649,7651,7654],{"class":117,"line":2591},[115,7644,3451],{"class":125},[115,7646,6420],{"class":121},[115,7648,14],{"class":125},[115,7650,1169],{"class":121},[115,7652,7653],{"class":230},"\"\"",[115,7655,1291],{"class":125},[115,7657,7658,7661,7663],{"class":117,"line":2599},[115,7659,7660],{"class":125},"        p",[115,7662,2292],{"class":121},[115,7664,1291],{"class":125},[115,7666,7667],{"class":117,"line":2604},[115,7668,2187],{"class":125},[115,7670,7671],{"class":117,"line":2610},[115,7672,1565],{"class":125},[5127,7674,7675],{},"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":22,"searchDepth":37,"depth":37,"links":7677},[7678,7679,7680,7681,7682,7683,7684,7685],{"id":6284,"depth":37,"text":6285},{"id":6450,"depth":37,"text":6451},{"id":6606,"depth":37,"text":6607},{"id":6684,"depth":37,"text":6685},{"id":6763,"depth":37,"text":6764},{"id":6862,"depth":37,"text":6863},{"id":7101,"depth":37,"text":7102},{"id":7279,"depth":37,"text":7280},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6273,"description":6281},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7692,"title":7693,"body":7694,"description":7701,"extension":40,"meta":10675,"navigation":42,"path":10676,"seo":10677,"stem":10678,"__hash__":10679},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7695,"toc":10666},[7696,7699,7702,7706,7709,7712,7723,8061,8064,8068,8071,8078,8333,8337,8340,8343,8498,8502,8505,8508,8714,8718,8721,9024,9027,9035,9039,9042,9193,9195,9206,9263,9267,9272,9929,9937,9940,10034,10037,10657,10663],[10,7697,7693],{"id":7698},"_4结构体",[14,7700,7701],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[57,7703,7705],{"id":7704},"_41结构体定义与使用","4.1结构体定义与使用",[14,7707,7708],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7710,7711],{},"通过结构体创建变量的方式：",[1132,7713,7714,7717,7720],{},[72,7715,7716],{},"struct 结构体名 变量名",[72,7718,7719],{},"struct 结构体名 变量名={成员1值，成员2值...}",[72,7721,7722],{},"定义结构体时顺便创建变量",[106,7724,7726],{"className":108,"code":7725,"language":110,"meta":22,"style":22},"#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",[112,7727,7728,7734,7744,7751,7756,7764,7768,7773,7777,7782,7787,7792,7799,7804,7811,7815,7822,7826,7830,7834,7838,7842,7846,7852,7856,7862,7870,7878,7882,7887,7892,7903,7908,7920,7931,7942,7947,7971,7976,7982,8009,8014,8020,8032,8044,8056],{"__ignoreMap":22},[115,7729,7730,7732],{"class":117,"line":118},[115,7731,1949],{"class":121},[115,7733,1952],{"class":230},[115,7735,7736,7738,7740,7742],{"class":117,"line":37},[115,7737,1957],{"class":121},[115,7739,1960],{"class":121},[115,7741,1964],{"class":1963},[115,7743,1291],{"class":125},[115,7745,7746,7748],{"class":117,"line":1180},[115,7747,1949],{"class":121},[115,7749,7750],{"class":230},"\u003Cstring>\n",[115,7752,7753],{"class":117,"line":1195},[115,7754,7755],{"class":184},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[115,7757,7758,7761],{"class":117,"line":1201},[115,7759,7760],{"class":121},"struct",[115,7762,7763],{"class":1963}," Student\n",[115,7765,7766],{"class":117,"line":1215},[115,7767,1546],{"class":125},[115,7769,7770],{"class":117,"line":1221},[115,7771,7772],{"class":184},"    \u002F\u002F成员列表\n",[115,7774,7775],{"class":117,"line":1312},[115,7776,2400],{"emptyLinePlaceholder":42},[115,7778,7779],{"class":117,"line":1318},[115,7780,7781],{"class":184},"    \u002F\u002F姓名\n",[115,7783,7784],{"class":117,"line":1330},[115,7785,7786],{"class":125},"    string name;\n",[115,7788,7789],{"class":117,"line":1612},[115,7790,7791],{"class":184},"    \u002F\u002F年龄\n",[115,7793,7794,7796],{"class":117,"line":1617},[115,7795,1985],{"class":121},[115,7797,7798],{"class":125}," age;\n",[115,7800,7801],{"class":117,"line":1623},[115,7802,7803],{"class":184},"    \u002F\u002F分数\n",[115,7805,7806,7808],{"class":117,"line":1628},[115,7807,1985],{"class":121},[115,7809,7810],{"class":125}," score;\n",[115,7812,7813],{"class":117,"line":1642},[115,7814,3995],{"class":125},[115,7816,7817,7819],{"class":117,"line":1647},[115,7818,7760],{"class":121},[115,7820,7821],{"class":1963}," School\n",[115,7823,7824],{"class":117,"line":1653},[115,7825,1546],{"class":125},[115,7827,7828],{"class":117,"line":1674},[115,7829,7772],{"class":184},[115,7831,7832],{"class":117,"line":1679},[115,7833,2400],{"emptyLinePlaceholder":42},[115,7835,7836],{"class":117,"line":1693},[115,7837,7781],{"class":184},[115,7839,7840],{"class":117,"line":1698},[115,7841,7786],{"class":125},[115,7843,7844],{"class":117,"line":1727},[115,7845,7791],{"class":184},[115,7847,7848,7850],{"class":117,"line":1732},[115,7849,1985],{"class":121},[115,7851,7798],{"class":125},[115,7853,7854],{"class":117,"line":1749},[115,7855,7803],{"class":184},[115,7857,7858,7860],{"class":117,"line":1754},[115,7859,1985],{"class":121},[115,7861,7810],{"class":125},[115,7863,7864,7867],{"class":117,"line":1759},[115,7865,7866],{"class":125},"} s3;",[115,7868,7869],{"class":184}," \u002F\u002F创建结构体时就创建了变量\n",[115,7871,7872,7874,7876],{"class":117,"line":1764},[115,7873,129],{"class":121},[115,7875,1973],{"class":1963},[115,7877,1976],{"class":125},[115,7879,7880],{"class":117,"line":1778},[115,7881,1546],{"class":125},[115,7883,7884],{"class":117,"line":1783},[115,7885,7886],{"class":184},"    \u002F\u002F2.通过学生类型创建具体学生\n",[115,7888,7889],{"class":117,"line":2577},[115,7890,7891],{"class":184},"    \u002F\u002F2.1 struct Student s1;\n",[115,7893,7894,7897,7900],{"class":117,"line":2591},[115,7895,7896],{"class":121},"    struct",[115,7898,7899],{"class":1963}," Student",[115,7901,7902],{"class":125}," s1;\n",[115,7904,7905],{"class":117,"line":2599},[115,7906,7907],{"class":184},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[115,7909,7910,7913,7915,7918],{"class":117,"line":2604},[115,7911,7912],{"class":125},"    s1.name",[115,7914,171],{"class":121},[115,7916,7917],{"class":230},"\"张三\"",[115,7919,1291],{"class":125},[115,7921,7922,7925,7927,7929],{"class":117,"line":2610},[115,7923,7924],{"class":125},"    s1.age",[115,7926,171],{"class":121},[115,7928,775],{"class":174},[115,7930,1291],{"class":125},[115,7932,7933,7936,7938,7940],{"class":117,"line":2616},[115,7934,7935],{"class":125},"    s1.score",[115,7937,171],{"class":121},[115,7939,379],{"class":174},[115,7941,1291],{"class":125},[115,7943,7944],{"class":117,"line":2621},[115,7945,7946],{"class":184},"    \u002F\u002F输出结果\n",[115,7948,7950,7952,7954,7957,7959,7962,7964,7967,7969],{"class":117,"line":7949},37,[115,7951,1551],{"class":125},[115,7953,1169],{"class":121},[115,7955,7956],{"class":125},"s1.name",[115,7958,1169],{"class":121},[115,7960,7961],{"class":125},"s1.age",[115,7963,1169],{"class":121},[115,7965,7966],{"class":125},"s1.score",[115,7968,1169],{"class":121},[115,7970,1192],{"class":125},[115,7972,7974],{"class":117,"line":7973},38,[115,7975,2400],{"emptyLinePlaceholder":42},[115,7977,7979],{"class":117,"line":7978},39,[115,7980,7981],{"class":184},"    \u002F\u002F2.2 struct Student s2={...}\n",[115,7983,7985,7987,7989,7992,7994,7996,7999,8001,8003,8005,8007],{"class":117,"line":7984},40,[115,7986,7896],{"class":121},[115,7988,7899],{"class":1963},[115,7990,7991],{"class":125}," s2",[115,7993,171],{"class":121},[115,7995,1021],{"class":125},[115,7997,7998],{"class":230},"\"王五\"",[115,8000,503],{"class":125},[115,8002,775],{"class":174},[115,8004,503],{"class":125},[115,8006,379],{"class":174},[115,8008,3995],{"class":125},[115,8010,8012],{"class":117,"line":8011},41,[115,8013,2400],{"emptyLinePlaceholder":42},[115,8015,8017],{"class":117,"line":8016},42,[115,8018,8019],{"class":184},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[115,8021,8023,8026,8028,8030],{"class":117,"line":8022},43,[115,8024,8025],{"class":125},"    s3.name",[115,8027,171],{"class":121},[115,8029,3678],{"class":230},[115,8031,1291],{"class":125},[115,8033,8035,8038,8040,8042],{"class":117,"line":8034},44,[115,8036,8037],{"class":125},"    s3.age",[115,8039,171],{"class":121},[115,8041,775],{"class":174},[115,8043,1291],{"class":125},[115,8045,8047,8050,8052,8054],{"class":117,"line":8046},45,[115,8048,8049],{"class":125},"    s3.score",[115,8051,171],{"class":121},[115,8053,825],{"class":174},[115,8055,1291],{"class":125},[115,8057,8059],{"class":117,"line":8058},46,[115,8060,1565],{"class":125},[14,8062,8063],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[57,8065,8067],{"id":8066},"_42结构体数组","4.2结构体数组",[14,8069,8070],{},"将自定义的结构体放入到数组中方便维护",[14,8072,8073,8074,8077],{},"语法：struct 结构体名 数组名",[115,8075,8076],{},"元素个数","={ {}，{},...{} };",[106,8079,8081],{"className":108,"code":8080,"language":110,"meta":22,"style":22},"#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",[112,8082,8083,8089,8099,8105,8110,8116,8120,8124,8130,8136,8140,8144,8152,8156,8161,8176,8180,8196,8212,8216,8221,8237,8252,8267,8272,8298,8302,8325,8329],{"__ignoreMap":22},[115,8084,8085,8087],{"class":117,"line":118},[115,8086,1949],{"class":121},[115,8088,1952],{"class":230},[115,8090,8091,8093,8095,8097],{"class":117,"line":37},[115,8092,1957],{"class":121},[115,8094,1960],{"class":121},[115,8096,1964],{"class":1963},[115,8098,1291],{"class":125},[115,8100,8101,8103],{"class":117,"line":1180},[115,8102,1949],{"class":121},[115,8104,7750],{"class":230},[115,8106,8107],{"class":117,"line":1195},[115,8108,8109],{"class":184},"\u002F\u002F1.定义结构体\n",[115,8111,8112,8114],{"class":117,"line":1201},[115,8113,7760],{"class":121},[115,8115,7763],{"class":1963},[115,8117,8118],{"class":117,"line":1215},[115,8119,1546],{"class":125},[115,8121,8122],{"class":117,"line":1221},[115,8123,7786],{"class":125},[115,8125,8126,8128],{"class":117,"line":1312},[115,8127,1985],{"class":121},[115,8129,7798],{"class":125},[115,8131,8132,8134],{"class":117,"line":1318},[115,8133,1985],{"class":121},[115,8135,7810],{"class":125},[115,8137,8138],{"class":117,"line":1330},[115,8139,2400],{"emptyLinePlaceholder":42},[115,8141,8142],{"class":117,"line":1612},[115,8143,3995],{"class":125},[115,8145,8146,8148,8150],{"class":117,"line":1617},[115,8147,129],{"class":121},[115,8149,1973],{"class":1963},[115,8151,1976],{"class":125},[115,8153,8154],{"class":117,"line":1623},[115,8155,1546],{"class":125},[115,8157,8158],{"class":117,"line":1628},[115,8159,8160],{"class":184},"    \u002F\u002F2.创建结构体数组\n",[115,8162,8163,8165,8167,8170,8172,8174],{"class":117,"line":1642},[115,8164,7896],{"class":121},[115,8166,7899],{"class":1963},[115,8168,8169],{"class":125}," stuArray[",[115,8171,203],{"class":174},[115,8173,1065],{"class":125},[115,8175,4908],{"class":121},[115,8177,8178],{"class":117,"line":1647},[115,8179,2030],{"class":125},[115,8181,8182,8184,8186,8188,8190,8192,8194],{"class":117,"line":1653},[115,8183,4917],{"class":125},[115,8185,7917],{"class":230},[115,8187,503],{"class":125},[115,8189,775],{"class":174},[115,8191,503],{"class":125},[115,8193,436],{"class":174},[115,8195,4930],{"class":125},[115,8197,8198,8200,8202,8204,8206,8208,8210],{"class":117,"line":1674},[115,8199,4917],{"class":125},[115,8201,3678],{"class":230},[115,8203,503],{"class":125},[115,8205,700],{"class":174},[115,8207,503],{"class":125},[115,8209,700],{"class":174},[115,8211,1565],{"class":125},[115,8213,8214],{"class":117,"line":1679},[115,8215,2187],{"class":125},[115,8217,8218],{"class":117,"line":1693},[115,8219,8220],{"class":184},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[115,8222,8223,8226,8228,8231,8233,8235],{"class":117,"line":1698},[115,8224,8225],{"class":125},"    stuArray[",[115,8227,343],{"class":174},[115,8229,8230],{"class":125},"].name",[115,8232,171],{"class":121},[115,8234,3701],{"class":230},[115,8236,1291],{"class":125},[115,8238,8239,8241,8243,8246,8248,8250],{"class":117,"line":1727},[115,8240,8225],{"class":125},[115,8242,343],{"class":174},[115,8244,8245],{"class":125},"].age",[115,8247,171],{"class":121},[115,8249,203],{"class":174},[115,8251,1291],{"class":125},[115,8253,8254,8256,8258,8261,8263,8265],{"class":117,"line":1732},[115,8255,8225],{"class":125},[115,8257,343],{"class":174},[115,8259,8260],{"class":125},"].score",[115,8262,171],{"class":121},[115,8264,203],{"class":174},[115,8266,1291],{"class":125},[115,8268,8269],{"class":117,"line":1749},[115,8270,8271],{"class":184},"    \u002F\u002F4.遍历结构体数组\n",[115,8273,8274,8276,8278,8280,8282,8284,8286,8288,8290,8292,8294,8296],{"class":117,"line":1754},[115,8275,3201],{"class":121},[115,8277,1658],{"class":125},[115,8279,129],{"class":121},[115,8281,3032],{"class":125},[115,8283,171],{"class":121},[115,8285,317],{"class":174},[115,8287,3039],{"class":125},[115,8289,1035],{"class":121},[115,8291,203],{"class":174},[115,8293,3039],{"class":125},[115,8295,2292],{"class":121},[115,8297,132],{"class":125},[115,8299,8300],{"class":117,"line":1759},[115,8301,2030],{"class":125},[115,8303,8304,8306,8308,8311,8313,8316,8318,8321,8323],{"class":117,"line":1764},[115,8305,3451],{"class":125},[115,8307,1169],{"class":121},[115,8309,8310],{"class":125},"stuArray[i].name",[115,8312,1169],{"class":121},[115,8314,8315],{"class":125},"stuArray[i].age",[115,8317,1169],{"class":121},[115,8319,8320],{"class":125},"stuArray[i].score",[115,8322,1169],{"class":121},[115,8324,1192],{"class":125},[115,8326,8327],{"class":117,"line":1778},[115,8328,2187],{"class":125},[115,8330,8331],{"class":117,"line":1783},[115,8332,1565],{"class":125},[57,8334,8336],{"id":8335},"_43结构体指针","4.3结构体指针",[14,8338,8339],{},"作用：通过指针访问结构体中的成员",[14,8341,8342],{},"利用操作符->可以通过结构体指针访问结构体属性",[106,8344,8346],{"className":108,"code":8345,"language":110,"meta":22,"style":22},"#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",[112,8347,8348,8354,8364,8370,8374,8380,8384,8388,8394,8400,8404,8412,8416,8421,8446,8451,8466,8471,8494],{"__ignoreMap":22},[115,8349,8350,8352],{"class":117,"line":118},[115,8351,1949],{"class":121},[115,8353,1952],{"class":230},[115,8355,8356,8358,8360,8362],{"class":117,"line":37},[115,8357,1957],{"class":121},[115,8359,1960],{"class":121},[115,8361,1964],{"class":1963},[115,8363,1291],{"class":125},[115,8365,8366,8368],{"class":117,"line":1180},[115,8367,1949],{"class":121},[115,8369,7750],{"class":230},[115,8371,8372],{"class":117,"line":1195},[115,8373,8109],{"class":184},[115,8375,8376,8378],{"class":117,"line":1201},[115,8377,7760],{"class":121},[115,8379,7763],{"class":1963},[115,8381,8382],{"class":117,"line":1215},[115,8383,1546],{"class":125},[115,8385,8386],{"class":117,"line":1221},[115,8387,7786],{"class":125},[115,8389,8390,8392],{"class":117,"line":1312},[115,8391,1985],{"class":121},[115,8393,7798],{"class":125},[115,8395,8396,8398],{"class":117,"line":1318},[115,8397,1985],{"class":121},[115,8399,7810],{"class":125},[115,8401,8402],{"class":117,"line":1330},[115,8403,3995],{"class":125},[115,8405,8406,8408,8410],{"class":117,"line":1612},[115,8407,129],{"class":121},[115,8409,1973],{"class":1963},[115,8411,1976],{"class":125},[115,8413,8414],{"class":117,"line":1617},[115,8415,1546],{"class":125},[115,8417,8418],{"class":117,"line":1623},[115,8419,8420],{"class":184},"    \u002F\u002F创建学生结构体变量\n",[115,8422,8423,8425,8427,8430,8432,8434,8436,8438,8440,8442,8444],{"class":117,"line":1628},[115,8424,7896],{"class":121},[115,8426,7899],{"class":1963},[115,8428,8429],{"class":125}," s",[115,8431,171],{"class":121},[115,8433,1021],{"class":125},[115,8435,7917],{"class":230},[115,8437,503],{"class":125},[115,8439,775],{"class":174},[115,8441,503],{"class":125},[115,8443,1722],{"class":174},[115,8445,3995],{"class":125},[115,8447,8448],{"class":117,"line":1642},[115,8449,8450],{"class":184},"    \u002F\u002F通过指针指向结构体变量\n",[115,8452,8453,8455,8457,8459,8461,8463],{"class":117,"line":1647},[115,8454,7896],{"class":121},[115,8456,7899],{"class":1963},[115,8458,6519],{"class":121},[115,8460,14],{"class":125},[115,8462,6340],{"class":121},[115,8464,8465],{"class":125},"s\n",[115,8467,8468],{"class":117,"line":1653},[115,8469,8470],{"class":184},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[115,8472,8473,8475,8477,8480,8482,8485,8487,8490,8492],{"class":117,"line":1674},[115,8474,1551],{"class":125},[115,8476,1169],{"class":121},[115,8478,8479],{"class":125},"p->name",[115,8481,1169],{"class":121},[115,8483,8484],{"class":125},"p->age",[115,8486,1169],{"class":121},[115,8488,8489],{"class":125},"p->score",[115,8491,1169],{"class":121},[115,8493,1192],{"class":125},[115,8495,8496],{"class":117,"line":1679},[115,8497,1565],{"class":125},[57,8499,8501],{"id":8500},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8503,8504],{},"作用：结构体中的成员可以是另一个结构体",[14,8506,8507],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[106,8509,8511],{"className":108,"code":8510,"language":110,"meta":22,"style":22},"#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",[112,8512,8513,8519,8529,8535,8540,8548,8552,8556,8562,8568,8572,8577,8584,8588,8595,8599,8605,8610,8614,8622,8626,8631,8636,8641,8652,8664,8675,8688,8699,8710],{"__ignoreMap":22},[115,8514,8515,8517],{"class":117,"line":118},[115,8516,1949],{"class":121},[115,8518,1952],{"class":230},[115,8520,8521,8523,8525,8527],{"class":117,"line":37},[115,8522,1957],{"class":121},[115,8524,1960],{"class":121},[115,8526,1964],{"class":1963},[115,8528,1291],{"class":125},[115,8530,8531,8533],{"class":117,"line":1180},[115,8532,1949],{"class":121},[115,8534,7750],{"class":230},[115,8536,8537],{"class":117,"line":1195},[115,8538,8539],{"class":184},"\u002F\u002F定义学生结构体\n",[115,8541,8542,8544,8546],{"class":117,"line":1201},[115,8543,7760],{"class":121},[115,8545,7899],{"class":1963},[115,8547,2674],{"class":125},[115,8549,8550],{"class":117,"line":1215},[115,8551,1546],{"class":125},[115,8553,8554],{"class":117,"line":1221},[115,8555,7786],{"class":125},[115,8557,8558,8560],{"class":117,"line":1312},[115,8559,1985],{"class":121},[115,8561,7798],{"class":125},[115,8563,8564,8566],{"class":117,"line":1318},[115,8565,1985],{"class":121},[115,8567,7810],{"class":125},[115,8569,8570],{"class":117,"line":1330},[115,8571,1565],{"class":125},[115,8573,8574],{"class":117,"line":1612},[115,8575,8576],{"class":184},"\u002F\u002F定义老师结构体\n",[115,8578,8579,8581],{"class":117,"line":1617},[115,8580,7760],{"class":121},[115,8582,8583],{"class":1963}," Teacher\n",[115,8585,8586],{"class":117,"line":1623},[115,8587,1546],{"class":125},[115,8589,8590,8592],{"class":117,"line":1628},[115,8591,1985],{"class":121},[115,8593,8594],{"class":125}," id;\n",[115,8596,8597],{"class":117,"line":1642},[115,8598,7786],{"class":125},[115,8600,8601,8603],{"class":117,"line":1647},[115,8602,1985],{"class":121},[115,8604,7798],{"class":125},[115,8606,8607],{"class":117,"line":1653},[115,8608,8609],{"class":125},"    Student stu;\n",[115,8611,8612],{"class":117,"line":1674},[115,8613,1565],{"class":125},[115,8615,8616,8618,8620],{"class":117,"line":1679},[115,8617,129],{"class":121},[115,8619,1973],{"class":1963},[115,8621,5979],{"class":125},[115,8623,8624],{"class":117,"line":1693},[115,8625,1546],{"class":125},[115,8627,8628],{"class":117,"line":1698},[115,8629,8630],{"class":184},"    \u002F\u002F结构体嵌套结构体\n",[115,8632,8633],{"class":117,"line":1727},[115,8634,8635],{"class":184},"    \u002F\u002F创建老师\n",[115,8637,8638],{"class":117,"line":1732},[115,8639,8640],{"class":125},"    Teacher t;\n",[115,8642,8643,8646,8648,8650],{"class":117,"line":1749},[115,8644,8645],{"class":125},"    t.id",[115,8647,171],{"class":121},[115,8649,436],{"class":174},[115,8651,1291],{"class":125},[115,8653,8654,8657,8659,8662],{"class":117,"line":1754},[115,8655,8656],{"class":125},"    t.name",[115,8658,171],{"class":121},[115,8660,8661],{"class":230},"\"老王\"",[115,8663,1291],{"class":125},[115,8665,8666,8669,8671,8673],{"class":117,"line":1759},[115,8667,8668],{"class":125},"    t.age",[115,8670,171],{"class":121},[115,8672,775],{"class":174},[115,8674,1291],{"class":125},[115,8676,8677,8680,8682,8685],{"class":117,"line":1764},[115,8678,8679],{"class":125},"    t.stu.name",[115,8681,171],{"class":121},[115,8683,8684],{"class":230},"\"小王\"",[115,8686,8687],{"class":125},"；\n",[115,8689,8690,8693,8695,8697],{"class":117,"line":1778},[115,8691,8692],{"class":125},"    t.stu.age",[115,8694,171],{"class":121},[115,8696,825],{"class":174},[115,8698,1291],{"class":125},[115,8700,8701,8704,8706,8708],{"class":117,"line":1783},[115,8702,8703],{"class":125},"    t.stu.score",[115,8705,171],{"class":121},[115,8707,469],{"class":174},[115,8709,1291],{"class":125},[115,8711,8712],{"class":117,"line":2577},[115,8713,1565],{"class":125},[57,8715,8717],{"id":8716},"_45结构体做函数参数","4.5结构体做函数参数",[14,8719,8720],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[106,8722,8724],{"className":108,"code":8723,"language":110,"meta":22,"style":22},"#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",[112,8725,8726,8732,8742,8748,8754,8758,8762,8768,8774,8778,8783,8788,8805,8809,8842,8846,8851,8870,8874,8905,8909,8917,8921,8930,8942,8954,8966,8979,8987,9000,9012,9020],{"__ignoreMap":22},[115,8727,8728,8730],{"class":117,"line":118},[115,8729,1949],{"class":121},[115,8731,1952],{"class":230},[115,8733,8734,8736,8738,8740],{"class":117,"line":37},[115,8735,1957],{"class":121},[115,8737,1960],{"class":121},[115,8739,1964],{"class":1963},[115,8741,1291],{"class":125},[115,8743,8744,8746],{"class":117,"line":1180},[115,8745,1949],{"class":121},[115,8747,7750],{"class":230},[115,8749,8750,8752],{"class":117,"line":1195},[115,8751,7760],{"class":121},[115,8753,7763],{"class":1963},[115,8755,8756],{"class":117,"line":1201},[115,8757,1546],{"class":125},[115,8759,8760],{"class":117,"line":1215},[115,8761,7786],{"class":125},[115,8763,8764,8766],{"class":117,"line":1221},[115,8765,1985],{"class":121},[115,8767,7798],{"class":125},[115,8769,8770,8772],{"class":117,"line":1312},[115,8771,1985],{"class":121},[115,8773,7810],{"class":125},[115,8775,8776],{"class":117,"line":1318},[115,8777,3995],{"class":125},[115,8779,8780],{"class":117,"line":1330},[115,8781,8782],{"class":184},"\u002F\u002F打印学生信息的函数\n",[115,8784,8785],{"class":117,"line":1612},[115,8786,8787],{"class":184},"\u002F\u002F值传递\n",[115,8789,8790,8792,8795,8797,8799,8801,8803],{"class":117,"line":1617},[115,8791,5365],{"class":121},[115,8793,8794],{"class":1963}," printStudent1",[115,8796,126],{"class":125},[115,8798,7760],{"class":121},[115,8800,7899],{"class":1963},[115,8802,8429],{"class":5217},[115,8804,132],{"class":125},[115,8806,8807],{"class":117,"line":1623},[115,8808,1546],{"class":125},[115,8810,8811,8813,8815,8818,8820,8823,8825,8828,8830,8832,8834,8837,8839],{"class":117,"line":1628},[115,8812,6530],{"class":125},[115,8814,1169],{"class":121},[115,8816,8817],{"class":125}," s.name ",[115,8819,1169],{"class":121},[115,8821,8822],{"class":230}," \" \"",[115,8824,1445],{"class":121},[115,8826,8827],{"class":125}," s.age ",[115,8829,1169],{"class":121},[115,8831,8822],{"class":230},[115,8833,1445],{"class":121},[115,8835,8836],{"class":125}," s.score ",[115,8838,1169],{"class":121},[115,8840,8841],{"class":125}," endl;\n",[115,8843,8844],{"class":117,"line":1642},[115,8845,1565],{"class":125},[115,8847,8848],{"class":117,"line":1647},[115,8849,8850],{"class":184},"\u002F\u002F地址传递\n",[115,8852,8853,8855,8858,8860,8862,8864,8866,8868],{"class":117,"line":1653},[115,8854,5365],{"class":121},[115,8856,8857],{"class":1963}," printStudent2",[115,8859,126],{"class":125},[115,8861,7760],{"class":121},[115,8863,7899],{"class":1963},[115,8865,6519],{"class":121},[115,8867,820],{"class":5217},[115,8869,132],{"class":125},[115,8871,8872],{"class":117,"line":1674},[115,8873,1546],{"class":125},[115,8875,8876,8878,8880,8883,8885,8887,8889,8892,8894,8896,8898,8901,8903],{"class":117,"line":1679},[115,8877,6530],{"class":125},[115,8879,1169],{"class":121},[115,8881,8882],{"class":125}," s->name ",[115,8884,1169],{"class":121},[115,8886,8822],{"class":230},[115,8888,1445],{"class":121},[115,8890,8891],{"class":125}," s->age ",[115,8893,1169],{"class":121},[115,8895,8822],{"class":230},[115,8897,1445],{"class":121},[115,8899,8900],{"class":125}," s->score ",[115,8902,1169],{"class":121},[115,8904,8841],{"class":125},[115,8906,8907],{"class":117,"line":1693},[115,8908,1565],{"class":125},[115,8910,8911,8913,8915],{"class":117,"line":1698},[115,8912,129],{"class":121},[115,8914,1973],{"class":1963},[115,8916,1976],{"class":125},[115,8918,8919],{"class":117,"line":1727},[115,8920,1546],{"class":125},[115,8922,8923,8925,8927],{"class":117,"line":1732},[115,8924,7896],{"class":121},[115,8926,7899],{"class":1963},[115,8928,8929],{"class":125}," s;\n",[115,8931,8932,8935,8937,8940],{"class":117,"line":1749},[115,8933,8934],{"class":125},"    s.name ",[115,8936,171],{"class":121},[115,8938,8939],{"class":230}," \"张三\"",[115,8941,1291],{"class":125},[115,8943,8944,8947,8949,8952],{"class":117,"line":1754},[115,8945,8946],{"class":125},"    s.age ",[115,8948,171],{"class":121},[115,8950,8951],{"class":174}," 20",[115,8953,1291],{"class":125},[115,8955,8956,8959,8961,8964],{"class":117,"line":1759},[115,8957,8958],{"class":125},"    s.score ",[115,8960,171],{"class":121},[115,8962,8963],{"class":174}," 85",[115,8965,1291],{"class":125},[115,8967,8968,8970,8972,8975,8977],{"class":117,"line":1764},[115,8969,1551],{"class":125},[115,8971,1169],{"class":121},[115,8973,8974],{"class":230},"\"值传递:\"",[115,8976,1169],{"class":121},[115,8978,1192],{"class":125},[115,8980,8981,8984],{"class":117,"line":1778},[115,8982,8983],{"class":1963},"    printStudent1",[115,8985,8986],{"class":125},"(s);\n",[115,8988,8989,8991,8993,8996,8998],{"class":117,"line":1783},[115,8990,1551],{"class":125},[115,8992,1169],{"class":121},[115,8994,8995],{"class":230},"\"地址传递:\"",[115,8997,1169],{"class":121},[115,8999,1192],{"class":125},[115,9001,9002,9005,9007,9009],{"class":117,"line":2577},[115,9003,9004],{"class":1963},"    printStudent2",[115,9006,126],{"class":125},[115,9008,478],{"class":121},[115,9010,9011],{"class":125},"s); \n",[115,9013,9014,9016,9018],{"class":117,"line":2591},[115,9015,4090],{"class":121},[115,9017,4093],{"class":174},[115,9019,1291],{"class":125},[115,9021,9022],{"class":117,"line":2599},[115,9023,1565],{"class":125},[14,9025,9026],{},"注意：",[1132,9028,9029,9032],{},[72,9030,9031],{},"1.先定义结构体，不要在函数中写结构体的定义",[72,9033,9034],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[57,9036,9038],{"id":9037},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9040,9041],{},"用const防止误操作",[106,9043,9045],{"className":108,"code":9044,"language":110,"meta":22,"style":22},"#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",[112,9046,9047,9053,9063,9069,9074,9078,9082,9088,9094,9098,9114,9118,9141,9145,9153,9157,9178,9185,9189],{"__ignoreMap":22},[115,9048,9049,9051],{"class":117,"line":118},[115,9050,1949],{"class":121},[115,9052,1952],{"class":230},[115,9054,9055,9057,9059,9061],{"class":117,"line":37},[115,9056,1957],{"class":121},[115,9058,1960],{"class":121},[115,9060,1964],{"class":1963},[115,9062,1291],{"class":125},[115,9064,9065,9067],{"class":117,"line":1180},[115,9066,1949],{"class":121},[115,9068,7750],{"class":230},[115,9070,9071],{"class":117,"line":1195},[115,9072,9073],{"class":125},"sctuct Student\n",[115,9075,9076],{"class":117,"line":1201},[115,9077,1546],{"class":125},[115,9079,9080],{"class":117,"line":1215},[115,9081,7786],{"class":125},[115,9083,9084,9086],{"class":117,"line":1221},[115,9085,1985],{"class":121},[115,9087,7798],{"class":125},[115,9089,9090,9092],{"class":117,"line":1312},[115,9091,1985],{"class":121},[115,9093,7810],{"class":125},[115,9095,9096],{"class":117,"line":1318},[115,9097,3995],{"class":125},[115,9099,9100,9102,9105,9107,9110,9112],{"class":117,"line":1330},[115,9101,5365],{"class":121},[115,9103,9104],{"class":1963}," printStudents",[115,9106,126],{"class":125},[115,9108,9109],{"class":1963},"student",[115,9111,8429],{"class":5217},[115,9113,132],{"class":125},[115,9115,9116],{"class":117,"line":1612},[115,9117,1546],{"class":125},[115,9119,9120,9122,9124,9127,9129,9132,9134,9137,9139],{"class":117,"line":1617},[115,9121,1551],{"class":125},[115,9123,1169],{"class":121},[115,9125,9126],{"class":125},"s.name",[115,9128,1169],{"class":121},[115,9130,9131],{"class":125},"s.age",[115,9133,1169],{"class":121},[115,9135,9136],{"class":125},"s.score",[115,9138,1169],{"class":121},[115,9140,1192],{"class":125},[115,9142,9143],{"class":117,"line":1623},[115,9144,1565],{"class":125},[115,9146,9147,9149,9151],{"class":117,"line":1628},[115,9148,129],{"class":121},[115,9150,1973],{"class":1963},[115,9152,5979],{"class":125},[115,9154,9155],{"class":117,"line":1642},[115,9156,1546],{"class":125},[115,9158,9159,9162,9164,9166,9168,9170,9172,9174,9176],{"class":117,"line":1647},[115,9160,9161],{"class":125},"    Student s",[115,9163,171],{"class":121},[115,9165,1021],{"class":125},[115,9167,7917],{"class":230},[115,9169,503],{"class":125},[115,9171,775],{"class":174},[115,9173,503],{"class":125},[115,9175,775],{"class":174},[115,9177,3995],{"class":125},[115,9179,9180,9183],{"class":117,"line":1653},[115,9181,9182],{"class":1963},"    printStudent",[115,9184,8986],{"class":125},[115,9186,9187],{"class":117,"line":1674},[115,9188,2400],{"emptyLinePlaceholder":42},[115,9190,9191],{"class":117,"line":1679},[115,9192,1565],{"class":125},[14,9194,9026],{},[1132,9196,9197,9200,9203],{},[72,9198,9199],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[72,9201,9202],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[72,9204,9205],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[106,9207,9209],{"className":108,"code":9208,"language":110,"meta":22,"style":22},"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",[112,9210,9211,9230,9234,9239,9259],{"__ignoreMap":22},[115,9212,9213,9215,9217,9219,9221,9224,9226,9228],{"class":117,"line":118},[115,9214,5365],{"class":121},[115,9216,9104],{"class":1963},[115,9218,126],{"class":125},[115,9220,6793],{"class":121},[115,9222,9223],{"class":1963}," student",[115,9225,6519],{"class":121},[115,9227,820],{"class":5217},[115,9229,132],{"class":125},[115,9231,9232],{"class":117,"line":37},[115,9233,1546],{"class":125},[115,9235,9236],{"class":117,"line":1180},[115,9237,9238],{"class":184},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[115,9240,9241,9243,9245,9247,9249,9251,9253,9255,9257],{"class":117,"line":1195},[115,9242,1551],{"class":125},[115,9244,1169],{"class":121},[115,9246,9126],{"class":125},[115,9248,1169],{"class":121},[115,9250,9131],{"class":125},[115,9252,1169],{"class":121},[115,9254,9136],{"class":125},[115,9256,1169],{"class":121},[115,9258,1192],{"class":125},[115,9260,9261],{"class":117,"line":1201},[115,9262,1565],{"class":125},[57,9264,9266],{"id":9265},"_47案例","4.7案例",[69,9268,9269],{},[72,9270,9271],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[106,9273,9275],{"className":108,"code":9274,"language":110,"meta":22,"style":22},"#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",[112,9276,9277,9283,9293,9299,9306,9310,9316,9320,9325,9331,9337,9341,9345,9351,9355,9360,9365,9378,9382,9387,9413,9417,9429,9456,9460,9472,9482,9486,9491,9520,9524,9536,9545,9572,9583,9593,9597,9601,9605,9610,9634,9638,9662,9666,9685,9711,9715,9740,9763,9787,9792,9797,9802,9811,9816,9822,9843,9849,9863,9869,9896,9905,9911,9919,9924],{"__ignoreMap":22},[115,9278,9279,9281],{"class":117,"line":118},[115,9280,1949],{"class":121},[115,9282,1952],{"class":230},[115,9284,9285,9287,9289,9291],{"class":117,"line":37},[115,9286,1957],{"class":121},[115,9288,1960],{"class":121},[115,9290,1964],{"class":1963},[115,9292,1291],{"class":125},[115,9294,9295,9297],{"class":117,"line":1180},[115,9296,1949],{"class":121},[115,9298,7750],{"class":230},[115,9300,9301,9303],{"class":117,"line":1195},[115,9302,1949],{"class":121},[115,9304,9305],{"class":230},"\u003Cctime>\n",[115,9307,9308],{"class":117,"line":1201},[115,9309,8539],{"class":184},[115,9311,9312,9314],{"class":117,"line":1215},[115,9313,7760],{"class":121},[115,9315,7763],{"class":1963},[115,9317,9318],{"class":117,"line":1221},[115,9319,1546],{"class":125},[115,9321,9322],{"class":117,"line":1312},[115,9323,9324],{"class":125},"    string sName;\n",[115,9326,9327,9329],{"class":117,"line":1318},[115,9328,1985],{"class":121},[115,9330,7798],{"class":125},[115,9332,9333,9335],{"class":117,"line":1330},[115,9334,1985],{"class":121},[115,9336,7810],{"class":125},[115,9338,9339],{"class":117,"line":1612},[115,9340,3995],{"class":125},[115,9342,9343],{"class":117,"line":1617},[115,9344,8576],{"class":184},[115,9346,9347,9349],{"class":117,"line":1623},[115,9348,7760],{"class":121},[115,9350,8583],{"class":1963},[115,9352,9353],{"class":117,"line":1628},[115,9354,1546],{"class":125},[115,9356,9357],{"class":117,"line":1642},[115,9358,9359],{"class":125},"    string tName;\n",[115,9361,9362],{"class":117,"line":1647},[115,9363,9364],{"class":184},"    \u002F\u002F学生数组\n",[115,9366,9367,9369,9371,9374,9376],{"class":117,"line":1653},[115,9368,7896],{"class":121},[115,9370,7899],{"class":1963},[115,9372,9373],{"class":125}," sArray[",[115,9375,444],{"class":174},[115,9377,4690],{"class":125},[115,9379,9380],{"class":117,"line":1674},[115,9381,3995],{"class":125},[115,9383,9384],{"class":117,"line":1679},[115,9385,9386],{"class":184},"\u002F\u002F给老师和学生赋值的函数\n",[115,9388,9389,9391,9394,9396,9398,9401,9404,9407,9409,9411],{"class":117,"line":1693},[115,9390,5365],{"class":121},[115,9392,9393],{"class":1963}," allocateSpace",[115,9395,126],{"class":125},[115,9397,7760],{"class":121},[115,9399,9400],{"class":1963}," Teacher",[115,9402,9403],{"class":5217}," tArray",[115,9405,9406],{"class":125},"[],",[115,9408,129],{"class":121},[115,9410,7332],{"class":5217},[115,9412,132],{"class":125},[115,9414,9415],{"class":117,"line":1698},[115,9416,1546],{"class":125},[115,9418,9419,9422,9424,9427],{"class":117,"line":1727},[115,9420,9421],{"class":125},"    string nameSeed",[115,9423,171],{"class":121},[115,9425,9426],{"class":230},"\"ABCDE\"",[115,9428,1291],{"class":125},[115,9430,9431,9433,9435,9437,9440,9442,9444,9447,9449,9452,9454],{"class":117,"line":1732},[115,9432,3201],{"class":121},[115,9434,1658],{"class":125},[115,9436,129],{"class":121},[115,9438,9439],{"class":125}," i ",[115,9441,171],{"class":121},[115,9443,4093],{"class":174},[115,9445,9446],{"class":125},"; i ",[115,9448,1035],{"class":121},[115,9450,9451],{"class":125}," len; i",[115,9453,2292],{"class":121},[115,9455,132],{"class":125},[115,9457,9458],{"class":117,"line":1749},[115,9459,2030],{"class":125},[115,9461,9462,9465,9467,9470],{"class":117,"line":1754},[115,9463,9464],{"class":125},"        tArray[i].tName ",[115,9466,171],{"class":121},[115,9468,9469],{"class":230}," \"Teacher_\"",[115,9471,1291],{"class":125},[115,9473,9474,9476,9479],{"class":117,"line":1759},[115,9475,9464],{"class":125},[115,9477,9478],{"class":121},"+=",[115,9480,9481],{"class":125},"nameSeed[i];\n",[115,9483,9484],{"class":117,"line":1764},[115,9485,2400],{"emptyLinePlaceholder":42},[115,9487,9488],{"class":117,"line":1778},[115,9489,9490],{"class":184},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[115,9492,9493,9495,9497,9499,9502,9504,9506,9509,9511,9513,9516,9518],{"class":117,"line":1783},[115,9494,3403],{"class":121},[115,9496,1658],{"class":125},[115,9498,129],{"class":121},[115,9500,9501],{"class":125}," j ",[115,9503,171],{"class":121},[115,9505,4093],{"class":174},[115,9507,9508],{"class":125},"; j ",[115,9510,1035],{"class":121},[115,9512,2148],{"class":174},[115,9514,9515],{"class":125},"; j",[115,9517,2292],{"class":121},[115,9519,132],{"class":125},[115,9521,9522],{"class":117,"line":2577},[115,9523,2510],{"class":125},[115,9525,9526,9529,9531,9534],{"class":117,"line":2591},[115,9527,9528],{"class":125},"            tArray[i].sArray[j].sName ",[115,9530,171],{"class":121},[115,9532,9533],{"class":230}," \"Student_\"",[115,9535,1291],{"class":125},[115,9537,9538,9540,9542],{"class":117,"line":2599},[115,9539,9528],{"class":125},[115,9541,9478],{"class":121},[115,9543,9544],{"class":125}," nameSeed[j];\n",[115,9546,9547,9550,9553,9555,9557,9559,9561,9563,9565,9567,9569],{"class":117,"line":2604},[115,9548,9549],{"class":121},"            int",[115,9551,9552],{"class":125}," random",[115,9554,171],{"class":121},[115,9556,2424],{"class":1963},[115,9558,2427],{"class":125},[115,9560,453],{"class":121},[115,9562,1032],{"class":174},[115,9564,606],{"class":121},[115,9566,526],{"class":174},[115,9568,181],{"class":125},[115,9570,9571],{"class":184},"\u002F\u002F40~99\n",[115,9573,9574,9577,9579,9581],{"class":117,"line":2610},[115,9575,9576],{"class":125},"            tArray[i].sArray[j].age ",[115,9578,171],{"class":121},[115,9580,8951],{"class":174},[115,9582,1291],{"class":125},[115,9584,9585,9588,9590],{"class":117,"line":2616},[115,9586,9587],{"class":125},"            tArray[i].sArray[j].score ",[115,9589,171],{"class":121},[115,9591,9592],{"class":125}," random;\n",[115,9594,9595],{"class":117,"line":2621},[115,9596,2529],{"class":125},[115,9598,9599],{"class":117,"line":7949},[115,9600,2187],{"class":125},[115,9602,9603],{"class":117,"line":7973},[115,9604,1565],{"class":125},[115,9606,9607],{"class":117,"line":7978},[115,9608,9609],{"class":184},"\u002F\u002F打印所有信息的函数\n",[115,9611,9612,9614,9617,9619,9621,9623,9625,9628,9630,9632],{"class":117,"line":7984},[115,9613,5365],{"class":121},[115,9615,9616],{"class":1963}," printInfo",[115,9618,126],{"class":125},[115,9620,7760],{"class":121},[115,9622,9400],{"class":1963},[115,9624,9403],{"class":5217},[115,9626,9627],{"class":125},"[], ",[115,9629,129],{"class":121},[115,9631,7332],{"class":5217},[115,9633,132],{"class":125},[115,9635,9636],{"class":117,"line":8011},[115,9637,1546],{"class":125},[115,9639,9640,9642,9644,9646,9648,9650,9652,9654,9656,9658,9660],{"class":117,"line":8016},[115,9641,3201],{"class":121},[115,9643,1658],{"class":125},[115,9645,129],{"class":121},[115,9647,9439],{"class":125},[115,9649,171],{"class":121},[115,9651,4093],{"class":174},[115,9653,9446],{"class":125},[115,9655,1035],{"class":121},[115,9657,9451],{"class":125},[115,9659,2292],{"class":121},[115,9661,132],{"class":125},[115,9663,9664],{"class":117,"line":8022},[115,9665,2030],{"class":125},[115,9667,9668,9671,9673,9676,9678,9681,9683],{"class":117,"line":8034},[115,9669,9670],{"class":125},"        cout ",[115,9672,1169],{"class":121},[115,9674,9675],{"class":230}," \"Teacher: \"",[115,9677,1445],{"class":121},[115,9679,9680],{"class":125}," tArray[i].tName ",[115,9682,1169],{"class":121},[115,9684,8841],{"class":125},[115,9686,9687,9689,9691,9693,9695,9697,9699,9701,9703,9705,9707,9709],{"class":117,"line":8046},[115,9688,3403],{"class":121},[115,9690,1658],{"class":125},[115,9692,129],{"class":121},[115,9694,9501],{"class":125},[115,9696,171],{"class":121},[115,9698,4093],{"class":174},[115,9700,9508],{"class":125},[115,9702,1035],{"class":121},[115,9704,2148],{"class":174},[115,9706,9515],{"class":125},[115,9708,2292],{"class":121},[115,9710,132],{"class":125},[115,9712,9713],{"class":117,"line":8058},[115,9714,2510],{"class":125},[115,9716,9718,9721,9723,9726,9728,9731,9733,9736,9738],{"class":117,"line":9717},47,[115,9719,9720],{"class":125},"            cout ",[115,9722,1169],{"class":121},[115,9724,9725],{"class":230}," \"",[115,9727,1231],{"class":174},[115,9729,9730],{"class":230},"Student: \"",[115,9732,1445],{"class":121},[115,9734,9735],{"class":125}," tArray[i].sArray[j].sName",[115,9737,1169],{"class":121},[115,9739,1192],{"class":125},[115,9741,9743,9745,9747,9749,9751,9754,9756,9759,9761],{"class":117,"line":9742},48,[115,9744,9720],{"class":125},[115,9746,1169],{"class":121},[115,9748,9725],{"class":230},[115,9750,1231],{"class":174},[115,9752,9753],{"class":230},"Age: \"",[115,9755,1445],{"class":121},[115,9757,9758],{"class":125}," tArray[i].sArray[j].age ",[115,9760,1169],{"class":121},[115,9762,8841],{"class":125},[115,9764,9766,9768,9770,9772,9774,9777,9779,9782,9784],{"class":117,"line":9765},49,[115,9767,9720],{"class":125},[115,9769,1169],{"class":121},[115,9771,9725],{"class":230},[115,9773,1231],{"class":174},[115,9775,9776],{"class":230},"Score: \"",[115,9778,1445],{"class":121},[115,9780,9781],{"class":125}," tArray[i].sArray[j].score ",[115,9783,1169],{"class":121},[115,9785,9786],{"class":125}," endl;   \n",[115,9788,9790],{"class":117,"line":9789},50,[115,9791,2529],{"class":125},[115,9793,9795],{"class":117,"line":9794},51,[115,9796,2187],{"class":125},[115,9798,9800],{"class":117,"line":9799},52,[115,9801,1565],{"class":125},[115,9803,9805,9807,9809],{"class":117,"line":9804},53,[115,9806,129],{"class":121},[115,9808,1973],{"class":1963},[115,9810,1976],{"class":125},[115,9812,9814],{"class":117,"line":9813},54,[115,9815,1546],{"class":125},[115,9817,9819],{"class":117,"line":9818},55,[115,9820,9821],{"class":184},"    \u002F\u002F随机数种子\n",[115,9823,9825,9827,9829,9831,9833,9835,9837,9839,9841],{"class":117,"line":9824},56,[115,9826,2373],{"class":1963},[115,9828,2376],{"class":125},[115,9830,2379],{"class":121},[115,9832,2382],{"class":121},[115,9834,554],{"class":125},[115,9836,2387],{"class":1963},[115,9838,126],{"class":125},[115,9840,2392],{"class":174},[115,9842,2395],{"class":125},[115,9844,9846],{"class":117,"line":9845},57,[115,9847,9848],{"class":184},"    \u002F\u002F1.创建3名老师的数组\n",[115,9850,9852,9854,9856,9859,9861],{"class":117,"line":9851},58,[115,9853,7896],{"class":121},[115,9855,9400],{"class":1963},[115,9857,9858],{"class":125}," tArray[",[115,9860,197],{"class":174},[115,9862,4690],{"class":125},[115,9864,9866],{"class":117,"line":9865},59,[115,9867,9868],{"class":184},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[115,9870,9872,9874,9877,9879,9882,9885,9887,9889,9892,9894],{"class":117,"line":9871},60,[115,9873,1985],{"class":121},[115,9875,9876],{"class":125}," len ",[115,9878,171],{"class":121},[115,9880,9881],{"class":121}," sizeof",[115,9883,9884],{"class":125},"(tArray) ",[115,9886,709],{"class":121},[115,9888,9881],{"class":121},[115,9890,9891],{"class":125},"(tArray[",[115,9893,317],{"class":174},[115,9895,3856],{"class":125},[115,9897,9899,9902],{"class":117,"line":9898},61,[115,9900,9901],{"class":1963},"    allocateSpace",[115,9903,9904],{"class":125},"(tArray, len);\n",[115,9906,9908],{"class":117,"line":9907},62,[115,9909,9910],{"class":184},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[115,9912,9914,9917],{"class":117,"line":9913},63,[115,9915,9916],{"class":1963},"    printInfo",[115,9918,9904],{"class":125},[115,9920,9922],{"class":117,"line":9921},64,[115,9923,2400],{"emptyLinePlaceholder":42},[115,9925,9927],{"class":117,"line":9926},65,[115,9928,1565],{"class":125},[69,9930,9931],{"start":37},[72,9932,9933,9936],{},[275,9934,9935],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9938,9939],{},"五名英雄信息如下：",[106,9941,9945],{"className":9942,"code":9943,"language":9944,"meta":22,"style":22},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[112,9946,9947,9965,9982,9999,10016],{"__ignoreMap":22},[115,9948,9949,9951,9954,9956,9958,9960,9963],{"class":117,"line":118},[115,9950,4917],{"class":125},[115,9952,9953],{"class":230},"\"刘备\"",[115,9955,503],{"class":125},[115,9957,900],{"class":174},[115,9959,503],{"class":125},[115,9961,9962],{"class":230},"\"男\"",[115,9964,4930],{"class":125},[115,9966,9967,9969,9972,9974,9976,9978,9980],{"class":117,"line":37},[115,9968,4917],{"class":125},[115,9970,9971],{"class":230},"\"关羽\"",[115,9973,503],{"class":125},[115,9975,875],{"class":174},[115,9977,503],{"class":125},[115,9979,9962],{"class":230},[115,9981,4930],{"class":125},[115,9983,9984,9986,9989,9991,9993,9995,9997],{"class":117,"line":1180},[115,9985,4917],{"class":125},[115,9987,9988],{"class":230},"\"张飞\"",[115,9990,503],{"class":125},[115,9992,825],{"class":174},[115,9994,503],{"class":125},[115,9996,9962],{"class":230},[115,9998,4930],{"class":125},[115,10000,10001,10003,10006,10008,10010,10012,10014],{"class":117,"line":1195},[115,10002,4917],{"class":125},[115,10004,10005],{"class":230},"\"赵云\"",[115,10007,503],{"class":125},[115,10009,850],{"class":174},[115,10011,503],{"class":125},[115,10013,9962],{"class":230},[115,10015,4930],{"class":125},[115,10017,10018,10020,10023,10025,10027,10029,10032],{"class":117,"line":1201},[115,10019,4917],{"class":125},[115,10021,10022],{"class":230},"\"貂蝉\"",[115,10024,503],{"class":125},[115,10026,800],{"class":174},[115,10028,503],{"class":125},[115,10030,10031],{"class":230},"\"女\"",[115,10033,4930],{"class":125},[14,10035,10036],{},"代码：",[106,10038,10040],{"className":108,"code":10039,"language":110,"meta":22,"style":22},"#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",[112,10041,10042,10048,10058,10064,10071,10075,10079,10085,10090,10094,10099,10122,10126,10151,10155,10188,10193,10222,10227,10242,10268,10288,10293,10298,10302,10306,10311,10333,10337,10361,10365,10427,10431,10435,10443,10447,10452,10463,10467,10483,10499,10515,10531,10547,10551,10571,10593,10598,10611,10618,10623,10629,10634,10647,10653],{"__ignoreMap":22},[115,10043,10044,10046],{"class":117,"line":118},[115,10045,1949],{"class":121},[115,10047,1952],{"class":230},[115,10049,10050,10052,10054,10056],{"class":117,"line":37},[115,10051,1957],{"class":121},[115,10053,1960],{"class":121},[115,10055,1964],{"class":1963},[115,10057,1291],{"class":125},[115,10059,10060,10062],{"class":117,"line":1180},[115,10061,1949],{"class":121},[115,10063,7750],{"class":230},[115,10065,10066,10068],{"class":117,"line":1195},[115,10067,7760],{"class":121},[115,10069,10070],{"class":1963}," Sanguo\n",[115,10072,10073],{"class":117,"line":1201},[115,10074,1546],{"class":125},[115,10076,10077],{"class":117,"line":1215},[115,10078,7786],{"class":125},[115,10080,10081,10083],{"class":117,"line":1221},[115,10082,1985],{"class":121},[115,10084,7798],{"class":125},[115,10086,10087],{"class":117,"line":1312},[115,10088,10089],{"class":125},"    string gender;\n",[115,10091,10092],{"class":117,"line":1318},[115,10093,3995],{"class":125},[115,10095,10096],{"class":117,"line":1330},[115,10097,10098],{"class":184},"\u002F\u002F定义排序函数\n",[115,10100,10101,10103,10105,10107,10110,10112,10114,10116,10118,10120],{"class":117,"line":1612},[115,10102,5365],{"class":121},[115,10104,7317],{"class":1963},[115,10106,126],{"class":125},[115,10108,10109],{"class":1963},"Sanguo",[115,10111,6519],{"class":121},[115,10113,820],{"class":5217},[115,10115,503],{"class":125},[115,10117,129],{"class":121},[115,10119,7332],{"class":5217},[115,10121,132],{"class":125},[115,10123,10124],{"class":117,"line":1617},[115,10125,1546],{"class":125},[115,10127,10128,10130,10132,10134,10136,10138,10140,10142,10144,10147,10149],{"class":117,"line":1623},[115,10129,3201],{"class":121},[115,10131,126],{"class":125},[115,10133,129],{"class":121},[115,10135,3032],{"class":125},[115,10137,171],{"class":121},[115,10139,317],{"class":174},[115,10141,3039],{"class":125},[115,10143,1035],{"class":121},[115,10145,10146],{"class":125},"len;i",[115,10148,2292],{"class":121},[115,10150,132],{"class":125},[115,10152,10153],{"class":117,"line":1628},[115,10154,2030],{"class":125},[115,10156,10157,10160,10162,10164,10166,10168,10170,10172,10174,10176,10178,10180,10182,10184,10186],{"class":117,"line":1642},[115,10158,10159],{"class":121},"     for",[115,10161,1658],{"class":125},[115,10163,129],{"class":121},[115,10165,3410],{"class":125},[115,10167,171],{"class":121},[115,10169,317],{"class":174},[115,10171,3417],{"class":125},[115,10173,1035],{"class":121},[115,10175,7359],{"class":125},[115,10177,657],{"class":121},[115,10179,343],{"class":174},[115,10181,657],{"class":121},[115,10183,3550],{"class":125},[115,10185,2292],{"class":121},[115,10187,132],{"class":125},[115,10189,10190],{"class":117,"line":1647},[115,10191,10192],{"class":125},"     {\n",[115,10194,10195,10198,10201,10203,10206,10208,10211,10213,10215,10217,10219],{"class":117,"line":1653},[115,10196,10197],{"class":121},"         if",[115,10199,10200],{"class":125}," ((s",[115,10202,606],{"class":121},[115,10204,10205],{"class":125},"j)->age ",[115,10207,1085],{"class":121},[115,10209,10210],{"class":125}," (s",[115,10212,606],{"class":121},[115,10214,592],{"class":125},[115,10216,606],{"class":121},[115,10218,343],{"class":174},[115,10220,10221],{"class":125},")->age)\n",[115,10223,10224],{"class":117,"line":1674},[115,10225,10226],{"class":125},"         {\n",[115,10228,10229,10232,10234,10237,10239],{"class":117,"line":1679},[115,10230,10231],{"class":125},"             Sanguo temp",[115,10233,7154],{"class":121},[115,10235,10236],{"class":125},"(s",[115,10238,606],{"class":121},[115,10240,10241],{"class":125},"j);\n",[115,10243,10244,10247,10249,10251,10254,10256,10258,10260,10262,10264,10266],{"class":117,"line":1693},[115,10245,10246],{"class":121},"             *",[115,10248,10236],{"class":125},[115,10250,606],{"class":121},[115,10252,10253],{"class":125},"j)",[115,10255,7154],{"class":121},[115,10257,10236],{"class":125},[115,10259,606],{"class":121},[115,10261,592],{"class":125},[115,10263,606],{"class":121},[115,10265,343],{"class":174},[115,10267,2719],{"class":125},[115,10269,10270,10272,10274,10276,10278,10280,10282,10284,10286],{"class":117,"line":1698},[115,10271,10246],{"class":121},[115,10273,10236],{"class":125},[115,10275,606],{"class":121},[115,10277,592],{"class":125},[115,10279,606],{"class":121},[115,10281,343],{"class":174},[115,10283,554],{"class":125},[115,10285,171],{"class":121},[115,10287,4280],{"class":125},[115,10289,10290],{"class":117,"line":1727},[115,10291,10292],{"class":125},"         }\n",[115,10294,10295],{"class":117,"line":1732},[115,10296,10297],{"class":125},"     }\n",[115,10299,10300],{"class":117,"line":1749},[115,10301,2187],{"class":125},[115,10303,10304],{"class":117,"line":1754},[115,10305,1565],{"class":125},[115,10307,10308],{"class":117,"line":1759},[115,10309,10310],{"class":184},"\u002F\u002F定义打印函数\n",[115,10312,10313,10315,10317,10319,10321,10323,10325,10327,10329,10331],{"class":117,"line":1764},[115,10314,5365],{"class":121},[115,10316,9616],{"class":1963},[115,10318,126],{"class":125},[115,10320,10109],{"class":1963},[115,10322,6519],{"class":121},[115,10324,820],{"class":5217},[115,10326,503],{"class":125},[115,10328,129],{"class":121},[115,10330,7332],{"class":5217},[115,10332,132],{"class":125},[115,10334,10335],{"class":117,"line":1778},[115,10336,1546],{"class":125},[115,10338,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359],{"class":117,"line":1783},[115,10340,3201],{"class":121},[115,10342,1658],{"class":125},[115,10344,129],{"class":121},[115,10346,3032],{"class":125},[115,10348,171],{"class":121},[115,10350,317],{"class":174},[115,10352,3039],{"class":125},[115,10354,1035],{"class":121},[115,10356,10146],{"class":125},[115,10358,2292],{"class":121},[115,10360,132],{"class":125},[115,10362,10363],{"class":117,"line":2577},[115,10364,2030],{"class":125},[115,10366,10367,10369,10371,10373,10375,10378,10380,10382,10384,10387,10389,10391,10393,10396,10398,10400,10402,10405,10407,10409,10411,10414,10416,10418,10420,10423,10425],{"class":117,"line":2591},[115,10368,3451],{"class":125},[115,10370,1169],{"class":121},[115,10372,376],{"class":230},[115,10374,1231],{"class":174},[115,10376,10377],{"class":230},"姓名：\"",[115,10379,1169],{"class":121},[115,10381,10236],{"class":125},[115,10383,606],{"class":121},[115,10385,10386],{"class":125},"i)->name",[115,10388,1169],{"class":121},[115,10390,376],{"class":230},[115,10392,1231],{"class":174},[115,10394,10395],{"class":230},"年龄：\"",[115,10397,1169],{"class":121},[115,10399,10236],{"class":125},[115,10401,606],{"class":121},[115,10403,10404],{"class":125},"i)->age",[115,10406,1169],{"class":121},[115,10408,376],{"class":230},[115,10410,1231],{"class":174},[115,10412,10413],{"class":230},"性别：\"",[115,10415,1169],{"class":121},[115,10417,10236],{"class":125},[115,10419,606],{"class":121},[115,10421,10422],{"class":125},"i)->gender",[115,10424,1169],{"class":121},[115,10426,1192],{"class":125},[115,10428,10429],{"class":117,"line":2599},[115,10430,2187],{"class":125},[115,10432,10433],{"class":117,"line":2604},[115,10434,1565],{"class":125},[115,10436,10437,10439,10441],{"class":117,"line":2610},[115,10438,129],{"class":121},[115,10440,1973],{"class":1963},[115,10442,1976],{"class":125},[115,10444,10445],{"class":117,"line":2616},[115,10446,1546],{"class":125},[115,10448,10449],{"class":117,"line":2621},[115,10450,10451],{"class":184},"    \u002F\u002F定义结构体变量\n",[115,10453,10454,10457,10459,10461],{"class":117,"line":7949},[115,10455,10456],{"class":125},"    Sanguo s1[",[115,10458,444],{"class":174},[115,10460,1065],{"class":125},[115,10462,4908],{"class":121},[115,10464,10465],{"class":117,"line":7973},[115,10466,2030],{"class":125},[115,10468,10469,10471,10473,10475,10477,10479,10481],{"class":117,"line":7978},[115,10470,4917],{"class":125},[115,10472,9953],{"class":230},[115,10474,503],{"class":125},[115,10476,900],{"class":174},[115,10478,503],{"class":125},[115,10480,9962],{"class":230},[115,10482,4930],{"class":125},[115,10484,10485,10487,10489,10491,10493,10495,10497],{"class":117,"line":7984},[115,10486,4917],{"class":125},[115,10488,9971],{"class":230},[115,10490,503],{"class":125},[115,10492,875],{"class":174},[115,10494,503],{"class":125},[115,10496,9962],{"class":230},[115,10498,4930],{"class":125},[115,10500,10501,10503,10505,10507,10509,10511,10513],{"class":117,"line":8011},[115,10502,4917],{"class":125},[115,10504,9988],{"class":230},[115,10506,503],{"class":125},[115,10508,825],{"class":174},[115,10510,503],{"class":125},[115,10512,9962],{"class":230},[115,10514,4930],{"class":125},[115,10516,10517,10519,10521,10523,10525,10527,10529],{"class":117,"line":8016},[115,10518,4917],{"class":125},[115,10520,10005],{"class":230},[115,10522,503],{"class":125},[115,10524,850],{"class":174},[115,10526,503],{"class":125},[115,10528,9962],{"class":230},[115,10530,4930],{"class":125},[115,10532,10533,10535,10537,10539,10541,10543,10545],{"class":117,"line":8022},[115,10534,4917],{"class":125},[115,10536,10022],{"class":230},[115,10538,503],{"class":125},[115,10540,800],{"class":174},[115,10542,503],{"class":125},[115,10544,10031],{"class":230},[115,10546,4930],{"class":125},[115,10548,10549],{"class":117,"line":8034},[115,10550,4951],{"class":125},[115,10552,10553,10555,10557,10559,10562,10564,10567,10569],{"class":117,"line":8046},[115,10554,1985],{"class":121},[115,10556,7332],{"class":125},[115,10558,4203],{"class":121},[115,10560,10561],{"class":125},"(s1)",[115,10563,4209],{"class":121},[115,10565,10566],{"class":125},"(s1[",[115,10568,317],{"class":174},[115,10570,3856],{"class":125},[115,10572,10573,10576,10578,10581,10583,10586,10589,10591],{"class":117,"line":8058},[115,10574,10575],{"class":125},"    Sanguo ",[115,10577,580],{"class":121},[115,10579,10580],{"class":125},"s ",[115,10582,171],{"class":121},[115,10584,10585],{"class":121}," &",[115,10587,10588],{"class":125},"s1[",[115,10590,317],{"class":174},[115,10592,4690],{"class":125},[115,10594,10595],{"class":117,"line":9717},[115,10596,10597],{"class":184},"    \u002F\u002F排序前：\n",[115,10599,10600,10602,10604,10607,10609],{"class":117,"line":9742},[115,10601,6530],{"class":125},[115,10603,1169],{"class":121},[115,10605,10606],{"class":230}," \"排序前：\"",[115,10608,1445],{"class":121},[115,10610,8841],{"class":125},[115,10612,10613,10615],{"class":117,"line":9765},[115,10614,9916],{"class":1963},[115,10616,10617],{"class":125},"(s,len);\n",[115,10619,10620],{"class":117,"line":9789},[115,10621,10622],{"class":184},"    \u002F\u002F调用排序函数\n",[115,10624,10625,10627],{"class":117,"line":9794},[115,10626,7599],{"class":1963},[115,10628,10617],{"class":125},[115,10630,10631],{"class":117,"line":9799},[115,10632,10633],{"class":184},"    \u002F\u002F排序后\n",[115,10635,10636,10638,10640,10643,10645],{"class":117,"line":9804},[115,10637,6530],{"class":125},[115,10639,1169],{"class":121},[115,10641,10642],{"class":230}," \"排序后：\"",[115,10644,1445],{"class":121},[115,10646,8841],{"class":125},[115,10648,10649,10651],{"class":117,"line":9813},[115,10650,9916],{"class":1963},[115,10652,10617],{"class":125},[115,10654,10655],{"class":117,"line":9818},[115,10656,1565],{"class":125},[14,10658,10659,10660,10662],{},"注意：使用指针时直接用传首地址**&s",[115,10661,317],{},"**",[5127,10664,10665],{},"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":22,"searchDepth":37,"depth":37,"links":10667},[10668,10669,10670,10671,10672,10673,10674],{"id":7704,"depth":37,"text":7705},{"id":8066,"depth":37,"text":8067},{"id":8335,"depth":37,"text":8336},{"id":8500,"depth":37,"text":8501},{"id":8716,"depth":37,"text":8717},{"id":9037,"depth":37,"text":9038},{"id":9265,"depth":37,"text":9266},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7693,"description":7701},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10681,"title":10682,"body":10683,"description":22,"extension":40,"meta":12026,"navigation":42,"path":12027,"seo":12028,"stem":12029,"__hash__":12030},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10684,"toc":12020},[10685,10688,10692,10698,10712,10717,10720,10724,10731,10737,10740,10747,10753,10758,10761,10764,10767,11331,11334,11348,11352,11357,11373,11513,11516,11522,11525,11530,11538,11646,11649,11654,11657,11662,11665,11671,11674,12017],[10,10686,10682],{"id":10687},"_5程序内存模型",[57,10689,10691],{"id":10690},"_51内存分区模型","5.1内存分区模型",[14,10693,10694,10695],{},"C++程序在执行时，将内存大方向划分为",[275,10696,10697],{},"4个区域",[1132,10699,10700,10703,10706,10709],{},[72,10701,10702],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[72,10704,10705],{},"全局区：存放全局变量和静态变量以及常量",[72,10707,10708],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[72,10710,10711],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10713,10714],{},[275,10715,10716],{},"内存四区意义：",[14,10718,10719],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[86,10721,10723],{"id":10722},"_511程序运行前","5.1.1程序运行前",[14,10725,10726,10727,10730],{},"​\t在程序编译后，生成了exe可执行程序，",[275,10728,10729],{},"未执行该程序前","分为两个区域",[14,10732,10733,10734],{},"​\t",[275,10735,10736],{},"代码区：",[14,10738,10739],{},"​\t\t存放 CPU 执行的机器指令",[14,10741,10742,10743,10746],{},"​\t\t代码区是",[275,10744,10745],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10748,10742,10749,10752],{},[275,10750,10751],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10754,10733,10755],{},[275,10756,10757],{},"全局区：",[14,10759,10760],{},"​\t\t全局变量和静态变量存放在此.",[14,10762,10763],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10765,10766],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[106,10768,10770],{"className":108,"code":10769,"language":110,"meta":22,"style":22},"\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",[112,10771,10772,10777,10790,10803,10807,10812,10827,10842,10846,10855,10859,10864,10877,10890,10894,10899,10925,10951,10955,10982,11008,11012,11017,11033,11048,11052,11078,11104,11108,11133,11158,11162,11188,11214,11218,11234,11249,11275,11301,11305,11315,11319,11327],{"__ignoreMap":22},[115,10773,10774],{"class":117,"line":118},[115,10775,10776],{"class":184},"\u002F\u002F全局变量\n",[115,10778,10779,10781,10784,10786,10788],{"class":117,"line":37},[115,10780,129],{"class":121},[115,10782,10783],{"class":125}," g_a ",[115,10785,171],{"class":121},[115,10787,2038],{"class":174},[115,10789,1291],{"class":125},[115,10791,10792,10794,10797,10799,10801],{"class":117,"line":1180},[115,10793,129],{"class":121},[115,10795,10796],{"class":125}," g_b ",[115,10798,171],{"class":121},[115,10800,2038],{"class":174},[115,10802,1291],{"class":125},[115,10804,10805],{"class":117,"line":1195},[115,10806,2400],{"emptyLinePlaceholder":42},[115,10808,10809],{"class":117,"line":1201},[115,10810,10811],{"class":184},"\u002F\u002F全局常量\n",[115,10813,10814,10816,10818,10821,10823,10825],{"class":117,"line":1215},[115,10815,6793],{"class":121},[115,10817,2382],{"class":121},[115,10819,10820],{"class":125}," c_g_a ",[115,10822,171],{"class":121},[115,10824,2038],{"class":174},[115,10826,1291],{"class":125},[115,10828,10829,10831,10833,10836,10838,10840],{"class":117,"line":1221},[115,10830,6793],{"class":121},[115,10832,2382],{"class":121},[115,10834,10835],{"class":125}," c_g_b ",[115,10837,171],{"class":121},[115,10839,2038],{"class":174},[115,10841,1291],{"class":125},[115,10843,10844],{"class":117,"line":1312},[115,10845,2400],{"emptyLinePlaceholder":42},[115,10847,10848,10850,10852],{"class":117,"line":1318},[115,10849,129],{"class":121},[115,10851,1973],{"class":1963},[115,10853,10854],{"class":125},"() {\n",[115,10856,10857],{"class":117,"line":1330},[115,10858,2400],{"emptyLinePlaceholder":42},[115,10860,10861],{"class":117,"line":1612},[115,10862,10863],{"class":184},"    \u002F\u002F局部变量\n",[115,10865,10866,10868,10871,10873,10875],{"class":117,"line":1617},[115,10867,1985],{"class":121},[115,10869,10870],{"class":125}," a ",[115,10872,171],{"class":121},[115,10874,2038],{"class":174},[115,10876,1291],{"class":125},[115,10878,10879,10881,10884,10886,10888],{"class":117,"line":1623},[115,10880,1985],{"class":121},[115,10882,10883],{"class":125}," b ",[115,10885,171],{"class":121},[115,10887,2038],{"class":174},[115,10889,1291],{"class":125},[115,10891,10892],{"class":117,"line":1628},[115,10893,2400],{"emptyLinePlaceholder":42},[115,10895,10896],{"class":117,"line":1642},[115,10897,10898],{"class":184},"    \u002F\u002F打印地址\n",[115,10900,10901,10903,10905,10908,10910,10912,10914,10916,10918,10921,10923],{"class":117,"line":1647},[115,10902,6530],{"class":125},[115,10904,1169],{"class":121},[115,10906,10907],{"class":230}," \"局部变量a地址为： \"",[115,10909,1445],{"class":121},[115,10911,1658],{"class":125},[115,10913,129],{"class":121},[115,10915,554],{"class":125},[115,10917,478],{"class":121},[115,10919,10920],{"class":125},"a ",[115,10922,1169],{"class":121},[115,10924,8841],{"class":125},[115,10926,10927,10929,10931,10934,10936,10938,10940,10942,10944,10947,10949],{"class":117,"line":1653},[115,10928,6530],{"class":125},[115,10930,1169],{"class":121},[115,10932,10933],{"class":230}," \"局部变量b地址为： \"",[115,10935,1445],{"class":121},[115,10937,1658],{"class":125},[115,10939,129],{"class":121},[115,10941,554],{"class":125},[115,10943,478],{"class":121},[115,10945,10946],{"class":125},"b ",[115,10948,1169],{"class":121},[115,10950,8841],{"class":125},[115,10952,10953],{"class":117,"line":1674},[115,10954,2400],{"emptyLinePlaceholder":42},[115,10956,10957,10959,10961,10964,10966,10969,10971,10973,10975,10978,10980],{"class":117,"line":1679},[115,10958,6530],{"class":125},[115,10960,1169],{"class":121},[115,10962,10963],{"class":230}," \"全局变量g_a地址为： \"",[115,10965,1445],{"class":121},[115,10967,10968],{"class":125},"  (",[115,10970,129],{"class":121},[115,10972,554],{"class":125},[115,10974,478],{"class":121},[115,10976,10977],{"class":125},"g_a ",[115,10979,1169],{"class":121},[115,10981,8841],{"class":125},[115,10983,10984,10986,10988,10991,10993,10995,10997,10999,11001,11004,11006],{"class":117,"line":1693},[115,10985,6530],{"class":125},[115,10987,1169],{"class":121},[115,10989,10990],{"class":230}," \"全局变量g_b地址为： \"",[115,10992,1445],{"class":121},[115,10994,10968],{"class":125},[115,10996,129],{"class":121},[115,10998,554],{"class":125},[115,11000,478],{"class":121},[115,11002,11003],{"class":125},"g_b ",[115,11005,1169],{"class":121},[115,11007,8841],{"class":125},[115,11009,11010],{"class":117,"line":1698},[115,11011,2400],{"emptyLinePlaceholder":42},[115,11013,11014],{"class":117,"line":1727},[115,11015,11016],{"class":184},"    \u002F\u002F静态变量\n",[115,11018,11019,11022,11024,11027,11029,11031],{"class":117,"line":1732},[115,11020,11021],{"class":121},"    static",[115,11023,2382],{"class":121},[115,11025,11026],{"class":125}," s_a ",[115,11028,171],{"class":121},[115,11030,2038],{"class":174},[115,11032,1291],{"class":125},[115,11034,11035,11037,11039,11042,11044,11046],{"class":117,"line":1749},[115,11036,11021],{"class":121},[115,11038,2382],{"class":121},[115,11040,11041],{"class":125}," s_b ",[115,11043,171],{"class":121},[115,11045,2038],{"class":174},[115,11047,1291],{"class":125},[115,11049,11050],{"class":117,"line":1754},[115,11051,2400],{"emptyLinePlaceholder":42},[115,11053,11054,11056,11058,11061,11063,11065,11067,11069,11071,11074,11076],{"class":117,"line":1759},[115,11055,6530],{"class":125},[115,11057,1169],{"class":121},[115,11059,11060],{"class":230}," \"静态变量s_a地址为： \"",[115,11062,1445],{"class":121},[115,11064,1658],{"class":125},[115,11066,129],{"class":121},[115,11068,554],{"class":125},[115,11070,478],{"class":121},[115,11072,11073],{"class":125},"s_a ",[115,11075,1169],{"class":121},[115,11077,8841],{"class":125},[115,11079,11080,11082,11084,11087,11089,11091,11093,11095,11097,11100,11102],{"class":117,"line":1764},[115,11081,6530],{"class":125},[115,11083,1169],{"class":121},[115,11085,11086],{"class":230}," \"静态变量s_b地址为： \"",[115,11088,1445],{"class":121},[115,11090,1658],{"class":125},[115,11092,129],{"class":121},[115,11094,554],{"class":125},[115,11096,478],{"class":121},[115,11098,11099],{"class":125},"s_b ",[115,11101,1169],{"class":121},[115,11103,8841],{"class":125},[115,11105,11106],{"class":117,"line":1778},[115,11107,2400],{"emptyLinePlaceholder":42},[115,11109,11110,11112,11114,11117,11119,11121,11123,11125,11127,11129,11131],{"class":117,"line":1783},[115,11111,6530],{"class":125},[115,11113,1169],{"class":121},[115,11115,11116],{"class":230}," \"字符串常量地址为： \"",[115,11118,1445],{"class":121},[115,11120,1658],{"class":125},[115,11122,129],{"class":121},[115,11124,554],{"class":125},[115,11126,478],{"class":121},[115,11128,1187],{"class":230},[115,11130,1445],{"class":121},[115,11132,8841],{"class":125},[115,11134,11135,11137,11139,11141,11143,11145,11147,11149,11151,11154,11156],{"class":117,"line":2577},[115,11136,6530],{"class":125},[115,11138,1169],{"class":121},[115,11140,11116],{"class":230},[115,11142,1445],{"class":121},[115,11144,1658],{"class":125},[115,11146,129],{"class":121},[115,11148,554],{"class":125},[115,11150,478],{"class":121},[115,11152,11153],{"class":230},"\"hello world1\"",[115,11155,1445],{"class":121},[115,11157,8841],{"class":125},[115,11159,11160],{"class":117,"line":2591},[115,11161,2400],{"emptyLinePlaceholder":42},[115,11163,11164,11166,11168,11171,11173,11175,11177,11179,11181,11184,11186],{"class":117,"line":2599},[115,11165,6530],{"class":125},[115,11167,1169],{"class":121},[115,11169,11170],{"class":230}," \"全局常量c_g_a地址为： \"",[115,11172,1445],{"class":121},[115,11174,1658],{"class":125},[115,11176,129],{"class":121},[115,11178,554],{"class":125},[115,11180,478],{"class":121},[115,11182,11183],{"class":125},"c_g_a ",[115,11185,1169],{"class":121},[115,11187,8841],{"class":125},[115,11189,11190,11192,11194,11197,11199,11201,11203,11205,11207,11210,11212],{"class":117,"line":2604},[115,11191,6530],{"class":125},[115,11193,1169],{"class":121},[115,11195,11196],{"class":230}," \"全局常量c_g_b地址为： \"",[115,11198,1445],{"class":121},[115,11200,1658],{"class":125},[115,11202,129],{"class":121},[115,11204,554],{"class":125},[115,11206,478],{"class":121},[115,11208,11209],{"class":125},"c_g_b ",[115,11211,1169],{"class":121},[115,11213,8841],{"class":125},[115,11215,11216],{"class":117,"line":2610},[115,11217,2400],{"emptyLinePlaceholder":42},[115,11219,11220,11223,11225,11228,11230,11232],{"class":117,"line":2616},[115,11221,11222],{"class":121},"    const",[115,11224,2382],{"class":121},[115,11226,11227],{"class":125}," c_l_a ",[115,11229,171],{"class":121},[115,11231,2038],{"class":174},[115,11233,1291],{"class":125},[115,11235,11236,11238,11240,11243,11245,11247],{"class":117,"line":2621},[115,11237,11222],{"class":121},[115,11239,2382],{"class":121},[115,11241,11242],{"class":125}," c_l_b ",[115,11244,171],{"class":121},[115,11246,2038],{"class":174},[115,11248,1291],{"class":125},[115,11250,11251,11253,11255,11258,11260,11262,11264,11266,11268,11271,11273],{"class":117,"line":7949},[115,11252,6530],{"class":125},[115,11254,1169],{"class":121},[115,11256,11257],{"class":230}," \"局部常量c_l_a地址为： \"",[115,11259,1445],{"class":121},[115,11261,1658],{"class":125},[115,11263,129],{"class":121},[115,11265,554],{"class":125},[115,11267,478],{"class":121},[115,11269,11270],{"class":125},"c_l_a ",[115,11272,1169],{"class":121},[115,11274,8841],{"class":125},[115,11276,11277,11279,11281,11284,11286,11288,11290,11292,11294,11297,11299],{"class":117,"line":7973},[115,11278,6530],{"class":125},[115,11280,1169],{"class":121},[115,11282,11283],{"class":230}," \"局部常量c_l_b地址为： \"",[115,11285,1445],{"class":121},[115,11287,1658],{"class":125},[115,11289,129],{"class":121},[115,11291,554],{"class":125},[115,11293,478],{"class":121},[115,11295,11296],{"class":125},"c_l_b ",[115,11298,1169],{"class":121},[115,11300,8841],{"class":125},[115,11302,11303],{"class":117,"line":7978},[115,11304,2400],{"emptyLinePlaceholder":42},[115,11306,11307,11309,11311,11313],{"class":117,"line":7984},[115,11308,2303],{"class":1963},[115,11310,126],{"class":125},[115,11312,2308],{"class":230},[115,11314,2719],{"class":125},[115,11316,11317],{"class":117,"line":8011},[115,11318,2400],{"emptyLinePlaceholder":42},[115,11320,11321,11323,11325],{"class":117,"line":8016},[115,11322,4090],{"class":121},[115,11324,4093],{"class":174},[115,11326,1291],{"class":125},[115,11328,11329],{"class":117,"line":8022},[115,11330,1565],{"class":125},[14,11332,11333],{},"总结：",[1132,11335,11336,11339,11342,11345],{},[72,11337,11338],{},"c++中程序运行前分为全局区和代码区",[72,11340,11341],{},"代码区特点是共享和只读",[72,11343,11344],{},"全局区中存放全局变量、静态变量、常量",[72,11346,11347],{},"常量区中存放const修饰的全局常量和字符串常量",[86,11349,11351],{"id":11350},"_512程序运行后","5.1.2程序运行后",[69,11353,11354],{},[72,11355,11356],{},"栈区：",[1132,11358,11359,11366],{},[72,11360,11361,11362,11365],{},"由编译器自动分配释放, 存放",[275,11363,11364],{},"函数的参数值,局部变量","等",[72,11367,11368,11369,11372],{},"注意事项：",[275,11370,11371],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[106,11374,11376],{"className":108,"code":11375,"language":110,"meta":22,"style":22},"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",[112,11377,11378,11389,11393,11408,11420,11424,11428,11436,11441,11456,11474,11491,11501,11509],{"__ignoreMap":22},[115,11379,11380,11382,11384,11387],{"class":117,"line":118},[115,11381,129],{"class":121},[115,11383,6519],{"class":121},[115,11385,11386],{"class":1963}," func",[115,11388,1976],{"class":125},[115,11390,11391],{"class":117,"line":37},[115,11392,1546],{"class":125},[115,11394,11395,11397,11399,11401,11403,11405],{"class":117,"line":1180},[115,11396,1985],{"class":121},[115,11398,10870],{"class":125},[115,11400,171],{"class":121},[115,11402,2038],{"class":174},[115,11404,181],{"class":125},[115,11406,11407],{"class":184}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[115,11409,11410,11412,11414,11417],{"class":117,"line":1195},[115,11411,4090],{"class":121},[115,11413,10585],{"class":121},[115,11415,11416],{"class":125},"a;",[115,11418,11419],{"class":184}," \u002F\u002F放回局部变量的地址\n",[115,11421,11422],{"class":117,"line":1201},[115,11423,1565],{"class":125},[115,11425,11426],{"class":117,"line":1215},[115,11427,2400],{"emptyLinePlaceholder":42},[115,11429,11430,11432,11434],{"class":117,"line":1221},[115,11431,129],{"class":121},[115,11433,1973],{"class":1963},[115,11435,10854],{"class":125},[115,11437,11438],{"class":117,"line":1312},[115,11439,11440],{"class":184},"    \u002F\u002F接受func的返回值\n",[115,11442,11443,11445,11447,11450,11452,11454],{"class":117,"line":1318},[115,11444,1985],{"class":121},[115,11446,6519],{"class":121},[115,11448,11449],{"class":125},"p ",[115,11451,171],{"class":121},[115,11453,11386],{"class":1963},[115,11455,5637],{"class":125},[115,11457,11458,11460,11462,11464,11466,11468,11471],{"class":117,"line":1330},[115,11459,6530],{"class":125},[115,11461,1169],{"class":121},[115,11463,6519],{"class":121},[115,11465,11449],{"class":125},[115,11467,1169],{"class":121},[115,11469,11470],{"class":125}," endl;",[115,11472,11473],{"class":184}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[115,11475,11476,11478,11480,11482,11484,11486,11488],{"class":117,"line":1612},[115,11477,6530],{"class":125},[115,11479,1169],{"class":121},[115,11481,6519],{"class":121},[115,11483,11449],{"class":125},[115,11485,1169],{"class":121},[115,11487,11470],{"class":125},[115,11489,11490],{"class":184}," \u002F\u002F第二次这个数据不再保留\n",[115,11492,11493,11495,11497,11499],{"class":117,"line":1617},[115,11494,2303],{"class":1963},[115,11496,126],{"class":125},[115,11498,2308],{"class":230},[115,11500,2719],{"class":125},[115,11502,11503,11505,11507],{"class":117,"line":1623},[115,11504,4090],{"class":121},[115,11506,4093],{"class":174},[115,11508,1291],{"class":125},[115,11510,11511],{"class":117,"line":1628},[115,11512,1565],{"class":125},[14,11514,11515],{},"输出结果：",[14,11517,11518],{},[20,11519],{"alt":11520,"src":11521},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11523,11524],{},"总结：不要返回局部变量的地址",[69,11526,11527],{"start":37},[72,11528,11529],{},"堆区",[1132,11531,11532,11535],{},[72,11533,11534],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[72,11536,11537],{},"在c++中主要利用new在堆区开辟内存",[106,11539,11541],{"className":108,"code":11540,"language":110,"meta":22,"style":22},"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",[112,11542,11543,11558,11562,11567,11588,11595,11599,11607,11611,11616,11630,11642],{"__ignoreMap":22},[115,11544,11545,11547,11550,11553,11555],{"class":117,"line":118},[115,11546,129],{"class":121},[115,11548,11549],{"class":121},"  *",[115,11551,11552],{"class":1963},"func",[115,11554,2427],{"class":125},[115,11556,11557],{"class":184},"  \u002F\u002F函数返回指针\n",[115,11559,11560],{"class":117,"line":37},[115,11561,1546],{"class":125},[115,11563,11564],{"class":117,"line":1180},[115,11565,11566],{"class":184},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[115,11568,11569,11571,11573,11575,11577,11580,11582,11584,11586],{"class":117,"line":1195},[115,11570,4147],{"class":121},[115,11572,6519],{"class":121},[115,11574,14],{"class":125},[115,11576,171],{"class":121},[115,11578,11579],{"class":121}," new",[115,11581,2382],{"class":121},[115,11583,126],{"class":125},[115,11585,571],{"class":174},[115,11587,2719],{"class":125},[115,11589,11590,11592],{"class":117,"line":1201},[115,11591,4381],{"class":121},[115,11593,11594],{"class":125}," p;\n",[115,11596,11597],{"class":117,"line":1215},[115,11598,1565],{"class":125},[115,11600,11601,11603,11605],{"class":117,"line":1221},[115,11602,129],{"class":121},[115,11604,1973],{"class":1963},[115,11606,1976],{"class":125},[115,11608,11609],{"class":117,"line":1312},[115,11610,1546],{"class":125},[115,11612,11613],{"class":117,"line":1318},[115,11614,11615],{"class":184},"    \u002F\u002F在堆区开辟数据\n",[115,11617,11618,11620,11622,11624,11626,11628],{"class":117,"line":1330},[115,11619,1985],{"class":121},[115,11621,6519],{"class":121},[115,11623,14],{"class":125},[115,11625,171],{"class":121},[115,11627,11552],{"class":1963},[115,11629,5637],{"class":125},[115,11631,11632,11634,11636,11638,11640],{"class":117,"line":1612},[115,11633,1551],{"class":125},[115,11635,6420],{"class":121},[115,11637,14],{"class":125},[115,11639,1169],{"class":121},[115,11641,1192],{"class":125},[115,11643,11644],{"class":117,"line":1617},[115,11645,1565],{"class":125},[14,11647,11648],{},"图片展示：",[14,11650,11651],{},[20,11652],{"alt":11520,"src":11653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11655,11656],{},"堆区内存由程序员管生死！！！",[69,11658,11659],{"start":1180},[72,11660,11661],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11663,11664],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11666,11667,11668],{},"​语法：",[112,11669,11670],{}," new 数据类型",[14,11672,11673],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[106,11675,11677],{"className":108,"code":11676,"language":110,"meta":22,"style":22},"\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",[112,11678,11679,11684,11694,11698,11703,11708,11730,11734,11742,11746,11760,11772,11784,11796,11801,11806,11817,11821,11826,11834,11838,11843,11865,11891,11895,11913,11917,11943,11947,11959,11963,11968,11973,11981,11985,11989,11997,12001,12007,12013],{"__ignoreMap":22},[115,11680,11681],{"class":117,"line":118},[115,11682,11683],{"class":184},"\u002F\u002F1.new的基本语法\n",[115,11685,11686,11688,11690,11692],{"class":117,"line":37},[115,11687,129],{"class":121},[115,11689,6519],{"class":121},[115,11691,11552],{"class":1963},[115,11693,1976],{"class":125},[115,11695,11696],{"class":117,"line":1180},[115,11697,1546],{"class":125},[115,11699,11700],{"class":117,"line":1195},[115,11701,11702],{"class":184},"    \u002F\u002F在堆区创建整型数据\n",[115,11704,11705],{"class":117,"line":1201},[115,11706,11707],{"class":184},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[115,11709,11710,11712,11714,11716,11719,11721,11723,11725,11727],{"class":117,"line":1215},[115,11711,1985],{"class":121},[115,11713,6519],{"class":121},[115,11715,14],{"class":125},[115,11717,11718],{"class":121},"=new",[115,11720,2382],{"class":121},[115,11722,126],{"class":125},[115,11724,571],{"class":174},[115,11726,5967],{"class":125},[115,11728,11729],{"class":184},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[115,11731,11732],{"class":117,"line":1221},[115,11733,1565],{"class":125},[115,11735,11736,11738,11740],{"class":117,"line":1312},[115,11737,5365],{"class":121},[115,11739,5589],{"class":1963},[115,11741,1976],{"class":125},[115,11743,11744],{"class":117,"line":1318},[115,11745,1546],{"class":125},[115,11747,11748,11750,11752,11754,11756,11758],{"class":117,"line":1330},[115,11749,1985],{"class":121},[115,11751,6519],{"class":121},[115,11753,14],{"class":125},[115,11755,171],{"class":121},[115,11757,11552],{"class":1963},[115,11759,5637],{"class":125},[115,11761,11762,11764,11766,11768,11770],{"class":117,"line":1612},[115,11763,1551],{"class":125},[115,11765,6420],{"class":121},[115,11767,14],{"class":125},[115,11769,1169],{"class":121},[115,11771,1192],{"class":125},[115,11773,11774,11776,11778,11780,11782],{"class":117,"line":1617},[115,11775,1551],{"class":125},[115,11777,6420],{"class":121},[115,11779,14],{"class":125},[115,11781,1169],{"class":121},[115,11783,1192],{"class":125},[115,11785,11786,11788,11790,11792,11794],{"class":117,"line":1623},[115,11787,1551],{"class":125},[115,11789,6420],{"class":121},[115,11791,14],{"class":125},[115,11793,1169],{"class":121},[115,11795,1192],{"class":125},[115,11797,11798],{"class":117,"line":1628},[115,11799,11800],{"class":184},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[115,11802,11803],{"class":117,"line":1642},[115,11804,11805],{"class":184},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[115,11807,11808,11811,11814],{"class":117,"line":1647},[115,11809,11810],{"class":121},"    delete",[115,11812,11813],{"class":125}," p;",[115,11815,11816],{"class":184},"\u002F\u002F删除这块地址\n",[115,11818,11819],{"class":117,"line":1653},[115,11820,1565],{"class":125},[115,11822,11823],{"class":117,"line":1674},[115,11824,11825],{"class":184},"\u002F\u002F2.在堆区利用new开辟数组\n",[115,11827,11828,11830,11832],{"class":117,"line":1679},[115,11829,5365],{"class":121},[115,11831,5658],{"class":1963},[115,11833,1976],{"class":125},[115,11835,11836],{"class":117,"line":1693},[115,11837,1546],{"class":125},[115,11839,11840],{"class":117,"line":1698},[115,11841,11842],{"class":184},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[115,11844,11845,11847,11849,11851,11853,11855,11857,11859,11862],{"class":117,"line":1727},[115,11846,1985],{"class":121},[115,11848,6519],{"class":121},[115,11850,3880],{"class":125},[115,11852,11718],{"class":121},[115,11854,2382],{"class":121},[115,11856,1015],{"class":125},[115,11858,571],{"class":174},[115,11860,11861],{"class":125},"];",[115,11863,11864],{"class":184},"\u002F\u002F10代表数组有10个元素\n",[115,11866,11867,11869,11871,11873,11875,11877,11879,11881,11883,11885,11887,11889],{"class":117,"line":1732},[115,11868,3201],{"class":121},[115,11870,1658],{"class":125},[115,11872,129],{"class":121},[115,11874,3032],{"class":125},[115,11876,171],{"class":121},[115,11878,317],{"class":174},[115,11880,3039],{"class":125},[115,11882,1035],{"class":121},[115,11884,571],{"class":174},[115,11886,3039],{"class":125},[115,11888,2292],{"class":121},[115,11890,132],{"class":125},[115,11892,11893],{"class":117,"line":1749},[115,11894,2030],{"class":125},[115,11896,11897,11900,11902,11904,11906,11908,11910],{"class":117,"line":1754},[115,11898,11899],{"class":125},"        arr[i]",[115,11901,171],{"class":121},[115,11903,566],{"class":125},[115,11905,606],{"class":121},[115,11907,436],{"class":174},[115,11909,181],{"class":125},[115,11911,11912],{"class":184},"\u002F\u002F给10个元素赋值100～109\n",[115,11914,11915],{"class":117,"line":1759},[115,11916,2187],{"class":125},[115,11918,11919,11921,11923,11925,11927,11929,11931,11933,11935,11937,11939,11941],{"class":117,"line":1764},[115,11920,3201],{"class":121},[115,11922,1658],{"class":125},[115,11924,129],{"class":121},[115,11926,3032],{"class":125},[115,11928,171],{"class":121},[115,11930,317],{"class":174},[115,11932,3039],{"class":125},[115,11934,1035],{"class":121},[115,11936,571],{"class":174},[115,11938,3039],{"class":125},[115,11940,2292],{"class":121},[115,11942,132],{"class":125},[115,11944,11945],{"class":117,"line":1778},[115,11946,2030],{"class":125},[115,11948,11949,11951,11953,11955,11957],{"class":117,"line":1783},[115,11950,3451],{"class":125},[115,11952,1169],{"class":121},[115,11954,4354],{"class":125},[115,11956,1169],{"class":121},[115,11958,1192],{"class":125},[115,11960,11961],{"class":117,"line":2577},[115,11962,2187],{"class":125},[115,11964,11965],{"class":117,"line":2591},[115,11966,11967],{"class":184},"    \u002F\u002F释放堆区数组\n",[115,11969,11970],{"class":117,"line":2599},[115,11971,11972],{"class":184},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[115,11974,11975,11978],{"class":117,"line":2604},[115,11976,11977],{"class":121},"    delete[]",[115,11979,11980],{"class":125}," arr;\n",[115,11982,11983],{"class":117,"line":2610},[115,11984,1565],{"class":125},[115,11986,11987],{"class":117,"line":2616},[115,11988,2400],{"emptyLinePlaceholder":42},[115,11990,11991,11993,11995],{"class":117,"line":2621},[115,11992,129],{"class":121},[115,11994,1973],{"class":1963},[115,11996,1976],{"class":125},[115,11998,11999],{"class":117,"line":7949},[115,12000,1546],{"class":125},[115,12002,12003,12005],{"class":117,"line":7973},[115,12004,5634],{"class":1963},[115,12006,5637],{"class":125},[115,12008,12009,12011],{"class":117,"line":7978},[115,12010,5703],{"class":1963},[115,12012,5637],{"class":125},[115,12014,12015],{"class":117,"line":7984},[115,12016,1565],{"class":125},[5127,12018,12019],{},"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":22,"searchDepth":37,"depth":37,"links":12021},[12022],{"id":10690,"depth":37,"text":10691,"children":12023},[12024,12025],{"id":10722,"depth":1180,"text":10723},{"id":11350,"depth":1180,"text":11351},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10682,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12032,"title":12033,"body":12034,"description":22,"extension":40,"meta":13515,"navigation":42,"path":13516,"seo":13517,"stem":13518,"__hash__":13519},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12035,"toc":13507},[12036,12039,12043,12046,12049,12218,12222,12227,12244,12249,12401,12405,12408,12411,12805,12809,12812,12817,12820,13132,13136,13142,13302,13304,13312,13316,13319,13326,13504],[10,12037,12033],{"id":12038},"_6引用",[57,12040,12042],{"id":12041},"_61引用基本用法","6.1引用基本用法",[14,12044,12045],{},"引用的本质：给变量起别名",[14,12047,12048],{},"语法：数据类型 &别名=原名",[106,12050,12052],{"className":108,"code":12051,"language":110,"meta":22,"style":22},"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",[112,12053,12054,12062,12066,12078,12090,12094,12113,12132,12136,12147,12151,12170,12188,12192,12202,12206,12214],{"__ignoreMap":22},[115,12055,12056,12058,12060],{"class":117,"line":118},[115,12057,129],{"class":121},[115,12059,1973],{"class":1963},[115,12061,10854],{"class":125},[115,12063,12064],{"class":117,"line":37},[115,12065,2400],{"emptyLinePlaceholder":42},[115,12067,12068,12070,12072,12074,12076],{"class":117,"line":1180},[115,12069,1985],{"class":121},[115,12071,10870],{"class":125},[115,12073,171],{"class":121},[115,12075,2038],{"class":174},[115,12077,1291],{"class":125},[115,12079,12080,12082,12084,12086,12088],{"class":117,"line":1195},[115,12081,1985],{"class":121},[115,12083,10585],{"class":121},[115,12085,10946],{"class":125},[115,12087,171],{"class":121},[115,12089,1433],{"class":125},[115,12091,12092],{"class":117,"line":1201},[115,12093,2400],{"emptyLinePlaceholder":42},[115,12095,12096,12098,12100,12103,12105,12107,12109,12111],{"class":117,"line":1215},[115,12097,6530],{"class":125},[115,12099,1169],{"class":121},[115,12101,12102],{"class":230}," \"a = \"",[115,12104,1445],{"class":121},[115,12106,10870],{"class":125},[115,12108,1169],{"class":121},[115,12110,11470],{"class":125},[115,12112,7269],{"class":184},[115,12114,12115,12117,12119,12122,12124,12126,12128,12130],{"class":117,"line":1221},[115,12116,6530],{"class":125},[115,12118,1169],{"class":121},[115,12120,12121],{"class":230}," \"b = \"",[115,12123,1445],{"class":121},[115,12125,10883],{"class":125},[115,12127,1169],{"class":121},[115,12129,11470],{"class":125},[115,12131,7269],{"class":184},[115,12133,12134],{"class":117,"line":1312},[115,12135,2400],{"emptyLinePlaceholder":42},[115,12137,12138,12141,12143,12145],{"class":117,"line":1318},[115,12139,12140],{"class":125},"    b ",[115,12142,171],{"class":121},[115,12144,5755],{"class":174},[115,12146,1291],{"class":125},[115,12148,12149],{"class":117,"line":1330},[115,12150,2400],{"emptyLinePlaceholder":42},[115,12152,12153,12155,12157,12159,12161,12163,12165,12167],{"class":117,"line":1612},[115,12154,6530],{"class":125},[115,12156,1169],{"class":121},[115,12158,12102],{"class":230},[115,12160,1445],{"class":121},[115,12162,10870],{"class":125},[115,12164,1169],{"class":121},[115,12166,11470],{"class":125},[115,12168,12169],{"class":184},"\u002F\u002F100\n",[115,12171,12172,12174,12176,12178,12180,12182,12184,12186],{"class":117,"line":1617},[115,12173,6530],{"class":125},[115,12175,1169],{"class":121},[115,12177,12121],{"class":230},[115,12179,1445],{"class":121},[115,12181,10883],{"class":125},[115,12183,1169],{"class":121},[115,12185,11470],{"class":125},[115,12187,12169],{"class":184},[115,12189,12190],{"class":117,"line":1623},[115,12191,2400],{"emptyLinePlaceholder":42},[115,12193,12194,12196,12198,12200],{"class":117,"line":1628},[115,12195,2303],{"class":1963},[115,12197,126],{"class":125},[115,12199,2308],{"class":230},[115,12201,2719],{"class":125},[115,12203,12204],{"class":117,"line":1642},[115,12205,2400],{"emptyLinePlaceholder":42},[115,12207,12208,12210,12212],{"class":117,"line":1647},[115,12209,4090],{"class":121},[115,12211,4093],{"class":174},[115,12213,1291],{"class":125},[115,12215,12216],{"class":117,"line":1653},[115,12217,1565],{"class":125},[57,12219,12221],{"id":12220},"_62引用的注意事项","6.2引用的注意事项",[69,12223,12224],{},[72,12225,12226],{},"引用必须要初始化",[106,12228,12230],{"className":108,"code":12229,"language":110,"meta":22,"style":22},"int &b;\u002F\u002F非常错误！\n",[112,12231,12232],{"__ignoreMap":22},[115,12233,12234,12236,12238,12241],{"class":117,"line":118},[115,12235,129],{"class":121},[115,12237,10585],{"class":121},[115,12239,12240],{"class":125},"b;",[115,12242,12243],{"class":184},"\u002F\u002F非常错误！\n",[69,12245,12246],{"start":37},[72,12247,12248],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[106,12250,12252],{"className":108,"code":12251,"language":110,"meta":22,"style":22},"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",[112,12253,12254,12262,12274,12286,12294,12310,12323,12341,12359,12379,12389,12397],{"__ignoreMap":22},[115,12255,12256,12258,12260],{"class":117,"line":118},[115,12257,129],{"class":121},[115,12259,1973],{"class":1963},[115,12261,10854],{"class":125},[115,12263,12264,12266,12268,12270,12272],{"class":117,"line":37},[115,12265,1985],{"class":121},[115,12267,10870],{"class":125},[115,12269,171],{"class":121},[115,12271,2038],{"class":174},[115,12273,1291],{"class":125},[115,12275,12276,12278,12280,12282,12284],{"class":117,"line":1180},[115,12277,1985],{"class":121},[115,12279,10883],{"class":125},[115,12281,171],{"class":121},[115,12283,8951],{"class":174},[115,12285,1291],{"class":125},[115,12287,12288,12291],{"class":117,"line":1195},[115,12289,12290],{"class":184},"    \u002F\u002Fint &c;",[115,12292,12293],{"class":184}," \u002F\u002F错误，引用必须初始化\n",[115,12295,12296,12298,12300,12302,12304,12307],{"class":117,"line":1201},[115,12297,1985],{"class":121},[115,12299,10585],{"class":121},[115,12301,2946],{"class":125},[115,12303,171],{"class":121},[115,12305,12306],{"class":125}," a;",[115,12308,12309],{"class":184}," \u002F\u002F一旦初始化后，就不可以更改\n",[115,12311,12312,12315,12317,12320],{"class":117,"line":1215},[115,12313,12314],{"class":125},"    c ",[115,12316,171],{"class":121},[115,12318,12319],{"class":125}," b;",[115,12321,12322],{"class":184}," \u002F\u002F这是赋值操作，不是更改引用\n",[115,12324,12325,12327,12329,12331,12333,12335,12337,12339],{"class":117,"line":1221},[115,12326,6530],{"class":125},[115,12328,1169],{"class":121},[115,12330,12102],{"class":230},[115,12332,1445],{"class":121},[115,12334,10870],{"class":125},[115,12336,1169],{"class":121},[115,12338,11470],{"class":125},[115,12340,7254],{"class":184},[115,12342,12343,12345,12347,12349,12351,12353,12355,12357],{"class":117,"line":1312},[115,12344,6530],{"class":125},[115,12346,1169],{"class":121},[115,12348,12121],{"class":230},[115,12350,1445],{"class":121},[115,12352,10883],{"class":125},[115,12354,1169],{"class":121},[115,12356,11470],{"class":125},[115,12358,7254],{"class":184},[115,12360,12361,12363,12365,12368,12370,12373,12375,12377],{"class":117,"line":1318},[115,12362,6530],{"class":125},[115,12364,1169],{"class":121},[115,12366,12367],{"class":230}," \"c = \"",[115,12369,1445],{"class":121},[115,12371,12372],{"class":125}," c ",[115,12374,1169],{"class":121},[115,12376,11470],{"class":125},[115,12378,7254],{"class":184},[115,12380,12381,12383,12385,12387],{"class":117,"line":1330},[115,12382,2303],{"class":1963},[115,12384,126],{"class":125},[115,12386,2308],{"class":230},[115,12388,2719],{"class":125},[115,12390,12391,12393,12395],{"class":117,"line":1612},[115,12392,4090],{"class":121},[115,12394,4093],{"class":174},[115,12396,1291],{"class":125},[115,12398,12399],{"class":117,"line":1617},[115,12400,1565],{"class":125},[57,12402,12404],{"id":12403},"_63引用做函数参数","6.3引用做函数参数",[14,12406,12407],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12409,12410],{},"优点：可以简化指针修改实参",[106,12412,12414],{"className":108,"code":12413,"language":110,"meta":22,"style":22},"\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",[112,12415,12416,12421,12444,12455,12465,12474,12478,12482,12487,12509,12521,12533,12543,12547,12551,12556,12578,12588,12596,12604,12608,12612,12620,12624,12636,12648,12652,12663,12689,12693,12713,12737,12741,12751,12775,12779,12789,12793,12801],{"__ignoreMap":22},[115,12417,12418],{"class":117,"line":118},[115,12419,12420],{"class":184},"\u002F\u002F1. 值传递\n",[115,12422,12423,12425,12428,12430,12432,12434,12437,12439,12441],{"class":117,"line":37},[115,12424,5365],{"class":121},[115,12426,12427],{"class":1963}," mySwap01",[115,12429,126],{"class":125},[115,12431,129],{"class":121},[115,12433,1399],{"class":5217},[115,12435,12436],{"class":125},", ",[115,12438,129],{"class":121},[115,12440,2833],{"class":5217},[115,12442,12443],{"class":125},") {\n",[115,12445,12446,12448,12451,12453],{"class":117,"line":1180},[115,12447,1985],{"class":121},[115,12449,12450],{"class":125}," temp ",[115,12452,171],{"class":121},[115,12454,1433],{"class":125},[115,12456,12457,12460,12462],{"class":117,"line":1195},[115,12458,12459],{"class":125},"    a ",[115,12461,171],{"class":121},[115,12463,12464],{"class":125}," b;\n",[115,12466,12467,12469,12471],{"class":117,"line":1201},[115,12468,12140],{"class":125},[115,12470,171],{"class":121},[115,12472,12473],{"class":125}," temp;\n",[115,12475,12476],{"class":117,"line":1215},[115,12477,1565],{"class":125},[115,12479,12480],{"class":117,"line":1221},[115,12481,2400],{"emptyLinePlaceholder":42},[115,12483,12484],{"class":117,"line":1312},[115,12485,12486],{"class":184},"\u002F\u002F2. 地址传递\n",[115,12488,12489,12491,12494,12496,12499,12501,12503,12505,12507],{"class":117,"line":1318},[115,12490,5365],{"class":121},[115,12492,12493],{"class":1963}," mySwap02",[115,12495,126],{"class":125},[115,12497,12498],{"class":121},"int*",[115,12500,1399],{"class":5217},[115,12502,12436],{"class":125},[115,12504,12498],{"class":121},[115,12506,2833],{"class":5217},[115,12508,12443],{"class":125},[115,12510,12511,12513,12515,12517,12519],{"class":117,"line":1330},[115,12512,1985],{"class":121},[115,12514,12450],{"class":125},[115,12516,171],{"class":121},[115,12518,6519],{"class":121},[115,12520,6198],{"class":125},[115,12522,12523,12525,12527,12529,12531],{"class":117,"line":1612},[115,12524,6404],{"class":121},[115,12526,10920],{"class":125},[115,12528,171],{"class":121},[115,12530,6519],{"class":121},[115,12532,6070],{"class":125},[115,12534,12535,12537,12539,12541],{"class":117,"line":1617},[115,12536,6404],{"class":121},[115,12538,10946],{"class":125},[115,12540,171],{"class":121},[115,12542,12473],{"class":125},[115,12544,12545],{"class":117,"line":1623},[115,12546,1565],{"class":125},[115,12548,12549],{"class":117,"line":1628},[115,12550,2400],{"emptyLinePlaceholder":42},[115,12552,12553],{"class":117,"line":1642},[115,12554,12555],{"class":184},"\u002F\u002F3. 引用传递\n",[115,12557,12558,12560,12563,12565,12568,12570,12572,12574,12576],{"class":117,"line":1647},[115,12559,5365],{"class":121},[115,12561,12562],{"class":1963}," mySwap03",[115,12564,126],{"class":125},[115,12566,12567],{"class":121},"int&",[115,12569,1399],{"class":5217},[115,12571,12436],{"class":125},[115,12573,12567],{"class":121},[115,12575,2833],{"class":5217},[115,12577,12443],{"class":125},[115,12579,12580,12582,12584,12586],{"class":117,"line":1653},[115,12581,1985],{"class":121},[115,12583,12450],{"class":125},[115,12585,171],{"class":121},[115,12587,1433],{"class":125},[115,12589,12590,12592,12594],{"class":117,"line":1674},[115,12591,12459],{"class":125},[115,12593,171],{"class":121},[115,12595,12464],{"class":125},[115,12597,12598,12600,12602],{"class":117,"line":1679},[115,12599,12140],{"class":125},[115,12601,171],{"class":121},[115,12603,12473],{"class":125},[115,12605,12606],{"class":117,"line":1693},[115,12607,1565],{"class":125},[115,12609,12610],{"class":117,"line":1698},[115,12611,2400],{"emptyLinePlaceholder":42},[115,12613,12614,12616,12618],{"class":117,"line":1727},[115,12615,129],{"class":121},[115,12617,1973],{"class":1963},[115,12619,10854],{"class":125},[115,12621,12622],{"class":117,"line":1732},[115,12623,2400],{"emptyLinePlaceholder":42},[115,12625,12626,12628,12630,12632,12634],{"class":117,"line":1749},[115,12627,1985],{"class":121},[115,12629,10870],{"class":125},[115,12631,171],{"class":121},[115,12633,2038],{"class":174},[115,12635,1291],{"class":125},[115,12637,12638,12640,12642,12644,12646],{"class":117,"line":1754},[115,12639,1985],{"class":121},[115,12641,10883],{"class":125},[115,12643,171],{"class":121},[115,12645,8951],{"class":174},[115,12647,1291],{"class":125},[115,12649,12650],{"class":117,"line":1759},[115,12651,2400],{"emptyLinePlaceholder":42},[115,12653,12654,12657,12660],{"class":117,"line":1764},[115,12655,12656],{"class":1963},"    mySwap01",[115,12658,12659],{"class":125},"(a, b);",[115,12661,12662],{"class":184},"\u002F\u002F值传递，形参不会修饰实参\n",[115,12664,12665,12667,12669,12672,12674,12676,12678,12681,12683,12685,12687],{"class":117,"line":1778},[115,12666,6530],{"class":125},[115,12668,1169],{"class":121},[115,12670,12671],{"class":230}," \"a:\"",[115,12673,1445],{"class":121},[115,12675,10870],{"class":125},[115,12677,1169],{"class":121},[115,12679,12680],{"class":230}," \" b:\"",[115,12682,1445],{"class":121},[115,12684,10883],{"class":125},[115,12686,1169],{"class":121},[115,12688,8841],{"class":125},[115,12690,12691],{"class":117,"line":1783},[115,12692,2400],{"emptyLinePlaceholder":42},[115,12694,12695,12698,12700,12702,12705,12707,12710],{"class":117,"line":2577},[115,12696,12697],{"class":1963},"    mySwap02",[115,12699,126],{"class":125},[115,12701,478],{"class":121},[115,12703,12704],{"class":125},"a, ",[115,12706,478],{"class":121},[115,12708,12709],{"class":125},"b);",[115,12711,12712],{"class":184},"\u002F\u002F地址传递，形参会修饰实参\n",[115,12714,12715,12717,12719,12721,12723,12725,12727,12729,12731,12733,12735],{"class":117,"line":2591},[115,12716,6530],{"class":125},[115,12718,1169],{"class":121},[115,12720,12671],{"class":230},[115,12722,1445],{"class":121},[115,12724,10870],{"class":125},[115,12726,1169],{"class":121},[115,12728,12680],{"class":230},[115,12730,1445],{"class":121},[115,12732,10883],{"class":125},[115,12734,1169],{"class":121},[115,12736,8841],{"class":125},[115,12738,12739],{"class":117,"line":2599},[115,12740,2400],{"emptyLinePlaceholder":42},[115,12742,12743,12746,12748],{"class":117,"line":2604},[115,12744,12745],{"class":1963},"    mySwap03",[115,12747,12659],{"class":125},[115,12749,12750],{"class":184},"\u002F\u002F引用传递，形参会修饰实参\n",[115,12752,12753,12755,12757,12759,12761,12763,12765,12767,12769,12771,12773],{"class":117,"line":2610},[115,12754,6530],{"class":125},[115,12756,1169],{"class":121},[115,12758,12671],{"class":230},[115,12760,1445],{"class":121},[115,12762,10870],{"class":125},[115,12764,1169],{"class":121},[115,12766,12680],{"class":230},[115,12768,1445],{"class":121},[115,12770,10883],{"class":125},[115,12772,1169],{"class":121},[115,12774,8841],{"class":125},[115,12776,12777],{"class":117,"line":2616},[115,12778,2400],{"emptyLinePlaceholder":42},[115,12780,12781,12783,12785,12787],{"class":117,"line":2621},[115,12782,2303],{"class":1963},[115,12784,126],{"class":125},[115,12786,2308],{"class":230},[115,12788,2719],{"class":125},[115,12790,12791],{"class":117,"line":7949},[115,12792,2400],{"emptyLinePlaceholder":42},[115,12794,12795,12797,12799],{"class":117,"line":7973},[115,12796,4090],{"class":121},[115,12798,4093],{"class":174},[115,12800,1291],{"class":125},[115,12802,12803],{"class":117,"line":7978},[115,12804,1565],{"class":125},[57,12806,12808],{"id":12807},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12810,12811],{},"作用：引用是可以作为函数的返回值存在的",[14,12813,9026,12814],{},[275,12815,12816],{},"不要返回局部变量引用",[14,12818,12819],{},"用法：函数调用作为左值",[106,12821,12823],{"className":9942,"code":12822,"language":9944,"meta":22,"style":22},"\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",[112,12824,12825,12830,12838,12853,12859,12863,12867,12872,12880,12897,12903,12907,12911,12919,12923,12928,12942,12962,12981,12985,12990,13003,13023,13041,13045,13061,13065,13084,13102,13106,13116,13120,13128],{"__ignoreMap":22},[115,12826,12827],{"class":117,"line":118},[115,12828,12829],{"class":184},"\u002F\u002F返回局部变量引用\n",[115,12831,12832,12834,12836],{"class":117,"line":37},[115,12833,12567],{"class":121},[115,12835,5589],{"class":1963},[115,12837,10854],{"class":125},[115,12839,12840,12842,12844,12846,12848,12850],{"class":117,"line":1180},[115,12841,1985],{"class":121},[115,12843,10870],{"class":125},[115,12845,171],{"class":121},[115,12847,2038],{"class":174},[115,12849,181],{"class":125},[115,12851,12852],{"class":184}," \u002F\u002F局部变量\n",[115,12854,12855,12857],{"class":117,"line":1195},[115,12856,4090],{"class":121},[115,12858,1433],{"class":125},[115,12860,12861],{"class":117,"line":1201},[115,12862,1565],{"class":125},[115,12864,12865],{"class":117,"line":1215},[115,12866,2400],{"emptyLinePlaceholder":42},[115,12868,12869],{"class":117,"line":1221},[115,12870,12871],{"class":184},"\u002F\u002F返回静态变量引用\n",[115,12873,12874,12876,12878],{"class":117,"line":1312},[115,12875,12567],{"class":121},[115,12877,5658],{"class":1963},[115,12879,10854],{"class":125},[115,12881,12882,12884,12886,12888,12890,12892,12894],{"class":117,"line":1318},[115,12883,11021],{"class":121},[115,12885,2382],{"class":121},[115,12887,10870],{"class":125},[115,12889,171],{"class":121},[115,12891,8951],{"class":174},[115,12893,181],{"class":125},[115,12895,12896],{"class":184},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[115,12898,12899,12901],{"class":117,"line":1330},[115,12900,4090],{"class":121},[115,12902,1433],{"class":125},[115,12904,12905],{"class":117,"line":1612},[115,12906,1565],{"class":125},[115,12908,12909],{"class":117,"line":1617},[115,12910,2400],{"emptyLinePlaceholder":42},[115,12912,12913,12915,12917],{"class":117,"line":1623},[115,12914,129],{"class":121},[115,12916,1973],{"class":1963},[115,12918,10854],{"class":125},[115,12920,12921],{"class":117,"line":1628},[115,12922,2400],{"emptyLinePlaceholder":42},[115,12924,12925],{"class":117,"line":1642},[115,12926,12927],{"class":184},"    \u002F\u002F不能返回局部变量的引用\n",[115,12929,12930,12933,12936,12938,12940],{"class":117,"line":1647},[115,12931,12932],{"class":121},"    int&",[115,12934,12935],{"class":125}," ref ",[115,12937,171],{"class":121},[115,12939,5589],{"class":1963},[115,12941,5637],{"class":125},[115,12943,12944,12946,12948,12951,12953,12955,12957,12959],{"class":117,"line":1653},[115,12945,6530],{"class":125},[115,12947,1169],{"class":121},[115,12949,12950],{"class":230}," \"ref = \"",[115,12952,1445],{"class":121},[115,12954,12935],{"class":125},[115,12956,1169],{"class":121},[115,12958,11470],{"class":125},[115,12960,12961],{"class":184},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[115,12963,12964,12966,12968,12970,12972,12974,12976,12978],{"class":117,"line":1674},[115,12965,6530],{"class":125},[115,12967,1169],{"class":121},[115,12969,12950],{"class":230},[115,12971,1445],{"class":121},[115,12973,12935],{"class":125},[115,12975,1169],{"class":121},[115,12977,11470],{"class":125},[115,12979,12980],{"class":184},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[115,12982,12983],{"class":117,"line":1679},[115,12984,2400],{"emptyLinePlaceholder":42},[115,12986,12987],{"class":117,"line":1693},[115,12988,12989],{"class":184},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[115,12991,12992,12994,12997,12999,13001],{"class":117,"line":1698},[115,12993,12932],{"class":121},[115,12995,12996],{"class":125}," ref2 ",[115,12998,171],{"class":121},[115,13000,5658],{"class":1963},[115,13002,5637],{"class":125},[115,13004,13005,13007,13009,13012,13014,13016,13018,13020],{"class":117,"line":1727},[115,13006,6530],{"class":125},[115,13008,1169],{"class":121},[115,13010,13011],{"class":230}," \"ref2 = \"",[115,13013,1445],{"class":121},[115,13015,12996],{"class":125},[115,13017,1169],{"class":121},[115,13019,11470],{"class":125},[115,13021,13022],{"class":184}," \u002F\u002F20\n",[115,13024,13025,13027,13029,13031,13033,13035,13037,13039],{"class":117,"line":1732},[115,13026,6530],{"class":125},[115,13028,1169],{"class":121},[115,13030,13011],{"class":230},[115,13032,1445],{"class":121},[115,13034,12996],{"class":125},[115,13036,1169],{"class":121},[115,13038,11470],{"class":125},[115,13040,13022],{"class":184},[115,13042,13043],{"class":117,"line":1749},[115,13044,2400],{"emptyLinePlaceholder":42},[115,13046,13047,13049,13052,13054,13056,13058],{"class":117,"line":1754},[115,13048,5703],{"class":1963},[115,13050,13051],{"class":125},"() ",[115,13053,171],{"class":121},[115,13055,2999],{"class":174},[115,13057,181],{"class":125},[115,13059,13060],{"class":184},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[115,13062,13063],{"class":117,"line":1759},[115,13064,2400],{"emptyLinePlaceholder":42},[115,13066,13067,13069,13071,13073,13075,13077,13079,13081],{"class":117,"line":1764},[115,13068,6530],{"class":125},[115,13070,1169],{"class":121},[115,13072,13011],{"class":230},[115,13074,1445],{"class":121},[115,13076,12996],{"class":125},[115,13078,1169],{"class":121},[115,13080,11470],{"class":125},[115,13082,13083],{"class":184}," \u002F\u002F1000\n",[115,13085,13086,13088,13090,13092,13094,13096,13098,13100],{"class":117,"line":1778},[115,13087,6530],{"class":125},[115,13089,1169],{"class":121},[115,13091,13011],{"class":230},[115,13093,1445],{"class":121},[115,13095,12996],{"class":125},[115,13097,1169],{"class":121},[115,13099,11470],{"class":125},[115,13101,13083],{"class":184},[115,13103,13104],{"class":117,"line":1783},[115,13105,2400],{"emptyLinePlaceholder":42},[115,13107,13108,13110,13112,13114],{"class":117,"line":2577},[115,13109,2303],{"class":1963},[115,13111,126],{"class":125},[115,13113,2308],{"class":230},[115,13115,2719],{"class":125},[115,13117,13118],{"class":117,"line":2591},[115,13119,2400],{"emptyLinePlaceholder":42},[115,13121,13122,13124,13126],{"class":117,"line":2599},[115,13123,4090],{"class":121},[115,13125,4093],{"class":174},[115,13127,1291],{"class":125},[115,13129,13130],{"class":117,"line":2604},[115,13131,1565],{"class":125},[57,13133,13135],{"id":13134},"_65引用的本质","6.5引用的本质",[14,13137,13138,13139],{},"本质：",[275,13140,13141],{},"引用的本质在c++内部实现是一个指针常量.",[106,13143,13145],{"className":108,"code":13144,"language":110,"meta":22,"style":22},"\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",[112,13146,13147,13152,13168,13182,13186,13195,13207,13212,13217,13228,13241,13245,13261,13278,13282,13290,13298],{"__ignoreMap":22},[115,13148,13149],{"class":117,"line":118},[115,13150,13151],{"class":184},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[115,13153,13154,13156,13158,13160,13162,13165],{"class":117,"line":37},[115,13155,5365],{"class":121},[115,13157,11386],{"class":1963},[115,13159,126],{"class":125},[115,13161,12567],{"class":121},[115,13163,13164],{"class":5217}," ref",[115,13166,13167],{"class":125},"){\n",[115,13169,13170,13173,13175,13177,13179],{"class":117,"line":1180},[115,13171,13172],{"class":125},"    ref ",[115,13174,171],{"class":121},[115,13176,5755],{"class":174},[115,13178,181],{"class":125},[115,13180,13181],{"class":184}," \u002F\u002F ref是引用，转换为*ref = 100\n",[115,13183,13184],{"class":117,"line":1195},[115,13185,1565],{"class":125},[115,13187,13188,13190,13192],{"class":117,"line":1201},[115,13189,129],{"class":121},[115,13191,1973],{"class":1963},[115,13193,13194],{"class":125},"(){\n",[115,13196,13197,13199,13201,13203,13205],{"class":117,"line":1215},[115,13198,1985],{"class":121},[115,13200,10870],{"class":125},[115,13202,171],{"class":121},[115,13204,2038],{"class":174},[115,13206,1291],{"class":125},[115,13208,13209],{"class":117,"line":1221},[115,13210,13211],{"class":125},"    \n",[115,13213,13214],{"class":117,"line":1312},[115,13215,13216],{"class":184},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[115,13218,13219,13221,13223,13225],{"class":117,"line":1318},[115,13220,12932],{"class":121},[115,13222,12935],{"class":125},[115,13224,171],{"class":121},[115,13226,13227],{"class":125}," a; \n",[115,13229,13230,13232,13234,13236,13238],{"class":117,"line":1330},[115,13231,13172],{"class":125},[115,13233,171],{"class":121},[115,13235,8951],{"class":174},[115,13237,181],{"class":125},[115,13239,13240],{"class":184}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[115,13242,13243],{"class":117,"line":1612},[115,13244,13211],{"class":125},[115,13246,13247,13249,13251,13253,13255,13257,13259],{"class":117,"line":1617},[115,13248,6530],{"class":125},[115,13250,1169],{"class":121},[115,13252,12671],{"class":230},[115,13254,1445],{"class":121},[115,13256,10870],{"class":125},[115,13258,1169],{"class":121},[115,13260,8841],{"class":125},[115,13262,13263,13265,13267,13270,13272,13274,13276],{"class":117,"line":1623},[115,13264,6530],{"class":125},[115,13266,1169],{"class":121},[115,13268,13269],{"class":230}," \"ref:\"",[115,13271,1445],{"class":121},[115,13273,12935],{"class":125},[115,13275,1169],{"class":121},[115,13277,8841],{"class":125},[115,13279,13280],{"class":117,"line":1628},[115,13281,13211],{"class":125},[115,13283,13284,13287],{"class":117,"line":1642},[115,13285,13286],{"class":1963},"    func",[115,13288,13289],{"class":125},"(a);\n",[115,13291,13292,13294,13296],{"class":117,"line":1647},[115,13293,4090],{"class":121},[115,13295,4093],{"class":174},[115,13297,1291],{"class":125},[115,13299,13300],{"class":117,"line":1653},[115,13301,1565],{"class":125},[14,13303,11333],{},[69,13305,13306,13309],{},[72,13307,13308],{},"引用的本质，就是一个指针常量",[72,13310,13311],{},"引用一旦初始化，就不可以发生改变",[57,13313,13315],{"id":13314},"_66常量引用","6.6常量引用",[14,13317,13318],{},"作用：常量引用主要用来修饰形参",[14,13320,13321,13322,13325],{},"在函数形参列表中，可以加",[275,13323,13324],{},"const修饰形参","，防止形参改变实参",[106,13327,13329],{"className":108,"code":13328,"language":110,"meta":22,"style":22},"\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",[112,13330,13331,13336,13341,13360,13365,13378,13382,13386,13394,13398,13403,13408,13422,13426,13434,13446,13450,13455,13467,13474,13478,13488,13492,13500],{"__ignoreMap":22},[115,13332,13333],{"class":117,"line":118},[115,13334,13335],{"class":184},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[115,13337,13338],{"class":117,"line":37},[115,13339,13340],{"class":184},"\u002F\u002F加上const就不能修改实参的\n",[115,13342,13343,13345,13348,13350,13352,13355,13358],{"class":117,"line":1180},[115,13344,5365],{"class":121},[115,13346,13347],{"class":1963}," showValue",[115,13349,126],{"class":125},[115,13351,6793],{"class":121},[115,13353,13354],{"class":121}," int&",[115,13356,13357],{"class":5217}," v",[115,13359,12443],{"class":125},[115,13361,13362],{"class":117,"line":1195},[115,13363,13364],{"class":184},"    \u002F\u002Fv += 100;\n",[115,13366,13367,13369,13371,13374,13376],{"class":117,"line":1201},[115,13368,6530],{"class":125},[115,13370,1169],{"class":121},[115,13372,13373],{"class":125}," v ",[115,13375,1169],{"class":121},[115,13377,8841],{"class":125},[115,13379,13380],{"class":117,"line":1215},[115,13381,1565],{"class":125},[115,13383,13384],{"class":117,"line":1221},[115,13385,2400],{"emptyLinePlaceholder":42},[115,13387,13388,13390,13392],{"class":117,"line":1312},[115,13389,129],{"class":121},[115,13391,1973],{"class":1963},[115,13393,10854],{"class":125},[115,13395,13396],{"class":117,"line":1318},[115,13397,2400],{"emptyLinePlaceholder":42},[115,13399,13400],{"class":117,"line":1330},[115,13401,13402],{"class":184},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[115,13404,13405],{"class":117,"line":1612},[115,13406,13407],{"class":184},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[115,13409,13410,13412,13414,13416,13418,13420],{"class":117,"line":1617},[115,13411,11222],{"class":121},[115,13413,13354],{"class":121},[115,13415,12935],{"class":125},[115,13417,171],{"class":121},[115,13419,2038],{"class":174},[115,13421,1291],{"class":125},[115,13423,13424],{"class":117,"line":1623},[115,13425,2400],{"emptyLinePlaceholder":42},[115,13427,13428,13431],{"class":117,"line":1628},[115,13429,13430],{"class":184},"    \u002F\u002Fref = 100;",[115,13432,13433],{"class":184},"  \u002F\u002F加入const后不可以修改变量\n",[115,13435,13436,13438,13440,13442,13444],{"class":117,"line":1642},[115,13437,6530],{"class":125},[115,13439,1169],{"class":121},[115,13441,12935],{"class":125},[115,13443,1169],{"class":121},[115,13445,8841],{"class":125},[115,13447,13448],{"class":117,"line":1647},[115,13449,2400],{"emptyLinePlaceholder":42},[115,13451,13452],{"class":117,"line":1653},[115,13453,13454],{"class":184},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[115,13456,13457,13459,13461,13463,13465],{"class":117,"line":1674},[115,13458,1985],{"class":121},[115,13460,10870],{"class":125},[115,13462,171],{"class":121},[115,13464,2038],{"class":174},[115,13466,1291],{"class":125},[115,13468,13469,13472],{"class":117,"line":1679},[115,13470,13471],{"class":1963},"    showValue",[115,13473,13289],{"class":125},[115,13475,13476],{"class":117,"line":1693},[115,13477,2400],{"emptyLinePlaceholder":42},[115,13479,13480,13482,13484,13486],{"class":117,"line":1698},[115,13481,2303],{"class":1963},[115,13483,126],{"class":125},[115,13485,2308],{"class":230},[115,13487,2719],{"class":125},[115,13489,13490],{"class":117,"line":1727},[115,13491,2400],{"emptyLinePlaceholder":42},[115,13493,13494,13496,13498],{"class":117,"line":1732},[115,13495,4090],{"class":121},[115,13497,4093],{"class":174},[115,13499,1291],{"class":125},[115,13501,13502],{"class":117,"line":1749},[115,13503,1565],{"class":125},[5127,13505,13506],{},"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":22,"searchDepth":37,"depth":37,"links":13508},[13509,13510,13511,13512,13513,13514],{"id":12041,"depth":37,"text":12042},{"id":12220,"depth":37,"text":12221},{"id":12403,"depth":37,"text":12404},{"id":12807,"depth":37,"text":12808},{"id":13134,"depth":37,"text":13135},{"id":13314,"depth":37,"text":13315},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12033,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13521,"title":13522,"body":13523,"description":22,"extension":40,"meta":14604,"navigation":42,"path":14605,"seo":14606,"stem":14607,"__hash__":14608},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13524,"toc":14596},[13525,13528,13532,13535,13540,13772,13774,13785,13789,13792,13800,13904,13907,13911,13914,13918,13921,13926,13948,13954,14281,14284,14288,14296,14593],[10,13526,13522],{"id":13527},"_7函数高级部分",[57,13529,13531],{"id":13530},"_71函数默认参数","7.1函数默认参数",[14,13533,13534],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13536,5182,13537],{},[112,13538,13539],{}," 返回值类型  函数名 （参数= 默认值）{}",[106,13541,13543],{"className":108,"code":13542,"language":110,"meta":22,"style":22},"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",[112,13544,13545,13580,13595,13599,13603,13608,13613,13642,13662,13672,13676,13680,13688,13692,13720,13742,13746,13756,13760,13768],{"__ignoreMap":22},[115,13546,13547,13549,13551,13553,13555,13557,13559,13561,13563,13566,13568,13570,13572,13574,13576,13578],{"class":117,"line":118},[115,13548,129],{"class":121},[115,13550,11386],{"class":1963},[115,13552,126],{"class":125},[115,13554,129],{"class":121},[115,13556,1399],{"class":5217},[115,13558,12436],{"class":125},[115,13560,129],{"class":121},[115,13562,2833],{"class":5217},[115,13564,13565],{"class":121}," =",[115,13567,2038],{"class":174},[115,13569,12436],{"class":125},[115,13571,129],{"class":121},[115,13573,2849],{"class":5217},[115,13575,13565],{"class":121},[115,13577,2038],{"class":174},[115,13579,12443],{"class":125},[115,13581,13582,13584,13586,13588,13590,13592],{"class":117,"line":37},[115,13583,4090],{"class":121},[115,13585,10870],{"class":125},[115,13587,606],{"class":121},[115,13589,10883],{"class":125},[115,13591,606],{"class":121},[115,13593,13594],{"class":125}," c;\n",[115,13596,13597],{"class":117,"line":1180},[115,13598,1565],{"class":125},[115,13600,13601],{"class":117,"line":1195},[115,13602,2400],{"emptyLinePlaceholder":42},[115,13604,13605],{"class":117,"line":1201},[115,13606,13607],{"class":184},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[115,13609,13610],{"class":117,"line":1215},[115,13611,13612],{"class":184},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[115,13614,13615,13617,13620,13622,13624,13626,13628,13630,13632,13634,13636,13638,13640],{"class":117,"line":1221},[115,13616,129],{"class":121},[115,13618,13619],{"class":1963}," func2",[115,13621,126],{"class":125},[115,13623,129],{"class":121},[115,13625,1399],{"class":5217},[115,13627,13565],{"class":121},[115,13629,2038],{"class":174},[115,13631,12436],{"class":125},[115,13633,129],{"class":121},[115,13635,2833],{"class":5217},[115,13637,13565],{"class":121},[115,13639,2038],{"class":174},[115,13641,2719],{"class":125},[115,13643,13644,13646,13648,13650,13652,13654,13656,13658,13660],{"class":117,"line":1312},[115,13645,129],{"class":121},[115,13647,13619],{"class":1963},[115,13649,126],{"class":125},[115,13651,129],{"class":121},[115,13653,1399],{"class":5217},[115,13655,12436],{"class":125},[115,13657,129],{"class":121},[115,13659,2833],{"class":5217},[115,13661,12443],{"class":125},[115,13663,13664,13666,13668,13670],{"class":117,"line":1318},[115,13665,4090],{"class":121},[115,13667,10870],{"class":125},[115,13669,606],{"class":121},[115,13671,12464],{"class":125},[115,13673,13674],{"class":117,"line":1330},[115,13675,1565],{"class":125},[115,13677,13678],{"class":117,"line":1612},[115,13679,2400],{"emptyLinePlaceholder":42},[115,13681,13682,13684,13686],{"class":117,"line":1617},[115,13683,129],{"class":121},[115,13685,1973],{"class":1963},[115,13687,10854],{"class":125},[115,13689,13690],{"class":117,"line":1623},[115,13691,2400],{"emptyLinePlaceholder":42},[115,13693,13694,13696,13698,13701,13703,13705,13707,13709,13711,13713,13716,13718],{"class":117,"line":1628},[115,13695,6530],{"class":125},[115,13697,1169],{"class":121},[115,13699,13700],{"class":230}," \"ret = \"",[115,13702,1445],{"class":121},[115,13704,11386],{"class":1963},[115,13706,126],{"class":125},[115,13708,825],{"class":174},[115,13710,12436],{"class":125},[115,13712,825],{"class":174},[115,13714,13715],{"class":125},") ",[115,13717,1169],{"class":121},[115,13719,8841],{"class":125},[115,13721,13722,13724,13726,13728,13730,13732,13734,13736,13738,13740],{"class":117,"line":1642},[115,13723,6530],{"class":125},[115,13725,1169],{"class":121},[115,13727,13700],{"class":230},[115,13729,1445],{"class":121},[115,13731,11386],{"class":1963},[115,13733,126],{"class":125},[115,13735,436],{"class":174},[115,13737,13715],{"class":125},[115,13739,1169],{"class":121},[115,13741,8841],{"class":125},[115,13743,13744],{"class":117,"line":1647},[115,13745,2400],{"emptyLinePlaceholder":42},[115,13747,13748,13750,13752,13754],{"class":117,"line":1653},[115,13749,2303],{"class":1963},[115,13751,126],{"class":125},[115,13753,2308],{"class":230},[115,13755,2719],{"class":125},[115,13757,13758],{"class":117,"line":1674},[115,13759,2400],{"emptyLinePlaceholder":42},[115,13761,13762,13764,13766],{"class":117,"line":1679},[115,13763,4090],{"class":121},[115,13765,4093],{"class":174},[115,13767,1291],{"class":125},[115,13769,13770],{"class":117,"line":1693},[115,13771,1565],{"class":125},[14,13773,11333],{},[69,13775,13776,13779,13782],{},[72,13777,13778],{},"我传就用我；没传就用你",[72,13780,13781],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[72,13783,13784],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[57,13786,13788],{"id":13787},"_72函数的占位参数","7.2函数的占位参数",[14,13790,13791],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13793,13794,13796,13797],{},[275,13795,5182],{}," ",[112,13798,13799],{},"返回值类型 函数名 (数据类型){}",[106,13801,13803],{"className":108,"code":13802,"language":110,"meta":22,"style":22},"\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",[112,13804,13805,13810,13828,13841,13845,13853,13857,13874,13878,13888,13892,13900],{"__ignoreMap":22},[115,13806,13807],{"class":117,"line":118},[115,13808,13809],{"class":184},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[115,13811,13812,13814,13816,13818,13820,13822,13824,13826],{"class":117,"line":37},[115,13813,5365],{"class":121},[115,13815,11386],{"class":1963},[115,13817,126],{"class":125},[115,13819,129],{"class":121},[115,13821,1399],{"class":5217},[115,13823,12436],{"class":125},[115,13825,129],{"class":121},[115,13827,12443],{"class":125},[115,13829,13830,13832,13834,13837,13839],{"class":117,"line":1180},[115,13831,6530],{"class":125},[115,13833,1169],{"class":121},[115,13835,13836],{"class":230}," \"this is func\"",[115,13838,1445],{"class":121},[115,13840,8841],{"class":125},[115,13842,13843],{"class":117,"line":1195},[115,13844,1565],{"class":125},[115,13846,13847,13849,13851],{"class":117,"line":1201},[115,13848,129],{"class":121},[115,13850,1973],{"class":1963},[115,13852,10854],{"class":125},[115,13854,13855],{"class":117,"line":1215},[115,13856,2400],{"emptyLinePlaceholder":42},[115,13858,13859,13861,13863,13865,13867,13869,13871],{"class":117,"line":1221},[115,13860,13286],{"class":1963},[115,13862,126],{"class":125},[115,13864,571],{"class":174},[115,13866,503],{"class":125},[115,13868,571],{"class":174},[115,13870,5967],{"class":125},[115,13872,13873],{"class":184}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[115,13875,13876],{"class":117,"line":1312},[115,13877,2400],{"emptyLinePlaceholder":42},[115,13879,13880,13882,13884,13886],{"class":117,"line":1318},[115,13881,2303],{"class":1963},[115,13883,126],{"class":125},[115,13885,2308],{"class":230},[115,13887,2719],{"class":125},[115,13889,13890],{"class":117,"line":1330},[115,13891,2400],{"emptyLinePlaceholder":42},[115,13893,13894,13896,13898],{"class":117,"line":1612},[115,13895,4090],{"class":121},[115,13897,4093],{"class":174},[115,13899,1291],{"class":125},[115,13901,13902],{"class":117,"line":1617},[115,13903,1565],{"class":125},[14,13905,13906],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[57,13908,13910],{"id":13909},"_73函数重载","7.3函数重载",[14,13912,13913],{},"意思是函数名是可以相同的",[86,13915,13917],{"id":13916},"_731基本语法","7.3.1基本语法",[14,13919,13920],{},"作用：函数名可以相同，提高复用性",[14,13922,13923],{},[275,13924,13925],{},"函数重载满足条件：",[1132,13927,13928,13931,13934],{},[72,13929,13930],{},"同一个作用域下",[72,13932,13933],{},"函数名称相同",[72,13935,13936,13937,13940,13941,13944,13945],{},"函数参数",[275,13938,13939],{},"类型不同","  或者 ",[275,13942,13943],{},"个数不同"," 或者 ",[275,13946,13947],{},"顺序不同",[14,13949,13950,13953],{},[275,13951,13952],{},"注意:","  函数的返回值不可以作为函数重载的条件",[106,13955,13957],{"className":9942,"code":13956,"language":9944,"meta":22,"style":22},"\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",[112,13958,13959,13964,13972,13976,13989,13993,14007,14011,14024,14028,14043,14047,14060,14064,14085,14089,14102,14106,14126,14130,14143,14147,14151,14156,14161,14166,14171,14176,14180,14184,14192,14196,14202,14212,14222,14236,14251,14255,14265,14269,14277],{"__ignoreMap":22},[115,13960,13961],{"class":117,"line":118},[115,13962,13963],{"class":184},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[115,13965,13966,13968,13970],{"class":117,"line":37},[115,13967,5365],{"class":121},[115,13969,11386],{"class":1963},[115,13971,1976],{"class":125},[115,13973,13974],{"class":117,"line":1180},[115,13975,1546],{"class":125},[115,13977,13978,13980,13982,13985,13987],{"class":117,"line":1195},[115,13979,6530],{"class":125},[115,13981,1169],{"class":121},[115,13983,13984],{"class":230}," \"func 的调用！\"",[115,13986,1445],{"class":121},[115,13988,8841],{"class":125},[115,13990,13991],{"class":117,"line":1201},[115,13992,1565],{"class":125},[115,13994,13995,13997,13999,14001,14003,14005],{"class":117,"line":1215},[115,13996,5365],{"class":121},[115,13998,11386],{"class":1963},[115,14000,126],{"class":125},[115,14002,129],{"class":121},[115,14004,1399],{"class":5217},[115,14006,132],{"class":125},[115,14008,14009],{"class":117,"line":1221},[115,14010,1546],{"class":125},[115,14012,14013,14015,14017,14020,14022],{"class":117,"line":1312},[115,14014,6530],{"class":125},[115,14016,1169],{"class":121},[115,14018,14019],{"class":230}," \"func (int a) 的调用！\"",[115,14021,1445],{"class":121},[115,14023,8841],{"class":125},[115,14025,14026],{"class":117,"line":1318},[115,14027,1565],{"class":125},[115,14029,14030,14032,14034,14036,14039,14041],{"class":117,"line":1330},[115,14031,5365],{"class":121},[115,14033,11386],{"class":1963},[115,14035,126],{"class":125},[115,14037,14038],{"class":121},"double",[115,14040,1399],{"class":5217},[115,14042,132],{"class":125},[115,14044,14045],{"class":117,"line":1612},[115,14046,1546],{"class":125},[115,14048,14049,14051,14053,14056,14058],{"class":117,"line":1617},[115,14050,6530],{"class":125},[115,14052,1169],{"class":121},[115,14054,14055],{"class":230}," \"func (double a)的调用！\"",[115,14057,1445],{"class":121},[115,14059,8841],{"class":125},[115,14061,14062],{"class":117,"line":1623},[115,14063,1565],{"class":125},[115,14065,14066,14068,14070,14072,14074,14076,14079,14081,14083],{"class":117,"line":1628},[115,14067,5365],{"class":121},[115,14069,11386],{"class":1963},[115,14071,126],{"class":125},[115,14073,129],{"class":121},[115,14075,1399],{"class":5217},[115,14077,14078],{"class":125}," ,",[115,14080,14038],{"class":121},[115,14082,2833],{"class":5217},[115,14084,132],{"class":125},[115,14086,14087],{"class":117,"line":1642},[115,14088,1546],{"class":125},[115,14090,14091,14093,14095,14098,14100],{"class":117,"line":1647},[115,14092,6530],{"class":125},[115,14094,1169],{"class":121},[115,14096,14097],{"class":230}," \"func (int a ,double b) 的调用！\"",[115,14099,1445],{"class":121},[115,14101,8841],{"class":125},[115,14103,14104],{"class":117,"line":1653},[115,14105,1565],{"class":125},[115,14107,14108,14110,14112,14114,14116,14118,14120,14122,14124],{"class":117,"line":1674},[115,14109,5365],{"class":121},[115,14111,11386],{"class":1963},[115,14113,126],{"class":125},[115,14115,14038],{"class":121},[115,14117,1399],{"class":5217},[115,14119,14078],{"class":125},[115,14121,129],{"class":121},[115,14123,2833],{"class":5217},[115,14125,132],{"class":125},[115,14127,14128],{"class":117,"line":1679},[115,14129,1546],{"class":125},[115,14131,14132,14134,14136,14139,14141],{"class":117,"line":1693},[115,14133,6530],{"class":125},[115,14135,1169],{"class":121},[115,14137,14138],{"class":230}," \"func (double a ,int b)的调用！\"",[115,14140,1445],{"class":121},[115,14142,8841],{"class":125},[115,14144,14145],{"class":117,"line":1698},[115,14146,1565],{"class":125},[115,14148,14149],{"class":117,"line":1727},[115,14150,2400],{"emptyLinePlaceholder":42},[115,14152,14153],{"class":117,"line":1732},[115,14154,14155],{"class":184},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[115,14157,14158],{"class":117,"line":1749},[115,14159,14160],{"class":184},"\u002F\u002Fint func(double a, int b)\n",[115,14162,14163],{"class":117,"line":1754},[115,14164,14165],{"class":184},"\u002F\u002F{\n",[115,14167,14168],{"class":117,"line":1759},[115,14169,14170],{"class":184},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[115,14172,14173],{"class":117,"line":1764},[115,14174,14175],{"class":184},"\u002F\u002F}\n",[115,14177,14178],{"class":117,"line":1778},[115,14179,2400],{"emptyLinePlaceholder":42},[115,14181,14182],{"class":117,"line":1783},[115,14183,2400],{"emptyLinePlaceholder":42},[115,14185,14186,14188,14190],{"class":117,"line":2577},[115,14187,129],{"class":121},[115,14189,1973],{"class":1963},[115,14191,10854],{"class":125},[115,14193,14194],{"class":117,"line":2591},[115,14195,2400],{"emptyLinePlaceholder":42},[115,14197,14198,14200],{"class":117,"line":2599},[115,14199,13286],{"class":1963},[115,14201,5637],{"class":125},[115,14203,14204,14206,14208,14210],{"class":117,"line":2604},[115,14205,13286],{"class":1963},[115,14207,126],{"class":125},[115,14209,571],{"class":174},[115,14211,2719],{"class":125},[115,14213,14214,14216,14218,14220],{"class":117,"line":2610},[115,14215,13286],{"class":1963},[115,14217,126],{"class":125},[115,14219,175],{"class":174},[115,14221,2719],{"class":125},[115,14223,14224,14226,14228,14230,14232,14234],{"class":117,"line":2616},[115,14225,13286],{"class":1963},[115,14227,126],{"class":125},[115,14229,571],{"class":174},[115,14231,503],{"class":125},[115,14233,175],{"class":174},[115,14235,2719],{"class":125},[115,14237,14238,14240,14242,14244,14247,14249],{"class":117,"line":2621},[115,14239,13286],{"class":1963},[115,14241,126],{"class":125},[115,14243,175],{"class":174},[115,14245,14246],{"class":125}," , ",[115,14248,571],{"class":174},[115,14250,2719],{"class":125},[115,14252,14253],{"class":117,"line":7949},[115,14254,13211],{"class":125},[115,14256,14257,14259,14261,14263],{"class":117,"line":7973},[115,14258,2303],{"class":1963},[115,14260,126],{"class":125},[115,14262,2308],{"class":230},[115,14264,2719],{"class":125},[115,14266,14267],{"class":117,"line":7978},[115,14268,2400],{"emptyLinePlaceholder":42},[115,14270,14271,14273,14275],{"class":117,"line":7984},[115,14272,4090],{"class":121},[115,14274,4093],{"class":174},[115,14276,1291],{"class":125},[115,14278,14279],{"class":117,"line":8011},[115,14280,1565],{"class":125},[14,14282,14283],{},"重点：函数返回值不可以作为函数重载条件！",[86,14285,14287],{"id":14286},"_732注意事项","7.3.2注意事项",[1132,14289,14290,14293],{},[72,14291,14292],{},"引用作为重载条件!!!",[72,14294,14295],{},"函数重载碰到函数默认参数",[106,14297,14299],{"className":108,"code":14298,"language":110,"meta":22,"style":22},"\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",[112,14300,14301,14306,14311,14315,14331,14335,14348,14352,14356,14374,14378,14391,14395,14399,14403,14408,14412,14436,14440,14453,14457,14461,14475,14479,14492,14496,14500,14508,14512,14524,14534,14547,14551,14555,14563,14567,14577,14581,14589],{"__ignoreMap":22},[115,14302,14303],{"class":117,"line":118},[115,14304,14305],{"class":184},"\u002F\u002F函数重载注意事项\n",[115,14307,14308],{"class":117,"line":37},[115,14309,14310],{"class":184},"\u002F\u002F1、引用作为重载条件\n",[115,14312,14313],{"class":117,"line":1180},[115,14314,2400],{"emptyLinePlaceholder":42},[115,14316,14317,14319,14321,14323,14325,14327,14329],{"class":117,"line":1195},[115,14318,5365],{"class":121},[115,14320,11386],{"class":1963},[115,14322,126],{"class":125},[115,14324,129],{"class":121},[115,14326,10585],{"class":121},[115,14328,27],{"class":5217},[115,14330,132],{"class":125},[115,14332,14333],{"class":117,"line":1201},[115,14334,1546],{"class":125},[115,14336,14337,14339,14341,14344,14346],{"class":117,"line":1215},[115,14338,6530],{"class":125},[115,14340,1169],{"class":121},[115,14342,14343],{"class":230}," \"func (int &a) 调用 \"",[115,14345,1445],{"class":121},[115,14347,8841],{"class":125},[115,14349,14350],{"class":117,"line":1221},[115,14351,1565],{"class":125},[115,14353,14354],{"class":117,"line":1312},[115,14355,2400],{"emptyLinePlaceholder":42},[115,14357,14358,14360,14362,14364,14366,14368,14370,14372],{"class":117,"line":1318},[115,14359,5365],{"class":121},[115,14361,11386],{"class":1963},[115,14363,126],{"class":125},[115,14365,6793],{"class":121},[115,14367,2382],{"class":121},[115,14369,10585],{"class":121},[115,14371,27],{"class":5217},[115,14373,132],{"class":125},[115,14375,14376],{"class":117,"line":1330},[115,14377,1546],{"class":125},[115,14379,14380,14382,14384,14387,14389],{"class":117,"line":1612},[115,14381,6530],{"class":125},[115,14383,1169],{"class":121},[115,14385,14386],{"class":230}," \"func (const int &a) 调用 \"",[115,14388,1445],{"class":121},[115,14390,8841],{"class":125},[115,14392,14393],{"class":117,"line":1617},[115,14394,1565],{"class":125},[115,14396,14397],{"class":117,"line":1623},[115,14398,2400],{"emptyLinePlaceholder":42},[115,14400,14401],{"class":117,"line":1628},[115,14402,2400],{"emptyLinePlaceholder":42},[115,14404,14405],{"class":117,"line":1642},[115,14406,14407],{"class":184},"\u002F\u002F2、函数重载碰到函数默认参数\n",[115,14409,14410],{"class":117,"line":1647},[115,14411,2400],{"emptyLinePlaceholder":42},[115,14413,14414,14416,14418,14420,14422,14424,14426,14428,14430,14432,14434],{"class":117,"line":1653},[115,14415,5365],{"class":121},[115,14417,13619],{"class":1963},[115,14419,126],{"class":125},[115,14421,129],{"class":121},[115,14423,1399],{"class":5217},[115,14425,12436],{"class":125},[115,14427,129],{"class":121},[115,14429,2833],{"class":5217},[115,14431,13565],{"class":121},[115,14433,2038],{"class":174},[115,14435,132],{"class":125},[115,14437,14438],{"class":117,"line":1674},[115,14439,1546],{"class":125},[115,14441,14442,14444,14446,14449,14451],{"class":117,"line":1679},[115,14443,6530],{"class":125},[115,14445,1169],{"class":121},[115,14447,14448],{"class":230}," \"func2(int a, int b = 10) 调用\"",[115,14450,1445],{"class":121},[115,14452,8841],{"class":125},[115,14454,14455],{"class":117,"line":1693},[115,14456,1565],{"class":125},[115,14458,14459],{"class":117,"line":1698},[115,14460,2400],{"emptyLinePlaceholder":42},[115,14462,14463,14465,14467,14469,14471,14473],{"class":117,"line":1727},[115,14464,5365],{"class":121},[115,14466,13619],{"class":1963},[115,14468,126],{"class":125},[115,14470,129],{"class":121},[115,14472,1399],{"class":5217},[115,14474,132],{"class":125},[115,14476,14477],{"class":117,"line":1732},[115,14478,1546],{"class":125},[115,14480,14481,14483,14485,14488,14490],{"class":117,"line":1749},[115,14482,6530],{"class":125},[115,14484,1169],{"class":121},[115,14486,14487],{"class":230}," \"func2(int a) 调用\"",[115,14489,1445],{"class":121},[115,14491,8841],{"class":125},[115,14493,14494],{"class":117,"line":1754},[115,14495,1565],{"class":125},[115,14497,14498],{"class":117,"line":1759},[115,14499,2400],{"emptyLinePlaceholder":42},[115,14501,14502,14504,14506],{"class":117,"line":1764},[115,14503,129],{"class":121},[115,14505,1973],{"class":1963},[115,14507,10854],{"class":125},[115,14509,14510],{"class":117,"line":1778},[115,14511,13211],{"class":125},[115,14513,14514,14516,14518,14520,14522],{"class":117,"line":1783},[115,14515,1985],{"class":121},[115,14517,10870],{"class":125},[115,14519,171],{"class":121},[115,14521,2038],{"class":174},[115,14523,1291],{"class":125},[115,14525,14526,14528,14531],{"class":117,"line":2577},[115,14527,13286],{"class":1963},[115,14529,14530],{"class":125},"(a);",[115,14532,14533],{"class":184}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[115,14535,14536,14538,14540,14542,14544],{"class":117,"line":2591},[115,14537,13286],{"class":1963},[115,14539,126],{"class":125},[115,14541,571],{"class":174},[115,14543,5967],{"class":125},[115,14545,14546],{"class":184},"\u002F\u002F调用有const   10是个常量\n",[115,14548,14549],{"class":117,"line":2599},[115,14550,2400],{"emptyLinePlaceholder":42},[115,14552,14553],{"class":117,"line":2604},[115,14554,2400],{"emptyLinePlaceholder":42},[115,14556,14557,14560],{"class":117,"line":2610},[115,14558,14559],{"class":184},"    \u002F\u002Ffunc2(10);",[115,14561,14562],{"class":184}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[115,14564,14565],{"class":117,"line":2616},[115,14566,2400],{"emptyLinePlaceholder":42},[115,14568,14569,14571,14573,14575],{"class":117,"line":2621},[115,14570,2303],{"class":1963},[115,14572,126],{"class":125},[115,14574,2308],{"class":230},[115,14576,2719],{"class":125},[115,14578,14579],{"class":117,"line":7949},[115,14580,2400],{"emptyLinePlaceholder":42},[115,14582,14583,14585,14587],{"class":117,"line":7973},[115,14584,4090],{"class":121},[115,14586,4093],{"class":174},[115,14588,1291],{"class":125},[115,14590,14591],{"class":117,"line":7978},[115,14592,1565],{"class":125},[5127,14594,14595],{},"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":22,"searchDepth":37,"depth":37,"links":14597},[14598,14599,14600],{"id":13530,"depth":37,"text":13531},{"id":13787,"depth":37,"text":13788},{"id":13909,"depth":37,"text":13910,"children":14601},[14602,14603],{"id":13916,"depth":1180,"text":13917},{"id":14286,"depth":1180,"text":14287},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13522,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14610,"title":14611,"body":14612,"description":23366,"extension":40,"meta":23367,"navigation":42,"path":23368,"seo":23369,"stem":23370,"__hash__":23371},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14613,"toc":23347},[14614,14617,14623,14630,14635,14638,14641,14644,14648,14652,14655,14658,14666,14671,14674,14681,14686,14845,14848,15101,15104,15107,15110,15115,15118,15121,15132,15137,15373,15377,15387,15390,15398,15545,15549,15552,15555,15559,16004,16008,16016,16024,16936,16943,16948,17576,17579,17582,17585,17704,17707,17794,17797,17923,17926,18020,18023,18376,18380,18388,18392,18399,18402,18405,18416,18422,18427,18439,18447,18467,18475,18492,18678,18681,18685,18688,18691,18694,18697,18700,18703,18706,19166,19172,19176,19179,19190,19777,19780,20269,20273,20276,20279,20282,20285,20288,20296,20692,20696,20699,20702,21149,21152,21155,21160,21163,21168,21171,21175,21178,21180,21186,21189,21495,21505,21546,21550,21553,21555,21588,21591,21898,21900,21915,21918,21941,21950,21956,21959,21963,21966,21969,21974,21985,21990,21998,22003,22133,22136,22139,22314,22319,22531,22535,22538,22652,22657,22896,22900,22904,22907,22910,22915,23020,23023,23026,23029,23033,23144,23147,23150,23155,23207,23210,23213,23218,23264,23267,23272,23340,23342,23345],[10,14615,14611],{"id":14616},"_8类和对象",[14,14618,14619,14620],{},"C++面向对象的三大特性为",[275,14621,14622],{},"封装、继承、多态",[14,14624,14625,14626,14629],{},"C++认为",[275,14627,14628],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14631,14632],{},[275,14633,14634],{},"例如：",[14,14636,14637],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14639,14640],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14642,14643],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[57,14645,14647],{"id":14646},"_81封装","8.1封装",[86,14649,14651],{"id":14650},"_811封装的意义","8.1.1封装的意义",[14,14653,14654],{},"封装是C++面向对象三大特性之一",[14,14656,14657],{},"封装的意义：",[1132,14659,14660,14663],{},[72,14661,14662],{},"将属性和行为作为一个整体，表现生活中的事物",[72,14664,14665],{},"将属性和行为加以权限控制",[14,14667,14668],{},[275,14669,14670],{},"封装意义一：",[14,14672,14673],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14675,14676,13796,14678],{},[275,14677,5182],{},[112,14679,14680],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[69,14682,14683],{},[72,14684,14685],{},"**示例1：**设计一个圆类，求圆的周长",[106,14687,14689],{"className":108,"code":14688,"language":110,"meta":22,"style":22},"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",[112,14690,14691,14699,14703,14708,14713,14718,14723,14730,14735,14745,14749,14767,14771,14775,14783,14787,14792,14797,14802,14807,14818,14841],{"__ignoreMap":22},[115,14692,14693,14696],{"class":117,"line":118},[115,14694,14695],{"class":121},"class",[115,14697,14698],{"class":1963}," Circle\n",[115,14700,14701],{"class":117,"line":37},[115,14702,1546],{"class":125},[115,14704,14705],{"class":117,"line":1180},[115,14706,14707],{"class":184},"    \u002F\u002F访问权限\n",[115,14709,14710],{"class":117,"line":1195},[115,14711,14712],{"class":184},"    \u002F\u002F公共权限\n",[115,14714,14715],{"class":117,"line":1201},[115,14716,14717],{"class":121},"public:\n",[115,14719,14720],{"class":117,"line":1215},[115,14721,14722],{"class":184},"    \u002F\u002F属性\n",[115,14724,14725,14727],{"class":117,"line":1221},[115,14726,1985],{"class":121},[115,14728,14729],{"class":125}," m_r;\n",[115,14731,14732],{"class":117,"line":1312},[115,14733,14734],{"class":184},"    \u002F\u002F行为\n",[115,14736,14737,14740,14743],{"class":117,"line":1318},[115,14738,14739],{"class":121},"    double",[115,14741,14742],{"class":1963}," calculateZC",[115,14744,1976],{"class":125},[115,14746,14747],{"class":117,"line":1330},[115,14748,2030],{"class":125},[115,14750,14751,14754,14757,14759,14762,14764],{"class":117,"line":1612},[115,14752,14753],{"class":121},"        return",[115,14755,14756],{"class":174}," 2",[115,14758,580],{"class":121},[115,14760,14761],{"class":125},"PI",[115,14763,580],{"class":121},[115,14765,14766],{"class":125},"m_r;\n",[115,14768,14769],{"class":117,"line":1617},[115,14770,2187],{"class":125},[115,14772,14773],{"class":117,"line":1623},[115,14774,3995],{"class":125},[115,14776,14777,14779,14781],{"class":117,"line":1628},[115,14778,129],{"class":121},[115,14780,1973],{"class":1963},[115,14782,1976],{"class":125},[115,14784,14785],{"class":117,"line":1642},[115,14786,1546],{"class":125},[115,14788,14789],{"class":117,"line":1647},[115,14790,14791],{"class":184},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[115,14793,14794],{"class":117,"line":1653},[115,14795,14796],{"class":184},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[115,14798,14799],{"class":117,"line":1674},[115,14800,14801],{"class":125},"    Circle c1;\n",[115,14803,14804],{"class":117,"line":1679},[115,14805,14806],{"class":184},"    \u002F\u002F给圆对象 的属性进行赋值\n",[115,14808,14809,14812,14814,14816],{"class":117,"line":1693},[115,14810,14811],{"class":125},"    c1.m_r",[115,14813,171],{"class":121},[115,14815,571],{"class":174},[115,14817,1291],{"class":125},[115,14819,14820,14822,14824,14827,14829,14832,14835,14837,14839],{"class":117,"line":1698},[115,14821,1551],{"class":125},[115,14823,1169],{"class":121},[115,14825,14826],{"class":230},"\"圆的周长\"",[115,14828,1169],{"class":121},[115,14830,14831],{"class":125},"c1.",[115,14833,14834],{"class":1963},"calculateZC",[115,14836,2427],{"class":125},[115,14838,1169],{"class":121},[115,14840,1192],{"class":125},[115,14842,14843],{"class":117,"line":1727},[115,14844,1565],{"class":125},[14,14846,14847],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[106,14849,14851],{"className":108,"code":14850,"language":110,"meta":22,"style":22},"#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",[112,14852,14853,14859,14869,14875,14881,14885,14889,14894,14901,14906,14924,14928,14938,14942,14947,14963,14967,14977,14981,14986,14994,14998,15030,15034,15038,15046,15050,15055,15060,15074,15088,15097],{"__ignoreMap":22},[115,14854,14855,14857],{"class":117,"line":118},[115,14856,1949],{"class":121},[115,14858,1952],{"class":230},[115,14860,14861,14863,14865,14867],{"class":117,"line":37},[115,14862,1957],{"class":121},[115,14864,1960],{"class":121},[115,14866,1964],{"class":1963},[115,14868,1291],{"class":125},[115,14870,14871,14873],{"class":117,"line":1180},[115,14872,1949],{"class":121},[115,14874,7750],{"class":230},[115,14876,14877,14879],{"class":117,"line":1195},[115,14878,14695],{"class":121},[115,14880,7763],{"class":1963},[115,14882,14883],{"class":117,"line":1201},[115,14884,1546],{"class":125},[115,14886,14887],{"class":117,"line":1215},[115,14888,14717],{"class":121},[115,14890,14891],{"class":117,"line":1221},[115,14892,14893],{"class":125},"    string m_name;\n",[115,14895,14896,14898],{"class":117,"line":1312},[115,14897,1985],{"class":121},[115,14899,14900],{"class":125}," m_id;\n",[115,14902,14903],{"class":117,"line":1318},[115,14904,14905],{"class":184},"    \u002F\u002F赋值姓名\n",[115,14907,14908,14911,14914,14916,14919,14922],{"class":117,"line":1330},[115,14909,14910],{"class":121},"    void",[115,14912,14913],{"class":1963}," setName",[115,14915,126],{"class":125},[115,14917,14918],{"class":1963},"string",[115,14920,14921],{"class":5217}," name",[115,14923,132],{"class":125},[115,14925,14926],{"class":117,"line":1612},[115,14927,2030],{"class":125},[115,14929,14930,14933,14935],{"class":117,"line":1617},[115,14931,14932],{"class":125},"        m_name",[115,14934,171],{"class":121},[115,14936,14937],{"class":125},"name;\n",[115,14939,14940],{"class":117,"line":1623},[115,14941,2187],{"class":125},[115,14943,14944],{"class":117,"line":1628},[115,14945,14946],{"class":184},"    \u002F\u002F赋值学号\n",[115,14948,14949,14951,14954,14956,14958,14961],{"class":117,"line":1642},[115,14950,14910],{"class":121},[115,14952,14953],{"class":1963}," setId",[115,14955,126],{"class":125},[115,14957,129],{"class":121},[115,14959,14960],{"class":5217}," id",[115,14962,132],{"class":125},[115,14964,14965],{"class":117,"line":1647},[115,14966,2030],{"class":125},[115,14968,14969,14972,14974],{"class":117,"line":1653},[115,14970,14971],{"class":125},"        m_id",[115,14973,171],{"class":121},[115,14975,14976],{"class":125},"id;\n",[115,14978,14979],{"class":117,"line":1674},[115,14980,2187],{"class":125},[115,14982,14983],{"class":117,"line":1679},[115,14984,14985],{"class":184},"    \u002F\u002F打印学生信息\n",[115,14987,14988,14990,14992],{"class":117,"line":1693},[115,14989,14910],{"class":121},[115,14991,9616],{"class":1963},[115,14993,1976],{"class":125},[115,14995,14996],{"class":117,"line":1698},[115,14997,2030],{"class":125},[115,14999,15000,15002,15004,15007,15009,15012,15014,15016,15018,15021,15023,15026,15028],{"class":117,"line":1727},[115,15001,3451],{"class":125},[115,15003,1169],{"class":121},[115,15005,15006],{"class":230},"\"姓名：\"",[115,15008,1169],{"class":121},[115,15010,15011],{"class":125},"m_name",[115,15013,1169],{"class":121},[115,15015,4359],{"class":230},[115,15017,1169],{"class":121},[115,15019,15020],{"class":230},"\"学号：\"",[115,15022,1169],{"class":121},[115,15024,15025],{"class":125},"m_id",[115,15027,1169],{"class":121},[115,15029,1192],{"class":125},[115,15031,15032],{"class":117,"line":1732},[115,15033,2187],{"class":125},[115,15035,15036],{"class":117,"line":1749},[115,15037,3995],{"class":125},[115,15039,15040,15042,15044],{"class":117,"line":1754},[115,15041,129],{"class":121},[115,15043,1973],{"class":1963},[115,15045,1976],{"class":125},[115,15047,15048],{"class":117,"line":1759},[115,15049,1546],{"class":125},[115,15051,15052],{"class":117,"line":1764},[115,15053,15054],{"class":184},"    \u002F\u002F实例化\n",[115,15056,15057],{"class":117,"line":1778},[115,15058,15059],{"class":125},"    Student s1;\n",[115,15061,15062,15065,15068,15070,15072],{"class":117,"line":1783},[115,15063,15064],{"class":125},"    s1.",[115,15066,15067],{"class":1963},"setName",[115,15069,126],{"class":125},[115,15071,7917],{"class":230},[115,15073,2719],{"class":125},[115,15075,15076,15078,15081,15083,15086],{"class":117,"line":2577},[115,15077,15064],{"class":125},[115,15079,15080],{"class":1963},"setId",[115,15082,126],{"class":125},[115,15084,15085],{"class":174},"123456",[115,15087,2719],{"class":125},[115,15089,15090,15092,15095],{"class":117,"line":2591},[115,15091,15064],{"class":125},[115,15093,15094],{"class":1963},"printInfo",[115,15096,5637],{"class":125},[115,15098,15099],{"class":117,"line":2599},[115,15100,1565],{"class":125},[14,15102,15103],{},"类中的属性和行为统称为成员",[14,15105,15106],{},"属性：成员属性(成员变量)",[14,15108,15109],{},"方法：成员函数(成员方法)",[14,15111,15112],{},[275,15113,15114],{},"封装意义二：",[14,15116,15117],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15119,15120],{},"访问权限有三种：",[69,15122,15123,15126,15129],{},[72,15124,15125],{},"public        公共权限",[72,15127,15128],{},"protected 保护权限",[72,15130,15131],{},"private      私有权限",[14,15133,15134],{},[275,15135,15136],{},"示例：",[106,15138,15140],{"className":9942,"code":15139,"language":9944,"meta":22,"style":22},"\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",[112,15141,15142,15147,15152,15157,15162,15166,15173,15177,15182,15186,15191,15195,15200,15205,15210,15214,15219,15224,15231,15235,15239,15247,15251,15262,15274,15286,15290,15294,15298,15306,15310,15315,15327,15335,15343,15347,15357,15361,15369],{"__ignoreMap":22},[115,15143,15144],{"class":117,"line":118},[115,15145,15146],{"class":184},"\u002F\u002F三种权限\n",[115,15148,15149],{"class":117,"line":37},[115,15150,15151],{"class":184},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[115,15153,15154],{"class":117,"line":1180},[115,15155,15156],{"class":184},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[115,15158,15159],{"class":117,"line":1195},[115,15160,15161],{"class":184},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[115,15163,15164],{"class":117,"line":1201},[115,15165,2400],{"emptyLinePlaceholder":42},[115,15167,15168,15170],{"class":117,"line":1215},[115,15169,14695],{"class":121},[115,15171,15172],{"class":1963}," Person\n",[115,15174,15175],{"class":117,"line":1221},[115,15176,1546],{"class":125},[115,15178,15179],{"class":117,"line":1312},[115,15180,15181],{"class":184},"    \u002F\u002F姓名  公共权限\n",[115,15183,15184],{"class":117,"line":1318},[115,15185,14717],{"class":121},[115,15187,15188],{"class":117,"line":1330},[115,15189,15190],{"class":125},"    string m_Name;\n",[115,15192,15193],{"class":117,"line":1612},[115,15194,2400],{"emptyLinePlaceholder":42},[115,15196,15197],{"class":117,"line":1617},[115,15198,15199],{"class":184},"    \u002F\u002F汽车  保护权限\n",[115,15201,15202],{"class":117,"line":1623},[115,15203,15204],{"class":121},"protected:\n",[115,15206,15207],{"class":117,"line":1628},[115,15208,15209],{"class":125},"    string m_Car;\n",[115,15211,15212],{"class":117,"line":1642},[115,15213,2400],{"emptyLinePlaceholder":42},[115,15215,15216],{"class":117,"line":1647},[115,15217,15218],{"class":184},"    \u002F\u002F银行卡密码  私有权限\n",[115,15220,15221],{"class":117,"line":1653},[115,15222,15223],{"class":121},"private:\n",[115,15225,15226,15228],{"class":117,"line":1674},[115,15227,1985],{"class":121},[115,15229,15230],{"class":125}," m_Password;\n",[115,15232,15233],{"class":117,"line":1679},[115,15234,2400],{"emptyLinePlaceholder":42},[115,15236,15237],{"class":117,"line":1693},[115,15238,14717],{"class":121},[115,15240,15241,15243,15245],{"class":117,"line":1698},[115,15242,14910],{"class":121},[115,15244,11386],{"class":1963},[115,15246,1976],{"class":125},[115,15248,15249],{"class":117,"line":1727},[115,15250,2030],{"class":125},[115,15252,15253,15256,15258,15260],{"class":117,"line":1732},[115,15254,15255],{"class":125},"        m_Name ",[115,15257,171],{"class":121},[115,15259,8939],{"class":230},[115,15261,1291],{"class":125},[115,15263,15264,15267,15269,15272],{"class":117,"line":1749},[115,15265,15266],{"class":125},"        m_Car ",[115,15268,171],{"class":121},[115,15270,15271],{"class":230}," \"拖拉机\"",[115,15273,1291],{"class":125},[115,15275,15276,15279,15281,15284],{"class":117,"line":1754},[115,15277,15278],{"class":125},"        m_Password ",[115,15280,171],{"class":121},[115,15282,15283],{"class":174}," 123456",[115,15285,1291],{"class":125},[115,15287,15288],{"class":117,"line":1759},[115,15289,2187],{"class":125},[115,15291,15292],{"class":117,"line":1764},[115,15293,3995],{"class":125},[115,15295,15296],{"class":117,"line":1778},[115,15297,2400],{"emptyLinePlaceholder":42},[115,15299,15300,15302,15304],{"class":117,"line":1783},[115,15301,129],{"class":121},[115,15303,1973],{"class":1963},[115,15305,10854],{"class":125},[115,15307,15308],{"class":117,"line":2577},[115,15309,2400],{"emptyLinePlaceholder":42},[115,15311,15312],{"class":117,"line":2591},[115,15313,15314],{"class":125},"    Person p;\n",[115,15316,15317,15320,15322,15325],{"class":117,"line":2599},[115,15318,15319],{"class":125},"    p.m_Name ",[115,15321,171],{"class":121},[115,15323,15324],{"class":230}," \"李四\"",[115,15326,1291],{"class":125},[115,15328,15329,15332],{"class":117,"line":2604},[115,15330,15331],{"class":184},"    \u002F\u002Fp.m_Car = \"奔驰\";",[115,15333,15334],{"class":184},"  \u002F\u002F保护权限类外访问不到\n",[115,15336,15337,15340],{"class":117,"line":2610},[115,15338,15339],{"class":184},"    \u002F\u002Fp.m_Password = 123;",[115,15341,15342],{"class":184}," \u002F\u002F私有权限类外访问不到\n",[115,15344,15345],{"class":117,"line":2616},[115,15346,2400],{"emptyLinePlaceholder":42},[115,15348,15349,15351,15353,15355],{"class":117,"line":2621},[115,15350,2303],{"class":1963},[115,15352,126],{"class":125},[115,15354,2308],{"class":230},[115,15356,2719],{"class":125},[115,15358,15359],{"class":117,"line":7949},[115,15360,2400],{"emptyLinePlaceholder":42},[115,15362,15363,15365,15367],{"class":117,"line":7973},[115,15364,4090],{"class":121},[115,15366,4093],{"class":174},[115,15368,1291],{"class":125},[115,15370,15371],{"class":117,"line":7978},[115,15372,1565],{"class":125},[86,15374,15376],{"id":15375},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15378,15379,15380,15383,15384],{},"在C++中 struct和class唯一的",[275,15381,15382],{},"区别","就在于 ",[275,15385,15386],{},"默认的访问权限不同",[14,15388,15389],{},"区别：",[1132,15391,15392,15395],{},[72,15393,15394],{},"struct 默认权限为公共",[72,15396,15397],{},"class   默认权限为私有",[106,15399,15401],{"className":9942,"code":15400,"language":9944,"meta":22,"style":22},"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",[112,15402,15403,15410,15414,15424,15428,15432,15439,15443,15453,15457,15461,15469,15473,15478,15492,15496,15501,15515,15519,15529,15533,15541],{"__ignoreMap":22},[115,15404,15405,15407],{"class":117,"line":118},[115,15406,14695],{"class":121},[115,15408,15409],{"class":1963}," C1\n",[115,15411,15412],{"class":117,"line":37},[115,15413,1546],{"class":125},[115,15415,15416,15418,15421],{"class":117,"line":1180},[115,15417,1985],{"class":121},[115,15419,15420],{"class":125},"  m_A;",[115,15422,15423],{"class":184}," \u002F\u002F默认是私有权限\n",[115,15425,15426],{"class":117,"line":1195},[115,15427,3995],{"class":125},[115,15429,15430],{"class":117,"line":1201},[115,15431,2400],{"emptyLinePlaceholder":42},[115,15433,15434,15436],{"class":117,"line":1215},[115,15435,7760],{"class":121},[115,15437,15438],{"class":1963}," C2\n",[115,15440,15441],{"class":117,"line":1221},[115,15442,1546],{"class":125},[115,15444,15445,15447,15450],{"class":117,"line":1312},[115,15446,1985],{"class":121},[115,15448,15449],{"class":125}," m_A;",[115,15451,15452],{"class":184},"  \u002F\u002F默认是公共权限\n",[115,15454,15455],{"class":117,"line":1318},[115,15456,3995],{"class":125},[115,15458,15459],{"class":117,"line":1330},[115,15460,2400],{"emptyLinePlaceholder":42},[115,15462,15463,15465,15467],{"class":117,"line":1612},[115,15464,129],{"class":121},[115,15466,1973],{"class":1963},[115,15468,10854],{"class":125},[115,15470,15471],{"class":117,"line":1617},[115,15472,2400],{"emptyLinePlaceholder":42},[115,15474,15475],{"class":117,"line":1623},[115,15476,15477],{"class":125},"    C1 c1;\n",[115,15479,15480,15483,15485,15487,15489],{"class":117,"line":1628},[115,15481,15482],{"class":125},"    c1.m_A ",[115,15484,171],{"class":121},[115,15486,2038],{"class":174},[115,15488,181],{"class":125},[115,15490,15491],{"class":184}," \u002F\u002F错误，访问权限是私有\n",[115,15493,15494],{"class":117,"line":1642},[115,15495,2400],{"emptyLinePlaceholder":42},[115,15497,15498],{"class":117,"line":1647},[115,15499,15500],{"class":125},"    C2 c2;\n",[115,15502,15503,15506,15508,15510,15512],{"class":117,"line":1653},[115,15504,15505],{"class":125},"    c2.m_A ",[115,15507,171],{"class":121},[115,15509,2038],{"class":174},[115,15511,181],{"class":125},[115,15513,15514],{"class":184}," \u002F\u002F正确，访问权限是公共\n",[115,15516,15517],{"class":117,"line":1674},[115,15518,2400],{"emptyLinePlaceholder":42},[115,15520,15521,15523,15525,15527],{"class":117,"line":1679},[115,15522,2303],{"class":1963},[115,15524,126],{"class":125},[115,15526,2308],{"class":230},[115,15528,2719],{"class":125},[115,15530,15531],{"class":117,"line":1693},[115,15532,2400],{"emptyLinePlaceholder":42},[115,15534,15535,15537,15539],{"class":117,"line":1698},[115,15536,4090],{"class":121},[115,15538,4093],{"class":174},[115,15540,1291],{"class":125},[115,15542,15543],{"class":117,"line":1727},[115,15544,1565],{"class":125},[86,15546,15548],{"id":15547},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15550,15551],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15553,15554],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15556,15557],{},[275,15558,15136],{},[106,15560,15562],{"className":9942,"code":15561,"language":9944,"meta":22,"style":22},"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",[112,15563,15564,15574,15578,15582,15587,15601,15610,15614,15624,15628,15635,15639,15643,15647,15652,15661,15668,15672,15677,15693,15716,15729,15736,15740,15749,15753,15757,15762,15778,15788,15792,15796,15800,15808,15812,15822,15826,15834,15838,15842,15850,15854,15858,15863,15876,15899,15903,15908,15921,15943,15947,15952,15966,15974,15978,15988,15992,16000],{"__ignoreMap":22},[115,15565,15566,15568,15571],{"class":117,"line":118},[115,15567,14695],{"class":121},[115,15569,15570],{"class":1963}," Person",[115,15572,15573],{"class":125}," {\n",[115,15575,15576],{"class":117,"line":37},[115,15577,14717],{"class":121},[115,15579,15580],{"class":117,"line":1180},[115,15581,2400],{"emptyLinePlaceholder":42},[115,15583,15584],{"class":117,"line":1195},[115,15585,15586],{"class":184},"    \u002F\u002F姓名设置可读可写\n",[115,15588,15589,15591,15593,15595,15597,15599],{"class":117,"line":1201},[115,15590,14910],{"class":121},[115,15592,14913],{"class":1963},[115,15594,126],{"class":125},[115,15596,14918],{"class":1963},[115,15598,14921],{"class":5217},[115,15600,12443],{"class":125},[115,15602,15603,15605,15607],{"class":117,"line":1215},[115,15604,15255],{"class":125},[115,15606,171],{"class":121},[115,15608,15609],{"class":125}," name;\n",[115,15611,15612],{"class":117,"line":1221},[115,15613,2187],{"class":125},[115,15615,15616,15619,15622],{"class":117,"line":1312},[115,15617,15618],{"class":1963},"    string",[115,15620,15621],{"class":1963}," getName",[115,15623,1976],{"class":125},[115,15625,15626],{"class":117,"line":1318},[115,15627,2030],{"class":125},[115,15629,15630,15632],{"class":117,"line":1330},[115,15631,14753],{"class":121},[115,15633,15634],{"class":125}," m_Name;\n",[115,15636,15637],{"class":117,"line":1612},[115,15638,2187],{"class":125},[115,15640,15641],{"class":117,"line":1617},[115,15642,2400],{"emptyLinePlaceholder":42},[115,15644,15645],{"class":117,"line":1623},[115,15646,2400],{"emptyLinePlaceholder":42},[115,15648,15649],{"class":117,"line":1628},[115,15650,15651],{"class":184},"    \u002F\u002F获取年龄 \n",[115,15653,15654,15656,15659],{"class":117,"line":1642},[115,15655,1985],{"class":121},[115,15657,15658],{"class":1963}," getAge",[115,15660,10854],{"class":125},[115,15662,15663,15665],{"class":117,"line":1647},[115,15664,14753],{"class":121},[115,15666,15667],{"class":125}," m_Age;\n",[115,15669,15670],{"class":117,"line":1653},[115,15671,2187],{"class":125},[115,15673,15674],{"class":117,"line":1674},[115,15675,15676],{"class":184},"    \u002F\u002F设置年龄\n",[115,15678,15679,15681,15684,15686,15688,15691],{"class":117,"line":1679},[115,15680,14910],{"class":121},[115,15682,15683],{"class":1963}," setAge",[115,15685,126],{"class":125},[115,15687,129],{"class":121},[115,15689,15690],{"class":5217}," age",[115,15692,12443],{"class":125},[115,15694,15695,15697,15700,15702,15704,15706,15709,15711,15714],{"class":117,"line":1693},[115,15696,2497],{"class":121},[115,15698,15699],{"class":125}," (age ",[115,15701,1035],{"class":121},[115,15703,4093],{"class":174},[115,15705,3255],{"class":121},[115,15707,15708],{"class":125}," age ",[115,15710,1085],{"class":121},[115,15712,15713],{"class":174}," 150",[115,15715,12443],{"class":125},[115,15717,15718,15720,15722,15725,15727],{"class":117,"line":1698},[115,15719,9720],{"class":125},[115,15721,1169],{"class":121},[115,15723,15724],{"class":230}," \"你个老妖精!\"",[115,15726,1445],{"class":121},[115,15728,8841],{"class":125},[115,15730,15731,15734],{"class":117,"line":1727},[115,15732,15733],{"class":121},"            return",[115,15735,1291],{"class":125},[115,15737,15738],{"class":117,"line":1732},[115,15739,2529],{"class":125},[115,15741,15742,15745,15747],{"class":117,"line":1749},[115,15743,15744],{"class":125},"        m_Age ",[115,15746,171],{"class":121},[115,15748,7798],{"class":125},[115,15750,15751],{"class":117,"line":1754},[115,15752,2187],{"class":125},[115,15754,15755],{"class":117,"line":1759},[115,15756,2400],{"emptyLinePlaceholder":42},[115,15758,15759],{"class":117,"line":1764},[115,15760,15761],{"class":184},"    \u002F\u002F情人设置为只写\n",[115,15763,15764,15766,15769,15771,15773,15776],{"class":117,"line":1778},[115,15765,14910],{"class":121},[115,15767,15768],{"class":1963}," setLover",[115,15770,126],{"class":125},[115,15772,14918],{"class":1963},[115,15774,15775],{"class":5217}," lover",[115,15777,12443],{"class":125},[115,15779,15780,15783,15785],{"class":117,"line":1783},[115,15781,15782],{"class":125},"        m_Lover ",[115,15784,171],{"class":121},[115,15786,15787],{"class":125}," lover;\n",[115,15789,15790],{"class":117,"line":2577},[115,15791,2187],{"class":125},[115,15793,15794],{"class":117,"line":2591},[115,15795,2400],{"emptyLinePlaceholder":42},[115,15797,15798],{"class":117,"line":2599},[115,15799,15223],{"class":121},[115,15801,15802,15805],{"class":117,"line":2604},[115,15803,15804],{"class":125},"    string m_Name;",[115,15806,15807],{"class":184}," \u002F\u002F可读可写  姓名\n",[115,15809,15810],{"class":117,"line":2610},[115,15811,13211],{"class":125},[115,15813,15814,15816,15819],{"class":117,"line":2616},[115,15815,1985],{"class":121},[115,15817,15818],{"class":125}," m_Age;",[115,15820,15821],{"class":184}," \u002F\u002F只读  年龄\n",[115,15823,15824],{"class":117,"line":2621},[115,15825,2400],{"emptyLinePlaceholder":42},[115,15827,15828,15831],{"class":117,"line":7949},[115,15829,15830],{"class":125},"    string m_Lover;",[115,15832,15833],{"class":184}," \u002F\u002F只写  情人\n",[115,15835,15836],{"class":117,"line":7973},[115,15837,3995],{"class":125},[115,15839,15840],{"class":117,"line":7978},[115,15841,2400],{"emptyLinePlaceholder":42},[115,15843,15844,15846,15848],{"class":117,"line":7984},[115,15845,129],{"class":121},[115,15847,1973],{"class":1963},[115,15849,10854],{"class":125},[115,15851,15852],{"class":117,"line":8011},[115,15853,2400],{"emptyLinePlaceholder":42},[115,15855,15856],{"class":117,"line":8016},[115,15857,15314],{"class":125},[115,15859,15860],{"class":117,"line":8022},[115,15861,15862],{"class":184},"    \u002F\u002F姓名设置\n",[115,15864,15865,15868,15870,15872,15874],{"class":117,"line":8034},[115,15866,15867],{"class":125},"    p.",[115,15869,15067],{"class":1963},[115,15871,126],{"class":125},[115,15873,7917],{"class":230},[115,15875,2719],{"class":125},[115,15877,15878,15880,15882,15885,15887,15890,15893,15895,15897],{"class":117,"line":8046},[115,15879,6530],{"class":125},[115,15881,1169],{"class":121},[115,15883,15884],{"class":230}," \"姓名： \"",[115,15886,1445],{"class":121},[115,15888,15889],{"class":125}," p.",[115,15891,15892],{"class":1963},"getName",[115,15894,13051],{"class":125},[115,15896,1169],{"class":121},[115,15898,8841],{"class":125},[115,15900,15901],{"class":117,"line":8058},[115,15902,2400],{"emptyLinePlaceholder":42},[115,15904,15905],{"class":117,"line":9717},[115,15906,15907],{"class":184},"    \u002F\u002F年龄设置\n",[115,15909,15910,15912,15915,15917,15919],{"class":117,"line":9742},[115,15911,15867],{"class":125},[115,15913,15914],{"class":1963},"setAge",[115,15916,126],{"class":125},[115,15918,781],{"class":174},[115,15920,2719],{"class":125},[115,15922,15923,15925,15927,15930,15932,15934,15937,15939,15941],{"class":117,"line":9765},[115,15924,6530],{"class":125},[115,15926,1169],{"class":121},[115,15928,15929],{"class":230}," \"年龄： \"",[115,15931,1445],{"class":121},[115,15933,15889],{"class":125},[115,15935,15936],{"class":1963},"getAge",[115,15938,13051],{"class":125},[115,15940,1169],{"class":121},[115,15942,8841],{"class":125},[115,15944,15945],{"class":117,"line":9789},[115,15946,2400],{"emptyLinePlaceholder":42},[115,15948,15949],{"class":117,"line":9794},[115,15950,15951],{"class":184},"    \u002F\u002F情人设置\n",[115,15953,15954,15956,15959,15961,15964],{"class":117,"line":9799},[115,15955,15867],{"class":125},[115,15957,15958],{"class":1963},"setLover",[115,15960,126],{"class":125},[115,15962,15963],{"class":230},"\"苍井\"",[115,15965,2719],{"class":125},[115,15967,15968,15971],{"class":117,"line":9804},[115,15969,15970],{"class":184},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[115,15972,15973],{"class":184},"  \u002F\u002F只写属性，不可以读取\n",[115,15975,15976],{"class":117,"line":9813},[115,15977,2400],{"emptyLinePlaceholder":42},[115,15979,15980,15982,15984,15986],{"class":117,"line":9818},[115,15981,2303],{"class":1963},[115,15983,126],{"class":125},[115,15985,2308],{"class":230},[115,15987,2719],{"class":125},[115,15989,15990],{"class":117,"line":9824},[115,15991,2400],{"emptyLinePlaceholder":42},[115,15993,15994,15996,15998],{"class":117,"line":9845},[115,15995,4090],{"class":121},[115,15997,4093],{"class":174},[115,15999,1291],{"class":125},[115,16001,16002],{"class":117,"line":9851},[115,16003,1565],{"class":125},[86,16005,16007],{"id":16006},"_814封装案例","8.1.4封装案例",[69,16009,16010],{},[72,16011,16012,16015],{},[275,16013,16014],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1132,16017,16018,16021],{},[72,16019,16020],{},"求出立方体的面积和体积",[72,16022,16023],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[106,16025,16027],{"className":108,"code":16026,"language":110,"meta":22,"style":22},"#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",[112,16028,16029,16035,16045,16052,16056,16060,16065,16095,16099,16109,16119,16129,16133,16142,16146,16182,16186,16195,16199,16215,16219,16224,16233,16237,16244,16248,16257,16261,16268,16272,16281,16285,16292,16296,16301,16318,16322,16368,16372,16381,16385,16389,16393,16402,16406,16410,16415,16419,16425,16431,16437,16441,16445,16450,16472,16476,16530,16534,16542,16546,16551,16556,16569,16576,16592,16603,16609,16632,16638,16661,16675,16695,16701,16712,16735,16757,16762,16768,16782,16795,16800,16814,16819,16825,16830,16844,16849,16854,16868,16880,16885,16898,16903,16908,16913,16926,16931],{"__ignoreMap":22},[115,16030,16031,16033],{"class":117,"line":118},[115,16032,1949],{"class":121},[115,16034,1952],{"class":230},[115,16036,16037,16039,16041,16043],{"class":117,"line":37},[115,16038,1957],{"class":121},[115,16040,1960],{"class":121},[115,16042,1964],{"class":1963},[115,16044,1291],{"class":125},[115,16046,16047,16049],{"class":117,"line":1180},[115,16048,14695],{"class":121},[115,16050,16051],{"class":1963}," Cube\n",[115,16053,16054],{"class":117,"line":1195},[115,16055,1546],{"class":125},[115,16057,16058],{"class":117,"line":1201},[115,16059,14717],{"class":121},[115,16061,16062],{"class":117,"line":1215},[115,16063,16064],{"class":184},"    \u002F\u002F输入长宽高\n",[115,16066,16067,16069,16072,16074,16076,16079,16081,16083,16086,16088,16090,16093],{"class":117,"line":1221},[115,16068,14910],{"class":121},[115,16070,16071],{"class":1963}," setLwh",[115,16073,126],{"class":125},[115,16075,129],{"class":121},[115,16077,16078],{"class":5217}," l",[115,16080,503],{"class":125},[115,16082,129],{"class":121},[115,16084,16085],{"class":5217}," w",[115,16087,503],{"class":125},[115,16089,129],{"class":121},[115,16091,16092],{"class":5217}," h",[115,16094,132],{"class":125},[115,16096,16097],{"class":117,"line":1312},[115,16098,2030],{"class":125},[115,16100,16101,16104,16106],{"class":117,"line":1318},[115,16102,16103],{"class":125},"        m_L",[115,16105,171],{"class":121},[115,16107,16108],{"class":125},"l;\n",[115,16110,16111,16114,16116],{"class":117,"line":1330},[115,16112,16113],{"class":125},"        m_W",[115,16115,171],{"class":121},[115,16117,16118],{"class":125},"w;\n",[115,16120,16121,16124,16126],{"class":117,"line":1612},[115,16122,16123],{"class":125},"        m_H",[115,16125,171],{"class":121},[115,16127,16128],{"class":125},"h;\n",[115,16130,16131],{"class":117,"line":1617},[115,16132,2187],{"class":125},[115,16134,16135,16137,16140],{"class":117,"line":1623},[115,16136,1985],{"class":121},[115,16138,16139],{"class":1963}," mianji",[115,16141,1976],{"class":125},[115,16143,16144],{"class":117,"line":1628},[115,16145,2030],{"class":125},[115,16147,16148,16150,16152,16154,16157,16159,16162,16164,16167,16169,16172,16174,16177,16179],{"class":117,"line":1642},[115,16149,14753],{"class":121},[115,16151,14756],{"class":174},[115,16153,580],{"class":121},[115,16155,16156],{"class":125},"(m_L",[115,16158,580],{"class":121},[115,16160,16161],{"class":125},"m_W ",[115,16163,606],{"class":121},[115,16165,16166],{"class":125}," m_L",[115,16168,580],{"class":121},[115,16170,16171],{"class":125},"m_H ",[115,16173,606],{"class":121},[115,16175,16176],{"class":125}," m_W",[115,16178,580],{"class":121},[115,16180,16181],{"class":125},"m_H);\n",[115,16183,16184],{"class":117,"line":1647},[115,16185,2187],{"class":125},[115,16187,16188,16190,16193],{"class":117,"line":1653},[115,16189,1985],{"class":121},[115,16191,16192],{"class":1963}," tiji",[115,16194,1976],{"class":125},[115,16196,16197],{"class":117,"line":1674},[115,16198,2030],{"class":125},[115,16200,16201,16203,16205,16207,16210,16212],{"class":117,"line":1679},[115,16202,14753],{"class":121},[115,16204,16166],{"class":125},[115,16206,580],{"class":121},[115,16208,16209],{"class":125},"m_W",[115,16211,580],{"class":121},[115,16213,16214],{"class":125},"m_H;\n",[115,16216,16217],{"class":117,"line":1693},[115,16218,2187],{"class":125},[115,16220,16221],{"class":117,"line":1698},[115,16222,16223],{"class":184},"    \u002F\u002F获取长宽高\n",[115,16225,16226,16228,16231],{"class":117,"line":1727},[115,16227,1985],{"class":121},[115,16229,16230],{"class":1963}," getLength",[115,16232,1976],{"class":125},[115,16234,16235],{"class":117,"line":1732},[115,16236,2030],{"class":125},[115,16238,16239,16241],{"class":117,"line":1749},[115,16240,14753],{"class":121},[115,16242,16243],{"class":125}," m_L;\n",[115,16245,16246],{"class":117,"line":1754},[115,16247,2187],{"class":125},[115,16249,16250,16252,16255],{"class":117,"line":1759},[115,16251,1985],{"class":121},[115,16253,16254],{"class":1963}," getWidth",[115,16256,1976],{"class":125},[115,16258,16259],{"class":117,"line":1764},[115,16260,2030],{"class":125},[115,16262,16263,16265],{"class":117,"line":1778},[115,16264,14753],{"class":121},[115,16266,16267],{"class":125}," m_W;\n",[115,16269,16270],{"class":117,"line":1783},[115,16271,2187],{"class":125},[115,16273,16274,16276,16279],{"class":117,"line":2577},[115,16275,1985],{"class":121},[115,16277,16278],{"class":1963}," getHeight",[115,16280,1976],{"class":125},[115,16282,16283],{"class":117,"line":2591},[115,16284,2030],{"class":125},[115,16286,16287,16289],{"class":117,"line":2599},[115,16288,14753],{"class":121},[115,16290,16291],{"class":125}," m_H;\n",[115,16293,16294],{"class":117,"line":2604},[115,16295,2187],{"class":125},[115,16297,16298],{"class":117,"line":2610},[115,16299,16300],{"class":184},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[115,16302,16303,16306,16309,16311,16314,16316],{"class":117,"line":2616},[115,16304,16305],{"class":121},"    bool",[115,16307,16308],{"class":1963}," isEqual",[115,16310,126],{"class":125},[115,16312,16313],{"class":1963},"Cube",[115,16315,2849],{"class":5217},[115,16317,132],{"class":125},[115,16319,16320],{"class":117,"line":2621},[115,16321,2030],{"class":125},[115,16323,16324,16326,16329,16332,16334,16336,16339,16341,16344,16347,16349,16351,16354,16356,16358,16361,16363,16365],{"class":117,"line":7949},[115,16325,2497],{"class":121},[115,16327,16328],{"class":125}," (c.",[115,16330,16331],{"class":1963},"getLength",[115,16333,13051],{"class":125},[115,16335,2949],{"class":121},[115,16337,16338],{"class":125}," m_L ",[115,16340,1715],{"class":121},[115,16342,16343],{"class":125}," c.",[115,16345,16346],{"class":1963},"getWidth",[115,16348,13051],{"class":125},[115,16350,2949],{"class":121},[115,16352,16353],{"class":125}," m_W ",[115,16355,1715],{"class":121},[115,16357,16343],{"class":125},[115,16359,16360],{"class":1963},"getHeight",[115,16362,13051],{"class":125},[115,16364,2949],{"class":121},[115,16366,16367],{"class":125}," m_H)\n",[115,16369,16370],{"class":117,"line":7973},[115,16371,2510],{"class":125},[115,16373,16374,16376,16379],{"class":117,"line":7978},[115,16375,15733],{"class":121},[115,16377,16378],{"class":174}," true",[115,16380,1291],{"class":125},[115,16382,16383],{"class":117,"line":7984},[115,16384,2529],{"class":125},[115,16386,16387],{"class":117,"line":8011},[115,16388,2570],{"class":121},[115,16390,16391],{"class":117,"line":8016},[115,16392,2510],{"class":125},[115,16394,16395,16397,16400],{"class":117,"line":8022},[115,16396,15733],{"class":121},[115,16398,16399],{"class":174}," false",[115,16401,1291],{"class":125},[115,16403,16404],{"class":117,"line":8034},[115,16405,2529],{"class":125},[115,16407,16408],{"class":117,"line":8046},[115,16409,2187],{"class":125},[115,16411,16412],{"class":117,"line":8058},[115,16413,16414],{"class":184},"    \u002F\u002F私有属性\n",[115,16416,16417],{"class":117,"line":9717},[115,16418,15223],{"class":121},[115,16420,16421,16423],{"class":117,"line":9742},[115,16422,1985],{"class":121},[115,16424,16243],{"class":125},[115,16426,16427,16429],{"class":117,"line":9765},[115,16428,1985],{"class":121},[115,16430,16267],{"class":125},[115,16432,16433,16435],{"class":117,"line":9789},[115,16434,1985],{"class":121},[115,16436,16291],{"class":125},[115,16438,16439],{"class":117,"line":9794},[115,16440,2400],{"emptyLinePlaceholder":42},[115,16442,16443],{"class":117,"line":9799},[115,16444,3995],{"class":125},[115,16446,16447],{"class":117,"line":9804},[115,16448,16449],{"class":184},"\u002F\u002F全局函数判断两个立方体是否相等\n",[115,16451,16452,16454,16456,16458,16460,16463,16465,16467,16470],{"class":117,"line":9813},[115,16453,1355],{"class":121},[115,16455,16308],{"class":1963},[115,16457,126],{"class":125},[115,16459,16313],{"class":1963},[115,16461,16462],{"class":5217}," c1",[115,16464,503],{"class":125},[115,16466,16313],{"class":1963},[115,16468,16469],{"class":5217}," c2",[115,16471,132],{"class":125},[115,16473,16474],{"class":117,"line":9818},[115,16475,1546],{"class":125},[115,16477,16478,16480,16483,16485,16487,16489,16492,16494,16497,16499,16501,16503,16505,16507,16509,16511,16513,16515,16517,16519,16521,16523,16525,16527],{"class":117,"line":9824},[115,16479,4090],{"class":121},[115,16481,16482],{"class":125}," (c1.",[115,16484,16331],{"class":1963},[115,16486,13051],{"class":125},[115,16488,2949],{"class":121},[115,16490,16491],{"class":125}," c2.",[115,16493,16331],{"class":1963},[115,16495,16496],{"class":125},"()) ",[115,16498,1715],{"class":121},[115,16500,16482],{"class":125},[115,16502,16346],{"class":1963},[115,16504,13051],{"class":125},[115,16506,2949],{"class":121},[115,16508,16491],{"class":125},[115,16510,16346],{"class":1963},[115,16512,16496],{"class":125},[115,16514,1715],{"class":121},[115,16516,16482],{"class":125},[115,16518,16360],{"class":1963},[115,16520,13051],{"class":125},[115,16522,2949],{"class":121},[115,16524,16491],{"class":125},[115,16526,16360],{"class":1963},[115,16528,16529],{"class":125},"());\n",[115,16531,16532],{"class":117,"line":9845},[115,16533,1565],{"class":125},[115,16535,16536,16538,16540],{"class":117,"line":9851},[115,16537,129],{"class":121},[115,16539,1973],{"class":1963},[115,16541,1976],{"class":125},[115,16543,16544],{"class":117,"line":9865},[115,16545,1546],{"class":125},[115,16547,16548],{"class":117,"line":9871},[115,16549,16550],{"class":125},"    Cube c1;\n",[115,16552,16553],{"class":117,"line":9898},[115,16554,16555],{"class":184},"    \u002F\u002F输入立方体的长宽高\n",[115,16557,16558,16560,16562,16565,16567],{"class":117,"line":9907},[115,16559,1551],{"class":125},[115,16561,1169],{"class":121},[115,16563,16564],{"class":230},"\"请输入第一个立方体的长、宽、高：\"",[115,16566,1169],{"class":121},[115,16568,1192],{"class":125},[115,16570,16571,16573],{"class":117,"line":9913},[115,16572,1985],{"class":121},[115,16574,16575],{"class":125}," l,w,h,l1,w1,h1;\n",[115,16577,16578,16580,16582,16584,16586,16588,16590],{"class":117,"line":9921},[115,16579,2012],{"class":125},[115,16581,1430],{"class":121},[115,16583,643],{"class":125},[115,16585,1430],{"class":121},[115,16587,920],{"class":125},[115,16589,1430],{"class":121},[115,16591,16128],{"class":125},[115,16593,16594,16597,16600],{"class":117,"line":9926},[115,16595,16596],{"class":125},"    c1.",[115,16598,16599],{"class":1963},"setLwh",[115,16601,16602],{"class":125},"(l,w,h);\n",[115,16604,16606],{"class":117,"line":16605},66,[115,16607,16608],{"class":184},"    \u002F\u002F面积\n",[115,16610,16612,16614,16616,16619,16621,16623,16626,16628,16630],{"class":117,"line":16611},67,[115,16613,1551],{"class":125},[115,16615,1169],{"class":121},[115,16617,16618],{"class":230},"\"立方体的表面积为：\"",[115,16620,1169],{"class":121},[115,16622,14831],{"class":125},[115,16624,16625],{"class":1963},"mianji",[115,16627,2427],{"class":125},[115,16629,1169],{"class":121},[115,16631,1192],{"class":125},[115,16633,16635],{"class":117,"line":16634},68,[115,16636,16637],{"class":184},"    \u002F\u002F体积\n",[115,16639,16641,16643,16645,16648,16650,16652,16655,16657,16659],{"class":117,"line":16640},69,[115,16642,1551],{"class":125},[115,16644,1169],{"class":121},[115,16646,16647],{"class":230},"\"立方体的体积为：\"",[115,16649,1169],{"class":121},[115,16651,14831],{"class":125},[115,16653,16654],{"class":1963},"tiji",[115,16656,2427],{"class":125},[115,16658,1169],{"class":121},[115,16660,1192],{"class":125},[115,16662,16664,16666,16668,16671,16673],{"class":117,"line":16663},70,[115,16665,1551],{"class":125},[115,16667,1169],{"class":121},[115,16669,16670],{"class":230},"\"请输入第二个立方体的长、宽、高：\"",[115,16672,1169],{"class":121},[115,16674,1192],{"class":125},[115,16676,16678,16680,16682,16685,16687,16690,16692],{"class":117,"line":16677},71,[115,16679,2012],{"class":125},[115,16681,1430],{"class":121},[115,16683,16684],{"class":125},"l1",[115,16686,1430],{"class":121},[115,16688,16689],{"class":125},"w1",[115,16691,1430],{"class":121},[115,16693,16694],{"class":125},"h1;\n",[115,16696,16698],{"class":117,"line":16697},72,[115,16699,16700],{"class":125},"    Cube c2;\n",[115,16702,16704,16707,16709],{"class":117,"line":16703},73,[115,16705,16706],{"class":125},"    c2.",[115,16708,16599],{"class":1963},[115,16710,16711],{"class":125},"(l1,w1,h1);\n",[115,16713,16715,16717,16719,16722,16724,16727,16729,16731,16733],{"class":117,"line":16714},74,[115,16716,1551],{"class":125},[115,16718,1169],{"class":121},[115,16720,16721],{"class":230},"\"第二个立方体的表面积为：\"",[115,16723,1169],{"class":121},[115,16725,16726],{"class":125},"c2.",[115,16728,16625],{"class":1963},[115,16730,2427],{"class":125},[115,16732,1169],{"class":121},[115,16734,1192],{"class":125},[115,16736,16738,16740,16742,16745,16747,16749,16751,16753,16755],{"class":117,"line":16737},75,[115,16739,1551],{"class":125},[115,16741,1169],{"class":121},[115,16743,16744],{"class":230},"\"第二个立方体的体积为：\"",[115,16746,1169],{"class":121},[115,16748,16726],{"class":125},[115,16750,16654],{"class":1963},[115,16752,2427],{"class":125},[115,16754,1169],{"class":121},[115,16756,1192],{"class":125},[115,16758,16760],{"class":117,"line":16759},76,[115,16761,2400],{"emptyLinePlaceholder":42},[115,16763,16765],{"class":117,"line":16764},77,[115,16766,16767],{"class":184},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[115,16769,16771,16773,16775,16778,16780],{"class":117,"line":16770},78,[115,16772,1551],{"class":125},[115,16774,1169],{"class":121},[115,16776,16777],{"class":230},"\"内部函数判断结果：\"",[115,16779,1169],{"class":121},[115,16781,1192],{"class":125},[115,16783,16785,16787,16789,16792],{"class":117,"line":16784},79,[115,16786,3101],{"class":121},[115,16788,16482],{"class":125},[115,16790,16791],{"class":1963},"isEqual",[115,16793,16794],{"class":125},"(c2))\n",[115,16796,16798],{"class":117,"line":16797},80,[115,16799,2030],{"class":125},[115,16801,16803,16805,16807,16810,16812],{"class":117,"line":16802},81,[115,16804,3451],{"class":125},[115,16806,1169],{"class":121},[115,16808,16809],{"class":230},"\"两个立方体相等\"",[115,16811,1169],{"class":121},[115,16813,1192],{"class":125},[115,16815,16817],{"class":117,"line":16816},82,[115,16818,2187],{"class":125},[115,16820,16822],{"class":117,"line":16821},83,[115,16823,16824],{"class":121},"    else\n",[115,16826,16828],{"class":117,"line":16827},84,[115,16829,2030],{"class":125},[115,16831,16833,16835,16837,16840,16842],{"class":117,"line":16832},85,[115,16834,3451],{"class":125},[115,16836,1169],{"class":121},[115,16838,16839],{"class":230},"\"两个立方体不相等\"",[115,16841,1169],{"class":121},[115,16843,1192],{"class":125},[115,16845,16847],{"class":117,"line":16846},86,[115,16848,2187],{"class":125},[115,16850,16852],{"class":117,"line":16851},87,[115,16853,2400],{"emptyLinePlaceholder":42},[115,16855,16857,16859,16861,16864,16866],{"class":117,"line":16856},88,[115,16858,1551],{"class":125},[115,16860,1169],{"class":121},[115,16862,16863],{"class":230},"\"全局函数判断结果：\"",[115,16865,1169],{"class":121},[115,16867,1192],{"class":125},[115,16869,16871,16873,16875,16877],{"class":117,"line":16870},89,[115,16872,3101],{"class":121},[115,16874,1658],{"class":125},[115,16876,16791],{"class":1963},[115,16878,16879],{"class":125},"(c1, c2))\n",[115,16881,16883],{"class":117,"line":16882},90,[115,16884,2030],{"class":125},[115,16886,16888,16890,16892,16894,16896],{"class":117,"line":16887},91,[115,16889,3451],{"class":125},[115,16891,1169],{"class":121},[115,16893,16809],{"class":230},[115,16895,1169],{"class":121},[115,16897,1192],{"class":125},[115,16899,16901],{"class":117,"line":16900},92,[115,16902,2187],{"class":125},[115,16904,16906],{"class":117,"line":16905},93,[115,16907,16824],{"class":121},[115,16909,16911],{"class":117,"line":16910},94,[115,16912,2030],{"class":125},[115,16914,16916,16918,16920,16922,16924],{"class":117,"line":16915},95,[115,16917,3451],{"class":125},[115,16919,1169],{"class":121},[115,16921,16839],{"class":230},[115,16923,1169],{"class":121},[115,16925,1192],{"class":125},[115,16927,16929],{"class":117,"line":16928},96,[115,16930,2187],{"class":125},[115,16932,16934],{"class":117,"line":16933},97,[115,16935,1565],{"class":125},[69,16937,16938],{"start":37},[72,16939,16940],{},[275,16941,16942],{},"练习案例2：点和圆的关系",[1132,16944,16945],{},[72,16946,16947],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[106,16949,16951],{"className":108,"code":16950,"language":110,"meta":22,"style":22},"#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",[112,16952,16953,16959,16969,16976,16983,16987,16991,16996,17030,17035,17051,17065,17069,17073,17080,17087,17091,17097,17101,17105,17109,17131,17154,17159,17173,17188,17192,17196,17202,17207,17212,17216,17242,17246,17276,17304,17332,17349,17353,17366,17370,17374,17378,17391,17395,17399,17407,17411,17415,17419,17424,17428,17439,17446,17455,17465,17476,17483,17496,17507,17517,17528,17535,17549,17554,17564,17572],{"__ignoreMap":22},[115,16954,16955,16957],{"class":117,"line":118},[115,16956,1949],{"class":121},[115,16958,1952],{"class":230},[115,16960,16961,16963,16965,16967],{"class":117,"line":37},[115,16962,1957],{"class":121},[115,16964,1960],{"class":121},[115,16966,1964],{"class":1963},[115,16968,1291],{"class":125},[115,16970,16971,16973],{"class":117,"line":1180},[115,16972,1949],{"class":121},[115,16974,16975],{"class":230},"\u003Ccmath>\n",[115,16977,16978,16980],{"class":117,"line":1195},[115,16979,14695],{"class":121},[115,16981,16982],{"class":1963}," Point\n",[115,16984,16985],{"class":117,"line":1201},[115,16986,1546],{"class":125},[115,16988,16989],{"class":117,"line":1215},[115,16990,14717],{"class":121},[115,16992,16993],{"class":117,"line":1221},[115,16994,16995],{"class":184},"    \u002F\u002F赋值\n",[115,16997,16998,17000,17003,17005,17007,17010,17012,17014,17017,17020,17022,17025,17027],{"class":117,"line":1312},[115,16999,14910],{"class":121},[115,17001,17002],{"class":1963}," setPoint",[115,17004,126],{"class":125},[115,17006,14038],{"class":121},[115,17008,17009],{"class":5217}," x",[115,17011,12436],{"class":125},[115,17013,14038],{"class":121},[115,17015,17016],{"class":5217}," y",[115,17018,17019],{"class":125},") { m_x ",[115,17021,171],{"class":121},[115,17023,17024],{"class":125}," x; m_y ",[115,17026,171],{"class":121},[115,17028,17029],{"class":125}," y; }\n",[115,17031,17032],{"class":117,"line":1318},[115,17033,17034],{"class":184},"    \u002F\u002F获取坐标\n",[115,17036,17037,17039,17042,17045,17048],{"class":117,"line":1330},[115,17038,14739],{"class":121},[115,17040,17041],{"class":1963}," getX",[115,17043,17044],{"class":125},"() { ",[115,17046,17047],{"class":121},"return",[115,17049,17050],{"class":125}," m_x; }\n",[115,17052,17053,17055,17058,17060,17062],{"class":117,"line":1612},[115,17054,14739],{"class":121},[115,17056,17057],{"class":1963}," getY",[115,17059,17044],{"class":125},[115,17061,17047],{"class":121},[115,17063,17064],{"class":125}," m_y; }\n",[115,17066,17067],{"class":117,"line":1617},[115,17068,2400],{"emptyLinePlaceholder":42},[115,17070,17071],{"class":117,"line":1623},[115,17072,15223],{"class":121},[115,17074,17075,17077],{"class":117,"line":1628},[115,17076,14739],{"class":121},[115,17078,17079],{"class":125}," m_x;\n",[115,17081,17082,17084],{"class":117,"line":1642},[115,17083,14739],{"class":121},[115,17085,17086],{"class":125}," m_y;\n",[115,17088,17089],{"class":117,"line":1647},[115,17090,3995],{"class":125},[115,17092,17093,17095],{"class":117,"line":1653},[115,17094,14695],{"class":121},[115,17096,14698],{"class":1963},[115,17098,17099],{"class":117,"line":1674},[115,17100,1546],{"class":125},[115,17102,17103],{"class":117,"line":1679},[115,17104,14717],{"class":121},[115,17106,17107],{"class":117,"line":1693},[115,17108,16995],{"class":184},[115,17110,17111,17113,17116,17118,17120,17123,17126,17128],{"class":117,"line":1698},[115,17112,14910],{"class":121},[115,17114,17115],{"class":1963}," setRadius",[115,17117,126],{"class":125},[115,17119,14038],{"class":121},[115,17121,17122],{"class":5217}," r",[115,17124,17125],{"class":125},") { m_r ",[115,17127,171],{"class":121},[115,17129,17130],{"class":125}," r; }\n",[115,17132,17133,17135,17138,17140,17143,17146,17149,17151],{"class":117,"line":1727},[115,17134,14910],{"class":121},[115,17136,17137],{"class":1963}," setCenter",[115,17139,126],{"class":125},[115,17141,17142],{"class":1963},"Point",[115,17144,17145],{"class":5217}," center",[115,17147,17148],{"class":125},") { m_center ",[115,17150,171],{"class":121},[115,17152,17153],{"class":125}," center; }\n",[115,17155,17156],{"class":117,"line":1732},[115,17157,17158],{"class":184},"    \u002F\u002F获取属性\n",[115,17160,17161,17163,17166,17168,17170],{"class":117,"line":1749},[115,17162,14739],{"class":121},[115,17164,17165],{"class":1963}," getRadius",[115,17167,17044],{"class":125},[115,17169,17047],{"class":121},[115,17171,17172],{"class":125}," m_r; }\n",[115,17174,17175,17178,17181,17183,17185],{"class":117,"line":1754},[115,17176,17177],{"class":1963},"    Point",[115,17179,17180],{"class":1963}," getCenter",[115,17182,17044],{"class":125},[115,17184,17047],{"class":121},[115,17186,17187],{"class":125}," m_center; }\n",[115,17189,17190],{"class":117,"line":1759},[115,17191,2400],{"emptyLinePlaceholder":42},[115,17193,17194],{"class":117,"line":1764},[115,17195,15223],{"class":121},[115,17197,17198,17200],{"class":117,"line":1778},[115,17199,14739],{"class":121},[115,17201,14729],{"class":125},[115,17203,17204],{"class":117,"line":1783},[115,17205,17206],{"class":184},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[115,17208,17209],{"class":117,"line":2577},[115,17210,17211],{"class":125},"    Point m_center;\n",[115,17213,17214],{"class":117,"line":2591},[115,17215,3995],{"class":125},[115,17217,17218,17220,17223,17225,17228,17230,17232,17234,17236,17238,17240],{"class":117,"line":2599},[115,17219,5365],{"class":121},[115,17221,17222],{"class":1963}," isInCircle",[115,17224,126],{"class":125},[115,17226,17227],{"class":1963},"Circle",[115,17229,10585],{"class":121},[115,17231,413],{"class":5217},[115,17233,503],{"class":125},[115,17235,17142],{"class":1963},[115,17237,10585],{"class":121},[115,17239,14],{"class":5217},[115,17241,132],{"class":125},[115,17243,17244],{"class":117,"line":2604},[115,17245,1546],{"class":125},[115,17247,17248,17250,17253,17255,17257,17260,17263,17266,17268,17270,17272,17274],{"class":117,"line":2610},[115,17249,14739],{"class":121},[115,17251,17252],{"class":125}," dx ",[115,17254,171],{"class":121},[115,17256,16343],{"class":125},[115,17258,17259],{"class":1963},"getCenter",[115,17261,17262],{"class":125},"().",[115,17264,17265],{"class":1963},"getX",[115,17267,13051],{"class":125},[115,17269,657],{"class":121},[115,17271,15889],{"class":125},[115,17273,17265],{"class":1963},[115,17275,5637],{"class":125},[115,17277,17278,17280,17283,17285,17287,17289,17291,17294,17296,17298,17300,17302],{"class":117,"line":2616},[115,17279,14739],{"class":121},[115,17281,17282],{"class":125}," dy ",[115,17284,171],{"class":121},[115,17286,16343],{"class":125},[115,17288,17259],{"class":1963},[115,17290,17262],{"class":125},[115,17292,17293],{"class":1963},"getY",[115,17295,13051],{"class":125},[115,17297,657],{"class":121},[115,17299,15889],{"class":125},[115,17301,17293],{"class":1963},[115,17303,5637],{"class":125},[115,17305,17306,17308,17311,17313,17316,17319,17321,17323,17325,17327,17329],{"class":117,"line":2621},[115,17307,14739],{"class":121},[115,17309,17310],{"class":125}," distance ",[115,17312,171],{"class":121},[115,17314,17315],{"class":1963}," sqrt",[115,17317,17318],{"class":125},"(dx ",[115,17320,580],{"class":121},[115,17322,17252],{"class":125},[115,17324,606],{"class":121},[115,17326,17282],{"class":125},[115,17328,580],{"class":121},[115,17330,17331],{"class":125}," dy);\n",[115,17333,17334,17336,17339,17341,17343,17346],{"class":117,"line":7949},[115,17335,3101],{"class":121},[115,17337,17338],{"class":125}," (distance ",[115,17340,1035],{"class":121},[115,17342,16343],{"class":125},[115,17344,17345],{"class":1963},"getRadius",[115,17347,17348],{"class":125},"())\n",[115,17350,17351],{"class":117,"line":7973},[115,17352,2030],{"class":125},[115,17354,17355,17357,17359,17362,17364],{"class":117,"line":7978},[115,17356,9670],{"class":125},[115,17358,1169],{"class":121},[115,17360,17361],{"class":230}," \"点在圆内\"",[115,17363,1445],{"class":121},[115,17365,8841],{"class":125},[115,17367,17368],{"class":117,"line":7984},[115,17369,2187],{"class":125},[115,17371,17372],{"class":117,"line":8011},[115,17373,16824],{"class":121},[115,17375,17376],{"class":117,"line":8016},[115,17377,2030],{"class":125},[115,17379,17380,17382,17384,17387,17389],{"class":117,"line":8022},[115,17381,9670],{"class":125},[115,17383,1169],{"class":121},[115,17385,17386],{"class":230}," \"点在圆外\"",[115,17388,1445],{"class":121},[115,17390,8841],{"class":125},[115,17392,17393],{"class":117,"line":8034},[115,17394,2187],{"class":125},[115,17396,17397],{"class":117,"line":8046},[115,17398,1565],{"class":125},[115,17400,17401,17403,17405],{"class":117,"line":8058},[115,17402,129],{"class":121},[115,17404,1973],{"class":1963},[115,17406,1976],{"class":125},[115,17408,17409],{"class":117,"line":9717},[115,17410,1546],{"class":125},[115,17412,17413],{"class":117,"line":9742},[115,17414,15054],{"class":184},[115,17416,17417],{"class":117,"line":9765},[115,17418,14801],{"class":125},[115,17420,17421],{"class":117,"line":9789},[115,17422,17423],{"class":125},"    Point p1;\n",[115,17425,17426],{"class":117,"line":9794},[115,17427,16995],{"class":184},[115,17429,17430,17432,17434,17437],{"class":117,"line":9799},[115,17431,1551],{"class":125},[115,17433,1169],{"class":121},[115,17435,17436],{"class":230},"\"请输入圆的半径：\"",[115,17438,1291],{"class":125},[115,17440,17441,17443],{"class":117,"line":9804},[115,17442,14739],{"class":121},[115,17444,17445],{"class":125}," r;\n",[115,17447,17448,17450,17452],{"class":117,"line":9813},[115,17449,2012],{"class":125},[115,17451,1430],{"class":121},[115,17453,17454],{"class":125},"r;\n",[115,17456,17457,17459,17462],{"class":117,"line":9818},[115,17458,16596],{"class":125},[115,17460,17461],{"class":1963},"setRadius",[115,17463,17464],{"class":125},"(r);\n",[115,17466,17467,17469,17471,17474],{"class":117,"line":9824},[115,17468,1551],{"class":125},[115,17470,1169],{"class":121},[115,17472,17473],{"class":230},"\"请输入圆心坐标：\"",[115,17475,1291],{"class":125},[115,17477,17478,17480],{"class":117,"line":9845},[115,17479,14739],{"class":121},[115,17481,17482],{"class":125}," x, y;\n",[115,17484,17485,17487,17489,17491,17493],{"class":117,"line":9851},[115,17486,2012],{"class":125},[115,17488,1430],{"class":121},[115,17490,945],{"class":125},[115,17492,1430],{"class":121},[115,17494,17495],{"class":125},"y;\n",[115,17497,17498,17501,17504],{"class":117,"line":9865},[115,17499,17500],{"class":125},"    p1.",[115,17502,17503],{"class":1963},"setPoint",[115,17505,17506],{"class":125},"(x, y);\n",[115,17508,17509,17511,17514],{"class":117,"line":9871},[115,17510,16596],{"class":125},[115,17512,17513],{"class":1963},"setCenter",[115,17515,17516],{"class":125},"(p1);\n",[115,17518,17519,17521,17523,17526],{"class":117,"line":9898},[115,17520,1551],{"class":125},[115,17522,1169],{"class":121},[115,17524,17525],{"class":230},"\"请输入测试点坐标：\"",[115,17527,1291],{"class":125},[115,17529,17530,17532],{"class":117,"line":9907},[115,17531,14739],{"class":121},[115,17533,17534],{"class":125}," x1, y1;\n",[115,17536,17537,17539,17541,17544,17546],{"class":117,"line":9913},[115,17538,2012],{"class":125},[115,17540,1430],{"class":121},[115,17542,17543],{"class":125},"x1",[115,17545,1430],{"class":121},[115,17547,17548],{"class":125},"y1;\n",[115,17550,17551],{"class":117,"line":9921},[115,17552,17553],{"class":125},"    Point p2;\n",[115,17555,17556,17559,17561],{"class":117,"line":9926},[115,17557,17558],{"class":125},"    p2.",[115,17560,17503],{"class":1963},[115,17562,17563],{"class":125},"(x1, y1);\n",[115,17565,17566,17569],{"class":117,"line":16605},[115,17567,17568],{"class":1963},"    isInCircle",[115,17570,17571],{"class":125},"(c1, p2);\n",[115,17573,17574],{"class":117,"line":16611},[115,17575,1565],{"class":125},[14,17577,17578],{},"在类中可以让另一个类作为本来的成员",[14,17580,17581],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17583,17584],{},"创建point.h",[106,17586,17588],{"className":108,"code":17587,"language":110,"meta":22,"style":22},"#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",[112,17589,17590,17601,17607,17617,17623,17627,17632,17636,17640,17660,17664,17672,17680,17684,17688,17694,17700],{"__ignoreMap":22},[115,17591,17592,17595,17598],{"class":117,"line":118},[115,17593,17594],{"class":121},"#pragma",[115,17596,17597],{"class":1963}," once",[115,17599,17600],{"class":184}," \u002F\u002F防止头文件重复包含\n",[115,17602,17603,17605],{"class":117,"line":37},[115,17604,1949],{"class":121},[115,17606,1952],{"class":230},[115,17608,17609,17611,17613,17615],{"class":117,"line":1180},[115,17610,1957],{"class":121},[115,17612,1960],{"class":121},[115,17614,1964],{"class":1963},[115,17616,1291],{"class":125},[115,17618,17619,17621],{"class":117,"line":1195},[115,17620,14695],{"class":121},[115,17622,16982],{"class":1963},[115,17624,17625],{"class":117,"line":1201},[115,17626,1546],{"class":125},[115,17628,17629],{"class":117,"line":1215},[115,17630,17631],{"class":184},"\u002F\u002F做好声明与变量定义就可以\n",[115,17633,17634],{"class":117,"line":1221},[115,17635,14717],{"class":121},[115,17637,17638],{"class":117,"line":1312},[115,17639,16995],{"class":184},[115,17641,17642,17644,17646,17648,17650,17652,17654,17656,17658],{"class":117,"line":1318},[115,17643,14910],{"class":121},[115,17645,17002],{"class":1963},[115,17647,126],{"class":125},[115,17649,14038],{"class":121},[115,17651,17009],{"class":5217},[115,17653,12436],{"class":125},[115,17655,14038],{"class":121},[115,17657,17016],{"class":5217},[115,17659,2719],{"class":125},[115,17661,17662],{"class":117,"line":1330},[115,17663,17034],{"class":184},[115,17665,17666,17668,17670],{"class":117,"line":1612},[115,17667,14739],{"class":121},[115,17669,17041],{"class":1963},[115,17671,5637],{"class":125},[115,17673,17674,17676,17678],{"class":117,"line":1617},[115,17675,14739],{"class":121},[115,17677,17057],{"class":1963},[115,17679,5637],{"class":125},[115,17681,17682],{"class":117,"line":1623},[115,17683,2400],{"emptyLinePlaceholder":42},[115,17685,17686],{"class":117,"line":1628},[115,17687,15223],{"class":121},[115,17689,17690,17692],{"class":117,"line":1642},[115,17691,14739],{"class":121},[115,17693,17079],{"class":125},[115,17695,17696,17698],{"class":117,"line":1647},[115,17697,14739],{"class":121},[115,17699,17086],{"class":125},[115,17701,17702],{"class":117,"line":1653},[115,17703,3995],{"class":125},[14,17705,17706],{},"创建point.cpp",[106,17708,17710],{"className":108,"code":17709,"language":110,"meta":22,"style":22},"#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",[112,17711,17712,17719,17724,17758,17762,17778],{"__ignoreMap":22},[115,17713,17714,17716],{"class":117,"line":118},[115,17715,1949],{"class":121},[115,17717,17718],{"class":230},"\u003Cpoint.h>\n",[115,17720,17721],{"class":117,"line":37},[115,17722,17723],{"class":184},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[115,17725,17726,17728,17731,17734,17736,17738,17740,17742,17744,17746,17748,17750,17752,17754,17756],{"class":117,"line":1180},[115,17727,14910],{"class":121},[115,17729,17730],{"class":1963}," Point",[115,17732,17733],{"class":125},"::",[115,17735,17503],{"class":1963},[115,17737,126],{"class":125},[115,17739,14038],{"class":121},[115,17741,17009],{"class":5217},[115,17743,12436],{"class":125},[115,17745,14038],{"class":121},[115,17747,17016],{"class":5217},[115,17749,17019],{"class":125},[115,17751,171],{"class":121},[115,17753,17024],{"class":125},[115,17755,171],{"class":121},[115,17757,17029],{"class":125},[115,17759,17760],{"class":117,"line":1195},[115,17761,17034],{"class":184},[115,17763,17764,17766,17768,17770,17772,17774,17776],{"class":117,"line":1201},[115,17765,14739],{"class":121},[115,17767,17730],{"class":1963},[115,17769,17733],{"class":125},[115,17771,17265],{"class":1963},[115,17773,17044],{"class":125},[115,17775,17047],{"class":121},[115,17777,17050],{"class":125},[115,17779,17780,17782,17784,17786,17788,17790,17792],{"class":117,"line":1215},[115,17781,14739],{"class":121},[115,17783,17730],{"class":1963},[115,17785,17733],{"class":125},[115,17787,17293],{"class":1963},[115,17789,17044],{"class":125},[115,17791,17047],{"class":121},[115,17793,17064],{"class":125},[14,17795,17796],{},"创建circle.h",[106,17798,17800],{"className":108,"code":17799,"language":110,"meta":22,"style":22},"#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",[112,17801,17802,17809,17815,17825,17831,17837,17841,17845,17849,17863,17877,17881,17889,17897,17901,17905,17911,17915,17919],{"__ignoreMap":22},[115,17803,17804,17806],{"class":117,"line":118},[115,17805,17594],{"class":121},[115,17807,17808],{"class":1963}," once\n",[115,17810,17811,17813],{"class":117,"line":37},[115,17812,1949],{"class":121},[115,17814,1952],{"class":230},[115,17816,17817,17819,17821,17823],{"class":117,"line":1180},[115,17818,1957],{"class":121},[115,17820,1960],{"class":121},[115,17822,1964],{"class":1963},[115,17824,1291],{"class":125},[115,17826,17827,17829],{"class":117,"line":1195},[115,17828,1949],{"class":121},[115,17830,17718],{"class":230},[115,17832,17833,17835],{"class":117,"line":1201},[115,17834,14695],{"class":121},[115,17836,14698],{"class":1963},[115,17838,17839],{"class":117,"line":1215},[115,17840,1546],{"class":125},[115,17842,17843],{"class":117,"line":1221},[115,17844,14717],{"class":121},[115,17846,17847],{"class":117,"line":1312},[115,17848,16995],{"class":184},[115,17850,17851,17853,17855,17857,17859,17861],{"class":117,"line":1318},[115,17852,14910],{"class":121},[115,17854,17115],{"class":1963},[115,17856,126],{"class":125},[115,17858,14038],{"class":121},[115,17860,17122],{"class":5217},[115,17862,2719],{"class":125},[115,17864,17865,17867,17869,17871,17873,17875],{"class":117,"line":1330},[115,17866,14910],{"class":121},[115,17868,17137],{"class":1963},[115,17870,126],{"class":125},[115,17872,17142],{"class":1963},[115,17874,17145],{"class":5217},[115,17876,2719],{"class":125},[115,17878,17879],{"class":117,"line":1612},[115,17880,17158],{"class":184},[115,17882,17883,17885,17887],{"class":117,"line":1617},[115,17884,14739],{"class":121},[115,17886,17165],{"class":1963},[115,17888,5637],{"class":125},[115,17890,17891,17893,17895],{"class":117,"line":1623},[115,17892,17177],{"class":1963},[115,17894,17180],{"class":1963},[115,17896,5637],{"class":125},[115,17898,17899],{"class":117,"line":1628},[115,17900,2400],{"emptyLinePlaceholder":42},[115,17902,17903],{"class":117,"line":1642},[115,17904,15223],{"class":121},[115,17906,17907,17909],{"class":117,"line":1647},[115,17908,14739],{"class":121},[115,17910,14729],{"class":125},[115,17912,17913],{"class":117,"line":1653},[115,17914,17206],{"class":184},[115,17916,17917],{"class":117,"line":1674},[115,17918,17211],{"class":125},[115,17920,17921],{"class":117,"line":1679},[115,17922,3995],{"class":125},[14,17924,17925],{},"创建circle.cpp",[106,17927,17929],{"className":108,"code":17928,"language":110,"meta":22,"style":22},"#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",[112,17930,17931,17938,17961,17983,17988,18004],{"__ignoreMap":22},[115,17932,17933,17935],{"class":117,"line":118},[115,17934,1949],{"class":121},[115,17936,17937],{"class":230},"\u003Ccircle.h>\n",[115,17939,17940,17942,17945,17947,17949,17951,17953,17955,17957,17959],{"class":117,"line":37},[115,17941,5365],{"class":121},[115,17943,17944],{"class":1963}," Circle",[115,17946,17733],{"class":125},[115,17948,17461],{"class":1963},[115,17950,126],{"class":125},[115,17952,14038],{"class":121},[115,17954,17122],{"class":5217},[115,17956,17125],{"class":125},[115,17958,171],{"class":121},[115,17960,17130],{"class":125},[115,17962,17963,17965,17967,17969,17971,17973,17975,17977,17979,17981],{"class":117,"line":1180},[115,17964,5365],{"class":121},[115,17966,17944],{"class":1963},[115,17968,17733],{"class":125},[115,17970,17513],{"class":1963},[115,17972,126],{"class":125},[115,17974,17142],{"class":1963},[115,17976,17145],{"class":5217},[115,17978,17148],{"class":125},[115,17980,171],{"class":121},[115,17982,17153],{"class":125},[115,17984,17985],{"class":117,"line":1195},[115,17986,17987],{"class":184},"\u002F\u002F获取属性\n",[115,17989,17990,17992,17994,17996,17998,18000,18002],{"class":117,"line":1201},[115,17991,14038],{"class":121},[115,17993,17944],{"class":1963},[115,17995,17733],{"class":125},[115,17997,17345],{"class":1963},[115,17999,17044],{"class":125},[115,18001,17047],{"class":121},[115,18003,17172],{"class":125},[115,18005,18006,18008,18010,18012,18014,18016,18018],{"class":117,"line":1215},[115,18007,17142],{"class":1963},[115,18009,17944],{"class":1963},[115,18011,17733],{"class":125},[115,18013,17259],{"class":1963},[115,18015,17044],{"class":125},[115,18017,17047],{"class":121},[115,18019,17187],{"class":125},[14,18021,18022],{},"使用封装的类",[106,18024,18026],{"className":108,"code":18025,"language":110,"meta":22,"style":22},"#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",[112,18027,18028,18034,18044,18050,18056,18080,18084,18110,18136,18160,18174,18178,18190,18194,18198,18202,18214,18218,18222,18230,18234,18238,18242,18246,18250,18260,18266,18274,18282,18292,18298,18310,18318,18326,18336,18342,18354,18358,18366,18372],{"__ignoreMap":22},[115,18029,18030,18032],{"class":117,"line":118},[115,18031,1949],{"class":121},[115,18033,1952],{"class":230},[115,18035,18036,18038,18040,18042],{"class":117,"line":37},[115,18037,1957],{"class":121},[115,18039,1960],{"class":121},[115,18041,1964],{"class":1963},[115,18043,1291],{"class":125},[115,18045,18046,18048],{"class":117,"line":1180},[115,18047,1949],{"class":121},[115,18049,17937],{"class":230},[115,18051,18052,18054],{"class":117,"line":1195},[115,18053,1949],{"class":121},[115,18055,17718],{"class":230},[115,18057,18058,18060,18062,18064,18066,18068,18070,18072,18074,18076,18078],{"class":117,"line":1201},[115,18059,5365],{"class":121},[115,18061,17222],{"class":1963},[115,18063,126],{"class":125},[115,18065,17227],{"class":1963},[115,18067,10585],{"class":121},[115,18069,413],{"class":5217},[115,18071,503],{"class":125},[115,18073,17142],{"class":1963},[115,18075,10585],{"class":121},[115,18077,14],{"class":5217},[115,18079,132],{"class":125},[115,18081,18082],{"class":117,"line":1215},[115,18083,1546],{"class":125},[115,18085,18086,18088,18090,18092,18094,18096,18098,18100,18102,18104,18106,18108],{"class":117,"line":1221},[115,18087,14739],{"class":121},[115,18089,17252],{"class":125},[115,18091,171],{"class":121},[115,18093,16343],{"class":125},[115,18095,17259],{"class":1963},[115,18097,17262],{"class":125},[115,18099,17265],{"class":1963},[115,18101,13051],{"class":125},[115,18103,657],{"class":121},[115,18105,15889],{"class":125},[115,18107,17265],{"class":1963},[115,18109,5637],{"class":125},[115,18111,18112,18114,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134],{"class":117,"line":1312},[115,18113,14739],{"class":121},[115,18115,17282],{"class":125},[115,18117,171],{"class":121},[115,18119,16343],{"class":125},[115,18121,17259],{"class":1963},[115,18123,17262],{"class":125},[115,18125,17293],{"class":1963},[115,18127,13051],{"class":125},[115,18129,657],{"class":121},[115,18131,15889],{"class":125},[115,18133,17293],{"class":1963},[115,18135,5637],{"class":125},[115,18137,18138,18140,18142,18144,18146,18148,18150,18152,18154,18156,18158],{"class":117,"line":1318},[115,18139,14739],{"class":121},[115,18141,17310],{"class":125},[115,18143,171],{"class":121},[115,18145,17315],{"class":1963},[115,18147,17318],{"class":125},[115,18149,580],{"class":121},[115,18151,17252],{"class":125},[115,18153,606],{"class":121},[115,18155,17282],{"class":125},[115,18157,580],{"class":121},[115,18159,17331],{"class":125},[115,18161,18162,18164,18166,18168,18170,18172],{"class":117,"line":1330},[115,18163,3101],{"class":121},[115,18165,17338],{"class":125},[115,18167,1035],{"class":121},[115,18169,16343],{"class":125},[115,18171,17345],{"class":1963},[115,18173,17348],{"class":125},[115,18175,18176],{"class":117,"line":1612},[115,18177,2030],{"class":125},[115,18179,18180,18182,18184,18186,18188],{"class":117,"line":1617},[115,18181,9670],{"class":125},[115,18183,1169],{"class":121},[115,18185,17361],{"class":230},[115,18187,1445],{"class":121},[115,18189,8841],{"class":125},[115,18191,18192],{"class":117,"line":1623},[115,18193,2187],{"class":125},[115,18195,18196],{"class":117,"line":1628},[115,18197,16824],{"class":121},[115,18199,18200],{"class":117,"line":1642},[115,18201,2030],{"class":125},[115,18203,18204,18206,18208,18210,18212],{"class":117,"line":1647},[115,18205,9670],{"class":125},[115,18207,1169],{"class":121},[115,18209,17386],{"class":230},[115,18211,1445],{"class":121},[115,18213,8841],{"class":125},[115,18215,18216],{"class":117,"line":1653},[115,18217,2187],{"class":125},[115,18219,18220],{"class":117,"line":1674},[115,18221,1565],{"class":125},[115,18223,18224,18226,18228],{"class":117,"line":1679},[115,18225,129],{"class":121},[115,18227,1973],{"class":1963},[115,18229,1976],{"class":125},[115,18231,18232],{"class":117,"line":1693},[115,18233,1546],{"class":125},[115,18235,18236],{"class":117,"line":1698},[115,18237,15054],{"class":184},[115,18239,18240],{"class":117,"line":1727},[115,18241,14801],{"class":125},[115,18243,18244],{"class":117,"line":1732},[115,18245,17423],{"class":125},[115,18247,18248],{"class":117,"line":1749},[115,18249,16995],{"class":184},[115,18251,18252,18254,18256,18258],{"class":117,"line":1754},[115,18253,1551],{"class":125},[115,18255,1169],{"class":121},[115,18257,17436],{"class":230},[115,18259,1291],{"class":125},[115,18261,18262,18264],{"class":117,"line":1759},[115,18263,14739],{"class":121},[115,18265,17445],{"class":125},[115,18267,18268,18270,18272],{"class":117,"line":1764},[115,18269,2012],{"class":125},[115,18271,1430],{"class":121},[115,18273,17454],{"class":125},[115,18275,18276,18278,18280],{"class":117,"line":1778},[115,18277,16596],{"class":125},[115,18279,17461],{"class":1963},[115,18281,17464],{"class":125},[115,18283,18284,18286,18288,18290],{"class":117,"line":1783},[115,18285,1551],{"class":125},[115,18287,1169],{"class":121},[115,18289,17473],{"class":230},[115,18291,1291],{"class":125},[115,18293,18294,18296],{"class":117,"line":2577},[115,18295,14739],{"class":121},[115,18297,17482],{"class":125},[115,18299,18300,18302,18304,18306,18308],{"class":117,"line":2591},[115,18301,2012],{"class":125},[115,18303,1430],{"class":121},[115,18305,945],{"class":125},[115,18307,1430],{"class":121},[115,18309,17495],{"class":125},[115,18311,18312,18314,18316],{"class":117,"line":2599},[115,18313,17500],{"class":125},[115,18315,17503],{"class":1963},[115,18317,17506],{"class":125},[115,18319,18320,18322,18324],{"class":117,"line":2604},[115,18321,16596],{"class":125},[115,18323,17513],{"class":1963},[115,18325,17516],{"class":125},[115,18327,18328,18330,18332,18334],{"class":117,"line":2610},[115,18329,1551],{"class":125},[115,18331,1169],{"class":121},[115,18333,17525],{"class":230},[115,18335,1291],{"class":125},[115,18337,18338,18340],{"class":117,"line":2616},[115,18339,14739],{"class":121},[115,18341,17534],{"class":125},[115,18343,18344,18346,18348,18350,18352],{"class":117,"line":2621},[115,18345,2012],{"class":125},[115,18347,1430],{"class":121},[115,18349,17543],{"class":125},[115,18351,1430],{"class":121},[115,18353,17548],{"class":125},[115,18355,18356],{"class":117,"line":7949},[115,18357,17553],{"class":125},[115,18359,18360,18362,18364],{"class":117,"line":7973},[115,18361,17558],{"class":125},[115,18363,17503],{"class":1963},[115,18365,17563],{"class":125},[115,18367,18368,18370],{"class":117,"line":7978},[115,18369,17568],{"class":1963},[115,18371,17571],{"class":125},[115,18373,18374],{"class":117,"line":7984},[115,18375,1565],{"class":125},[57,18377,18379],{"id":18378},"_82对象的初始化清理","8.2对象的初始化清理",[1132,18381,18382,18385],{},[72,18383,18384],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[72,18386,18387],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[86,18389,18391],{"id":18390},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18393,18394,18395,18398],{},"对象的",[275,18396,18397],{},"初始化和清理","也是两个非常重要的安全问题",[14,18400,18401],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18403,18404],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18406,18407,18408,18411,18412,18415],{},"c++利用了",[275,18409,18410],{},"构造函数","和",[275,18413,18414],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18417,18418,18419],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[275,18420,18421],{},"我们不提供构造和析构，编译器会提供",[14,18423,18424],{},[275,18425,18426],{},"编译器提供的构造函数和析构函数是空实现。",[1132,18428,18429,18432],{},[72,18430,18431],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[72,18433,18434,18435,18438],{},"析构函数：主要作用在于对象",[275,18436,18437],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18440,18441,18444],{},[275,18442,18443],{},"构造函数语法：",[112,18445,18446],{},"类名(){}",[69,18448,18449,18452,18455,18458,18461],{},[72,18450,18451],{},"构造函数，没有返回值也不写void",[72,18453,18454],{},"函数名称与类名相同",[72,18456,18457],{},"构造函数可以有参数，因此可以发生重载",[72,18459,18460],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[72,18462,18463,18464,554],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[112,18465,18466],{},"Person(){}",[14,18468,18469,13796,18472],{},[275,18470,18471],{},"析构函数语法：",[112,18473,18474],{},"~类名(){}",[69,18476,18477,18480,18483,18489],{},[72,18478,18479],{},"析构函数，没有返回值也不写void",[72,18481,18482],{},"函数名称与类名相同,在名称前加上符号  ~",[72,18484,18485,18486],{},"析构函数不可以有参数，因此",[275,18487,18488],{},"不可以发生重载",[72,18490,18491],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[106,18493,18495],{"className":108,"code":18494,"language":110,"meta":22,"style":22},"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",[112,18496,18497,18503,18507,18511,18516,18523,18527,18540,18544,18549,18556,18560,18573,18577,18581,18585,18589,18597,18601,18609,18613,18617,18625,18629,18634,18638,18645,18649,18662,18666,18674],{"__ignoreMap":22},[115,18498,18499,18501],{"class":117,"line":118},[115,18500,14695],{"class":121},[115,18502,15172],{"class":1963},[115,18504,18505],{"class":117,"line":37},[115,18506,1546],{"class":125},[115,18508,18509],{"class":117,"line":1180},[115,18510,14717],{"class":121},[115,18512,18513],{"class":117,"line":1195},[115,18514,18515],{"class":184},"    \u002F\u002F构造函数\n",[115,18517,18518,18521],{"class":117,"line":1201},[115,18519,18520],{"class":1963},"    Person",[115,18522,1976],{"class":125},[115,18524,18525],{"class":117,"line":1215},[115,18526,2030],{"class":125},[115,18528,18529,18531,18533,18536,18538],{"class":117,"line":1221},[115,18530,9670],{"class":125},[115,18532,1169],{"class":121},[115,18534,18535],{"class":230}," \"Person的构造函数调用\"",[115,18537,1445],{"class":121},[115,18539,8841],{"class":125},[115,18541,18542],{"class":117,"line":1312},[115,18543,2187],{"class":125},[115,18545,18546],{"class":117,"line":1318},[115,18547,18548],{"class":184},"    \u002F\u002F析构函数\n",[115,18550,18551,18554],{"class":117,"line":1330},[115,18552,18553],{"class":1963},"    ~Person",[115,18555,1976],{"class":125},[115,18557,18558],{"class":117,"line":1612},[115,18559,2030],{"class":125},[115,18561,18562,18564,18566,18569,18571],{"class":117,"line":1617},[115,18563,9670],{"class":125},[115,18565,1169],{"class":121},[115,18567,18568],{"class":230}," \"Person的析构函数调用\"",[115,18570,1445],{"class":121},[115,18572,8841],{"class":125},[115,18574,18575],{"class":117,"line":1623},[115,18576,2187],{"class":125},[115,18578,18579],{"class":117,"line":1628},[115,18580,2400],{"emptyLinePlaceholder":42},[115,18582,18583],{"class":117,"line":1642},[115,18584,3995],{"class":125},[115,18586,18587],{"class":117,"line":1647},[115,18588,2400],{"emptyLinePlaceholder":42},[115,18590,18591,18593,18595],{"class":117,"line":1653},[115,18592,5365],{"class":121},[115,18594,5589],{"class":1963},[115,18596,1976],{"class":125},[115,18598,18599],{"class":117,"line":1674},[115,18600,1546],{"class":125},[115,18602,18603,18606],{"class":117,"line":1679},[115,18604,18605],{"class":125},"    Person p;",[115,18607,18608],{"class":184},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[115,18610,18611],{"class":117,"line":1693},[115,18612,1565],{"class":125},[115,18614,18615],{"class":117,"line":1698},[115,18616,2400],{"emptyLinePlaceholder":42},[115,18618,18619,18621,18623],{"class":117,"line":1727},[115,18620,129],{"class":121},[115,18622,1973],{"class":1963},[115,18624,10854],{"class":125},[115,18626,18627],{"class":117,"line":1732},[115,18628,13211],{"class":125},[115,18630,18631],{"class":117,"line":1749},[115,18632,18633],{"class":184},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[115,18635,18636],{"class":117,"line":1754},[115,18637,2400],{"emptyLinePlaceholder":42},[115,18639,18640,18642],{"class":117,"line":1759},[115,18641,18605],{"class":125},[115,18643,18644],{"class":184},"\u002F\u002F只有构造函数\n",[115,18646,18647],{"class":117,"line":1764},[115,18648,2400],{"emptyLinePlaceholder":42},[115,18650,18651,18653,18655,18657,18659],{"class":117,"line":1778},[115,18652,2303],{"class":1963},[115,18654,126],{"class":125},[115,18656,2308],{"class":230},[115,18658,5967],{"class":125},[115,18660,18661],{"class":184},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[115,18663,18664],{"class":117,"line":1783},[115,18665,2400],{"emptyLinePlaceholder":42},[115,18667,18668,18670,18672],{"class":117,"line":2577},[115,18669,4090],{"class":121},[115,18671,4093],{"class":174},[115,18673,1291],{"class":125},[115,18675,18676],{"class":117,"line":2591},[115,18677,1565],{"class":125},[14,18679,18680],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[86,18682,18684],{"id":18683},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18686,18687],{},"两种分类方式：",[14,18689,18690],{},"​\t按参数分为： 有参构造和无参构造",[14,18692,18693],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18695,18696],{},"三种调用方式：",[14,18698,18699],{},"​\t括号法",[14,18701,18702],{},"​\t显示法",[14,18704,18705],{},"​\t隐式转换法",[106,18707,18709],{"className":108,"code":18708,"language":110,"meta":22,"style":22},"#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",[112,18710,18711,18717,18727,18732,18737,18742,18747,18751,18759,18763,18767,18771,18777,18781,18794,18798,18810,18814,18823,18836,18840,18844,18850,18854,18867,18871,18876,18892,18896,18901,18910,18923,18927,18933,18937,18942,18950,18954,18959,18963,18971,18975,18980,18985,18990,18995,19000,19004,19009,19014,19019,19024,19028,19033,19038,19054,19066,19071,19075,19080,19085,19090,19094,19099,19113,19126,19130,19138,19142,19148,19154,19162],{"__ignoreMap":22},[115,18712,18713,18715],{"class":117,"line":118},[115,18714,1949],{"class":121},[115,18716,1952],{"class":230},[115,18718,18719,18721,18723,18725],{"class":117,"line":37},[115,18720,1957],{"class":121},[115,18722,1960],{"class":121},[115,18724,1964],{"class":1963},[115,18726,1291],{"class":125},[115,18728,18729],{"class":117,"line":1180},[115,18730,18731],{"class":184},"\u002F\u002F1.构造函数的分类及调用\n",[115,18733,18734],{"class":117,"line":1195},[115,18735,18736],{"class":184},"\u002F\u002F分类\n",[115,18738,18739],{"class":117,"line":1201},[115,18740,18741],{"class":184},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[115,18743,18744],{"class":117,"line":1215},[115,18745,18746],{"class":184},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[115,18748,18749],{"class":117,"line":1221},[115,18750,2400],{"emptyLinePlaceholder":42},[115,18752,18753,18755,18757],{"class":117,"line":1312},[115,18754,14695],{"class":121},[115,18756,15570],{"class":1963},[115,18758,2674],{"class":125},[115,18760,18761],{"class":117,"line":1318},[115,18762,1546],{"class":125},[115,18764,18765],{"class":117,"line":1330},[115,18766,14717],{"class":121},[115,18768,18769],{"class":117,"line":1612},[115,18770,18515],{"class":184},[115,18772,18773,18775],{"class":117,"line":1617},[115,18774,18520],{"class":1963},[115,18776,1976],{"class":125},[115,18778,18779],{"class":117,"line":1623},[115,18780,2030],{"class":125},[115,18782,18783,18785,18787,18790,18792],{"class":117,"line":1628},[115,18784,3451],{"class":125},[115,18786,1169],{"class":121},[115,18788,18789],{"class":230},"\"Person构造函数无参构造\"",[115,18791,1169],{"class":121},[115,18793,1192],{"class":125},[115,18795,18796],{"class":117,"line":1642},[115,18797,2187],{"class":125},[115,18799,18800,18802,18804,18806,18808],{"class":117,"line":1647},[115,18801,18520],{"class":1963},[115,18803,126],{"class":125},[115,18805,129],{"class":121},[115,18807,1399],{"class":5217},[115,18809,132],{"class":125},[115,18811,18812],{"class":117,"line":1653},[115,18813,2030],{"class":125},[115,18815,18816,18819,18821],{"class":117,"line":1674},[115,18817,18818],{"class":125},"        age",[115,18820,171],{"class":121},[115,18822,6198],{"class":125},[115,18824,18825,18827,18829,18832,18834],{"class":117,"line":1679},[115,18826,3451],{"class":125},[115,18828,1169],{"class":121},[115,18830,18831],{"class":230},"\"Person构造函数有参构造\"",[115,18833,1169],{"class":121},[115,18835,1192],{"class":125},[115,18837,18838],{"class":117,"line":1693},[115,18839,2187],{"class":125},[115,18841,18842],{"class":117,"line":1698},[115,18843,18548],{"class":184},[115,18845,18846,18848],{"class":117,"line":1727},[115,18847,18553],{"class":1963},[115,18849,1976],{"class":125},[115,18851,18852],{"class":117,"line":1732},[115,18853,2030],{"class":125},[115,18855,18856,18858,18860,18863,18865],{"class":117,"line":1749},[115,18857,3451],{"class":125},[115,18859,1169],{"class":121},[115,18861,18862],{"class":230},"\"Person析构函数被调用\"",[115,18864,1169],{"class":121},[115,18866,1192],{"class":125},[115,18868,18869],{"class":117,"line":1754},[115,18870,2187],{"class":125},[115,18872,18873],{"class":117,"line":1759},[115,18874,18875],{"class":184},"    \u002F\u002F拷贝构造函数\n",[115,18877,18878,18880,18882,18884,18886,18888,18890],{"class":117,"line":1764},[115,18879,18520],{"class":1963},[115,18881,126],{"class":125},[115,18883,6793],{"class":121},[115,18885,15570],{"class":1963},[115,18887,10585],{"class":121},[115,18889,14],{"class":5217},[115,18891,132],{"class":125},[115,18893,18894],{"class":117,"line":1778},[115,18895,2030],{"class":125},[115,18897,18898],{"class":117,"line":1783},[115,18899,18900],{"class":184},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[115,18902,18903,18905,18907],{"class":117,"line":2577},[115,18904,18818],{"class":125},[115,18906,171],{"class":121},[115,18908,18909],{"class":125},"p.age;\n",[115,18911,18912,18914,18916,18919,18921],{"class":117,"line":2591},[115,18913,3451],{"class":125},[115,18915,1169],{"class":121},[115,18917,18918],{"class":230},"\"Person拷贝构造函数被调用\"",[115,18920,1169],{"class":121},[115,18922,1192],{"class":125},[115,18924,18925],{"class":117,"line":2599},[115,18926,2187],{"class":125},[115,18928,18929,18931],{"class":117,"line":2604},[115,18930,1985],{"class":121},[115,18932,7798],{"class":125},[115,18934,18935],{"class":117,"line":2610},[115,18936,3995],{"class":125},[115,18938,18939],{"class":117,"line":2616},[115,18940,18941],{"class":184},"\u002F\u002F调用\n",[115,18943,18944,18946,18948],{"class":117,"line":2621},[115,18945,5365],{"class":121},[115,18947,5589],{"class":1963},[115,18949,1976],{"class":125},[115,18951,18952],{"class":117,"line":7949},[115,18953,1546],{"class":125},[115,18955,18956],{"class":117,"line":7973},[115,18957,18958],{"class":184},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[115,18960,18961],{"class":117,"line":7978},[115,18962,1565],{"class":125},[115,18964,18965,18967,18969],{"class":117,"line":7984},[115,18966,5365],{"class":121},[115,18968,5658],{"class":1963},[115,18970,1976],{"class":125},[115,18972,18973],{"class":117,"line":8011},[115,18974,1546],{"class":125},[115,18976,18977],{"class":117,"line":8016},[115,18978,18979],{"class":184},"    \u002F\u002F1.括号法\n",[115,18981,18982],{"class":117,"line":8022},[115,18983,18984],{"class":184},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[115,18986,18987],{"class":117,"line":8034},[115,18988,18989],{"class":184},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[115,18991,18992],{"class":117,"line":8046},[115,18993,18994],{"class":184},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[115,18996,18997],{"class":117,"line":8058},[115,18998,18999],{"class":184},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[115,19001,19002],{"class":117,"line":9717},[115,19003,2400],{"emptyLinePlaceholder":42},[115,19005,19006],{"class":117,"line":9742},[115,19007,19008],{"class":184},"    \u002F\u002F注意事项\n",[115,19010,19011],{"class":117,"line":9765},[115,19012,19013],{"class":184},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[115,19015,19016],{"class":117,"line":9789},[115,19017,19018],{"class":184},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[115,19020,19021],{"class":117,"line":9794},[115,19022,19023],{"class":184},"    \u002F\u002F Person p4();\n",[115,19025,19026],{"class":117,"line":9799},[115,19027,2400],{"emptyLinePlaceholder":42},[115,19029,19030],{"class":117,"line":9804},[115,19031,19032],{"class":184},"    \u002F\u002F2.显示法\n",[115,19034,19035],{"class":117,"line":9813},[115,19036,19037],{"class":125},"    Person p1;\n",[115,19039,19040,19043,19045,19048,19050,19052],{"class":117,"line":9818},[115,19041,19042],{"class":125},"    Person p2",[115,19044,171],{"class":121},[115,19046,19047],{"class":1963},"Person",[115,19049,126],{"class":125},[115,19051,571],{"class":174},[115,19053,2719],{"class":125},[115,19055,19056,19059,19061,19063],{"class":117,"line":9824},[115,19057,19058],{"class":125},"    Person p3",[115,19060,171],{"class":121},[115,19062,19047],{"class":1963},[115,19064,19065],{"class":125},"(p2);\n",[115,19067,19068],{"class":117,"line":9845},[115,19069,19070],{"class":184},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[115,19072,19073],{"class":117,"line":9851},[115,19074,2400],{"emptyLinePlaceholder":42},[115,19076,19077],{"class":117,"line":9865},[115,19078,19079],{"class":184},"    \u002F\u002F 注意事项2\n",[115,19081,19082],{"class":117,"line":9871},[115,19083,19084],{"class":184},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[115,19086,19087],{"class":117,"line":9898},[115,19088,19089],{"class":184},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[115,19091,19092],{"class":117,"line":9907},[115,19093,2400],{"emptyLinePlaceholder":42},[115,19095,19096],{"class":117,"line":9913},[115,19097,19098],{"class":184},"    \u002F\u002F3.隐士转换法\n",[115,19100,19101,19104,19106,19108,19110],{"class":117,"line":9921},[115,19102,19103],{"class":125},"    Person p4",[115,19105,171],{"class":121},[115,19107,571],{"class":174},[115,19109,181],{"class":125},[115,19111,19112],{"class":184},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[115,19114,19115,19118,19120,19123],{"class":117,"line":9926},[115,19116,19117],{"class":125},"    Person p5",[115,19119,171],{"class":121},[115,19121,19122],{"class":125},"p4;",[115,19124,19125],{"class":184}," \u002F\u002F 这里会调用拷贝构造函数\n",[115,19127,19128],{"class":117,"line":16605},[115,19129,1565],{"class":125},[115,19131,19132,19134,19136],{"class":117,"line":16611},[115,19133,129],{"class":121},[115,19135,1973],{"class":1963},[115,19137,1976],{"class":125},[115,19139,19140],{"class":117,"line":16634},[115,19141,1546],{"class":125},[115,19143,19144,19146],{"class":117,"line":16640},[115,19145,5634],{"class":1963},[115,19147,5637],{"class":125},[115,19149,19150,19152],{"class":117,"line":16663},[115,19151,5703],{"class":1963},[115,19153,5637],{"class":125},[115,19155,19156,19158,19160],{"class":117,"line":16677},[115,19157,4090],{"class":121},[115,19159,4093],{"class":174},[115,19161,1291],{"class":125},[115,19163,19164],{"class":117,"line":16697},[115,19165,1565],{"class":125},[14,19167,19168,19171],{},[275,19169,19170],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[86,19173,19175],{"id":19174},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19177,19178],{},"C++中拷贝构造函数调用时机通常有三种情况",[1132,19180,19181,19184,19187],{},[72,19182,19183],{},"使用一个已经创建完毕的对象来初始化一个新对象",[72,19185,19186],{},"值传递的方式给函数参数传值",[72,19188,19189],{},"以值方式返回局部对象",[106,19191,19193],{"className":108,"code":19192,"language":110,"meta":22,"style":22},"#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",[112,19194,19195,19201,19211,19215,19220,19224,19229,19234,19239,19245,19249,19253,19259,19263,19276,19280,19285,19297,19301,19309,19322,19326,19330,19346,19350,19359,19372,19376,19382,19386,19398,19402,19408,19412,19416,19424,19428,19441,19449,19467,19471,19476,19481,19496,19500,19513,19517,19525,19529,19533,19541,19545,19550,19559,19563,19567,19592,19602,19606,19614,19618,19629,19654,19658,19662,19666,19674,19678,19683,19688,19695,19700,19705,19710,19715,19719,19724,19728,19733,19737,19742,19747,19751,19755,19760,19765,19773],{"__ignoreMap":22},[115,19196,19197,19199],{"class":117,"line":118},[115,19198,1949],{"class":121},[115,19200,1952],{"class":230},[115,19202,19203,19205,19207,19209],{"class":117,"line":37},[115,19204,1957],{"class":121},[115,19206,1960],{"class":121},[115,19208,1964],{"class":1963},[115,19210,1291],{"class":125},[115,19212,19213],{"class":117,"line":1180},[115,19214,2400],{"emptyLinePlaceholder":42},[115,19216,19217],{"class":117,"line":1195},[115,19218,19219],{"class":184},"\u002F\u002F拷贝构造函数调用时机\n",[115,19221,19222],{"class":117,"line":1201},[115,19223,2400],{"emptyLinePlaceholder":42},[115,19225,19226],{"class":117,"line":1215},[115,19227,19228],{"class":184},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[115,19230,19231],{"class":117,"line":1221},[115,19232,19233],{"class":184},"\u002F\u002F2.值传递的方式给函数参数传值\n",[115,19235,19236],{"class":117,"line":1312},[115,19237,19238],{"class":184},"\u002F\u002F3.以值方式返回局部对象\n",[115,19240,19241,19243],{"class":117,"line":1318},[115,19242,14695],{"class":121},[115,19244,15172],{"class":1963},[115,19246,19247],{"class":117,"line":1330},[115,19248,1546],{"class":125},[115,19250,19251],{"class":117,"line":1612},[115,19252,14717],{"class":121},[115,19254,19255,19257],{"class":117,"line":1617},[115,19256,18520],{"class":1963},[115,19258,1976],{"class":125},[115,19260,19261],{"class":117,"line":1623},[115,19262,2030],{"class":125},[115,19264,19265,19267,19269,19272,19274],{"class":117,"line":1628},[115,19266,9670],{"class":125},[115,19268,1169],{"class":121},[115,19270,19271],{"class":230}," \"Person的默认构造函数调用\"",[115,19273,1445],{"class":121},[115,19275,8841],{"class":125},[115,19277,19278],{"class":117,"line":1642},[115,19279,2187],{"class":125},[115,19281,19282],{"class":117,"line":1647},[115,19283,19284],{"class":184},"    \u002F\u002F有参构造\n",[115,19286,19287,19289,19291,19293,19295],{"class":117,"line":1653},[115,19288,18520],{"class":1963},[115,19290,126],{"class":125},[115,19292,129],{"class":121},[115,19294,15690],{"class":5217},[115,19296,132],{"class":125},[115,19298,19299],{"class":117,"line":1674},[115,19300,2030],{"class":125},[115,19302,19303,19305,19307],{"class":117,"line":1679},[115,19304,15744],{"class":125},[115,19306,171],{"class":121},[115,19308,7798],{"class":125},[115,19310,19311,19313,19315,19318,19320],{"class":117,"line":1693},[115,19312,9670],{"class":125},[115,19314,1169],{"class":121},[115,19316,19317],{"class":230}," \"Person的有参构造函数调用\"",[115,19319,1445],{"class":121},[115,19321,8841],{"class":125},[115,19323,19324],{"class":117,"line":1698},[115,19325,2187],{"class":125},[115,19327,19328],{"class":117,"line":1727},[115,19329,18875],{"class":184},[115,19331,19332,19334,19336,19338,19340,19342,19344],{"class":117,"line":1732},[115,19333,18520],{"class":1963},[115,19335,126],{"class":125},[115,19337,6793],{"class":121},[115,19339,15570],{"class":1963},[115,19341,10585],{"class":121},[115,19343,14],{"class":5217},[115,19345,132],{"class":125},[115,19347,19348],{"class":117,"line":1749},[115,19349,2030],{"class":125},[115,19351,19352,19354,19356],{"class":117,"line":1754},[115,19353,15744],{"class":125},[115,19355,171],{"class":121},[115,19357,19358],{"class":125}," p.m_Age;\n",[115,19360,19361,19363,19365,19368,19370],{"class":117,"line":1759},[115,19362,9670],{"class":125},[115,19364,1169],{"class":121},[115,19366,19367],{"class":230}," \"Person的拷贝构造函数调用\"",[115,19369,1445],{"class":121},[115,19371,8841],{"class":125},[115,19373,19374],{"class":117,"line":1764},[115,19375,2187],{"class":125},[115,19377,19378,19380],{"class":117,"line":1778},[115,19379,18553],{"class":1963},[115,19381,1976],{"class":125},[115,19383,19384],{"class":117,"line":1783},[115,19385,2030],{"class":125},[115,19387,19388,19390,19392,19394,19396],{"class":117,"line":2577},[115,19389,9670],{"class":125},[115,19391,1169],{"class":121},[115,19393,18568],{"class":230},[115,19395,1445],{"class":121},[115,19397,8841],{"class":125},[115,19399,19400],{"class":117,"line":2591},[115,19401,2187],{"class":125},[115,19403,19404,19406],{"class":117,"line":2599},[115,19405,1985],{"class":121},[115,19407,15667],{"class":125},[115,19409,19410],{"class":117,"line":2604},[115,19411,3995],{"class":125},[115,19413,19414],{"class":117,"line":2610},[115,19415,19228],{"class":184},[115,19417,19418,19420,19422],{"class":117,"line":2616},[115,19419,5365],{"class":121},[115,19421,5589],{"class":1963},[115,19423,1976],{"class":125},[115,19425,19426],{"class":117,"line":2621},[115,19427,1546],{"class":125},[115,19429,19430,19433,19435,19437,19439],{"class":117,"line":7949},[115,19431,19432],{"class":125},"    Person ",[115,19434,7131],{"class":1963},[115,19436,126],{"class":125},[115,19438,825],{"class":174},[115,19440,2719],{"class":125},[115,19442,19443,19445,19447],{"class":117,"line":7973},[115,19444,19432],{"class":125},[115,19446,7034],{"class":1963},[115,19448,17516],{"class":125},[115,19450,19451,19453,19455,19458,19460,19463,19465],{"class":117,"line":7978},[115,19452,1551],{"class":125},[115,19454,1169],{"class":121},[115,19456,19457],{"class":230},"\"P2的年龄为：\"",[115,19459,1169],{"class":121},[115,19461,19462],{"class":125},"p2.m_Age",[115,19464,1169],{"class":121},[115,19466,1192],{"class":125},[115,19468,19469],{"class":117,"line":7984},[115,19470,1565],{"class":125},[115,19472,19473],{"class":117,"line":8011},[115,19474,19475],{"class":184},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[115,19477,19478],{"class":117,"line":8016},[115,19479,19480],{"class":184},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[115,19482,19483,19485,19488,19490,19492,19494],{"class":117,"line":8022},[115,19484,5365],{"class":121},[115,19486,19487],{"class":1963}," doWork",[115,19489,126],{"class":125},[115,19491,19047],{"class":1963},[115,19493,6826],{"class":5217},[115,19495,132],{"class":125},[115,19497,19498],{"class":117,"line":8034},[115,19499,1546],{"class":125},[115,19501,19502,19504,19506,19509,19511],{"class":117,"line":8046},[115,19503,6530],{"class":125},[115,19505,1169],{"class":121},[115,19507,19508],{"class":230}," \"doWork函数调用\"",[115,19510,1445],{"class":121},[115,19512,8841],{"class":125},[115,19514,19515],{"class":117,"line":8058},[115,19516,1565],{"class":125},[115,19518,19519,19521,19523],{"class":117,"line":9717},[115,19520,5365],{"class":121},[115,19522,5658],{"class":1963},[115,19524,1976],{"class":125},[115,19526,19527],{"class":117,"line":9742},[115,19528,1546],{"class":125},[115,19530,19531],{"class":117,"line":9765},[115,19532,15314],{"class":125},[115,19534,19535,19538],{"class":117,"line":9789},[115,19536,19537],{"class":1963},"    doWork",[115,19539,19540],{"class":125},"(p);\n",[115,19542,19543],{"class":117,"line":9794},[115,19544,1565],{"class":125},[115,19546,19547],{"class":117,"line":9799},[115,19548,19549],{"class":184},"\u002F\u002F 3.以值方式返回局部对象\n",[115,19551,19552,19554,19557],{"class":117,"line":9804},[115,19553,19047],{"class":1963},[115,19555,19556],{"class":1963}," doWork2",[115,19558,1976],{"class":125},[115,19560,19561],{"class":117,"line":9813},[115,19562,1546],{"class":125},[115,19564,19565],{"class":117,"line":9818},[115,19566,19037],{"class":125},[115,19568,19569,19571,19573,19575,19577,19579,19581,19583,19585,19587,19589],{"class":117,"line":9824},[115,19570,1551],{"class":125},[115,19572,1169],{"class":121},[115,19574,126],{"class":125},[115,19576,129],{"class":121},[115,19578,6519],{"class":121},[115,19580,554],{"class":125},[115,19582,478],{"class":121},[115,19584,7131],{"class":125},[115,19586,1169],{"class":121},[115,19588,1239],{"class":125},[115,19590,19591],{"class":184},"\u002F\u002F打印p1的地址\n",[115,19593,19594,19596,19599],{"class":117,"line":9845},[115,19595,4090],{"class":121},[115,19597,19598],{"class":125}," p1;",[115,19600,19601],{"class":184},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[115,19603,19604],{"class":117,"line":9851},[115,19605,1565],{"class":125},[115,19607,19608,19610,19612],{"class":117,"line":9865},[115,19609,5365],{"class":121},[115,19611,5730],{"class":1963},[115,19613,1976],{"class":125},[115,19615,19616],{"class":117,"line":9871},[115,19617,1546],{"class":125},[115,19619,19620,19623,19625,19627],{"class":117,"line":9898},[115,19621,19622],{"class":125},"    Person p ",[115,19624,171],{"class":121},[115,19626,19556],{"class":1963},[115,19628,5637],{"class":125},[115,19630,19631,19633,19635,19637,19639,19641,19643,19645,19647,19649,19651],{"class":117,"line":9907},[115,19632,1551],{"class":125},[115,19634,1169],{"class":121},[115,19636,126],{"class":125},[115,19638,129],{"class":121},[115,19640,6519],{"class":121},[115,19642,554],{"class":125},[115,19644,478],{"class":121},[115,19646,14],{"class":125},[115,19648,1169],{"class":121},[115,19650,1239],{"class":125},[115,19652,19653],{"class":184},"\u002F\u002F打印p的地址\n",[115,19655,19656],{"class":117,"line":9913},[115,19657,1565],{"class":125},[115,19659,19660],{"class":117,"line":9921},[115,19661,2400],{"emptyLinePlaceholder":42},[115,19663,19664],{"class":117,"line":9926},[115,19665,2400],{"emptyLinePlaceholder":42},[115,19667,19668,19670,19672],{"class":117,"line":16605},[115,19669,129],{"class":121},[115,19671,1973],{"class":1963},[115,19673,1976],{"class":125},[115,19675,19676],{"class":117,"line":16611},[115,19677,1546],{"class":125},[115,19679,19680],{"class":117,"line":16634},[115,19681,19682],{"class":184},"    \u002F\u002F test01();\n",[115,19684,19685],{"class":117,"line":16640},[115,19686,19687],{"class":184},"    \u002F\u002F test02();\n",[115,19689,19690,19693],{"class":117,"line":16663},[115,19691,19692],{"class":1963},"    test03",[115,19694,5637],{"class":125},[115,19696,19697],{"class":117,"line":16677},[115,19698,19699],{"class":184},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[115,19701,19702],{"class":117,"line":16697},[115,19703,19704],{"class":184},"\u002F\u002F 输出结果如下：\n",[115,19706,19707],{"class":117,"line":16703},[115,19708,19709],{"class":184},"\u002F\u002F Person的默认构造函数调用\n",[115,19711,19712],{"class":117,"line":16714},[115,19713,19714],{"class":184},"\u002F\u002F 0x7fffffffceec\n",[115,19716,19717],{"class":117,"line":16737},[115,19718,19714],{"class":184},[115,19720,19721],{"class":117,"line":16759},[115,19722,19723],{"class":184},"\u002F\u002F Person的析构函数调用\n",[115,19725,19726],{"class":117,"line":16764},[115,19727,2400],{"emptyLinePlaceholder":42},[115,19729,19730],{"class":117,"line":16770},[115,19731,19732],{"class":184},"\u002F\u002F 之前的输出结果如下：\n",[115,19734,19735],{"class":117,"line":16784},[115,19736,19709],{"class":184},[115,19738,19739],{"class":117,"line":16797},[115,19740,19741],{"class":184},"\u002F\u002F 地址\n",[115,19743,19744],{"class":117,"line":16802},[115,19745,19746],{"class":184},"\u002F\u002F Person的拷贝构造函数调用\n",[115,19748,19749],{"class":117,"line":16816},[115,19750,19723],{"class":184},[115,19752,19753],{"class":117,"line":16821},[115,19754,19741],{"class":184},[115,19756,19757],{"class":117,"line":16827},[115,19758,19759],{"class":184},"\u002F\u002F (这两次输出的地址也是不同的) \n",[115,19761,19762],{"class":117,"line":16832},[115,19763,19764],{"class":184},"\u002F\u002F Person的析构函数调用     \n",[115,19766,19767,19769,19771],{"class":117,"line":16846},[115,19768,4090],{"class":121},[115,19770,4093],{"class":174},[115,19772,1291],{"class":125},[115,19774,19775],{"class":117,"line":16851},[115,19776,1565],{"class":125},[14,19778,19779],{},"简化版理解",[106,19781,19783],{"className":108,"code":19782,"language":110,"meta":22,"style":22},"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",[112,19784,19785,19793,19797,19803,19816,19827,19831,19843,19856,19864,19868,19884,19897,19906,19910,19915,19921,19934,19938,19942,19949,19953,19957,19962,19970,19974,19990,20003,20016,20020,20025,20033,20037,20041,20046,20051,20067,20075,20082,20088,20092,20096,20101,20109,20113,20117,20140,20147,20151,20155,20163,20167,20177,20199,20203,20207,20211,20219,20223,20228,20233,20239,20243,20253,20257,20265],{"__ignoreMap":22},[115,19786,19787,19789,19791],{"class":117,"line":118},[115,19788,14695],{"class":121},[115,19790,15570],{"class":1963},[115,19792,15573],{"class":125},[115,19794,19795],{"class":117,"line":37},[115,19796,14717],{"class":121},[115,19798,19799,19801],{"class":117,"line":1180},[115,19800,18520],{"class":1963},[115,19802,10854],{"class":125},[115,19804,19805,19807,19809,19812,19814],{"class":117,"line":1195},[115,19806,9670],{"class":125},[115,19808,1169],{"class":121},[115,19810,19811],{"class":230}," \"无参构造函数!\"",[115,19813,1445],{"class":121},[115,19815,8841],{"class":125},[115,19817,19818,19821,19823,19825],{"class":117,"line":1201},[115,19819,19820],{"class":125},"        mAge ",[115,19822,171],{"class":121},[115,19824,4093],{"class":174},[115,19826,1291],{"class":125},[115,19828,19829],{"class":117,"line":1215},[115,19830,2187],{"class":125},[115,19832,19833,19835,19837,19839,19841],{"class":117,"line":1221},[115,19834,18520],{"class":1963},[115,19836,126],{"class":125},[115,19838,129],{"class":121},[115,19840,15690],{"class":5217},[115,19842,12443],{"class":125},[115,19844,19845,19847,19849,19852,19854],{"class":117,"line":1312},[115,19846,9670],{"class":125},[115,19848,1169],{"class":121},[115,19850,19851],{"class":230}," \"有参构造函数!\"",[115,19853,1445],{"class":121},[115,19855,8841],{"class":125},[115,19857,19858,19860,19862],{"class":117,"line":1318},[115,19859,19820],{"class":125},[115,19861,171],{"class":121},[115,19863,7798],{"class":125},[115,19865,19866],{"class":117,"line":1330},[115,19867,2187],{"class":125},[115,19869,19870,19872,19874,19876,19878,19880,19882],{"class":117,"line":1612},[115,19871,18520],{"class":1963},[115,19873,126],{"class":125},[115,19875,6793],{"class":121},[115,19877,15570],{"class":1963},[115,19879,478],{"class":121},[115,19881,6826],{"class":5217},[115,19883,12443],{"class":125},[115,19885,19886,19888,19890,19893,19895],{"class":117,"line":1617},[115,19887,9670],{"class":125},[115,19889,1169],{"class":121},[115,19891,19892],{"class":230}," \"拷贝构造函数!\"",[115,19894,1445],{"class":121},[115,19896,8841],{"class":125},[115,19898,19899,19901,19903],{"class":117,"line":1623},[115,19900,19820],{"class":125},[115,19902,171],{"class":121},[115,19904,19905],{"class":125}," p.mAge;\n",[115,19907,19908],{"class":117,"line":1628},[115,19909,2187],{"class":125},[115,19911,19912],{"class":117,"line":1642},[115,19913,19914],{"class":184},"    \u002F\u002F析构函数在释放内存之前调用\n",[115,19916,19917,19919],{"class":117,"line":1647},[115,19918,18553],{"class":1963},[115,19920,10854],{"class":125},[115,19922,19923,19925,19927,19930,19932],{"class":117,"line":1653},[115,19924,9670],{"class":125},[115,19926,1169],{"class":121},[115,19928,19929],{"class":230}," \"析构函数!\"",[115,19931,1445],{"class":121},[115,19933,8841],{"class":125},[115,19935,19936],{"class":117,"line":1674},[115,19937,2187],{"class":125},[115,19939,19940],{"class":117,"line":1679},[115,19941,14717],{"class":121},[115,19943,19944,19946],{"class":117,"line":1693},[115,19945,1985],{"class":121},[115,19947,19948],{"class":125}," mAge;\n",[115,19950,19951],{"class":117,"line":1698},[115,19952,3995],{"class":125},[115,19954,19955],{"class":117,"line":1727},[115,19956,2400],{"emptyLinePlaceholder":42},[115,19958,19959],{"class":117,"line":1732},[115,19960,19961],{"class":184},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[115,19963,19964,19966,19968],{"class":117,"line":1749},[115,19965,5365],{"class":121},[115,19967,5589],{"class":1963},[115,19969,10854],{"class":125},[115,19971,19972],{"class":117,"line":1754},[115,19973,2400],{"emptyLinePlaceholder":42},[115,19975,19976,19978,19981,19983,19985,19987],{"class":117,"line":1759},[115,19977,19432],{"class":125},[115,19979,19980],{"class":1963},"man",[115,19982,126],{"class":125},[115,19984,436],{"class":174},[115,19986,5967],{"class":125},[115,19988,19989],{"class":184}," \u002F\u002Fp对象已经创建完毕\n",[115,19991,19992,19994,19997,20000],{"class":117,"line":1764},[115,19993,19432],{"class":125},[115,19995,19996],{"class":1963},"newman",[115,19998,19999],{"class":125},"(man);",[115,20001,20002],{"class":184}," \u002F\u002F调用拷贝构造函数\n",[115,20004,20005,20008,20010,20013],{"class":117,"line":1778},[115,20006,20007],{"class":125},"    Person newman2 ",[115,20009,171],{"class":121},[115,20011,20012],{"class":125}," man;",[115,20014,20015],{"class":184}," \u002F\u002F拷贝构造\n",[115,20017,20018],{"class":117,"line":1783},[115,20019,2400],{"emptyLinePlaceholder":42},[115,20021,20022],{"class":117,"line":2577},[115,20023,20024],{"class":184},"    \u002F\u002FPerson newman3;\n",[115,20026,20027,20030],{"class":117,"line":2591},[115,20028,20029],{"class":184},"    \u002F\u002Fnewman3 = man;",[115,20031,20032],{"class":184}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[115,20034,20035],{"class":117,"line":2599},[115,20036,1565],{"class":125},[115,20038,20039],{"class":117,"line":2604},[115,20040,2400],{"emptyLinePlaceholder":42},[115,20042,20043],{"class":117,"line":2610},[115,20044,20045],{"class":184},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[115,20047,20048],{"class":117,"line":2616},[115,20049,20050],{"class":184},"\u002F\u002F相当于Person p1 = p;\n",[115,20052,20053,20055,20057,20059,20061,20064],{"class":117,"line":2621},[115,20054,5365],{"class":121},[115,20056,19487],{"class":1963},[115,20058,126],{"class":125},[115,20060,19047],{"class":1963},[115,20062,20063],{"class":5217}," p1",[115,20065,20066],{"class":125},") {}\n",[115,20068,20069,20071,20073],{"class":117,"line":7949},[115,20070,5365],{"class":121},[115,20072,5658],{"class":1963},[115,20074,10854],{"class":125},[115,20076,20077,20079],{"class":117,"line":7973},[115,20078,18605],{"class":125},[115,20080,20081],{"class":184}," \u002F\u002F无参构造函数\n",[115,20083,20084,20086],{"class":117,"line":7978},[115,20085,19537],{"class":1963},[115,20087,19540],{"class":125},[115,20089,20090],{"class":117,"line":7984},[115,20091,1565],{"class":125},[115,20093,20094],{"class":117,"line":8011},[115,20095,2400],{"emptyLinePlaceholder":42},[115,20097,20098],{"class":117,"line":8016},[115,20099,20100],{"class":184},"\u002F\u002F3. 以值方式返回局部对象\n",[115,20102,20103,20105,20107],{"class":117,"line":8022},[115,20104,19047],{"class":1963},[115,20106,19556],{"class":1963},[115,20108,1976],{"class":125},[115,20110,20111],{"class":117,"line":8034},[115,20112,1546],{"class":125},[115,20114,20115],{"class":117,"line":8046},[115,20116,19037],{"class":125},[115,20118,20119,20121,20123,20125,20127,20129,20131,20133,20136,20138],{"class":117,"line":8058},[115,20120,6530],{"class":125},[115,20122,1169],{"class":121},[115,20124,1658],{"class":125},[115,20126,129],{"class":121},[115,20128,6519],{"class":121},[115,20130,554],{"class":125},[115,20132,478],{"class":121},[115,20134,20135],{"class":125},"p1 ",[115,20137,1169],{"class":121},[115,20139,8841],{"class":125},[115,20141,20142,20144],{"class":117,"line":9717},[115,20143,4090],{"class":121},[115,20145,20146],{"class":125}," p1;\n",[115,20148,20149],{"class":117,"line":9742},[115,20150,1565],{"class":125},[115,20152,20153],{"class":117,"line":9765},[115,20154,2400],{"emptyLinePlaceholder":42},[115,20156,20157,20159,20161],{"class":117,"line":9789},[115,20158,5365],{"class":121},[115,20160,5730],{"class":1963},[115,20162,1976],{"class":125},[115,20164,20165],{"class":117,"line":9794},[115,20166,1546],{"class":125},[115,20168,20169,20171,20173,20175],{"class":117,"line":9799},[115,20170,19622],{"class":125},[115,20172,171],{"class":121},[115,20174,19556],{"class":1963},[115,20176,5637],{"class":125},[115,20178,20179,20181,20183,20185,20187,20189,20191,20193,20195,20197],{"class":117,"line":9804},[115,20180,6530],{"class":125},[115,20182,1169],{"class":121},[115,20184,1658],{"class":125},[115,20186,129],{"class":121},[115,20188,6519],{"class":121},[115,20190,554],{"class":125},[115,20192,478],{"class":121},[115,20194,11449],{"class":125},[115,20196,1169],{"class":121},[115,20198,8841],{"class":125},[115,20200,20201],{"class":117,"line":9813},[115,20202,1565],{"class":125},[115,20204,20205],{"class":117,"line":9818},[115,20206,2400],{"emptyLinePlaceholder":42},[115,20208,20209],{"class":117,"line":9824},[115,20210,2400],{"emptyLinePlaceholder":42},[115,20212,20213,20215,20217],{"class":117,"line":9845},[115,20214,129],{"class":121},[115,20216,1973],{"class":1963},[115,20218,10854],{"class":125},[115,20220,20221],{"class":117,"line":9851},[115,20222,2400],{"emptyLinePlaceholder":42},[115,20224,20225],{"class":117,"line":9865},[115,20226,20227],{"class":184},"    \u002F\u002Ftest01();\n",[115,20229,20230],{"class":117,"line":9871},[115,20231,20232],{"class":184},"    \u002F\u002Ftest02();\n",[115,20234,20235,20237],{"class":117,"line":9898},[115,20236,19692],{"class":1963},[115,20238,5637],{"class":125},[115,20240,20241],{"class":117,"line":9907},[115,20242,2400],{"emptyLinePlaceholder":42},[115,20244,20245,20247,20249,20251],{"class":117,"line":9913},[115,20246,2303],{"class":1963},[115,20248,126],{"class":125},[115,20250,2308],{"class":230},[115,20252,2719],{"class":125},[115,20254,20255],{"class":117,"line":9921},[115,20256,2400],{"emptyLinePlaceholder":42},[115,20258,20259,20261,20263],{"class":117,"line":9926},[115,20260,4090],{"class":121},[115,20262,4093],{"class":174},[115,20264,1291],{"class":125},[115,20266,20267],{"class":117,"line":16605},[115,20268,1565],{"class":125},[86,20270,20272],{"id":20271},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20274,20275],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20277,20278],{},"1．默认构造函数(无参，函数体为空)",[14,20280,20281],{},"2．默认析构函数(无参，函数体为空)",[14,20283,20284],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20286,20287],{},"构造函数调用规则如下：",[1132,20289,20290,20293],{},[72,20291,20292],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[72,20294,20295],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[106,20297,20299],{"className":108,"code":20298,"language":110,"meta":22,"style":22},"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",[112,20300,20301,20309,20313,20318,20324,20336,20340,20345,20357,20366,20378,20382,20386,20402,20411,20423,20427,20431,20437,20449,20453,20457,20463,20467,20471,20479,20483,20495,20500,20508,20512,20530,20534,20538,20546,20550,20555,20563,20578,20591,20595,20600,20607,20623,20636,20640,20644,20652,20656,20662,20666,20676,20680,20688],{"__ignoreMap":22},[115,20302,20303,20305,20307],{"class":117,"line":118},[115,20304,14695],{"class":121},[115,20306,15570],{"class":1963},[115,20308,15573],{"class":125},[115,20310,20311],{"class":117,"line":37},[115,20312,14717],{"class":121},[115,20314,20315],{"class":117,"line":1180},[115,20316,20317],{"class":184},"    \u002F\u002F无参（默认）构造函数\n",[115,20319,20320,20322],{"class":117,"line":1195},[115,20321,18520],{"class":1963},[115,20323,10854],{"class":125},[115,20325,20326,20328,20330,20332,20334],{"class":117,"line":1201},[115,20327,9670],{"class":125},[115,20329,1169],{"class":121},[115,20331,19811],{"class":230},[115,20333,1445],{"class":121},[115,20335,8841],{"class":125},[115,20337,20338],{"class":117,"line":1215},[115,20339,2187],{"class":125},[115,20341,20342],{"class":117,"line":1221},[115,20343,20344],{"class":184},"    \u002F\u002F有参构造函数\n",[115,20346,20347,20349,20351,20353,20355],{"class":117,"line":1312},[115,20348,18520],{"class":1963},[115,20350,126],{"class":125},[115,20352,129],{"class":121},[115,20354,1399],{"class":5217},[115,20356,12443],{"class":125},[115,20358,20359,20362,20364],{"class":117,"line":1318},[115,20360,20361],{"class":125},"        age ",[115,20363,171],{"class":121},[115,20365,1433],{"class":125},[115,20367,20368,20370,20372,20374,20376],{"class":117,"line":1330},[115,20369,9670],{"class":125},[115,20371,1169],{"class":121},[115,20373,19851],{"class":230},[115,20375,1445],{"class":121},[115,20377,8841],{"class":125},[115,20379,20380],{"class":117,"line":1612},[115,20381,2187],{"class":125},[115,20383,20384],{"class":117,"line":1617},[115,20385,18875],{"class":184},[115,20387,20388,20390,20392,20394,20396,20398,20400],{"class":117,"line":1623},[115,20389,18520],{"class":1963},[115,20391,126],{"class":125},[115,20393,6793],{"class":121},[115,20395,15570],{"class":1963},[115,20397,478],{"class":121},[115,20399,6826],{"class":5217},[115,20401,12443],{"class":125},[115,20403,20404,20406,20408],{"class":117,"line":1628},[115,20405,20361],{"class":125},[115,20407,171],{"class":121},[115,20409,20410],{"class":125}," p.age;\n",[115,20412,20413,20415,20417,20419,20421],{"class":117,"line":1642},[115,20414,9670],{"class":125},[115,20416,1169],{"class":121},[115,20418,19892],{"class":230},[115,20420,1445],{"class":121},[115,20422,8841],{"class":125},[115,20424,20425],{"class":117,"line":1647},[115,20426,2187],{"class":125},[115,20428,20429],{"class":117,"line":1653},[115,20430,18548],{"class":184},[115,20432,20433,20435],{"class":117,"line":1674},[115,20434,18553],{"class":1963},[115,20436,10854],{"class":125},[115,20438,20439,20441,20443,20445,20447],{"class":117,"line":1679},[115,20440,9670],{"class":125},[115,20442,1169],{"class":121},[115,20444,19929],{"class":230},[115,20446,1445],{"class":121},[115,20448,8841],{"class":125},[115,20450,20451],{"class":117,"line":1693},[115,20452,2187],{"class":125},[115,20454,20455],{"class":117,"line":1698},[115,20456,14717],{"class":121},[115,20458,20459,20461],{"class":117,"line":1727},[115,20460,1985],{"class":121},[115,20462,7798],{"class":125},[115,20464,20465],{"class":117,"line":1732},[115,20466,3995],{"class":125},[115,20468,20469],{"class":117,"line":1749},[115,20470,2400],{"emptyLinePlaceholder":42},[115,20472,20473,20475,20477],{"class":117,"line":1754},[115,20474,5365],{"class":121},[115,20476,5589],{"class":1963},[115,20478,1976],{"class":125},[115,20480,20481],{"class":117,"line":1759},[115,20482,1546],{"class":125},[115,20484,20485,20487,20489,20491,20493],{"class":117,"line":1764},[115,20486,19432],{"class":125},[115,20488,7131],{"class":1963},[115,20490,126],{"class":125},[115,20492,775],{"class":174},[115,20494,2719],{"class":125},[115,20496,20497],{"class":117,"line":1778},[115,20498,20499],{"class":184},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[115,20501,20502,20504,20506],{"class":117,"line":1783},[115,20503,19432],{"class":125},[115,20505,7034],{"class":1963},[115,20507,17516],{"class":125},[115,20509,20510],{"class":117,"line":2577},[115,20511,2400],{"emptyLinePlaceholder":42},[115,20513,20514,20516,20518,20521,20523,20526,20528],{"class":117,"line":2591},[115,20515,6530],{"class":125},[115,20517,1169],{"class":121},[115,20519,20520],{"class":230}," \"p2的年龄为： \"",[115,20522,1445],{"class":121},[115,20524,20525],{"class":125}," p2.age ",[115,20527,1169],{"class":121},[115,20529,8841],{"class":125},[115,20531,20532],{"class":117,"line":2599},[115,20533,1565],{"class":125},[115,20535,20536],{"class":117,"line":2604},[115,20537,2400],{"emptyLinePlaceholder":42},[115,20539,20540,20542,20544],{"class":117,"line":2610},[115,20541,5365],{"class":121},[115,20543,5658],{"class":1963},[115,20545,1976],{"class":125},[115,20547,20548],{"class":117,"line":2616},[115,20549,1546],{"class":125},[115,20551,20552],{"class":117,"line":2621},[115,20553,20554],{"class":184},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[115,20556,20557,20560],{"class":117,"line":7949},[115,20558,20559],{"class":125},"    Person p1;",[115,20561,20562],{"class":184}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[115,20564,20565,20567,20569,20571,20573,20575],{"class":117,"line":7973},[115,20566,19432],{"class":125},[115,20568,7034],{"class":1963},[115,20570,126],{"class":125},[115,20572,571],{"class":174},[115,20574,5967],{"class":125},[115,20576,20577],{"class":184}," \u002F\u002F用户提供的有参\n",[115,20579,20580,20582,20585,20588],{"class":117,"line":7978},[115,20581,19432],{"class":125},[115,20583,20584],{"class":1963},"p3",[115,20586,20587],{"class":125},"(p2);",[115,20589,20590],{"class":184}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[115,20592,20593],{"class":117,"line":7984},[115,20594,2400],{"emptyLinePlaceholder":42},[115,20596,20597],{"class":117,"line":8011},[115,20598,20599],{"class":184},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[115,20601,20602,20605],{"class":117,"line":8016},[115,20603,20604],{"class":125},"    Person p4;",[115,20606,20562],{"class":184},[115,20608,20609,20611,20614,20616,20618,20620],{"class":117,"line":8022},[115,20610,19432],{"class":125},[115,20612,20613],{"class":1963},"p5",[115,20615,126],{"class":125},[115,20617,571],{"class":174},[115,20619,5967],{"class":125},[115,20621,20622],{"class":184}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[115,20624,20625,20627,20630,20633],{"class":117,"line":8034},[115,20626,19432],{"class":125},[115,20628,20629],{"class":1963},"p6",[115,20631,20632],{"class":125},"(p5);",[115,20634,20635],{"class":184}," \u002F\u002F用户自己提供拷贝构造\n",[115,20637,20638],{"class":117,"line":8046},[115,20639,1565],{"class":125},[115,20641,20642],{"class":117,"line":8058},[115,20643,2400],{"emptyLinePlaceholder":42},[115,20645,20646,20648,20650],{"class":117,"line":9717},[115,20647,129],{"class":121},[115,20649,1973],{"class":1963},[115,20651,10854],{"class":125},[115,20653,20654],{"class":117,"line":9742},[115,20655,2400],{"emptyLinePlaceholder":42},[115,20657,20658,20660],{"class":117,"line":9765},[115,20659,5634],{"class":1963},[115,20661,5637],{"class":125},[115,20663,20664],{"class":117,"line":9789},[115,20665,2400],{"emptyLinePlaceholder":42},[115,20667,20668,20670,20672,20674],{"class":117,"line":9794},[115,20669,2303],{"class":1963},[115,20671,126],{"class":125},[115,20673,2308],{"class":230},[115,20675,2719],{"class":125},[115,20677,20678],{"class":117,"line":9799},[115,20679,2400],{"emptyLinePlaceholder":42},[115,20681,20682,20684,20686],{"class":117,"line":9804},[115,20683,4090],{"class":121},[115,20685,4093],{"class":174},[115,20687,1291],{"class":125},[115,20689,20690],{"class":117,"line":9813},[115,20691,1565],{"class":125},[86,20693,20695],{"id":20694},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20697,20698],{},"浅拷贝：简单的赋值拷贝操作",[14,20700,20701],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[106,20703,20705],{"className":108,"code":20704,"language":110,"meta":22,"style":22},"#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",[112,20706,20707,20713,20723,20729,20733,20737,20742,20748,20752,20765,20769,20773,20780,20784,20794,20809,20822,20826,20831,20836,20852,20856,20869,20874,20879,20884,20893,20898,20913,20917,20921,20925,20931,20935,20940,20955,20959,20970,20984,20988,20997,21001,21007,21019,21023,21031,21035,21052,21083,21091,21119,21123,21127,21135,21139,21145],{"__ignoreMap":22},[115,20708,20709,20711],{"class":117,"line":118},[115,20710,1949],{"class":121},[115,20712,1952],{"class":230},[115,20714,20715,20717,20719,20721],{"class":117,"line":37},[115,20716,1957],{"class":121},[115,20718,1960],{"class":121},[115,20720,1964],{"class":1963},[115,20722,1291],{"class":125},[115,20724,20725,20727],{"class":117,"line":1180},[115,20726,14695],{"class":121},[115,20728,15172],{"class":1963},[115,20730,20731],{"class":117,"line":1195},[115,20732,1546],{"class":125},[115,20734,20735],{"class":117,"line":1201},[115,20736,14717],{"class":121},[115,20738,20739],{"class":117,"line":1215},[115,20740,20741],{"class":184},"    \u002F\u002F默认构造函数\n",[115,20743,20744,20746],{"class":117,"line":1221},[115,20745,18520],{"class":1963},[115,20747,1976],{"class":125},[115,20749,20750],{"class":117,"line":1312},[115,20751,2030],{"class":125},[115,20753,20754,20756,20758,20761,20763],{"class":117,"line":1318},[115,20755,3451],{"class":125},[115,20757,1169],{"class":121},[115,20759,20760],{"class":230},"\"默认构造函数\"",[115,20762,1169],{"class":121},[115,20764,1192],{"class":125},[115,20766,20767],{"class":117,"line":1330},[115,20768,2187],{"class":125},[115,20770,20771],{"class":117,"line":1612},[115,20772,20344],{"class":184},[115,20774,20775,20777],{"class":117,"line":1617},[115,20776,18553],{"class":1963},[115,20778,20779],{"class":125},"(int age,int height)\n",[115,20781,20782],{"class":117,"line":1623},[115,20783,2030],{"class":125},[115,20785,20786,20789,20791],{"class":117,"line":1628},[115,20787,20788],{"class":125},"        m_Age",[115,20790,171],{"class":121},[115,20792,20793],{"class":125},"age;\n",[115,20795,20796,20799,20801,20803,20806],{"class":117,"line":1642},[115,20797,20798],{"class":125},"        m_Height",[115,20800,11718],{"class":121},[115,20802,2382],{"class":121},[115,20804,20805],{"class":125},"(height);",[115,20807,20808],{"class":184},"\u002F\u002F放到堆区\n",[115,20810,20811,20813,20815,20818,20820],{"class":117,"line":1647},[115,20812,3451],{"class":125},[115,20814,1169],{"class":121},[115,20816,20817],{"class":230},"\"有参构造函数\"",[115,20819,1169],{"class":121},[115,20821,1192],{"class":125},[115,20823,20824],{"class":117,"line":1653},[115,20825,2187],{"class":125},[115,20827,20828],{"class":117,"line":1674},[115,20829,20830],{"class":184},"    \u002F\u002F深拷贝解决上述问题\n",[115,20832,20833],{"class":117,"line":1679},[115,20834,20835],{"class":184},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[115,20837,20838,20840,20842,20844,20846,20848,20850],{"class":117,"line":1693},[115,20839,18520],{"class":1963},[115,20841,126],{"class":125},[115,20843,6793],{"class":121},[115,20845,15570],{"class":1963},[115,20847,10585],{"class":121},[115,20849,14],{"class":5217},[115,20851,132],{"class":125},[115,20853,20854],{"class":117,"line":1698},[115,20855,2030],{"class":125},[115,20857,20858,20860,20862,20865,20867],{"class":117,"line":1727},[115,20859,3451],{"class":125},[115,20861,1169],{"class":121},[115,20863,20864],{"class":230},"\"拷贝构造函数\"",[115,20866,1169],{"class":121},[115,20868,1192],{"class":125},[115,20870,20871],{"class":117,"line":1732},[115,20872,20873],{"class":184},"        \u002F\u002F编译器默认的写如下注释部分\n",[115,20875,20876],{"class":117,"line":1749},[115,20877,20878],{"class":184},"        \u002F\u002Fm_Age=p.m_Age;\n",[115,20880,20881],{"class":117,"line":1754},[115,20882,20883],{"class":184},"        \u002F\u002Fm_Height=p.m_Height;\n",[115,20885,20886,20888,20890],{"class":117,"line":1759},[115,20887,20788],{"class":125},[115,20889,171],{"class":121},[115,20891,20892],{"class":125},"p.m_Age;\n",[115,20894,20895],{"class":117,"line":1764},[115,20896,20897],{"class":184},"        \u002F\u002F深拷贝操作\n",[115,20899,20900,20902,20904,20906,20908,20910],{"class":117,"line":1778},[115,20901,20798],{"class":125},[115,20903,11718],{"class":121},[115,20905,2382],{"class":121},[115,20907,126],{"class":125},[115,20909,580],{"class":121},[115,20911,20912],{"class":125},"p.m_Height);\n",[115,20914,20915],{"class":117,"line":1783},[115,20916,2187],{"class":125},[115,20918,20919],{"class":117,"line":2577},[115,20920,2400],{"emptyLinePlaceholder":42},[115,20922,20923],{"class":117,"line":2591},[115,20924,18548],{"class":184},[115,20926,20927,20929],{"class":117,"line":2599},[115,20928,18553],{"class":1963},[115,20930,1976],{"class":125},[115,20932,20933],{"class":117,"line":2604},[115,20934,2030],{"class":125},[115,20936,20937],{"class":117,"line":2610},[115,20938,20939],{"class":184},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[115,20941,20942,20944,20947,20950,20953],{"class":117,"line":2616},[115,20943,2497],{"class":121},[115,20945,20946],{"class":125},"(m_Height ",[115,20948,20949],{"class":121},"!=",[115,20951,20952],{"class":174}," NULL",[115,20954,132],{"class":125},[115,20956,20957],{"class":117,"line":2621},[115,20958,2510],{"class":125},[115,20960,20961,20964,20967],{"class":117,"line":7949},[115,20962,20963],{"class":121},"            delete",[115,20965,20966],{"class":125}," m_Height;",[115,20968,20969],{"class":184}," \u002F\u002F释放堆区内存\n",[115,20971,20972,20975,20977,20979,20981],{"class":117,"line":7973},[115,20973,20974],{"class":125},"            m_Height",[115,20976,171],{"class":121},[115,20978,2392],{"class":174},[115,20980,181],{"class":125},[115,20982,20983],{"class":184}," \u002F\u002F防止野指针\n",[115,20985,20986],{"class":117,"line":7978},[115,20987,2529],{"class":125},[115,20989,20990,20992,20994],{"class":117,"line":7984},[115,20991,3451],{"class":125},[115,20993,1169],{"class":121},[115,20995,20996],{"class":230},"\"Person的析构函数调用\"\n",[115,20998,20999],{"class":117,"line":8011},[115,21000,2187],{"class":125},[115,21002,21003,21005],{"class":117,"line":8016},[115,21004,1985],{"class":121},[115,21006,15667],{"class":125},[115,21008,21009,21011,21013,21016],{"class":117,"line":8022},[115,21010,1985],{"class":121},[115,21012,6519],{"class":121},[115,21014,21015],{"class":125},"m_Height;",[115,21017,21018],{"class":184}," \u002F\u002F定义一个指针，指向身高\n",[115,21020,21021],{"class":117,"line":8034},[115,21022,3995],{"class":125},[115,21024,21025,21027,21029],{"class":117,"line":8046},[115,21026,5365],{"class":121},[115,21028,5589],{"class":1963},[115,21030,1976],{"class":125},[115,21032,21033],{"class":117,"line":8058},[115,21034,1546],{"class":125},[115,21036,21037,21039,21041,21043,21045,21047,21050],{"class":117,"line":9717},[115,21038,19432],{"class":125},[115,21040,7131],{"class":1963},[115,21042,126],{"class":125},[115,21044,775],{"class":174},[115,21046,503],{"class":125},[115,21048,21049],{"class":174},"160",[115,21051,2719],{"class":125},[115,21053,21054,21056,21058,21061,21063,21066,21068,21071,21073,21076,21078,21080],{"class":117,"line":9742},[115,21055,1551],{"class":125},[115,21057,1169],{"class":121},[115,21059,21060],{"class":230},"\"p1的年龄为:\"",[115,21062,1169],{"class":121},[115,21064,21065],{"class":125},"p1.m_Age",[115,21067,1169],{"class":121},[115,21069,21070],{"class":230},"\"身高为：\"",[115,21072,6420],{"class":121},[115,21074,21075],{"class":125},"p1.m_Height",[115,21077,1169],{"class":121},[115,21079,1239],{"class":125},[115,21081,21082],{"class":184},"  \u002F\u002F18\n",[115,21084,21085,21087,21089],{"class":117,"line":9765},[115,21086,19432],{"class":125},[115,21088,7034],{"class":1963},[115,21090,17516],{"class":125},[115,21092,21093,21095,21097,21100,21102,21104,21106,21108,21110,21113,21115,21117],{"class":117,"line":9789},[115,21094,1551],{"class":125},[115,21096,1169],{"class":121},[115,21098,21099],{"class":230},"\"p2的年龄为：\"",[115,21101,1169],{"class":121},[115,21103,19462],{"class":125},[115,21105,1169],{"class":121},[115,21107,21070],{"class":230},[115,21109,6420],{"class":121},[115,21111,21112],{"class":125},"p2.m_Height",[115,21114,1169],{"class":121},[115,21116,1239],{"class":125},[115,21118,21082],{"class":184},[115,21120,21121],{"class":117,"line":9794},[115,21122,13211],{"class":125},[115,21124,21125],{"class":117,"line":9799},[115,21126,1565],{"class":125},[115,21128,21129,21131,21133],{"class":117,"line":9804},[115,21130,129],{"class":121},[115,21132,1973],{"class":1963},[115,21134,1976],{"class":125},[115,21136,21137],{"class":117,"line":9813},[115,21138,1546],{"class":125},[115,21140,21141,21143],{"class":117,"line":9818},[115,21142,5634],{"class":1963},[115,21144,5637],{"class":125},[115,21146,21147],{"class":117,"line":9824},[115,21148,1565],{"class":125},[14,21150,21151],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21153,21154],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21156,21157],{},[20,21158],{"alt":22,"src":21159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21161,21162],{},"浅拷贝问题要使用深拷贝来解决",[14,21164,21165],{},[20,21166],{"alt":22,"src":21167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21169,21170],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[86,21172,21174],{"id":21173},"_826初始化列表","8.2.6初始化列表",[14,21176,21177],{},"作用：初始化属性",[14,21179,5182],{},[106,21181,21184],{"className":21182,"code":21183,"language":5188},[5186],"构造函数():属性1(值1),属性2(值2).....{}\n",[112,21185,21183],{"__ignoreMap":22},[14,21187,21188],{},"例子",[106,21190,21192],{"className":108,"code":21191,"language":110,"meta":22,"style":22},"#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",[112,21193,21194,21200,21210,21216,21220,21225,21229,21234,21239,21244,21249,21254,21259,21263,21268,21273,21316,21325,21343,21361,21379,21383,21387,21394,21401,21408,21412,21416,21424,21428,21432,21452,21461,21465,21469,21479,21483,21491],{"__ignoreMap":22},[115,21195,21196,21198],{"class":117,"line":118},[115,21197,1949],{"class":121},[115,21199,1952],{"class":230},[115,21201,21202,21204,21206,21208],{"class":117,"line":37},[115,21203,1957],{"class":121},[115,21205,1960],{"class":121},[115,21207,1964],{"class":1963},[115,21209,1291],{"class":125},[115,21211,21212,21214],{"class":117,"line":1180},[115,21213,14695],{"class":121},[115,21215,15172],{"class":1963},[115,21217,21218],{"class":117,"line":1195},[115,21219,1546],{"class":125},[115,21221,21222],{"class":117,"line":1201},[115,21223,21224],{"class":121},"    public:\n",[115,21226,21227],{"class":117,"line":1215},[115,21228,2400],{"emptyLinePlaceholder":42},[115,21230,21231],{"class":117,"line":1221},[115,21232,21233],{"class":184},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[115,21235,21236],{"class":117,"line":1312},[115,21237,21238],{"class":184},"    \u002F\u002FPerson(int a, int b, int c) {\n",[115,21240,21241],{"class":117,"line":1318},[115,21242,21243],{"class":184},"    \u002F\u002F  m_A = a;\n",[115,21245,21246],{"class":117,"line":1330},[115,21247,21248],{"class":184},"    \u002F\u002F  m_B = b;\n",[115,21250,21251],{"class":117,"line":1612},[115,21252,21253],{"class":184},"    \u002F\u002F  m_C = c;\n",[115,21255,21256],{"class":117,"line":1617},[115,21257,21258],{"class":184},"    \u002F\u002F}\n",[115,21260,21261],{"class":117,"line":1623},[115,21262,2400],{"emptyLinePlaceholder":42},[115,21264,21265],{"class":117,"line":1628},[115,21266,21267],{"class":184},"    \u002F\u002F初始化列表方式初始化\n",[115,21269,21270],{"class":117,"line":1642},[115,21271,21272],{"class":184},"    \u002F\u002F使用有参构造函数\n",[115,21274,21275,21277,21279,21281,21283,21285,21287,21289,21291,21293,21295,21298,21301,21304,21307,21310,21313],{"class":117,"line":1647},[115,21276,18520],{"class":1963},[115,21278,126],{"class":125},[115,21280,129],{"class":121},[115,21282,1399],{"class":5217},[115,21284,12436],{"class":125},[115,21286,129],{"class":121},[115,21288,2833],{"class":5217},[115,21290,12436],{"class":125},[115,21292,129],{"class":121},[115,21294,2849],{"class":5217},[115,21296,21297],{"class":125},") :",[115,21299,21300],{"class":1963},"m_A",[115,21302,21303],{"class":125},"(a), ",[115,21305,21306],{"class":1963},"m_B",[115,21308,21309],{"class":125},"(b), ",[115,21311,21312],{"class":1963},"m_C",[115,21314,21315],{"class":125},"(c) {}\n",[115,21317,21318,21320,21323],{"class":117,"line":1653},[115,21319,14910],{"class":121},[115,21321,21322],{"class":1963}," PrintPerson",[115,21324,10854],{"class":125},[115,21326,21327,21329,21331,21334,21336,21339,21341],{"class":117,"line":1674},[115,21328,9670],{"class":125},[115,21330,1169],{"class":121},[115,21332,21333],{"class":230}," \"mA:\"",[115,21335,1445],{"class":121},[115,21337,21338],{"class":125}," m_A ",[115,21340,1169],{"class":121},[115,21342,8841],{"class":125},[115,21344,21345,21347,21349,21352,21354,21357,21359],{"class":117,"line":1679},[115,21346,9670],{"class":125},[115,21348,1169],{"class":121},[115,21350,21351],{"class":230}," \"mB:\"",[115,21353,1445],{"class":121},[115,21355,21356],{"class":125}," m_B ",[115,21358,1169],{"class":121},[115,21360,8841],{"class":125},[115,21362,21363,21365,21367,21370,21372,21375,21377],{"class":117,"line":1693},[115,21364,9670],{"class":125},[115,21366,1169],{"class":121},[115,21368,21369],{"class":230}," \"mC:\"",[115,21371,1445],{"class":121},[115,21373,21374],{"class":125}," m_C ",[115,21376,1169],{"class":121},[115,21378,8841],{"class":125},[115,21380,21381],{"class":117,"line":1698},[115,21382,2187],{"class":125},[115,21384,21385],{"class":117,"line":1727},[115,21386,15223],{"class":121},[115,21388,21389,21391],{"class":117,"line":1732},[115,21390,1985],{"class":121},[115,21392,21393],{"class":125}," m_A;\n",[115,21395,21396,21398],{"class":117,"line":1749},[115,21397,1985],{"class":121},[115,21399,21400],{"class":125}," m_B;\n",[115,21402,21403,21405],{"class":117,"line":1754},[115,21404,1985],{"class":121},[115,21406,21407],{"class":125}," m_C;\n",[115,21409,21410],{"class":117,"line":1759},[115,21411,3995],{"class":125},[115,21413,21414],{"class":117,"line":1764},[115,21415,2400],{"emptyLinePlaceholder":42},[115,21417,21418,21420,21422],{"class":117,"line":1778},[115,21419,129],{"class":121},[115,21421,1973],{"class":1963},[115,21423,5979],{"class":125},[115,21425,21426],{"class":117,"line":1783},[115,21427,1546],{"class":125},[115,21429,21430],{"class":117,"line":2577},[115,21431,2400],{"emptyLinePlaceholder":42},[115,21433,21434,21436,21438,21440,21442,21444,21446,21448,21450],{"class":117,"line":2591},[115,21435,19432],{"class":125},[115,21437,14],{"class":1963},[115,21439,126],{"class":125},[115,21441,343],{"class":174},[115,21443,12436],{"class":125},[115,21445,203],{"class":174},[115,21447,12436],{"class":125},[115,21449,197],{"class":174},[115,21451,2719],{"class":125},[115,21453,21454,21456,21459],{"class":117,"line":2599},[115,21455,15867],{"class":125},[115,21457,21458],{"class":1963},"PrintPerson",[115,21460,5637],{"class":125},[115,21462,21463],{"class":117,"line":2604},[115,21464,2400],{"emptyLinePlaceholder":42},[115,21466,21467],{"class":117,"line":2610},[115,21468,2400],{"emptyLinePlaceholder":42},[115,21470,21471,21473,21475,21477],{"class":117,"line":2616},[115,21472,2303],{"class":1963},[115,21474,126],{"class":125},[115,21476,2308],{"class":230},[115,21478,2719],{"class":125},[115,21480,21481],{"class":117,"line":2621},[115,21482,2400],{"emptyLinePlaceholder":42},[115,21484,21485,21487,21489],{"class":117,"line":7949},[115,21486,4090],{"class":121},[115,21488,4093],{"class":174},[115,21490,1291],{"class":125},[115,21492,21493],{"class":117,"line":7973},[115,21494,1565],{"class":125},[14,21496,21497,21498,21501,21502],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[275,21499,21500],{},"参数名就是定义的对象属性","，",[275,21503,21504],{},"属性后面的值为有参构造函数的形参",[106,21506,21508],{"className":108,"code":21507,"language":110,"meta":22,"style":22},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[112,21509,21510],{"__ignoreMap":22},[115,21511,21512,21514,21516,21518,21521,21523,21526,21528,21531,21533,21536,21538,21541,21543],{"class":117,"line":118},[115,21513,19047],{"class":1963},[115,21515,126],{"class":125},[115,21517,129],{"class":121},[115,21519,21520],{"class":125}," a.",[115,21522,129],{"class":121},[115,21524,21525],{"class":125}," b,",[115,21527,129],{"class":121},[115,21529,21530],{"class":125}," b):",[115,21532,21300],{"class":1963},[115,21534,21535],{"class":125},"(a),",[115,21537,21306],{"class":1963},[115,21539,21540],{"class":125},"(c),",[115,21542,21312],{"class":1963},[115,21544,21545],{"class":125},"(b) {}\n",[86,21547,21549],{"id":21548},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21551,21552],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21554,14634],{},[106,21556,21558],{"className":108,"code":21557,"language":110,"meta":22,"style":22},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[112,21559,21560,21565,21570,21574,21579,21583],{"__ignoreMap":22},[115,21561,21562],{"class":117,"line":118},[115,21563,21564],{"class":125},"A{};\n",[115,21566,21567],{"class":117,"line":37},[115,21568,21569],{"class":125},"B\n",[115,21571,21572],{"class":117,"line":1180},[115,21573,1546],{"class":125},[115,21575,21576],{"class":117,"line":1195},[115,21577,21578],{"class":125},"    A a;\n",[115,21580,21581],{"class":117,"line":1201},[115,21582,1565],{"class":125},[115,21584,21585],{"class":117,"line":1215},[115,21586,21587],{"class":184},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21589,21590],{},"案例",[106,21592,21594],{"className":108,"code":21593,"language":110,"meta":22,"style":22},"\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",[112,21595,21596,21601,21608,21612,21617,21622,21636,21640,21650,21661,21665,21672,21676,21689,21693,21698,21703,21707,21713,21717,21721,21725,21756,21760,21771,21775,21781,21785,21798,21802,21806,21810,21815,21820,21824,21832,21836,21853,21872,21876,21884,21888,21894],{"__ignoreMap":22},[115,21597,21598],{"class":117,"line":118},[115,21599,21600],{"class":184},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[115,21602,21603,21605],{"class":117,"line":37},[115,21604,14695],{"class":121},[115,21606,21607],{"class":1963}," Phone\n",[115,21609,21610],{"class":117,"line":1180},[115,21611,1546],{"class":125},[115,21613,21614],{"class":117,"line":1195},[115,21615,21616],{"class":125},"public：\n",[115,21618,21619],{"class":117,"line":1201},[115,21620,21621],{"class":184},"    \u002F\u002F 赋值(构造函数)\n",[115,21623,21624,21627,21629,21631,21634],{"class":117,"line":1215},[115,21625,21626],{"class":1963},"    Phone",[115,21628,126],{"class":125},[115,21630,14918],{"class":1963},[115,21632,21633],{"class":5217}," pName",[115,21635,132],{"class":125},[115,21637,21638],{"class":117,"line":1221},[115,21639,2030],{"class":125},[115,21641,21642,21645,21647],{"class":117,"line":1312},[115,21643,21644],{"class":125},"        m_pName",[115,21646,171],{"class":121},[115,21648,21649],{"class":125},"pName;\n",[115,21651,21652,21654,21656,21659],{"class":117,"line":1318},[115,21653,3451],{"class":125},[115,21655,1169],{"class":121},[115,21657,21658],{"class":230},"\"Phone的构造函数调用\"",[115,21660,1291],{"class":125},[115,21662,21663],{"class":117,"line":1330},[115,21664,2187],{"class":125},[115,21666,21667,21670],{"class":117,"line":1612},[115,21668,21669],{"class":1963},"    ~Phone",[115,21671,1976],{"class":125},[115,21673,21674],{"class":117,"line":1617},[115,21675,2030],{"class":125},[115,21677,21678,21680,21682,21685,21687],{"class":117,"line":1623},[115,21679,3451],{"class":125},[115,21681,1169],{"class":121},[115,21683,21684],{"class":230},"\"Phone析构函数调用\"",[115,21686,1169],{"class":121},[115,21688,1192],{"class":125},[115,21690,21691],{"class":117,"line":1628},[115,21692,2187],{"class":125},[115,21694,21695],{"class":117,"line":1642},[115,21696,21697],{"class":184},"    \u002F\u002F\n",[115,21699,21700],{"class":117,"line":1647},[115,21701,21702],{"class":125},"    string m_PName;\n",[115,21704,21705],{"class":117,"line":1653},[115,21706,3995],{"class":125},[115,21708,21709,21711],{"class":117,"line":1674},[115,21710,14695],{"class":121},[115,21712,15172],{"class":1963},[115,21714,21715],{"class":117,"line":1679},[115,21716,1546],{"class":125},[115,21718,21719],{"class":117,"line":1693},[115,21720,14717],{"class":121},[115,21722,21723],{"class":117,"line":1698},[115,21724,16995],{"class":184},[115,21726,21727,21729,21731,21733,21735,21737,21739,21742,21745,21747,21750,21753],{"class":117,"line":1727},[115,21728,18520],{"class":1963},[115,21730,126],{"class":125},[115,21732,14918],{"class":1963},[115,21734,14921],{"class":5217},[115,21736,503],{"class":125},[115,21738,14918],{"class":1963},[115,21740,21741],{"class":5217}," pname",[115,21743,21744],{"class":125},"):",[115,21746,15011],{"class":1963},[115,21748,21749],{"class":125},"(name),m_phone.",[115,21751,21752],{"class":1963},"m_PName",[115,21754,21755],{"class":125},"(pname) \n",[115,21757,21758],{"class":117,"line":1732},[115,21759,2030],{"class":125},[115,21761,21762,21764,21766,21769],{"class":117,"line":1749},[115,21763,3451],{"class":125},[115,21765,1169],{"class":121},[115,21767,21768],{"class":230},"\"Person的构造函数调用\"",[115,21770,1291],{"class":125},[115,21772,21773],{"class":117,"line":1754},[115,21774,2187],{"class":125},[115,21776,21777,21779],{"class":117,"line":1759},[115,21778,18553],{"class":1963},[115,21780,1976],{"class":125},[115,21782,21783],{"class":117,"line":1764},[115,21784,2030],{"class":125},[115,21786,21787,21789,21791,21794,21796],{"class":117,"line":1778},[115,21788,3451],{"class":125},[115,21790,1169],{"class":121},[115,21792,21793],{"class":230},"\"Person析构函数调用\"",[115,21795,1169],{"class":121},[115,21797,1192],{"class":125},[115,21799,21800],{"class":117,"line":1783},[115,21801,2187],{"class":125},[115,21803,21804],{"class":117,"line":2577},[115,21805,7781],{"class":184},[115,21807,21808],{"class":117,"line":2591},[115,21809,14893],{"class":125},[115,21811,21812],{"class":117,"line":2599},[115,21813,21814],{"class":184},"    \u002F\u002F手机\n",[115,21816,21817],{"class":117,"line":2604},[115,21818,21819],{"class":125},"    Phone m_Phone;\n",[115,21821,21822],{"class":117,"line":2610},[115,21823,3995],{"class":125},[115,21825,21826,21828,21830],{"class":117,"line":2616},[115,21827,5365],{"class":121},[115,21829,5589],{"class":1963},[115,21831,1976],{"class":125},[115,21833,21834],{"class":117,"line":2621},[115,21835,1546],{"class":125},[115,21837,21838,21840,21842,21844,21846,21848,21851],{"class":117,"line":7949},[115,21839,19432],{"class":125},[115,21841,14],{"class":1963},[115,21843,126],{"class":125},[115,21845,7917],{"class":230},[115,21847,503],{"class":125},[115,21849,21850],{"class":230},"\"安卓\"",[115,21852,2719],{"class":125},[115,21854,21855,21857,21859,21862,21864,21867,21869],{"class":117,"line":7973},[115,21856,1551],{"class":125},[115,21858,1169],{"class":121},[115,21860,21861],{"class":125},"p.Name",[115,21863,1169],{"class":121},[115,21865,21866],{"class":230},"\"拿着：\"",[115,21868,1169],{"class":121},[115,21870,21871],{"class":125},"p.m_phone.m_PName;\n",[115,21873,21874],{"class":117,"line":7978},[115,21875,1565],{"class":125},[115,21877,21878,21880,21882],{"class":117,"line":7984},[115,21879,129],{"class":121},[115,21881,1973],{"class":1963},[115,21883,1976],{"class":125},[115,21885,21886],{"class":117,"line":8011},[115,21887,1546],{"class":125},[115,21889,21890,21892],{"class":117,"line":8016},[115,21891,5634],{"class":1963},[115,21893,5637],{"class":125},[115,21895,21896],{"class":117,"line":8022},[115,21897,1565],{"class":125},[14,21899,9026],{},[106,21901,21903],{"className":108,"code":21902,"language":110,"meta":22,"style":22},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[112,21904,21905,21910],{"__ignoreMap":22},[115,21906,21907],{"class":117,"line":118},[115,21908,21909],{"class":184},"    \u002F\u002F不需要写这个：\n",[115,21911,21912],{"class":117,"line":37},[115,21913,21914],{"class":184},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21916,21917],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[106,21919,21921],{"className":108,"code":21920,"language":110,"meta":22,"style":22},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[112,21922,21923],{"__ignoreMap":22},[115,21924,21925,21927,21930,21932,21935,21938],{"class":117,"line":118},[115,21926,19047],{"class":1963},[115,21928,21929],{"class":125},"(string name.string pname):",[115,21931,15011],{"class":1963},[115,21933,21934],{"class":125},"(name),",[115,21936,21937],{"class":1963},"m_phone",[115,21939,21940],{"class":125},"(pname) {}\n",[14,21942,21943,21944,171,21947],{},"采用的是隐式转换法，实际为如下：\n",[112,21945,21946],{},"m_phone(pname)",[112,21948,21949],{},"Phone m_phone=pname",[14,21951,21952,21955],{},[275,21953,21954],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21957,21958],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[86,21960,21962],{"id":21961},"_828静态对象","8.2.8静态对象",[14,21964,21965],{},"静态对象在成员对象前static，称为静态对象",[14,21967,21968],{},"静态对象分为两类：",[69,21970,21971],{},[72,21972,21973],{},"静态成员变量",[1132,21975,21976,21979,21982],{},[72,21977,21978],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[72,21980,21981],{},"②在编译阶段分配内存",[72,21983,21984],{},"③类内声明，类外初始化",[69,21986,21987],{"start":37},[72,21988,21989],{},"静态成员函数",[1132,21991,21992,21995],{},[72,21993,21994],{},"①所有对象共享同一个函数",[72,21996,21997],{},"②静态成员函数只能访问静态成员变量",[21999,22000,22002],"h4",{"id":22001},"_8281静态成员变量","8.2.8.1静态成员变量",[106,22004,22006],{"className":108,"code":22005,"language":110,"meta":22,"style":22},"#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",[112,22007,22008,22014,22024,22030,22034,22038,22043,22048,22053,22061,22065,22069,22073,22081,22085,22089,22094,22107,22111,22119,22123,22129],{"__ignoreMap":22},[115,22009,22010,22012],{"class":117,"line":118},[115,22011,1949],{"class":121},[115,22013,1952],{"class":230},[115,22015,22016,22018,22020,22022],{"class":117,"line":37},[115,22017,1957],{"class":121},[115,22019,1960],{"class":121},[115,22021,1964],{"class":1963},[115,22023,1291],{"class":125},[115,22025,22026,22028],{"class":117,"line":1180},[115,22027,14695],{"class":121},[115,22029,15172],{"class":1963},[115,22031,22032],{"class":117,"line":1195},[115,22033,1546],{"class":125},[115,22035,22036],{"class":117,"line":1201},[115,22037,14717],{"class":121},[115,22039,22040],{"class":117,"line":1215},[115,22041,22042],{"class":184},"    \u002F\u002F非静态成员变量\n",[115,22044,22045],{"class":117,"line":1221},[115,22046,22047],{"class":184},"    \u002F\u002F int m_A;\n",[115,22049,22050],{"class":117,"line":1312},[115,22051,22052],{"class":184},"    \u002F\u002F定义静态成员变量\n",[115,22054,22055,22057,22059],{"class":117,"line":1318},[115,22056,11021],{"class":121},[115,22058,2382],{"class":121},[115,22060,21393],{"class":125},[115,22062,22063],{"class":117,"line":1330},[115,22064,2400],{"emptyLinePlaceholder":42},[115,22066,22067],{"class":117,"line":1612},[115,22068,2400],{"emptyLinePlaceholder":42},[115,22070,22071],{"class":117,"line":1617},[115,22072,3995],{"class":125},[115,22074,22075,22077,22079],{"class":117,"line":1623},[115,22076,5365],{"class":121},[115,22078,5589],{"class":1963},[115,22080,1976],{"class":125},[115,22082,22083],{"class":117,"line":1628},[115,22084,1546],{"class":125},[115,22086,22087],{"class":117,"line":1642},[115,22088,15314],{"class":125},[115,22090,22091],{"class":117,"line":1647},[115,22092,22093],{"class":184},"    \u002F\u002F输出类成员变量这块内存\n",[115,22095,22096,22098,22100,22103,22105],{"class":117,"line":1653},[115,22097,1551],{"class":125},[115,22099,1169],{"class":121},[115,22101,22102],{"class":125},"p.m_A",[115,22104,1169],{"class":121},[115,22106,1192],{"class":125},[115,22108,22109],{"class":117,"line":1674},[115,22110,1565],{"class":125},[115,22112,22113,22115,22117],{"class":117,"line":1679},[115,22114,129],{"class":121},[115,22116,1973],{"class":1963},[115,22118,1976],{"class":125},[115,22120,22121],{"class":117,"line":1693},[115,22122,1546],{"class":125},[115,22124,22125,22127],{"class":117,"line":1698},[115,22126,5634],{"class":1963},[115,22128,1976],{"class":125},[115,22130,22131],{"class":117,"line":1727},[115,22132,1565],{"class":125},[14,22134,22135],{},"此时输出是报错的：无法解析外部命令",[14,22137,22138],{},"解决这一问题：必须用到类内声明，类外初始化操作",[106,22140,22142],{"className":108,"code":22141,"language":110,"meta":22,"style":22},"#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",[112,22143,22144,22150,22160,22166,22170,22174,22179,22187,22191,22196,22211,22219,22223,22227,22232,22237,22249,22254,22265,22270,22275,22288,22292,22300,22304,22310],{"__ignoreMap":22},[115,22145,22146,22148],{"class":117,"line":118},[115,22147,1949],{"class":121},[115,22149,1952],{"class":230},[115,22151,22152,22154,22156,22158],{"class":117,"line":37},[115,22153,1957],{"class":121},[115,22155,1960],{"class":121},[115,22157,1964],{"class":1963},[115,22159,1291],{"class":125},[115,22161,22162,22164],{"class":117,"line":1180},[115,22163,14695],{"class":121},[115,22165,15172],{"class":1963},[115,22167,22168],{"class":117,"line":1195},[115,22169,1546],{"class":125},[115,22171,22172],{"class":117,"line":1201},[115,22173,14717],{"class":121},[115,22175,22176],{"class":117,"line":1215},[115,22177,22178],{"class":184},"    \u002F\u002F类内声明\n",[115,22180,22181,22183,22185],{"class":117,"line":1221},[115,22182,11021],{"class":121},[115,22184,2382],{"class":121},[115,22186,21393],{"class":125},[115,22188,22189],{"class":117,"line":1312},[115,22190,3995],{"class":125},[115,22192,22193],{"class":117,"line":1318},[115,22194,22195],{"class":184},"\u002F\u002F类外初始化\n",[115,22197,22198,22200,22202,22205,22207,22209],{"class":117,"line":1330},[115,22199,129],{"class":121},[115,22201,15570],{"class":1963},[115,22203,22204],{"class":125},"::m_A",[115,22206,171],{"class":121},[115,22208,571],{"class":174},[115,22210,1291],{"class":125},[115,22212,22213,22215,22217],{"class":117,"line":1612},[115,22214,5365],{"class":121},[115,22216,5589],{"class":1963},[115,22218,1976],{"class":125},[115,22220,22221],{"class":117,"line":1617},[115,22222,1546],{"class":125},[115,22224,22225],{"class":117,"line":1623},[115,22226,15314],{"class":125},[115,22228,22229],{"class":117,"line":1628},[115,22230,22231],{"class":184},"    \u002F\u002F访问变量的原内存空间\n",[115,22233,22234],{"class":117,"line":1642},[115,22235,22236],{"class":184},"    \u002F\u002F100\n",[115,22238,22239,22241,22243,22245,22247],{"class":117,"line":1647},[115,22240,1551],{"class":125},[115,22242,1169],{"class":121},[115,22244,22102],{"class":125},[115,22246,1169],{"class":121},[115,22248,1192],{"class":125},[115,22250,22251],{"class":117,"line":1653},[115,22252,22253],{"class":125},"    Person p2;\n",[115,22255,22256,22259,22261,22263],{"class":117,"line":1674},[115,22257,22258],{"class":125},"    p2.m_A",[115,22260,171],{"class":121},[115,22262,1722],{"class":174},[115,22264,1291],{"class":125},[115,22266,22267],{"class":117,"line":1679},[115,22268,22269],{"class":184},"    \u002F\u002F继续访问这片空间\n",[115,22271,22272],{"class":117,"line":1693},[115,22273,22274],{"class":184},"    \u002F\u002F200\n",[115,22276,22277,22279,22281,22284,22286],{"class":117,"line":1698},[115,22278,1551],{"class":125},[115,22280,1169],{"class":121},[115,22282,22283],{"class":125},"p2.m_A",[115,22285,1169],{"class":121},[115,22287,1192],{"class":125},[115,22289,22290],{"class":117,"line":1727},[115,22291,1565],{"class":125},[115,22293,22294,22296,22298],{"class":117,"line":1732},[115,22295,129],{"class":121},[115,22297,1973],{"class":1963},[115,22299,1976],{"class":125},[115,22301,22302],{"class":117,"line":1749},[115,22303,1546],{"class":125},[115,22305,22306,22308],{"class":117,"line":1754},[115,22307,5634],{"class":1963},[115,22309,5637],{"class":125},[115,22311,22312],{"class":117,"line":1759},[115,22313,1565],{"class":125},[14,22315,22316],{},[275,22317,22318],{},"静态变量的访问",[106,22320,22322],{"className":108,"code":22321,"language":110,"meta":22,"style":22},"#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",[112,22323,22324,22330,22340,22346,22350,22354,22358,22366,22370,22375,22383,22387,22391,22405,22420,22428,22432,22437,22442,22447,22452,22464,22469,22474,22488,22505,22509,22517,22521,22527],{"__ignoreMap":22},[115,22325,22326,22328],{"class":117,"line":118},[115,22327,1949],{"class":121},[115,22329,1952],{"class":230},[115,22331,22332,22334,22336,22338],{"class":117,"line":37},[115,22333,1957],{"class":121},[115,22335,1960],{"class":121},[115,22337,1964],{"class":1963},[115,22339,1291],{"class":125},[115,22341,22342,22344],{"class":117,"line":1180},[115,22343,14695],{"class":121},[115,22345,15172],{"class":1963},[115,22347,22348],{"class":117,"line":1195},[115,22349,1546],{"class":125},[115,22351,22352],{"class":117,"line":1201},[115,22353,14717],{"class":121},[115,22355,22356],{"class":117,"line":1215},[115,22357,22178],{"class":184},[115,22359,22360,22362,22364],{"class":117,"line":1221},[115,22361,11021],{"class":121},[115,22363,2382],{"class":121},[115,22365,21393],{"class":125},[115,22367,22368],{"class":117,"line":1312},[115,22369,15223],{"class":121},[115,22371,22372],{"class":117,"line":1318},[115,22373,22374],{"class":184},"    \u002F\u002F静态成员变量也是有访问权限的\n",[115,22376,22377,22379,22381],{"class":117,"line":1330},[115,22378,11021],{"class":121},[115,22380,2382],{"class":121},[115,22382,21400],{"class":125},[115,22384,22385],{"class":117,"line":1612},[115,22386,3995],{"class":125},[115,22388,22389],{"class":117,"line":1617},[115,22390,22195],{"class":184},[115,22392,22393,22395,22397,22399,22401,22403],{"class":117,"line":1623},[115,22394,129],{"class":121},[115,22396,15570],{"class":1963},[115,22398,22204],{"class":125},[115,22400,171],{"class":121},[115,22402,571],{"class":174},[115,22404,1291],{"class":125},[115,22406,22407,22409,22411,22414,22416,22418],{"class":117,"line":1628},[115,22408,129],{"class":121},[115,22410,15570],{"class":1963},[115,22412,22413],{"class":125},"::m_B",[115,22415,171],{"class":121},[115,22417,825],{"class":174},[115,22419,1291],{"class":125},[115,22421,22422,22424,22426],{"class":117,"line":1642},[115,22423,5365],{"class":121},[115,22425,5658],{"class":1963},[115,22427,1976],{"class":125},[115,22429,22430],{"class":117,"line":1647},[115,22431,1546],{"class":125},[115,22433,22434],{"class":117,"line":1653},[115,22435,22436],{"class":184},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[115,22438,22439],{"class":117,"line":1674},[115,22440,22441],{"class":184},"    \u002F\u002F静态成员变量有两种访问方式：\n",[115,22443,22444],{"class":117,"line":1679},[115,22445,22446],{"class":184},"    \u002F\u002F1.通过对象进行访问\n",[115,22448,22449],{"class":117,"line":1693},[115,22450,22451],{"class":125},"    Person p;  \n",[115,22453,22454,22456,22458,22460,22462],{"class":117,"line":1698},[115,22455,1551],{"class":125},[115,22457,1169],{"class":121},[115,22459,22102],{"class":125},[115,22461,1169],{"class":121},[115,22463,1192],{"class":125},[115,22465,22466],{"class":117,"line":1727},[115,22467,22468],{"class":184},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[115,22470,22471],{"class":117,"line":1732},[115,22472,22473],{"class":184},"    \u002F\u002F2.通过类名进行访问\n",[115,22475,22476,22478,22480,22482,22484,22486],{"class":117,"line":1749},[115,22477,1551],{"class":125},[115,22479,1169],{"class":121},[115,22481,19047],{"class":1963},[115,22483,22204],{"class":125},[115,22485,1169],{"class":121},[115,22487,1192],{"class":125},[115,22489,22490,22492,22494,22496,22498,22500,22502],{"class":117,"line":1754},[115,22491,1551],{"class":125},[115,22493,1169],{"class":121},[115,22495,19047],{"class":1963},[115,22497,22413],{"class":125},[115,22499,1169],{"class":121},[115,22501,1239],{"class":125},[115,22503,22504],{"class":184}," \u002F\u002F没有访问权限，报错\n",[115,22506,22507],{"class":117,"line":1759},[115,22508,1565],{"class":125},[115,22510,22511,22513,22515],{"class":117,"line":1764},[115,22512,129],{"class":121},[115,22514,1973],{"class":1963},[115,22516,1976],{"class":125},[115,22518,22519],{"class":117,"line":1778},[115,22520,1546],{"class":125},[115,22522,22523,22525],{"class":117,"line":1783},[115,22524,5703],{"class":1963},[115,22526,5637],{"class":125},[115,22528,22529],{"class":117,"line":2577},[115,22530,1565],{"class":125},[21999,22532,22534],{"id":22533},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22536,22537],{},"1.静态成员函数定义与访问",[106,22539,22541],{"className":108,"code":22540,"language":110,"meta":22,"style":22},"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",[112,22542,22543,22549,22553,22557,22562,22573,22577,22591,22595,22599,22607,22611,22616,22621,22625,22633,22638,22648],{"__ignoreMap":22},[115,22544,22545,22547],{"class":117,"line":118},[115,22546,14695],{"class":121},[115,22548,15172],{"class":1963},[115,22550,22551],{"class":117,"line":37},[115,22552,1546],{"class":125},[115,22554,22555],{"class":117,"line":1180},[115,22556,14717],{"class":121},[115,22558,22559],{"class":117,"line":1195},[115,22560,22561],{"class":184},"    \u002F\u002F在公共权限下定义静态成员函数\n",[115,22563,22564,22566,22569,22571],{"class":117,"line":1201},[115,22565,11021],{"class":121},[115,22567,22568],{"class":121}," void",[115,22570,11386],{"class":1963},[115,22572,1976],{"class":125},[115,22574,22575],{"class":117,"line":1215},[115,22576,2030],{"class":125},[115,22578,22579,22582,22584,22587,22589],{"class":117,"line":1221},[115,22580,22581],{"class":125},"        coout",[115,22583,1169],{"class":121},[115,22585,22586],{"class":230},"\"静态成员函数的调用\"",[115,22588,1169],{"class":121},[115,22590,1192],{"class":125},[115,22592,22593],{"class":117,"line":1312},[115,22594,2187],{"class":125},[115,22596,22597],{"class":117,"line":1318},[115,22598,3995],{"class":125},[115,22600,22601,22603,22605],{"class":117,"line":1330},[115,22602,5365],{"class":121},[115,22604,5589],{"class":1963},[115,22606,1976],{"class":125},[115,22608,22609],{"class":117,"line":1612},[115,22610,1546],{"class":125},[115,22612,22613],{"class":117,"line":1617},[115,22614,22615],{"class":184},"    \u002F\u002F静态成员函数的调用方式:\n",[115,22617,22618],{"class":117,"line":1623},[115,22619,22620],{"class":184},"    \u002F\u002F1.通过对象访问\n",[115,22622,22623],{"class":117,"line":1628},[115,22624,15314],{"class":125},[115,22626,22627,22629,22631],{"class":117,"line":1642},[115,22628,15867],{"class":125},[115,22630,11552],{"class":1963},[115,22632,5637],{"class":125},[115,22634,22635],{"class":117,"line":1647},[115,22636,22637],{"class":184},"    \u002F\u002F2.通过类名访问\n",[115,22639,22640,22642,22644,22646],{"class":117,"line":1653},[115,22641,18520],{"class":1963},[115,22643,17733],{"class":125},[115,22645,11552],{"class":1963},[115,22647,5637],{"class":125},[115,22649,22650],{"class":117,"line":1674},[115,22651,1565],{"class":125},[69,22653,22654],{"start":37},[72,22655,22656],{},"静态成员函数只能访问静态成员变量",[106,22658,22660],{"className":108,"code":22659,"language":110,"meta":22,"style":22},"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",[112,22661,22662,22668,22672,22676,22680,22690,22694,22708,22713,22725,22729,22740,22750,22754,22758,22762,22772,22776,22789,22793,22797,22801,22805,22819,22827,22831,22835,22839,22843,22851,22855,22865,22870,22874,22882,22886,22892],{"__ignoreMap":22},[115,22663,22664,22666],{"class":117,"line":118},[115,22665,14695],{"class":121},[115,22667,15172],{"class":1963},[115,22669,22670],{"class":117,"line":37},[115,22671,1546],{"class":125},[115,22673,22674],{"class":117,"line":1180},[115,22675,14717],{"class":121},[115,22677,22678],{"class":117,"line":1195},[115,22679,22561],{"class":184},[115,22681,22682,22684,22686,22688],{"class":117,"line":1201},[115,22683,11021],{"class":121},[115,22685,22568],{"class":121},[115,22687,11386],{"class":1963},[115,22689,1976],{"class":125},[115,22691,22692],{"class":117,"line":1215},[115,22693,2030],{"class":125},[115,22695,22696,22699,22701,22703,22705],{"class":117,"line":1221},[115,22697,22698],{"class":125},"        m_A",[115,22700,171],{"class":121},[115,22702,436],{"class":174},[115,22704,181],{"class":125},[115,22706,22707],{"class":184}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[115,22709,22710],{"class":117,"line":1312},[115,22711,22712],{"class":184},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[115,22714,22715,22717,22719,22721,22723],{"class":117,"line":1318},[115,22716,22581],{"class":125},[115,22718,1169],{"class":121},[115,22720,22586],{"class":230},[115,22722,1169],{"class":121},[115,22724,1192],{"class":125},[115,22726,22727],{"class":117,"line":1330},[115,22728,2187],{"class":125},[115,22730,22731,22733,22735,22737],{"class":117,"line":1612},[115,22732,11021],{"class":121},[115,22734,2382],{"class":121},[115,22736,15449],{"class":125},[115,22738,22739],{"class":184}," \u002F\u002F静态成员变量\n",[115,22741,22742,22744,22747],{"class":117,"line":1617},[115,22743,1985],{"class":121},[115,22745,22746],{"class":125}," m_B;",[115,22748,22749],{"class":184}," \u002F\u002F非静态成员变量\n",[115,22751,22752],{"class":117,"line":1623},[115,22753,2400],{"emptyLinePlaceholder":42},[115,22755,22756],{"class":117,"line":1628},[115,22757,15223],{"class":121},[115,22759,22760],{"class":117,"line":1642},[115,22761,22374],{"class":184},[115,22763,22764,22766,22768,22770],{"class":117,"line":1647},[115,22765,11021],{"class":121},[115,22767,22568],{"class":121},[115,22769,13619],{"class":1963},[115,22771,1976],{"class":125},[115,22773,22774],{"class":117,"line":1653},[115,22775,2030],{"class":125},[115,22777,22778,22780,22782,22785,22787],{"class":117,"line":1674},[115,22779,3451],{"class":125},[115,22781,1169],{"class":121},[115,22783,22784],{"class":230},"\"这是私有权限下的静态函数调用\"",[115,22786,1169],{"class":121},[115,22788,1192],{"class":125},[115,22790,22791],{"class":117,"line":1679},[115,22792,2187],{"class":125},[115,22794,22795],{"class":117,"line":1693},[115,22796,2400],{"emptyLinePlaceholder":42},[115,22798,22799],{"class":117,"line":1698},[115,22800,2400],{"emptyLinePlaceholder":42},[115,22802,22803],{"class":117,"line":1727},[115,22804,3995],{"class":125},[115,22806,22807,22809,22811,22813,22815,22817],{"class":117,"line":1732},[115,22808,129],{"class":121},[115,22810,15570],{"class":1963},[115,22812,22204],{"class":125},[115,22814,171],{"class":121},[115,22816,317],{"class":174},[115,22818,1291],{"class":125},[115,22820,22821,22823,22825],{"class":117,"line":1749},[115,22822,5365],{"class":121},[115,22824,5589],{"class":1963},[115,22826,1976],{"class":125},[115,22828,22829],{"class":117,"line":1754},[115,22830,1546],{"class":125},[115,22832,22833],{"class":117,"line":1759},[115,22834,22615],{"class":184},[115,22836,22837],{"class":117,"line":1764},[115,22838,22620],{"class":184},[115,22840,22841],{"class":117,"line":1778},[115,22842,15314],{"class":125},[115,22844,22845,22847,22849],{"class":117,"line":1783},[115,22846,15867],{"class":125},[115,22848,11552],{"class":1963},[115,22850,5637],{"class":125},[115,22852,22853],{"class":117,"line":2577},[115,22854,22637],{"class":184},[115,22856,22857,22859,22861,22863],{"class":117,"line":2591},[115,22858,18520],{"class":1963},[115,22860,17733],{"class":125},[115,22862,11552],{"class":1963},[115,22864,5637],{"class":125},[115,22866,22867],{"class":117,"line":2599},[115,22868,22869],{"class":184},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[115,22871,22872],{"class":117,"line":2604},[115,22873,1565],{"class":125},[115,22875,22876,22878,22880],{"class":117,"line":2610},[115,22877,129],{"class":121},[115,22879,1973],{"class":1963},[115,22881,1976],{"class":125},[115,22883,22884],{"class":117,"line":2616},[115,22885,1546],{"class":125},[115,22887,22888,22890],{"class":117,"line":2621},[115,22889,5634],{"class":1963},[115,22891,5637],{"class":125},[115,22893,22894],{"class":117,"line":7949},[115,22895,1565],{"class":125},[86,22897,22899],{"id":22898},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21999,22901,22903],{"id":22902},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22905,22906],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22908,22909],{},"只有非静态成员变量才属于类的对象上",[22911,22912,22914],"h5",{"id":22913},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[106,22916,22918],{"className":108,"code":22917,"language":110,"meta":22,"style":22},"#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",[112,22919,22920,22927,22937,22943,22947,22951,22955,22963,22967,22971,22994,22998,23006,23010,23016],{"__ignoreMap":22},[115,22921,22922,22924],{"class":117,"line":118},[115,22923,1949],{"class":121},[115,22925,22926],{"class":230},"\u003Ciostraem>\n",[115,22928,22929,22931,22933,22935],{"class":117,"line":37},[115,22930,1957],{"class":121},[115,22932,1960],{"class":121},[115,22934,1964],{"class":1963},[115,22936,1291],{"class":125},[115,22938,22939,22941],{"class":117,"line":1180},[115,22940,14695],{"class":121},[115,22942,15172],{"class":1963},[115,22944,22945],{"class":117,"line":1195},[115,22946,1546],{"class":125},[115,22948,22949],{"class":117,"line":1201},[115,22950,2400],{"emptyLinePlaceholder":42},[115,22952,22953],{"class":117,"line":1215},[115,22954,3995],{"class":125},[115,22956,22957,22959,22961],{"class":117,"line":1221},[115,22958,5365],{"class":121},[115,22960,5589],{"class":1963},[115,22962,1976],{"class":125},[115,22964,22965],{"class":117,"line":1312},[115,22966,1546],{"class":125},[115,22968,22969],{"class":117,"line":1318},[115,22970,15314],{"class":125},[115,22972,22973,22975,22977,22980,22982,22985,22987,22989,22991],{"class":117,"line":1330},[115,22974,1551],{"class":125},[115,22976,1169],{"class":121},[115,22978,22979],{"class":230},"\"size of p=\"",[115,22981,1169],{"class":121},[115,22983,22984],{"class":1963},"sizeoif",[115,22986,6540],{"class":125},[115,22988,1169],{"class":121},[115,22990,1239],{"class":125},[115,22992,22993],{"class":184}," \u002F\u002F查看这个空类的占用的内存空间\n",[115,22995,22996],{"class":117,"line":1612},[115,22997,1565],{"class":125},[115,22999,23000,23002,23004],{"class":117,"line":1617},[115,23001,129],{"class":121},[115,23003,1973],{"class":1963},[115,23005,1976],{"class":125},[115,23007,23008],{"class":117,"line":1623},[115,23009,1546],{"class":125},[115,23011,23012,23014],{"class":117,"line":1628},[115,23013,5634],{"class":1963},[115,23015,5637],{"class":125},[115,23017,23018],{"class":117,"line":1642},[115,23019,1565],{"class":125},[14,23021,23022],{},"输出结果为：size of p=1",[14,23024,23025],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23027,23028],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22911,23030,23032],{"id":23031},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[106,23034,23036],{"className":108,"code":23035,"language":110,"meta":22,"style":22},"#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",[112,23037,23038,23044,23054,23062,23066,23075,23079,23087,23091,23095,23114,23118,23122,23130,23134,23140],{"__ignoreMap":22},[115,23039,23040,23042],{"class":117,"line":118},[115,23041,1949],{"class":121},[115,23043,1952],{"class":230},[115,23045,23046,23048,23050,23052],{"class":117,"line":37},[115,23047,1957],{"class":121},[115,23049,1960],{"class":121},[115,23051,1964],{"class":1963},[115,23053,1291],{"class":125},[115,23055,23056,23058,23060],{"class":117,"line":1180},[115,23057,14695],{"class":121},[115,23059,15570],{"class":1963},[115,23061,2674],{"class":125},[115,23063,23064],{"class":117,"line":1195},[115,23065,1546],{"class":125},[115,23067,23068,23070,23072],{"class":117,"line":1201},[115,23069,1985],{"class":121},[115,23071,15449],{"class":125},[115,23073,23074],{"class":184},"\u002F\u002F非静态成员变量\n",[115,23076,23077],{"class":117,"line":1215},[115,23078,3995],{"class":125},[115,23080,23081,23083,23085],{"class":117,"line":1221},[115,23082,5365],{"class":121},[115,23084,5589],{"class":1963},[115,23086,1976],{"class":125},[115,23088,23089],{"class":117,"line":1312},[115,23090,1546],{"class":125},[115,23092,23093],{"class":117,"line":1318},[115,23094,15314],{"class":125},[115,23096,23097,23099,23101,23103,23105,23107,23109,23111],{"class":117,"line":1330},[115,23098,1551],{"class":125},[115,23100,1169],{"class":121},[115,23102,22979],{"class":230},[115,23104,1373],{"class":121},[115,23106,6540],{"class":125},[115,23108,1169],{"class":121},[115,23110,1239],{"class":125},[115,23112,23113],{"class":184}," \u002F\u002F查看不是空对象时占用多少内存\n",[115,23115,23116],{"class":117,"line":1612},[115,23117,2400],{"emptyLinePlaceholder":42},[115,23119,23120],{"class":117,"line":1617},[115,23121,1565],{"class":125},[115,23123,23124,23126,23128],{"class":117,"line":1623},[115,23125,129],{"class":121},[115,23127,1973],{"class":1963},[115,23129,1976],{"class":125},[115,23131,23132],{"class":117,"line":1628},[115,23133,1546],{"class":125},[115,23135,23136,23138],{"class":117,"line":1642},[115,23137,5634],{"class":1963},[115,23139,5637],{"class":125},[115,23141,23142],{"class":117,"line":1647},[115,23143,1565],{"class":125},[14,23145,23146],{},"输出结果：size of p=4",[14,23148,23149],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[69,23151,23152],{},[72,23153,23154],{},"如果加上非静态成员变量，Person类修改如下",[106,23156,23158],{"className":108,"code":23157,"language":110,"meta":22,"style":22},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[112,23159,23160,23166,23170,23176,23184,23188,23193],{"__ignoreMap":22},[115,23161,23162,23164],{"class":117,"line":118},[115,23163,14695],{"class":121},[115,23165,15172],{"class":1963},[115,23167,23168],{"class":117,"line":37},[115,23169,1546],{"class":125},[115,23171,23172,23174],{"class":117,"line":1180},[115,23173,1985],{"class":121},[115,23175,21393],{"class":125},[115,23177,23178,23180,23182],{"class":117,"line":1195},[115,23179,11021],{"class":121},[115,23181,2382],{"class":121},[115,23183,21400],{"class":125},[115,23185,23186],{"class":117,"line":1201},[115,23187,3995],{"class":125},[115,23189,23190],{"class":117,"line":1215},[115,23191,23192],{"class":184},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[115,23194,23195,23197,23199,23201,23203,23205],{"class":117,"line":1221},[115,23196,129],{"class":121},[115,23198,15570],{"class":1963},[115,23200,22413],{"class":125},[115,23202,171],{"class":121},[115,23204,317],{"class":174},[115,23206,1291],{"class":125},[14,23208,23209],{},"输出结果：4",[14,23211,23212],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[69,23214,23215],{"start":37},[72,23216,23217],{},"加上非静态成员函数",[106,23219,23221],{"className":108,"code":23220,"language":110,"meta":22,"style":22},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[112,23222,23223,23230,23234,23240,23248,23252,23256,23260],{"__ignoreMap":22},[115,23224,23225,23227],{"class":117,"line":118},[115,23226,14695],{"class":121},[115,23228,23229],{"class":1963},"  Person\n",[115,23231,23232],{"class":117,"line":37},[115,23233,1546],{"class":125},[115,23235,23236,23238],{"class":117,"line":1180},[115,23237,1985],{"class":121},[115,23239,21393],{"class":125},[115,23241,23242,23244,23246],{"class":117,"line":1195},[115,23243,14910],{"class":121},[115,23245,11386],{"class":1963},[115,23247,1976],{"class":125},[115,23249,23250],{"class":117,"line":1201},[115,23251,2030],{"class":125},[115,23253,23254],{"class":117,"line":1215},[115,23255,2400],{"emptyLinePlaceholder":42},[115,23257,23258],{"class":117,"line":1221},[115,23259,2187],{"class":125},[115,23261,23262],{"class":117,"line":1312},[115,23263,3995],{"class":125},[14,23265,23266],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[69,23268,23269],{"start":1180},[72,23270,23271],{},"加上静态成员函数",[106,23273,23275],{"className":108,"code":23274,"language":110,"meta":22,"style":22},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[112,23276,23277,23283,23287,23293,23301,23305,23309,23313,23324,23328,23332,23336],{"__ignoreMap":22},[115,23278,23279,23281],{"class":117,"line":118},[115,23280,14695],{"class":121},[115,23282,23229],{"class":1963},[115,23284,23285],{"class":117,"line":37},[115,23286,1546],{"class":125},[115,23288,23289,23291],{"class":117,"line":1180},[115,23290,1985],{"class":121},[115,23292,21393],{"class":125},[115,23294,23295,23297,23299],{"class":117,"line":1195},[115,23296,14910],{"class":121},[115,23298,11386],{"class":1963},[115,23300,1976],{"class":125},[115,23302,23303],{"class":117,"line":1201},[115,23304,2030],{"class":125},[115,23306,23307],{"class":117,"line":1215},[115,23308,2400],{"emptyLinePlaceholder":42},[115,23310,23311],{"class":117,"line":1221},[115,23312,2187],{"class":125},[115,23314,23315,23317,23319,23322],{"class":117,"line":1312},[115,23316,11021],{"class":121},[115,23318,22568],{"class":121},[115,23320,23321],{"class":1963}," func1",[115,23323,1976],{"class":125},[115,23325,23326],{"class":117,"line":1318},[115,23327,2030],{"class":125},[115,23329,23330],{"class":117,"line":1330},[115,23331,2400],{"emptyLinePlaceholder":42},[115,23333,23334],{"class":117,"line":1612},[115,23335,2187],{"class":125},[115,23337,23338],{"class":117,"line":1617},[115,23339,3995],{"class":125},[14,23341,23209],{},[14,23343,23344],{},"解释：静态成员函数也不属于类上",[5127,23346,7675],{},{"title":22,"searchDepth":37,"depth":37,"links":23348},[23349,23355],{"id":14646,"depth":37,"text":14647,"children":23350},[23351,23352,23353,23354],{"id":14650,"depth":1180,"text":14651},{"id":15375,"depth":1180,"text":15376},{"id":15547,"depth":1180,"text":15548},{"id":16006,"depth":1180,"text":16007},{"id":18378,"depth":37,"text":18379,"children":23356},[23357,23358,23359,23360,23361,23362,23363,23364,23365],{"id":18390,"depth":1180,"text":18391},{"id":18683,"depth":1180,"text":18684},{"id":19174,"depth":1180,"text":19175},{"id":20271,"depth":1180,"text":20272},{"id":20694,"depth":1180,"text":20695},{"id":21173,"depth":1180,"text":21174},{"id":21548,"depth":1180,"text":21549},{"id":21961,"depth":1180,"text":21962},{"id":22898,"depth":1180,"text":22899},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14611,"description":23366},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23373,"title":110,"body":23374,"description":39,"extension":40,"meta":23378,"navigation":42,"path":23380,"seo":23381,"stem":23382,"__hash__":23383},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23375,"toc":23376},[],{"title":22,"searchDepth":37,"depth":37,"links":23377},[],{"category":23379},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":110,"description":39},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23385,"title":23386,"body":23387,"description":22,"extension":40,"meta":23977,"navigation":42,"path":23978,"seo":23979,"stem":23980,"__hash__":23981},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23388,"toc":23959},[23389,23392,23396,23399,23402,23405,23423,23428,23431,23434,23437,23440,23445,23448,23453,23456,23459,23463,23466,23469,23475,23478,23496,23500,23504,23507,23512,23515,23519,23522,23535,23538,23542,23545,23548,23551,23576,23579,23588,23599,23614,23646,23650,23657,23665,23669,23672,23675,23680,23684,23687,23690,23695,23698,23702,23705,23708,23713,23716,23720,23725,23729,23796,23800,23803,23806,23809,23812,23815,23821,23842,23845,23859,23867,23871,23874,23877,23882,23885,23890,23895,23898,23901,23906,23911,23914,23919,23924,23927,23932,23937,23940,23943,23948,23951,23956],[10,23390,23386],{"id":23391},"_1强化学习基本认识",[57,23393,23395],{"id":23394},"_11什么是强化学习","1.1.什么是强化学习",[14,23397,23398],{},"强化学习有两部分组成：智能体和环境；",[14,23400,23401],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23403,23404],{},"强化学习与监督学习的区别:",[69,23406,23407,23410,23413,23416],{},[72,23408,23409],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[72,23411,23412],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[72,23414,23415],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[72,23417,23418,23419,23422],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[275,23420,23421],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23424,23425],{},[20,23426],{"alt":22,"src":23427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23429,23430],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23432,23433],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23435,23436],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23438,23439],{},"获取奖励",[14,23441,23442],{},[20,23443],{"alt":22,"src":23444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23446,23447],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23449,23450],{},[20,23451],{"alt":22,"src":23452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23454,23455],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23457,23458],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[57,23460,23462],{"id":23461},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23464,23465],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23467,23468],{},"具身智能中的应用",[14,23470,23471,23474],{},[275,23472,23473],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23476,23477],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23479,23480,23481,23484,23485,23488,23489,23492,23493],{},"机器人是",[275,23482,23483],{},"躯体","，深度学习是",[275,23486,23487],{},"神经元****网络","，VLA是",[275,23490,23491],{},"通用的行为逻辑","，而强化学习是",[275,23494,23495],{},"教练",[57,23497,23499],{"id":23498},"_13序列决策","1.3.序列决策",[86,23501,23503],{"id":23502},"_131智能体与环境","1.3.1.智能体与环境",[14,23505,23506],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23508,23509],{},[20,23510],{"alt":22,"src":23511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23513,23514],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[86,23516,23518],{"id":23517},"_132奖励","1.3.2.奖励",[14,23520,23521],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23523,23524,23525,23534],{},"取某个策略的表现如何。强化学习的目的就是",[275,23526,23527,23528,23533],{},"最大化",[275,23529,23530],{},[275,23531,23532],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23536,23537],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[86,23539,23541],{"id":23540},"_133序列决策","1.3.3.序列决策",[14,23543,23544],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23546,23547],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23549,23550],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23552,23553,23557,23558,23560,23561,23563,23564,23566,23567,13796,23570,13796,23573],{},[23554,23555,23556],"em",{},"Ht"," = ",[23554,23559,721],{},"1*, a",[23554,23562,343],{},", r",[23554,23565,343],{},", . . . ,* ",[23554,23568,23569],{},"ot",[23554,23571,23572],{},", at ,",[23554,23574,23575],{},"rt",[14,23577,23578],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23580,23581,23557,23584,1658,23586,554],{},[23554,23582,23583],{},"st",[23554,23585,178],{},[23554,23587,23556],{},[14,23589,23590,23591,23594,23595,23598],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[275,23592,23593],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[275,23596,23597],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23600,23601,23602,23605,23606,23609,23610,23613],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[275,23603,23604],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[275,23607,23608],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23554,23611,23612],{},"S, A, T, R, Ω, O, γ",")。",[14,23615,23616,23617,23619,23620,23622,23623,126,23625,23628,23629,23631,23632,126,23635,23638,23639,23641,23642,23645],{},"其中 ",[23554,23618,814],{}," 表示状态空间，为隐变量，",[23554,23621,358],{}," 为动作空间，",[23554,23624,839],{},[23554,23626,23627],{},"s ′ |s, a",") 为状态转移概率，",[23554,23630,789],{}," 为奖励函数，",[23554,23633,23634],{},"Ω",[23554,23636,23637],{},"o|s, a",") 为观测概率，",[23554,23640,715],{}," 为观测空间，",[23554,23643,23644],{},"γ"," 为折扣因子。",[57,23647,23649],{"id":23648},"_14动作空间","1.4.动作空间",[14,23651,23652,23653,23656],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[275,23654,23655],{},"动作空间"," ，动作空间分为:",[69,23658,23659,23662],{},[72,23660,23661],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[72,23663,23664],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[57,23666,23668],{"id":23667},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23670,23671],{},"由策略、价值函数、模型三部分组成",[14,23673,23674],{},"这三者组成马尔可夫决策过程",[14,23676,23677],{},[20,23678],{"alt":22,"src":23679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[86,23681,23683],{"id":23682},"_151策略","1.5.1.策略",[14,23685,23686],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23688,23689],{},"策略可分为两种：",[14,23691,23692],{},[20,23693],{"alt":22,"src":23694},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23696,23697],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[86,23699,23701],{"id":23700},"_152价值函数","1.5.2.价值函数",[14,23703,23704],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23706,23707],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23709,23710],{},[20,23711],{"alt":22,"src":23712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23714,23715],{},"进入某个状态采取的最优动作可以通过Q函数得到",[86,23717,23719],{"id":23718},"_153模型","1.5.3.模型",[14,23721,23722],{},[20,23723],{"alt":22,"src":23724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[57,23726,23728],{"id":23727},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[263,23730,23731,23742],{},[266,23732,23733],{},[269,23734,23735,23739],{},[272,23736,23738],{"align":23737},"left","类型",[272,23740,23741],{"align":23737},"特点",[310,23743,23744,23754,23764,23774,23786],{},[269,23745,23746,23751],{},[315,23747,23748],{"align":23737},[275,23749,23750],{},"基于价值的智能体",[315,23752,23753],{"align":23737},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[269,23755,23756,23761],{},[315,23757,23758],{"align":23737},[275,23759,23760],{},"基于策略的智能体",[315,23762,23763],{"align":23737},"直接学习策略，没有学习价值函数",[269,23765,23766,23771],{},[315,23767,23768],{"align":23737},[275,23769,23770],{},"演员-评论员智能体",[315,23772,23773],{"align":23737},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[269,23775,23776,23781],{},[315,23777,23778],{"align":23737},[275,23779,23780],{},"有模型强化学习智能体",[315,23782,23783],{"align":23737},[20,23784],{"alt":22,"src":23785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[269,23787,23788,23793],{},[315,23789,23790],{"align":23737},[275,23791,23792],{},"免模型强化学习智能体",[315,23794,23795],{"align":23737},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[57,23797,23799],{"id":23798},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23801,23802],{},"学习和规划是序列决策的两个基本问题",[14,23804,23805],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23807,23808],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23810,23811],{},"强化学习用到的库：Gym",[14,23813,23814],{},"Gym可以检验强化学习算法的优劣",[14,23816,23817,23820],{},[275,23818,23819],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[106,23822,23826],{"className":23823,"code":23824,"language":23825,"meta":22,"style":22},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[112,23827,23828],{"__ignoreMap":22},[115,23829,23830,23833,23836,23839],{"class":117,"line":118},[115,23831,23832],{"class":1963},"pip",[115,23834,23835],{"class":230}," install",[115,23837,23838],{"class":230}," gym==",[115,23840,23841],{"class":174},"0.25.2\n",[14,23843,23844],{},"显示图形界面需要",[106,23846,23848],{"className":23823,"code":23847,"language":23825,"meta":22,"style":22},"pip install pygame\n",[112,23849,23850],{"__ignoreMap":22},[115,23851,23852,23854,23856],{"class":117,"line":118},[115,23853,23832],{"class":1963},[115,23855,23835],{"class":230},[115,23857,23858],{"class":230}," pygame\n",[14,23860,23861,23862],{},"有关Gym库的相关文档介绍：",[27,23863,23866],{"href":23864,"rel":23865},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[31],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[57,23868,23870],{"id":23869},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23872,23873],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23875,23876],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23878,23879],{},[20,23880],{"alt":22,"src":23881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23883,23884],{},"折扣率需要自己来设定",[14,23886,23887],{},[20,23888],{"alt":22,"src":23889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[69,23891,23892],{},[72,23893,23894],{},"状态转移函数：",[14,23896,23897],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23899,23900],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23902,23903],{},[20,23904],{"alt":22,"src":23905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[69,23907,23908],{"start":37},[72,23909,23910],{},"动作价值函数：",[14,23912,23913],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23915,23916],{},[20,23917],{"alt":22,"src":23918},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[69,23920,23921],{"start":1180},[72,23922,23923],{},"最优动作价值函数：",[14,23925,23926],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,23928,23929],{},[20,23930],{"alt":22,"src":23931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[69,23933,23934],{"start":1195},[72,23935,23936],{},"状态价值函数:",[14,23938,23939],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23941,23942],{},"它衡量的是“一个具体动作”的长期价值",[14,23944,23945],{},[20,23946],{"alt":22,"src":23947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23949,23950],{},"几个价值函数之间的比较：",[14,23952,23953],{},[20,23954],{"alt":22,"src":23955},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5127,23957,23958],{},"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":22,"searchDepth":37,"depth":37,"links":23960},[23961,23962,23963,23968,23969,23974,23975,23976],{"id":23394,"depth":37,"text":23395},{"id":23461,"depth":37,"text":23462},{"id":23498,"depth":37,"text":23499,"children":23964},[23965,23966,23967],{"id":23502,"depth":1180,"text":23503},{"id":23517,"depth":1180,"text":23518},{"id":23540,"depth":1180,"text":23541},{"id":23648,"depth":37,"text":23649},{"id":23667,"depth":37,"text":23668,"children":23970},[23971,23972,23973],{"id":23682,"depth":1180,"text":23683},{"id":23700,"depth":1180,"text":23701},{"id":23718,"depth":1180,"text":23719},{"id":23727,"depth":37,"text":23728},{"id":23798,"depth":37,"text":23799},{"id":23869,"depth":37,"text":23870},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23386,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23983,"title":23984,"body":23985,"description":23992,"extension":40,"meta":24003,"navigation":42,"path":24004,"seo":24005,"stem":24006,"__hash__":24007},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23986,"toc":24001},[23987,23990,23993,23998],[10,23988,23984],{"id":23989},"_2马尔可夫决策过程",[14,23991,23992],{},"这是强化学习的基本框架",[14,23994,23995],{},[20,23996],{"alt":22,"src":23997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,23999,24000],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":22,"searchDepth":37,"depth":37,"links":24002},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23984,"description":23992},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24009,"title":24010,"body":24011,"description":22,"extension":40,"meta":24127,"navigation":42,"path":24128,"seo":24129,"stem":24130,"__hash__":24131},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24012,"toc":24122},[24013,24016,24020,24023,24028,24033,24036,24041,24044,24049,24052,24056,24061,24064,24069,24074,24079,24082,24086,24091,24094,24099,24104,24109,24114,24117],[10,24014,24010],{"id":24015},"_3动作价值函数",[57,24017,24019],{"id":24018},"_31dqn","3.1.DQN",[14,24021,24022],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24024,24025],{},[20,24026],{"alt":22,"src":24027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24029,24030],{},[20,24031],{"alt":22,"src":24032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24034,24035],{},"DQN算法的描述：",[14,24037,24038],{},[20,24039],{"alt":22,"src":24040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24042,24043],{},"这里的Dense指的是全连接层",[14,24045,24046],{},[20,24047],{"alt":22,"src":24048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24050,24051],{},"当前观测的状态为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算法",[57,24053,24055],{"id":24054},"_32dqn的举例","3.2.DQN的举例",[14,24057,24058],{},[20,24059],{"alt":22,"src":24060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24062,24063],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24065,24066],{},[20,24067],{"alt":22,"src":24068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24070,24071],{},[20,24072],{"alt":22,"src":24073},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24075,24076],{},[20,24077],{"alt":22,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24080,24081],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[57,24083,24085],{"id":24084},"_33td算法","3.3.TD算法",[14,24087,24088],{},[20,24089],{"alt":22,"src":24090},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24092,24093],{},"强化学习TD算法公式的粗略解释：",[14,24095,24096],{},[20,24097],{"alt":22,"src":24098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24100,24101],{},[20,24102],{"alt":22,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24105,24106],{},[20,24107],{"alt":22,"src":24108},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24110,24111],{},[20,24112],{"alt":22,"src":24113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24115,24116],{},"TD算法总结：",[14,24118,24119],{},[20,24120],{"alt":22,"src":24121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":22,"searchDepth":37,"depth":37,"links":24123},[24124,24125,24126],{"id":24018,"depth":37,"text":24019},{"id":24054,"depth":37,"text":24055},{"id":24084,"depth":37,"text":24085},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24010,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24133,"title":24134,"body":24135,"description":22,"extension":40,"meta":24368,"navigation":42,"path":24369,"seo":24370,"stem":24371,"__hash__":24372},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24136,"toc":24364},[24137,24140,24144,24147,24150,24155,24160,24163,24168,24173,24176,24181,24184,24189,24192,24197,24200,24205,24208,24213,24218,24221,24226,24229,24232,24237,24240,24245,24250,24254,24257,24260,24265,24270,24273,24278,24283,24286,24291,24294,24297,24302,24305,24310,24313,24318,24323,24326,24331,24336,24339,24344,24347,24352,24355],[10,24138,24134],{"id":24139},"_4策略学习",[57,24141,24143],{"id":24142},"_41概念描述","4.1.概念描述",[14,24145,24146],{},"用神经网络（策略网络）近似策略函数",[14,24148,24149],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24151,24152],{},[20,24153],{"alt":22,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24156,24157],{},[20,24158],{"alt":22,"src":24159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24161,24162],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24164,24165],{},[20,24166],{"alt":22,"src":24167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24169,24170],{},[20,24171],{"alt":22,"src":24172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24174,24175],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24177,24178],{},[20,24179],{"alt":22,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24182,24183],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24185,24186],{},[20,24187],{"alt":22,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24190,24191],{},"改进theta要用到策略梯度算法",[14,24193,24194],{},[20,24195],{"alt":22,"src":24196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24198,24199],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24201,24202],{},[20,24203],{"alt":22,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24206,24207],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24209,24210],{},[20,24211],{"alt":22,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24214,24215],{},[20,24216],{"alt":22,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24219,24220],{},"梯度公式总结：",[14,24222,24223],{},[20,24224],{"alt":22,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24227,24228],{},"两个公式的分别应用场景：",[14,24230,24231],{},"对于离散的动作：",[14,24233,24234],{},[20,24235],{"alt":22,"src":24236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24238,24239],{},"对于连续的动作：",[14,24241,24242],{},[20,24243],{"alt":22,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24246,24247],{},[20,24248],{"alt":22,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[57,24251,24253],{"id":24252},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24255,24256],{},"使用蒙特卡洛来近似计算策略梯度",[14,24258,24259],{},"蒙特卡洛法的解释如下：",[14,24261,24262],{},[20,24263],{"alt":22,"src":24264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24266,24267],{},[20,24268],{"alt":22,"src":24269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24271,24272],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[69,24274,24275],{},[72,24276,24277],{},"方法一：reinforce算法",[14,24279,24280],{},[20,24281],{"alt":22,"src":24282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24284,24285],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[69,24287,24288],{"start":37},[72,24289,24290],{},"方法二：actor-critic算法",[14,24292,24293],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24295,24296],{},"两个网络的构建：",[14,24298,24299],{},[20,24300],{"alt":22,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24303,24304],{},"actor网路：",[14,24306,24307],{},[20,24308],{"alt":22,"src":24309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24311,24312],{},"critic网络",[14,24314,24315],{},[20,24316],{"alt":22,"src":24317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[69,24319,24320],{"start":1180},[72,24321,24322],{},"网络的训练",[14,24324,24325],{},"网络描述",[14,24327,24328],{},[20,24329],{"alt":22,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24332,24333],{},[20,24334],{"alt":22,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24337,24338],{},"TD算法更新梯度：",[14,24340,24341],{},[20,24342],{"alt":22,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24345,24346],{},"策略网络更新梯度：",[14,24348,24349],{},[20,24350],{"alt":22,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24353,24354],{},"训练整个流程的具体描述：",[14,24356,24357,24360,24361],{},[20,24358],{"alt":22,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[20,24362],{"alt":22,"src":24363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":22,"searchDepth":37,"depth":37,"links":24365},[24366,24367],{"id":24142,"depth":37,"text":24143},{"id":24252,"depth":37,"text":24253},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24134,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24374,"title":24375,"body":24376,"description":24383,"extension":40,"meta":24433,"navigation":42,"path":24434,"seo":24435,"stem":24436,"__hash__":24437},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24377,"toc":24429},[24378,24381,24384,24388,24391,24396,24400,24403,24408,24411,24416,24421,24424],[10,24379,24375],{"id":24380},"_5alphago算法",[14,24382,24383],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[57,24385,24387],{"id":24386},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24389,24390],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24392,24393],{},[20,24394],{"alt":22,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[57,24397,24399],{"id":24398},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24401,24402],{},"采用强化学习的方式训练策略网络",[14,24404,24405],{},[20,24406],{"alt":22,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24409,24410],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24412,24413],{},[20,24414],{"alt":22,"src":24415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24417,24418],{},[20,24419],{"alt":22,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24422,24423],{},"强化学习训练策略网络的总结：",[14,24425,24426],{},[20,24427],{"alt":22,"src":24428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":22,"searchDepth":37,"depth":37,"links":24430},[24431,24432],{"id":24386,"depth":37,"text":24387},{"id":24398,"depth":37,"text":24399},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24375,"description":24383},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24439,"title":24440,"body":24441,"description":24448,"extension":40,"meta":24451,"navigation":42,"path":24452,"seo":24453,"stem":24454,"__hash__":24455},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24442,"toc":24449},[24443,24446],[10,24444,24440],{"id":24445},"_6价值网络",[14,24447,24448],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":22,"searchDepth":37,"depth":37,"links":24450},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24440,"description":24448},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24457,"title":24458,"body":24459,"description":24463,"extension":40,"meta":24464,"navigation":42,"path":24465,"seo":24466,"stem":24467,"__hash__":24468},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24460,"toc":24461},[],{"title":22,"searchDepth":37,"depth":37,"links":24462},[],"记录自己的强化学习笔记。",{"category":23379},"\u002Fwiki\u002F2025-12-04",{"title":24458,"description":24463},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24470,"title":24471,"body":24472,"description":39,"extension":40,"meta":24511,"navigation":42,"path":24512,"seo":24513,"stem":24514,"__hash__":24515},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24473,"toc":24509},[24474,24477,24480,24486,24489,24495,24498,24503,24506],[10,24475,24471],{"id":24476},"_1-项目概览与官方资源",[14,24478,24479],{},"官方文档：",[14,24481,24482],{},[27,24483,24484],{"href":24484,"rel":24485},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[31],[14,24487,24488],{},"官方代码仓库：",[14,24490,24491],{},[27,24492,24493],{"href":24493,"rel":24494},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[31],[14,24496,24497],{},"复现大体流程：",[14,24499,24500],{},[20,24501],{"alt":22,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24504,24505],{},"本教程的目标是打通这条链路：",[14,24507,24508],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":22,"searchDepth":37,"depth":37,"links":24510},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24471,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24517,"title":24518,"body":24519,"description":39,"extension":40,"meta":24635,"navigation":42,"path":24636,"seo":24637,"stem":24638,"__hash__":24639},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24520,"toc":24630},[24521,24524,24528,24531,24538,24542,24545,24554,24564,24568,24598,24601,24627],[10,24522,24518],{"id":24523},"_2-环境准备与设备连接",[57,24525,24527],{"id":24526},"_21-系统与环境","2.1 系统与环境",[14,24529,24530],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24532,24533,24534,24537],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[112,24535,24536],{},"lerobot"," 依赖。",[57,24539,24541],{"id":24540},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24543,24544],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[106,24546,24548],{"className":23823,"code":24547,"language":23825,"meta":22,"style":22},"lerobot-find-out\n",[112,24549,24550],{"__ignoreMap":22},[115,24551,24552],{"class":117,"line":118},[115,24553,24547],{"class":1963},[14,24555,24556,24557,338,24560,24563],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[112,24558,24559],{},"\u002Fdev\u002FttyACM0",[112,24561,24562],{},"\u002Fdev\u002FttyACM1","）。",[57,24565,24567],{"id":24566},"_23-串口授权","2.3 串口授权",[106,24569,24571],{"className":23823,"code":24570,"language":23825,"meta":22,"style":22},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[112,24572,24573,24587],{"__ignoreMap":22},[115,24574,24575,24578,24581,24584],{"class":117,"line":118},[115,24576,24577],{"class":1963},"sudo",[115,24579,24580],{"class":230}," chmod",[115,24582,24583],{"class":174}," 666",[115,24585,24586],{"class":230}," \u002Fdev\u002FttyACM0\n",[115,24588,24589,24591,24593,24595],{"class":117,"line":37},[115,24590,24577],{"class":1963},[115,24592,24580],{"class":230},[115,24594,24583],{"class":174},[115,24596,24597],{"class":230}," \u002Fdev\u002FttyACM1\n",[14,24599,24600],{},"说明：",[1132,24602,24603,24608,24614,24624],{},[72,24604,24605,24607],{},[112,24606,24577],{},"：以 root 权限执行命令。",[72,24609,24610,24613],{},[112,24611,24612],{},"chmod","：修改设备节点权限。",[72,24615,24616,24619,24620,24623],{},[112,24617,24618],{},"666","：",[112,24621,24622],{},"rw-rw-rw-","，所有用户可读写。",[72,24625,24626],{},"串口号必须替换为你机器上的真实端口。",[5127,24628,24629],{},"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":22,"searchDepth":37,"depth":37,"links":24631},[24632,24633,24634],{"id":24526,"depth":37,"text":24527},{"id":24540,"depth":37,"text":24541},{"id":24566,"depth":37,"text":24567},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24518,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24641,"title":24642,"body":24643,"description":39,"extension":40,"meta":24804,"navigation":42,"path":24805,"seo":24806,"stem":24807,"__hash__":24808},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24644,"toc":24800},[24645,24649,24653,24659,24662,24719,24722,24726,24729,24797],[10,24646,24648],{"id":24647},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[57,24650,24652],{"id":24651},"_31-配置电机-id","3.1 配置电机 ID",[14,24654,24655,24656,24658],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[112,24657,343],{},"，需要改成机械臂链路里不冲突的编号。",[14,24660,24661],{},"方式一：用 LeRobot 命令逐步写入。",[106,24663,24665],{"className":23823,"code":24664,"language":23825,"meta":22,"style":22},"# 主臂舵机配置 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",[112,24666,24667,24672,24680,24687,24692,24696,24701,24707,24714],{"__ignoreMap":22},[115,24668,24669],{"class":117,"line":118},[115,24670,24671],{"class":184},"# 主臂舵机配置 ID\n",[115,24673,24674,24677],{"class":117,"line":37},[115,24675,24676],{"class":1963},"lerobot-setup-motors",[115,24678,24679],{"class":174}," \\\n",[115,24681,24682,24685],{"class":117,"line":1180},[115,24683,24684],{"class":174},"  --teleop.type=so101_leader",[115,24686,24679],{"class":174},[115,24688,24689],{"class":117,"line":1195},[115,24690,24691],{"class":174},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[115,24693,24694],{"class":117,"line":1201},[115,24695,2400],{"emptyLinePlaceholder":42},[115,24697,24698],{"class":117,"line":1215},[115,24699,24700],{"class":184},"# 从臂舵机配置 ID\n",[115,24702,24703,24705],{"class":117,"line":1221},[115,24704,24676],{"class":1963},[115,24706,24679],{"class":174},[115,24708,24709,24712],{"class":117,"line":1312},[115,24710,24711],{"class":174},"  --robot.type=so101_follower",[115,24713,24679],{"class":174},[115,24715,24716],{"class":117,"line":1318},[115,24717,24718],{"class":174},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24720,24721],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[57,24723,24725],{"id":24724},"_32-机械臂校准","3.2 机械臂校准",[14,24727,24728],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[106,24730,24732],{"className":23823,"code":24731,"language":23825,"meta":22,"style":22},"# 主臂校准\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",[112,24733,24734,24739,24746,24752,24759,24764,24768,24773,24779,24785,24792],{"__ignoreMap":22},[115,24735,24736],{"class":117,"line":118},[115,24737,24738],{"class":184},"# 主臂校准\n",[115,24740,24741,24744],{"class":117,"line":37},[115,24742,24743],{"class":1963},"lerobot-calibrate",[115,24745,24679],{"class":174},[115,24747,24748,24750],{"class":117,"line":1180},[115,24749,24684],{"class":174},[115,24751,24679],{"class":174},[115,24753,24754,24757],{"class":117,"line":1195},[115,24755,24756],{"class":174},"  --teleop.port=\u002Fdev\u002FttyACM0",[115,24758,24679],{"class":174},[115,24760,24761],{"class":117,"line":1201},[115,24762,24763],{"class":174},"  --teleop.id=my_awesome_leader_arm\n",[115,24765,24766],{"class":117,"line":1215},[115,24767,2400],{"emptyLinePlaceholder":42},[115,24769,24770],{"class":117,"line":1221},[115,24771,24772],{"class":184},"# 从臂校准\n",[115,24774,24775,24777],{"class":117,"line":1312},[115,24776,24743],{"class":1963},[115,24778,24679],{"class":174},[115,24780,24781,24783],{"class":117,"line":1318},[115,24782,24711],{"class":174},[115,24784,24679],{"class":174},[115,24786,24787,24790],{"class":117,"line":1330},[115,24788,24789],{"class":174},"  --robot.port=\u002Fdev\u002FttyACM1",[115,24791,24679],{"class":174},[115,24793,24794],{"class":117,"line":1612},[115,24795,24796],{"class":174},"  --robot.id=my_awesome_follower_arm\n",[5127,24798,24799],{},"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":22,"searchDepth":37,"depth":37,"links":24801},[24802,24803],{"id":24651,"depth":37,"text":24652},{"id":24724,"depth":37,"text":24725},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24642,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24810,"title":24811,"body":24812,"description":39,"extension":40,"meta":25003,"navigation":42,"path":25004,"seo":25005,"stem":25006,"__hash__":25007},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24813,"toc":24999},[24814,24817,24821,24868,24872,24885,24948,24951,24996],[10,24815,24811],{"id":24816},"_4-遥操与相机接入",[57,24818,24820],{"id":24819},"_41-不带相机遥操","4.1 不带相机遥操",[106,24822,24824],{"className":23823,"code":24823,"language":23825,"meta":22,"style":22},"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",[112,24825,24826,24833,24839,24845,24852,24858,24864],{"__ignoreMap":22},[115,24827,24828,24831],{"class":117,"line":118},[115,24829,24830],{"class":1963},"lerobot-teleoperate",[115,24832,24679],{"class":174},[115,24834,24835,24837],{"class":117,"line":37},[115,24836,24711],{"class":174},[115,24838,24679],{"class":174},[115,24840,24841,24843],{"class":117,"line":1180},[115,24842,24789],{"class":174},[115,24844,24679],{"class":174},[115,24846,24847,24850],{"class":117,"line":1195},[115,24848,24849],{"class":174},"  --robot.id=my_awesome_follower_arm",[115,24851,24679],{"class":174},[115,24853,24854,24856],{"class":117,"line":1201},[115,24855,24684],{"class":174},[115,24857,24679],{"class":174},[115,24859,24860,24862],{"class":117,"line":1215},[115,24861,24756],{"class":174},[115,24863,24679],{"class":174},[115,24865,24866],{"class":117,"line":1221},[115,24867,24763],{"class":174},[57,24869,24871],{"id":24870},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[106,24873,24875],{"className":23823,"code":24874,"language":23825,"meta":22,"style":22},"lerobot-find-cameras opencv\n",[112,24876,24877],{"__ignoreMap":22},[115,24878,24879,24882],{"class":117,"line":118},[115,24880,24881],{"class":1963},"lerobot-find-cameras",[115,24883,24884],{"class":230}," opencv\n",[106,24886,24888],{"className":23823,"code":24887,"language":23825,"meta":22,"style":22},"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",[112,24889,24890,24896,24902,24908,24914,24924,24930,24936,24943],{"__ignoreMap":22},[115,24891,24892,24894],{"class":117,"line":118},[115,24893,24830],{"class":1963},[115,24895,24679],{"class":174},[115,24897,24898,24900],{"class":117,"line":37},[115,24899,24711],{"class":174},[115,24901,24679],{"class":174},[115,24903,24904,24906],{"class":117,"line":1180},[115,24905,24789],{"class":174},[115,24907,24679],{"class":174},[115,24909,24910,24912],{"class":117,"line":1195},[115,24911,24849],{"class":174},[115,24913,24679],{"class":174},[115,24915,24916,24919,24922],{"class":117,"line":1201},[115,24917,24918],{"class":174},"  --robot.cameras=",[115,24920,24921],{"class":230},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[115,24923,24679],{"class":174},[115,24925,24926,24928],{"class":117,"line":1215},[115,24927,24684],{"class":174},[115,24929,24679],{"class":174},[115,24931,24932,24934],{"class":117,"line":1221},[115,24933,24756],{"class":174},[115,24935,24679],{"class":174},[115,24937,24938,24941],{"class":117,"line":1312},[115,24939,24940],{"class":174},"  --teleop.id=my_awesome_leader_arm",[115,24942,24679],{"class":174},[115,24944,24945],{"class":117,"line":1318},[115,24946,24947],{"class":174},"  --display_data=true\n",[14,24949,24950],{},"相机参数说明：",[1132,24952,24953,24959,24965,24974,24984,24990],{},[72,24954,24955,24958],{},[112,24956,24957],{},"front","：相机名称。",[72,24960,24961,24964],{},[112,24962,24963],{},"type: opencv","：相机驱动类型。",[72,24966,24967,24970,24971,24563],{},[112,24968,24969],{},"index_or_path","：设备编号或设备路径（如 ",[112,24972,24973],{},"\u002Fdev\u002Fvideo4",[72,24975,24976,24979,24980,24983],{},[112,24977,24978],{},"width"," \u002F ",[112,24981,24982],{},"height","：图像分辨率。",[72,24985,24986,24989],{},[112,24987,24988],{},"fps","：采样帧率。",[72,24991,24992,24995],{},[112,24993,24994],{},"--display_data=true","：启用实时可视化。",[5127,24997,24998],{},"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":22,"searchDepth":37,"depth":37,"links":25000},[25001,25002],{"id":24819,"depth":37,"text":24820},{"id":24870,"depth":37,"text":24871},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24811,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25009,"title":25010,"body":25011,"description":39,"extension":40,"meta":25183,"navigation":42,"path":25184,"seo":25185,"stem":25186,"__hash__":25187},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25012,"toc":25178},[25013,25017,25021,25026,25031,25034,25076,25082,25086,25135,25140,25144,25147,25155,25160,25165,25170,25175],[10,25014,25016],{"id":25015},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[57,25018,25020],{"id":25019},"_51-生成访问令牌","5.1 生成访问令牌",[14,25022,25023],{},[20,25024],{"alt":22,"src":25025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25027,25028],{},[20,25029],{"alt":22,"src":25030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25032,25033],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[106,25035,25037],{"className":23823,"code":25036,"language":23825,"meta":22,"style":22},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[112,25038,25039,25052],{"__ignoreMap":22},[115,25040,25041,25044,25047,25049],{"class":117,"line":118},[115,25042,25043],{"class":121},"export",[115,25045,25046],{"class":125}," HF_TOKEN",[115,25048,171],{"class":121},[115,25050,25051],{"class":230},"\"your_huggingface_token\"\n",[115,25053,25054,25057,25060,25063,25066,25068,25071,25073],{"class":117,"line":37},[115,25055,25056],{"class":1963},"hf",[115,25058,25059],{"class":230}," auth",[115,25061,25062],{"class":230}," login",[115,25064,25065],{"class":174}," --token",[115,25067,9725],{"class":230},[115,25069,25070],{"class":125},"$HF_TOKEN",[115,25072,376],{"class":230},[115,25074,25075],{"class":174}," --add-to-git-credential\n",[14,25077,25078,25081],{},[112,25079,25080],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[57,25083,25085],{"id":25084},"_52-验证登录","5.2 验证登录",[106,25087,25089],{"className":23823,"code":25088,"language":23825,"meta":22,"style":22},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[112,25090,25091,25122],{"__ignoreMap":22},[115,25092,25093,25096,25098,25101,25103,25105,25108,25111,25114,25117,25120],{"class":117,"line":118},[115,25094,25095],{"class":125},"HF_USER",[115,25097,171],{"class":121},[115,25099,25100],{"class":125},"$(",[115,25102,25056],{"class":1963},[115,25104,25059],{"class":230},[115,25106,25107],{"class":230}," whoami",[115,25109,25110],{"class":121}," |",[115,25112,25113],{"class":1963}," head",[115,25115,25116],{"class":174}," -n",[115,25118,25119],{"class":174}," 1",[115,25121,132],{"class":125},[115,25123,25124,25127,25129,25132],{"class":117,"line":37},[115,25125,25126],{"class":174},"echo",[115,25128,9725],{"class":230},[115,25130,25131],{"class":125},"$HF_USER",[115,25133,25134],{"class":230},"\"\n",[14,25136,25137],{},[20,25138],{"alt":22,"src":25139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[57,25141,25143],{"id":25142},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25145,25146],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1132,25148,25149,25152],{},[72,25150,25151],{},"Dataset Repo（用于上传演示数据）",[72,25153,25154],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25156,25157],{},[20,25158],{"alt":22,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25161,25162],{},[20,25163],{"alt":22,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25166,25167],{},[20,25168],{"alt":22,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25171,25172],{},[20,25173],{"alt":22,"src":25174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5127,25176,25177],{},"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":22,"searchDepth":37,"depth":37,"links":25179},[25180,25181,25182],{"id":25019,"depth":37,"text":25020},{"id":25084,"depth":37,"text":25085},{"id":25142,"depth":37,"text":25143},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25010,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25189,"title":25190,"body":25191,"description":39,"extension":40,"meta":25388,"navigation":42,"path":25389,"seo":25390,"stem":25391,"__hash__":25392},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25192,"toc":25383},[25193,25197,25201,25297,25305,25310,25314,25330,25333,25337,25380],[10,25194,25196],{"id":25195},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[57,25198,25200],{"id":25199},"_61-录制示教数据","6.1 录制示教数据",[106,25202,25204],{"className":23823,"code":25203,"language":23825,"meta":22,"style":22},"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",[112,25205,25206,25213,25219,25225,25231,25240,25246,25252,25258,25265,25275,25282,25292],{"__ignoreMap":22},[115,25207,25208,25211],{"class":117,"line":118},[115,25209,25210],{"class":1963},"lerobot-record",[115,25212,24679],{"class":174},[115,25214,25215,25217],{"class":117,"line":37},[115,25216,24711],{"class":174},[115,25218,24679],{"class":174},[115,25220,25221,25223],{"class":117,"line":1180},[115,25222,24789],{"class":174},[115,25224,24679],{"class":174},[115,25226,25227,25229],{"class":117,"line":1195},[115,25228,24849],{"class":174},[115,25230,24679],{"class":174},[115,25232,25233,25235,25238],{"class":117,"line":1201},[115,25234,24918],{"class":174},[115,25236,25237],{"class":230},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[115,25239,24679],{"class":174},[115,25241,25242,25244],{"class":117,"line":1215},[115,25243,24684],{"class":174},[115,25245,24679],{"class":174},[115,25247,25248,25250],{"class":117,"line":1221},[115,25249,24756],{"class":174},[115,25251,24679],{"class":174},[115,25253,25254,25256],{"class":117,"line":1312},[115,25255,24940],{"class":174},[115,25257,24679],{"class":174},[115,25259,25260,25263],{"class":117,"line":1318},[115,25261,25262],{"class":174},"  --display_data=true",[115,25264,24679],{"class":174},[115,25266,25267,25270,25273],{"class":117,"line":1330},[115,25268,25269],{"class":174},"  --dataset.repo_id=",[115,25271,25272],{"class":230},"\"Embodied-AI-6\u002Fso101_test\"",[115,25274,24679],{"class":174},[115,25276,25277,25280],{"class":117,"line":1612},[115,25278,25279],{"class":174},"  --dataset.num_episodes=10",[115,25281,24679],{"class":174},[115,25283,25284,25287,25290],{"class":117,"line":1617},[115,25285,25286],{"class":174},"  --dataset.single_task=",[115,25288,25289],{"class":230},"\"Grab the green cube\"",[115,25291,24679],{"class":174},[115,25293,25294],{"class":117,"line":1623},[115,25295,25296],{"class":174},"  --resume=true\n",[1132,25298,25299],{},[72,25300,25301,25304],{},[112,25302,25303],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25306,25307],{},[20,25308],{"alt":22,"src":25309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[57,25311,25313],{"id":25312},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[106,25315,25317],{"className":23823,"code":25316,"language":23825,"meta":22,"style":22},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[112,25318,25319],{"__ignoreMap":22},[115,25320,25321,25324,25327],{"class":117,"line":118},[115,25322,25323],{"class":1963},"rm",[115,25325,25326],{"class":174}," -rf",[115,25328,25329],{"class":230}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25331,25332],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[57,25334,25336],{"id":25335},"_63-回放指定-episode","6.3 回放指定 episode",[106,25338,25340],{"className":23823,"code":25339,"language":23825,"meta":22,"style":22},"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",[112,25341,25342,25349,25355,25361,25367,25375],{"__ignoreMap":22},[115,25343,25344,25347],{"class":117,"line":118},[115,25345,25346],{"class":1963},"lerobot-replay",[115,25348,24679],{"class":174},[115,25350,25351,25353],{"class":117,"line":37},[115,25352,24711],{"class":174},[115,25354,24679],{"class":174},[115,25356,25357,25359],{"class":117,"line":1180},[115,25358,24789],{"class":174},[115,25360,24679],{"class":174},[115,25362,25363,25365],{"class":117,"line":1195},[115,25364,24849],{"class":174},[115,25366,24679],{"class":174},[115,25368,25369,25371,25373],{"class":117,"line":1201},[115,25370,25269],{"class":174},[115,25372,25272],{"class":230},[115,25374,24679],{"class":174},[115,25376,25377],{"class":117,"line":1215},[115,25378,25379],{"class":174},"  --dataset.episode=0\n",[5127,25381,25382],{},"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":22,"searchDepth":37,"depth":37,"links":25384},[25385,25386,25387],{"id":25199,"depth":37,"text":25200},{"id":25312,"depth":37,"text":25313},{"id":25335,"depth":37,"text":25336},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25190,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25394,"title":25395,"body":25396,"description":39,"extension":40,"meta":25524,"navigation":42,"path":25525,"seo":25526,"stem":25527,"__hash__":25528},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25397,"toc":25522},[25398,25402,25465,25468,25515,25520],[10,25399,25401],{"id":25400},"_7-act-模型训练","7. ACT 模型训练",[106,25403,25405],{"className":23823,"code":25404,"language":23825,"meta":22,"style":22},"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",[112,25406,25407,25414,25422,25429,25436,25443,25450,25457],{"__ignoreMap":22},[115,25408,25409,25412],{"class":117,"line":118},[115,25410,25411],{"class":1963},"lerobot-train",[115,25413,24679],{"class":174},[115,25415,25416,25418,25420],{"class":117,"line":37},[115,25417,25269],{"class":174},[115,25419,25272],{"class":230},[115,25421,24679],{"class":174},[115,25423,25424,25427],{"class":117,"line":1180},[115,25425,25426],{"class":174},"  --policy.type=act",[115,25428,24679],{"class":174},[115,25430,25431,25434],{"class":117,"line":1195},[115,25432,25433],{"class":174},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[115,25435,24679],{"class":174},[115,25437,25438,25441],{"class":117,"line":1201},[115,25439,25440],{"class":174},"  --job_name=act_so101_test",[115,25442,24679],{"class":174},[115,25444,25445,25448],{"class":117,"line":1215},[115,25446,25447],{"class":174},"  --policy.device=cuda",[115,25449,24679],{"class":174},[115,25451,25452,25455],{"class":117,"line":1221},[115,25453,25454],{"class":174},"  --wandb.enable=false",[115,25456,24679],{"class":174},[115,25458,25459,25462],{"class":117,"line":1312},[115,25460,25461],{"class":174},"  --policy.repo_id=",[115,25463,25464],{"class":230},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25466,25467],{},"参数说明：",[1132,25469,25470,25476,25482,25488,25494,25503,25509],{},[72,25471,25472,25475],{},[112,25473,25474],{},"--dataset.repo_id","：训练数据集仓库。",[72,25477,25478,25481],{},[112,25479,25480],{},"--policy.type=act","：策略模型类型为 ACT。",[72,25483,25484,25487],{},[112,25485,25486],{},"--output_dir","：本地训练输出目录。",[72,25489,25490,25493],{},[112,25491,25492],{},"--job_name","：训练任务名称。",[72,25495,25496,25499,25500,24563],{},[112,25497,25498],{},"--policy.device","：训练设备（如 ",[112,25501,25502],{},"cuda",[72,25504,25505,25508],{},[112,25506,25507],{},"--wandb.enable","：是否启用 WandB 可视化。",[72,25510,25511,25514],{},[112,25512,25513],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25516,25517],{},[20,25518],{"alt":22,"src":25519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5127,25521,25382],{},{"title":22,"searchDepth":37,"depth":37,"links":25523},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25395,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25530,"title":25531,"body":25532,"description":39,"extension":40,"meta":25619,"navigation":42,"path":25620,"seo":25621,"stem":25622,"__hash__":25623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25533,"toc":25617},[25534,25537,25540,25607,25615],[10,25535,25531],{"id":25536},"_8-策略部署与自动采集",[14,25538,25539],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[106,25541,25543],{"className":23823,"code":25542,"language":23825,"meta":22,"style":22},"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",[112,25544,25545,25551,25557,25563,25571,25577,25584,25592,25600],{"__ignoreMap":22},[115,25546,25547,25549],{"class":117,"line":118},[115,25548,25210],{"class":1963},[115,25550,24679],{"class":174},[115,25552,25553,25555],{"class":117,"line":37},[115,25554,24711],{"class":174},[115,25556,24679],{"class":174},[115,25558,25559,25561],{"class":117,"line":1180},[115,25560,24789],{"class":174},[115,25562,24679],{"class":174},[115,25564,25565,25567,25569],{"class":117,"line":1195},[115,25566,24918],{"class":174},[115,25568,25237],{"class":230},[115,25570,24679],{"class":174},[115,25572,25573,25575],{"class":117,"line":1201},[115,25574,24849],{"class":174},[115,25576,24679],{"class":174},[115,25578,25579,25582],{"class":117,"line":1215},[115,25580,25581],{"class":174},"  --display_data=false",[115,25583,24679],{"class":174},[115,25585,25586,25588,25590],{"class":117,"line":1221},[115,25587,25269],{"class":174},[115,25589,25272],{"class":230},[115,25591,24679],{"class":174},[115,25593,25594,25596,25598],{"class":117,"line":1312},[115,25595,25286],{"class":174},[115,25597,25289],{"class":230},[115,25599,24679],{"class":174},[115,25601,25602,25605],{"class":117,"line":1318},[115,25603,25604],{"class":174},"  --policy.path=",[115,25606,25464],{"class":230},[1132,25608,25609],{},[72,25610,25611,25614],{},[112,25612,25613],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5127,25616,25382],{},{"title":22,"searchDepth":37,"depth":37,"links":25618},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25531,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25625,"title":25626,"body":25627,"description":39,"extension":40,"meta":25656,"navigation":42,"path":25657,"seo":25658,"stem":25659,"__hash__":25660},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25628,"toc":25654},[25629,25633,25636,25642,25645,25651],[10,25630,25632],{"id":25631},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25634,25635],{},"项目地址：",[14,25637,25638],{},[27,25639,25640],{"href":25640,"rel":25641},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[31],[14,25643,25644],{},"参考教程：",[14,25646,25647],{},[27,25648,25649],{"href":25649,"rel":25650},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[31],[14,25652,25653],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":22,"searchDepth":37,"depth":37,"links":25655},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25626,"description":39},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25662,"title":25663,"body":25664,"description":25668,"extension":40,"meta":25669,"navigation":42,"path":25670,"seo":25671,"stem":25672,"__hash__":25673},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25665,"toc":25666},[],{"title":22,"searchDepth":37,"depth":37,"links":25667},[],"act复现",{"category":23379},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25663,"description":25668},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25675,"title":25676,"body":25677,"description":22,"extension":40,"meta":25979,"navigation":42,"path":25980,"seo":25981,"stem":25982,"__hash__":25983},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25678,"toc":25971},[25679,25682,25686,25696,25703,25710,25713,25720,25723,25726,25730,25742,25746,25792,25795,25798,25801,25804,25807,25811,25849,25855,25859,25913,25918,25921,25924,25929,25932,25937,25940,25943,25947,25950,25953,25957],[10,25680,25676],{"id":25681},"_1简介",[86,25683,25685],{"id":25684},"_11什么是-docker","1.1什么是 Docker？",[14,25687,25688,25689,25692,25693],{},"Docker 是一个开源的 ",[275,25690,25691],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[275,25694,25695],{},"一次构建，到处运行。",[14,25697,25698,25699,25702],{},"“ ",[275,25700,25701],{},"一次构建，到处运行"," ”也就是说：",[69,25704,25705],{},[72,25706,25707],{},[275,25708,25709],{},"之前：",[14,25711,25712],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[69,25714,25715],{},[72,25716,25717],{},[275,25718,25719],{},"使用docker后：",[14,25721,25722],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25724,25725],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[86,25727,25729],{"id":25728},"_12它是怎么工作的","1.2.它是怎么工作的？",[1132,25731,25732,25735],{},[72,25733,25734],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[72,25736,25737,25738,25741],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[275,25739,25740],{},"无论在哪运行都一样稳定"," 。",[86,25743,25745],{"id":25744},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[263,25747,25748,25758],{},[266,25749,25750],{},[269,25751,25752,25755],{},[272,25753,25754],{"align":23737},"概念",[272,25756,25757],{"align":23737},"解释",[310,25759,25760,25768,25776,25784],{},[269,25761,25762,25765],{},[315,25763,25764],{"align":23737},"镜像",[315,25766,25767],{"align":23737},"Image，运行容器的模板，像是一个应用快照",[269,25769,25770,25773],{},[315,25771,25772],{"align":23737},"容器",[315,25774,25775],{"align":23737},"Container，运行中的镜像实例，有自己的文件系统、网络等",[269,25777,25778,25781],{},[315,25779,25780],{"align":23737},"Dockerfile",[315,25782,25783],{"align":23737},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[269,25785,25786,25789],{},[315,25787,25788],{"align":23737},"仓库",[315,25790,25791],{"align":23737},"Registry，存放镜像的地方，比如 Docker Hub",[14,25793,25794],{},"抽象化理解:",[14,25796,25797],{},"Docker镜像≈C++类",[14,25799,25800],{},"Docker容器≈C++类实例(即对象)",[14,25802,25803],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25805,25806],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[86,25808,25810],{"id":25809},"_14类比理解","1.4.类比理解",[263,25812,25813,25823],{},[266,25814,25815],{},[269,25816,25817,25820],{},[272,25818,25819],{"align":23737},"传统部署",[272,25821,25822],{"align":23737},"Docker部署",[310,25824,25825,25833,25841],{},[269,25826,25827,25830],{},[315,25828,25829],{"align":23737},"手动安装依赖、调试版本不一致问题",[315,25831,25832],{"align":23737},"一次打包环境和代码",[269,25834,25835,25838],{},[315,25836,25837],{"align":23737},"程序“裸奔”跑在系统上",[315,25839,25840],{"align":23737},"程序“穿着容器”隔离运行",[269,25842,25843,25846],{},[315,25844,25845],{"align":23737},"容易“在我电脑上能跑”",[315,25847,25848],{"align":23737},"保证“无论在哪都能跑”",[14,25850,25851,25852],{},"就像快递包裹： ",[275,25853,25854],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[86,25856,25858],{"id":25857},"_15docker-的核心优势","1.5.Docker 的核心优势",[263,25860,25861,25871],{},[266,25862,25863],{},[269,25864,25865,25868],{},[272,25866,25867],{"align":23737},"优势",[272,25869,25870],{"align":23737},"说明",[310,25872,25873,25881,25889,25897,25905],{},[269,25874,25875,25878],{},[315,25876,25877],{"align":23737},"轻量级",[315,25879,25880],{"align":23737},"基于系统内核共享，启动速度快，占资源少",[269,25882,25883,25886],{},[315,25884,25885],{"align":23737},"跨平台",[315,25887,25888],{"align":23737},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[269,25890,25891,25894],{},[315,25892,25893],{"align":23737},"易于迁移部署",[315,25895,25896],{"align":23737},"应用和环境一起封装，不怕依赖不一致",[269,25898,25899,25902],{},[315,25900,25901],{"align":23737},"易于版本控制",[315,25903,25904],{"align":23737},"镜像版本可控，支持回滚",[269,25906,25907,25910],{},[315,25908,25909],{"align":23737},"生态丰富",[315,25911,25912],{"align":23737},"Docker Hub 上有成千上万的现成镜像可用",[69,25914,25915],{},[72,25916,25917],{},"在Linux上可以几乎实现无性能损失。",[14,25919,25920],{},"docker里的发行版和本机共用Linux内核。",[14,25922,25923],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[69,25925,25926],{},[72,25927,25928],{},"可以快速部署在绝大多数Linux发行版",[14,25930,25931],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[69,25933,25934],{},[72,25935,25936],{},"配置环境简单",[14,25938,25939],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25941,25942],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[69,25944,25945],{},[72,25946,25909],{},[14,25948,25949],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25951,25952],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[86,25954,25956],{"id":25955},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1132,25958,25959,25962,25965,25968],{},[72,25960,25961],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[72,25963,25964],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[72,25966,25967],{},"微服务架构：每个服务一个容器，灵活组合",[72,25969,25970],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":22,"searchDepth":37,"depth":37,"links":25972},[25973,25974,25975,25976,25977,25978],{"id":25684,"depth":1180,"text":25685},{"id":25728,"depth":1180,"text":25729},{"id":25744,"depth":1180,"text":25745},{"id":25809,"depth":1180,"text":25810},{"id":25857,"depth":1180,"text":25858},{"id":25955,"depth":1180,"text":25956},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25676,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25985,"title":25986,"body":25987,"description":22,"extension":40,"meta":26720,"navigation":42,"path":26721,"seo":26722,"stem":26723,"__hash__":26724},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25988,"toc":26715},[25989,25992,25996,25999,26002,26008,26014,26018,26027,26030,26087,26090,26141,26144,26227,26230,26267,26271,26282,26295,26302,26305,26385,26388,26438,26441,26464,26468,26475,26478,26494,26500,26503,26519,26525,26528,26544,26558,26564,26584,26590,26593,26605,26611,26614,26628,26634,26637,26657,26662,26665,26668,26672,26675,26678,26681,26688,26691,26694,26697,26702,26707,26712],[10,25990,25986],{"id":25991},"_2安装docker",[86,25993,25995],{"id":25994},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25997,25998],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26000,26001],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26003,26004],{},[27,26005,26006],{"href":26006,"rel":26007},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[31],[14,26009,26010],{},[27,26011,26012],{"href":26012,"rel":26013},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[31],[21999,26015,26017],{"id":26016},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26019,26020,26021,26026],{},"以下内容根据 ",[27,26022,26025],{"href":26023,"rel":26024},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[31],"官方文档"," 修改而来。",[14,26028,26029],{},"如果你过去安装过 docker，先删掉：",[106,26031,26033],{"className":23823,"code":26032,"language":23825,"meta":22,"style":22},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[112,26034,26035],{"__ignoreMap":22},[115,26036,26037,26039,26042,26045,26048,26051,26054,26057,26060,26063,26066,26069,26072,26075,26078,26081,26084],{"class":117,"line":118},[115,26038,3025],{"class":121},[115,26040,26041],{"class":125}," pkg ",[115,26043,26044],{"class":121},"in",[115,26046,26047],{"class":230}," docker.io",[115,26049,26050],{"class":230}," docker-doc",[115,26052,26053],{"class":230}," docker-compose",[115,26055,26056],{"class":230}," docker-compose-v2",[115,26058,26059],{"class":230}," podman-docker",[115,26061,26062],{"class":230}," containerd",[115,26064,26065],{"class":230}," runc",[115,26067,26068],{"class":125},"; ",[115,26070,26071],{"class":121},"do",[115,26073,26074],{"class":1963}," sudo",[115,26076,26077],{"class":230}," apt-get",[115,26079,26080],{"class":230}," remove",[115,26082,26083],{"class":125}," $pkg; ",[115,26085,26086],{"class":121},"done\n",[14,26088,26089],{},"首先安装依赖和GPG：",[106,26091,26095],{"className":26092,"code":26093,"language":26094,"meta":22,"style":22},"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",[112,26096,26097,26102,26107,26112,26117,26122,26127,26131,26136],{"__ignoreMap":22},[115,26098,26099],{"class":117,"line":118},[115,26100,26101],{},"# Add Docker's official GPG key:\n",[115,26103,26104],{"class":117,"line":37},[115,26105,26106],{},"sudo apt-get update\n",[115,26108,26109],{"class":117,"line":1180},[115,26110,26111],{},"sudo apt-get install ca-certificates curl\n",[115,26113,26114],{"class":117,"line":1195},[115,26115,26116],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[115,26118,26119],{"class":117,"line":1201},[115,26120,26121],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[115,26123,26124],{"class":117,"line":1215},[115,26125,26126],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[115,26128,26129],{"class":117,"line":1221},[115,26130,2400],{"emptyLinePlaceholder":42},[115,26132,26133],{"class":117,"line":1312},[115,26134,26135],{},"# 如果上面这行报错就弄下面这行\n",[115,26137,26138],{"class":117,"line":1318},[115,26139,26140],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26142,26143],{},"信任 Docker 的 GPG 公钥并添加仓库：",[106,26145,26147],{"className":23823,"code":26146,"language":23825,"meta":22,"style":22},"# 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",[112,26148,26149,26154,26160,26177,26210],{"__ignoreMap":22},[115,26150,26151],{"class":117,"line":118},[115,26152,26153],{"class":184},"# Add the repository to Apt sources:\n",[115,26155,26156,26158],{"class":117,"line":37},[115,26157,25126],{"class":174},[115,26159,24679],{"class":174},[115,26161,26162,26165,26168,26171,26174],{"class":117,"line":1180},[115,26163,26164],{"class":230},"  \"deb [arch=$(",[115,26166,26167],{"class":1963},"dpkg",[115,26169,26170],{"class":174}," --print-architecture",[115,26172,26173],{"class":230},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[115,26175,26176],{"class":174},"\\\n",[115,26178,26179,26182,26184,26186,26189,26192,26194,26196,26199,26201,26203,26206,26208],{"class":117,"line":1195},[115,26180,26181],{"class":230},"  \"",[115,26183,25100],{"class":125},[115,26185,683],{"class":174},[115,26187,26188],{"class":230}," \u002Fetc\u002Fos-release",[115,26190,26191],{"class":125}," && ",[115,26193,25126],{"class":174},[115,26195,9725],{"class":230},[115,26197,26198],{"class":125},"$VERSION_CODENAME",[115,26200,376],{"class":230},[115,26202,554],{"class":125},[115,26204,26205],{"class":230},"\" stable\"",[115,26207,25110],{"class":121},[115,26209,24679],{"class":174},[115,26211,26212,26215,26218,26221,26224],{"class":117,"line":1201},[115,26213,26214],{"class":1963},"  sudo",[115,26216,26217],{"class":230}," tee",[115,26219,26220],{"class":230}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[115,26222,26223],{"class":121}," >",[115,26225,26226],{"class":230}," \u002Fdev\u002Fnull\n",[14,26228,26229],{},"最后安装",[106,26231,26233],{"className":23823,"code":26232,"language":23825,"meta":22,"style":22},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[112,26234,26235,26244],{"__ignoreMap":22},[115,26236,26237,26239,26241],{"class":117,"line":118},[115,26238,24577],{"class":1963},[115,26240,26077],{"class":230},[115,26242,26243],{"class":230}," update\n",[115,26245,26246,26248,26250,26252,26255,26258,26261,26264],{"class":117,"line":37},[115,26247,24577],{"class":1963},[115,26249,26077],{"class":230},[115,26251,23835],{"class":230},[115,26253,26254],{"class":230}," docker-ce",[115,26256,26257],{"class":230}," docker-ce-cli",[115,26259,26260],{"class":230}," containerd.io",[115,26262,26263],{"class":230}," docker-buildx-plugin",[115,26265,26266],{"class":230}," docker-compose-plugin\n",[21999,26268,26270],{"id":26269},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26272,26273,26274,26277,26278,26281],{},"查看自己自己包管理工具版本（dnf是 ",[275,26275,26276],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[275,26279,26280],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[106,26283,26285],{"className":23823,"code":26284,"language":23825,"meta":22,"style":22},"dnf --version\n",[112,26286,26287],{"__ignoreMap":22},[115,26288,26289,26292],{"class":117,"line":118},[115,26290,26291],{"class":1963},"dnf",[115,26293,26294],{"class":174}," --version\n",[14,26296,26020,26297,26301],{},[27,26298,26025],{"href":26299,"rel":26300},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[31]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26303,26304],{},"如果你之前安装过 docker，请先删掉",[106,26306,26308],{"className":23823,"code":26307,"language":23825,"meta":22,"style":22},"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",[112,26309,26310,26324,26331,26338,26345,26352,26359,26366,26373,26380],{"__ignoreMap":22},[115,26311,26312,26314,26317,26319,26322],{"class":117,"line":118},[115,26313,24577],{"class":1963},[115,26315,26316],{"class":230}," dnf",[115,26318,26080],{"class":230},[115,26320,26321],{"class":230}," docker",[115,26323,24679],{"class":174},[115,26325,26326,26329],{"class":117,"line":37},[115,26327,26328],{"class":230},"                  docker-client",[115,26330,24679],{"class":174},[115,26332,26333,26336],{"class":117,"line":1180},[115,26334,26335],{"class":230},"                  docker-client-latest",[115,26337,24679],{"class":174},[115,26339,26340,26343],{"class":117,"line":1195},[115,26341,26342],{"class":230},"                  docker-common",[115,26344,24679],{"class":174},[115,26346,26347,26350],{"class":117,"line":1201},[115,26348,26349],{"class":230},"                  docker-latest",[115,26351,24679],{"class":174},[115,26353,26354,26357],{"class":117,"line":1215},[115,26355,26356],{"class":230},"                  docker-latest-logrotate",[115,26358,24679],{"class":174},[115,26360,26361,26364],{"class":117,"line":1221},[115,26362,26363],{"class":230},"                  docker-logrotate",[115,26365,24679],{"class":174},[115,26367,26368,26371],{"class":117,"line":1312},[115,26369,26370],{"class":230},"                  docker-selinux",[115,26372,24679],{"class":174},[115,26374,26375,26378],{"class":117,"line":1318},[115,26376,26377],{"class":230},"                  docker-engine-selinux",[115,26379,24679],{"class":174},[115,26381,26382],{"class":117,"line":1330},[115,26383,26384],{"class":230},"                  docker-engine\n",[14,26386,26387],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[106,26389,26391],{"className":23823,"code":26390,"language":23825,"meta":22,"style":22},"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",[112,26392,26393,26407,26422],{"__ignoreMap":22},[115,26394,26395,26397,26399,26402,26404],{"class":117,"line":118},[115,26396,24577],{"class":1963},[115,26398,26316],{"class":230},[115,26400,26401],{"class":174}," -y",[115,26403,23835],{"class":230},[115,26405,26406],{"class":230}," dnf-plugins-core\n",[115,26408,26409,26411,26413,26416,26419],{"class":117,"line":37},[115,26410,24577],{"class":1963},[115,26412,26316],{"class":230},[115,26414,26415],{"class":230}," config-manager",[115,26417,26418],{"class":230}," addrepo",[115,26420,26421],{"class":174}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[115,26423,26424,26426,26429,26432,26435],{"class":117,"line":1180},[115,26425,24577],{"class":1963},[115,26427,26428],{"class":230}," sed",[115,26430,26431],{"class":174}," -i",[115,26433,26434],{"class":230}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[115,26436,26437],{"class":230}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26439,26440],{},"最后安装：",[106,26442,26444],{"className":23823,"code":26443,"language":23825,"meta":22,"style":22},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[112,26445,26446],{"__ignoreMap":22},[115,26447,26448,26450,26452,26454,26456,26458,26460,26462],{"class":117,"line":118},[115,26449,24577],{"class":1963},[115,26451,26316],{"class":230},[115,26453,23835],{"class":230},[115,26455,26254],{"class":230},[115,26457,26257],{"class":230},[115,26459,26260],{"class":230},[115,26461,26263],{"class":230},[115,26463,26266],{"class":230},[86,26465,26467],{"id":26466},"_22配置环境","2.2.配置环境",[21999,26469,26471,26474],{"id":26470},"_221检查-docker-服务状态",[275,26472,26473],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26476,26477],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[106,26479,26481],{"className":23823,"code":26480,"language":23825,"meta":22,"style":22},"systemctl status docker\n",[112,26482,26483],{"__ignoreMap":22},[115,26484,26485,26488,26491],{"class":117,"line":118},[115,26486,26487],{"class":1963},"systemctl",[115,26489,26490],{"class":230}," status",[115,26492,26493],{"class":230}," docker\n",[21999,26495,26497,26474],{"id":26496},"_222启动-docker-服务",[275,26498,26499],{},"2.2.2.启动 Docker 服务",[14,26501,26502],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[106,26504,26506],{"className":23823,"code":26505,"language":23825,"meta":22,"style":22},"sudo systemctl start docker\n",[112,26507,26508],{"__ignoreMap":22},[115,26509,26510,26512,26515,26517],{"class":117,"line":118},[115,26511,24577],{"class":1963},[115,26513,26514],{"class":230}," systemctl",[115,26516,4184],{"class":230},[115,26518,26493],{"class":230},[21999,26520,26522,26474],{"id":26521},"_223设置-docker-开机自启",[275,26523,26524],{},"2.2.3.设置 Docker 开机自启",[14,26526,26527],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[106,26529,26531],{"className":23823,"code":26530,"language":23825,"meta":22,"style":22},"sudo systemctl enable docker\n",[112,26532,26533],{"__ignoreMap":22},[115,26534,26535,26537,26539,26542],{"class":117,"line":118},[115,26536,24577],{"class":1963},[115,26538,26514],{"class":230},[115,26540,26541],{"class":230}," enable",[115,26543,26493],{"class":230},[21999,26545,26547,13796,26550,13796,26555,26474],{"id":26546},"_224将用户添加到-docker-组",[275,26548,26549],{},"2.2.4.将用户添加到",[275,26551,26552],{},[112,26553,26554],{},"docker",[275,26556,26557],{},"组",[14,26559,26560,26561,26563],{},"使用以下命令将当前用户添加到 ",[112,26562,26554],{}," 组：",[106,26565,26567],{"className":23823,"code":26566,"language":23825,"meta":22,"style":22},"sudo usermod -aG docker $USER\n",[112,26568,26569],{"__ignoreMap":22},[115,26570,26571,26573,26576,26579,26581],{"class":117,"line":118},[115,26572,24577],{"class":1963},[115,26574,26575],{"class":230}," usermod",[115,26577,26578],{"class":174}," -aG",[115,26580,26321],{"class":230},[115,26582,26583],{"class":125}," $USER\n",[21999,26585,26587,26474],{"id":26586},"_225退出并重新登录",[275,26588,26589],{},"2.2.5.退出并重新登录",[14,26591,26592],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[106,26594,26596],{"className":23823,"code":26595,"language":23825,"meta":22,"style":22},"newgrp docker\n",[112,26597,26598],{"__ignoreMap":22},[115,26599,26600,26603],{"class":117,"line":118},[115,26601,26602],{"class":1963},"newgrp",[115,26604,26493],{"class":230},[21999,26606,26608,26474],{"id":26607},"_226重新启动-docker-服务如果需要",[275,26609,26610],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26612,26613],{},"确保 Docker 服务正在运行，可以使用以下命令：",[106,26615,26616],{"className":23823,"code":26505,"language":23825,"meta":22,"style":22},[112,26617,26618],{"__ignoreMap":22},[115,26619,26620,26622,26624,26626],{"class":117,"line":118},[115,26621,24577],{"class":1963},[115,26623,26514],{"class":230},[115,26625,4184],{"class":230},[115,26627,26493],{"class":230},[21999,26629,26631,26474],{"id":26630},"_227重启电脑后检查-docker-服务状态",[275,26632,26633],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26635,26636],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[106,26638,26640],{"className":23823,"code":26639,"language":23825,"meta":22,"style":22},"sudo reboot\nsystemctl status docker\n",[112,26641,26642,26649],{"__ignoreMap":22},[115,26643,26644,26646],{"class":117,"line":118},[115,26645,24577],{"class":1963},[115,26647,26648],{"class":230}," reboot\n",[115,26650,26651,26653,26655],{"class":117,"line":37},[115,26652,26487],{"class":1963},[115,26654,26490],{"class":230},[115,26656,26493],{"class":230},[14,26658,26659],{},[20,26660],{"alt":22,"src":26661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26663,26664],{},"第三行显示enabled说明开机自启动成功",[14,26666,26667],{},"按q退出",[86,26669,26671],{"id":26670},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26673,26674],{},"优先使用linux来使用docker是比较好的",[14,26676,26677],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26679,26680],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26682,26683,26684],{},"官方下载安装:",[27,26685,26686],{"href":26686,"rel":26687},"https:\u002F\u002Fwww.docker.com\u002F",[31],[14,26689,26690],{},"Windows的Docker显卡直通与USB直通:",[14,26692,26693],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26695,26696],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26698,26699],{},[20,26700],{"alt":22,"src":26701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26703,26704],{},[20,26705],{"alt":22,"src":26706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26708,26709],{},[20,26710],{"alt":22,"src":26711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5127,26713,26714],{},"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":22,"searchDepth":37,"depth":37,"links":26716},[26717,26718,26719],{"id":25994,"depth":1180,"text":25995},{"id":26466,"depth":1180,"text":26467},{"id":26670,"depth":1180,"text":26671},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25986,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26726,"title":26727,"body":26728,"description":26735,"extension":40,"meta":27428,"navigation":42,"path":27429,"seo":27430,"stem":27431,"__hash__":27432},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26729,"toc":27422},[26730,26733,26736,26740,26745,26750,26753,26781,26786,26795,26798,26803,26807,26814,26819,26825,26829,26832,26836,26841,26933,26938,26956,26961,26982,26987,27003,27007,27012,27041,27046,27092,27097,27141,27149,27166,27171,27187,27192,27206,27209,27212,27215,27218,27247,27250,27255,27259,27262,27265,27271,27274,27277,27280,27342,27349,27354,27357,27375,27379,27382,27399,27402,27405,27419],[10,26731,26727],{"id":26732},"_3docker直通",[14,26734,26735],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[86,26737,26739],{"id":26738},"_31usb直通","3.1.USB直通",[14,26741,26742],{},[20,26743],{"alt":22,"src":26744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[69,26746,26747],{},[72,26748,26749],{},"方法一(不是很推荐新手)：",[14,26751,26752],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[106,26754,26756],{"className":23823,"code":26755,"language":23825,"meta":22,"style":22},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[112,26757,26758,26766,26771],{"__ignoreMap":22},[115,26759,26760,26763],{"class":117,"line":118},[115,26761,26762],{"class":1963},"ls",[115,26764,26765],{"class":230}," \u002Fdev\n",[115,26767,26768],{"class":117,"line":37},[115,26769,26770],{"class":184},"#例如\n",[115,26772,26773,26776,26778],{"class":117,"line":1180},[115,26774,26775],{"class":125},"--device",[115,26777,171],{"class":121},[115,26779,26780],{"class":230},"\u002Fdev\u002Ftty_USB0\n",[69,26782,26783],{"start":37},[72,26784,26785],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[106,26787,26789],{"className":23823,"code":26788,"language":23825,"meta":22,"style":22},"--privileged\n",[112,26790,26791],{"__ignoreMap":22},[115,26792,26793],{"class":117,"line":118},[115,26794,26788],{"class":1963},[14,26796,26797],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26799,26800],{},[20,26801],{"alt":22,"src":26802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[86,26804,26806],{"id":26805},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26808,26809,26810,26813],{},"NVIDIA Container Toolkit使用户 ",[275,26811,26812],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26815,26816],{},[20,26817],{"alt":22,"src":26818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26820,26821],{},[27,26822,26823],{"href":26823,"rel":26824},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[31],[21999,26826,26828],{"id":26827},"_321安装","3.2.1.安装",[14,26830,26831],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22911,26833,26835],{"id":26834},"_3211ubuntu","3.2.1.1.Ubuntu",[69,26837,26838],{},[72,26839,26840],{},"配置存储库 并更新",[106,26842,26844],{"className":23823,"code":26843,"language":23825,"meta":22,"style":22},"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",[112,26845,26846,26875,26895,26907,26919,26925],{"__ignoreMap":22},[115,26847,26848,26851,26854,26857,26859,26861,26864,26867,26870,26873],{"class":117,"line":118},[115,26849,26850],{"class":1963},"curl",[115,26852,26853],{"class":174}," -fsSL",[115,26855,26856],{"class":230}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[115,26858,25110],{"class":121},[115,26860,26074],{"class":1963},[115,26862,26863],{"class":230}," gpg",[115,26865,26866],{"class":174}," --dearmor",[115,26868,26869],{"class":174}," -o",[115,26871,26872],{"class":230}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[115,26874,24679],{"class":174},[115,26876,26877,26880,26882,26885,26888,26891,26893],{"class":117,"line":37},[115,26878,26879],{"class":125},"  && ",[115,26881,26850],{"class":1963},[115,26883,26884],{"class":174}," -s",[115,26886,26887],{"class":174}," -L",[115,26889,26890],{"class":230}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[115,26892,25110],{"class":121},[115,26894,24679],{"class":174},[115,26896,26897,26900,26903,26905],{"class":117,"line":1180},[115,26898,26899],{"class":1963},"    sed",[115,26901,26902],{"class":230}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[115,26904,25110],{"class":121},[115,26906,24679],{"class":174},[115,26908,26909,26912,26914,26917],{"class":117,"line":1195},[115,26910,26911],{"class":1963},"    sudo",[115,26913,26217],{"class":230},[115,26915,26916],{"class":230}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[115,26918,24679],{"class":174},[115,26920,26921,26923],{"class":117,"line":1201},[115,26922,26879],{"class":125},[115,26924,26176],{"class":174},[115,26926,26927,26929,26931],{"class":117,"line":1215},[115,26928,26911],{"class":1963},[115,26930,26077],{"class":230},[115,26932,26243],{"class":230},[69,26934,26935],{"start":37},[72,26936,26937],{},"安装nvidia-docker2",[106,26939,26941],{"className":23823,"code":26940,"language":23825,"meta":22,"style":22},"sudo apt-get install -y nvidia-docker2\n",[112,26942,26943],{"__ignoreMap":22},[115,26944,26945,26947,26949,26951,26953],{"class":117,"line":118},[115,26946,24577],{"class":1963},[115,26948,26077],{"class":230},[115,26950,23835],{"class":230},[115,26952,26401],{"class":174},[115,26954,26955],{"class":230}," nvidia-docker2\n",[69,26957,26958],{"start":1180},[72,26959,26960],{},"使用nvidia-ctk命令配置container runtime",[106,26962,26964],{"className":23823,"code":26963,"language":23825,"meta":22,"style":22},"sudo nvidia-ctk runtime configure --runtime=docker\n",[112,26965,26966],{"__ignoreMap":22},[115,26967,26968,26970,26973,26976,26979],{"class":117,"line":118},[115,26969,24577],{"class":1963},[115,26971,26972],{"class":230}," nvidia-ctk",[115,26974,26975],{"class":230}," runtime",[115,26977,26978],{"class":230}," configure",[115,26980,26981],{"class":174}," --runtime=docker\n",[69,26983,26984],{"start":1195},[72,26985,26986],{},"重启docker服务:",[106,26988,26990],{"className":23823,"code":26989,"language":23825,"meta":22,"style":22},"sudo systemctl restart docker\n",[112,26991,26992],{"__ignoreMap":22},[115,26993,26994,26996,26998,27001],{"class":117,"line":118},[115,26995,24577],{"class":1963},[115,26997,26514],{"class":230},[115,26999,27000],{"class":230}," restart",[115,27002,26493],{"class":230},[22911,27004,27006],{"id":27005},"_3212fedora","3.2.1.2.Fedora",[69,27008,27009],{},[72,27010,27011],{},"配置存储库",[106,27013,27015],{"className":23823,"code":27014,"language":23825,"meta":22,"style":22},"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",[112,27016,27017,27032],{"__ignoreMap":22},[115,27018,27019,27021,27023,27025,27028,27030],{"class":117,"line":118},[115,27020,26850],{"class":1963},[115,27022,26884],{"class":174},[115,27024,26887],{"class":174},[115,27026,27027],{"class":230}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[115,27029,25110],{"class":121},[115,27031,24679],{"class":174},[115,27033,27034,27036,27038],{"class":117,"line":37},[115,27035,24577],{"class":1963},[115,27037,26217],{"class":230},[115,27039,27040],{"class":230}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[69,27042,27043],{"start":37},[72,27044,27045],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[106,27047,27049],{"className":23823,"code":27048,"language":23825,"meta":22,"style":22},"# 如果是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",[112,27050,27051,27056,27070,27074,27079],{"__ignoreMap":22},[115,27052,27053],{"class":117,"line":118},[115,27054,27055],{"class":184},"# 如果是RHEL或者Rocky（DNF4）\n",[115,27057,27058,27060,27062,27064,27067],{"class":117,"line":37},[115,27059,24577],{"class":1963},[115,27061,26316],{"class":230},[115,27063,26415],{"class":230},[115,27065,27066],{"class":174}," --add-repo",[115,27068,27069],{"class":230}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[115,27071,27072],{"class":117,"line":1180},[115,27073,2400],{"emptyLinePlaceholder":42},[115,27075,27076],{"class":117,"line":1195},[115,27077,27078],{"class":184},"# 如果是Feodra41+（DNF5）\n",[115,27080,27081,27083,27085,27087,27089],{"class":117,"line":1201},[115,27082,24577],{"class":1963},[115,27084,26316],{"class":230},[115,27086,26415],{"class":230},[115,27088,26418],{"class":230},[115,27090,27091],{"class":174}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[69,27093,27094],{"start":1180},[72,27095,27096],{},"安装NVIDIA Container Toolki包",[106,27098,27100],{"className":23823,"code":27099,"language":23825,"meta":22,"style":22},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[112,27101,27102,27107,27120,27124,27129],{"__ignoreMap":22},[115,27103,27104],{"class":117,"line":118},[115,27105,27106],{"class":184},"# 如果是RHEL或者Rocky\n",[115,27108,27109,27111,27113,27115,27117],{"class":117,"line":37},[115,27110,24577],{"class":1963},[115,27112,26316],{"class":230},[115,27114,23835],{"class":230},[115,27116,26401],{"class":174},[115,27118,27119],{"class":230}," nvidia-container-toolkit\n",[115,27121,27122],{"class":117,"line":1180},[115,27123,2400],{"emptyLinePlaceholder":42},[115,27125,27126],{"class":117,"line":1195},[115,27127,27128],{"class":184},"# 如果是Fedora\n",[115,27130,27131,27133,27135,27137,27139],{"class":117,"line":1201},[115,27132,24577],{"class":1963},[115,27134,26316],{"class":230},[115,27136,23835],{"class":230},[115,27138,26401],{"class":174},[115,27140,27119],{"class":230},[69,27142,27143],{"start":1195},[72,27144,27145,27146,27148],{},"安装nvidia-docker2 ： 在Fedora上使用",[112,27147,26291],{},"进行安装",[106,27150,27152],{"className":23823,"code":27151,"language":23825,"meta":22,"style":22},"sudo dnf install -y nvidia-docker2\n",[112,27153,27154],{"__ignoreMap":22},[115,27155,27156,27158,27160,27162,27164],{"class":117,"line":118},[115,27157,24577],{"class":1963},[115,27159,26316],{"class":230},[115,27161,23835],{"class":230},[115,27163,26401],{"class":174},[115,27165,26955],{"class":230},[69,27167,27168],{"start":1201},[72,27169,27170],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[106,27172,27173],{"className":23823,"code":26963,"language":23825,"meta":22,"style":22},[112,27174,27175],{"__ignoreMap":22},[115,27176,27177,27179,27181,27183,27185],{"class":117,"line":118},[115,27178,24577],{"class":1963},[115,27180,26972],{"class":230},[115,27182,26975],{"class":230},[115,27184,26978],{"class":230},[115,27186,26981],{"class":174},[69,27188,27189],{"start":1215},[72,27190,27191],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[106,27193,27194],{"className":23823,"code":26989,"language":23825,"meta":22,"style":22},[112,27195,27196],{"__ignoreMap":22},[115,27197,27198,27200,27202,27204],{"class":117,"line":118},[115,27199,24577],{"class":1963},[115,27201,26514],{"class":230},[115,27203,27000],{"class":230},[115,27205,26493],{"class":230},[14,27207,27208],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27210,27211],{},"方法：",[14,27213,27214],{},"1️⃣nvidia-smi",[14,27216,27217],{},"2️⃣运行nvidia cuda 容器进行测试",[106,27219,27221],{"className":23823,"code":27220,"language":23825,"meta":22,"style":22},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[112,27222,27223],{"__ignoreMap":22},[115,27224,27225,27227,27229,27232,27235,27238,27241,27244],{"class":117,"line":118},[115,27226,24577],{"class":1963},[115,27228,26321],{"class":230},[115,27230,27231],{"class":230}," run",[115,27233,27234],{"class":174}," --rm",[115,27236,27237],{"class":174}," --gpus",[115,27239,27240],{"class":230}," all",[115,27242,27243],{"class":230}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[115,27245,27246],{"class":230}," nvidia-smi\n",[14,27248,27249],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27251,27252],{},[20,27253],{"alt":22,"src":27254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[86,27256,27258],{"id":27257},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27260,27261],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27263,27264],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27266,27267],{},[27,27268,27269],{"href":27269,"rel":27270},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[31],[14,27272,27273],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27275,27276],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27278,27279],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[263,27281,27282,27298],{},[266,27283,27284],{},[269,27285,27286,27289,27292,27295],{},[272,27287,27288],{"align":23737},"镜像类型",[272,27290,27291],{"align":23737},"适用场景",[272,27293,27294],{"align":23737},"示例标签",[272,27296,27297],{"align":23737},"大小",[310,27299,27300,27314,27328],{},[269,27301,27302,27305,27308,27311],{},[315,27303,27304],{"align":23737},"base",[315,27306,27307],{"align":23737},"仅需 CUDA 运行时库",[315,27309,27310],{"align":23737},"12.4.0-base-ubuntu22.04",[315,27312,27313],{"align":23737},"~240MB",[269,27315,27316,27319,27322,27325],{},[315,27317,27318],{"align":23737},"runtime",[315,27320,27321],{"align":23737},"部署编译后的应用（含数学库）",[315,27323,27324],{"align":23737},"12.4.0-runtime-ubuntu22.04",[315,27326,27327],{"align":23737},"~2GB",[269,27329,27330,27333,27336,27339],{},[315,27331,27332],{"align":23737},"devel",[315,27334,27335],{"align":23737},"开发环境（含编译工具）",[315,27337,27338],{"align":23737},"12.4.0-devel-ubuntu22.04",[315,27340,27341],{"align":23737},"~3GB",[14,27343,27344,27345,27348],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[112,27346,27347],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27350,27351],{},[20,27352],{"alt":22,"src":27353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27355,27356],{},"在dockerfile里就可以开头这么写：",[106,27358,27360],{"className":23823,"code":27359,"language":23825,"meta":22,"style":22},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[112,27361,27362,27367],{"__ignoreMap":22},[115,27363,27364],{"class":117,"line":118},[115,27365,27366],{"class":184},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[115,27368,27369,27372],{"class":117,"line":37},[115,27370,27371],{"class":1963},"FROM",[115,27373,27374],{"class":230}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[86,27376,27378],{"id":27377},"_34配置以太网","3.4.配置以太网",[14,27380,27381],{},"指定网络模式",[106,27383,27385],{"className":23823,"code":27384,"language":23825,"meta":22,"style":22},"--net=host \\\n",[112,27386,27387],{"__ignoreMap":22},[115,27388,27389,27392,27394,27397],{"class":117,"line":118},[115,27390,27391],{"class":125},"--net",[115,27393,171],{"class":121},[115,27395,27396],{"class":230},"host",[115,27398,24679],{"class":1963},[14,27400,27401],{},"启动参数里加上这行即可。具体在下方",[14,27403,27404],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1132,27406,27407,27410,27413,27416],{},[72,27408,27409],{},"--net=bridge:默认选项，表示连接到默认的网桥",[72,27411,27412],{},"--net=host:容器使用宿主机的网络",[72,27414,27415],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[72,27417,27418],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5127,27420,27421],{},"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":22,"searchDepth":37,"depth":37,"links":27423},[27424,27425,27426,27427],{"id":26738,"depth":1180,"text":26739},{"id":26805,"depth":1180,"text":26806},{"id":27257,"depth":1180,"text":27258},{"id":27377,"depth":1180,"text":27378},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26727,"description":26735},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27434,"title":27435,"body":27436,"description":27443,"extension":40,"meta":27449,"navigation":42,"path":27450,"seo":27451,"stem":27452,"__hash__":27453},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27437,"toc":27447},[27438,27441,27444],[10,27439,27435],{"id":27440},"_4dockerhub换源",[14,27442,27443],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27445,27446],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":22,"searchDepth":37,"depth":37,"links":27448},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27435,"description":27443},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27455,"title":27456,"body":27457,"description":22,"extension":40,"meta":28469,"navigation":42,"path":28470,"seo":28471,"stem":28472,"__hash__":28473},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27458,"toc":28464},[27459,27462,27466,27472,27476,27479,27819,27822,27825,27828,27833,27838,27841,27844,27847,27850,27869,27872,27883,27889,28071,28081,28097,28360,28362,28387,28402,28411,28461],[10,27460,27456],{"id":27461},"_5docker命令学习",[86,27463,27465],{"id":27464},"_51参考文档","5.1.参考文档",[14,27467,27468],{},[27,27469,27470],{"href":27470,"rel":27471},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[31],[86,27473,27475],{"id":27474},"_52常用命令","5.2.常用命令",[14,27477,27478],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[263,27480,27481,27494],{},[266,27482,27483],{},[269,27484,27485,27488,27491],{},[272,27486,27487],{"align":23737},"命令",[272,27489,27490],{"align":23737},"描述",[272,27492,27493],{"align":23737},"示例",[310,27495,27496,27507,27518,27529,27540,27551,27562,27573,27583,27594,27605,27616,27626,27637,27648,27659,27669,27679,27689,27699,27710,27721,27732,27743,27754,27765,27775,27786,27797,27808],{},[269,27497,27498,27501,27504],{},[315,27499,27500],{"align":23737},"docker run",[315,27502,27503],{"align":23737},"创建并启动一个新的容器。",[315,27505,27506],{"align":23737},"docker run -it ubuntu bash",[269,27508,27509,27512,27515],{},[315,27510,27511],{"align":23737},"docker build",[315,27513,27514],{"align":23737},"通过指定的 Dockerfile 创建一个新的镜像。",[315,27516,27517],{"align":23737},"docker build -t myimage .",[269,27519,27520,27523,27526],{},[315,27521,27522],{"align":23737},"docker pull",[315,27524,27525],{"align":23737},"从 Docker 仓库拉取镜像。",[315,27527,27528],{"align":23737},"docker pull ubuntu",[269,27530,27531,27534,27537],{},[315,27532,27533],{"align":23737},"docker push",[315,27535,27536],{"align":23737},"将本地镜像推送到 Docker 仓库。",[315,27538,27539],{"align":23737},"docker push myimage",[269,27541,27542,27545,27548],{},[315,27543,27544],{"align":23737},"docker stop",[315,27546,27547],{"align":23737},"停止一个正在运行的容器。",[315,27549,27550],{"align":23737},"docker stop container_id",[269,27552,27553,27556,27559],{},[315,27554,27555],{"align":23737},"docker start",[315,27557,27558],{"align":23737},"启动一个已经存在的容器。",[315,27560,27561],{"align":23737},"docker start container_id",[269,27563,27564,27567,27570],{},[315,27565,27566],{"align":23737},"docker restart",[315,27568,27569],{"align":23737},"重新启动容器。",[315,27571,27572],{"align":23737},"docker restart container_id",[269,27574,27575,27578,27581],{},[315,27576,27577],{"align":23737},"docker ps",[315,27579,27580],{"align":23737},"列出当前正在运行的容器。",[315,27582,27577],{"align":23737},[269,27584,27585,27588,27591],{},[315,27586,27587],{"align":23737},"docker rm",[315,27589,27590],{"align":23737},"删除一个或多个停止的容器。",[315,27592,27593],{"align":23737},"docker rm container_id",[269,27595,27596,27599,27602],{},[315,27597,27598],{"align":23737},"docker exec",[315,27600,27601],{"align":23737},"在一个正在运行的容器中执行命令。",[315,27603,27604],{"align":23737},"docker exec -it container_id bash",[269,27606,27607,27610,27613],{},[315,27608,27609],{"align":23737},"docker logs",[315,27611,27612],{"align":23737},"查看容器的日志输出。",[315,27614,27615],{"align":23737},"docker logs container_id",[269,27617,27618,27621,27624],{},[315,27619,27620],{"align":23737},"docker images",[315,27622,27623],{"align":23737},"列出本地所有镜像。",[315,27625,27620],{"align":23737},[269,27627,27628,27631,27634],{},[315,27629,27630],{"align":23737},"docker rmi",[315,27632,27633],{"align":23737},"删除一个或多个镜像。",[315,27635,27636],{"align":23737},"docker rmi myimage",[269,27638,27639,27642,27645],{},[315,27640,27641],{"align":23737},"docker network",[315,27643,27644],{"align":23737},"管理 Docker 网络。",[315,27646,27647],{"align":23737},"docker network ls",[269,27649,27650,27653,27656],{},[315,27651,27652],{"align":23737},"docker volume",[315,27654,27655],{"align":23737},"管理 Docker 数据卷。",[315,27657,27658],{"align":23737},"docker volume ls",[269,27660,27661,27664,27667],{},[315,27662,27663],{"align":23737},"docker-compose up",[315,27665,27666],{"align":23737},"启动 docker-compose.yml 中定义的所有服务。",[315,27668,27663],{"align":23737},[269,27670,27671,27674,27677],{},[315,27672,27673],{"align":23737},"docker-compose down",[315,27675,27676],{"align":23737},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[315,27678,27673],{"align":23737},[269,27680,27681,27684,27687],{},[315,27682,27683],{"align":23737},"docker info",[315,27685,27686],{"align":23737},"显示 Docker 系统的详细信息。",[315,27688,27683],{"align":23737},[269,27690,27691,27694,27697],{},[315,27692,27693],{"align":23737},"docker stats",[315,27695,27696],{"align":23737},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[315,27698,27693],{"align":23737},[269,27700,27701,27704,27707],{},[315,27702,27703],{"align":23737},"docker inspect",[315,27705,27706],{"align":23737},"查看容器或镜像的详细信息（JSON 格式）。",[315,27708,27709],{"align":23737},"docker inspect container_id",[269,27711,27712,27715,27718],{},[315,27713,27714],{"align":23737},"docker save",[315,27716,27717],{"align":23737},"将一个镜像保存为 tar 文件。",[315,27719,27720],{"align":23737},"docker save -o myimage.tar myimage",[269,27722,27723,27726,27729],{},[315,27724,27725],{"align":23737},"docker load",[315,27727,27728],{"align":23737},"从 tar 文件中加载镜像。",[315,27730,27731],{"align":23737},"docker load -i myimage.tar",[269,27733,27734,27737,27740],{},[315,27735,27736],{"align":23737},"docker tag",[315,27738,27739],{"align":23737},"为镜像添加标签（tag）。",[315,27741,27742],{"align":23737},"docker tag myimage myimage:v1",[269,27744,27745,27748,27751],{},[315,27746,27747],{"align":23737},"docker buildx build",[315,27749,27750],{"align":23737},"使用 Buildx 构建多架构镜像。",[315,27752,27753],{"align":23737},"docker buildx build -t myimage .",[269,27755,27756,27759,27762],{},[315,27757,27758],{"align":23737},"docker buildx create",[315,27760,27761],{"align":23737},"创建一个新的 Buildx 构建实例。",[315,27763,27764],{"align":23737},"docker buildx create –use",[269,27766,27767,27770,27773],{},[315,27768,27769],{"align":23737},"docker buildx ls",[315,27771,27772],{"align":23737},"列出所有可用的 Buildx 构建实例。",[315,27774,27769],{"align":23737},[269,27776,27777,27780,27783],{},[315,27778,27779],{"align":23737},"docker buildx use",[315,27781,27782],{"align":23737},"设置当前的 Buildx 构建实例。",[315,27784,27785],{"align":23737},"docker buildx use mybuilder",[269,27787,27788,27791,27794],{},[315,27789,27790],{"align":23737},"docker buildx bake",[315,27792,27793],{"align":23737},"使用 Bake 文件批量构建镜像。",[315,27795,27796],{"align":23737},"docker buildx bake -f bake.hcl",[269,27798,27799,27802,27805],{},[315,27800,27801],{"align":23737},"docker buildx build –push",[315,27803,27804],{"align":23737},"构建镜像并推送到镜像仓库。",[315,27806,27807],{"align":23737},"docker buildx build –push -t myimage .",[269,27809,27810,27813,27816],{},[315,27811,27812],{"align":23737},"docker buildx build –platform",[315,27814,27815],{"align":23737},"构建镜像并为多个平台生成支持。",[315,27817,27818],{"align":23737},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27820,27821],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27823,27824],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27826,27827],{},"docker images 可以查看已经下载的镜像",[14,27829,27830],{},[20,27831],{"alt":22,"src":27832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27834,27835],{},[275,27836,27837],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27839,27840],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27842,27843],{},"docker container logs 查看容器日志",[14,27845,27846],{},"docker top 查看容器里的进程",[14,27848,27849],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[106,27851,27853],{"className":23823,"code":27852,"language":23825,"meta":22,"style":22},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[112,27854,27855],{"__ignoreMap":22},[115,27856,27857,27860,27863,27866],{"class":117,"line":118},[115,27858,27859],{"class":1963},"如：docker",[115,27861,27862],{"class":230}," cp",[115,27864,27865],{"class":230}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[115,27867,27868],{"class":230}," \u002Fmydata\u002Fnginx\n",[14,27870,27871],{},"docker run时在启动容器的时候会有几个常用的选项：",[1132,27873,27874,27877,27880],{},[72,27875,27876],{},"-d选项：表示后台运行",[72,27878,27879],{},"-P选项：随机端口映射",[72,27881,27882],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[86,27884,27886],{"id":27885},"_53run命令的参数非常重要",[275,27887,27888],{},"5.3.run命令的参数（非常重要）",[263,27890,27891,27904],{},[266,27892,27893],{},[269,27894,27895,27898,27901],{},[272,27896,27897],{"align":23737},"参数\u002F配置",[272,27899,27900],{"align":23737},"功能说明",[272,27902,27903],{"align":23737},"重要性与参考依据",[310,27905,27906,27917,27928,27939,27950,27961,27972,27983,27994,28005,28016,28027,28038,28049,28060],{},[269,27907,27908,27911,27914],{},[315,27909,27910],{"align":23737},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[315,27912,27913],{"align":23737},"指定容器名称，便于后续管理",[315,27915,27916],{"align":23737},"替代随机生成的容器名。",[269,27918,27919,27922,27925],{},[315,27920,27921],{"align":23737},"–gpus all",[315,27923,27924],{"align":23737},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[315,27926,27927],{"align":23737},"用于CUDA加速等GPU依赖任务。",[269,27929,27930,27933,27936],{},[315,27931,27932],{"align":23737},"-e NVIDIA_DRIVER_CAPABILITIES=all",[315,27934,27935],{"align":23737},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[315,27937,27938],{"align":23737},"确保容器内GPU功能完整67。",[269,27940,27941,27944,27947],{},[315,27942,27943],{"align":23737},"-dit",[315,27945,27946],{"align":23737},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[315,27948,27949],{"align":23737},"允许容器在后台运行并支持交互操作。",[269,27951,27952,27955,27958],{},[315,27953,27954],{"align":23737},"–privileged",[315,27956,27957],{"align":23737},"赋予容器完全主机权限（可访问设备、内核模块等）",[315,27959,27960],{"align":23737},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[269,27962,27963,27966,27969],{},[315,27964,27965],{"align":23737},"–net=host",[315,27967,27968],{"align":23737},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[315,27970,27971],{"align":23737},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[269,27973,27974,27977,27980],{},[315,27975,27976],{"align":23737},"–group-add audio–group-add video–group-add dialout",[315,27978,27979],{"align":23737},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[315,27981,27982],{"align":23737},"避免权限问题（如避免无法调用摄像头、麦克风）。",[269,27984,27985,27988,27991],{},[315,27986,27987],{"align":23737},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[315,27989,27990],{"align":23737},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[315,27992,27993],{"align":23737},"支持容器内运行图形界面应用（如OpenCV可视化）。",[269,27995,27996,27999,28002],{},[315,27997,27998],{"align":23737},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[315,28000,28001],{"align":23737},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[315,28003,28004],{"align":23737},"实现容器内图形显示。",[269,28006,28007,28010,28013],{},[315,28008,28009],{"align":23737},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[315,28011,28012],{"align":23737},"挂载X11认证文件（只读）",[315,28014,28015],{"align":23737},"确保容器有权连接宿主机显示服务。",[269,28017,28018,28021,28024],{},[315,28019,28020],{"align":23737},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[315,28022,28023],{"align":23737},"挂载Wayland显示协议相关目录",[315,28025,28026],{"align":23737},"支持Wayland协议的图形显示。",[269,28028,28029,28032,28035],{},[315,28030,28031],{"align":23737},"–ulimit nofile=1024:524288",[315,28033,28034],{"align":23737},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[315,28036,28037],{"align":23737},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[269,28039,28040,28043,28046],{},[315,28041,28042],{"align":23737},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[315,28044,28045],{"align":23737},"挂载宿主机用户目录到容器内同名路径",[315,28047,28048],{"align":23737},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[269,28050,28051,28054,28057],{},[315,28052,28053],{"align":23737},"-w \u002Fhome\u002Ftungchiahui",[315,28055,28056],{"align":23737},"设置容器启动后的默认工作目录",[315,28058,28059],{"align":23737},"直接进入项目路径，方便执行命令2324。",[269,28061,28062,28065,28068],{},[315,28063,28064],{"align":23737},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[315,28066,28067],{"align":23737},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[315,28069,28070],{"align":23737},"提供预配置的深度学习与机器人开发环境。",[14,28072,28073,28074,28076,28077,28080],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[112,28075,24577],{},"加不加",[112,28078,28079],{},"sudo -E","都无所谓。",[14,28082,28083,28084,28086,28087,28089,28090,28093,28094,28096],{},"用户已经被加到docker组了，不用",[112,28085,24577],{},"也行跑，其次，",[112,28088,24577],{},"运行的话，你的",[112,28091,28092],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[112,28095,28092],{},"更不可能变了。",[106,28098,28100],{"className":23823,"code":28099,"language":23825,"meta":22,"style":22},"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",[112,28101,28102,28115,28125,28135,28147,28154,28161,28168,28178,28187,28196,28210,28222,28234,28243,28253,28262,28277,28310,28337,28348,28355],{"__ignoreMap":22},[115,28103,28104,28106,28108,28110,28113],{"class":117,"line":118},[115,28105,24577],{"class":1963},[115,28107,26321],{"class":230},[115,28109,27231],{"class":230},[115,28111,28112],{"class":174}," --name=ros_opencv_cuda",[115,28114,24679],{"class":174},[115,28116,28117,28120,28123],{"class":117,"line":37},[115,28118,28119],{"class":125},"--gpus ",[115,28121,28122],{"class":230},"all",[115,28124,24679],{"class":174},[115,28126,28127,28130,28133],{"class":117,"line":1180},[115,28128,28129],{"class":125},"-e ",[115,28131,28132],{"class":230},"NVIDIA_DRIVER_CAPABILITIES=all",[115,28134,24679],{"class":174},[115,28136,28137,28139,28142,28145],{"class":117,"line":1195},[115,28138,28129],{"class":125},[115,28140,28141],{"class":230},"DISPLAY=",[115,28143,28144],{"class":125},"$DISPLAY ",[115,28146,26176],{"class":174},[115,28148,28149,28152],{"class":117,"line":1201},[115,28150,28151],{"class":125},"-dit ",[115,28153,26176],{"class":174},[115,28155,28156,28159],{"class":117,"line":1215},[115,28157,28158],{"class":125},"--privileged ",[115,28160,26176],{"class":174},[115,28162,28163,28166],{"class":117,"line":1221},[115,28164,28165],{"class":125},"--net=host ",[115,28167,26176],{"class":174},[115,28169,28170,28173,28176],{"class":117,"line":1312},[115,28171,28172],{"class":125},"--group-add ",[115,28174,28175],{"class":230},"audio",[115,28177,24679],{"class":174},[115,28179,28180,28182,28185],{"class":117,"line":1318},[115,28181,28172],{"class":125},[115,28183,28184],{"class":230},"video",[115,28186,24679],{"class":174},[115,28188,28189,28191,28194],{"class":117,"line":1330},[115,28190,28172],{"class":125},[115,28192,28193],{"class":230},"dialout",[115,28195,24679],{"class":174},[115,28197,28198,28200,28203,28205,28208],{"class":117,"line":1612},[115,28199,28129],{"class":125},[115,28201,28202],{"class":230},"XAUTHORITY=",[115,28204,28092],{"class":125},[115,28206,28207],{"class":230},"\u002F.Xauthority",[115,28209,24679],{"class":174},[115,28211,28212,28214,28217,28220],{"class":117,"line":1617},[115,28213,28129],{"class":125},[115,28215,28216],{"class":230},"WAYLAND_DISPLAY=",[115,28218,28219],{"class":125},"$WAYLAND_DISPLAY ",[115,28221,26176],{"class":174},[115,28223,28224,28226,28229,28232],{"class":117,"line":1623},[115,28225,28129],{"class":125},[115,28227,28228],{"class":230},"XDG_RUNTIME_DIR=",[115,28230,28231],{"class":125},"$XDG_RUNTIME_DIR ",[115,28233,26176],{"class":174},[115,28235,28236,28238,28241],{"class":117,"line":1628},[115,28237,28129],{"class":125},[115,28239,28240],{"class":230},"QT_QPA_PLATFORM=xcb",[115,28242,24679],{"class":174},[115,28244,28245,28248,28251],{"class":117,"line":1642},[115,28246,28247],{"class":125},"-v ",[115,28249,28250],{"class":230},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[115,28252,24679],{"class":174},[115,28254,28255,28257,28260],{"class":117,"line":1647},[115,28256,28247],{"class":125},[115,28258,28259],{"class":230},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[115,28261,24679],{"class":174},[115,28263,28264,28267,28270,28272,28275],{"class":117,"line":1653},[115,28265,28266],{"class":125},"-v $HOME",[115,28268,28269],{"class":230},"\u002F.Xauthority:",[115,28271,28092],{"class":125},[115,28273,28274],{"class":230},"\u002F.Xauthority:ro",[115,28276,24679],{"class":174},[115,28278,28279,28281,28284,28286,28289,28292,28294,28297,28299,28301,28303,28305,28308],{"class":117,"line":1674},[115,28280,28247],{"class":125},[115,28282,28283],{"class":230},"\u002Frun\u002Fuser\u002F",[115,28285,25100],{"class":125},[115,28287,28288],{"class":1963},"id",[115,28290,28291],{"class":174}," -u",[115,28293,554],{"class":125},[115,28295,28296],{"class":230},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[115,28298,25100],{"class":125},[115,28300,28288],{"class":1963},[115,28302,28291],{"class":174},[115,28304,554],{"class":125},[115,28306,28307],{"class":230},"\u002Fwayland-0",[115,28309,24679],{"class":174},[115,28311,28312,28314,28316,28318,28320,28322,28324,28327,28329,28331,28333,28335],{"class":117,"line":1679},[115,28313,28247],{"class":125},[115,28315,28283],{"class":230},[115,28317,25100],{"class":125},[115,28319,28288],{"class":1963},[115,28321,28291],{"class":174},[115,28323,554],{"class":125},[115,28325,28326],{"class":230},":\u002Frun\u002Fuser\u002F",[115,28328,25100],{"class":125},[115,28330,28288],{"class":1963},[115,28332,28291],{"class":174},[115,28334,13715],{"class":125},[115,28336,26176],{"class":174},[115,28338,28339,28341,28343,28346],{"class":117,"line":1693},[115,28340,28266],{"class":125},[115,28342,984],{"class":230},[115,28344,28345],{"class":125},"$HOME ",[115,28347,26176],{"class":174},[115,28349,28350,28353],{"class":117,"line":1698},[115,28351,28352],{"class":125},"-w $HOME ",[115,28354,26176],{"class":174},[115,28356,28357],{"class":117,"line":1727},[115,28358,28359],{"class":125},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28361,9026],{},[69,28363,28364,28372,28375,28378],{},[72,28365,28366,13796,28368,28371],{},[112,28367,28132],{},[112,28369,28370],{},"--gpus all","没有英伟达显卡请注释。",[72,28373,28374],{},"--name后面请自己为容器起名。",[72,28376,28377],{},"最后一行仓库名称请你自己找对应的镜像填上。",[72,28379,28380,28381,28386],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23554,28382,28383],{},[275,28384,28385],{},"请不要加","。",[106,28388,28390],{"className":23823,"code":28389,"language":23825,"meta":22,"style":22},"--ulimit nofile=1024:524288 \\\n",[112,28391,28392],{"__ignoreMap":22},[115,28393,28394,28397,28400],{"class":117,"line":118},[115,28395,28396],{"class":1963},"--ulimit",[115,28398,28399],{"class":230}," nofile=1024:524288",[115,28401,24679],{"class":174},[14,28403,28404,28405,28410],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23554,28406,28407],{},[275,28408,28409],{},"不建议","**.**",[106,28412,28414],{"className":23823,"code":28413,"language":23825,"meta":22,"style":22},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[112,28415,28416,28443,28452],{"__ignoreMap":22},[115,28417,28418,28421,28424,28426,28428,28430,28432,28434,28436,28439,28441],{"class":117,"line":118},[115,28419,28420],{"class":1963},"--user",[115,28422,28423],{"class":125}," $(",[115,28425,28288],{"class":1963},[115,28427,28291],{"class":174},[115,28429,554],{"class":125},[115,28431,984],{"class":230},[115,28433,25100],{"class":125},[115,28435,28288],{"class":1963},[115,28437,28438],{"class":174}," -g",[115,28440,13715],{"class":125},[115,28442,26176],{"class":174},[115,28444,28445,28447,28450],{"class":117,"line":37},[115,28446,28247],{"class":125},[115,28448,28449],{"class":230},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[115,28451,24679],{"class":174},[115,28453,28454,28456,28459],{"class":117,"line":1180},[115,28455,28247],{"class":125},[115,28457,28458],{"class":230},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[115,28460,24679],{"class":174},[5127,28462,28463],{},"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":22,"searchDepth":37,"depth":37,"links":28465},[28466,28467,28468],{"id":27464,"depth":1180,"text":27465},{"id":27474,"depth":1180,"text":27475},{"id":27885,"depth":1180,"text":27888},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27456,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28475,"title":28476,"body":28477,"description":22,"extension":40,"meta":30100,"navigation":42,"path":30101,"seo":30102,"stem":30103,"__hash__":30104},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28478,"toc":30095},[28479,28482,28486,28489,28711,28715,28719,28722,28828,28833,28836,28841,28844,28849,28852,28857,28860,28872,28875,28880,28887,28915,28922,28998,29003,29006,29029,29031,29106,29111,29114,29118,29126,29131,29136,29140,29151,29157,29160,29163,29187,29190,29193,29221,29224,29227,29692,29695,29700,29705,29709,29732,29737,29741,29745,29748,29751,29754,29781,29784,29787,29805,29808,29811,29833,29841,29846,29851,29855,29858,29861,29864,29867,29912,29915,29933,29936,29941,29944,29965,29968,30024,30027,30032,30036,30039,30046,30049,30052,30057,30060,30076,30079,30092],[10,28480,28476],{"id":28481},"_6手动创建docker镜像",[86,28483,28485],{"id":28484},"_61dockerfile","6.1.DockerFile",[14,28487,28488],{},"常用命令：",[263,28490,28491,28502],{},[266,28492,28493],{},[269,28494,28495,28498,28500],{},[272,28496,28497],{"align":23737},"指令",[272,28499,25870],{"align":23737},[272,28501,27493],{"align":23737},[310,28503,28504,28514,28530,28541,28552,28563,28574,28585,28596,28610,28624,28635,28649,28660,28671,28685,28700],{},[269,28505,28506,28508,28511],{},[315,28507,27371],{"align":23737},[315,28509,28510],{"align":23737},"指定基础镜像，是 Dockerfile 的起点",[315,28512,28513],{"align":23737},"FROM ubuntu:22.04",[269,28515,28516,28519,28522],{},[315,28517,28518],{"align":23737},"LABEL",[315,28520,28521],{"align":23737},"添加元数据（如作者、版本等）",[315,28523,28524,28525,28529],{"align":23737},"LABEL maintainer=”",[27,28526,28528],{"href":28527},"mailto:you@example.com","you@example.com","”",[269,28531,28532,28535,28538],{},[315,28533,28534],{"align":23737},"ENV",[315,28536,28537],{"align":23737},"设置环境变量",[315,28539,28540],{"align":23737},"ENV PORT=8080",[269,28542,28543,28546,28549],{},[315,28544,28545],{"align":23737},"ARG",[315,28547,28548],{"align":23737},"构建参数，只在构建期间可用",[315,28550,28551],{"align":23737},"ARG VERSION=1.0",[269,28553,28554,28557,28560],{},[315,28555,28556],{"align":23737},"RUN",[315,28558,28559],{"align":23737},"构建镜像时运行命令",[315,28561,28562],{"align":23737},"RUN apt-get update && apt-get install -y curl",[269,28564,28565,28568,28571],{},[315,28566,28567],{"align":23737},"COPY",[315,28569,28570],{"align":23737},"复制文件到镜像中",[315,28572,28573],{"align":23737},"COPY . \u002Fapp",[269,28575,28576,28579,28582],{},[315,28577,28578],{"align":23737},"ADD",[315,28580,28581],{"align":23737},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[315,28583,28584],{"align":23737},"ADD archive.tar.gz \u002Fdata\u002F",[269,28586,28587,28590,28593],{},[315,28588,28589],{"align":23737},"WORKDIR",[315,28591,28592],{"align":23737},"设置工作目录",[315,28594,28595],{"align":23737},"WORKDIR \u002Fopt",[269,28597,28598,28601,28604],{},[315,28599,28600],{"align":23737},"CMD",[315,28602,28603],{"align":23737},"设置容器启动时默认命令（可被 docker run 覆盖）",[315,28605,28606,28607],{"align":23737},"CMD ",[115,28608,28609],{},"“node”, “index.js”",[269,28611,28612,28615,28618],{},[315,28613,28614],{"align":23737},"ENTRYPOINT",[315,28616,28617],{"align":23737},"设置容器启动时固定命令（通常用于 CLI 工具等）",[315,28619,28620,28621],{"align":23737},"ENTRYPOINT ",[115,28622,28623],{},"“python3”",[269,28625,28626,28629,28632],{},[315,28627,28628],{"align":23737},"EXPOSE",[315,28630,28631],{"align":23737},"声明镜像内服务监听的端口（不会自动映射）",[315,28633,28634],{"align":23737},"EXPOSE 80",[269,28636,28637,28640,28643],{},[315,28638,28639],{"align":23737},"VOLUME",[315,28641,28642],{"align":23737},"声明数据卷挂载点",[315,28644,28645,28646],{"align":23737},"VOLUME ",[115,28647,28648],{},"“\u002Fdata”",[269,28650,28651,28654,28657],{},[315,28652,28653],{"align":23737},"USER",[315,28655,28656],{"align":23737},"设置后续命令执行的用户",[315,28658,28659],{"align":23737},"USER appuser",[269,28661,28662,28665,28668],{},[315,28663,28664],{"align":23737},"ONBUILD",[315,28666,28667],{"align":23737},"当镜像作为其他镜像基础镜像时触发的构建指令",[315,28669,28670],{"align":23737},"ONBUILD COPY . \u002Fsrc",[269,28672,28673,28676,28679],{},[315,28674,28675],{"align":23737},"SHELL",[315,28677,28678],{"align":23737},"更改默认 shell，比如将 sh -c 改为 bash -c",[315,28680,28681,28682],{"align":23737},"SHELL ",[115,28683,28684],{},"“\u002Fbin\u002Fbash”, “-c”",[269,28686,28687,28690,28693],{},[315,28688,28689],{"align":23737},"HEALTHCHECK",[315,28691,28692],{"align":23737},"定义容器运行时的健康检查命令",[315,28694,28695,28696],{"align":23737},"`HEALTHCHECK CMD curl –fail ",[27,28697,28698],{"href":28698,"rel":28699},"http:\u002F\u002Flocalhost:8080",[31],[269,28701,28702,28705,28708],{},[315,28703,28704],{"align":23737},"STOPSIGNAL",[315,28706,28707],{"align":23737},"容器停止时发送的信号",[315,28709,28710],{"align":23737},"STOPSIGNAL SIGKILL",[86,28712,28714],{"id":28713},"_62自己创建容器","6.2.自己创建容器",[21999,28716,28718],{"id":28717},"_621手动创建","6.2.1.手动创建",[14,28720,28721],{},"在x86电脑上编译x86的：",[106,28723,28725],{"className":23823,"code":28724,"language":23825,"meta":22,"style":22},"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",[112,28726,28727,28743,28747,28760,28764,28777,28781,28794,28798,28811,28815],{"__ignoreMap":22},[115,28728,28729,28731,28734,28737,28740],{"class":117,"line":118},[115,28730,26554],{"class":1963},[115,28732,28733],{"class":230}," build",[115,28735,28736],{"class":174}," -t",[115,28738,28739],{"class":230}," ros-melodic-cuda118-cudnn8-bionic:latest",[115,28741,28742],{"class":230}," .\n",[115,28744,28745],{"class":117,"line":37},[115,28746,2400],{"emptyLinePlaceholder":42},[115,28748,28749,28751,28753,28755,28758],{"class":117,"line":1180},[115,28750,26554],{"class":1963},[115,28752,28733],{"class":230},[115,28754,28736],{"class":174},[115,28756,28757],{"class":230}," ros-noetic-focal:latest",[115,28759,28742],{"class":230},[115,28761,28762],{"class":117,"line":1195},[115,28763,2400],{"emptyLinePlaceholder":42},[115,28765,28766,28768,28770,28772,28775],{"class":117,"line":1201},[115,28767,26554],{"class":1963},[115,28769,28733],{"class":230},[115,28771,28736],{"class":174},[115,28773,28774],{"class":230}," ros-humble-jammy:latest",[115,28776,28742],{"class":230},[115,28778,28779],{"class":117,"line":1215},[115,28780,2400],{"emptyLinePlaceholder":42},[115,28782,28783,28785,28787,28789,28792],{"class":117,"line":1221},[115,28784,26554],{"class":1963},[115,28786,28733],{"class":230},[115,28788,28736],{"class":174},[115,28790,28791],{"class":230}," ros-jazzy-noble:latest",[115,28793,28742],{"class":230},[115,28795,28796],{"class":117,"line":1312},[115,28797,2400],{"emptyLinePlaceholder":42},[115,28799,28800,28802,28804,28806,28809],{"class":117,"line":1318},[115,28801,26554],{"class":1963},[115,28803,28733],{"class":230},[115,28805,28736],{"class":174},[115,28807,28808],{"class":230}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[115,28810,28742],{"class":230},[115,28812,28813],{"class":117,"line":1330},[115,28814,2400],{"emptyLinePlaceholder":42},[115,28816,28817,28819,28821,28823,28826],{"class":117,"line":1612},[115,28818,26554],{"class":1963},[115,28820,28733],{"class":230},[115,28822,28736],{"class":174},[115,28824,28825],{"class":230}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[115,28827,28742],{"class":230},[14,28829,28830],{},[20,28831],{"alt":22,"src":28832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28834,28835],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28837,28838],{},[20,28839],{"alt":22,"src":28840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28842,28843],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[69,28845,28846],{},[72,28847,28848],{},"创建 Docker Hub 账户",[14,28850,28851],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[69,28853,28854],{"start":37},[72,28855,28856],{},"登录 Docker Hub",[14,28858,28859],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[106,28861,28863],{"className":23823,"code":28862,"language":23825,"meta":22,"style":22},"docker login\n",[112,28864,28865],{"__ignoreMap":22},[115,28866,28867,28869],{"class":117,"line":118},[115,28868,26554],{"class":1963},[115,28870,28871],{"class":230}," login\n",[14,28873,28874],{},"输入你的 Docker Hub 用户名和密码进行验证。",[69,28876,28877],{},[72,28878,28879],{},"为你的镜像打标签",[14,28881,28882,28883,28886],{},"Docker Hub 使用 ",[112,28884,28885],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[106,28888,28890],{"className":23823,"code":28889,"language":23825,"meta":22,"style":22},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[112,28891,28892],{"__ignoreMap":22},[115,28893,28894,28896,28899,28901,28904,28907,28910,28912],{"class":117,"line":118},[115,28895,26554],{"class":1963},[115,28897,28898],{"class":230}," tag",[115,28900,28791],{"class":230},[115,28902,28903],{"class":121}," \u003C",[115,28905,28906],{"class":230},"你的用户",[115,28908,28909],{"class":125},"名",[115,28911,1085],{"class":121},[115,28913,28914],{"class":230},"\u002Fros-jazzy-noble:latest\n",[14,28916,28917,28918,28921],{},"例如，如果你的 Docker Hub 用户名是 ",[112,28919,28920],{},"tungchiahui","，你应该执行：",[106,28923,28925],{"className":23823,"code":28924,"language":23825,"meta":22,"style":22},"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",[112,28926,28927,28938,28942,28953,28957,28968,28972,28983,28987],{"__ignoreMap":22},[115,28928,28929,28931,28933,28935],{"class":117,"line":118},[115,28930,26554],{"class":1963},[115,28932,28898],{"class":230},[115,28934,28757],{"class":230},[115,28936,28937],{"class":230}," tungchiahui\u002Fros-noetic-focal:latest\n",[115,28939,28940],{"class":117,"line":37},[115,28941,2400],{"emptyLinePlaceholder":42},[115,28943,28944,28946,28948,28950],{"class":117,"line":1180},[115,28945,26554],{"class":1963},[115,28947,28898],{"class":230},[115,28949,28774],{"class":230},[115,28951,28952],{"class":230}," tungchiahui\u002Fros-humble-jammy:latest\n",[115,28954,28955],{"class":117,"line":1195},[115,28956,2400],{"emptyLinePlaceholder":42},[115,28958,28959,28961,28963,28965],{"class":117,"line":1201},[115,28960,26554],{"class":1963},[115,28962,28898],{"class":230},[115,28964,28791],{"class":230},[115,28966,28967],{"class":230}," tungchiahui\u002Fros-jazzy-noble:latest\n",[115,28969,28970],{"class":117,"line":1215},[115,28971,2400],{"emptyLinePlaceholder":42},[115,28973,28974,28976,28978,28980],{"class":117,"line":1221},[115,28975,26554],{"class":1963},[115,28977,28898],{"class":230},[115,28979,28808],{"class":230},[115,28981,28982],{"class":230}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[115,28984,28985],{"class":117,"line":1312},[115,28986,2400],{"emptyLinePlaceholder":42},[115,28988,28989,28991,28993,28995],{"class":117,"line":1318},[115,28990,26554],{"class":1963},[115,28992,28898],{"class":230},[115,28994,28825],{"class":230},[115,28996,28997],{"class":230}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[69,28999,29000],{"start":37},[72,29001,29002],{},"推送镜像到 Docker Hub",[14,29004,29005],{},"使用以下命令将镜像推送到 Docker Hub：",[106,29007,29009],{"className":23823,"code":29008,"language":23825,"meta":22,"style":22},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[112,29010,29011],{"__ignoreMap":22},[115,29012,29013,29015,29018,29020,29022,29024,29026],{"class":117,"line":118},[115,29014,26554],{"class":1963},[115,29016,29017],{"class":230}," push",[115,29019,28903],{"class":121},[115,29021,28906],{"class":230},[115,29023,28909],{"class":125},[115,29025,1085],{"class":121},[115,29027,29028],{"class":230},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29030,14634],{},[106,29032,29034],{"className":23823,"code":29033,"language":23825,"meta":22,"style":22},"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",[112,29035,29036,29044,29048,29056,29060,29068,29072,29081,29085,29093,29097],{"__ignoreMap":22},[115,29037,29038,29040,29042],{"class":117,"line":118},[115,29039,26554],{"class":1963},[115,29041,29017],{"class":230},[115,29043,28937],{"class":230},[115,29045,29046],{"class":117,"line":37},[115,29047,2400],{"emptyLinePlaceholder":42},[115,29049,29050,29052,29054],{"class":117,"line":1180},[115,29051,26554],{"class":1963},[115,29053,29017],{"class":230},[115,29055,28952],{"class":230},[115,29057,29058],{"class":117,"line":1195},[115,29059,2400],{"emptyLinePlaceholder":42},[115,29061,29062,29064,29066],{"class":117,"line":1201},[115,29063,26554],{"class":1963},[115,29065,29017],{"class":230},[115,29067,28967],{"class":230},[115,29069,29070],{"class":117,"line":1215},[115,29071,2400],{"emptyLinePlaceholder":42},[115,29073,29074,29076,29078],{"class":117,"line":1221},[115,29075,26554],{"class":1963},[115,29077,29017],{"class":230},[115,29079,29080],{"class":230}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[115,29082,29083],{"class":117,"line":1312},[115,29084,2400],{"emptyLinePlaceholder":42},[115,29086,29087,29089,29091],{"class":117,"line":1318},[115,29088,26554],{"class":1963},[115,29090,29017],{"class":230},[115,29092,28997],{"class":230},[115,29094,29095],{"class":117,"line":1330},[115,29096,2400],{"emptyLinePlaceholder":42},[115,29098,29099,29101,29103],{"class":117,"line":1612},[115,29100,26554],{"class":1963},[115,29102,29017],{"class":230},[115,29104,29105],{"class":230}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[69,29107,29108],{"start":1180},[72,29109,29110],{},"验证推送成功",[14,29112,29113],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29115,29116],{},[275,29117,3784],{},[1132,29119,29120,29123],{},[72,29121,29122],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[72,29124,29125],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29127,29128],{},[20,29129],{"alt":22,"src":29130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29132,29133],{},[20,29134],{"alt":22,"src":29135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21999,29137,29139],{"id":29138},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29141,29142,29143,29146,29147,29150],{},"如果您想在 ",[275,29144,29145],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[275,29148,29149],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29152,29153,29154],{},"1. ",[275,29155,29156],{},"启用 Docker 跨平台构建",[14,29158,29159],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29161,29162],{},"第一步：启用 buildx（只需执行一次）",[106,29164,29166],{"className":23823,"code":29165,"language":23825,"meta":22,"style":22},"docker buildx create --name multiarch_builder --use\n",[112,29167,29168],{"__ignoreMap":22},[115,29169,29170,29172,29175,29178,29181,29184],{"class":117,"line":118},[115,29171,26554],{"class":1963},[115,29173,29174],{"class":230}," buildx",[115,29176,29177],{"class":230}," create",[115,29179,29180],{"class":174}," --name",[115,29182,29183],{"class":230}," multiarch_builder",[115,29185,29186],{"class":174}," --use\n",[14,29188,29189],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29191,29192],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[106,29194,29196],{"className":23823,"code":29195,"language":23825,"meta":22,"style":22},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[112,29197,29198],{"__ignoreMap":22},[115,29199,29200,29202,29204,29206,29209,29212,29215,29218],{"class":117,"line":118},[115,29201,26554],{"class":1963},[115,29203,27231],{"class":230},[115,29205,27234],{"class":174},[115,29207,29208],{"class":174}," --privileged",[115,29210,29211],{"class":230}," multiarch\u002Fqemu-user-static",[115,29213,29214],{"class":174}," --reset",[115,29216,29217],{"class":174}," -p",[115,29219,29220],{"class":230}," yes\n",[14,29222,29223],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29225,29226],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[106,29228,29230],{"className":23823,"code":29229,"language":23825,"meta":22,"style":22},"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",[112,29231,29232,29274,29278,29283,29293,29303,29312,29318,29322,29326,29336,29344,29353,29359,29363,29367,29377,29385,29394,29400,29404,29408,29418,29426,29435,29441,29445,29449,29459,29467,29476,29482,29486,29490,29500,29508,29517,29523,29527,29531,29541,29549,29558,29564,29568,29572,29582,29590,29599,29605,29609,29613,29623,29631,29640,29646,29650,29654,29665,29673,29682,29688],{"__ignoreMap":22},[115,29233,29234,29236,29238,29240,29243,29246,29248,29250,29253,29255,29257,29259,29261,29264,29267,29269,29272],{"class":117,"line":118},[115,29235,26554],{"class":1963},[115,29237,29174],{"class":230},[115,29239,28733],{"class":230},[115,29241,29242],{"class":174}," --platform",[115,29244,29245],{"class":230}," linux\u002Famd64,linux\u002Farm64",[115,29247,28736],{"class":174},[115,29249,28903],{"class":121},[115,29251,29252],{"class":230},"你的镜像",[115,29254,28909],{"class":125},[115,29256,1085],{"class":121},[115,29258,984],{"class":230},[115,29260,1035],{"class":121},[115,29262,29263],{"class":230},"标",[115,29265,29266],{"class":125},"签",[115,29268,1085],{"class":121},[115,29270,29271],{"class":174}," --push",[115,29273,28742],{"class":230},[115,29275,29276],{"class":117,"line":37},[115,29277,2400],{"emptyLinePlaceholder":42},[115,29279,29280],{"class":117,"line":1180},[115,29281,29282],{"class":184},"# 例子：\n",[115,29284,29285,29287,29289,29291],{"class":117,"line":1195},[115,29286,26554],{"class":1963},[115,29288,29174],{"class":230},[115,29290,28733],{"class":230},[115,29292,24679],{"class":174},[115,29294,29295,29298,29301],{"class":117,"line":1201},[115,29296,29297],{"class":125},"--platform ",[115,29299,29300],{"class":230},"linux\u002Famd64,linux\u002Farm64",[115,29302,24679],{"class":174},[115,29304,29305,29307,29310],{"class":117,"line":1215},[115,29306,28736],{"class":174},[115,29308,29309],{"class":230}," tungchiahui\u002Fros:noetic-focal",[115,29311,24679],{"class":174},[115,29313,29314,29316],{"class":117,"line":1221},[115,29315,29271],{"class":174},[115,29317,24679],{"class":174},[115,29319,29320],{"class":117,"line":1312},[115,29321,28742],{"class":230},[115,29323,29324],{"class":117,"line":1318},[115,29325,2400],{"emptyLinePlaceholder":42},[115,29327,29328,29330,29332,29334],{"class":117,"line":1330},[115,29329,26554],{"class":1963},[115,29331,29174],{"class":230},[115,29333,28733],{"class":230},[115,29335,24679],{"class":174},[115,29337,29338,29340,29342],{"class":117,"line":1612},[115,29339,29297],{"class":125},[115,29341,29300],{"class":230},[115,29343,24679],{"class":174},[115,29345,29346,29348,29351],{"class":117,"line":1617},[115,29347,28736],{"class":174},[115,29349,29350],{"class":230}," tungchiahui\u002Fros:humble-jammy",[115,29352,24679],{"class":174},[115,29354,29355,29357],{"class":117,"line":1623},[115,29356,29271],{"class":174},[115,29358,24679],{"class":174},[115,29360,29361],{"class":117,"line":1628},[115,29362,28742],{"class":230},[115,29364,29365],{"class":117,"line":1642},[115,29366,2400],{"emptyLinePlaceholder":42},[115,29368,29369,29371,29373,29375],{"class":117,"line":1647},[115,29370,26554],{"class":1963},[115,29372,29174],{"class":230},[115,29374,28733],{"class":230},[115,29376,24679],{"class":174},[115,29378,29379,29381,29383],{"class":117,"line":1653},[115,29380,29297],{"class":125},[115,29382,29300],{"class":230},[115,29384,24679],{"class":174},[115,29386,29387,29389,29392],{"class":117,"line":1674},[115,29388,28736],{"class":174},[115,29390,29391],{"class":230}," tungchiahui\u002Fros:jazzy-noble",[115,29393,24679],{"class":174},[115,29395,29396,29398],{"class":117,"line":1679},[115,29397,29271],{"class":174},[115,29399,24679],{"class":174},[115,29401,29402],{"class":117,"line":1693},[115,29403,28742],{"class":230},[115,29405,29406],{"class":117,"line":1698},[115,29407,2400],{"emptyLinePlaceholder":42},[115,29409,29410,29412,29414,29416],{"class":117,"line":1727},[115,29411,26321],{"class":1963},[115,29413,29174],{"class":230},[115,29415,28733],{"class":230},[115,29417,24679],{"class":174},[115,29419,29420,29422,29424],{"class":117,"line":1732},[115,29421,29297],{"class":125},[115,29423,29300],{"class":230},[115,29425,24679],{"class":174},[115,29427,29428,29430,29433],{"class":117,"line":1749},[115,29429,28736],{"class":174},[115,29431,29432],{"class":230}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[115,29434,24679],{"class":174},[115,29436,29437,29439],{"class":117,"line":1754},[115,29438,29271],{"class":174},[115,29440,24679],{"class":174},[115,29442,29443],{"class":117,"line":1759},[115,29444,28742],{"class":230},[115,29446,29447],{"class":117,"line":1764},[115,29448,2400],{"emptyLinePlaceholder":42},[115,29450,29451,29453,29455,29457],{"class":117,"line":1778},[115,29452,26554],{"class":1963},[115,29454,29174],{"class":230},[115,29456,28733],{"class":230},[115,29458,24679],{"class":174},[115,29460,29461,29463,29465],{"class":117,"line":1783},[115,29462,29297],{"class":125},[115,29464,29300],{"class":230},[115,29466,24679],{"class":174},[115,29468,29469,29471,29474],{"class":117,"line":2577},[115,29470,28736],{"class":174},[115,29472,29473],{"class":230}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[115,29475,24679],{"class":174},[115,29477,29478,29480],{"class":117,"line":2591},[115,29479,29271],{"class":174},[115,29481,24679],{"class":174},[115,29483,29484],{"class":117,"line":2599},[115,29485,28742],{"class":230},[115,29487,29488],{"class":117,"line":2604},[115,29489,2400],{"emptyLinePlaceholder":42},[115,29491,29492,29494,29496,29498],{"class":117,"line":2610},[115,29493,26321],{"class":1963},[115,29495,29174],{"class":230},[115,29497,28733],{"class":230},[115,29499,24679],{"class":174},[115,29501,29502,29504,29506],{"class":117,"line":2616},[115,29503,29297],{"class":125},[115,29505,29300],{"class":230},[115,29507,24679],{"class":174},[115,29509,29510,29512,29515],{"class":117,"line":2621},[115,29511,28736],{"class":174},[115,29513,29514],{"class":230}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[115,29516,24679],{"class":174},[115,29518,29519,29521],{"class":117,"line":7949},[115,29520,29271],{"class":174},[115,29522,24679],{"class":174},[115,29524,29525],{"class":117,"line":7973},[115,29526,28742],{"class":230},[115,29528,29529],{"class":117,"line":7978},[115,29530,2400],{"emptyLinePlaceholder":42},[115,29532,29533,29535,29537,29539],{"class":117,"line":7984},[115,29534,26554],{"class":1963},[115,29536,29174],{"class":230},[115,29538,28733],{"class":230},[115,29540,24679],{"class":174},[115,29542,29543,29545,29547],{"class":117,"line":8011},[115,29544,29297],{"class":125},[115,29546,29300],{"class":230},[115,29548,24679],{"class":174},[115,29550,29551,29553,29556],{"class":117,"line":8016},[115,29552,28736],{"class":174},[115,29554,29555],{"class":230}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[115,29557,24679],{"class":174},[115,29559,29560,29562],{"class":117,"line":8022},[115,29561,29271],{"class":174},[115,29563,24679],{"class":174},[115,29565,29566],{"class":117,"line":8034},[115,29567,28742],{"class":230},[115,29569,29570],{"class":117,"line":8046},[115,29571,2400],{"emptyLinePlaceholder":42},[115,29573,29574,29576,29578,29580],{"class":117,"line":8058},[115,29575,26554],{"class":1963},[115,29577,29174],{"class":230},[115,29579,28733],{"class":230},[115,29581,24679],{"class":174},[115,29583,29584,29586,29588],{"class":117,"line":9717},[115,29585,29297],{"class":125},[115,29587,29300],{"class":230},[115,29589,24679],{"class":174},[115,29591,29592,29594,29597],{"class":117,"line":9742},[115,29593,28736],{"class":174},[115,29595,29596],{"class":230}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[115,29598,24679],{"class":174},[115,29600,29601,29603],{"class":117,"line":9765},[115,29602,29271],{"class":174},[115,29604,24679],{"class":174},[115,29606,29607],{"class":117,"line":9789},[115,29608,28742],{"class":230},[115,29610,29611],{"class":117,"line":9794},[115,29612,2400],{"emptyLinePlaceholder":42},[115,29614,29615,29617,29619,29621],{"class":117,"line":9799},[115,29616,26321],{"class":1963},[115,29618,29174],{"class":230},[115,29620,28733],{"class":230},[115,29622,24679],{"class":174},[115,29624,29625,29627,29629],{"class":117,"line":9804},[115,29626,29297],{"class":125},[115,29628,29300],{"class":230},[115,29630,24679],{"class":174},[115,29632,29633,29635,29638],{"class":117,"line":9813},[115,29634,28736],{"class":174},[115,29636,29637],{"class":230}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[115,29639,24679],{"class":174},[115,29641,29642,29644],{"class":117,"line":9818},[115,29643,29271],{"class":174},[115,29645,24679],{"class":174},[115,29647,29648],{"class":117,"line":9824},[115,29649,28742],{"class":230},[115,29651,29652],{"class":117,"line":9845},[115,29653,2400],{"emptyLinePlaceholder":42},[115,29655,29656,29659,29661,29663],{"class":117,"line":9851},[115,29657,29658],{"class":1963},"  docker",[115,29660,29174],{"class":230},[115,29662,28733],{"class":230},[115,29664,24679],{"class":174},[115,29666,29667,29669,29671],{"class":117,"line":9865},[115,29668,29297],{"class":125},[115,29670,29300],{"class":230},[115,29672,24679],{"class":174},[115,29674,29675,29677,29680],{"class":117,"line":9871},[115,29676,28736],{"class":174},[115,29678,29679],{"class":230}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[115,29681,24679],{"class":174},[115,29683,29684,29686],{"class":117,"line":9898},[115,29685,29271],{"class":174},[115,29687,24679],{"class":174},[115,29689,29690],{"class":117,"line":9907},[115,29691,28742],{"class":230},[14,29693,29694],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29696,29697],{},[20,29698],{"alt":22,"src":29699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29701,29702],{},[20,29703],{"alt":22,"src":29704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21999,29706,29708],{"id":29707},"_623清除构建缓存","6.2.3.清除构建缓存",[106,29710,29712],{"className":23823,"code":29711,"language":23825,"meta":22,"style":22},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[112,29713,29714,29719],{"__ignoreMap":22},[115,29715,29716],{"class":117,"line":118},[115,29717,29718],{"class":184},"# 清理BuildKit构建缓存\n",[115,29720,29721,29723,29726,29729],{"class":117,"line":37},[115,29722,26554],{"class":1963},[115,29724,29725],{"class":230}," builder",[115,29727,29728],{"class":230}," prune",[115,29730,29731],{"class":174}," -f\n",[14,29733,29734],{},[20,29735],{"alt":22,"src":29736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[86,29738,29740],{"id":29739},"_63补充","6.3.补充",[21999,29742,29744],{"id":29743},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29746,29747],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29749,29750],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29752,29753],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[106,29755,29757],{"className":23823,"code":29756,"language":23825,"meta":22,"style":22},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[112,29758,29759,29766],{"__ignoreMap":22},[115,29760,29761,29763],{"class":117,"line":118},[115,29762,27371],{"class":1963},[115,29764,29765],{"class":230}," nginx\n",[115,29767,29768,29770,29773,29776,29778],{"class":117,"line":37},[115,29769,28556],{"class":1963},[115,29771,29772],{"class":230}," echo",[115,29774,29775],{"class":230}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[115,29777,26223],{"class":121},[115,29779,29780],{"class":230}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29782,29783],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29785,29786],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[106,29788,29790],{"className":23823,"code":29789,"language":23825,"meta":22,"style":22},"docker build -t nginx:tuling .\n",[112,29791,29792],{"__ignoreMap":22},[115,29793,29794,29796,29798,29800,29803],{"class":117,"line":118},[115,29795,26554],{"class":1963},[115,29797,28733],{"class":230},[115,29799,28736],{"class":174},[115,29801,29802],{"class":230}," nginx:tuling",[115,29804,28742],{"class":230},[14,29806,29807],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29809,29810],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[106,29812,29814],{"className":23823,"code":29813,"language":23825,"meta":22,"style":22},"docker run -d -p 92:80 nginx:tuling\n",[112,29815,29816],{"__ignoreMap":22},[115,29817,29818,29820,29822,29825,29827,29830],{"class":117,"line":118},[115,29819,26554],{"class":1963},[115,29821,27231],{"class":230},[115,29823,29824],{"class":174}," -d",[115,29826,29217],{"class":174},[115,29828,29829],{"class":230}," 92:80",[115,29831,29832],{"class":230}," nginx:tuling\n",[14,29834,29835,29836],{},"4、访问 ",[27,29837,29840],{"href":29838,"rel":29839},"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",[31],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29842,29843],{},[20,29844],{"alt":22,"src":29845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29847,29848],{},[20,29849],{"alt":22,"src":29850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21999,29852,29854],{"id":29853},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29856,29857],{},"只需要知道大体流程即可",[14,29859,29860],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29862,29863],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29865,29866],{},"2、在Dockerfile中添加以下内容",[106,29868,29870],{"className":26092,"code":29869,"language":26094,"meta":22,"style":22},"# 基于哪个镜像\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",[112,29871,29872,29877,29882,29887,29892,29897,29902,29907],{"__ignoreMap":22},[115,29873,29874],{"class":117,"line":118},[115,29875,29876],{},"# 基于哪个镜像\n",[115,29878,29879],{"class":117,"line":37},[115,29880,29881],{},"From java:8\n",[115,29883,29884],{"class":117,"line":1180},[115,29885,29886],{},"# 复制文件到容器\n",[115,29888,29889],{"class":117,"line":1195},[115,29890,29891],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[115,29893,29894],{"class":117,"line":1201},[115,29895,29896],{},"# 声明需要暴露的端口\n",[115,29898,29899],{"class":117,"line":1215},[115,29900,29901],{},"EXPOSE 8877\n",[115,29903,29904],{"class":117,"line":1221},[115,29905,29906],{},"# 配置容器启动后执行的命令\n",[115,29908,29909],{"class":117,"line":1312},[115,29910,29911],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29913,29914],{},"3、使用docker build命令构建镜像",[106,29916,29918],{"className":23823,"code":29917,"language":23825,"meta":22,"style":22},"docker build -t tulingmall-member:0.0.5 .\n",[112,29919,29920],{"__ignoreMap":22},[115,29921,29922,29924,29926,29928,29931],{"class":117,"line":118},[115,29923,26554],{"class":1963},[115,29925,28733],{"class":230},[115,29927,28736],{"class":174},[115,29929,29930],{"class":230}," tulingmall-member:0.0.5",[115,29932,28742],{"class":230},[14,29934,29935],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29937,29938],{},[20,29939],{"alt":22,"src":29940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29942,29943],{},"4、启动镜像，加-d可在后台启动",[106,29945,29947],{"className":23823,"code":29946,"language":23825,"meta":22,"style":22},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[112,29948,29949],{"__ignoreMap":22},[115,29950,29951,29953,29955,29957,29959,29962],{"class":117,"line":118},[115,29952,26554],{"class":1963},[115,29954,27231],{"class":230},[115,29956,29824],{"class":174},[115,29958,29217],{"class":174},[115,29960,29961],{"class":230}," 8877:8877",[115,29963,29964],{"class":230}," tulingmall-member:0.0.5\n",[14,29966,29967],{},"加上JVM参数：",[106,29969,29971],{"className":23823,"code":29970,"language":23825,"meta":22,"style":22},"# --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",[112,29972,29973,29978,29993,30003,30012,30019],{"__ignoreMap":22},[115,29974,29975],{"class":117,"line":118},[115,29976,29977],{"class":184},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[115,29979,29980,29982,29984,29987,29989,29991],{"class":117,"line":37},[115,29981,26554],{"class":1963},[115,29983,27231],{"class":230},[115,29985,29986],{"class":174},"  -d",[115,29988,29217],{"class":174},[115,29990,29961],{"class":230},[115,29992,24679],{"class":174},[115,29994,29995,29997,30000],{"class":117,"line":1180},[115,29996,28129],{"class":125},[115,29998,29999],{"class":230},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[115,30001,30002],{"class":174},"  \\\n",[115,30004,30005,30007,30010],{"class":117,"line":1195},[115,30006,28129],{"class":125},[115,30008,30009],{"class":230},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[115,30011,30002],{"class":174},[115,30013,30014,30017],{"class":117,"line":1201},[115,30015,30016],{"class":125},"--cap-add=SYS_PTRACE  ",[115,30018,26176],{"class":174},[115,30020,30021],{"class":117,"line":1215},[115,30022,30023],{"class":125},"tulingmall-member:0.0.5\n",[14,30025,30026],{},"5、访问会员服务接口",[14,30028,30029],{},[20,30030],{"alt":22,"src":30031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21999,30033,30035],{"id":30034},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30037,30038],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30040,30041,30042],{},"阿里云docker镜像仓库：",[27,30043,30044],{"href":30044,"rel":30045},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[31],[14,30047,30048],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30050,30051],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30053,30054],{},[20,30055],{"alt":22,"src":30056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30058,30059],{},"要把镜像推送到镜像仓库",[106,30061,30063],{"className":23823,"code":30062,"language":23825,"meta":22,"style":22},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[112,30064,30065],{"__ignoreMap":22},[115,30066,30067,30069,30071,30073],{"class":117,"line":118},[115,30068,26554],{"class":1963},[115,30070,28898],{"class":230},[115,30072,29930],{"class":230},[115,30074,30075],{"class":230}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30077,30078],{},"最后将镜像推送到远程仓库",[106,30080,30082],{"className":23823,"code":30081,"language":23825,"meta":22,"style":22},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[112,30083,30084],{"__ignoreMap":22},[115,30085,30086,30088,30090],{"class":117,"line":118},[115,30087,26554],{"class":1963},[115,30089,29017],{"class":230},[115,30091,30075],{"class":230},[5127,30093,30094],{},"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":22,"searchDepth":37,"depth":37,"links":30096},[30097,30098,30099],{"id":28484,"depth":1180,"text":28485},{"id":28713,"depth":1180,"text":28714},{"id":29739,"depth":1180,"text":29740},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28476,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30106,"title":30107,"body":30108,"description":22,"extension":40,"meta":30251,"navigation":42,"path":30252,"seo":30253,"stem":30254,"__hash__":30255},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30109,"toc":30249},[30110,30113,30118,30123,30126,30131,30136,30139,30144,30149,30152,30157,30160,30163,30166,30169,30172,30175,30195,30217,30220,30223,30243,30246],[10,30111,30107],{"id":30112},"_7vscode远程开发",[69,30114,30115],{},[72,30116,30117],{},"插件1：微软Docker工具",[14,30119,30120],{},[20,30121],{"alt":22,"src":30122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30124,30125],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30127,30128],{},[20,30129],{"alt":22,"src":30130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[69,30132,30133],{"start":37},[72,30134,30135],{},"插件2：微软Docker远程开发工具",[14,30137,30138],{},"下面这是远程开发的插件。",[14,30140,30141],{},[20,30142],{"alt":22,"src":30143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30145,30146],{},[20,30147],{"alt":22,"src":30148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30150,30151],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30153,30154],{},[20,30155],{"alt":22,"src":30156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30158,30159],{},"安装完拓展之后，vscode进行链接：",[14,30161,30162],{},"1.按ctrl+shift+p",[14,30164,30165],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30167,30168],{},"3.选择目前运行的容器",[14,30170,30171],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30173,30174],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[106,30176,30178],{"className":23823,"code":30177,"language":23825,"meta":22,"style":22},"docker run -v 主机目录:容器目录 image-name\n",[112,30179,30180],{"__ignoreMap":22},[115,30181,30182,30184,30186,30189,30192],{"class":117,"line":118},[115,30183,26554],{"class":1963},[115,30185,27231],{"class":230},[115,30187,30188],{"class":174}," -v",[115,30190,30191],{"class":230}," 主机目录:容器目录",[115,30193,30194],{"class":230}," image-name\n",[106,30196,30198],{"className":23823,"code":30197,"language":23825,"meta":22,"style":22},"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",[112,30199,30200],{"__ignoreMap":22},[115,30201,30202,30204,30206,30209,30211,30214],{"class":117,"line":118},[115,30203,26554],{"class":1963},[115,30205,27231],{"class":230},[115,30207,30208],{"class":174}," -it",[115,30210,30188],{"class":174},[115,30212,30213],{"class":230}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[115,30215,30216],{"class":230}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30218,30219],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30221,30222],{},"查看挂载情况：",[106,30224,30226],{"className":23823,"code":30225,"language":23825,"meta":22,"style":22},"mount | grep -i project\n",[112,30227,30228],{"__ignoreMap":22},[115,30229,30230,30233,30235,30238,30240],{"class":117,"line":118},[115,30231,30232],{"class":1963},"mount",[115,30234,25110],{"class":121},[115,30236,30237],{"class":1963}," grep",[115,30239,26431],{"class":174},[115,30241,30242],{"class":230}," project\n",[14,30244,30245],{},"也可以通过ls来进行查看",[5127,30247,30248],{},"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":22,"searchDepth":37,"depth":37,"links":30250},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30107,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30257,"title":30258,"body":30259,"description":39,"extension":40,"meta":30263,"navigation":42,"path":30265,"seo":30266,"stem":30267,"__hash__":30268},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30260,"toc":30261},[],{"title":22,"searchDepth":37,"depth":37,"links":30262},[],{"category":30264},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30258,"description":39},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30270,"title":30271,"body":30272,"description":39,"extension":40,"meta":30276,"navigation":42,"path":30277,"seo":30278,"stem":30279,"__hash__":30280},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30273,"toc":30274},[],{"title":22,"searchDepth":37,"depth":37,"links":30275},[],{"category":30264},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30271,"description":39},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30282,"title":30283,"body":30284,"description":39,"extension":40,"meta":30577,"navigation":42,"path":30578,"seo":30579,"stem":30580,"__hash__":30581},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30285,"toc":30575},[30286,30289,30297,30312,30317,30368,30371,30377,30564,30569,30572],[10,30287,30283],{"id":30288},"_1验证深度学习环境",[14,30290,30291,30292],{},"关于环境的安装，看",[27,30293,30296],{"href":30294,"rel":30295},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[31],"Pytorch-->深度学习",[14,30298,30299,30300,30303,30304,30307,30308,30311],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[112,30301,30302],{},"pytorch-cuda=12.4"," 是一个“ ",[275,30305,30306],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[275,30309,30310],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30313,30314],{},[20,30315],{"alt":22,"src":30316},"\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",[106,30318,30320],{"className":23823,"code":30319,"language":23825,"meta":22,"style":22},"# 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",[112,30321,30322,30327],{"__ignoreMap":22},[115,30323,30324],{"class":117,"line":118},[115,30325,30326],{"class":184},"# CUDA 12.4\n",[115,30328,30329,30332,30334,30337,30340,30343,30346,30349,30351,30354,30357,30360,30363,30365],{"class":117,"line":37},[115,30330,30331],{"class":1963},"conda",[115,30333,23835],{"class":230},[115,30335,30336],{"class":230}," pytorch==",[115,30338,30339],{"class":174},"2.5.1",[115,30341,30342],{"class":230}," torchvision==",[115,30344,30345],{"class":174},"0.20.1",[115,30347,30348],{"class":230}," torchaudio==",[115,30350,30339],{"class":174},[115,30352,30353],{"class":230}," pytorch-cuda=",[115,30355,30356],{"class":174},"12.4",[115,30358,30359],{"class":174}," -c",[115,30361,30362],{"class":230}," pytorch",[115,30364,30359],{"class":174},[115,30366,30367],{"class":230}," nvidia\n",[14,30369,30370],{},"）：",[14,30372,30373],{},[27,30374,30375],{"href":30375,"rel":30376},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[31],[106,30378,30382],{"className":30379,"code":30380,"language":30381,"meta":22,"style":22},"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",[112,30383,30384,30389,30397,30402,30412,30428,30433,30443,30480,30487,30499,30515,30520,30530,30542,30552],{"__ignoreMap":22},[115,30385,30386],{"class":117,"line":118},[115,30387,30388],{"class":184},"# 对深度学习环境进行测试\n",[115,30390,30391,30394],{"class":117,"line":37},[115,30392,30393],{"class":121},"import",[115,30395,30396],{"class":125}," torch\n",[115,30398,30399],{"class":117,"line":1180},[115,30400,30401],{"class":184},"# 查看cuda是否被激活\n",[115,30403,30404,30407,30409],{"class":117,"line":1195},[115,30405,30406],{"class":125},"flag",[115,30408,171],{"class":121},[115,30410,30411],{"class":125},"torch.cuda.is_available()\n",[115,30413,30414,30417,30419,30422,30425],{"class":117,"line":1201},[115,30415,30416],{"class":174},"print",[115,30418,126],{"class":125},[115,30420,30421],{"class":230},"\"cuda:\"",[115,30423,30424],{"class":125},", flag)   ",[115,30426,30427],{"class":184},"#返回true的话说明被激活\n",[115,30429,30430],{"class":117,"line":1215},[115,30431,30432],{"class":184},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[115,30434,30435,30438,30440],{"class":117,"line":1221},[115,30436,30437],{"class":125},"ngpu",[115,30439,171],{"class":121},[115,30441,30442],{"class":174},"1\n",[115,30444,30445,30448,30450,30453,30456,30458,30461,30464,30467,30469,30471,30473,30475,30478],{"class":117,"line":1312},[115,30446,30447],{"class":125},"device",[115,30449,171],{"class":121},[115,30451,30452],{"class":125},"torch.device(",[115,30454,30455],{"class":230},"\"cuda:0\"",[115,30457,1704],{"class":121},[115,30459,30460],{"class":125},"(torch.cuda.is_available() ",[115,30462,30463],{"class":121},"and",[115,30465,30466],{"class":125}," ngpu",[115,30468,1085],{"class":121},[115,30470,317],{"class":174},[115,30472,13715],{"class":125},[115,30474,1701],{"class":121},[115,30476,30477],{"class":230}," \"cpu\"",[115,30479,132],{"class":125},[115,30481,30482,30484],{"class":117,"line":1318},[115,30483,30416],{"class":174},[115,30485,30486],{"class":125},"(device)\n",[115,30488,30489,30491,30494,30496],{"class":117,"line":1330},[115,30490,30416],{"class":174},[115,30492,30493],{"class":125},"(torch.cuda.get_device_name(",[115,30495,317],{"class":174},[115,30497,30498],{"class":125},"))\n",[115,30500,30501,30503,30506,30508,30510,30512],{"class":117,"line":1612},[115,30502,30416],{"class":174},[115,30504,30505],{"class":125},"(torch.rand(",[115,30507,197],{"class":174},[115,30509,503],{"class":125},[115,30511,197],{"class":174},[115,30513,30514],{"class":125},").cuda())\n",[115,30516,30517],{"class":117,"line":1617},[115,30518,30519],{"class":184},"# 查看cuda和cudnn的版本\n",[115,30521,30522,30525,30527],{"class":117,"line":1623},[115,30523,30524],{"class":125},"cuda_version",[115,30526,171],{"class":121},[115,30528,30529],{"class":125},"torch.version.cuda\n",[115,30531,30532,30534,30536,30539],{"class":117,"line":1628},[115,30533,30416],{"class":174},[115,30535,126],{"class":125},[115,30537,30538],{"class":230},"\"cuda version\"",[115,30540,30541],{"class":125},",cuda_version)\n",[115,30543,30544,30547,30549],{"class":117,"line":1642},[115,30545,30546],{"class":125},"cudnn_version",[115,30548,171],{"class":121},[115,30550,30551],{"class":125},"torch.backends.cudnn.version()\n",[115,30553,30554,30556,30558,30561],{"class":117,"line":1647},[115,30555,30416],{"class":174},[115,30557,126],{"class":125},[115,30559,30560],{"class":230},"\"cudnn version\"",[115,30562,30563],{"class":125},",cudnn_version)\n",[14,30565,30566],{},[20,30567],{"alt":22,"src":30568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30570,30571],{},"cuda:0 指的是一块显卡",[5127,30573,30574],{},"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":22,"searchDepth":37,"depth":37,"links":30576},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30283,"description":39},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30583,"title":30584,"body":30585,"description":39,"extension":40,"meta":50389,"navigation":42,"path":50390,"seo":50391,"stem":50392,"__hash__":50393},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30586,"toc":50383},[30587,30590,30594,30598,30601,30606,30611,30614,30619,30624,30629,30632,30636,30641,30645,30650,30653,30658,30661,30664,30667,30670,30675,30678,30683,30688,30693,30698,30701,30705,30708,30713,31317,31322,31325,31330,31333,31336,31800,31803,31806,31809,31812,33863,33866,33871,33876,34671,34674,34679,35457,35461,37120,37124,37838,37842,37846,37851,37856,37861,37864,37869,37874,37879,37884,37889,37893,37898,39180,39185,39188,39191,39194,39349,39352,39355,40571,40576,41271,41275,41279,41284,41289,41292,41297,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41446,41450,41453,42931,42935,44582,44586,45280,45284,45287,45290,45834,45837,45841,45844,47241,47245,47248,47826,49613,49617,49620,50380],[10,30588,30584],{"id":30589},"_2经典神经网络",[86,30591,30593],{"id":30592},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21999,30595,30597],{"id":30596},"_211原理介绍","2.1.1.原理介绍",[14,30599,30600],{},"LeNet-5",[69,30602,30603],{},[72,30604,30605],{},"原理",[14,30607,30608],{},[20,30609],{"alt":22,"src":30610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30612,30613],{},"B是batch批次；C是channel通道",[69,30615,30616],{"start":37},[72,30617,30618],{},"网络参数详细",[14,30620,30621],{},[20,30622],{"alt":22,"src":30623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30625,30626],{},[20,30627],{"alt":22,"src":30628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30630,30631],{},"AlexNet",[69,30633,30634],{},[72,30635,30605],{},[14,30637,30638],{},[20,30639],{"alt":22,"src":30640},"\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",[69,30642,30643],{"start":37},[72,30644,30618],{},[14,30646,30647],{},[20,30648],{"alt":22,"src":30649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30651,30652],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30654,30655],{},[20,30656],{"alt":22,"src":30657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30659,30660],{},"数据处理中的图像增强操作:",[14,30662,30663],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30665,30666],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30668,30669],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30671,30672],{},[20,30673],{"alt":22,"src":30674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30676,30677],{},"提升网络精确度的方法：LRN正则化",[14,30679,30680],{},[20,30681],{"alt":22,"src":30682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30684,30685],{},[20,30686],{"alt":22,"src":30687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[69,30689,30690],{"start":1180},[72,30691,30692],{},"AlexNet的总结",[14,30694,30695],{},[20,30696],{"alt":22,"src":30697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30699,30700],{},"比LeNet模型要深一丢丢",[21999,30702,30704],{"id":30703},"_212代码实现","2.1.2.代码实现",[14,30706,30707],{},"（1）LeNet",[69,30709,30710],{},[72,30711,30712],{},"模型搭建",[106,30714,30716],{"className":30379,"code":30715,"language":30381,"meta":22,"style":22},"# 导入库\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",[112,30717,30718,30723,30729,30734,30747,30752,30764,30768,30788,30793,30798,30809,30814,30833,30837,30842,30891,30903,30908,30937,30972,30999,31004,31016,31021,31041,31060,31079,31083,31088,31098,31115,31126,31141,31152,31163,31178,31193,31204,31211,31215,31229,31234,31257,31262,31267,31272,31276,31281,31286,31296],{"__ignoreMap":22},[115,30719,30720],{"class":117,"line":118},[115,30721,30722],{"class":184},"# 导入库\n",[115,30724,30725,30727],{"class":117,"line":37},[115,30726,30393],{"class":121},[115,30728,30396],{"class":125},[115,30730,30731],{"class":117,"line":1180},[115,30732,30733],{"class":184},"# 导入神经网络层\n",[115,30735,30736,30739,30742,30744],{"class":117,"line":1195},[115,30737,30738],{"class":121},"from",[115,30740,30741],{"class":125}," torch ",[115,30743,30393],{"class":121},[115,30745,30746],{"class":125}," nn\n",[115,30748,30749],{"class":117,"line":1201},[115,30750,30751],{"class":184},"# 导入展示神经网络参数的包\n",[115,30753,30754,30756,30759,30761],{"class":117,"line":1215},[115,30755,30738],{"class":121},[115,30757,30758],{"class":125}," torchsummary ",[115,30760,30393],{"class":121},[115,30762,30763],{"class":125}," summary\n",[115,30765,30766],{"class":117,"line":1221},[115,30767,2400],{"emptyLinePlaceholder":42},[115,30769,30770,30772,30775,30777,30780,30782,30785],{"class":117,"line":1312},[115,30771,14695],{"class":121},[115,30773,30774],{"class":1963}," LeNet",[115,30776,126],{"class":125},[115,30778,30779],{"class":1963},"nn",[115,30781,683],{"class":125},[115,30783,30784],{"class":1963},"Module",[115,30786,30787],{"class":125},"):\n",[115,30789,30790],{"class":117,"line":1318},[115,30791,30792],{"class":184},"    # 模型初始化:\n",[115,30794,30795],{"class":117,"line":1330},[115,30796,30797],{"class":184},"    # 定义一些网络层和激活函数\n",[115,30799,30800,30803,30806],{"class":117,"line":1612},[115,30801,30802],{"class":121},"    def",[115,30804,30805],{"class":174}," __init__",[115,30807,30808],{"class":125},"(self):\n",[115,30810,30811],{"class":117,"line":1617},[115,30812,30813],{"class":184},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[115,30815,30816,30819,30822,30825,30828,30831],{"class":117,"line":1623},[115,30817,30818],{"class":174},"        super",[115,30820,30821],{"class":125},"(LeNet,",[115,30823,30824],{"class":174},"self",[115,30826,30827],{"class":125},").",[115,30829,30830],{"class":174},"__init__",[115,30832,1976],{"class":125},[115,30834,30835],{"class":117,"line":1628},[115,30836,2400],{"emptyLinePlaceholder":42},[115,30838,30839],{"class":117,"line":1642},[115,30840,30841],{"class":184},"        # 定义网络层\n",[115,30843,30844,30847,30850,30852,30855,30858,30860,30862,30864,30867,30869,30871,30873,30876,30878,30880,30882,30885,30887,30889],{"class":117,"line":1647},[115,30845,30846],{"class":174},"        self",[115,30848,30849],{"class":125},".c1",[115,30851,171],{"class":121},[115,30853,30854],{"class":125},"nn.Conv2d(",[115,30856,30857],{"class":5217},"in_channels",[115,30859,171],{"class":121},[115,30861,343],{"class":174},[115,30863,503],{"class":125},[115,30865,30866],{"class":5217},"out_channels",[115,30868,171],{"class":121},[115,30870,469],{"class":174},[115,30872,503],{"class":125},[115,30874,30875],{"class":5217},"kernel_size",[115,30877,171],{"class":121},[115,30879,444],{"class":174},[115,30881,503],{"class":125},[115,30883,30884],{"class":5217},"padding",[115,30886,171],{"class":121},[115,30888,203],{"class":174},[115,30890,132],{"class":125},[115,30892,30893,30895,30898,30900],{"class":117,"line":1653},[115,30894,30846],{"class":174},[115,30896,30897],{"class":125},".sig",[115,30899,171],{"class":121},[115,30901,30902],{"class":125},"nn.Sigmoid()\n",[115,30904,30905],{"class":117,"line":1674},[115,30906,30907],{"class":184},"        # 定义池化\n",[115,30909,30910,30912,30915,30917,30920,30922,30924,30926,30928,30931,30933,30935],{"class":117,"line":1679},[115,30911,30846],{"class":174},[115,30913,30914],{"class":125},".s2",[115,30916,171],{"class":121},[115,30918,30919],{"class":125},"nn.AvgPool2d(",[115,30921,30875],{"class":5217},[115,30923,171],{"class":121},[115,30925,203],{"class":174},[115,30927,503],{"class":125},[115,30929,30930],{"class":5217},"stride",[115,30932,171],{"class":121},[115,30934,203],{"class":174},[115,30936,132],{"class":125},[115,30938,30939,30941,30944,30946,30948,30950,30952,30954,30956,30958,30960,30962,30964,30966,30968,30970],{"class":117,"line":1693},[115,30940,30846],{"class":174},[115,30942,30943],{"class":125},".c3",[115,30945,171],{"class":121},[115,30947,30854],{"class":125},[115,30949,30857],{"class":5217},[115,30951,171],{"class":121},[115,30953,469],{"class":174},[115,30955,503],{"class":125},[115,30957,30866],{"class":5217},[115,30959,171],{"class":121},[115,30961,726],{"class":174},[115,30963,503],{"class":125},[115,30965,30875],{"class":5217},[115,30967,171],{"class":121},[115,30969,444],{"class":174},[115,30971,132],{"class":125},[115,30973,30974,30976,30979,30981,30983,30985,30987,30989,30991,30993,30995,30997],{"class":117,"line":1698},[115,30975,30846],{"class":174},[115,30977,30978],{"class":125},".s4",[115,30980,171],{"class":121},[115,30982,30919],{"class":125},[115,30984,30875],{"class":5217},[115,30986,171],{"class":121},[115,30988,203],{"class":174},[115,30990,503],{"class":125},[115,30992,30930],{"class":5217},[115,30994,171],{"class":121},[115,30996,203],{"class":174},[115,30998,132],{"class":125},[115,31000,31001],{"class":117,"line":1727},[115,31002,31003],{"class":184},"        # 定义平展层\n",[115,31005,31006,31008,31011,31013],{"class":117,"line":1732},[115,31007,30846],{"class":174},[115,31009,31010],{"class":125},".flatten",[115,31012,171],{"class":121},[115,31014,31015],{"class":125},"nn.Flatten()\n",[115,31017,31018],{"class":117,"line":1749},[115,31019,31020],{"class":184},"        # 定义全连接层\n",[115,31022,31023,31025,31028,31030,31033,31035,31037,31039],{"class":117,"line":1754},[115,31024,30846],{"class":174},[115,31026,31027],{"class":125},".f5",[115,31029,171],{"class":121},[115,31031,31032],{"class":125},"nn.Linear(",[115,31034,3987],{"class":174},[115,31036,503],{"class":125},[115,31038,942],{"class":174},[115,31040,132],{"class":125},[115,31042,31043,31045,31048,31050,31052,31054,31056,31058],{"class":117,"line":1759},[115,31044,30846],{"class":174},[115,31046,31047],{"class":125},".f6",[115,31049,171],{"class":121},[115,31051,31032],{"class":125},[115,31053,942],{"class":174},[115,31055,503],{"class":125},[115,31057,836],{"class":174},[115,31059,132],{"class":125},[115,31061,31062,31064,31067,31069,31071,31073,31075,31077],{"class":117,"line":1764},[115,31063,30846],{"class":174},[115,31065,31066],{"class":125},".f7",[115,31068,171],{"class":121},[115,31070,31032],{"class":125},[115,31072,836],{"class":174},[115,31074,503],{"class":125},[115,31076,571],{"class":174},[115,31078,132],{"class":125},[115,31080,31081],{"class":117,"line":1778},[115,31082,2400],{"emptyLinePlaceholder":42},[115,31084,31085],{"class":117,"line":1783},[115,31086,31087],{"class":184},"    # 写工具->写前向传播\n",[115,31089,31090,31092,31095],{"class":117,"line":2577},[115,31091,30802],{"class":121},[115,31093,31094],{"class":1963}," forward",[115,31096,31097],{"class":125},"(self,x):\n",[115,31099,31100,31103,31105,31107,31110,31112],{"class":117,"line":2591},[115,31101,31102],{"class":125},"        x",[115,31104,171],{"class":121},[115,31106,30824],{"class":174},[115,31108,31109],{"class":125},".sig(",[115,31111,30824],{"class":174},[115,31113,31114],{"class":125},".c1(x))\n",[115,31116,31117,31119,31121,31123],{"class":117,"line":2599},[115,31118,31102],{"class":125},[115,31120,171],{"class":121},[115,31122,30824],{"class":174},[115,31124,31125],{"class":125},".s2(x)\n",[115,31127,31128,31130,31132,31134,31136,31138],{"class":117,"line":2604},[115,31129,31102],{"class":125},[115,31131,171],{"class":121},[115,31133,30824],{"class":174},[115,31135,31109],{"class":125},[115,31137,30824],{"class":174},[115,31139,31140],{"class":125},".c3(x))\n",[115,31142,31143,31145,31147,31149],{"class":117,"line":2610},[115,31144,31102],{"class":125},[115,31146,171],{"class":121},[115,31148,30824],{"class":174},[115,31150,31151],{"class":125},".s4(x)\n",[115,31153,31154,31156,31158,31160],{"class":117,"line":2616},[115,31155,31102],{"class":125},[115,31157,171],{"class":121},[115,31159,30824],{"class":174},[115,31161,31162],{"class":125},".flatten(x)\n",[115,31164,31165,31167,31169,31171,31173,31175],{"class":117,"line":2621},[115,31166,31102],{"class":125},[115,31168,171],{"class":121},[115,31170,30824],{"class":174},[115,31172,31109],{"class":125},[115,31174,30824],{"class":174},[115,31176,31177],{"class":125},".f5(x))\n",[115,31179,31180,31182,31184,31186,31188,31190],{"class":117,"line":7949},[115,31181,31102],{"class":125},[115,31183,171],{"class":121},[115,31185,30824],{"class":174},[115,31187,31109],{"class":125},[115,31189,30824],{"class":174},[115,31191,31192],{"class":125},".f6(x))\n",[115,31194,31195,31197,31199,31201],{"class":117,"line":7973},[115,31196,31102],{"class":125},[115,31198,171],{"class":121},[115,31200,30824],{"class":174},[115,31202,31203],{"class":125},".f7(x)\n",[115,31205,31206,31208],{"class":117,"line":7978},[115,31207,14753],{"class":121},[115,31209,31210],{"class":125}," x\n",[115,31212,31213],{"class":117,"line":7984},[115,31214,2400],{"emptyLinePlaceholder":42},[115,31216,31217,31219,31222,31224,31227],{"class":117,"line":8011},[115,31218,1531],{"class":121},[115,31220,31221],{"class":174}," __name__",[115,31223,2949],{"class":121},[115,31225,31226],{"class":230},"\"__main__\"",[115,31228,3739],{"class":125},[115,31230,31231],{"class":117,"line":8016},[115,31232,31233],{"class":184},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[115,31235,31236,31239,31241,31243,31246,31248,31251,31253,31255],{"class":117,"line":8022},[115,31237,31238],{"class":125},"    device",[115,31240,171],{"class":121},[115,31242,30452],{"class":125},[115,31244,31245],{"class":230},"\"cuda\"",[115,31247,1704],{"class":121},[115,31249,31250],{"class":125}," torch.cuda.is_available() ",[115,31252,1701],{"class":121},[115,31254,30477],{"class":230},[115,31256,132],{"class":125},[115,31258,31259],{"class":117,"line":8034},[115,31260,31261],{"class":184},"    # 如果就是想指定用cpu用下方代码:\n",[115,31263,31264],{"class":117,"line":8046},[115,31265,31266],{"class":184},"    # device=\"cpu\"\n",[115,31268,31269],{"class":117,"line":8058},[115,31270,31271],{"class":184},"    # print(device)\n",[115,31273,31274],{"class":117,"line":9717},[115,31275,2400],{"emptyLinePlaceholder":42},[115,31277,31278],{"class":117,"line":9742},[115,31279,31280],{"class":184},"    # 实例化模型\n",[115,31282,31283],{"class":117,"line":9765},[115,31284,31285],{"class":184},"    # 将模型放到设备中去运行\n",[115,31287,31288,31291,31293],{"class":117,"line":9789},[115,31289,31290],{"class":125},"    model",[115,31292,171],{"class":121},[115,31294,31295],{"class":125},"LeNet().to(device)\n",[115,31297,31298,31301,31304,31306,31308,31310,31312,31314],{"class":117,"line":9794},[115,31299,31300],{"class":174},"    print",[115,31302,31303],{"class":125},"(summary(model,(",[115,31305,343],{"class":174},[115,31307,503],{"class":125},[115,31309,1026],{"class":174},[115,31311,503],{"class":125},[115,31313,1026],{"class":174},[115,31315,31316],{"class":125},")))\n",[14,31318,31319],{},[20,31320],{"alt":22,"src":31321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31323,31324],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[69,31326,31327],{"start":37},[72,31328,31329],{},"训练",[14,31331,31332],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31334,31335],{},"在训练之前可以将数据展示看一下",[106,31337,31339],{"className":30379,"code":31338,"language":30381,"meta":22,"style":22},"# 建立画图的函数，用于展示数据\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",[112,31340,31341,31346,31351,31363,31375,31388,31393,31405,31410,31422,31427,31439,31443,31447,31468,31480,31485,31506,31517,31521,31526,31544,31555,31560,31571,31576,31587,31591,31596,31611,31624,31629,31634,31647,31660,31673,31678,31682,31687,31707,31724,31744,31757,31770,31780,31795],{"__ignoreMap":22},[115,31342,31343],{"class":117,"line":118},[115,31344,31345],{"class":184},"# 建立画图的函数，用于展示数据\n",[115,31347,31348],{"class":117,"line":37},[115,31349,31350],{"class":184},"# torchvision中包含很多内置的数据集\n",[115,31352,31353,31355,31358,31360],{"class":117,"line":1180},[115,31354,30738],{"class":121},[115,31356,31357],{"class":125}," sklearn.externals.array_api_compat.torch ",[115,31359,30393],{"class":121},[115,31361,31362],{"class":125}," squeeze\n",[115,31364,31365,31367,31370,31372],{"class":117,"line":1195},[115,31366,30738],{"class":121},[115,31368,31369],{"class":125}," torchvision.datasets ",[115,31371,30393],{"class":121},[115,31373,31374],{"class":125}," FashionMNIST\n",[115,31376,31377,31379,31382,31385],{"class":117,"line":1201},[115,31378,30393],{"class":121},[115,31380,31381],{"class":125}," numpy ",[115,31383,31384],{"class":121},"as",[115,31386,31387],{"class":125}," np\n",[115,31389,31390],{"class":117,"line":1215},[115,31391,31392],{"class":184},"# 引入处理数据集的包\n",[115,31394,31395,31397,31400,31402],{"class":117,"line":1221},[115,31396,30738],{"class":121},[115,31398,31399],{"class":125}," torchvision ",[115,31401,30393],{"class":121},[115,31403,31404],{"class":125}," transforms\n",[115,31406,31407],{"class":117,"line":1312},[115,31408,31409],{"class":184},"# 从torch库中引入数据处理的包\n",[115,31411,31412,31414,31417,31419],{"class":117,"line":1318},[115,31413,30393],{"class":121},[115,31415,31416],{"class":125}," torch.utils.data ",[115,31418,31384],{"class":121},[115,31420,31421],{"class":125}," Data\n",[115,31423,31424],{"class":117,"line":1330},[115,31425,31426],{"class":184},"# 导入画图的库\n",[115,31428,31429,31431,31434,31436],{"class":117,"line":1612},[115,31430,30393],{"class":121},[115,31432,31433],{"class":125}," matplotlib.pyplot ",[115,31435,31384],{"class":121},[115,31437,31438],{"class":125}," plt\n",[115,31440,31441],{"class":117,"line":1617},[115,31442,2400],{"emptyLinePlaceholder":42},[115,31444,31445],{"class":117,"line":1623},[115,31446,2400],{"emptyLinePlaceholder":42},[115,31448,31449,31452,31454,31457,31460,31462,31465],{"class":117,"line":1628},[115,31450,31451],{"class":125},"train_data",[115,31453,171],{"class":121},[115,31455,31456],{"class":125},"FashionMNIST(",[115,31458,31459],{"class":5217},"root",[115,31461,171],{"class":121},[115,31463,31464],{"class":230},"'.\u002Fdata'",[115,31466,31467],{"class":125},",\n",[115,31469,31470,31473,31475,31478],{"class":117,"line":1642},[115,31471,31472],{"class":5217},"                        train",[115,31474,171],{"class":121},[115,31476,31477],{"class":174},"True",[115,31479,31467],{"class":125},[115,31481,31482],{"class":117,"line":1647},[115,31483,31484],{"class":184},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[115,31486,31487,31490,31492,31495,31498,31500,31503],{"class":117,"line":1653},[115,31488,31489],{"class":5217},"                        transform",[115,31491,171],{"class":121},[115,31493,31494],{"class":125},"transforms.Compose([transforms.Resize(",[115,31496,31497],{"class":5217},"size",[115,31499,171],{"class":121},[115,31501,31502],{"class":174},"224",[115,31504,31505],{"class":125},"),transforms.ToTensor()]),\n",[115,31507,31508,31511,31513,31515],{"class":117,"line":1674},[115,31509,31510],{"class":5217},"                        download",[115,31512,171],{"class":121},[115,31514,31477],{"class":174},[115,31516,132],{"class":125},[115,31518,31519],{"class":117,"line":1679},[115,31520,2400],{"emptyLinePlaceholder":42},[115,31522,31523],{"class":117,"line":1693},[115,31524,31525],{"class":184},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[115,31527,31528,31531,31533,31536,31539,31541],{"class":117,"line":1698},[115,31529,31530],{"class":125},"train_loader",[115,31532,171],{"class":121},[115,31534,31535],{"class":125},"Data.DataLoader(",[115,31537,31538],{"class":5217},"dataset",[115,31540,171],{"class":121},[115,31542,31543],{"class":125},"train_data,\n",[115,31545,31546,31549,31551,31553],{"class":117,"line":1727},[115,31547,31548],{"class":5217},"                             batch_size",[115,31550,171],{"class":121},[115,31552,329],{"class":174},[115,31554,31467],{"class":125},[115,31556,31557],{"class":117,"line":1732},[115,31558,31559],{"class":184},"                             # 数据是否打乱\n",[115,31561,31562,31565,31567,31569],{"class":117,"line":1749},[115,31563,31564],{"class":5217},"                             shuffle",[115,31566,171],{"class":121},[115,31568,31477],{"class":174},[115,31570,31467],{"class":125},[115,31572,31573],{"class":117,"line":1754},[115,31574,31575],{"class":184},"                             # 规定加载数据的进程\n",[115,31577,31578,31581,31583,31585],{"class":117,"line":1759},[115,31579,31580],{"class":5217},"                             num_workers",[115,31582,171],{"class":121},[115,31584,317],{"class":174},[115,31586,132],{"class":125},[115,31588,31589],{"class":117,"line":1764},[115,31590,2400],{"emptyLinePlaceholder":42},[115,31592,31593],{"class":117,"line":1778},[115,31594,31595],{"class":184},"# 获得一个batch的数据\n",[115,31597,31598,31600,31603,31605,31608],{"class":117,"line":1783},[115,31599,3025],{"class":121},[115,31601,31602],{"class":125}," step,(b_x,b_y) ",[115,31604,26044],{"class":121},[115,31606,31607],{"class":174}," enumerate",[115,31609,31610],{"class":125},"(train_loader):\n",[115,31612,31613,31615,31618,31620,31622],{"class":117,"line":2577},[115,31614,3101],{"class":121},[115,31616,31617],{"class":125}," step ",[115,31619,1085],{"class":121},[115,31621,4093],{"class":174},[115,31623,3739],{"class":125},[115,31625,31626],{"class":117,"line":2591},[115,31627,31628],{"class":121},"        break\n",[115,31630,31631],{"class":117,"line":2599},[115,31632,31633],{"class":184},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[115,31635,31636,31639,31641,31644],{"class":117,"line":2604},[115,31637,31638],{"class":125},"batch_x",[115,31640,171],{"class":121},[115,31642,31643],{"class":125},"b_x.squeeze().numpy()  ",[115,31645,31646],{"class":184},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[115,31648,31649,31652,31654,31657],{"class":117,"line":2610},[115,31650,31651],{"class":125},"batch_y",[115,31653,171],{"class":121},[115,31655,31656],{"class":125},"b_y.numpy()   ",[115,31658,31659],{"class":184},"#将张量转换成功numpy数组\n",[115,31661,31662,31665,31667,31670],{"class":117,"line":2616},[115,31663,31664],{"class":125},"class_label",[115,31666,171],{"class":121},[115,31668,31669],{"class":125},"train_data.classes  ",[115,31671,31672],{"class":184},"#训练集标签\n",[115,31674,31675],{"class":117,"line":2621},[115,31676,31677],{"class":184},"# print(class_label)\n",[115,31679,31680],{"class":117,"line":7949},[115,31681,2400],{"emptyLinePlaceholder":42},[115,31683,31684],{"class":117,"line":7973},[115,31685,31686],{"class":184},"# 可视化一个batch的图像\n",[115,31688,31689,31692,31695,31697,31699,31701,31703,31705],{"class":117,"line":7978},[115,31690,31691],{"class":125},"plt.figure(",[115,31693,31694],{"class":5217},"figsize",[115,31696,171],{"class":121},[115,31698,126],{"class":125},[115,31700,623],{"class":174},[115,31702,503],{"class":125},[115,31704,444],{"class":174},[115,31706,30498],{"class":125},[115,31708,31709,31711,31714,31716,31719,31721],{"class":117,"line":7984},[115,31710,3025],{"class":121},[115,31712,31713],{"class":125}," ii ",[115,31715,26044],{"class":121},[115,31717,31718],{"class":125}," np.arange(",[115,31720,7359],{"class":174},[115,31722,31723],{"class":125},"(batch_y)):\n",[115,31725,31726,31729,31731,31733,31735,31738,31740,31742],{"class":117,"line":8011},[115,31727,31728],{"class":125},"    plt.subplot(",[115,31730,418],{"class":174},[115,31732,503],{"class":125},[115,31734,726],{"class":174},[115,31736,31737],{"class":125},",ii ",[115,31739,606],{"class":121},[115,31741,25119],{"class":174},[115,31743,132],{"class":125},[115,31745,31746,31749,31752,31754],{"class":117,"line":8016},[115,31747,31748],{"class":125},"    plt.imshow(batch_x[ii,:,:],",[115,31750,31751],{"class":5217},"cmap",[115,31753,171],{"class":121},[115,31755,31756],{"class":125},"plt.cm.gray)\n",[115,31758,31759,31762,31764,31766,31768],{"class":117,"line":8022},[115,31760,31761],{"class":125},"    plt.title(class_label[batch_y[ii]],",[115,31763,31497],{"class":5217},[115,31765,171],{"class":121},[115,31767,571],{"class":174},[115,31769,132],{"class":125},[115,31771,31772,31775,31778],{"class":117,"line":8034},[115,31773,31774],{"class":125},"    plt.axis(",[115,31776,31777],{"class":230},"\"off\"",[115,31779,132],{"class":125},[115,31781,31782,31785,31788,31790,31793],{"class":117,"line":8046},[115,31783,31784],{"class":125},"    plt.subplots_adjust(",[115,31786,31787],{"class":5217},"wspace",[115,31789,171],{"class":121},[115,31791,31792],{"class":174},"0.05",[115,31794,132],{"class":125},[115,31796,31797],{"class":117,"line":8058},[115,31798,31799],{"class":125},"plt.show()\n",[14,31801,31802],{},"用matplotlib进行展示的过程可以后续再补",[14,31804,31805],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31807,31808],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31810,31811],{},"模型训练：",[106,31813,31815],{"className":30379,"code":31814,"language":30381,"meta":22,"style":22},"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",[112,31816,31817,31824,31831,31835,31847,31853,31864,31874,31884,31894,31904,31909,31921,31931,31935,31939,31944,31955,31968,31979,31996,32007,32046,32062,32074,32085,32090,32101,32117,32128,32139,32150,32157,32161,32166,32171,32175,32180,32190,32211,32215,32219,32224,32229,32234,32254,32258,32263,32273,32277,32282,32291,32296,32301,32306,32316,32320,32324,32329,32334,32344,32349,32359,32364,32373,32378,32387,32392,32401,32405,32410,32420,32424,32428,32433,32448,32476,32491,32495,32500,32505,32514,32519,32528,32533,32542,32547,32556,32561,32570,32575,32584,32589,32602,32607,32617,32622,32632,32638,32644,32650,32656,32667,32673,32693,32699,32710,32716,32722,32728,32734,32740,32746,32752,32772,32778,32794,32800,32814,32820,32835,32841,32850,32856,32865,32871,32877,32886,32892,32903,32909,32928,32934,32945,32951,32971,32987,32993,33007,33013,33019,33030,33036,33042,33052,33058,33069,33075,33085,33090,33096,33145,33192,33197,33203,33222,33228,33248,33254,33260,33270,33275,33281,33297,33342,33348,33354,33360,33371,33377,33383,33389,33407,33421,33430,33439,33448,33457,33463,33469,33477,33482,33488,33499,33505,33525,33531,33537,33543,33560,33566,33572,33578,33584,33590,33617,33641,33647,33653,33659,33670,33681,33687,33704,33727,33750,33756,33761,33770,33780,33786,33791,33797,33810,33816,33827,33838,33857],{"__ignoreMap":22},[115,31818,31819,31821],{"class":117,"line":118},[115,31820,30393],{"class":121},[115,31822,31823],{"class":125}," copy\n",[115,31825,31826,31828],{"class":117,"line":37},[115,31827,30393],{"class":121},[115,31829,31830],{"class":125}," time\n",[115,31832,31833],{"class":117,"line":1180},[115,31834,2400],{"emptyLinePlaceholder":42},[115,31836,31837,31839,31842,31844],{"class":117,"line":1195},[115,31838,30393],{"class":121},[115,31840,31841],{"class":125}," pandas ",[115,31843,31384],{"class":121},[115,31845,31846],{"class":125}," pd\n",[115,31848,31849,31851],{"class":117,"line":1201},[115,31850,30393],{"class":121},[115,31852,30396],{"class":125},[115,31854,31855,31857,31859,31861],{"class":117,"line":1215},[115,31856,30738],{"class":121},[115,31858,31416],{"class":125},[115,31860,30393],{"class":121},[115,31862,31863],{"class":125}," Dataset\n",[115,31865,31866,31868,31870,31872],{"class":117,"line":1221},[115,31867,30738],{"class":121},[115,31869,31369],{"class":125},[115,31871,30393],{"class":121},[115,31873,31374],{"class":125},[115,31875,31876,31878,31880,31882],{"class":117,"line":1312},[115,31877,30738],{"class":121},[115,31879,31399],{"class":125},[115,31881,30393],{"class":121},[115,31883,31404],{"class":125},[115,31885,31886,31888,31890,31892],{"class":117,"line":1318},[115,31887,30393],{"class":121},[115,31889,31416],{"class":125},[115,31891,31384],{"class":121},[115,31893,31421],{"class":125},[115,31895,31896,31898,31900,31902],{"class":117,"line":1330},[115,31897,30393],{"class":121},[115,31899,31433],{"class":125},[115,31901,31384],{"class":121},[115,31903,31438],{"class":125},[115,31905,31906],{"class":117,"line":1612},[115,31907,31908],{"class":184},"# 导入模型\n",[115,31910,31911,31913,31916,31918],{"class":117,"line":1617},[115,31912,30738],{"class":121},[115,31914,31915],{"class":125}," model ",[115,31917,30393],{"class":121},[115,31919,31920],{"class":125}," LeNet\n",[115,31922,31923,31925,31927,31929],{"class":117,"line":1623},[115,31924,30738],{"class":121},[115,31926,30741],{"class":125},[115,31928,30393],{"class":121},[115,31930,30746],{"class":125},[115,31932,31933],{"class":117,"line":1628},[115,31934,2400],{"emptyLinePlaceholder":42},[115,31936,31937],{"class":117,"line":1642},[115,31938,2400],{"emptyLinePlaceholder":42},[115,31940,31941],{"class":117,"line":1647},[115,31942,31943],{"class":184},"# 处理训练集与验证集函数--->划分数据集\n",[115,31945,31946,31949,31952],{"class":117,"line":1653},[115,31947,31948],{"class":121},"def",[115,31950,31951],{"class":1963}," train_val_data_process",[115,31953,31954],{"class":125},"():\n",[115,31956,31957,31960,31962,31964,31966],{"class":117,"line":1674},[115,31958,31959],{"class":125},"    train_data",[115,31961,171],{"class":121},[115,31963,31456],{"class":125},[115,31965,31464],{"class":230},[115,31967,31467],{"class":125},[115,31969,31970,31973,31975,31977],{"class":117,"line":1679},[115,31971,31972],{"class":5217},"                            train",[115,31974,171],{"class":121},[115,31976,31477],{"class":174},[115,31978,31467],{"class":125},[115,31980,31981,31984,31986,31988,31990,31992,31994],{"class":117,"line":1693},[115,31982,31983],{"class":5217},"                            transform",[115,31985,171],{"class":121},[115,31987,31494],{"class":125},[115,31989,31497],{"class":5217},[115,31991,171],{"class":121},[115,31993,1026],{"class":174},[115,31995,31505],{"class":125},[115,31997,31998,32001,32003,32005],{"class":117,"line":1698},[115,31999,32000],{"class":5217},"                            download",[115,32002,171],{"class":121},[115,32004,31477],{"class":174},[115,32006,132],{"class":125},[115,32008,32009,32012,32014,32017,32020,32022,32025,32027,32029,32032,32034,32036,32039,32041,32043],{"class":117,"line":1727},[115,32010,32011],{"class":125},"    train_data,val_data",[115,32013,171],{"class":121},[115,32015,32016],{"class":125},"Data.random_split(train_data,[",[115,32018,32019],{"class":174},"round",[115,32021,126],{"class":125},[115,32023,32024],{"class":174},"0.8",[115,32026,580],{"class":121},[115,32028,7359],{"class":174},[115,32030,32031],{"class":125},"(train_data)),",[115,32033,32019],{"class":174},[115,32035,126],{"class":125},[115,32037,32038],{"class":174},"0.2",[115,32040,580],{"class":121},[115,32042,7359],{"class":174},[115,32044,32045],{"class":125},"(train_data))])\n",[115,32047,32048,32051,32053,32056,32058,32060],{"class":117,"line":1732},[115,32049,32050],{"class":125},"    train_dataloader ",[115,32052,171],{"class":121},[115,32054,32055],{"class":125}," Data.DataLoader(",[115,32057,31538],{"class":5217},[115,32059,171],{"class":121},[115,32061,31543],{"class":125},[115,32063,32064,32067,32069,32072],{"class":117,"line":1749},[115,32065,32066],{"class":5217},"                                       batch_size",[115,32068,171],{"class":121},[115,32070,32071],{"class":174},"128",[115,32073,31467],{"class":125},[115,32075,32076,32079,32081,32083],{"class":117,"line":1754},[115,32077,32078],{"class":5217},"                                       shuffle",[115,32080,171],{"class":121},[115,32082,31477],{"class":174},[115,32084,31467],{"class":125},[115,32086,32087],{"class":117,"line":1759},[115,32088,32089],{"class":184},"                                       # 规定8个进程\n",[115,32091,32092,32095,32097,32099],{"class":117,"line":1764},[115,32093,32094],{"class":5217},"                                       num_workers",[115,32096,171],{"class":121},[115,32098,520],{"class":174},[115,32100,132],{"class":125},[115,32102,32103,32106,32108,32110,32112,32114],{"class":117,"line":1778},[115,32104,32105],{"class":125},"    val_dataloader",[115,32107,171],{"class":121},[115,32109,31535],{"class":125},[115,32111,31538],{"class":5217},[115,32113,171],{"class":121},[115,32115,32116],{"class":125},"val_data,\n",[115,32118,32119,32122,32124,32126],{"class":117,"line":1783},[115,32120,32121],{"class":5217},"                                   batch_size",[115,32123,171],{"class":121},[115,32125,32071],{"class":174},[115,32127,31467],{"class":125},[115,32129,32130,32133,32135,32137],{"class":117,"line":2577},[115,32131,32132],{"class":5217},"                                   shuffle",[115,32134,171],{"class":121},[115,32136,31477],{"class":174},[115,32138,31467],{"class":125},[115,32140,32141,32144,32146,32148],{"class":117,"line":2591},[115,32142,32143],{"class":5217},"                                   num_workers",[115,32145,171],{"class":121},[115,32147,520],{"class":174},[115,32149,132],{"class":125},[115,32151,32152,32154],{"class":117,"line":2599},[115,32153,4090],{"class":121},[115,32155,32156],{"class":125}," train_dataloader,val_dataloader\n",[115,32158,32159],{"class":117,"line":2604},[115,32160,2400],{"emptyLinePlaceholder":42},[115,32162,32163],{"class":117,"line":2610},[115,32164,32165],{"class":184},"# 验证是否出错\n",[115,32167,32168],{"class":117,"line":2616},[115,32169,32170],{"class":184},"# train_val_data_process()\n",[115,32172,32173],{"class":117,"line":2621},[115,32174,2400],{"emptyLinePlaceholder":42},[115,32176,32177],{"class":117,"line":7949},[115,32178,32179],{"class":184},"# 定义模型训练函数\n",[115,32181,32182,32184,32187],{"class":117,"line":7973},[115,32183,31948],{"class":121},[115,32185,32186],{"class":1963}," train_model_process",[115,32188,32189],{"class":125},"(model,train_dataloader,val_dataloader,num_epochs):\n",[115,32191,32192,32194,32196,32198,32200,32202,32204,32206,32209],{"class":117,"line":7978},[115,32193,31238],{"class":125},[115,32195,171],{"class":121},[115,32197,30452],{"class":125},[115,32199,31245],{"class":230},[115,32201,1704],{"class":121},[115,32203,31250],{"class":125},[115,32205,1701],{"class":121},[115,32207,32208],{"class":230}," 'cpu'",[115,32210,132],{"class":125},[115,32212,32213],{"class":117,"line":7984},[115,32214,2400],{"emptyLinePlaceholder":42},[115,32216,32217],{"class":117,"line":8011},[115,32218,2400],{"emptyLinePlaceholder":42},[115,32220,32221],{"class":117,"line":8016},[115,32222,32223],{"class":184},"    # 定义优化器\n",[115,32225,32226],{"class":117,"line":8022},[115,32227,32228],{"class":184},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[115,32230,32231],{"class":117,"line":8034},[115,32232,32233],{"class":184},"    # lr为学习率\n",[115,32235,32236,32239,32241,32244,32247,32249,32252],{"class":117,"line":8046},[115,32237,32238],{"class":125},"    optimizer",[115,32240,171],{"class":121},[115,32242,32243],{"class":125},"torch.optim.Adam(model.parameters(),",[115,32245,32246],{"class":5217},"lr",[115,32248,171],{"class":121},[115,32250,32251],{"class":174},"0.001",[115,32253,132],{"class":125},[115,32255,32256],{"class":117,"line":8058},[115,32257,2400],{"emptyLinePlaceholder":42},[115,32259,32260],{"class":117,"line":9717},[115,32261,32262],{"class":184},"    # 定义损失函数使用交叉熵损失函数\n",[115,32264,32265,32268,32270],{"class":117,"line":9742},[115,32266,32267],{"class":125},"    criterion",[115,32269,171],{"class":121},[115,32271,32272],{"class":125},"nn.CrossEntropyLoss()\n",[115,32274,32275],{"class":117,"line":9765},[115,32276,2400],{"emptyLinePlaceholder":42},[115,32278,32279],{"class":117,"line":9789},[115,32280,32281],{"class":184},"    # 将模型放到GPU中进行训练\n",[115,32283,32284,32286,32288],{"class":117,"line":9794},[115,32285,31290],{"class":125},[115,32287,171],{"class":121},[115,32289,32290],{"class":125},"model.to(device)\n",[115,32292,32293],{"class":117,"line":9799},[115,32294,32295],{"class":184},"    # 复制当前模型的参数\n",[115,32297,32298],{"class":117,"line":9804},[115,32299,32300],{"class":184},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[115,32302,32303],{"class":117,"line":9813},[115,32304,32305],{"class":184},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[115,32307,32308,32311,32313],{"class":117,"line":9818},[115,32309,32310],{"class":125},"    best_model_wts",[115,32312,171],{"class":121},[115,32314,32315],{"class":125},"copy.deepcopy(model.state_dict())\n",[115,32317,32318],{"class":117,"line":9824},[115,32319,2400],{"emptyLinePlaceholder":42},[115,32321,32322],{"class":117,"line":9845},[115,32323,2400],{"emptyLinePlaceholder":42},[115,32325,32326],{"class":117,"line":9851},[115,32327,32328],{"class":184},"    # 初始化参数\n",[115,32330,32331],{"class":117,"line":9865},[115,32332,32333],{"class":184},"    # 最高准确度\n",[115,32335,32336,32339,32341],{"class":117,"line":9871},[115,32337,32338],{"class":125},"    best_acc",[115,32340,171],{"class":121},[115,32342,32343],{"class":174},"0.0\n",[115,32345,32346],{"class":117,"line":9898},[115,32347,32348],{"class":184},"    # 训练集损失列表\n",[115,32350,32351,32354,32356],{"class":117,"line":9907},[115,32352,32353],{"class":125},"    train_loss_all",[115,32355,171],{"class":121},[115,32357,32358],{"class":125},"[]\n",[115,32360,32361],{"class":117,"line":9913},[115,32362,32363],{"class":184},"    # 验证集函数列表\n",[115,32365,32366,32369,32371],{"class":117,"line":9921},[115,32367,32368],{"class":125},"    val_loss_all",[115,32370,171],{"class":121},[115,32372,32358],{"class":125},[115,32374,32375],{"class":117,"line":9926},[115,32376,32377],{"class":184},"    # 训练集准确度列表\n",[115,32379,32380,32383,32385],{"class":117,"line":16605},[115,32381,32382],{"class":125},"    train_acc_all",[115,32384,171],{"class":121},[115,32386,32358],{"class":125},[115,32388,32389],{"class":117,"line":16611},[115,32390,32391],{"class":184},"    # 验证集准确度列表\n",[115,32393,32394,32397,32399],{"class":117,"line":16634},[115,32395,32396],{"class":125},"    val_acc_all",[115,32398,171],{"class":121},[115,32400,32358],{"class":125},[115,32402,32403],{"class":117,"line":16640},[115,32404,2400],{"emptyLinePlaceholder":42},[115,32406,32407],{"class":117,"line":16663},[115,32408,32409],{"class":184},"    # 保存当前时间--->方便看每轮训练的时间\n",[115,32411,32412,32415,32417],{"class":117,"line":16677},[115,32413,32414],{"class":125},"    since",[115,32416,171],{"class":121},[115,32418,32419],{"class":125},"time.time()\n",[115,32421,32422],{"class":117,"line":16697},[115,32423,2400],{"emptyLinePlaceholder":42},[115,32425,32426],{"class":117,"line":16703},[115,32427,2400],{"emptyLinePlaceholder":42},[115,32429,32430],{"class":117,"line":16714},[115,32431,32432],{"class":184},"    # 准备工作完成--->开始训练模型\n",[115,32434,32435,32437,32440,32442,32445],{"class":117,"line":16737},[115,32436,3201],{"class":121},[115,32438,32439],{"class":125}," epoch ",[115,32441,26044],{"class":121},[115,32443,32444],{"class":174}," range",[115,32446,32447],{"class":125},"(num_epochs):\n",[115,32449,32450,32453,32455,32458,32461,32463,32465,32467,32470,32472,32474],{"class":117,"line":16759},[115,32451,32452],{"class":174},"        print",[115,32454,126],{"class":125},[115,32456,32457],{"class":230},"\"Epoch ",[115,32459,32460],{"class":174},"{}",[115,32462,709],{"class":230},[115,32464,32460],{"class":174},[115,32466,376],{"class":230},[115,32468,32469],{"class":125},".format(epoch,num_epochs",[115,32471,657],{"class":121},[115,32473,343],{"class":174},[115,32475,30498],{"class":125},[115,32477,32478,32480,32482,32485,32487,32489],{"class":117,"line":16764},[115,32479,32452],{"class":174},[115,32481,126],{"class":125},[115,32483,32484],{"class":230},"\"-\"",[115,32486,580],{"class":121},[115,32488,571],{"class":174},[115,32490,132],{"class":125},[115,32492,32493],{"class":117,"line":16770},[115,32494,2400],{"emptyLinePlaceholder":42},[115,32496,32497],{"class":117,"line":16784},[115,32498,32499],{"class":184},"        # 初始化参数\n",[115,32501,32502],{"class":117,"line":16797},[115,32503,32504],{"class":184},"        # 训练集损失函数\n",[115,32506,32507,32510,32512],{"class":117,"line":16802},[115,32508,32509],{"class":125},"        train_loss",[115,32511,171],{"class":121},[115,32513,32343],{"class":174},[115,32515,32516],{"class":117,"line":16816},[115,32517,32518],{"class":184},"        # 训练集准确度\n",[115,32520,32521,32524,32526],{"class":117,"line":16821},[115,32522,32523],{"class":125},"        train_corrects",[115,32525,171],{"class":121},[115,32527,3085],{"class":174},[115,32529,32530],{"class":117,"line":16827},[115,32531,32532],{"class":184},"        # 验证集损失函数\n",[115,32534,32535,32538,32540],{"class":117,"line":16832},[115,32536,32537],{"class":125},"        val_loss",[115,32539,171],{"class":121},[115,32541,32343],{"class":174},[115,32543,32544],{"class":117,"line":16846},[115,32545,32546],{"class":184},"        # 验证集准确度\n",[115,32548,32549,32552,32554],{"class":117,"line":16851},[115,32550,32551],{"class":125},"        val_corrects",[115,32553,171],{"class":121},[115,32555,3085],{"class":174},[115,32557,32558],{"class":117,"line":16856},[115,32559,32560],{"class":184},"        # 训练集样本数量\n",[115,32562,32563,32566,32568],{"class":117,"line":16870},[115,32564,32565],{"class":125},"        train_num",[115,32567,171],{"class":121},[115,32569,3085],{"class":174},[115,32571,32572],{"class":117,"line":16882},[115,32573,32574],{"class":184},"        # 验证集样本数量\n",[115,32576,32577,32580,32582],{"class":117,"line":16887},[115,32578,32579],{"class":125},"        val_num",[115,32581,171],{"class":121},[115,32583,3085],{"class":174},[115,32585,32586],{"class":117,"line":16900},[115,32587,32588],{"class":184},"        # 将数据放到设备,并开始训练\n",[115,32590,32591,32593,32595,32597,32599],{"class":117,"line":16905},[115,32592,3403],{"class":121},[115,32594,31602],{"class":125},[115,32596,26044],{"class":121},[115,32598,31607],{"class":174},[115,32600,32601],{"class":125},"(train_dataloader):\n",[115,32603,32604],{"class":117,"line":16910},[115,32605,32606],{"class":184},"            # 将特征放入到训练设备\n",[115,32608,32609,32612,32614],{"class":117,"line":16915},[115,32610,32611],{"class":125},"            b_x",[115,32613,171],{"class":121},[115,32615,32616],{"class":125},"b_x.to(device)\n",[115,32618,32619],{"class":117,"line":16928},[115,32620,32621],{"class":184},"            # 将标签放入到训练设备当中\n",[115,32623,32624,32627,32629],{"class":117,"line":16933},[115,32625,32626],{"class":125},"            b_y",[115,32628,171],{"class":121},[115,32630,32631],{"class":125},"b_y.to(device)\n",[115,32633,32635],{"class":117,"line":32634},98,[115,32636,32637],{"class":184},"            # 设置模型为训练模式\n",[115,32639,32641],{"class":117,"line":32640},99,[115,32642,32643],{"class":125},"            model.train()\n",[115,32645,32647],{"class":117,"line":32646},100,[115,32648,32649],{"class":184},"            # 将数据放到模型当中,开始前向传播\n",[115,32651,32653],{"class":117,"line":32652},101,[115,32654,32655],{"class":184},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[115,32657,32659,32662,32664],{"class":117,"line":32658},102,[115,32660,32661],{"class":125},"            output",[115,32663,171],{"class":121},[115,32665,32666],{"class":125},"model(b_x)\n",[115,32668,32670],{"class":117,"line":32669},103,[115,32671,32672],{"class":184},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[115,32674,32676,32679,32681,32684,32687,32689,32691],{"class":117,"line":32675},104,[115,32677,32678],{"class":125},"            pre_lab",[115,32680,171],{"class":121},[115,32682,32683],{"class":125},"torch.argmax(output,",[115,32685,32686],{"class":5217},"dim",[115,32688,171],{"class":121},[115,32690,343],{"class":174},[115,32692,132],{"class":125},[115,32694,32696],{"class":117,"line":32695},105,[115,32697,32698],{"class":184},"            # 计算每一个batch的损失函数\n",[115,32700,32702,32705,32707],{"class":117,"line":32701},106,[115,32703,32704],{"class":125},"            loss",[115,32706,171],{"class":121},[115,32708,32709],{"class":125},"criterion(output,b_y)\n",[115,32711,32713],{"class":117,"line":32712},107,[115,32714,32715],{"class":184},"            # 将梯度初始化为0\n",[115,32717,32719],{"class":117,"line":32718},108,[115,32720,32721],{"class":125},"            optimizer.zero_grad()\n",[115,32723,32725],{"class":117,"line":32724},109,[115,32726,32727],{"class":184},"            # 梯度置为0后再进行反向传播\n",[115,32729,32731],{"class":117,"line":32730},110,[115,32732,32733],{"class":125},"            loss.backward()\n",[115,32735,32737],{"class":117,"line":32736},111,[115,32738,32739],{"class":184},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[115,32741,32743],{"class":117,"line":32742},112,[115,32744,32745],{"class":125},"            optimizer.step()\n",[115,32747,32749],{"class":117,"line":32748},113,[115,32750,32751],{"class":184},"            # loss.item()指的是batch的平均损失\n",[115,32753,32755,32758,32760,32763,32765,32768,32770],{"class":117,"line":32754},114,[115,32756,32757],{"class":125},"            train_loss",[115,32759,9478],{"class":121},[115,32761,32762],{"class":125},"loss.item()",[115,32764,580],{"class":121},[115,32766,32767],{"class":125},"b_x.size(",[115,32769,317],{"class":174},[115,32771,132],{"class":125},[115,32773,32775],{"class":117,"line":32774},115,[115,32776,32777],{"class":184},"            # 计算每个批次中正确预测的数量\n",[115,32779,32781,32784,32786,32789,32791],{"class":117,"line":32780},116,[115,32782,32783],{"class":125},"            train_corrects",[115,32785,9478],{"class":121},[115,32787,32788],{"class":125},"torch.sum(pre_lab",[115,32790,2949],{"class":121},[115,32792,32793],{"class":125},"b_y.data)\n",[115,32795,32797],{"class":117,"line":32796},117,[115,32798,32799],{"class":184},"            # 计算目前为止一共处理了多少样本\n",[115,32801,32803,32806,32808,32810,32812],{"class":117,"line":32802},118,[115,32804,32805],{"class":125},"            train_num",[115,32807,9478],{"class":121},[115,32809,32767],{"class":125},[115,32811,317],{"class":174},[115,32813,132],{"class":125},[115,32815,32817],{"class":117,"line":32816},119,[115,32818,32819],{"class":184},"        # 验证数据\n",[115,32821,32823,32825,32828,32830,32832],{"class":117,"line":32822},120,[115,32824,3403],{"class":121},[115,32826,32827],{"class":125}," step ,(b_x,b_y) ",[115,32829,26044],{"class":121},[115,32831,31607],{"class":174},[115,32833,32834],{"class":125},"(val_dataloader):\n",[115,32836,32838],{"class":117,"line":32837},121,[115,32839,32840],{"class":184},"            # 将特征放到验证设备当中\n",[115,32842,32844,32846,32848],{"class":117,"line":32843},122,[115,32845,32611],{"class":125},[115,32847,171],{"class":121},[115,32849,32616],{"class":125},[115,32851,32853],{"class":117,"line":32852},123,[115,32854,32855],{"class":184},"            # 将标签放到放到训练设备当中\n",[115,32857,32859,32861,32863],{"class":117,"line":32858},124,[115,32860,32626],{"class":125},[115,32862,171],{"class":121},[115,32864,32631],{"class":125},[115,32866,32868],{"class":117,"line":32867},125,[115,32869,32870],{"class":184},"            # 开启验证模式，设置模型为评估模式\n",[115,32872,32874],{"class":117,"line":32873},126,[115,32875,32876],{"class":125},"            model.eval()\n",[115,32878,32880,32883],{"class":117,"line":32879},127,[115,32881,32882],{"class":121},"            with",[115,32884,32885],{"class":125}," torch.no_grad():\n",[115,32887,32889],{"class":117,"line":32888},128,[115,32890,32891],{"class":184},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[115,32893,32895,32898,32900],{"class":117,"line":32894},129,[115,32896,32897],{"class":125},"                output ",[115,32899,171],{"class":121},[115,32901,32902],{"class":125}," model(b_x)\n",[115,32904,32906],{"class":117,"line":32905},130,[115,32907,32908],{"class":184},"                # 查找每一行中最大值对应的下标\n",[115,32910,32912,32915,32917,32920,32922,32924,32926],{"class":117,"line":32911},131,[115,32913,32914],{"class":125},"                pre_lab ",[115,32916,171],{"class":121},[115,32918,32919],{"class":125}," torch.argmax(output, ",[115,32921,32686],{"class":5217},[115,32923,171],{"class":121},[115,32925,343],{"class":174},[115,32927,132],{"class":125},[115,32929,32931],{"class":117,"line":32930},132,[115,32932,32933],{"class":184},"                # 计算验证集上的当前 batch 损失\n",[115,32935,32937,32940,32942],{"class":117,"line":32936},133,[115,32938,32939],{"class":125},"                val_batch_loss ",[115,32941,171],{"class":121},[115,32943,32944],{"class":125}," criterion(output, b_y)\n",[115,32946,32948],{"class":117,"line":32947},134,[115,32949,32950],{"class":184},"                # 对损失函数进行累加（按样本数加权）\n",[115,32952,32954,32957,32959,32962,32964,32967,32969],{"class":117,"line":32953},135,[115,32955,32956],{"class":125},"                val_loss ",[115,32958,9478],{"class":121},[115,32960,32961],{"class":125}," val_batch_loss.item() ",[115,32963,580],{"class":121},[115,32965,32966],{"class":125}," b_x.size(",[115,32968,317],{"class":174},[115,32970,132],{"class":125},[115,32972,32974,32977,32979,32982,32984],{"class":117,"line":32973},136,[115,32975,32976],{"class":125},"                val_corrects ",[115,32978,9478],{"class":121},[115,32980,32981],{"class":125}," torch.sum(pre_lab ",[115,32983,2949],{"class":121},[115,32985,32986],{"class":125}," b_y.data)\n",[115,32988,32990],{"class":117,"line":32989},137,[115,32991,32992],{"class":184},"                # 当前用于验证的样本数量\n",[115,32994,32996,32999,33001,33003,33005],{"class":117,"line":32995},138,[115,32997,32998],{"class":125},"            val_num ",[115,33000,9478],{"class":121},[115,33002,32966],{"class":125},[115,33004,317],{"class":174},[115,33006,132],{"class":125},[115,33008,33010],{"class":117,"line":33009},139,[115,33011,33012],{"class":184},"        # 计算并保存每一次迭代的loss值和准确率\n",[115,33014,33016],{"class":117,"line":33015},140,[115,33017,33018],{"class":184},"        # 计算并保存训练集的loss值\n",[115,33020,33022,33025,33027],{"class":117,"line":33021},141,[115,33023,33024],{"class":125},"        train_loss_all.append(train_loss",[115,33026,709],{"class":121},[115,33028,33029],{"class":125},"train_num)\n",[115,33031,33033],{"class":117,"line":33032},142,[115,33034,33035],{"class":184},"        # 取双精度\n",[115,33037,33039],{"class":117,"line":33038},143,[115,33040,33041],{"class":184},"        # 计算并保存训练集的准确率\n",[115,33043,33045,33048,33050],{"class":117,"line":33044},144,[115,33046,33047],{"class":125},"        train_acc_all.append(train_corrects.double().item()",[115,33049,709],{"class":121},[115,33051,33029],{"class":125},[115,33053,33055],{"class":117,"line":33054},145,[115,33056,33057],{"class":184},"        # 计算并保存验证集的loss值\n",[115,33059,33061,33064,33066],{"class":117,"line":33060},146,[115,33062,33063],{"class":125},"        val_loss_all.append(val_loss",[115,33065,709],{"class":121},[115,33067,33068],{"class":125},"val_num)\n",[115,33070,33072],{"class":117,"line":33071},147,[115,33073,33074],{"class":184},"        # 计算并保存验证集的准确率\n",[115,33076,33078,33081,33083],{"class":117,"line":33077},148,[115,33079,33080],{"class":125},"        val_acc_all.append(val_corrects.double().item()",[115,33082,709],{"class":121},[115,33084,33068],{"class":125},[115,33086,33088],{"class":117,"line":33087},149,[115,33089,2400],{"emptyLinePlaceholder":42},[115,33091,33093],{"class":117,"line":33092},150,[115,33094,33095],{"class":184},"        # 打印训练一轮的loss值和准确率\n",[115,33097,33099,33101,33103,33105,33107,33110,33112,33115,33117,33120,33122,33124,33126,33128,33131,33133,33135,33138,33140,33142],{"class":117,"line":33098},151,[115,33100,32452],{"class":174},[115,33102,126],{"class":125},[115,33104,3592],{"class":230},[115,33106,32460],{"class":174},[115,33108,33109],{"class":230},"train loss:",[115,33111,1021],{"class":174},[115,33113,33114],{"class":121},":.4f",[115,33116,1071],{"class":174},[115,33118,33119],{"class":230}," train acc:",[115,33121,1021],{"class":174},[115,33123,33114],{"class":121},[115,33125,1071],{"class":174},[115,33127,3592],{"class":230},[115,33129,33130],{"class":125},".format(epoch,train_loss_all[",[115,33132,657],{"class":121},[115,33134,343],{"class":174},[115,33136,33137],{"class":125},"],train_acc_all[",[115,33139,657],{"class":121},[115,33141,343],{"class":174},[115,33143,33144],{"class":125},"]))\n",[115,33146,33148,33150,33152,33154,33156,33159,33161,33163,33165,33168,33170,33172,33174,33176,33179,33181,33183,33186,33188,33190],{"class":117,"line":33147},152,[115,33149,32452],{"class":174},[115,33151,126],{"class":125},[115,33153,3592],{"class":230},[115,33155,32460],{"class":174},[115,33157,33158],{"class":230},"val loss:",[115,33160,1021],{"class":174},[115,33162,33114],{"class":121},[115,33164,1071],{"class":174},[115,33166,33167],{"class":230}," val acc:",[115,33169,1021],{"class":174},[115,33171,33114],{"class":121},[115,33173,1071],{"class":174},[115,33175,3592],{"class":230},[115,33177,33178],{"class":125},".format(epoch,val_loss_all[",[115,33180,657],{"class":121},[115,33182,343],{"class":174},[115,33184,33185],{"class":125},"],val_acc_all[",[115,33187,657],{"class":121},[115,33189,343],{"class":174},[115,33191,33144],{"class":125},[115,33193,33195],{"class":117,"line":33194},153,[115,33196,2400],{"emptyLinePlaceholder":42},[115,33198,33200],{"class":117,"line":33199},154,[115,33201,33202],{"class":184},"        # 判断准确度--->保存最优模型\n",[115,33204,33206,33208,33211,33213,33215,33217,33219],{"class":117,"line":33205},155,[115,33207,2497],{"class":121},[115,33209,33210],{"class":125}," val_acc_all[",[115,33212,657],{"class":121},[115,33214,343],{"class":174},[115,33216,1065],{"class":125},[115,33218,1085],{"class":121},[115,33220,33221],{"class":125},"best_acc:\n",[115,33223,33225],{"class":117,"line":33224},156,[115,33226,33227],{"class":184},"            # 保存当前模型准确度\n",[115,33229,33231,33234,33236,33238,33241,33243,33245],{"class":117,"line":33230},157,[115,33232,33233],{"class":125},"            best_acc:",[115,33235,165],{"class":174},[115,33237,171],{"class":121},[115,33239,33240],{"class":125},"val_acc_all[",[115,33242,657],{"class":121},[115,33244,343],{"class":174},[115,33246,33247],{"class":125},"]\n",[115,33249,33251],{"class":117,"line":33250},158,[115,33252,33253],{"class":184},"            # 保存当前的准确度\n",[115,33255,33257],{"class":117,"line":33256},159,[115,33258,33259],{"class":184},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[115,33261,33263,33266,33268],{"class":117,"line":33262},160,[115,33264,33265],{"class":125},"            best_model_wts",[115,33267,171],{"class":121},[115,33269,32315],{"class":125},[115,33271,33273],{"class":117,"line":33272},161,[115,33274,2400],{"emptyLinePlaceholder":42},[115,33276,33278],{"class":117,"line":33277},162,[115,33279,33280],{"class":184},"        # 计算耗时\n",[115,33282,33284,33287,33289,33292,33294],{"class":117,"line":33283},163,[115,33285,33286],{"class":125},"        time_use",[115,33288,171],{"class":121},[115,33290,33291],{"class":125},"time.time()",[115,33293,657],{"class":121},[115,33295,33296],{"class":125},"since\n",[115,33298,33300,33302,33304,33307,33309,33312,33314,33316,33318,33320,33322,33325,33328,33331,33333,33336,33338,33340],{"class":117,"line":33299},164,[115,33301,32452],{"class":174},[115,33303,126],{"class":125},[115,33305,33306],{"class":230},"'训练和验证耗费的时间",[115,33308,1021],{"class":174},[115,33310,33311],{"class":121},":.0f",[115,33313,1071],{"class":174},[115,33315,669],{"class":230},[115,33317,1021],{"class":174},[115,33319,33311],{"class":121},[115,33321,1071],{"class":174},[115,33323,33324],{"class":230},"s'",[115,33326,33327],{"class":125},".format(time_use",[115,33329,33330],{"class":121},"\u002F\u002F",[115,33332,1032],{"class":174},[115,33334,33335],{"class":125},",time_use",[115,33337,453],{"class":121},[115,33339,1032],{"class":174},[115,33341,30498],{"class":125},[115,33343,33345],{"class":117,"line":33344},165,[115,33346,33347],{"class":184},"    # 选择最优参数\n",[115,33349,33351],{"class":117,"line":33350},166,[115,33352,33353],{"class":184},"    # 加载最高准确率下的模型参数\n",[115,33355,33357],{"class":117,"line":33356},167,[115,33358,33359],{"class":184},"    # model.load_state_dict(best_model_wts)\n",[115,33361,33363,33366,33369],{"class":117,"line":33362},168,[115,33364,33365],{"class":125},"    torch.save(model.state_dict(best_model_wts), ",[115,33367,33368],{"class":230},"'.\u002Fbest_model.pth'",[115,33370,132],{"class":125},[115,33372,33374],{"class":117,"line":33373},169,[115,33375,33376],{"class":184},"    # 或者写成\n",[115,33378,33380],{"class":117,"line":33379},170,[115,33381,33382],{"class":184},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[115,33384,33386],{"class":117,"line":33385},171,[115,33387,33388],{"class":184},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[115,33390,33392,33395,33397,33400,33403,33405],{"class":117,"line":33391},172,[115,33393,33394],{"class":125},"    train_process",[115,33396,171],{"class":121},[115,33398,33399],{"class":125},"pd.DataFrame(",[115,33401,33402],{"class":5217},"data",[115,33404,171],{"class":121},[115,33406,1546],{"class":125},[115,33408,33410,33413,33415,33418],{"class":117,"line":33409},173,[115,33411,33412],{"class":230},"        \"epoch\"",[115,33414,984],{"class":125},[115,33416,33417],{"class":174},"range",[115,33419,33420],{"class":125},"(num_epochs),\n",[115,33422,33424,33427],{"class":117,"line":33423},174,[115,33425,33426],{"class":230},"        \"train_loss_all\"",[115,33428,33429],{"class":125},":train_loss_all,\n",[115,33431,33433,33436],{"class":117,"line":33432},175,[115,33434,33435],{"class":230},"        \"val_loss_all\"",[115,33437,33438],{"class":125},":val_loss_all,\n",[115,33440,33442,33445],{"class":117,"line":33441},176,[115,33443,33444],{"class":230},"        \"train_acc_all\"",[115,33446,33447],{"class":125},":train_acc_all,\n",[115,33449,33451,33454],{"class":117,"line":33450},177,[115,33452,33453],{"class":230},"        \"val_acc_all\"",[115,33455,33456],{"class":125},":val_acc_all\n",[115,33458,33460],{"class":117,"line":33459},178,[115,33461,33462],{"class":125},"    })\n",[115,33464,33466],{"class":117,"line":33465},179,[115,33467,33468],{"class":184},"    # 返回训练保存的过程\n",[115,33470,33472,33474],{"class":117,"line":33471},180,[115,33473,4090],{"class":121},[115,33475,33476],{"class":125}," train_process\n",[115,33478,33480],{"class":117,"line":33479},181,[115,33481,2400],{"emptyLinePlaceholder":42},[115,33483,33485],{"class":117,"line":33484},182,[115,33486,33487],{"class":184},"# 将loss值和精度按照图片的形式展示出来\n",[115,33489,33491,33493,33496],{"class":117,"line":33490},183,[115,33492,31948],{"class":121},[115,33494,33495],{"class":1963}," matplot_acc_loss",[115,33497,33498],{"class":125},"(train_process):\n",[115,33500,33502],{"class":117,"line":33501},184,[115,33503,33504],{"class":184},"    # 设置图的大小\n",[115,33506,33508,33511,33513,33515,33517,33519,33521,33523],{"class":117,"line":33507},185,[115,33509,33510],{"class":125},"    plt.figure(",[115,33512,31694],{"class":5217},[115,33514,171],{"class":121},[115,33516,126],{"class":125},[115,33518,623],{"class":174},[115,33520,503],{"class":125},[115,33522,418],{"class":174},[115,33524,30498],{"class":125},[115,33526,33528],{"class":117,"line":33527},186,[115,33529,33530],{"class":184},"    # 设置图中有几张图\n",[115,33532,33534],{"class":117,"line":33533},187,[115,33535,33536],{"class":184},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[115,33538,33540],{"class":117,"line":33539},188,[115,33541,33542],{"class":184},"    # ①loss图\n",[115,33544,33546,33548,33550,33552,33554,33556,33558],{"class":117,"line":33545},189,[115,33547,31728],{"class":125},[115,33549,343],{"class":174},[115,33551,503],{"class":125},[115,33553,203],{"class":174},[115,33555,503],{"class":125},[115,33557,343],{"class":174},[115,33559,132],{"class":125},[115,33561,33563],{"class":117,"line":33562},190,[115,33564,33565],{"class":184},"    # 补充:\n",[115,33567,33569],{"class":117,"line":33568},191,[115,33570,33571],{"class":184},"    # plt.subplot(nrows, ncols, index)\n",[115,33573,33575],{"class":117,"line":33574},192,[115,33576,33577],{"class":184},"    # nrows：行数\n",[115,33579,33581],{"class":117,"line":33580},193,[115,33582,33583],{"class":184},"    # ncols：列数\n",[115,33585,33587],{"class":117,"line":33586},194,[115,33588,33589],{"class":184},"    # index：目前选中第几个子图（从1开始）\n",[115,33591,33593,33596,33599,33602,33605,33607,33610,33612,33615],{"class":117,"line":33592},195,[115,33594,33595],{"class":125},"    plt.plot(train_process[",[115,33597,33598],{"class":230},"\"epoch\"",[115,33600,33601],{"class":125},"],train_process.train_loss_all,",[115,33603,33604],{"class":230},"'ro-'",[115,33606,503],{"class":125},[115,33608,33609],{"class":5217},"label",[115,33611,171],{"class":121},[115,33613,33614],{"class":230},"'train loss'",[115,33616,132],{"class":125},[115,33618,33620,33622,33624,33627,33630,33632,33634,33636,33639],{"class":117,"line":33619},196,[115,33621,33595],{"class":125},[115,33623,33598],{"class":230},[115,33625,33626],{"class":125},"],train_process.val_loss_all,",[115,33628,33629],{"class":230},"'bs--'",[115,33631,503],{"class":125},[115,33633,33609],{"class":5217},[115,33635,171],{"class":121},[115,33637,33638],{"class":230},"'val loss'",[115,33640,132],{"class":125},[115,33642,33644],{"class":117,"line":33643},197,[115,33645,33646],{"class":184},"    # 添加一个图例\n",[115,33648,33650],{"class":117,"line":33649},198,[115,33651,33652],{"class":125},"    plt.legend()\n",[115,33654,33656],{"class":117,"line":33655},199,[115,33657,33658],{"class":184},"    # 给轴添加标签\n",[115,33660,33662,33665,33668],{"class":117,"line":33661},200,[115,33663,33664],{"class":125},"    plt.xlabel(",[115,33666,33667],{"class":230},"'epoch'",[115,33669,132],{"class":125},[115,33671,33673,33676,33679],{"class":117,"line":33672},201,[115,33674,33675],{"class":125},"    plt.ylabel(",[115,33677,33678],{"class":230},"'loss'",[115,33680,132],{"class":125},[115,33682,33684],{"class":117,"line":33683},202,[115,33685,33686],{"class":184},"    # ②准确度图\n",[115,33688,33690,33692,33694,33696,33698,33700,33702],{"class":117,"line":33689},203,[115,33691,31728],{"class":125},[115,33693,343],{"class":174},[115,33695,503],{"class":125},[115,33697,203],{"class":174},[115,33699,503],{"class":125},[115,33701,203],{"class":174},[115,33703,132],{"class":125},[115,33705,33707,33709,33711,33714,33716,33718,33720,33722,33725],{"class":117,"line":33706},204,[115,33708,33595],{"class":125},[115,33710,33598],{"class":230},[115,33712,33713],{"class":125},"],train_process.train_acc_all,",[115,33715,33604],{"class":230},[115,33717,503],{"class":125},[115,33719,33609],{"class":5217},[115,33721,171],{"class":121},[115,33723,33724],{"class":230},"'train acc'",[115,33726,132],{"class":125},[115,33728,33730,33732,33734,33737,33739,33741,33743,33745,33748],{"class":117,"line":33729},205,[115,33731,33595],{"class":125},[115,33733,33598],{"class":230},[115,33735,33736],{"class":125},"],train_process.val_acc_all,",[115,33738,33629],{"class":230},[115,33740,503],{"class":125},[115,33742,33609],{"class":5217},[115,33744,171],{"class":121},[115,33746,33747],{"class":230},"'val acc'",[115,33749,132],{"class":125},[115,33751,33753],{"class":117,"line":33752},206,[115,33754,33755],{"class":184},"    # 添加图例\n",[115,33757,33759],{"class":117,"line":33758},207,[115,33760,33652],{"class":125},[115,33762,33764,33766,33768],{"class":117,"line":33763},208,[115,33765,33664],{"class":125},[115,33767,33598],{"class":230},[115,33769,132],{"class":125},[115,33771,33773,33775,33778],{"class":117,"line":33772},209,[115,33774,33675],{"class":125},[115,33776,33777],{"class":230},"\"acc\"",[115,33779,132],{"class":125},[115,33781,33783],{"class":117,"line":33782},210,[115,33784,33785],{"class":125},"    plt.show()\n",[115,33787,33789],{"class":117,"line":33788},211,[115,33790,2400],{"emptyLinePlaceholder":42},[115,33792,33794],{"class":117,"line":33793},212,[115,33795,33796],{"class":184},"# 正式开始训练:\n",[115,33798,33800,33802,33804,33806,33808],{"class":117,"line":33799},213,[115,33801,1531],{"class":121},[115,33803,31221],{"class":174},[115,33805,2949],{"class":121},[115,33807,31226],{"class":230},[115,33809,3739],{"class":125},[115,33811,33813],{"class":117,"line":33812},214,[115,33814,33815],{"class":184},"    # 将模型实例化\n",[115,33817,33819,33822,33824],{"class":117,"line":33818},215,[115,33820,33821],{"class":125},"    LeNet",[115,33823,171],{"class":121},[115,33825,33826],{"class":125},"LeNet()\n",[115,33828,33830,33833,33835],{"class":117,"line":33829},216,[115,33831,33832],{"class":125},"    train_dataloader,val_dataloader",[115,33834,171],{"class":121},[115,33836,33837],{"class":125},"train_val_data_process()\n",[115,33839,33841,33843,33845,33848,33851,33853,33855],{"class":117,"line":33840},217,[115,33842,33394],{"class":125},[115,33844,171],{"class":121},[115,33846,33847],{"class":125},"train_model_process(LeNet,train_dataloader,val_dataloader,",[115,33849,33850],{"class":5217},"num_epochs",[115,33852,171],{"class":121},[115,33854,825],{"class":174},[115,33856,132],{"class":125},[115,33858,33860],{"class":117,"line":33859},218,[115,33861,33862],{"class":125},"    matplot_acc_loss(train_process)\n",[14,33864,33865],{},"画图的补充点学习：",[14,33867,33868],{},[20,33869],{"alt":22,"src":33870},"\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",[69,33872,33873],{"start":1180},[72,33874,33875],{},"测试",[106,33877,33879],{"className":30379,"code":33878,"language":30381,"meta":22,"style":22},"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",[112,33880,33881,33887,33897,33909,33919,33924,33934,33944,33948,33953,33962,33979,33991,34008,34019,34035,34040,34051,34062,34073,34080,34084,34089,34099,34104,34121,34129,34133,34138,34147,34156,34160,34165,34170,34175,34182,34187,34199,34209,34219,34224,34228,34233,34242,34247,34263,34268,34273,34278,34292,34297,34311,34315,34320,34335,34340,34352,34356,34361,34373,34378,34386,34391,34396,34406,34411,34420,34425,34430,34434,34439,34444,34460,34468,34473,34478,34537,34543,34548,34559,34567,34575,34579,34584,34588,34593,34601,34606,34622,34627,34637,34647],{"__ignoreMap":22},[115,33882,33883,33885],{"class":117,"line":118},[115,33884,30393],{"class":121},[115,33886,30396],{"class":125},[115,33888,33889,33891,33893,33895],{"class":117,"line":37},[115,33890,30393],{"class":121},[115,33892,31416],{"class":125},[115,33894,31384],{"class":121},[115,33896,31421],{"class":125},[115,33898,33899,33901,33904,33906],{"class":117,"line":1180},[115,33900,30738],{"class":121},[115,33902,33903],{"class":125}," jupyter_client.consoleapp ",[115,33905,30393],{"class":121},[115,33907,33908],{"class":125}," classes\n",[115,33910,33911,33913,33915,33917],{"class":117,"line":1195},[115,33912,30738],{"class":121},[115,33914,31399],{"class":125},[115,33916,30393],{"class":121},[115,33918,31404],{"class":125},[115,33920,33921],{"class":117,"line":1201},[115,33922,33923],{"class":184},"# 导入数据集\n",[115,33925,33926,33928,33930,33932],{"class":117,"line":1215},[115,33927,30738],{"class":121},[115,33929,31369],{"class":125},[115,33931,30393],{"class":121},[115,33933,31374],{"class":125},[115,33935,33936,33938,33940,33942],{"class":117,"line":1221},[115,33937,30738],{"class":121},[115,33939,31915],{"class":125},[115,33941,30393],{"class":121},[115,33943,31920],{"class":125},[115,33945,33946],{"class":117,"line":1312},[115,33947,2400],{"emptyLinePlaceholder":42},[115,33949,33950],{"class":117,"line":1318},[115,33951,33952],{"class":184},"# 测试数据处理\n",[115,33954,33955,33957,33960],{"class":117,"line":1330},[115,33956,31948],{"class":121},[115,33958,33959],{"class":1963}," test_data_process",[115,33961,31954],{"class":125},[115,33963,33964,33967,33969,33971,33973,33975,33977],{"class":117,"line":1612},[115,33965,33966],{"class":125},"    test_data",[115,33968,171],{"class":121},[115,33970,31456],{"class":125},[115,33972,31459],{"class":5217},[115,33974,171],{"class":121},[115,33976,31464],{"class":230},[115,33978,31467],{"class":125},[115,33980,33981,33984,33986,33989],{"class":117,"line":1617},[115,33982,33983],{"class":5217},"                           train",[115,33985,171],{"class":121},[115,33987,33988],{"class":174},"False",[115,33990,31467],{"class":125},[115,33992,33993,33996,33998,34000,34002,34004,34006],{"class":117,"line":1623},[115,33994,33995],{"class":5217},"                           transform",[115,33997,171],{"class":121},[115,33999,31494],{"class":125},[115,34001,31497],{"class":5217},[115,34003,171],{"class":121},[115,34005,1026],{"class":174},[115,34007,31505],{"class":125},[115,34009,34010,34013,34015,34017],{"class":117,"line":1628},[115,34011,34012],{"class":5217},"                           download",[115,34014,171],{"class":121},[115,34016,31477],{"class":174},[115,34018,132],{"class":125},[115,34020,34021,34024,34026,34028,34030,34032],{"class":117,"line":1642},[115,34022,34023],{"class":125},"    test_dataloader",[115,34025,171],{"class":121},[115,34027,31535],{"class":125},[115,34029,31538],{"class":5217},[115,34031,171],{"class":121},[115,34033,34034],{"class":125},"test_data,\n",[115,34036,34037],{"class":117,"line":1647},[115,34038,34039],{"class":184},"                                    # 这里是一张一张进行测试\n",[115,34041,34042,34045,34047,34049],{"class":117,"line":1653},[115,34043,34044],{"class":5217},"                                    batch_size",[115,34046,171],{"class":121},[115,34048,343],{"class":174},[115,34050,31467],{"class":125},[115,34052,34053,34056,34058,34060],{"class":117,"line":1674},[115,34054,34055],{"class":5217},"                                    shuffle",[115,34057,171],{"class":121},[115,34059,31477],{"class":174},[115,34061,31467],{"class":125},[115,34063,34064,34067,34069,34071],{"class":117,"line":1679},[115,34065,34066],{"class":5217},"                                    num_workers",[115,34068,171],{"class":121},[115,34070,317],{"class":174},[115,34072,132],{"class":125},[115,34074,34075,34077],{"class":117,"line":1693},[115,34076,4090],{"class":121},[115,34078,34079],{"class":125}," test_dataloader\n",[115,34081,34082],{"class":117,"line":1698},[115,34083,2400],{"emptyLinePlaceholder":42},[115,34085,34086],{"class":117,"line":1727},[115,34087,34088],{"class":184},"# 定义模型测试函数\n",[115,34090,34091,34093,34096],{"class":117,"line":1732},[115,34092,31948],{"class":121},[115,34094,34095],{"class":1963}," test_model_process",[115,34097,34098],{"class":125},"(model,test_dataloader):\n",[115,34100,34101],{"class":117,"line":1749},[115,34102,34103],{"class":184},"    # 将模型放到设备当中，先进行判断\n",[115,34105,34106,34108,34110,34112,34114,34116,34118],{"class":117,"line":1754},[115,34107,31238],{"class":125},[115,34109,171],{"class":121},[115,34111,31245],{"class":230},[115,34113,1704],{"class":121},[115,34115,31250],{"class":125},[115,34117,1701],{"class":121},[115,34119,34120],{"class":230}," \"cpu\"\n",[115,34122,34123,34125,34127],{"class":117,"line":1759},[115,34124,31290],{"class":125},[115,34126,171],{"class":121},[115,34128,32290],{"class":125},[115,34130,34131],{"class":117,"line":1764},[115,34132,2400],{"emptyLinePlaceholder":42},[115,34134,34135],{"class":117,"line":1778},[115,34136,34137],{"class":184},"    # 设置初始化参数\n",[115,34139,34140,34143,34145],{"class":117,"line":1783},[115,34141,34142],{"class":125},"    test_corrects",[115,34144,171],{"class":121},[115,34146,32343],{"class":174},[115,34148,34149,34152,34154],{"class":117,"line":2577},[115,34150,34151],{"class":125},"    test_num",[115,34153,171],{"class":121},[115,34155,3085],{"class":174},[115,34157,34158],{"class":117,"line":2591},[115,34159,2400],{"emptyLinePlaceholder":42},[115,34161,34162],{"class":117,"line":2599},[115,34163,34164],{"class":184},"    # 进行模型测试\n",[115,34166,34167],{"class":117,"line":2604},[115,34168,34169],{"class":184},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[115,34171,34172],{"class":117,"line":2610},[115,34173,34174],{"class":184},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[115,34176,34177,34180],{"class":117,"line":2616},[115,34178,34179],{"class":121},"    with",[115,34181,32885],{"class":125},[115,34183,34184],{"class":117,"line":2621},[115,34185,34186],{"class":184},"        # 从数据中进行\n",[115,34188,34189,34191,34194,34196],{"class":117,"line":7949},[115,34190,3403],{"class":121},[115,34192,34193],{"class":125}," test_data_x,test_data_y ",[115,34195,26044],{"class":121},[115,34197,34198],{"class":125}," test_dataloader:\n",[115,34200,34201,34204,34206],{"class":117,"line":7973},[115,34202,34203],{"class":125},"            test_data_x",[115,34205,171],{"class":121},[115,34207,34208],{"class":125},"test_data_x.to(device)\n",[115,34210,34211,34214,34216],{"class":117,"line":7978},[115,34212,34213],{"class":125},"            test_data_y",[115,34215,171],{"class":121},[115,34217,34218],{"class":125},"test_data_y.to(device)\n",[115,34220,34221],{"class":117,"line":7984},[115,34222,34223],{"class":184},"            # 设置为验证模式\n",[115,34225,34226],{"class":117,"line":8011},[115,34227,32876],{"class":125},[115,34229,34230],{"class":117,"line":8016},[115,34231,34232],{"class":184},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[115,34234,34235,34237,34239],{"class":117,"line":8022},[115,34236,32661],{"class":125},[115,34238,171],{"class":121},[115,34240,34241],{"class":125},"model(test_data_x)\n",[115,34243,34244],{"class":117,"line":8034},[115,34245,34246],{"class":184},"            # 查找每一行中最大值对应的下标\n",[115,34248,34249,34251,34253,34255,34257,34259,34261],{"class":117,"line":8046},[115,34250,32678],{"class":125},[115,34252,171],{"class":121},[115,34254,32683],{"class":125},[115,34256,32686],{"class":5217},[115,34258,171],{"class":121},[115,34260,343],{"class":174},[115,34262,132],{"class":125},[115,34264,34265],{"class":117,"line":8058},[115,34266,34267],{"class":184},"            # 计算正确率\n",[115,34269,34270],{"class":117,"line":9717},[115,34271,34272],{"class":184},"            # .data表示是一个不带梯度信息的tensor\n",[115,34274,34275],{"class":117,"line":9742},[115,34276,34277],{"class":184},"            # 如果预测正确，则准确度test_corrects加1\n",[115,34279,34280,34283,34285,34287,34289],{"class":117,"line":9765},[115,34281,34282],{"class":125},"            test_corrects",[115,34284,9478],{"class":121},[115,34286,32788],{"class":125},[115,34288,2949],{"class":121},[115,34290,34291],{"class":125},"test_data_y.data)\n",[115,34293,34294],{"class":117,"line":9789},[115,34295,34296],{"class":184},"            # 将所有的测试样本进行累计\n",[115,34298,34299,34302,34304,34307,34309],{"class":117,"line":9794},[115,34300,34301],{"class":125},"            test_num",[115,34303,9478],{"class":121},[115,34305,34306],{"class":125},"test_data_x.size(",[115,34308,317],{"class":174},[115,34310,132],{"class":125},[115,34312,34313],{"class":117,"line":9799},[115,34314,2400],{"emptyLinePlaceholder":42},[115,34316,34317],{"class":117,"line":9804},[115,34318,34319],{"class":184},"        # 计算准确度\n",[115,34321,34322,34325,34327,34330,34332],{"class":117,"line":9813},[115,34323,34324],{"class":125},"        test_acc",[115,34326,171],{"class":121},[115,34328,34329],{"class":125},"test_corrects.double().item()",[115,34331,709],{"class":121},[115,34333,34334],{"class":125},"test_num\n",[115,34336,34337],{"class":117,"line":9818},[115,34338,34339],{"class":184},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[115,34341,34342,34344,34346,34349],{"class":117,"line":9824},[115,34343,32452],{"class":174},[115,34345,126],{"class":125},[115,34347,34348],{"class":230},"\"测试的准确率：\"",[115,34350,34351],{"class":125},",test_acc)\n",[115,34353,34354],{"class":117,"line":9845},[115,34355,2400],{"emptyLinePlaceholder":42},[115,34357,34358],{"class":117,"line":9851},[115,34359,34360],{"class":184},"# 实现模型的测试功能\n",[115,34362,34363,34365,34367,34369,34371],{"class":117,"line":9865},[115,34364,1531],{"class":121},[115,34366,31221],{"class":174},[115,34368,2949],{"class":121},[115,34370,31226],{"class":230},[115,34372,3739],{"class":125},[115,34374,34375],{"class":117,"line":9871},[115,34376,34377],{"class":184},"    # 加载模型\n",[115,34379,34380,34382,34384],{"class":117,"line":9898},[115,34381,31290],{"class":125},[115,34383,171],{"class":121},[115,34385,33826],{"class":125},[115,34387,34388],{"class":117,"line":9907},[115,34389,34390],{"class":184},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[115,34392,34393],{"class":117,"line":9913},[115,34394,34395],{"class":184},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[115,34397,34398,34401,34404],{"class":117,"line":9921},[115,34399,34400],{"class":125},"    model.load_state_dict(torch.load(",[115,34402,34403],{"class":230},"'best_model.pth'",[115,34405,30498],{"class":125},[115,34407,34408],{"class":117,"line":9926},[115,34409,34410],{"class":184},"    # 数据加载\n",[115,34412,34413,34415,34417],{"class":117,"line":16605},[115,34414,34023],{"class":125},[115,34416,171],{"class":121},[115,34418,34419],{"class":125},"test_data_process()\n",[115,34421,34422],{"class":117,"line":16611},[115,34423,34424],{"class":184},"    # 加载模型测试的函数\n",[115,34426,34427],{"class":117,"line":16634},[115,34428,34429],{"class":125},"    test_model_process(model,test_dataloader)\n",[115,34431,34432],{"class":117,"line":16640},[115,34433,2400],{"emptyLinePlaceholder":42},[115,34435,34436],{"class":117,"line":16663},[115,34437,34438],{"class":184},"    # 验证集推理实现：\n",[115,34440,34441],{"class":117,"line":16677},[115,34442,34443],{"class":184},"    # 加载数据加载的更详细一些\n",[115,34445,34446,34448,34450,34452,34454,34456,34458],{"class":117,"line":16697},[115,34447,31238],{"class":125},[115,34449,171],{"class":121},[115,34451,31245],{"class":230},[115,34453,1704],{"class":121},[115,34455,31250],{"class":125},[115,34457,1701],{"class":121},[115,34459,34120],{"class":230},[115,34461,34462,34464,34466],{"class":117,"line":16703},[115,34463,31290],{"class":125},[115,34465,171],{"class":121},[115,34467,32290],{"class":125},[115,34469,34470],{"class":117,"line":16714},[115,34471,34472],{"class":184},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[115,34474,34475],{"class":117,"line":16737},[115,34476,34477],{"class":184},"    # 顺序不可改变\n",[115,34479,34480,34483,34485,34487,34490,34492,34495,34497,34500,34502,34505,34507,34510,34512,34515,34517,34520,34522,34525,34527,34530,34532,34535],{"class":117,"line":16759},[115,34481,34482],{"class":125},"    classes",[115,34484,171],{"class":121},[115,34486,1015],{"class":125},[115,34488,34489],{"class":230},"'T-shirt\u002Ftop'",[115,34491,503],{"class":125},[115,34493,34494],{"class":230},"'Trouser'",[115,34496,503],{"class":125},[115,34498,34499],{"class":230},"'Pullover'",[115,34501,503],{"class":125},[115,34503,34504],{"class":230},"'Dress'",[115,34506,503],{"class":125},[115,34508,34509],{"class":230},"'Coat'",[115,34511,503],{"class":125},[115,34513,34514],{"class":230},"'Sandal'",[115,34516,503],{"class":125},[115,34518,34519],{"class":230},"'Shirt'",[115,34521,503],{"class":125},[115,34523,34524],{"class":230},"'Sneaker'",[115,34526,503],{"class":125},[115,34528,34529],{"class":230},"'Bag'",[115,34531,503],{"class":125},[115,34533,34534],{"class":230},"'Ankle boot'",[115,34536,33247],{"class":125},[115,34538,34539,34541],{"class":117,"line":16764},[115,34540,34179],{"class":121},[115,34542,32885],{"class":125},[115,34544,34545],{"class":117,"line":16770},[115,34546,34547],{"class":184},"        # 将数据和标签都放到设备当中\n",[115,34549,34550,34552,34555,34557],{"class":117,"line":16784},[115,34551,3403],{"class":121},[115,34553,34554],{"class":125}," b_x,b_y ",[115,34556,26044],{"class":121},[115,34558,34198],{"class":125},[115,34560,34561,34563,34565],{"class":117,"line":16797},[115,34562,32611],{"class":125},[115,34564,171],{"class":121},[115,34566,32616],{"class":125},[115,34568,34569,34571,34573],{"class":117,"line":16802},[115,34570,32626],{"class":125},[115,34572,171],{"class":121},[115,34574,32631],{"class":125},[115,34576,34577],{"class":117,"line":16816},[115,34578,2400],{"emptyLinePlaceholder":42},[115,34580,34581],{"class":117,"line":16821},[115,34582,34583],{"class":184},"            # 设置模型为验证模式\n",[115,34585,34586],{"class":117,"line":16827},[115,34587,32876],{"class":125},[115,34589,34590],{"class":117,"line":16832},[115,34591,34592],{"class":184},"            # 模型推理结果\n",[115,34594,34595,34597,34599],{"class":117,"line":16846},[115,34596,32661],{"class":125},[115,34598,171],{"class":121},[115,34600,32666],{"class":125},[115,34602,34603],{"class":117,"line":16851},[115,34604,34605],{"class":184},"            # 获取最大下标，最大下标就是类别号\n",[115,34607,34608,34610,34612,34614,34616,34618,34620],{"class":117,"line":16856},[115,34609,32678],{"class":125},[115,34611,171],{"class":121},[115,34613,32683],{"class":125},[115,34615,32686],{"class":5217},[115,34617,171],{"class":121},[115,34619,343],{"class":174},[115,34621,132],{"class":125},[115,34623,34624],{"class":117,"line":16870},[115,34625,34626],{"class":184},"            # 取出张量中的数值\n",[115,34628,34629,34632,34634],{"class":117,"line":16882},[115,34630,34631],{"class":125},"            result",[115,34633,171],{"class":121},[115,34635,34636],{"class":125},"pre_lab.item()\n",[115,34638,34639,34642,34644],{"class":117,"line":16887},[115,34640,34641],{"class":125},"            label",[115,34643,171],{"class":121},[115,34645,34646],{"class":125},"b_y.item()\n",[115,34648,34649,34652,34654,34657,34660,34663,34665,34668],{"class":117,"line":16900},[115,34650,34651],{"class":174},"            print",[115,34653,126],{"class":125},[115,34655,34656],{"class":230},"\"预测值：\"",[115,34658,34659],{"class":125},",classes[result],",[115,34661,34662],{"class":230},"\"------\"",[115,34664,503],{"class":125},[115,34666,34667],{"class":230},"\"真实值：\"",[115,34669,34670],{"class":125},",classes[label])\n",[14,34672,34673],{},"（2）AlexNet",[69,34675,34676],{},[72,34677,34678],{},"神经网络构建",[106,34680,34682],{"className":30379,"code":34681,"language":30381,"meta":22,"style":22},"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",[112,34683,34684,34690,34700,34710,34722,34726,34743,34751,34766,34778,34820,34847,34890,34916,34960,35003,35046,35073,35077,35087,35092,35120,35139,35158,35162,35167,35175,35190,35200,35214,35224,35239,35254,35269,35280,35284,35289,35299,35314,35319,35333,35348,35360,35365,35376,35381,35387,35392,35404,35424,35429,35438],{"__ignoreMap":22},[115,34685,34686,34688],{"class":117,"line":118},[115,34687,30393],{"class":121},[115,34689,30396],{"class":125},[115,34691,34692,34694,34696,34698],{"class":117,"line":37},[115,34693,30738],{"class":121},[115,34695,30741],{"class":125},[115,34697,30393],{"class":121},[115,34699,30746],{"class":125},[115,34701,34702,34704,34706,34708],{"class":117,"line":1180},[115,34703,30738],{"class":121},[115,34705,30758],{"class":125},[115,34707,30393],{"class":121},[115,34709,30763],{"class":125},[115,34711,34712,34714,34717,34719],{"class":117,"line":1195},[115,34713,30393],{"class":121},[115,34715,34716],{"class":125}," torch.nn.functional ",[115,34718,31384],{"class":121},[115,34720,34721],{"class":125}," F\n",[115,34723,34724],{"class":117,"line":1201},[115,34725,2400],{"emptyLinePlaceholder":42},[115,34727,34728,34730,34733,34735,34737,34739,34741],{"class":117,"line":1215},[115,34729,14695],{"class":121},[115,34731,34732],{"class":1963}," AlexNet",[115,34734,126],{"class":125},[115,34736,30779],{"class":1963},[115,34738,683],{"class":125},[115,34740,30784],{"class":1963},[115,34742,30787],{"class":125},[115,34744,34745,34747,34749],{"class":117,"line":1221},[115,34746,30802],{"class":121},[115,34748,30805],{"class":174},[115,34750,30808],{"class":125},[115,34752,34753,34755,34758,34760,34762,34764],{"class":117,"line":1312},[115,34754,30818],{"class":174},[115,34756,34757],{"class":125},"(AlexNet,",[115,34759,30824],{"class":174},[115,34761,30827],{"class":125},[115,34763,30830],{"class":174},[115,34765,1976],{"class":125},[115,34767,34768,34770,34773,34775],{"class":117,"line":1318},[115,34769,30846],{"class":174},[115,34771,34772],{"class":125},".ReLu",[115,34774,171],{"class":121},[115,34776,34777],{"class":125},"nn.ReLU()\n",[115,34779,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802,34804,34806,34808,34810,34812,34814,34816,34818],{"class":117,"line":1330},[115,34781,30846],{"class":174},[115,34783,30849],{"class":125},[115,34785,171],{"class":121},[115,34787,30854],{"class":125},[115,34789,30857],{"class":5217},[115,34791,171],{"class":121},[115,34793,343],{"class":174},[115,34795,503],{"class":125},[115,34797,30866],{"class":5217},[115,34799,171],{"class":121},[115,34801,335],{"class":174},[115,34803,503],{"class":125},[115,34805,30875],{"class":5217},[115,34807,171],{"class":121},[115,34809,597],{"class":174},[115,34811,503],{"class":125},[115,34813,30930],{"class":5217},[115,34815,171],{"class":121},[115,34817,418],{"class":174},[115,34819,132],{"class":125},[115,34821,34822,34824,34826,34828,34831,34833,34835,34837,34839,34841,34843,34845],{"class":117,"line":1612},[115,34823,30846],{"class":174},[115,34825,30914],{"class":125},[115,34827,171],{"class":121},[115,34829,34830],{"class":125},"nn.MaxPool2d(",[115,34832,30875],{"class":5217},[115,34834,171],{"class":121},[115,34836,197],{"class":174},[115,34838,503],{"class":125},[115,34840,30930],{"class":5217},[115,34842,171],{"class":121},[115,34844,203],{"class":174},[115,34846,132],{"class":125},[115,34848,34849,34851,34853,34855,34857,34859,34861,34863,34865,34867,34869,34872,34874,34876,34878,34880,34882,34884,34886,34888],{"class":117,"line":1617},[115,34850,30846],{"class":174},[115,34852,30943],{"class":125},[115,34854,171],{"class":121},[115,34856,30854],{"class":125},[115,34858,30857],{"class":5217},[115,34860,171],{"class":121},[115,34862,335],{"class":174},[115,34864,503],{"class":125},[115,34866,30866],{"class":5217},[115,34868,171],{"class":121},[115,34870,34871],{"class":174},"256",[115,34873,503],{"class":125},[115,34875,30875],{"class":5217},[115,34877,171],{"class":121},[115,34879,444],{"class":174},[115,34881,503],{"class":125},[115,34883,30884],{"class":5217},[115,34885,171],{"class":121},[115,34887,203],{"class":174},[115,34889,132],{"class":125},[115,34891,34892,34894,34896,34898,34900,34902,34904,34906,34908,34910,34912,34914],{"class":117,"line":1623},[115,34893,30846],{"class":174},[115,34895,30978],{"class":125},[115,34897,171],{"class":121},[115,34899,34830],{"class":125},[115,34901,30875],{"class":5217},[115,34903,171],{"class":121},[115,34905,197],{"class":174},[115,34907,503],{"class":125},[115,34909,30930],{"class":5217},[115,34911,171],{"class":121},[115,34913,203],{"class":174},[115,34915,132],{"class":125},[115,34917,34918,34920,34923,34925,34927,34929,34931,34933,34935,34937,34939,34942,34944,34946,34948,34950,34952,34954,34956,34958],{"class":117,"line":1628},[115,34919,30846],{"class":174},[115,34921,34922],{"class":125},".c5",[115,34924,171],{"class":121},[115,34926,30854],{"class":125},[115,34928,30857],{"class":5217},[115,34930,171],{"class":121},[115,34932,34871],{"class":174},[115,34934,503],{"class":125},[115,34936,30866],{"class":5217},[115,34938,171],{"class":121},[115,34940,34941],{"class":174},"384",[115,34943,503],{"class":125},[115,34945,30875],{"class":5217},[115,34947,171],{"class":121},[115,34949,197],{"class":174},[115,34951,503],{"class":125},[115,34953,30884],{"class":5217},[115,34955,171],{"class":121},[115,34957,343],{"class":174},[115,34959,132],{"class":125},[115,34961,34962,34964,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999,35001],{"class":117,"line":1642},[115,34963,30846],{"class":174},[115,34965,34966],{"class":125},".c6",[115,34968,171],{"class":121},[115,34970,30854],{"class":125},[115,34972,30857],{"class":5217},[115,34974,171],{"class":121},[115,34976,34941],{"class":174},[115,34978,503],{"class":125},[115,34980,30866],{"class":5217},[115,34982,171],{"class":121},[115,34984,34941],{"class":174},[115,34986,503],{"class":125},[115,34988,30875],{"class":5217},[115,34990,171],{"class":121},[115,34992,197],{"class":174},[115,34994,503],{"class":125},[115,34996,30884],{"class":5217},[115,34998,171],{"class":121},[115,35000,343],{"class":174},[115,35002,132],{"class":125},[115,35004,35005,35007,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044],{"class":117,"line":1647},[115,35006,30846],{"class":174},[115,35008,35009],{"class":125},".c7",[115,35011,171],{"class":121},[115,35013,30854],{"class":125},[115,35015,30857],{"class":5217},[115,35017,171],{"class":121},[115,35019,34941],{"class":174},[115,35021,503],{"class":125},[115,35023,30866],{"class":5217},[115,35025,171],{"class":121},[115,35027,34871],{"class":174},[115,35029,503],{"class":125},[115,35031,30875],{"class":5217},[115,35033,171],{"class":121},[115,35035,197],{"class":174},[115,35037,503],{"class":125},[115,35039,30884],{"class":5217},[115,35041,171],{"class":121},[115,35043,343],{"class":174},[115,35045,132],{"class":125},[115,35047,35048,35050,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071],{"class":117,"line":1653},[115,35049,30846],{"class":174},[115,35051,35052],{"class":125},".s8",[115,35054,171],{"class":121},[115,35056,34830],{"class":125},[115,35058,30875],{"class":5217},[115,35060,171],{"class":121},[115,35062,197],{"class":174},[115,35064,503],{"class":125},[115,35066,30930],{"class":5217},[115,35068,171],{"class":121},[115,35070,203],{"class":174},[115,35072,132],{"class":125},[115,35074,35075],{"class":117,"line":1674},[115,35076,31003],{"class":184},[115,35078,35079,35081,35083,35085],{"class":117,"line":1679},[115,35080,30846],{"class":174},[115,35082,31010],{"class":125},[115,35084,171],{"class":121},[115,35086,31015],{"class":125},[115,35088,35089],{"class":117,"line":1693},[115,35090,35091],{"class":184},"       # 定义全连接层\n",[115,35093,35094,35096,35099,35101,35103,35105,35107,35109,35111,35113,35115,35118],{"class":117,"line":1698},[115,35095,30846],{"class":174},[115,35097,35098],{"class":125},".f1",[115,35100,171],{"class":121},[115,35102,31032],{"class":125},[115,35104,469],{"class":174},[115,35106,580],{"class":121},[115,35108,469],{"class":174},[115,35110,580],{"class":121},[115,35112,34871],{"class":174},[115,35114,503],{"class":125},[115,35116,35117],{"class":174},"4096",[115,35119,132],{"class":125},[115,35121,35122,35124,35127,35129,35131,35133,35135,35137],{"class":117,"line":1727},[115,35123,30846],{"class":174},[115,35125,35126],{"class":125},".f2",[115,35128,171],{"class":121},[115,35130,31032],{"class":125},[115,35132,35117],{"class":174},[115,35134,503],{"class":125},[115,35136,35117],{"class":174},[115,35138,132],{"class":125},[115,35140,35141,35143,35146,35148,35150,35152,35154,35156],{"class":117,"line":1732},[115,35142,30846],{"class":174},[115,35144,35145],{"class":125},".f3",[115,35147,171],{"class":121},[115,35149,31032],{"class":125},[115,35151,35117],{"class":174},[115,35153,503],{"class":125},[115,35155,571],{"class":174},[115,35157,132],{"class":125},[115,35159,35160],{"class":117,"line":1749},[115,35161,2400],{"emptyLinePlaceholder":42},[115,35163,35164],{"class":117,"line":1754},[115,35165,35166],{"class":184},"    # 定义前向传播\n",[115,35168,35169,35171,35173],{"class":117,"line":1759},[115,35170,30802],{"class":121},[115,35172,31094],{"class":1963},[115,35174,31097],{"class":125},[115,35176,35177,35179,35181,35183,35186,35188],{"class":117,"line":1764},[115,35178,31102],{"class":125},[115,35180,171],{"class":121},[115,35182,30824],{"class":174},[115,35184,35185],{"class":125},".ReLu(",[115,35187,30824],{"class":174},[115,35189,31114],{"class":125},[115,35191,35192,35194,35196,35198],{"class":117,"line":1778},[115,35193,31102],{"class":125},[115,35195,171],{"class":121},[115,35197,30824],{"class":174},[115,35199,31125],{"class":125},[115,35201,35202,35204,35206,35208,35210,35212],{"class":117,"line":1783},[115,35203,31102],{"class":125},[115,35205,171],{"class":121},[115,35207,30824],{"class":174},[115,35209,35185],{"class":125},[115,35211,30824],{"class":174},[115,35213,31140],{"class":125},[115,35215,35216,35218,35220,35222],{"class":117,"line":2577},[115,35217,31102],{"class":125},[115,35219,171],{"class":121},[115,35221,30824],{"class":174},[115,35223,31151],{"class":125},[115,35225,35226,35228,35230,35232,35234,35236],{"class":117,"line":2591},[115,35227,31102],{"class":125},[115,35229,171],{"class":121},[115,35231,30824],{"class":174},[115,35233,35185],{"class":125},[115,35235,30824],{"class":174},[115,35237,35238],{"class":125},".c5(x))\n",[115,35240,35241,35243,35245,35247,35249,35251],{"class":117,"line":2599},[115,35242,31102],{"class":125},[115,35244,171],{"class":121},[115,35246,30824],{"class":174},[115,35248,35185],{"class":125},[115,35250,30824],{"class":174},[115,35252,35253],{"class":125},".c6(x))\n",[115,35255,35256,35258,35260,35262,35264,35266],{"class":117,"line":2604},[115,35257,31102],{"class":125},[115,35259,171],{"class":121},[115,35261,30824],{"class":174},[115,35263,35185],{"class":125},[115,35265,30824],{"class":174},[115,35267,35268],{"class":125},".c7(x))\n",[115,35270,35271,35273,35275,35277],{"class":117,"line":2610},[115,35272,31102],{"class":125},[115,35274,171],{"class":121},[115,35276,30824],{"class":174},[115,35278,35279],{"class":125},".s8(x)\n",[115,35281,35282],{"class":117,"line":2616},[115,35283,2400],{"emptyLinePlaceholder":42},[115,35285,35286],{"class":117,"line":2621},[115,35287,35288],{"class":184},"        # 展平加线性全连接层\n",[115,35290,35291,35293,35295,35297],{"class":117,"line":7949},[115,35292,31102],{"class":125},[115,35294,171],{"class":121},[115,35296,30824],{"class":174},[115,35298,31162],{"class":125},[115,35300,35301,35303,35305,35307,35309,35311],{"class":117,"line":7973},[115,35302,31102],{"class":125},[115,35304,171],{"class":121},[115,35306,30824],{"class":174},[115,35308,35185],{"class":125},[115,35310,30824],{"class":174},[115,35312,35313],{"class":125},".f1(x))\n",[115,35315,35316],{"class":117,"line":7978},[115,35317,35318],{"class":184},"        # 还需要dropout对神经元随机进行失活\n",[115,35320,35321,35323,35325,35328,35331],{"class":117,"line":7984},[115,35322,31102],{"class":125},[115,35324,171],{"class":121},[115,35326,35327],{"class":125},"F.dropout(x,",[115,35329,35330],{"class":174},"0.5",[115,35332,132],{"class":125},[115,35334,35335,35337,35339,35341,35343,35345],{"class":117,"line":8011},[115,35336,31102],{"class":125},[115,35338,171],{"class":121},[115,35340,30824],{"class":174},[115,35342,35185],{"class":125},[115,35344,30824],{"class":174},[115,35346,35347],{"class":125},".f2(x))\n",[115,35349,35350,35352,35354,35356,35358],{"class":117,"line":8016},[115,35351,31102],{"class":125},[115,35353,171],{"class":121},[115,35355,35327],{"class":125},[115,35357,35330],{"class":174},[115,35359,132],{"class":125},[115,35361,35362],{"class":117,"line":8022},[115,35363,35364],{"class":184},"        # 直接输出\n",[115,35366,35367,35369,35371,35373],{"class":117,"line":8034},[115,35368,31102],{"class":125},[115,35370,171],{"class":121},[115,35372,30824],{"class":174},[115,35374,35375],{"class":125},".f3(x)\n",[115,35377,35378],{"class":117,"line":8046},[115,35379,35380],{"class":184},"        # 前向传播输出\n",[115,35382,35383,35385],{"class":117,"line":8058},[115,35384,14753],{"class":121},[115,35386,31210],{"class":125},[115,35388,35389],{"class":117,"line":9717},[115,35390,35391],{"class":184},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[115,35393,35394,35396,35398,35400,35402],{"class":117,"line":9742},[115,35395,1531],{"class":121},[115,35397,31221],{"class":174},[115,35399,2949],{"class":121},[115,35401,31226],{"class":230},[115,35403,3739],{"class":125},[115,35405,35406,35408,35410,35412,35414,35416,35418,35420,35422],{"class":117,"line":9765},[115,35407,31238],{"class":125},[115,35409,171],{"class":121},[115,35411,30452],{"class":125},[115,35413,31245],{"class":230},[115,35415,1704],{"class":121},[115,35417,31250],{"class":125},[115,35419,1701],{"class":121},[115,35421,30477],{"class":230},[115,35423,132],{"class":125},[115,35425,35426],{"class":117,"line":9789},[115,35427,35428],{"class":184},"    # 模型实例化，然后将实例化的模型放到设备中\n",[115,35430,35431,35433,35435],{"class":117,"line":9794},[115,35432,31290],{"class":125},[115,35434,171],{"class":121},[115,35436,35437],{"class":125},"AlexNet().to(device)\n",[115,35439,35440,35442,35444,35446,35448,35451,35453,35455],{"class":117,"line":9799},[115,35441,31300],{"class":174},[115,35443,31303],{"class":125},[115,35445,343],{"class":174},[115,35447,503],{"class":125},[115,35449,35450],{"class":174},"227",[115,35452,503],{"class":125},[115,35454,35450],{"class":174},[115,35456,31316],{"class":125},[69,35458,35459],{"start":37},[72,35460,31329],{},[106,35462,35464],{"className":30379,"code":35463,"language":30381,"meta":22,"style":22},"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",[112,35465,35466,35472,35478,35488,35494,35504,35514,35524,35534,35544,35548,35559,35569,35573,35577,35581,35589,35601,35611,35627,35637,35669,35683,35693,35703,35707,35717,35731,35741,35751,35761,35767,35771,35775,35779,35783,35787,35795,35815,35819,35823,35827,35831,35835,35851,35855,35859,35867,35871,35875,35883,35887,35891,35895,35903,35907,35911,35915,35919,35927,35931,35939,35943,35951,35955,35963,35967,35975,35979,35983,35991,35995,35999,36003,36015,36039,36053,36057,36061,36065,36073,36077,36085,36089,36097,36101,36109,36113,36121,36125,36133,36137,36149,36153,36161,36165,36173,36177,36181,36185,36189,36197,36201,36217,36221,36229,36233,36237,36241,36245,36249,36253,36257,36273,36277,36289,36293,36305,36309,36321,36325,36333,36337,36345,36349,36353,36358,36364,36368,36377,36381,36398,36402,36411,36415,36433,36446,36451,36464,36468,36472,36480,36484,36488,36496,36500,36508,36512,36520,36524,36528,36570,36612,36616,36620,36636,36640,36656,36660,36664,36672,36676,36680,36692,36730,36735,36740,36749,36753,36767,36777,36783,36789,36795,36801,36805,36809,36815,36819,36823,36831,36835,36853,36857,36861,36865,36881,36885,36889,36893,36897,36901,36921,36941,36945,36949,36953,36961,36969,36973,36989,37009,37029,37033,37037,37045,37053,37057,37061,37065,37077,37081,37091,37099,37116],{"__ignoreMap":22},[115,35467,35468,35470],{"class":117,"line":118},[115,35469,30393],{"class":121},[115,35471,31823],{"class":125},[115,35473,35474,35476],{"class":117,"line":37},[115,35475,30393],{"class":121},[115,35477,31830],{"class":125},[115,35479,35480,35482,35484,35486],{"class":117,"line":1180},[115,35481,30393],{"class":121},[115,35483,31841],{"class":125},[115,35485,31384],{"class":121},[115,35487,31846],{"class":125},[115,35489,35490,35492],{"class":117,"line":1195},[115,35491,30393],{"class":121},[115,35493,30396],{"class":125},[115,35495,35496,35498,35500,35502],{"class":117,"line":1201},[115,35497,30738],{"class":121},[115,35499,31416],{"class":125},[115,35501,30393],{"class":121},[115,35503,31863],{"class":125},[115,35505,35506,35508,35510,35512],{"class":117,"line":1215},[115,35507,30738],{"class":121},[115,35509,31369],{"class":125},[115,35511,30393],{"class":121},[115,35513,31374],{"class":125},[115,35515,35516,35518,35520,35522],{"class":117,"line":1221},[115,35517,30738],{"class":121},[115,35519,31399],{"class":125},[115,35521,30393],{"class":121},[115,35523,31404],{"class":125},[115,35525,35526,35528,35530,35532],{"class":117,"line":1312},[115,35527,30393],{"class":121},[115,35529,31416],{"class":125},[115,35531,31384],{"class":121},[115,35533,31421],{"class":125},[115,35535,35536,35538,35540,35542],{"class":117,"line":1318},[115,35537,30393],{"class":121},[115,35539,31433],{"class":125},[115,35541,31384],{"class":121},[115,35543,31438],{"class":125},[115,35545,35546],{"class":117,"line":1330},[115,35547,31908],{"class":184},[115,35549,35550,35552,35554,35556],{"class":117,"line":1612},[115,35551,30738],{"class":121},[115,35553,31915],{"class":125},[115,35555,30393],{"class":121},[115,35557,35558],{"class":125}," AlexNet\n",[115,35560,35561,35563,35565,35567],{"class":117,"line":1617},[115,35562,30738],{"class":121},[115,35564,30741],{"class":125},[115,35566,30393],{"class":121},[115,35568,30746],{"class":125},[115,35570,35571],{"class":117,"line":1623},[115,35572,2400],{"emptyLinePlaceholder":42},[115,35574,35575],{"class":117,"line":1628},[115,35576,2400],{"emptyLinePlaceholder":42},[115,35578,35579],{"class":117,"line":1642},[115,35580,31943],{"class":184},[115,35582,35583,35585,35587],{"class":117,"line":1647},[115,35584,31948],{"class":121},[115,35586,31951],{"class":1963},[115,35588,31954],{"class":125},[115,35590,35591,35593,35595,35597,35599],{"class":117,"line":1653},[115,35592,31959],{"class":125},[115,35594,171],{"class":121},[115,35596,31456],{"class":125},[115,35598,31464],{"class":230},[115,35600,31467],{"class":125},[115,35602,35603,35605,35607,35609],{"class":117,"line":1674},[115,35604,31972],{"class":5217},[115,35606,171],{"class":121},[115,35608,31477],{"class":174},[115,35610,31467],{"class":125},[115,35612,35613,35615,35617,35619,35621,35623,35625],{"class":117,"line":1679},[115,35614,31983],{"class":5217},[115,35616,171],{"class":121},[115,35618,31494],{"class":125},[115,35620,31497],{"class":5217},[115,35622,171],{"class":121},[115,35624,35450],{"class":174},[115,35626,31505],{"class":125},[115,35628,35629,35631,35633,35635],{"class":117,"line":1693},[115,35630,32000],{"class":5217},[115,35632,171],{"class":121},[115,35634,31477],{"class":174},[115,35636,132],{"class":125},[115,35638,35639,35641,35643,35645,35647,35649,35651,35653,35655,35657,35659,35661,35663,35665,35667],{"class":117,"line":1698},[115,35640,32011],{"class":125},[115,35642,171],{"class":121},[115,35644,32016],{"class":125},[115,35646,32019],{"class":174},[115,35648,126],{"class":125},[115,35650,32024],{"class":174},[115,35652,580],{"class":121},[115,35654,7359],{"class":174},[115,35656,32031],{"class":125},[115,35658,32019],{"class":174},[115,35660,126],{"class":125},[115,35662,32038],{"class":174},[115,35664,580],{"class":121},[115,35666,7359],{"class":174},[115,35668,32045],{"class":125},[115,35670,35671,35673,35675,35677,35679,35681],{"class":117,"line":1727},[115,35672,32050],{"class":125},[115,35674,171],{"class":121},[115,35676,32055],{"class":125},[115,35678,31538],{"class":5217},[115,35680,171],{"class":121},[115,35682,31543],{"class":125},[115,35684,35685,35687,35689,35691],{"class":117,"line":1732},[115,35686,32066],{"class":5217},[115,35688,171],{"class":121},[115,35690,32071],{"class":174},[115,35692,31467],{"class":125},[115,35694,35695,35697,35699,35701],{"class":117,"line":1749},[115,35696,32078],{"class":5217},[115,35698,171],{"class":121},[115,35700,31477],{"class":174},[115,35702,31467],{"class":125},[115,35704,35705],{"class":117,"line":1754},[115,35706,32089],{"class":184},[115,35708,35709,35711,35713,35715],{"class":117,"line":1759},[115,35710,32094],{"class":5217},[115,35712,171],{"class":121},[115,35714,520],{"class":174},[115,35716,132],{"class":125},[115,35718,35719,35721,35723,35725,35727,35729],{"class":117,"line":1764},[115,35720,32105],{"class":125},[115,35722,171],{"class":121},[115,35724,31535],{"class":125},[115,35726,31538],{"class":5217},[115,35728,171],{"class":121},[115,35730,32116],{"class":125},[115,35732,35733,35735,35737,35739],{"class":117,"line":1778},[115,35734,32121],{"class":5217},[115,35736,171],{"class":121},[115,35738,32071],{"class":174},[115,35740,31467],{"class":125},[115,35742,35743,35745,35747,35749],{"class":117,"line":1783},[115,35744,32132],{"class":5217},[115,35746,171],{"class":121},[115,35748,31477],{"class":174},[115,35750,31467],{"class":125},[115,35752,35753,35755,35757,35759],{"class":117,"line":2577},[115,35754,32143],{"class":5217},[115,35756,171],{"class":121},[115,35758,520],{"class":174},[115,35760,132],{"class":125},[115,35762,35763,35765],{"class":117,"line":2591},[115,35764,4090],{"class":121},[115,35766,32156],{"class":125},[115,35768,35769],{"class":117,"line":2599},[115,35770,2400],{"emptyLinePlaceholder":42},[115,35772,35773],{"class":117,"line":2604},[115,35774,32165],{"class":184},[115,35776,35777],{"class":117,"line":2610},[115,35778,32170],{"class":184},[115,35780,35781],{"class":117,"line":2616},[115,35782,2400],{"emptyLinePlaceholder":42},[115,35784,35785],{"class":117,"line":2621},[115,35786,32179],{"class":184},[115,35788,35789,35791,35793],{"class":117,"line":7949},[115,35790,31948],{"class":121},[115,35792,32186],{"class":1963},[115,35794,32189],{"class":125},[115,35796,35797,35799,35801,35803,35805,35807,35809,35811,35813],{"class":117,"line":7973},[115,35798,31238],{"class":125},[115,35800,171],{"class":121},[115,35802,30452],{"class":125},[115,35804,31245],{"class":230},[115,35806,1704],{"class":121},[115,35808,31250],{"class":125},[115,35810,1701],{"class":121},[115,35812,32208],{"class":230},[115,35814,132],{"class":125},[115,35816,35817],{"class":117,"line":7978},[115,35818,2400],{"emptyLinePlaceholder":42},[115,35820,35821],{"class":117,"line":7984},[115,35822,2400],{"emptyLinePlaceholder":42},[115,35824,35825],{"class":117,"line":8011},[115,35826,32223],{"class":184},[115,35828,35829],{"class":117,"line":8016},[115,35830,32228],{"class":184},[115,35832,35833],{"class":117,"line":8022},[115,35834,32233],{"class":184},[115,35836,35837,35839,35841,35843,35845,35847,35849],{"class":117,"line":8034},[115,35838,32238],{"class":125},[115,35840,171],{"class":121},[115,35842,32243],{"class":125},[115,35844,32246],{"class":5217},[115,35846,171],{"class":121},[115,35848,32251],{"class":174},[115,35850,132],{"class":125},[115,35852,35853],{"class":117,"line":8046},[115,35854,2400],{"emptyLinePlaceholder":42},[115,35856,35857],{"class":117,"line":8058},[115,35858,32262],{"class":184},[115,35860,35861,35863,35865],{"class":117,"line":9717},[115,35862,32267],{"class":125},[115,35864,171],{"class":121},[115,35866,32272],{"class":125},[115,35868,35869],{"class":117,"line":9742},[115,35870,2400],{"emptyLinePlaceholder":42},[115,35872,35873],{"class":117,"line":9765},[115,35874,32281],{"class":184},[115,35876,35877,35879,35881],{"class":117,"line":9789},[115,35878,31290],{"class":125},[115,35880,171],{"class":121},[115,35882,32290],{"class":125},[115,35884,35885],{"class":117,"line":9794},[115,35886,32295],{"class":184},[115,35888,35889],{"class":117,"line":9799},[115,35890,32300],{"class":184},[115,35892,35893],{"class":117,"line":9804},[115,35894,32305],{"class":184},[115,35896,35897,35899,35901],{"class":117,"line":9813},[115,35898,32310],{"class":125},[115,35900,171],{"class":121},[115,35902,32315],{"class":125},[115,35904,35905],{"class":117,"line":9818},[115,35906,2400],{"emptyLinePlaceholder":42},[115,35908,35909],{"class":117,"line":9824},[115,35910,2400],{"emptyLinePlaceholder":42},[115,35912,35913],{"class":117,"line":9845},[115,35914,32328],{"class":184},[115,35916,35917],{"class":117,"line":9851},[115,35918,32333],{"class":184},[115,35920,35921,35923,35925],{"class":117,"line":9865},[115,35922,32338],{"class":125},[115,35924,171],{"class":121},[115,35926,32343],{"class":174},[115,35928,35929],{"class":117,"line":9871},[115,35930,32348],{"class":184},[115,35932,35933,35935,35937],{"class":117,"line":9898},[115,35934,32353],{"class":125},[115,35936,171],{"class":121},[115,35938,32358],{"class":125},[115,35940,35941],{"class":117,"line":9907},[115,35942,32363],{"class":184},[115,35944,35945,35947,35949],{"class":117,"line":9913},[115,35946,32368],{"class":125},[115,35948,171],{"class":121},[115,35950,32358],{"class":125},[115,35952,35953],{"class":117,"line":9921},[115,35954,32377],{"class":184},[115,35956,35957,35959,35961],{"class":117,"line":9926},[115,35958,32382],{"class":125},[115,35960,171],{"class":121},[115,35962,32358],{"class":125},[115,35964,35965],{"class":117,"line":16605},[115,35966,32391],{"class":184},[115,35968,35969,35971,35973],{"class":117,"line":16611},[115,35970,32396],{"class":125},[115,35972,171],{"class":121},[115,35974,32358],{"class":125},[115,35976,35977],{"class":117,"line":16634},[115,35978,2400],{"emptyLinePlaceholder":42},[115,35980,35981],{"class":117,"line":16640},[115,35982,32409],{"class":184},[115,35984,35985,35987,35989],{"class":117,"line":16663},[115,35986,32414],{"class":125},[115,35988,171],{"class":121},[115,35990,32419],{"class":125},[115,35992,35993],{"class":117,"line":16677},[115,35994,2400],{"emptyLinePlaceholder":42},[115,35996,35997],{"class":117,"line":16697},[115,35998,2400],{"emptyLinePlaceholder":42},[115,36000,36001],{"class":117,"line":16703},[115,36002,32432],{"class":184},[115,36004,36005,36007,36009,36011,36013],{"class":117,"line":16714},[115,36006,3201],{"class":121},[115,36008,32439],{"class":125},[115,36010,26044],{"class":121},[115,36012,32444],{"class":174},[115,36014,32447],{"class":125},[115,36016,36017,36019,36021,36023,36025,36027,36029,36031,36033,36035,36037],{"class":117,"line":16737},[115,36018,32452],{"class":174},[115,36020,126],{"class":125},[115,36022,32457],{"class":230},[115,36024,32460],{"class":174},[115,36026,709],{"class":230},[115,36028,32460],{"class":174},[115,36030,376],{"class":230},[115,36032,32469],{"class":125},[115,36034,657],{"class":121},[115,36036,343],{"class":174},[115,36038,30498],{"class":125},[115,36040,36041,36043,36045,36047,36049,36051],{"class":117,"line":16759},[115,36042,32452],{"class":174},[115,36044,126],{"class":125},[115,36046,32484],{"class":230},[115,36048,580],{"class":121},[115,36050,571],{"class":174},[115,36052,132],{"class":125},[115,36054,36055],{"class":117,"line":16764},[115,36056,2400],{"emptyLinePlaceholder":42},[115,36058,36059],{"class":117,"line":16770},[115,36060,32499],{"class":184},[115,36062,36063],{"class":117,"line":16784},[115,36064,32504],{"class":184},[115,36066,36067,36069,36071],{"class":117,"line":16797},[115,36068,32509],{"class":125},[115,36070,171],{"class":121},[115,36072,32343],{"class":174},[115,36074,36075],{"class":117,"line":16802},[115,36076,32518],{"class":184},[115,36078,36079,36081,36083],{"class":117,"line":16816},[115,36080,32523],{"class":125},[115,36082,171],{"class":121},[115,36084,3085],{"class":174},[115,36086,36087],{"class":117,"line":16821},[115,36088,32532],{"class":184},[115,36090,36091,36093,36095],{"class":117,"line":16827},[115,36092,32537],{"class":125},[115,36094,171],{"class":121},[115,36096,32343],{"class":174},[115,36098,36099],{"class":117,"line":16832},[115,36100,32546],{"class":184},[115,36102,36103,36105,36107],{"class":117,"line":16846},[115,36104,32551],{"class":125},[115,36106,171],{"class":121},[115,36108,3085],{"class":174},[115,36110,36111],{"class":117,"line":16851},[115,36112,32560],{"class":184},[115,36114,36115,36117,36119],{"class":117,"line":16856},[115,36116,32565],{"class":125},[115,36118,171],{"class":121},[115,36120,3085],{"class":174},[115,36122,36123],{"class":117,"line":16870},[115,36124,32574],{"class":184},[115,36126,36127,36129,36131],{"class":117,"line":16882},[115,36128,32579],{"class":125},[115,36130,171],{"class":121},[115,36132,3085],{"class":174},[115,36134,36135],{"class":117,"line":16887},[115,36136,32588],{"class":184},[115,36138,36139,36141,36143,36145,36147],{"class":117,"line":16900},[115,36140,3403],{"class":121},[115,36142,31602],{"class":125},[115,36144,26044],{"class":121},[115,36146,31607],{"class":174},[115,36148,32601],{"class":125},[115,36150,36151],{"class":117,"line":16905},[115,36152,32606],{"class":184},[115,36154,36155,36157,36159],{"class":117,"line":16910},[115,36156,32611],{"class":125},[115,36158,171],{"class":121},[115,36160,32616],{"class":125},[115,36162,36163],{"class":117,"line":16915},[115,36164,32621],{"class":184},[115,36166,36167,36169,36171],{"class":117,"line":16928},[115,36168,32626],{"class":125},[115,36170,171],{"class":121},[115,36172,32631],{"class":125},[115,36174,36175],{"class":117,"line":16933},[115,36176,32637],{"class":184},[115,36178,36179],{"class":117,"line":32634},[115,36180,32643],{"class":125},[115,36182,36183],{"class":117,"line":32640},[115,36184,32649],{"class":184},[115,36186,36187],{"class":117,"line":32646},[115,36188,32655],{"class":184},[115,36190,36191,36193,36195],{"class":117,"line":32652},[115,36192,32661],{"class":125},[115,36194,171],{"class":121},[115,36196,32666],{"class":125},[115,36198,36199],{"class":117,"line":32658},[115,36200,32672],{"class":184},[115,36202,36203,36205,36207,36209,36211,36213,36215],{"class":117,"line":32669},[115,36204,32678],{"class":125},[115,36206,171],{"class":121},[115,36208,32683],{"class":125},[115,36210,32686],{"class":5217},[115,36212,171],{"class":121},[115,36214,343],{"class":174},[115,36216,132],{"class":125},[115,36218,36219],{"class":117,"line":32675},[115,36220,32698],{"class":184},[115,36222,36223,36225,36227],{"class":117,"line":32695},[115,36224,32704],{"class":125},[115,36226,171],{"class":121},[115,36228,32709],{"class":125},[115,36230,36231],{"class":117,"line":32701},[115,36232,32715],{"class":184},[115,36234,36235],{"class":117,"line":32712},[115,36236,32721],{"class":125},[115,36238,36239],{"class":117,"line":32718},[115,36240,32727],{"class":184},[115,36242,36243],{"class":117,"line":32724},[115,36244,32733],{"class":125},[115,36246,36247],{"class":117,"line":32730},[115,36248,32739],{"class":184},[115,36250,36251],{"class":117,"line":32736},[115,36252,32745],{"class":125},[115,36254,36255],{"class":117,"line":32742},[115,36256,32751],{"class":184},[115,36258,36259,36261,36263,36265,36267,36269,36271],{"class":117,"line":32748},[115,36260,32757],{"class":125},[115,36262,9478],{"class":121},[115,36264,32762],{"class":125},[115,36266,580],{"class":121},[115,36268,32767],{"class":125},[115,36270,317],{"class":174},[115,36272,132],{"class":125},[115,36274,36275],{"class":117,"line":32754},[115,36276,32777],{"class":184},[115,36278,36279,36281,36283,36285,36287],{"class":117,"line":32774},[115,36280,32783],{"class":125},[115,36282,9478],{"class":121},[115,36284,32788],{"class":125},[115,36286,2949],{"class":121},[115,36288,32793],{"class":125},[115,36290,36291],{"class":117,"line":32780},[115,36292,32799],{"class":184},[115,36294,36295,36297,36299,36301,36303],{"class":117,"line":32796},[115,36296,32805],{"class":125},[115,36298,9478],{"class":121},[115,36300,32767],{"class":125},[115,36302,317],{"class":174},[115,36304,132],{"class":125},[115,36306,36307],{"class":117,"line":32802},[115,36308,32819],{"class":184},[115,36310,36311,36313,36315,36317,36319],{"class":117,"line":32816},[115,36312,3403],{"class":121},[115,36314,32827],{"class":125},[115,36316,26044],{"class":121},[115,36318,31607],{"class":174},[115,36320,32834],{"class":125},[115,36322,36323],{"class":117,"line":32822},[115,36324,32840],{"class":184},[115,36326,36327,36329,36331],{"class":117,"line":32837},[115,36328,32611],{"class":125},[115,36330,171],{"class":121},[115,36332,32616],{"class":125},[115,36334,36335],{"class":117,"line":32843},[115,36336,32855],{"class":184},[115,36338,36339,36341,36343],{"class":117,"line":32852},[115,36340,32626],{"class":125},[115,36342,171],{"class":121},[115,36344,32631],{"class":125},[115,36346,36347],{"class":117,"line":32858},[115,36348,32870],{"class":184},[115,36350,36351],{"class":117,"line":32867},[115,36352,32876],{"class":125},[115,36354,36355],{"class":117,"line":32873},[115,36356,36357],{"class":184},"            # 验证时不计算梯度以节省内存\u002F计算\n",[115,36359,36360,36362],{"class":117,"line":32879},[115,36361,32882],{"class":121},[115,36363,32885],{"class":125},[115,36365,36366],{"class":117,"line":32888},[115,36367,32891],{"class":184},[115,36369,36370,36373,36375],{"class":117,"line":32894},[115,36371,36372],{"class":125},"                output",[115,36374,171],{"class":121},[115,36376,32666],{"class":125},[115,36378,36379],{"class":117,"line":32905},[115,36380,32908],{"class":184},[115,36382,36383,36386,36388,36390,36392,36394,36396],{"class":117,"line":32911},[115,36384,36385],{"class":125},"                pre_lab",[115,36387,171],{"class":121},[115,36389,32683],{"class":125},[115,36391,32686],{"class":5217},[115,36393,171],{"class":121},[115,36395,343],{"class":174},[115,36397,132],{"class":125},[115,36399,36400],{"class":117,"line":32930},[115,36401,32933],{"class":184},[115,36403,36404,36407,36409],{"class":117,"line":32936},[115,36405,36406],{"class":125},"                val_batch_loss",[115,36408,171],{"class":121},[115,36410,32709],{"class":125},[115,36412,36413],{"class":117,"line":32947},[115,36414,32950],{"class":184},[115,36416,36417,36420,36422,36425,36427,36429,36431],{"class":117,"line":32953},[115,36418,36419],{"class":125},"                val_loss",[115,36421,9478],{"class":121},[115,36423,36424],{"class":125},"val_batch_loss.item()",[115,36426,580],{"class":121},[115,36428,32767],{"class":125},[115,36430,317],{"class":174},[115,36432,132],{"class":125},[115,36434,36435,36438,36440,36442,36444],{"class":117,"line":32973},[115,36436,36437],{"class":125},"                val_corrects",[115,36439,9478],{"class":121},[115,36441,32788],{"class":125},[115,36443,2949],{"class":121},[115,36445,32793],{"class":125},[115,36447,36448],{"class":117,"line":32989},[115,36449,36450],{"class":184},"            # 当前用于验证的样本数量\n",[115,36452,36453,36456,36458,36460,36462],{"class":117,"line":32995},[115,36454,36455],{"class":125},"            val_num",[115,36457,9478],{"class":121},[115,36459,32767],{"class":125},[115,36461,317],{"class":174},[115,36463,132],{"class":125},[115,36465,36466],{"class":117,"line":33009},[115,36467,33012],{"class":184},[115,36469,36470],{"class":117,"line":33015},[115,36471,33018],{"class":184},[115,36473,36474,36476,36478],{"class":117,"line":33021},[115,36475,33024],{"class":125},[115,36477,709],{"class":121},[115,36479,33029],{"class":125},[115,36481,36482],{"class":117,"line":33032},[115,36483,33035],{"class":184},[115,36485,36486],{"class":117,"line":33038},[115,36487,33041],{"class":184},[115,36489,36490,36492,36494],{"class":117,"line":33044},[115,36491,33047],{"class":125},[115,36493,709],{"class":121},[115,36495,33029],{"class":125},[115,36497,36498],{"class":117,"line":33054},[115,36499,33057],{"class":184},[115,36501,36502,36504,36506],{"class":117,"line":33060},[115,36503,33063],{"class":125},[115,36505,709],{"class":121},[115,36507,33068],{"class":125},[115,36509,36510],{"class":117,"line":33071},[115,36511,33074],{"class":184},[115,36513,36514,36516,36518],{"class":117,"line":33077},[115,36515,33080],{"class":125},[115,36517,709],{"class":121},[115,36519,33068],{"class":125},[115,36521,36522],{"class":117,"line":33087},[115,36523,2400],{"emptyLinePlaceholder":42},[115,36525,36526],{"class":117,"line":33092},[115,36527,33095],{"class":184},[115,36529,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568],{"class":117,"line":33098},[115,36531,32452],{"class":174},[115,36533,126],{"class":125},[115,36535,3592],{"class":230},[115,36537,32460],{"class":174},[115,36539,33109],{"class":230},[115,36541,1021],{"class":174},[115,36543,33114],{"class":121},[115,36545,1071],{"class":174},[115,36547,33119],{"class":230},[115,36549,1021],{"class":174},[115,36551,33114],{"class":121},[115,36553,1071],{"class":174},[115,36555,3592],{"class":230},[115,36557,33130],{"class":125},[115,36559,657],{"class":121},[115,36561,343],{"class":174},[115,36563,33137],{"class":125},[115,36565,657],{"class":121},[115,36567,343],{"class":174},[115,36569,33144],{"class":125},[115,36571,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610],{"class":117,"line":33147},[115,36573,32452],{"class":174},[115,36575,126],{"class":125},[115,36577,3592],{"class":230},[115,36579,32460],{"class":174},[115,36581,33158],{"class":230},[115,36583,1021],{"class":174},[115,36585,33114],{"class":121},[115,36587,1071],{"class":174},[115,36589,33167],{"class":230},[115,36591,1021],{"class":174},[115,36593,33114],{"class":121},[115,36595,1071],{"class":174},[115,36597,3592],{"class":230},[115,36599,33178],{"class":125},[115,36601,657],{"class":121},[115,36603,343],{"class":174},[115,36605,33185],{"class":125},[115,36607,657],{"class":121},[115,36609,343],{"class":174},[115,36611,33144],{"class":125},[115,36613,36614],{"class":117,"line":33194},[115,36615,2400],{"emptyLinePlaceholder":42},[115,36617,36618],{"class":117,"line":33199},[115,36619,33202],{"class":184},[115,36621,36622,36624,36626,36628,36630,36632,36634],{"class":117,"line":33205},[115,36623,2497],{"class":121},[115,36625,33210],{"class":125},[115,36627,657],{"class":121},[115,36629,343],{"class":174},[115,36631,1065],{"class":125},[115,36633,1085],{"class":121},[115,36635,33221],{"class":125},[115,36637,36638],{"class":117,"line":33224},[115,36639,33227],{"class":184},[115,36641,36642,36644,36646,36648,36650,36652,36654],{"class":117,"line":33230},[115,36643,33233],{"class":125},[115,36645,165],{"class":174},[115,36647,171],{"class":121},[115,36649,33240],{"class":125},[115,36651,657],{"class":121},[115,36653,343],{"class":174},[115,36655,33247],{"class":125},[115,36657,36658],{"class":117,"line":33250},[115,36659,33253],{"class":184},[115,36661,36662],{"class":117,"line":33256},[115,36663,33259],{"class":184},[115,36665,36666,36668,36670],{"class":117,"line":33262},[115,36667,33265],{"class":125},[115,36669,171],{"class":121},[115,36671,32315],{"class":125},[115,36673,36674],{"class":117,"line":33272},[115,36675,2400],{"emptyLinePlaceholder":42},[115,36677,36678],{"class":117,"line":33277},[115,36679,33280],{"class":184},[115,36681,36682,36684,36686,36688,36690],{"class":117,"line":33283},[115,36683,33286],{"class":125},[115,36685,171],{"class":121},[115,36687,33291],{"class":125},[115,36689,657],{"class":121},[115,36691,33296],{"class":125},[115,36693,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728],{"class":117,"line":33299},[115,36695,32452],{"class":174},[115,36697,126],{"class":125},[115,36699,33306],{"class":230},[115,36701,1021],{"class":174},[115,36703,33311],{"class":121},[115,36705,1071],{"class":174},[115,36707,669],{"class":230},[115,36709,1021],{"class":174},[115,36711,33311],{"class":121},[115,36713,1071],{"class":174},[115,36715,33324],{"class":230},[115,36717,33327],{"class":125},[115,36719,33330],{"class":121},[115,36721,1032],{"class":174},[115,36723,33335],{"class":125},[115,36725,453],{"class":121},[115,36727,1032],{"class":174},[115,36729,30498],{"class":125},[115,36731,36732],{"class":117,"line":33344},[115,36733,36734],{"class":184},"    # 选择最优参数并保存\n",[115,36736,36737],{"class":117,"line":33350},[115,36738,36739],{"class":184},"    # 保存最佳模型权重字典\n",[115,36741,36742,36745,36747],{"class":117,"line":33356},[115,36743,36744],{"class":125},"    torch.save(best_model_wts,",[115,36746,33368],{"class":230},[115,36748,132],{"class":125},[115,36750,36751],{"class":117,"line":33362},[115,36752,33388],{"class":184},[115,36754,36755,36757,36759,36761,36763,36765],{"class":117,"line":33373},[115,36756,33394],{"class":125},[115,36758,171],{"class":121},[115,36760,33399],{"class":125},[115,36762,33402],{"class":5217},[115,36764,171],{"class":121},[115,36766,1546],{"class":125},[115,36768,36769,36771,36773,36775],{"class":117,"line":33379},[115,36770,33412],{"class":230},[115,36772,984],{"class":125},[115,36774,33417],{"class":174},[115,36776,33420],{"class":125},[115,36778,36779,36781],{"class":117,"line":33385},[115,36780,33426],{"class":230},[115,36782,33429],{"class":125},[115,36784,36785,36787],{"class":117,"line":33391},[115,36786,33435],{"class":230},[115,36788,33438],{"class":125},[115,36790,36791,36793],{"class":117,"line":33409},[115,36792,33444],{"class":230},[115,36794,33447],{"class":125},[115,36796,36797,36799],{"class":117,"line":33423},[115,36798,33453],{"class":230},[115,36800,33456],{"class":125},[115,36802,36803],{"class":117,"line":33432},[115,36804,33462],{"class":125},[115,36806,36807],{"class":117,"line":33441},[115,36808,33468],{"class":184},[115,36810,36811,36813],{"class":117,"line":33450},[115,36812,4090],{"class":121},[115,36814,33476],{"class":125},[115,36816,36817],{"class":117,"line":33459},[115,36818,2400],{"emptyLinePlaceholder":42},[115,36820,36821],{"class":117,"line":33465},[115,36822,33487],{"class":184},[115,36824,36825,36827,36829],{"class":117,"line":33471},[115,36826,31948],{"class":121},[115,36828,33495],{"class":1963},[115,36830,33498],{"class":125},[115,36832,36833],{"class":117,"line":33479},[115,36834,33504],{"class":184},[115,36836,36837,36839,36841,36843,36845,36847,36849,36851],{"class":117,"line":33484},[115,36838,33510],{"class":125},[115,36840,31694],{"class":5217},[115,36842,171],{"class":121},[115,36844,126],{"class":125},[115,36846,623],{"class":174},[115,36848,503],{"class":125},[115,36850,418],{"class":174},[115,36852,30498],{"class":125},[115,36854,36855],{"class":117,"line":33490},[115,36856,33530],{"class":184},[115,36858,36859],{"class":117,"line":33501},[115,36860,33536],{"class":184},[115,36862,36863],{"class":117,"line":33507},[115,36864,33542],{"class":184},[115,36866,36867,36869,36871,36873,36875,36877,36879],{"class":117,"line":33527},[115,36868,31728],{"class":125},[115,36870,343],{"class":174},[115,36872,503],{"class":125},[115,36874,203],{"class":174},[115,36876,503],{"class":125},[115,36878,343],{"class":174},[115,36880,132],{"class":125},[115,36882,36883],{"class":117,"line":33533},[115,36884,33565],{"class":184},[115,36886,36887],{"class":117,"line":33539},[115,36888,33571],{"class":184},[115,36890,36891],{"class":117,"line":33545},[115,36892,33577],{"class":184},[115,36894,36895],{"class":117,"line":33562},[115,36896,33583],{"class":184},[115,36898,36899],{"class":117,"line":33568},[115,36900,33589],{"class":184},[115,36902,36903,36905,36907,36909,36911,36913,36915,36917,36919],{"class":117,"line":33574},[115,36904,33595],{"class":125},[115,36906,33598],{"class":230},[115,36908,33601],{"class":125},[115,36910,33604],{"class":230},[115,36912,503],{"class":125},[115,36914,33609],{"class":5217},[115,36916,171],{"class":121},[115,36918,33614],{"class":230},[115,36920,132],{"class":125},[115,36922,36923,36925,36927,36929,36931,36933,36935,36937,36939],{"class":117,"line":33580},[115,36924,33595],{"class":125},[115,36926,33598],{"class":230},[115,36928,33626],{"class":125},[115,36930,33629],{"class":230},[115,36932,503],{"class":125},[115,36934,33609],{"class":5217},[115,36936,171],{"class":121},[115,36938,33638],{"class":230},[115,36940,132],{"class":125},[115,36942,36943],{"class":117,"line":33586},[115,36944,33646],{"class":184},[115,36946,36947],{"class":117,"line":33592},[115,36948,33652],{"class":125},[115,36950,36951],{"class":117,"line":33619},[115,36952,33658],{"class":184},[115,36954,36955,36957,36959],{"class":117,"line":33643},[115,36956,33664],{"class":125},[115,36958,33667],{"class":230},[115,36960,132],{"class":125},[115,36962,36963,36965,36967],{"class":117,"line":33649},[115,36964,33675],{"class":125},[115,36966,33678],{"class":230},[115,36968,132],{"class":125},[115,36970,36971],{"class":117,"line":33655},[115,36972,33686],{"class":184},[115,36974,36975,36977,36979,36981,36983,36985,36987],{"class":117,"line":33661},[115,36976,31728],{"class":125},[115,36978,343],{"class":174},[115,36980,503],{"class":125},[115,36982,203],{"class":174},[115,36984,503],{"class":125},[115,36986,203],{"class":174},[115,36988,132],{"class":125},[115,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":117,"line":33672},[115,36992,33595],{"class":125},[115,36994,33598],{"class":230},[115,36996,33713],{"class":125},[115,36998,33604],{"class":230},[115,37000,503],{"class":125},[115,37002,33609],{"class":5217},[115,37004,171],{"class":121},[115,37006,33724],{"class":230},[115,37008,132],{"class":125},[115,37010,37011,37013,37015,37017,37019,37021,37023,37025,37027],{"class":117,"line":33683},[115,37012,33595],{"class":125},[115,37014,33598],{"class":230},[115,37016,33736],{"class":125},[115,37018,33629],{"class":230},[115,37020,503],{"class":125},[115,37022,33609],{"class":5217},[115,37024,171],{"class":121},[115,37026,33747],{"class":230},[115,37028,132],{"class":125},[115,37030,37031],{"class":117,"line":33689},[115,37032,33755],{"class":184},[115,37034,37035],{"class":117,"line":33706},[115,37036,33652],{"class":125},[115,37038,37039,37041,37043],{"class":117,"line":33729},[115,37040,33664],{"class":125},[115,37042,33598],{"class":230},[115,37044,132],{"class":125},[115,37046,37047,37049,37051],{"class":117,"line":33752},[115,37048,33675],{"class":125},[115,37050,33777],{"class":230},[115,37052,132],{"class":125},[115,37054,37055],{"class":117,"line":33758},[115,37056,33785],{"class":125},[115,37058,37059],{"class":117,"line":33763},[115,37060,2400],{"emptyLinePlaceholder":42},[115,37062,37063],{"class":117,"line":33772},[115,37064,33796],{"class":184},[115,37066,37067,37069,37071,37073,37075],{"class":117,"line":33782},[115,37068,1531],{"class":121},[115,37070,31221],{"class":174},[115,37072,2949],{"class":121},[115,37074,31226],{"class":230},[115,37076,3739],{"class":125},[115,37078,37079],{"class":117,"line":33788},[115,37080,33815],{"class":184},[115,37082,37083,37086,37088],{"class":117,"line":33793},[115,37084,37085],{"class":125},"    AlexNet",[115,37087,171],{"class":121},[115,37089,37090],{"class":125},"AlexNet()\n",[115,37092,37093,37095,37097],{"class":117,"line":33799},[115,37094,33832],{"class":125},[115,37096,171],{"class":121},[115,37098,33837],{"class":125},[115,37100,37101,37103,37105,37108,37110,37112,37114],{"class":117,"line":33812},[115,37102,33394],{"class":125},[115,37104,171],{"class":121},[115,37106,37107],{"class":125},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[115,37109,33850],{"class":5217},[115,37111,171],{"class":121},[115,37113,825],{"class":174},[115,37115,132],{"class":125},[115,37117,37118],{"class":117,"line":33818},[115,37119,33862],{"class":125},[69,37121,37122],{"start":1180},[72,37123,33875],{},[106,37125,37127],{"className":30379,"code":37126,"language":30381,"meta":22,"style":22},"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",[112,37128,37129,37135,37145,37155,37165,37169,37179,37189,37200,37204,37208,37212,37220,37236,37246,37262,37272,37286,37290,37300,37310,37320,37326,37330,37334,37342,37346,37362,37370,37374,37378,37386,37394,37398,37402,37406,37410,37416,37420,37430,37438,37446,37450,37454,37458,37466,37470,37486,37490,37494,37498,37510,37514,37526,37530,37534,37546,37550,37560,37564,37568,37580,37584,37592,37596,37600,37608,37612,37620,37624,37628,37632,37636,37640,37656,37664,37668,37672,37720,37726,37730,37740,37748,37756,37760,37764,37768,37772,37780,37784,37800,37804,37812,37820],{"__ignoreMap":22},[115,37130,37131,37133],{"class":117,"line":118},[115,37132,30393],{"class":121},[115,37134,30396],{"class":125},[115,37136,37137,37139,37141,37143],{"class":117,"line":37},[115,37138,30393],{"class":121},[115,37140,31416],{"class":125},[115,37142,31384],{"class":121},[115,37144,31421],{"class":125},[115,37146,37147,37149,37151,37153],{"class":117,"line":1180},[115,37148,30738],{"class":121},[115,37150,33903],{"class":125},[115,37152,30393],{"class":121},[115,37154,33908],{"class":125},[115,37156,37157,37159,37161,37163],{"class":117,"line":1195},[115,37158,30738],{"class":121},[115,37160,31399],{"class":125},[115,37162,30393],{"class":121},[115,37164,31404],{"class":125},[115,37166,37167],{"class":117,"line":1201},[115,37168,33923],{"class":184},[115,37170,37171,37173,37175,37177],{"class":117,"line":1215},[115,37172,30738],{"class":121},[115,37174,31369],{"class":125},[115,37176,30393],{"class":121},[115,37178,31374],{"class":125},[115,37180,37181,37183,37185,37187],{"class":117,"line":1221},[115,37182,30738],{"class":121},[115,37184,31915],{"class":125},[115,37186,30393],{"class":121},[115,37188,35558],{"class":125},[115,37190,37191,37193,37196,37198],{"class":117,"line":1312},[115,37192,30738],{"class":121},[115,37194,37195],{"class":125}," 练习.AlexNet.model ",[115,37197,30393],{"class":121},[115,37199,35558],{"class":125},[115,37201,37202],{"class":117,"line":1318},[115,37203,2400],{"emptyLinePlaceholder":42},[115,37205,37206],{"class":117,"line":1330},[115,37207,2400],{"emptyLinePlaceholder":42},[115,37209,37210],{"class":117,"line":1612},[115,37211,33952],{"class":184},[115,37213,37214,37216,37218],{"class":117,"line":1617},[115,37215,31948],{"class":121},[115,37217,33959],{"class":1963},[115,37219,31954],{"class":125},[115,37221,37222,37224,37226,37228,37230,37232,37234],{"class":117,"line":1623},[115,37223,33966],{"class":125},[115,37225,171],{"class":121},[115,37227,31456],{"class":125},[115,37229,31459],{"class":5217},[115,37231,171],{"class":121},[115,37233,31464],{"class":230},[115,37235,31467],{"class":125},[115,37237,37238,37240,37242,37244],{"class":117,"line":1628},[115,37239,33983],{"class":5217},[115,37241,171],{"class":121},[115,37243,33988],{"class":174},[115,37245,31467],{"class":125},[115,37247,37248,37250,37252,37254,37256,37258,37260],{"class":117,"line":1642},[115,37249,33995],{"class":5217},[115,37251,171],{"class":121},[115,37253,31494],{"class":125},[115,37255,31497],{"class":5217},[115,37257,171],{"class":121},[115,37259,35450],{"class":174},[115,37261,31505],{"class":125},[115,37263,37264,37266,37268,37270],{"class":117,"line":1647},[115,37265,34012],{"class":5217},[115,37267,171],{"class":121},[115,37269,31477],{"class":174},[115,37271,132],{"class":125},[115,37273,37274,37276,37278,37280,37282,37284],{"class":117,"line":1653},[115,37275,34023],{"class":125},[115,37277,171],{"class":121},[115,37279,31535],{"class":125},[115,37281,31538],{"class":5217},[115,37283,171],{"class":121},[115,37285,34034],{"class":125},[115,37287,37288],{"class":117,"line":1674},[115,37289,34039],{"class":184},[115,37291,37292,37294,37296,37298],{"class":117,"line":1679},[115,37293,34044],{"class":5217},[115,37295,171],{"class":121},[115,37297,343],{"class":174},[115,37299,31467],{"class":125},[115,37301,37302,37304,37306,37308],{"class":117,"line":1693},[115,37303,34055],{"class":5217},[115,37305,171],{"class":121},[115,37307,31477],{"class":174},[115,37309,31467],{"class":125},[115,37311,37312,37314,37316,37318],{"class":117,"line":1698},[115,37313,34066],{"class":5217},[115,37315,171],{"class":121},[115,37317,317],{"class":174},[115,37319,132],{"class":125},[115,37321,37322,37324],{"class":117,"line":1727},[115,37323,4090],{"class":121},[115,37325,34079],{"class":125},[115,37327,37328],{"class":117,"line":1732},[115,37329,2400],{"emptyLinePlaceholder":42},[115,37331,37332],{"class":117,"line":1749},[115,37333,34088],{"class":184},[115,37335,37336,37338,37340],{"class":117,"line":1754},[115,37337,31948],{"class":121},[115,37339,34095],{"class":1963},[115,37341,34098],{"class":125},[115,37343,37344],{"class":117,"line":1759},[115,37345,34103],{"class":184},[115,37347,37348,37350,37352,37354,37356,37358,37360],{"class":117,"line":1764},[115,37349,31238],{"class":125},[115,37351,171],{"class":121},[115,37353,31245],{"class":230},[115,37355,1704],{"class":121},[115,37357,31250],{"class":125},[115,37359,1701],{"class":121},[115,37361,34120],{"class":230},[115,37363,37364,37366,37368],{"class":117,"line":1778},[115,37365,31290],{"class":125},[115,37367,171],{"class":121},[115,37369,32290],{"class":125},[115,37371,37372],{"class":117,"line":1783},[115,37373,2400],{"emptyLinePlaceholder":42},[115,37375,37376],{"class":117,"line":2577},[115,37377,34137],{"class":184},[115,37379,37380,37382,37384],{"class":117,"line":2591},[115,37381,34142],{"class":125},[115,37383,171],{"class":121},[115,37385,32343],{"class":174},[115,37387,37388,37390,37392],{"class":117,"line":2599},[115,37389,34151],{"class":125},[115,37391,171],{"class":121},[115,37393,3085],{"class":174},[115,37395,37396],{"class":117,"line":2604},[115,37397,2400],{"emptyLinePlaceholder":42},[115,37399,37400],{"class":117,"line":2610},[115,37401,34164],{"class":184},[115,37403,37404],{"class":117,"line":2616},[115,37405,34169],{"class":184},[115,37407,37408],{"class":117,"line":2621},[115,37409,34174],{"class":184},[115,37411,37412,37414],{"class":117,"line":7949},[115,37413,34179],{"class":121},[115,37415,32885],{"class":125},[115,37417,37418],{"class":117,"line":7973},[115,37419,34186],{"class":184},[115,37421,37422,37424,37426,37428],{"class":117,"line":7978},[115,37423,3403],{"class":121},[115,37425,34193],{"class":125},[115,37427,26044],{"class":121},[115,37429,34198],{"class":125},[115,37431,37432,37434,37436],{"class":117,"line":7984},[115,37433,34203],{"class":125},[115,37435,171],{"class":121},[115,37437,34208],{"class":125},[115,37439,37440,37442,37444],{"class":117,"line":8011},[115,37441,34213],{"class":125},[115,37443,171],{"class":121},[115,37445,34218],{"class":125},[115,37447,37448],{"class":117,"line":8016},[115,37449,34223],{"class":184},[115,37451,37452],{"class":117,"line":8022},[115,37453,32876],{"class":125},[115,37455,37456],{"class":117,"line":8034},[115,37457,34232],{"class":184},[115,37459,37460,37462,37464],{"class":117,"line":8046},[115,37461,32661],{"class":125},[115,37463,171],{"class":121},[115,37465,34241],{"class":125},[115,37467,37468],{"class":117,"line":8058},[115,37469,34246],{"class":184},[115,37471,37472,37474,37476,37478,37480,37482,37484],{"class":117,"line":9717},[115,37473,32678],{"class":125},[115,37475,171],{"class":121},[115,37477,32683],{"class":125},[115,37479,32686],{"class":5217},[115,37481,171],{"class":121},[115,37483,343],{"class":174},[115,37485,132],{"class":125},[115,37487,37488],{"class":117,"line":9742},[115,37489,34267],{"class":184},[115,37491,37492],{"class":117,"line":9765},[115,37493,34272],{"class":184},[115,37495,37496],{"class":117,"line":9789},[115,37497,34277],{"class":184},[115,37499,37500,37502,37504,37506,37508],{"class":117,"line":9794},[115,37501,34282],{"class":125},[115,37503,9478],{"class":121},[115,37505,32788],{"class":125},[115,37507,2949],{"class":121},[115,37509,34291],{"class":125},[115,37511,37512],{"class":117,"line":9799},[115,37513,34296],{"class":184},[115,37515,37516,37518,37520,37522,37524],{"class":117,"line":9804},[115,37517,34301],{"class":125},[115,37519,9478],{"class":121},[115,37521,34306],{"class":125},[115,37523,317],{"class":174},[115,37525,132],{"class":125},[115,37527,37528],{"class":117,"line":9813},[115,37529,2400],{"emptyLinePlaceholder":42},[115,37531,37532],{"class":117,"line":9818},[115,37533,34319],{"class":184},[115,37535,37536,37538,37540,37542,37544],{"class":117,"line":9824},[115,37537,34324],{"class":125},[115,37539,171],{"class":121},[115,37541,34329],{"class":125},[115,37543,709],{"class":121},[115,37545,34334],{"class":125},[115,37547,37548],{"class":117,"line":9845},[115,37549,34339],{"class":184},[115,37551,37552,37554,37556,37558],{"class":117,"line":9851},[115,37553,32452],{"class":174},[115,37555,126],{"class":125},[115,37557,34348],{"class":230},[115,37559,34351],{"class":125},[115,37561,37562],{"class":117,"line":9865},[115,37563,2400],{"emptyLinePlaceholder":42},[115,37565,37566],{"class":117,"line":9871},[115,37567,34360],{"class":184},[115,37569,37570,37572,37574,37576,37578],{"class":117,"line":9898},[115,37571,1531],{"class":121},[115,37573,31221],{"class":174},[115,37575,2949],{"class":121},[115,37577,31226],{"class":230},[115,37579,3739],{"class":125},[115,37581,37582],{"class":117,"line":9907},[115,37583,34377],{"class":184},[115,37585,37586,37588,37590],{"class":117,"line":9913},[115,37587,31290],{"class":125},[115,37589,171],{"class":121},[115,37591,37090],{"class":125},[115,37593,37594],{"class":117,"line":9921},[115,37595,34390],{"class":184},[115,37597,37598],{"class":117,"line":9926},[115,37599,34395],{"class":184},[115,37601,37602,37604,37606],{"class":117,"line":16605},[115,37603,34400],{"class":125},[115,37605,34403],{"class":230},[115,37607,30498],{"class":125},[115,37609,37610],{"class":117,"line":16611},[115,37611,34410],{"class":184},[115,37613,37614,37616,37618],{"class":117,"line":16634},[115,37615,34023],{"class":125},[115,37617,171],{"class":121},[115,37619,34419],{"class":125},[115,37621,37622],{"class":117,"line":16640},[115,37623,34424],{"class":184},[115,37625,37626],{"class":117,"line":16663},[115,37627,34429],{"class":125},[115,37629,37630],{"class":117,"line":16677},[115,37631,2400],{"emptyLinePlaceholder":42},[115,37633,37634],{"class":117,"line":16697},[115,37635,34438],{"class":184},[115,37637,37638],{"class":117,"line":16703},[115,37639,34443],{"class":184},[115,37641,37642,37644,37646,37648,37650,37652,37654],{"class":117,"line":16714},[115,37643,31238],{"class":125},[115,37645,171],{"class":121},[115,37647,31245],{"class":230},[115,37649,1704],{"class":121},[115,37651,31250],{"class":125},[115,37653,1701],{"class":121},[115,37655,34120],{"class":230},[115,37657,37658,37660,37662],{"class":117,"line":16737},[115,37659,31290],{"class":125},[115,37661,171],{"class":121},[115,37663,32290],{"class":125},[115,37665,37666],{"class":117,"line":16759},[115,37667,34472],{"class":184},[115,37669,37670],{"class":117,"line":16764},[115,37671,34477],{"class":184},[115,37673,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708,37710,37712,37714,37716,37718],{"class":117,"line":16770},[115,37675,34482],{"class":125},[115,37677,171],{"class":121},[115,37679,1015],{"class":125},[115,37681,34489],{"class":230},[115,37683,503],{"class":125},[115,37685,34494],{"class":230},[115,37687,503],{"class":125},[115,37689,34499],{"class":230},[115,37691,503],{"class":125},[115,37693,34504],{"class":230},[115,37695,503],{"class":125},[115,37697,34509],{"class":230},[115,37699,503],{"class":125},[115,37701,34514],{"class":230},[115,37703,503],{"class":125},[115,37705,34519],{"class":230},[115,37707,503],{"class":125},[115,37709,34524],{"class":230},[115,37711,503],{"class":125},[115,37713,34529],{"class":230},[115,37715,503],{"class":125},[115,37717,34534],{"class":230},[115,37719,33247],{"class":125},[115,37721,37722,37724],{"class":117,"line":16784},[115,37723,34179],{"class":121},[115,37725,32885],{"class":125},[115,37727,37728],{"class":117,"line":16797},[115,37729,34547],{"class":184},[115,37731,37732,37734,37736,37738],{"class":117,"line":16802},[115,37733,3403],{"class":121},[115,37735,34554],{"class":125},[115,37737,26044],{"class":121},[115,37739,34198],{"class":125},[115,37741,37742,37744,37746],{"class":117,"line":16816},[115,37743,32611],{"class":125},[115,37745,171],{"class":121},[115,37747,32616],{"class":125},[115,37749,37750,37752,37754],{"class":117,"line":16821},[115,37751,32626],{"class":125},[115,37753,171],{"class":121},[115,37755,32631],{"class":125},[115,37757,37758],{"class":117,"line":16827},[115,37759,2400],{"emptyLinePlaceholder":42},[115,37761,37762],{"class":117,"line":16832},[115,37763,34583],{"class":184},[115,37765,37766],{"class":117,"line":16846},[115,37767,32876],{"class":125},[115,37769,37770],{"class":117,"line":16851},[115,37771,34592],{"class":184},[115,37773,37774,37776,37778],{"class":117,"line":16856},[115,37775,32661],{"class":125},[115,37777,171],{"class":121},[115,37779,32666],{"class":125},[115,37781,37782],{"class":117,"line":16870},[115,37783,34605],{"class":184},[115,37785,37786,37788,37790,37792,37794,37796,37798],{"class":117,"line":16882},[115,37787,32678],{"class":125},[115,37789,171],{"class":121},[115,37791,32683],{"class":125},[115,37793,32686],{"class":5217},[115,37795,171],{"class":121},[115,37797,343],{"class":174},[115,37799,132],{"class":125},[115,37801,37802],{"class":117,"line":16887},[115,37803,34626],{"class":184},[115,37805,37806,37808,37810],{"class":117,"line":16900},[115,37807,34631],{"class":125},[115,37809,171],{"class":121},[115,37811,34636],{"class":125},[115,37813,37814,37816,37818],{"class":117,"line":16905},[115,37815,34641],{"class":125},[115,37817,171],{"class":121},[115,37819,34646],{"class":125},[115,37821,37822,37824,37826,37828,37830,37832,37834,37836],{"class":117,"line":16910},[115,37823,34651],{"class":174},[115,37825,126],{"class":125},[115,37827,34656],{"class":230},[115,37829,34659],{"class":125},[115,37831,34662],{"class":230},[115,37833,503],{"class":125},[115,37835,34667],{"class":230},[115,37837,34670],{"class":125},[86,37839,37841],{"id":37840},"_22vgg","2.2.VGG",[21999,37843,37845],{"id":37844},"_221原理","2.2.1.原理",[14,37847,37848],{},[20,37849],{"alt":22,"src":37850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37852,37853],{},[20,37854],{"alt":22,"src":37855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37857,37858],{},[20,37859],{"alt":22,"src":37860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37862,37863],{},"参数详细描述：",[14,37865,37866],{},[20,37867],{"alt":22,"src":37868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37870,37871],{},[20,37872],{"alt":22,"src":37873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37875,37876],{},[20,37877],{"alt":22,"src":37878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37880,37881],{},[20,37882],{"alt":22,"src":37883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37885,37886],{},[20,37887],{"alt":22,"src":37888},"\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",[21999,37890,37892],{"id":37891},"_222代码实现","2.2.2.代码实现",[69,37894,37895],{},[72,37896,37897],{},"网络搭建",[106,37899,37901],{"className":30379,"code":37900,"language":30381,"meta":22,"style":22},"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",[112,37902,37903,37909,37921,37931,37941,37945,37962,37970,37989,37994,37999,38011,38049,38054,38090,38094,38123,38128,38133,38144,38180,38184,38220,38224,38252,38256,38261,38272,38308,38312,38348,38352,38388,38392,38420,38424,38429,38440,38477,38481,38517,38521,38557,38561,38589,38593,38598,38609,38645,38649,38685,38689,38725,38729,38757,38761,38766,38777,38782,38787,38792,38813,38817,38829,38833,38845,38849,38853,38858,38863,38878,38883,38893,38898,38913,38918,38937,38942,38951,38956,38966,38971,38976,38990,38995,39009,39017,39021,39025,39033,39044,39055,39066,39077,39088,39099,39105,39109,39114,39127,39147,39153,39162],{"__ignoreMap":22},[115,37904,37905,37907],{"class":117,"line":118},[115,37906,30393],{"class":121},[115,37908,30396],{"class":125},[115,37910,37911,37913,37916,37918],{"class":117,"line":37},[115,37912,30738],{"class":121},[115,37914,37915],{"class":125}," sympy.core.sympify ",[115,37917,30393],{"class":121},[115,37919,37920],{"class":125}," kernS\n",[115,37922,37923,37925,37927,37929],{"class":117,"line":1180},[115,37924,30738],{"class":121},[115,37926,30741],{"class":125},[115,37928,30393],{"class":121},[115,37930,30746],{"class":125},[115,37932,37933,37935,37937,37939],{"class":117,"line":1195},[115,37934,30738],{"class":121},[115,37936,30758],{"class":125},[115,37938,30393],{"class":121},[115,37940,30763],{"class":125},[115,37942,37943],{"class":117,"line":1201},[115,37944,2400],{"emptyLinePlaceholder":42},[115,37946,37947,37949,37952,37954,37956,37958,37960],{"class":117,"line":1215},[115,37948,14695],{"class":121},[115,37950,37951],{"class":1963}," VGG16",[115,37953,126],{"class":125},[115,37955,30779],{"class":1963},[115,37957,683],{"class":125},[115,37959,30784],{"class":1963},[115,37961,30787],{"class":125},[115,37963,37964,37966,37968],{"class":117,"line":1221},[115,37965,30802],{"class":121},[115,37967,30805],{"class":174},[115,37969,30808],{"class":125},[115,37971,37972,37974,37976,37979,37981,37983,37985,37987],{"class":117,"line":1312},[115,37973,30818],{"class":174},[115,37975,126],{"class":125},[115,37977,37978],{"class":174},"VGG16",[115,37980,12436],{"class":125},[115,37982,30824],{"class":174},[115,37984,30827],{"class":125},[115,37986,30830],{"class":174},[115,37988,1976],{"class":125},[115,37990,37991],{"class":117,"line":1318},[115,37992,37993],{"class":184},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[115,37995,37996],{"class":117,"line":1330},[115,37997,37998],{"class":184},"        # 这里用的是灰度图\n",[115,38000,38001,38003,38006,38008],{"class":117,"line":1612},[115,38002,30846],{"class":174},[115,38004,38005],{"class":125},".block1",[115,38007,171],{"class":121},[115,38009,38010],{"class":125},"nn.Sequential(\n",[115,38012,38013,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046],{"class":117,"line":1617},[115,38014,38015],{"class":125},"            nn.Conv2d(",[115,38017,30857],{"class":5217},[115,38019,171],{"class":121},[115,38021,343],{"class":174},[115,38023,503],{"class":125},[115,38025,30866],{"class":5217},[115,38027,171],{"class":121},[115,38029,329],{"class":174},[115,38031,503],{"class":125},[115,38033,30875],{"class":5217},[115,38035,171],{"class":121},[115,38037,197],{"class":174},[115,38039,503],{"class":125},[115,38041,30884],{"class":5217},[115,38043,171],{"class":121},[115,38045,343],{"class":174},[115,38047,38048],{"class":125},"),\n",[115,38050,38051],{"class":117,"line":1623},[115,38052,38053],{"class":125},"            nn.ReLU(),\n",[115,38055,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088],{"class":117,"line":1628},[115,38057,38015],{"class":125},[115,38059,30857],{"class":5217},[115,38061,171],{"class":121},[115,38063,329],{"class":174},[115,38065,503],{"class":125},[115,38067,30866],{"class":5217},[115,38069,171],{"class":121},[115,38071,329],{"class":174},[115,38073,503],{"class":125},[115,38075,30875],{"class":5217},[115,38077,171],{"class":121},[115,38079,197],{"class":174},[115,38081,503],{"class":125},[115,38083,30884],{"class":5217},[115,38085,171],{"class":121},[115,38087,343],{"class":174},[115,38089,38048],{"class":125},[115,38091,38092],{"class":117,"line":1642},[115,38093,38053],{"class":125},[115,38095,38096,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121],{"class":117,"line":1647},[115,38097,38098],{"class":125},"            nn.MaxPool2d(",[115,38100,30875],{"class":5217},[115,38102,171],{"class":121},[115,38104,203],{"class":174},[115,38106,503],{"class":125},[115,38108,30930],{"class":5217},[115,38110,171],{"class":121},[115,38112,203],{"class":174},[115,38114,503],{"class":125},[115,38116,30884],{"class":5217},[115,38118,171],{"class":121},[115,38120,317],{"class":174},[115,38122,132],{"class":125},[115,38124,38125],{"class":117,"line":1653},[115,38126,38127],{"class":125},"        )\n",[115,38129,38130],{"class":117,"line":1674},[115,38131,38132],{"class":184},"        # 第二层\n",[115,38134,38135,38137,38140,38142],{"class":117,"line":1679},[115,38136,30846],{"class":174},[115,38138,38139],{"class":125},".block2",[115,38141,171],{"class":121},[115,38143,38010],{"class":125},[115,38145,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178],{"class":117,"line":1693},[115,38147,38015],{"class":125},[115,38149,30857],{"class":5217},[115,38151,171],{"class":121},[115,38153,329],{"class":174},[115,38155,503],{"class":125},[115,38157,30866],{"class":5217},[115,38159,171],{"class":121},[115,38161,32071],{"class":174},[115,38163,503],{"class":125},[115,38165,30875],{"class":5217},[115,38167,171],{"class":121},[115,38169,197],{"class":174},[115,38171,503],{"class":125},[115,38173,30884],{"class":5217},[115,38175,171],{"class":121},[115,38177,343],{"class":174},[115,38179,38048],{"class":125},[115,38181,38182],{"class":117,"line":1698},[115,38183,38053],{"class":125},[115,38185,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218],{"class":117,"line":1727},[115,38187,38015],{"class":125},[115,38189,30857],{"class":5217},[115,38191,171],{"class":121},[115,38193,32071],{"class":174},[115,38195,503],{"class":125},[115,38197,30866],{"class":5217},[115,38199,171],{"class":121},[115,38201,32071],{"class":174},[115,38203,503],{"class":125},[115,38205,30875],{"class":5217},[115,38207,171],{"class":121},[115,38209,197],{"class":174},[115,38211,503],{"class":125},[115,38213,30884],{"class":5217},[115,38215,171],{"class":121},[115,38217,343],{"class":174},[115,38219,38048],{"class":125},[115,38221,38222],{"class":117,"line":1732},[115,38223,38053],{"class":125},[115,38225,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250],{"class":117,"line":1749},[115,38227,38098],{"class":125},[115,38229,30875],{"class":5217},[115,38231,171],{"class":121},[115,38233,203],{"class":174},[115,38235,503],{"class":125},[115,38237,30930],{"class":5217},[115,38239,171],{"class":121},[115,38241,203],{"class":174},[115,38243,503],{"class":125},[115,38245,30884],{"class":5217},[115,38247,171],{"class":121},[115,38249,317],{"class":174},[115,38251,132],{"class":125},[115,38253,38254],{"class":117,"line":1754},[115,38255,38127],{"class":125},[115,38257,38258],{"class":117,"line":1759},[115,38259,38260],{"class":184},"        # 第三层\n",[115,38262,38263,38265,38268,38270],{"class":117,"line":1764},[115,38264,30846],{"class":174},[115,38266,38267],{"class":125},".block3",[115,38269,171],{"class":121},[115,38271,38010],{"class":125},[115,38273,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306],{"class":117,"line":1778},[115,38275,38015],{"class":125},[115,38277,30857],{"class":5217},[115,38279,171],{"class":121},[115,38281,32071],{"class":174},[115,38283,503],{"class":125},[115,38285,30866],{"class":5217},[115,38287,171],{"class":121},[115,38289,34871],{"class":174},[115,38291,503],{"class":125},[115,38293,30875],{"class":5217},[115,38295,171],{"class":121},[115,38297,197],{"class":174},[115,38299,503],{"class":125},[115,38301,30884],{"class":5217},[115,38303,171],{"class":121},[115,38305,343],{"class":174},[115,38307,38048],{"class":125},[115,38309,38310],{"class":117,"line":1783},[115,38311,38053],{"class":125},[115,38313,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346],{"class":117,"line":2577},[115,38315,38015],{"class":125},[115,38317,30857],{"class":5217},[115,38319,171],{"class":121},[115,38321,34871],{"class":174},[115,38323,503],{"class":125},[115,38325,30866],{"class":5217},[115,38327,171],{"class":121},[115,38329,34871],{"class":174},[115,38331,503],{"class":125},[115,38333,30875],{"class":5217},[115,38335,171],{"class":121},[115,38337,197],{"class":174},[115,38339,503],{"class":125},[115,38341,30884],{"class":5217},[115,38343,171],{"class":121},[115,38345,343],{"class":174},[115,38347,38048],{"class":125},[115,38349,38350],{"class":117,"line":2591},[115,38351,38053],{"class":125},[115,38353,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386],{"class":117,"line":2599},[115,38355,38015],{"class":125},[115,38357,30857],{"class":5217},[115,38359,171],{"class":121},[115,38361,34871],{"class":174},[115,38363,503],{"class":125},[115,38365,30866],{"class":5217},[115,38367,171],{"class":121},[115,38369,34871],{"class":174},[115,38371,503],{"class":125},[115,38373,30875],{"class":5217},[115,38375,171],{"class":121},[115,38377,197],{"class":174},[115,38379,503],{"class":125},[115,38381,30884],{"class":5217},[115,38383,171],{"class":121},[115,38385,343],{"class":174},[115,38387,38048],{"class":125},[115,38389,38390],{"class":117,"line":2604},[115,38391,38053],{"class":125},[115,38393,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418],{"class":117,"line":2610},[115,38395,38098],{"class":125},[115,38397,30875],{"class":5217},[115,38399,171],{"class":121},[115,38401,203],{"class":174},[115,38403,503],{"class":125},[115,38405,30930],{"class":5217},[115,38407,171],{"class":121},[115,38409,203],{"class":174},[115,38411,503],{"class":125},[115,38413,30884],{"class":5217},[115,38415,171],{"class":121},[115,38417,317],{"class":174},[115,38419,132],{"class":125},[115,38421,38422],{"class":117,"line":2616},[115,38423,38127],{"class":125},[115,38425,38426],{"class":117,"line":2621},[115,38427,38428],{"class":184},"        # 第四层\n",[115,38430,38431,38433,38436,38438],{"class":117,"line":7949},[115,38432,30846],{"class":174},[115,38434,38435],{"class":125},".block4",[115,38437,171],{"class":121},[115,38439,38010],{"class":125},[115,38441,38442,38444,38446,38448,38450,38452,38454,38456,38459,38461,38463,38465,38467,38469,38471,38473,38475],{"class":117,"line":7973},[115,38443,38015],{"class":125},[115,38445,30857],{"class":5217},[115,38447,171],{"class":121},[115,38449,34871],{"class":174},[115,38451,503],{"class":125},[115,38453,30866],{"class":5217},[115,38455,171],{"class":121},[115,38457,38458],{"class":174},"512",[115,38460,503],{"class":125},[115,38462,30875],{"class":5217},[115,38464,171],{"class":121},[115,38466,197],{"class":174},[115,38468,503],{"class":125},[115,38470,30884],{"class":5217},[115,38472,171],{"class":121},[115,38474,343],{"class":174},[115,38476,38048],{"class":125},[115,38478,38479],{"class":117,"line":7978},[115,38480,38053],{"class":125},[115,38482,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515],{"class":117,"line":7984},[115,38484,38015],{"class":125},[115,38486,30857],{"class":5217},[115,38488,171],{"class":121},[115,38490,38458],{"class":174},[115,38492,503],{"class":125},[115,38494,30866],{"class":5217},[115,38496,171],{"class":121},[115,38498,38458],{"class":174},[115,38500,503],{"class":125},[115,38502,30875],{"class":5217},[115,38504,171],{"class":121},[115,38506,197],{"class":174},[115,38508,503],{"class":125},[115,38510,30884],{"class":5217},[115,38512,171],{"class":121},[115,38514,343],{"class":174},[115,38516,38048],{"class":125},[115,38518,38519],{"class":117,"line":8011},[115,38520,38053],{"class":125},[115,38522,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":117,"line":8016},[115,38524,38015],{"class":125},[115,38526,30857],{"class":5217},[115,38528,171],{"class":121},[115,38530,38458],{"class":174},[115,38532,503],{"class":125},[115,38534,30866],{"class":5217},[115,38536,171],{"class":121},[115,38538,38458],{"class":174},[115,38540,503],{"class":125},[115,38542,30875],{"class":5217},[115,38544,171],{"class":121},[115,38546,197],{"class":174},[115,38548,503],{"class":125},[115,38550,30884],{"class":5217},[115,38552,171],{"class":121},[115,38554,343],{"class":174},[115,38556,38048],{"class":125},[115,38558,38559],{"class":117,"line":8022},[115,38560,38053],{"class":125},[115,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587],{"class":117,"line":8034},[115,38564,38098],{"class":125},[115,38566,30875],{"class":5217},[115,38568,171],{"class":121},[115,38570,203],{"class":174},[115,38572,503],{"class":125},[115,38574,30930],{"class":5217},[115,38576,171],{"class":121},[115,38578,203],{"class":174},[115,38580,503],{"class":125},[115,38582,30884],{"class":5217},[115,38584,171],{"class":121},[115,38586,317],{"class":174},[115,38588,132],{"class":125},[115,38590,38591],{"class":117,"line":8046},[115,38592,38127],{"class":125},[115,38594,38595],{"class":117,"line":8058},[115,38596,38597],{"class":184},"        # 第五层\n",[115,38599,38600,38602,38605,38607],{"class":117,"line":9717},[115,38601,30846],{"class":174},[115,38603,38604],{"class":125},".block5",[115,38606,171],{"class":121},[115,38608,38010],{"class":125},[115,38610,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643],{"class":117,"line":9742},[115,38612,38015],{"class":125},[115,38614,30857],{"class":5217},[115,38616,171],{"class":121},[115,38618,38458],{"class":174},[115,38620,503],{"class":125},[115,38622,30866],{"class":5217},[115,38624,171],{"class":121},[115,38626,38458],{"class":174},[115,38628,503],{"class":125},[115,38630,30875],{"class":5217},[115,38632,171],{"class":121},[115,38634,197],{"class":174},[115,38636,503],{"class":125},[115,38638,30884],{"class":5217},[115,38640,171],{"class":121},[115,38642,343],{"class":174},[115,38644,38048],{"class":125},[115,38646,38647],{"class":117,"line":9765},[115,38648,38053],{"class":125},[115,38650,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683],{"class":117,"line":9789},[115,38652,38015],{"class":125},[115,38654,30857],{"class":5217},[115,38656,171],{"class":121},[115,38658,38458],{"class":174},[115,38660,503],{"class":125},[115,38662,30866],{"class":5217},[115,38664,171],{"class":121},[115,38666,38458],{"class":174},[115,38668,503],{"class":125},[115,38670,30875],{"class":5217},[115,38672,171],{"class":121},[115,38674,197],{"class":174},[115,38676,503],{"class":125},[115,38678,30884],{"class":5217},[115,38680,171],{"class":121},[115,38682,343],{"class":174},[115,38684,38048],{"class":125},[115,38686,38687],{"class":117,"line":9794},[115,38688,38053],{"class":125},[115,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":117,"line":9799},[115,38692,38015],{"class":125},[115,38694,30857],{"class":5217},[115,38696,171],{"class":121},[115,38698,38458],{"class":174},[115,38700,503],{"class":125},[115,38702,30866],{"class":5217},[115,38704,171],{"class":121},[115,38706,38458],{"class":174},[115,38708,503],{"class":125},[115,38710,30875],{"class":5217},[115,38712,171],{"class":121},[115,38714,197],{"class":174},[115,38716,503],{"class":125},[115,38718,30884],{"class":5217},[115,38720,171],{"class":121},[115,38722,343],{"class":174},[115,38724,38048],{"class":125},[115,38726,38727],{"class":117,"line":9804},[115,38728,38053],{"class":125},[115,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755],{"class":117,"line":9813},[115,38732,38098],{"class":125},[115,38734,30875],{"class":5217},[115,38736,171],{"class":121},[115,38738,203],{"class":174},[115,38740,503],{"class":125},[115,38742,30930],{"class":5217},[115,38744,171],{"class":121},[115,38746,203],{"class":174},[115,38748,503],{"class":125},[115,38750,30884],{"class":5217},[115,38752,171],{"class":121},[115,38754,317],{"class":174},[115,38756,132],{"class":125},[115,38758,38759],{"class":117,"line":9818},[115,38760,38127],{"class":125},[115,38762,38763],{"class":117,"line":9824},[115,38764,38765],{"class":184},"        # 全连接层\n",[115,38767,38768,38770,38773,38775],{"class":117,"line":9845},[115,38769,30846],{"class":174},[115,38771,38772],{"class":125},".block6",[115,38774,171],{"class":121},[115,38776,38010],{"class":125},[115,38778,38779],{"class":117,"line":9851},[115,38780,38781],{"class":184},"            # 平展操作\n",[115,38783,38784],{"class":117,"line":9865},[115,38785,38786],{"class":184},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[115,38788,38789],{"class":117,"line":9871},[115,38790,38791],{"class":125},"            nn.Flatten(),\n",[115,38793,38794,38797,38799,38801,38803,38805,38807,38809,38811],{"class":117,"line":9898},[115,38795,38796],{"class":125},"            nn.Linear(",[115,38798,494],{"class":174},[115,38800,580],{"class":121},[115,38802,494],{"class":174},[115,38804,580],{"class":121},[115,38806,38458],{"class":174},[115,38808,503],{"class":125},[115,38810,34871],{"class":174},[115,38812,38048],{"class":125},[115,38814,38815],{"class":117,"line":9907},[115,38816,38053],{"class":125},[115,38818,38819,38821,38823,38825,38827],{"class":117,"line":9913},[115,38820,38796],{"class":125},[115,38822,34871],{"class":174},[115,38824,503],{"class":125},[115,38826,32071],{"class":174},[115,38828,38048],{"class":125},[115,38830,38831],{"class":117,"line":9921},[115,38832,38053],{"class":125},[115,38834,38835,38837,38839,38841,38843],{"class":117,"line":9926},[115,38836,38796],{"class":125},[115,38838,32071],{"class":174},[115,38840,503],{"class":125},[115,38842,571],{"class":174},[115,38844,132],{"class":125},[115,38846,38847],{"class":117,"line":16605},[115,38848,38127],{"class":125},[115,38850,38851],{"class":117,"line":16611},[115,38852,2400],{"emptyLinePlaceholder":42},[115,38854,38855],{"class":117,"line":16634},[115,38856,38857],{"class":184},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[115,38859,38860],{"class":117,"line":16640},[115,38861,38862],{"class":184},"        # 循环遍历模型\n",[115,38864,38865,38867,38870,38872,38875],{"class":117,"line":16663},[115,38866,3403],{"class":121},[115,38868,38869],{"class":125}," m ",[115,38871,26044],{"class":121},[115,38873,38874],{"class":174}," self",[115,38876,38877],{"class":125},".modules():\n",[115,38879,38880],{"class":117,"line":16677},[115,38881,38882],{"class":184},"            # print(m)\n",[115,38884,38885,38887,38890],{"class":117,"line":16697},[115,38886,4642],{"class":121},[115,38888,38889],{"class":174}," isinstance",[115,38891,38892],{"class":125},"(m,nn.Conv2d):\n",[115,38894,38895],{"class":117,"line":16703},[115,38896,38897],{"class":184},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[115,38899,38900,38903,38906,38908,38911],{"class":117,"line":16714},[115,38901,38902],{"class":125},"                nn.init.kaiming_normal_(m.weight,",[115,38904,38905],{"class":5217},"nonlinearity",[115,38907,171],{"class":121},[115,38909,38910],{"class":230},"'relu'",[115,38912,132],{"class":125},[115,38914,38915],{"class":117,"line":16737},[115,38916,38917],{"class":184},"                # 判断b参数是否存在\n",[115,38919,38920,38923,38926,38929,38932,38935],{"class":117,"line":16759},[115,38921,38922],{"class":121},"                if",[115,38924,38925],{"class":125}," m.bias ",[115,38927,38928],{"class":121},"is",[115,38930,38931],{"class":121}," not",[115,38933,38934],{"class":174}," None",[115,38936,3739],{"class":125},[115,38938,38939],{"class":117,"line":16764},[115,38940,38941],{"class":184},"                    # 如果参数不存在的化初始化b=0\n",[115,38943,38944,38947,38949],{"class":117,"line":16770},[115,38945,38946],{"class":125},"                    nn.init.constant_(m.bias,",[115,38948,317],{"class":174},[115,38950,132],{"class":125},[115,38952,38953],{"class":117,"line":16784},[115,38954,38955],{"class":184},"            # 全连接层初始化\n",[115,38957,38958,38961,38963],{"class":117,"line":16797},[115,38959,38960],{"class":121},"            elif",[115,38962,38889],{"class":174},[115,38964,38965],{"class":125},"(m,nn.Linear):\n",[115,38967,38968],{"class":117,"line":16802},[115,38969,38970],{"class":184},"                # 这个初始化方法是利用的是正太分布的方式\n",[115,38972,38973],{"class":117,"line":16816},[115,38974,38975],{"class":184},"                # 均值为0，方差为0.01\n",[115,38977,38978,38981,38983,38985,38988],{"class":117,"line":16821},[115,38979,38980],{"class":125},"                nn.init.normal_(m.weight,",[115,38982,317],{"class":174},[115,38984,503],{"class":125},[115,38986,38987],{"class":174},"0.01",[115,38989,132],{"class":125},[115,38991,38992],{"class":117,"line":16827},[115,38993,38994],{"class":184},"                # 初始化b参数\n",[115,38996,38997,38999,39001,39003,39005,39007],{"class":117,"line":16832},[115,38998,38922],{"class":121},[115,39000,38925],{"class":125},[115,39002,38928],{"class":121},[115,39004,38931],{"class":121},[115,39006,38934],{"class":174},[115,39008,3739],{"class":125},[115,39010,39011,39013,39015],{"class":117,"line":16846},[115,39012,38946],{"class":125},[115,39014,317],{"class":174},[115,39016,132],{"class":125},[115,39018,39019],{"class":117,"line":16851},[115,39020,2400],{"emptyLinePlaceholder":42},[115,39022,39023],{"class":117,"line":16856},[115,39024,35166],{"class":184},[115,39026,39027,39029,39031],{"class":117,"line":16870},[115,39028,30802],{"class":121},[115,39030,31094],{"class":1963},[115,39032,31097],{"class":125},[115,39034,39035,39037,39039,39041],{"class":117,"line":16882},[115,39036,31102],{"class":125},[115,39038,171],{"class":121},[115,39040,30824],{"class":174},[115,39042,39043],{"class":125},".block1(x)\n",[115,39045,39046,39048,39050,39052],{"class":117,"line":16887},[115,39047,31102],{"class":125},[115,39049,171],{"class":121},[115,39051,30824],{"class":174},[115,39053,39054],{"class":125},".block2(x)\n",[115,39056,39057,39059,39061,39063],{"class":117,"line":16900},[115,39058,31102],{"class":125},[115,39060,171],{"class":121},[115,39062,30824],{"class":174},[115,39064,39065],{"class":125},".block3(x)\n",[115,39067,39068,39070,39072,39074],{"class":117,"line":16905},[115,39069,31102],{"class":125},[115,39071,171],{"class":121},[115,39073,30824],{"class":174},[115,39075,39076],{"class":125},".block4(x)\n",[115,39078,39079,39081,39083,39085],{"class":117,"line":16910},[115,39080,31102],{"class":125},[115,39082,171],{"class":121},[115,39084,30824],{"class":174},[115,39086,39087],{"class":125},".block5(x)\n",[115,39089,39090,39092,39094,39096],{"class":117,"line":16915},[115,39091,31102],{"class":125},[115,39093,171],{"class":121},[115,39095,30824],{"class":174},[115,39097,39098],{"class":125},".block6(x)\n",[115,39100,39101,39103],{"class":117,"line":16928},[115,39102,14753],{"class":121},[115,39104,31210],{"class":125},[115,39106,39107],{"class":117,"line":16933},[115,39108,2400],{"emptyLinePlaceholder":42},[115,39110,39111],{"class":117,"line":32634},[115,39112,39113],{"class":184},"# 验证模型\n",[115,39115,39116,39118,39120,39122,39125],{"class":117,"line":32640},[115,39117,1531],{"class":121},[115,39119,31221],{"class":174},[115,39121,2949],{"class":121},[115,39123,39124],{"class":230},"'__main__'",[115,39126,3739],{"class":125},[115,39128,39129,39131,39133,39135,39137,39139,39141,39143,39145],{"class":117,"line":32646},[115,39130,31238],{"class":125},[115,39132,171],{"class":121},[115,39134,30452],{"class":125},[115,39136,31245],{"class":230},[115,39138,1704],{"class":121},[115,39140,31250],{"class":125},[115,39142,1701],{"class":121},[115,39144,30477],{"class":230},[115,39146,132],{"class":125},[115,39148,39149,39151],{"class":117,"line":32652},[115,39150,31300],{"class":174},[115,39152,30486],{"class":125},[115,39154,39155,39157,39159],{"class":117,"line":32658},[115,39156,31290],{"class":125},[115,39158,171],{"class":121},[115,39160,39161],{"class":125},"VGG16().to(device)\n",[115,39163,39164,39166,39168,39170,39172,39174,39176,39178],{"class":117,"line":32669},[115,39165,31300],{"class":174},[115,39167,31303],{"class":125},[115,39169,343],{"class":174},[115,39171,503],{"class":125},[115,39173,31502],{"class":174},[115,39175,503],{"class":125},[115,39177,31502],{"class":174},[115,39179,31316],{"class":125},[69,39181,39182],{"start":37},[72,39183,39184],{},"训练代码",[14,39186,39187],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39189,39190],{},"解决方式:",[14,39192,39193],{},"①权重初始化",[106,39195,39197],{"className":30379,"code":39196,"language":30381,"meta":22,"style":22},"# 权重初始化,保证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",[112,39198,39199,39204,39209,39221,39226,39234,39239,39252,39257,39271,39276,39285,39290,39299,39304,39309,39322,39327,39341],{"__ignoreMap":22},[115,39200,39201],{"class":117,"line":118},[115,39202,39203],{"class":184},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[115,39205,39206],{"class":117,"line":37},[115,39207,39208],{"class":184},"# 循环遍历模型\n",[115,39210,39211,39213,39215,39217,39219],{"class":117,"line":1180},[115,39212,3025],{"class":121},[115,39214,38869],{"class":125},[115,39216,26044],{"class":121},[115,39218,38874],{"class":174},[115,39220,38877],{"class":125},[115,39222,39223],{"class":117,"line":1195},[115,39224,39225],{"class":184},"    # print(m)\n",[115,39227,39228,39230,39232],{"class":117,"line":1201},[115,39229,3101],{"class":121},[115,39231,38889],{"class":174},[115,39233,38892],{"class":125},[115,39235,39236],{"class":117,"line":1215},[115,39237,39238],{"class":184},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[115,39240,39241,39244,39246,39248,39250],{"class":117,"line":1221},[115,39242,39243],{"class":125},"        nn.init.kaiming_normal_(m.weight,",[115,39245,38905],{"class":5217},[115,39247,171],{"class":121},[115,39249,38910],{"class":230},[115,39251,132],{"class":125},[115,39253,39254],{"class":117,"line":1312},[115,39255,39256],{"class":184},"        # 判断b参数是否存在\n",[115,39258,39259,39261,39263,39265,39267,39269],{"class":117,"line":1318},[115,39260,2497],{"class":121},[115,39262,38925],{"class":125},[115,39264,38928],{"class":121},[115,39266,38931],{"class":121},[115,39268,38934],{"class":174},[115,39270,3739],{"class":125},[115,39272,39273],{"class":117,"line":1330},[115,39274,39275],{"class":184},"            # 如果参数不存在的化初始化b=0\n",[115,39277,39278,39281,39283],{"class":117,"line":1612},[115,39279,39280],{"class":125},"            nn.init.constant_(m.bias,",[115,39282,317],{"class":174},[115,39284,132],{"class":125},[115,39286,39287],{"class":117,"line":1617},[115,39288,39289],{"class":184},"    # 全连接层初始化\n",[115,39291,39292,39295,39297],{"class":117,"line":1623},[115,39293,39294],{"class":121},"    elif",[115,39296,38889],{"class":174},[115,39298,38965],{"class":125},[115,39300,39301],{"class":117,"line":1628},[115,39302,39303],{"class":184},"        # 这个初始化方法是利用的是正太分布的方式\n",[115,39305,39306],{"class":117,"line":1642},[115,39307,39308],{"class":184},"        # 均值为0，方差为0.01\n",[115,39310,39311,39314,39316,39318,39320],{"class":117,"line":1647},[115,39312,39313],{"class":125},"        nn.init.normal_(m.weight,",[115,39315,317],{"class":174},[115,39317,503],{"class":125},[115,39319,38987],{"class":174},[115,39321,132],{"class":125},[115,39323,39324],{"class":117,"line":1653},[115,39325,39326],{"class":184},"        # 初始化b参数\n",[115,39328,39329,39331,39333,39335,39337,39339],{"class":117,"line":1674},[115,39330,2497],{"class":121},[115,39332,38925],{"class":125},[115,39334,38928],{"class":121},[115,39336,38931],{"class":121},[115,39338,38934],{"class":174},[115,39340,3739],{"class":125},[115,39342,39343,39345,39347],{"class":117,"line":1679},[115,39344,39280],{"class":125},[115,39346,317],{"class":174},[115,39348,132],{"class":125},[14,39350,39351],{},"②尽可能地增加批次",[14,39353,39354],{},"训练完整代码：",[106,39356,39357],{"className":30379,"code":37900,"language":30381,"meta":22,"style":22},[112,39358,39359,39365,39375,39385,39395,39399,39415,39423,39441,39445,39449,39459,39495,39499,39535,39539,39567,39571,39575,39585,39621,39625,39661,39665,39693,39697,39701,39711,39747,39751,39787,39791,39827,39831,39859,39863,39867,39877,39913,39917,39953,39957,39993,39997,40025,40029,40033,40043,40079,40083,40119,40123,40159,40163,40191,40195,40199,40209,40213,40217,40221,40241,40245,40257,40261,40273,40277,40281,40285,40289,40301,40305,40313,40317,40329,40333,40347,40351,40359,40363,40371,40375,40379,40391,40395,40409,40417,40421,40425,40433,40443,40453,40463,40473,40483,40493,40499,40503,40507,40519,40539,40545,40553],{"__ignoreMap":22},[115,39360,39361,39363],{"class":117,"line":118},[115,39362,30393],{"class":121},[115,39364,30396],{"class":125},[115,39366,39367,39369,39371,39373],{"class":117,"line":37},[115,39368,30738],{"class":121},[115,39370,37915],{"class":125},[115,39372,30393],{"class":121},[115,39374,37920],{"class":125},[115,39376,39377,39379,39381,39383],{"class":117,"line":1180},[115,39378,30738],{"class":121},[115,39380,30741],{"class":125},[115,39382,30393],{"class":121},[115,39384,30746],{"class":125},[115,39386,39387,39389,39391,39393],{"class":117,"line":1195},[115,39388,30738],{"class":121},[115,39390,30758],{"class":125},[115,39392,30393],{"class":121},[115,39394,30763],{"class":125},[115,39396,39397],{"class":117,"line":1201},[115,39398,2400],{"emptyLinePlaceholder":42},[115,39400,39401,39403,39405,39407,39409,39411,39413],{"class":117,"line":1215},[115,39402,14695],{"class":121},[115,39404,37951],{"class":1963},[115,39406,126],{"class":125},[115,39408,30779],{"class":1963},[115,39410,683],{"class":125},[115,39412,30784],{"class":1963},[115,39414,30787],{"class":125},[115,39416,39417,39419,39421],{"class":117,"line":1221},[115,39418,30802],{"class":121},[115,39420,30805],{"class":174},[115,39422,30808],{"class":125},[115,39424,39425,39427,39429,39431,39433,39435,39437,39439],{"class":117,"line":1312},[115,39426,30818],{"class":174},[115,39428,126],{"class":125},[115,39430,37978],{"class":174},[115,39432,12436],{"class":125},[115,39434,30824],{"class":174},[115,39436,30827],{"class":125},[115,39438,30830],{"class":174},[115,39440,1976],{"class":125},[115,39442,39443],{"class":117,"line":1318},[115,39444,37993],{"class":184},[115,39446,39447],{"class":117,"line":1330},[115,39448,37998],{"class":184},[115,39450,39451,39453,39455,39457],{"class":117,"line":1612},[115,39452,30846],{"class":174},[115,39454,38005],{"class":125},[115,39456,171],{"class":121},[115,39458,38010],{"class":125},[115,39460,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493],{"class":117,"line":1617},[115,39462,38015],{"class":125},[115,39464,30857],{"class":5217},[115,39466,171],{"class":121},[115,39468,343],{"class":174},[115,39470,503],{"class":125},[115,39472,30866],{"class":5217},[115,39474,171],{"class":121},[115,39476,329],{"class":174},[115,39478,503],{"class":125},[115,39480,30875],{"class":5217},[115,39482,171],{"class":121},[115,39484,197],{"class":174},[115,39486,503],{"class":125},[115,39488,30884],{"class":5217},[115,39490,171],{"class":121},[115,39492,343],{"class":174},[115,39494,38048],{"class":125},[115,39496,39497],{"class":117,"line":1623},[115,39498,38053],{"class":125},[115,39500,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533],{"class":117,"line":1628},[115,39502,38015],{"class":125},[115,39504,30857],{"class":5217},[115,39506,171],{"class":121},[115,39508,329],{"class":174},[115,39510,503],{"class":125},[115,39512,30866],{"class":5217},[115,39514,171],{"class":121},[115,39516,329],{"class":174},[115,39518,503],{"class":125},[115,39520,30875],{"class":5217},[115,39522,171],{"class":121},[115,39524,197],{"class":174},[115,39526,503],{"class":125},[115,39528,30884],{"class":5217},[115,39530,171],{"class":121},[115,39532,343],{"class":174},[115,39534,38048],{"class":125},[115,39536,39537],{"class":117,"line":1642},[115,39538,38053],{"class":125},[115,39540,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565],{"class":117,"line":1647},[115,39542,38098],{"class":125},[115,39544,30875],{"class":5217},[115,39546,171],{"class":121},[115,39548,203],{"class":174},[115,39550,503],{"class":125},[115,39552,30930],{"class":5217},[115,39554,171],{"class":121},[115,39556,203],{"class":174},[115,39558,503],{"class":125},[115,39560,30884],{"class":5217},[115,39562,171],{"class":121},[115,39564,317],{"class":174},[115,39566,132],{"class":125},[115,39568,39569],{"class":117,"line":1653},[115,39570,38127],{"class":125},[115,39572,39573],{"class":117,"line":1674},[115,39574,38132],{"class":184},[115,39576,39577,39579,39581,39583],{"class":117,"line":1679},[115,39578,30846],{"class":174},[115,39580,38139],{"class":125},[115,39582,171],{"class":121},[115,39584,38010],{"class":125},[115,39586,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619],{"class":117,"line":1693},[115,39588,38015],{"class":125},[115,39590,30857],{"class":5217},[115,39592,171],{"class":121},[115,39594,329],{"class":174},[115,39596,503],{"class":125},[115,39598,30866],{"class":5217},[115,39600,171],{"class":121},[115,39602,32071],{"class":174},[115,39604,503],{"class":125},[115,39606,30875],{"class":5217},[115,39608,171],{"class":121},[115,39610,197],{"class":174},[115,39612,503],{"class":125},[115,39614,30884],{"class":5217},[115,39616,171],{"class":121},[115,39618,343],{"class":174},[115,39620,38048],{"class":125},[115,39622,39623],{"class":117,"line":1698},[115,39624,38053],{"class":125},[115,39626,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659],{"class":117,"line":1727},[115,39628,38015],{"class":125},[115,39630,30857],{"class":5217},[115,39632,171],{"class":121},[115,39634,32071],{"class":174},[115,39636,503],{"class":125},[115,39638,30866],{"class":5217},[115,39640,171],{"class":121},[115,39642,32071],{"class":174},[115,39644,503],{"class":125},[115,39646,30875],{"class":5217},[115,39648,171],{"class":121},[115,39650,197],{"class":174},[115,39652,503],{"class":125},[115,39654,30884],{"class":5217},[115,39656,171],{"class":121},[115,39658,343],{"class":174},[115,39660,38048],{"class":125},[115,39662,39663],{"class":117,"line":1732},[115,39664,38053],{"class":125},[115,39666,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691],{"class":117,"line":1749},[115,39668,38098],{"class":125},[115,39670,30875],{"class":5217},[115,39672,171],{"class":121},[115,39674,203],{"class":174},[115,39676,503],{"class":125},[115,39678,30930],{"class":5217},[115,39680,171],{"class":121},[115,39682,203],{"class":174},[115,39684,503],{"class":125},[115,39686,30884],{"class":5217},[115,39688,171],{"class":121},[115,39690,317],{"class":174},[115,39692,132],{"class":125},[115,39694,39695],{"class":117,"line":1754},[115,39696,38127],{"class":125},[115,39698,39699],{"class":117,"line":1759},[115,39700,38260],{"class":184},[115,39702,39703,39705,39707,39709],{"class":117,"line":1764},[115,39704,30846],{"class":174},[115,39706,38267],{"class":125},[115,39708,171],{"class":121},[115,39710,38010],{"class":125},[115,39712,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745],{"class":117,"line":1778},[115,39714,38015],{"class":125},[115,39716,30857],{"class":5217},[115,39718,171],{"class":121},[115,39720,32071],{"class":174},[115,39722,503],{"class":125},[115,39724,30866],{"class":5217},[115,39726,171],{"class":121},[115,39728,34871],{"class":174},[115,39730,503],{"class":125},[115,39732,30875],{"class":5217},[115,39734,171],{"class":121},[115,39736,197],{"class":174},[115,39738,503],{"class":125},[115,39740,30884],{"class":5217},[115,39742,171],{"class":121},[115,39744,343],{"class":174},[115,39746,38048],{"class":125},[115,39748,39749],{"class":117,"line":1783},[115,39750,38053],{"class":125},[115,39752,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785],{"class":117,"line":2577},[115,39754,38015],{"class":125},[115,39756,30857],{"class":5217},[115,39758,171],{"class":121},[115,39760,34871],{"class":174},[115,39762,503],{"class":125},[115,39764,30866],{"class":5217},[115,39766,171],{"class":121},[115,39768,34871],{"class":174},[115,39770,503],{"class":125},[115,39772,30875],{"class":5217},[115,39774,171],{"class":121},[115,39776,197],{"class":174},[115,39778,503],{"class":125},[115,39780,30884],{"class":5217},[115,39782,171],{"class":121},[115,39784,343],{"class":174},[115,39786,38048],{"class":125},[115,39788,39789],{"class":117,"line":2591},[115,39790,38053],{"class":125},[115,39792,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825],{"class":117,"line":2599},[115,39794,38015],{"class":125},[115,39796,30857],{"class":5217},[115,39798,171],{"class":121},[115,39800,34871],{"class":174},[115,39802,503],{"class":125},[115,39804,30866],{"class":5217},[115,39806,171],{"class":121},[115,39808,34871],{"class":174},[115,39810,503],{"class":125},[115,39812,30875],{"class":5217},[115,39814,171],{"class":121},[115,39816,197],{"class":174},[115,39818,503],{"class":125},[115,39820,30884],{"class":5217},[115,39822,171],{"class":121},[115,39824,343],{"class":174},[115,39826,38048],{"class":125},[115,39828,39829],{"class":117,"line":2604},[115,39830,38053],{"class":125},[115,39832,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857],{"class":117,"line":2610},[115,39834,38098],{"class":125},[115,39836,30875],{"class":5217},[115,39838,171],{"class":121},[115,39840,203],{"class":174},[115,39842,503],{"class":125},[115,39844,30930],{"class":5217},[115,39846,171],{"class":121},[115,39848,203],{"class":174},[115,39850,503],{"class":125},[115,39852,30884],{"class":5217},[115,39854,171],{"class":121},[115,39856,317],{"class":174},[115,39858,132],{"class":125},[115,39860,39861],{"class":117,"line":2616},[115,39862,38127],{"class":125},[115,39864,39865],{"class":117,"line":2621},[115,39866,38428],{"class":184},[115,39868,39869,39871,39873,39875],{"class":117,"line":7949},[115,39870,30846],{"class":174},[115,39872,38435],{"class":125},[115,39874,171],{"class":121},[115,39876,38010],{"class":125},[115,39878,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911],{"class":117,"line":7973},[115,39880,38015],{"class":125},[115,39882,30857],{"class":5217},[115,39884,171],{"class":121},[115,39886,34871],{"class":174},[115,39888,503],{"class":125},[115,39890,30866],{"class":5217},[115,39892,171],{"class":121},[115,39894,38458],{"class":174},[115,39896,503],{"class":125},[115,39898,30875],{"class":5217},[115,39900,171],{"class":121},[115,39902,197],{"class":174},[115,39904,503],{"class":125},[115,39906,30884],{"class":5217},[115,39908,171],{"class":121},[115,39910,343],{"class":174},[115,39912,38048],{"class":125},[115,39914,39915],{"class":117,"line":7978},[115,39916,38053],{"class":125},[115,39918,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951],{"class":117,"line":7984},[115,39920,38015],{"class":125},[115,39922,30857],{"class":5217},[115,39924,171],{"class":121},[115,39926,38458],{"class":174},[115,39928,503],{"class":125},[115,39930,30866],{"class":5217},[115,39932,171],{"class":121},[115,39934,38458],{"class":174},[115,39936,503],{"class":125},[115,39938,30875],{"class":5217},[115,39940,171],{"class":121},[115,39942,197],{"class":174},[115,39944,503],{"class":125},[115,39946,30884],{"class":5217},[115,39948,171],{"class":121},[115,39950,343],{"class":174},[115,39952,38048],{"class":125},[115,39954,39955],{"class":117,"line":8011},[115,39956,38053],{"class":125},[115,39958,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":117,"line":8016},[115,39960,38015],{"class":125},[115,39962,30857],{"class":5217},[115,39964,171],{"class":121},[115,39966,38458],{"class":174},[115,39968,503],{"class":125},[115,39970,30866],{"class":5217},[115,39972,171],{"class":121},[115,39974,38458],{"class":174},[115,39976,503],{"class":125},[115,39978,30875],{"class":5217},[115,39980,171],{"class":121},[115,39982,197],{"class":174},[115,39984,503],{"class":125},[115,39986,30884],{"class":5217},[115,39988,171],{"class":121},[115,39990,343],{"class":174},[115,39992,38048],{"class":125},[115,39994,39995],{"class":117,"line":8022},[115,39996,38053],{"class":125},[115,39998,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023],{"class":117,"line":8034},[115,40000,38098],{"class":125},[115,40002,30875],{"class":5217},[115,40004,171],{"class":121},[115,40006,203],{"class":174},[115,40008,503],{"class":125},[115,40010,30930],{"class":5217},[115,40012,171],{"class":121},[115,40014,203],{"class":174},[115,40016,503],{"class":125},[115,40018,30884],{"class":5217},[115,40020,171],{"class":121},[115,40022,317],{"class":174},[115,40024,132],{"class":125},[115,40026,40027],{"class":117,"line":8046},[115,40028,38127],{"class":125},[115,40030,40031],{"class":117,"line":8058},[115,40032,38597],{"class":184},[115,40034,40035,40037,40039,40041],{"class":117,"line":9717},[115,40036,30846],{"class":174},[115,40038,38604],{"class":125},[115,40040,171],{"class":121},[115,40042,38010],{"class":125},[115,40044,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077],{"class":117,"line":9742},[115,40046,38015],{"class":125},[115,40048,30857],{"class":5217},[115,40050,171],{"class":121},[115,40052,38458],{"class":174},[115,40054,503],{"class":125},[115,40056,30866],{"class":5217},[115,40058,171],{"class":121},[115,40060,38458],{"class":174},[115,40062,503],{"class":125},[115,40064,30875],{"class":5217},[115,40066,171],{"class":121},[115,40068,197],{"class":174},[115,40070,503],{"class":125},[115,40072,30884],{"class":5217},[115,40074,171],{"class":121},[115,40076,343],{"class":174},[115,40078,38048],{"class":125},[115,40080,40081],{"class":117,"line":9765},[115,40082,38053],{"class":125},[115,40084,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117],{"class":117,"line":9789},[115,40086,38015],{"class":125},[115,40088,30857],{"class":5217},[115,40090,171],{"class":121},[115,40092,38458],{"class":174},[115,40094,503],{"class":125},[115,40096,30866],{"class":5217},[115,40098,171],{"class":121},[115,40100,38458],{"class":174},[115,40102,503],{"class":125},[115,40104,30875],{"class":5217},[115,40106,171],{"class":121},[115,40108,197],{"class":174},[115,40110,503],{"class":125},[115,40112,30884],{"class":5217},[115,40114,171],{"class":121},[115,40116,343],{"class":174},[115,40118,38048],{"class":125},[115,40120,40121],{"class":117,"line":9794},[115,40122,38053],{"class":125},[115,40124,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157],{"class":117,"line":9799},[115,40126,38015],{"class":125},[115,40128,30857],{"class":5217},[115,40130,171],{"class":121},[115,40132,38458],{"class":174},[115,40134,503],{"class":125},[115,40136,30866],{"class":5217},[115,40138,171],{"class":121},[115,40140,38458],{"class":174},[115,40142,503],{"class":125},[115,40144,30875],{"class":5217},[115,40146,171],{"class":121},[115,40148,197],{"class":174},[115,40150,503],{"class":125},[115,40152,30884],{"class":5217},[115,40154,171],{"class":121},[115,40156,343],{"class":174},[115,40158,38048],{"class":125},[115,40160,40161],{"class":117,"line":9804},[115,40162,38053],{"class":125},[115,40164,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189],{"class":117,"line":9813},[115,40166,38098],{"class":125},[115,40168,30875],{"class":5217},[115,40170,171],{"class":121},[115,40172,203],{"class":174},[115,40174,503],{"class":125},[115,40176,30930],{"class":5217},[115,40178,171],{"class":121},[115,40180,203],{"class":174},[115,40182,503],{"class":125},[115,40184,30884],{"class":5217},[115,40186,171],{"class":121},[115,40188,317],{"class":174},[115,40190,132],{"class":125},[115,40192,40193],{"class":117,"line":9818},[115,40194,38127],{"class":125},[115,40196,40197],{"class":117,"line":9824},[115,40198,38765],{"class":184},[115,40200,40201,40203,40205,40207],{"class":117,"line":9845},[115,40202,30846],{"class":174},[115,40204,38772],{"class":125},[115,40206,171],{"class":121},[115,40208,38010],{"class":125},[115,40210,40211],{"class":117,"line":9851},[115,40212,38781],{"class":184},[115,40214,40215],{"class":117,"line":9865},[115,40216,38786],{"class":184},[115,40218,40219],{"class":117,"line":9871},[115,40220,38791],{"class":125},[115,40222,40223,40225,40227,40229,40231,40233,40235,40237,40239],{"class":117,"line":9898},[115,40224,38796],{"class":125},[115,40226,494],{"class":174},[115,40228,580],{"class":121},[115,40230,494],{"class":174},[115,40232,580],{"class":121},[115,40234,38458],{"class":174},[115,40236,503],{"class":125},[115,40238,34871],{"class":174},[115,40240,38048],{"class":125},[115,40242,40243],{"class":117,"line":9907},[115,40244,38053],{"class":125},[115,40246,40247,40249,40251,40253,40255],{"class":117,"line":9913},[115,40248,38796],{"class":125},[115,40250,34871],{"class":174},[115,40252,503],{"class":125},[115,40254,32071],{"class":174},[115,40256,38048],{"class":125},[115,40258,40259],{"class":117,"line":9921},[115,40260,38053],{"class":125},[115,40262,40263,40265,40267,40269,40271],{"class":117,"line":9926},[115,40264,38796],{"class":125},[115,40266,32071],{"class":174},[115,40268,503],{"class":125},[115,40270,571],{"class":174},[115,40272,132],{"class":125},[115,40274,40275],{"class":117,"line":16605},[115,40276,38127],{"class":125},[115,40278,40279],{"class":117,"line":16611},[115,40280,2400],{"emptyLinePlaceholder":42},[115,40282,40283],{"class":117,"line":16634},[115,40284,38857],{"class":184},[115,40286,40287],{"class":117,"line":16640},[115,40288,38862],{"class":184},[115,40290,40291,40293,40295,40297,40299],{"class":117,"line":16663},[115,40292,3403],{"class":121},[115,40294,38869],{"class":125},[115,40296,26044],{"class":121},[115,40298,38874],{"class":174},[115,40300,38877],{"class":125},[115,40302,40303],{"class":117,"line":16677},[115,40304,38882],{"class":184},[115,40306,40307,40309,40311],{"class":117,"line":16697},[115,40308,4642],{"class":121},[115,40310,38889],{"class":174},[115,40312,38892],{"class":125},[115,40314,40315],{"class":117,"line":16703},[115,40316,38897],{"class":184},[115,40318,40319,40321,40323,40325,40327],{"class":117,"line":16714},[115,40320,38902],{"class":125},[115,40322,38905],{"class":5217},[115,40324,171],{"class":121},[115,40326,38910],{"class":230},[115,40328,132],{"class":125},[115,40330,40331],{"class":117,"line":16737},[115,40332,38917],{"class":184},[115,40334,40335,40337,40339,40341,40343,40345],{"class":117,"line":16759},[115,40336,38922],{"class":121},[115,40338,38925],{"class":125},[115,40340,38928],{"class":121},[115,40342,38931],{"class":121},[115,40344,38934],{"class":174},[115,40346,3739],{"class":125},[115,40348,40349],{"class":117,"line":16764},[115,40350,38941],{"class":184},[115,40352,40353,40355,40357],{"class":117,"line":16770},[115,40354,38946],{"class":125},[115,40356,317],{"class":174},[115,40358,132],{"class":125},[115,40360,40361],{"class":117,"line":16784},[115,40362,38955],{"class":184},[115,40364,40365,40367,40369],{"class":117,"line":16797},[115,40366,38960],{"class":121},[115,40368,38889],{"class":174},[115,40370,38965],{"class":125},[115,40372,40373],{"class":117,"line":16802},[115,40374,38970],{"class":184},[115,40376,40377],{"class":117,"line":16816},[115,40378,38975],{"class":184},[115,40380,40381,40383,40385,40387,40389],{"class":117,"line":16821},[115,40382,38980],{"class":125},[115,40384,317],{"class":174},[115,40386,503],{"class":125},[115,40388,38987],{"class":174},[115,40390,132],{"class":125},[115,40392,40393],{"class":117,"line":16827},[115,40394,38994],{"class":184},[115,40396,40397,40399,40401,40403,40405,40407],{"class":117,"line":16832},[115,40398,38922],{"class":121},[115,40400,38925],{"class":125},[115,40402,38928],{"class":121},[115,40404,38931],{"class":121},[115,40406,38934],{"class":174},[115,40408,3739],{"class":125},[115,40410,40411,40413,40415],{"class":117,"line":16846},[115,40412,38946],{"class":125},[115,40414,317],{"class":174},[115,40416,132],{"class":125},[115,40418,40419],{"class":117,"line":16851},[115,40420,2400],{"emptyLinePlaceholder":42},[115,40422,40423],{"class":117,"line":16856},[115,40424,35166],{"class":184},[115,40426,40427,40429,40431],{"class":117,"line":16870},[115,40428,30802],{"class":121},[115,40430,31094],{"class":1963},[115,40432,31097],{"class":125},[115,40434,40435,40437,40439,40441],{"class":117,"line":16882},[115,40436,31102],{"class":125},[115,40438,171],{"class":121},[115,40440,30824],{"class":174},[115,40442,39043],{"class":125},[115,40444,40445,40447,40449,40451],{"class":117,"line":16887},[115,40446,31102],{"class":125},[115,40448,171],{"class":121},[115,40450,30824],{"class":174},[115,40452,39054],{"class":125},[115,40454,40455,40457,40459,40461],{"class":117,"line":16900},[115,40456,31102],{"class":125},[115,40458,171],{"class":121},[115,40460,30824],{"class":174},[115,40462,39065],{"class":125},[115,40464,40465,40467,40469,40471],{"class":117,"line":16905},[115,40466,31102],{"class":125},[115,40468,171],{"class":121},[115,40470,30824],{"class":174},[115,40472,39076],{"class":125},[115,40474,40475,40477,40479,40481],{"class":117,"line":16910},[115,40476,31102],{"class":125},[115,40478,171],{"class":121},[115,40480,30824],{"class":174},[115,40482,39087],{"class":125},[115,40484,40485,40487,40489,40491],{"class":117,"line":16915},[115,40486,31102],{"class":125},[115,40488,171],{"class":121},[115,40490,30824],{"class":174},[115,40492,39098],{"class":125},[115,40494,40495,40497],{"class":117,"line":16928},[115,40496,14753],{"class":121},[115,40498,31210],{"class":125},[115,40500,40501],{"class":117,"line":16933},[115,40502,2400],{"emptyLinePlaceholder":42},[115,40504,40505],{"class":117,"line":32634},[115,40506,39113],{"class":184},[115,40508,40509,40511,40513,40515,40517],{"class":117,"line":32640},[115,40510,1531],{"class":121},[115,40512,31221],{"class":174},[115,40514,2949],{"class":121},[115,40516,39124],{"class":230},[115,40518,3739],{"class":125},[115,40520,40521,40523,40525,40527,40529,40531,40533,40535,40537],{"class":117,"line":32646},[115,40522,31238],{"class":125},[115,40524,171],{"class":121},[115,40526,30452],{"class":125},[115,40528,31245],{"class":230},[115,40530,1704],{"class":121},[115,40532,31250],{"class":125},[115,40534,1701],{"class":121},[115,40536,30477],{"class":230},[115,40538,132],{"class":125},[115,40540,40541,40543],{"class":117,"line":32652},[115,40542,31300],{"class":174},[115,40544,30486],{"class":125},[115,40546,40547,40549,40551],{"class":117,"line":32658},[115,40548,31290],{"class":125},[115,40550,171],{"class":121},[115,40552,39161],{"class":125},[115,40554,40555,40557,40559,40561,40563,40565,40567,40569],{"class":117,"line":32669},[115,40556,31300],{"class":174},[115,40558,31303],{"class":125},[115,40560,343],{"class":174},[115,40562,503],{"class":125},[115,40564,31502],{"class":174},[115,40566,503],{"class":125},[115,40568,31502],{"class":174},[115,40570,31316],{"class":125},[69,40572,40573],{"start":1180},[72,40574,40575],{},"测试代码",[106,40577,40579],{"className":30379,"code":40578,"language":30381,"meta":22,"style":22},"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",[112,40580,40581,40587,40597,40607,40611,40621,40632,40636,40640,40644,40652,40668,40678,40694,40704,40718,40722,40732,40742,40752,40758,40762,40766,40774,40778,40794,40802,40806,40810,40818,40826,40830,40834,40838,40842,40848,40852,40862,40870,40878,40882,40886,40890,40898,40902,40918,40922,40926,40930,40942,40946,40958,40962,40966,40978,40982,40992,40996,41000,41012,41016,41025,41029,41033,41041,41045,41053,41057,41061,41065,41069,41073,41089,41097,41101,41105,41153,41159,41163,41173,41181,41189,41193,41197,41201,41205,41213,41217,41233,41237,41245,41253],{"__ignoreMap":22},[115,40582,40583,40585],{"class":117,"line":118},[115,40584,30393],{"class":121},[115,40586,30396],{"class":125},[115,40588,40589,40591,40593,40595],{"class":117,"line":37},[115,40590,30393],{"class":121},[115,40592,31416],{"class":125},[115,40594,31384],{"class":121},[115,40596,31421],{"class":125},[115,40598,40599,40601,40603,40605],{"class":117,"line":1180},[115,40600,30738],{"class":121},[115,40602,31399],{"class":125},[115,40604,30393],{"class":121},[115,40606,31404],{"class":125},[115,40608,40609],{"class":117,"line":1195},[115,40610,33923],{"class":184},[115,40612,40613,40615,40617,40619],{"class":117,"line":1201},[115,40614,30738],{"class":121},[115,40616,31369],{"class":125},[115,40618,30393],{"class":121},[115,40620,31374],{"class":125},[115,40622,40623,40625,40627,40629],{"class":117,"line":1215},[115,40624,30738],{"class":121},[115,40626,31915],{"class":125},[115,40628,30393],{"class":121},[115,40630,40631],{"class":174}," VGG16\n",[115,40633,40634],{"class":117,"line":1221},[115,40635,2400],{"emptyLinePlaceholder":42},[115,40637,40638],{"class":117,"line":1312},[115,40639,2400],{"emptyLinePlaceholder":42},[115,40641,40642],{"class":117,"line":1318},[115,40643,33952],{"class":184},[115,40645,40646,40648,40650],{"class":117,"line":1330},[115,40647,31948],{"class":121},[115,40649,33959],{"class":1963},[115,40651,31954],{"class":125},[115,40653,40654,40656,40658,40660,40662,40664,40666],{"class":117,"line":1612},[115,40655,33966],{"class":125},[115,40657,171],{"class":121},[115,40659,31456],{"class":125},[115,40661,31459],{"class":5217},[115,40663,171],{"class":121},[115,40665,31464],{"class":230},[115,40667,31467],{"class":125},[115,40669,40670,40672,40674,40676],{"class":117,"line":1617},[115,40671,33983],{"class":5217},[115,40673,171],{"class":121},[115,40675,33988],{"class":174},[115,40677,31467],{"class":125},[115,40679,40680,40682,40684,40686,40688,40690,40692],{"class":117,"line":1623},[115,40681,33995],{"class":5217},[115,40683,171],{"class":121},[115,40685,31494],{"class":125},[115,40687,31497],{"class":5217},[115,40689,171],{"class":121},[115,40691,31502],{"class":174},[115,40693,31505],{"class":125},[115,40695,40696,40698,40700,40702],{"class":117,"line":1628},[115,40697,34012],{"class":5217},[115,40699,171],{"class":121},[115,40701,31477],{"class":174},[115,40703,132],{"class":125},[115,40705,40706,40708,40710,40712,40714,40716],{"class":117,"line":1642},[115,40707,34023],{"class":125},[115,40709,171],{"class":121},[115,40711,31535],{"class":125},[115,40713,31538],{"class":5217},[115,40715,171],{"class":121},[115,40717,34034],{"class":125},[115,40719,40720],{"class":117,"line":1647},[115,40721,34039],{"class":184},[115,40723,40724,40726,40728,40730],{"class":117,"line":1653},[115,40725,34044],{"class":5217},[115,40727,171],{"class":121},[115,40729,343],{"class":174},[115,40731,31467],{"class":125},[115,40733,40734,40736,40738,40740],{"class":117,"line":1674},[115,40735,34055],{"class":5217},[115,40737,171],{"class":121},[115,40739,31477],{"class":174},[115,40741,31467],{"class":125},[115,40743,40744,40746,40748,40750],{"class":117,"line":1679},[115,40745,34066],{"class":5217},[115,40747,171],{"class":121},[115,40749,317],{"class":174},[115,40751,132],{"class":125},[115,40753,40754,40756],{"class":117,"line":1693},[115,40755,4090],{"class":121},[115,40757,34079],{"class":125},[115,40759,40760],{"class":117,"line":1698},[115,40761,2400],{"emptyLinePlaceholder":42},[115,40763,40764],{"class":117,"line":1727},[115,40765,34088],{"class":184},[115,40767,40768,40770,40772],{"class":117,"line":1732},[115,40769,31948],{"class":121},[115,40771,34095],{"class":1963},[115,40773,34098],{"class":125},[115,40775,40776],{"class":117,"line":1749},[115,40777,34103],{"class":184},[115,40779,40780,40782,40784,40786,40788,40790,40792],{"class":117,"line":1754},[115,40781,31238],{"class":125},[115,40783,171],{"class":121},[115,40785,31245],{"class":230},[115,40787,1704],{"class":121},[115,40789,31250],{"class":125},[115,40791,1701],{"class":121},[115,40793,34120],{"class":230},[115,40795,40796,40798,40800],{"class":117,"line":1759},[115,40797,31290],{"class":125},[115,40799,171],{"class":121},[115,40801,32290],{"class":125},[115,40803,40804],{"class":117,"line":1764},[115,40805,2400],{"emptyLinePlaceholder":42},[115,40807,40808],{"class":117,"line":1778},[115,40809,34137],{"class":184},[115,40811,40812,40814,40816],{"class":117,"line":1783},[115,40813,34142],{"class":125},[115,40815,171],{"class":121},[115,40817,32343],{"class":174},[115,40819,40820,40822,40824],{"class":117,"line":2577},[115,40821,34151],{"class":125},[115,40823,171],{"class":121},[115,40825,3085],{"class":174},[115,40827,40828],{"class":117,"line":2591},[115,40829,2400],{"emptyLinePlaceholder":42},[115,40831,40832],{"class":117,"line":2599},[115,40833,34164],{"class":184},[115,40835,40836],{"class":117,"line":2604},[115,40837,34169],{"class":184},[115,40839,40840],{"class":117,"line":2610},[115,40841,34174],{"class":184},[115,40843,40844,40846],{"class":117,"line":2616},[115,40845,34179],{"class":121},[115,40847,32885],{"class":125},[115,40849,40850],{"class":117,"line":2621},[115,40851,34186],{"class":184},[115,40853,40854,40856,40858,40860],{"class":117,"line":7949},[115,40855,3403],{"class":121},[115,40857,34193],{"class":125},[115,40859,26044],{"class":121},[115,40861,34198],{"class":125},[115,40863,40864,40866,40868],{"class":117,"line":7973},[115,40865,34203],{"class":125},[115,40867,171],{"class":121},[115,40869,34208],{"class":125},[115,40871,40872,40874,40876],{"class":117,"line":7978},[115,40873,34213],{"class":125},[115,40875,171],{"class":121},[115,40877,34218],{"class":125},[115,40879,40880],{"class":117,"line":7984},[115,40881,34223],{"class":184},[115,40883,40884],{"class":117,"line":8011},[115,40885,32876],{"class":125},[115,40887,40888],{"class":117,"line":8016},[115,40889,34232],{"class":184},[115,40891,40892,40894,40896],{"class":117,"line":8022},[115,40893,32661],{"class":125},[115,40895,171],{"class":121},[115,40897,34241],{"class":125},[115,40899,40900],{"class":117,"line":8034},[115,40901,34246],{"class":184},[115,40903,40904,40906,40908,40910,40912,40914,40916],{"class":117,"line":8046},[115,40905,32678],{"class":125},[115,40907,171],{"class":121},[115,40909,32683],{"class":125},[115,40911,32686],{"class":5217},[115,40913,171],{"class":121},[115,40915,343],{"class":174},[115,40917,132],{"class":125},[115,40919,40920],{"class":117,"line":8058},[115,40921,34267],{"class":184},[115,40923,40924],{"class":117,"line":9717},[115,40925,34272],{"class":184},[115,40927,40928],{"class":117,"line":9742},[115,40929,34277],{"class":184},[115,40931,40932,40934,40936,40938,40940],{"class":117,"line":9765},[115,40933,34282],{"class":125},[115,40935,9478],{"class":121},[115,40937,32788],{"class":125},[115,40939,2949],{"class":121},[115,40941,34291],{"class":125},[115,40943,40944],{"class":117,"line":9789},[115,40945,34296],{"class":184},[115,40947,40948,40950,40952,40954,40956],{"class":117,"line":9794},[115,40949,34301],{"class":125},[115,40951,9478],{"class":121},[115,40953,34306],{"class":125},[115,40955,317],{"class":174},[115,40957,132],{"class":125},[115,40959,40960],{"class":117,"line":9799},[115,40961,2400],{"emptyLinePlaceholder":42},[115,40963,40964],{"class":117,"line":9804},[115,40965,34319],{"class":184},[115,40967,40968,40970,40972,40974,40976],{"class":117,"line":9813},[115,40969,34324],{"class":125},[115,40971,171],{"class":121},[115,40973,34329],{"class":125},[115,40975,709],{"class":121},[115,40977,34334],{"class":125},[115,40979,40980],{"class":117,"line":9818},[115,40981,34339],{"class":184},[115,40983,40984,40986,40988,40990],{"class":117,"line":9824},[115,40985,32452],{"class":174},[115,40987,126],{"class":125},[115,40989,34348],{"class":230},[115,40991,34351],{"class":125},[115,40993,40994],{"class":117,"line":9845},[115,40995,2400],{"emptyLinePlaceholder":42},[115,40997,40998],{"class":117,"line":9851},[115,40999,34360],{"class":184},[115,41001,41002,41004,41006,41008,41010],{"class":117,"line":9865},[115,41003,1531],{"class":121},[115,41005,31221],{"class":174},[115,41007,2949],{"class":121},[115,41009,31226],{"class":230},[115,41011,3739],{"class":125},[115,41013,41014],{"class":117,"line":9871},[115,41015,34377],{"class":184},[115,41017,41018,41020,41022],{"class":117,"line":9898},[115,41019,31290],{"class":125},[115,41021,171],{"class":121},[115,41023,41024],{"class":125},"VGG16()\n",[115,41026,41027],{"class":117,"line":9907},[115,41028,34390],{"class":184},[115,41030,41031],{"class":117,"line":9913},[115,41032,34395],{"class":184},[115,41034,41035,41037,41039],{"class":117,"line":9921},[115,41036,34400],{"class":125},[115,41038,34403],{"class":230},[115,41040,30498],{"class":125},[115,41042,41043],{"class":117,"line":9926},[115,41044,34410],{"class":184},[115,41046,41047,41049,41051],{"class":117,"line":16605},[115,41048,34023],{"class":125},[115,41050,171],{"class":121},[115,41052,34419],{"class":125},[115,41054,41055],{"class":117,"line":16611},[115,41056,34424],{"class":184},[115,41058,41059],{"class":117,"line":16634},[115,41060,34429],{"class":125},[115,41062,41063],{"class":117,"line":16640},[115,41064,2400],{"emptyLinePlaceholder":42},[115,41066,41067],{"class":117,"line":16663},[115,41068,34438],{"class":184},[115,41070,41071],{"class":117,"line":16677},[115,41072,34443],{"class":184},[115,41074,41075,41077,41079,41081,41083,41085,41087],{"class":117,"line":16697},[115,41076,31238],{"class":125},[115,41078,171],{"class":121},[115,41080,31245],{"class":230},[115,41082,1704],{"class":121},[115,41084,31250],{"class":125},[115,41086,1701],{"class":121},[115,41088,34120],{"class":230},[115,41090,41091,41093,41095],{"class":117,"line":16703},[115,41092,31290],{"class":125},[115,41094,171],{"class":121},[115,41096,32290],{"class":125},[115,41098,41099],{"class":117,"line":16714},[115,41100,34472],{"class":184},[115,41102,41103],{"class":117,"line":16737},[115,41104,34477],{"class":184},[115,41106,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151],{"class":117,"line":16759},[115,41108,34482],{"class":125},[115,41110,171],{"class":121},[115,41112,1015],{"class":125},[115,41114,34489],{"class":230},[115,41116,503],{"class":125},[115,41118,34494],{"class":230},[115,41120,503],{"class":125},[115,41122,34499],{"class":230},[115,41124,503],{"class":125},[115,41126,34504],{"class":230},[115,41128,503],{"class":125},[115,41130,34509],{"class":230},[115,41132,503],{"class":125},[115,41134,34514],{"class":230},[115,41136,503],{"class":125},[115,41138,34519],{"class":230},[115,41140,503],{"class":125},[115,41142,34524],{"class":230},[115,41144,503],{"class":125},[115,41146,34529],{"class":230},[115,41148,503],{"class":125},[115,41150,34534],{"class":230},[115,41152,33247],{"class":125},[115,41154,41155,41157],{"class":117,"line":16764},[115,41156,34179],{"class":121},[115,41158,32885],{"class":125},[115,41160,41161],{"class":117,"line":16770},[115,41162,34547],{"class":184},[115,41164,41165,41167,41169,41171],{"class":117,"line":16784},[115,41166,3403],{"class":121},[115,41168,34554],{"class":125},[115,41170,26044],{"class":121},[115,41172,34198],{"class":125},[115,41174,41175,41177,41179],{"class":117,"line":16797},[115,41176,32611],{"class":125},[115,41178,171],{"class":121},[115,41180,32616],{"class":125},[115,41182,41183,41185,41187],{"class":117,"line":16802},[115,41184,32626],{"class":125},[115,41186,171],{"class":121},[115,41188,32631],{"class":125},[115,41190,41191],{"class":117,"line":16816},[115,41192,2400],{"emptyLinePlaceholder":42},[115,41194,41195],{"class":117,"line":16821},[115,41196,34583],{"class":184},[115,41198,41199],{"class":117,"line":16827},[115,41200,32876],{"class":125},[115,41202,41203],{"class":117,"line":16832},[115,41204,34592],{"class":184},[115,41206,41207,41209,41211],{"class":117,"line":16846},[115,41208,32661],{"class":125},[115,41210,171],{"class":121},[115,41212,32666],{"class":125},[115,41214,41215],{"class":117,"line":16851},[115,41216,34605],{"class":184},[115,41218,41219,41221,41223,41225,41227,41229,41231],{"class":117,"line":16856},[115,41220,32678],{"class":125},[115,41222,171],{"class":121},[115,41224,32683],{"class":125},[115,41226,32686],{"class":5217},[115,41228,171],{"class":121},[115,41230,343],{"class":174},[115,41232,132],{"class":125},[115,41234,41235],{"class":117,"line":16870},[115,41236,34626],{"class":184},[115,41238,41239,41241,41243],{"class":117,"line":16882},[115,41240,34631],{"class":125},[115,41242,171],{"class":121},[115,41244,34636],{"class":125},[115,41246,41247,41249,41251],{"class":117,"line":16887},[115,41248,34641],{"class":125},[115,41250,171],{"class":121},[115,41252,34646],{"class":125},[115,41254,41255,41257,41259,41261,41263,41265,41267,41269],{"class":117,"line":16900},[115,41256,34651],{"class":174},[115,41258,126],{"class":125},[115,41260,34656],{"class":230},[115,41262,34659],{"class":125},[115,41264,34662],{"class":230},[115,41266,503],{"class":125},[115,41268,34667],{"class":230},[115,41270,34670],{"class":125},[86,41272,41274],{"id":41273},"_23googlenet","2.3.GoogLeNet",[21999,41276,41278],{"id":41277},"_231原理","2.3.1.原理",[69,41280,41281],{},[72,41282,41283],{},"网络结构",[14,41285,41286],{},[20,41287],{"alt":22,"src":41288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41290,41291],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41293,41294],{},[20,41295],{"alt":22,"src":41296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41298,41299],{},[20,41300],{"alt":22,"src":41301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41303,41304],{},[20,41305],{"alt":22,"src":41306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[69,41308,41309],{"start":37},[72,41310,41311],{},"1x1卷积的优点",[14,41313,41314],{},[20,41315],{"alt":22,"src":41316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[69,41318,41319],{"start":1180},[72,41320,41321],{},"全局平均池化层优点",[14,41323,41324],{},[20,41325],{"alt":22,"src":41326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41328,41329],{},[20,41330],{"alt":22,"src":41331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[69,41333,41334],{"start":1195},[72,41335,41336],{},"参数详细描述",[14,41338,41339],{},[20,41340],{"alt":22,"src":41341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41343,41344],{},[20,41345],{"alt":22,"src":41346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41348,41349],{},[20,41350],{"alt":22,"src":41351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41353,41354],{},[20,41355],{"alt":22,"src":41356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41358,41359],{},[20,41360],{"alt":22,"src":41361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41363,41364],{},[20,41365],{"alt":22,"src":41366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41368,41369],{},[20,41370],{"alt":22,"src":41371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41373,41374],{},[20,41375],{"alt":22,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41378,41379],{},[20,41380],{"alt":22,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41383,41384],{},[20,41385],{"alt":22,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41388,41389],{},[20,41390],{"alt":22,"src":41391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41393,41394],{},[20,41395],{"alt":22,"src":41396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41398,41399],{},[20,41400],{"alt":22,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41403,41404],{},[20,41405],{"alt":22,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41408,41409],{},[20,41410],{"alt":22,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41413,41414],{},[20,41415],{"alt":22,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41418,41419],{},[20,41420],{"alt":22,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41423,41424],{},[20,41425],{"alt":22,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41428,41429],{},[20,41430],{"alt":22,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41433,41434],{},[20,41435],{"alt":22,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41438,41439],{},[20,41440],{"alt":22,"src":41441},"\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",[21999,41443,41445],{"id":41444},"_232代码实现","2.3.2.代码实现",[69,41447,41448],{},[72,41449,30712],{},[14,41451,41452],{},"根据原理一步一步搭建即可",[106,41454,41456],{"className":30379,"code":41455,"language":30381,"meta":22,"style":22},"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",[112,41457,41458,41464,41474,41484,41488,41505,41514,41529,41539,41544,41577,41582,41619,41666,41671,41707,41754,41759,41764,41799,41831,41835,41843,41859,41883,41908,41929,41934,41949,41953,41957,41962,41979,41984,41993,42008,42019,42063,42067,42095,42099,42110,42138,42142,42179,42183,42211,42215,42226,42262,42294,42322,42326,42337,42371,42403,42435,42468,42502,42530,42534,42545,42578,42610,42624,42628,42641,42645,42650,42662,42670,42692,42697,42702,42707,42712,42717,42722,42736,42744,42753,42766,42781,42790,42794,42802,42813,42824,42835,42846,42857,42863,42867,42872,42884,42904,42913],{"__ignoreMap":22},[115,41459,41460,41462],{"class":117,"line":118},[115,41461,30393],{"class":121},[115,41463,30396],{"class":125},[115,41465,41466,41468,41470,41472],{"class":117,"line":37},[115,41467,30738],{"class":121},[115,41469,30741],{"class":125},[115,41471,30393],{"class":121},[115,41473,30746],{"class":125},[115,41475,41476,41478,41480,41482],{"class":117,"line":1180},[115,41477,30738],{"class":121},[115,41479,30758],{"class":125},[115,41481,30393],{"class":121},[115,41483,30763],{"class":125},[115,41485,41486],{"class":117,"line":1195},[115,41487,2400],{"emptyLinePlaceholder":42},[115,41489,41490,41492,41495,41497,41499,41501,41503],{"class":117,"line":1201},[115,41491,14695],{"class":121},[115,41493,41494],{"class":1963}," Inception",[115,41496,126],{"class":125},[115,41498,30779],{"class":1963},[115,41500,683],{"class":125},[115,41502,30784],{"class":1963},[115,41504,30787],{"class":125},[115,41506,41507,41509,41511],{"class":117,"line":1215},[115,41508,30802],{"class":121},[115,41510,30805],{"class":174},[115,41512,41513],{"class":125},"(self,in_channels,c1,c2,c3,c4):\n",[115,41515,41516,41518,41521,41523,41525,41527],{"class":117,"line":1221},[115,41517,30818],{"class":174},[115,41519,41520],{"class":125},"(Inception,",[115,41522,30824],{"class":174},[115,41524,30827],{"class":125},[115,41526,30830],{"class":174},[115,41528,1976],{"class":125},[115,41530,41531,41533,41535,41537],{"class":117,"line":1312},[115,41532,30846],{"class":174},[115,41534,34772],{"class":125},[115,41536,171],{"class":121},[115,41538,34777],{"class":125},[115,41540,41541],{"class":117,"line":1318},[115,41542,41543],{"class":184},"        # 路线1：定义1*1卷积\n",[115,41545,41546,41548,41551,41553,41555,41557,41559,41562,41564,41566,41569,41571,41573,41575],{"class":117,"line":1330},[115,41547,30846],{"class":174},[115,41549,41550],{"class":125},".p1_1",[115,41552,171],{"class":121},[115,41554,30854],{"class":125},[115,41556,30857],{"class":5217},[115,41558,171],{"class":121},[115,41560,41561],{"class":125},"in_channels,",[115,41563,30866],{"class":5217},[115,41565,171],{"class":121},[115,41567,41568],{"class":125},"c1,",[115,41570,30875],{"class":5217},[115,41572,171],{"class":121},[115,41574,343],{"class":174},[115,41576,132],{"class":125},[115,41578,41579],{"class":117,"line":1612},[115,41580,41581],{"class":184},"        # 路线2：定义1*1卷积和3*3\n",[115,41583,41584,41586,41589,41591,41593,41595,41597,41599,41601,41603,41606,41608,41611,41613,41615,41617],{"class":117,"line":1617},[115,41585,30846],{"class":174},[115,41587,41588],{"class":125},".p2_1",[115,41590,171],{"class":121},[115,41592,30854],{"class":125},[115,41594,30857],{"class":5217},[115,41596,171],{"class":121},[115,41598,41561],{"class":125},[115,41600,30866],{"class":5217},[115,41602,171],{"class":121},[115,41604,41605],{"class":125},"c2[",[115,41607,317],{"class":174},[115,41609,41610],{"class":125},"],",[115,41612,30875],{"class":5217},[115,41614,171],{"class":121},[115,41616,343],{"class":174},[115,41618,132],{"class":125},[115,41620,41621,41623,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664],{"class":117,"line":1623},[115,41622,30846],{"class":174},[115,41624,41625],{"class":125},".p2_2",[115,41627,171],{"class":121},[115,41629,30854],{"class":125},[115,41631,30857],{"class":5217},[115,41633,171],{"class":121},[115,41635,41605],{"class":125},[115,41637,317],{"class":174},[115,41639,41610],{"class":125},[115,41641,30866],{"class":5217},[115,41643,171],{"class":121},[115,41645,41605],{"class":125},[115,41647,343],{"class":174},[115,41649,41610],{"class":125},[115,41651,30875],{"class":5217},[115,41653,171],{"class":121},[115,41655,197],{"class":174},[115,41657,503],{"class":125},[115,41659,30884],{"class":5217},[115,41661,171],{"class":121},[115,41663,343],{"class":174},[115,41665,132],{"class":125},[115,41667,41668],{"class":117,"line":1628},[115,41669,41670],{"class":184},"        # 路线3：定义1*1卷积和5*5\n",[115,41672,41673,41675,41678,41680,41682,41684,41686,41688,41690,41692,41695,41697,41699,41701,41703,41705],{"class":117,"line":1642},[115,41674,30846],{"class":174},[115,41676,41677],{"class":125},".p3_1",[115,41679,171],{"class":121},[115,41681,30854],{"class":125},[115,41683,30857],{"class":5217},[115,41685,171],{"class":121},[115,41687,41561],{"class":125},[115,41689,30866],{"class":5217},[115,41691,171],{"class":121},[115,41693,41694],{"class":125},"c3[",[115,41696,317],{"class":174},[115,41698,41610],{"class":125},[115,41700,30875],{"class":5217},[115,41702,171],{"class":121},[115,41704,343],{"class":174},[115,41706,132],{"class":125},[115,41708,41709,41711,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752],{"class":117,"line":1647},[115,41710,30846],{"class":174},[115,41712,41713],{"class":125},".p3_2",[115,41715,171],{"class":121},[115,41717,30854],{"class":125},[115,41719,30857],{"class":5217},[115,41721,171],{"class":121},[115,41723,41694],{"class":125},[115,41725,317],{"class":174},[115,41727,41610],{"class":125},[115,41729,30866],{"class":5217},[115,41731,171],{"class":121},[115,41733,41694],{"class":125},[115,41735,343],{"class":174},[115,41737,41610],{"class":125},[115,41739,30875],{"class":5217},[115,41741,171],{"class":121},[115,41743,444],{"class":174},[115,41745,503],{"class":125},[115,41747,30884],{"class":5217},[115,41749,171],{"class":121},[115,41751,203],{"class":174},[115,41753,132],{"class":125},[115,41755,41756],{"class":117,"line":1653},[115,41757,41758],{"class":184},"        # 路线4：定义3*3最大池化和1*1卷积\n",[115,41760,41761],{"class":117,"line":1674},[115,41762,41763],{"class":184},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[115,41765,41766,41768,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797],{"class":117,"line":1679},[115,41767,30846],{"class":174},[115,41769,41770],{"class":125},".p4_1",[115,41772,171],{"class":121},[115,41774,34830],{"class":125},[115,41776,30875],{"class":5217},[115,41778,171],{"class":121},[115,41780,197],{"class":174},[115,41782,503],{"class":125},[115,41784,30930],{"class":5217},[115,41786,171],{"class":121},[115,41788,343],{"class":174},[115,41790,503],{"class":125},[115,41792,30884],{"class":5217},[115,41794,171],{"class":121},[115,41796,343],{"class":174},[115,41798,132],{"class":125},[115,41800,41801,41803,41806,41808,41810,41812,41814,41816,41818,41820,41823,41825,41827,41829],{"class":117,"line":1693},[115,41802,30846],{"class":174},[115,41804,41805],{"class":125},".p4_2",[115,41807,171],{"class":121},[115,41809,30854],{"class":125},[115,41811,30857],{"class":5217},[115,41813,171],{"class":121},[115,41815,41561],{"class":125},[115,41817,30866],{"class":5217},[115,41819,171],{"class":121},[115,41821,41822],{"class":125},"c4,",[115,41824,30875],{"class":5217},[115,41826,171],{"class":121},[115,41828,343],{"class":174},[115,41830,132],{"class":125},[115,41832,41833],{"class":117,"line":1698},[115,41834,2400],{"emptyLinePlaceholder":42},[115,41836,41837,41839,41841],{"class":117,"line":1727},[115,41838,30802],{"class":121},[115,41840,31094],{"class":1963},[115,41842,31097],{"class":125},[115,41844,41845,41848,41850,41852,41854,41856],{"class":117,"line":1732},[115,41846,41847],{"class":125},"        p1",[115,41849,171],{"class":121},[115,41851,30824],{"class":174},[115,41853,35185],{"class":125},[115,41855,30824],{"class":174},[115,41857,41858],{"class":125},".p1_1(x))\n",[115,41860,41861,41863,41865,41867,41869,41871,41874,41876,41878,41880],{"class":117,"line":1749},[115,41862,7086],{"class":125},[115,41864,171],{"class":121},[115,41866,30824],{"class":174},[115,41868,35185],{"class":125},[115,41870,30824],{"class":174},[115,41872,41873],{"class":125},".p2_2(",[115,41875,30824],{"class":174},[115,41877,35185],{"class":125},[115,41879,30824],{"class":174},[115,41881,41882],{"class":125},".p2_1(x))))\n",[115,41884,41885,41888,41890,41892,41894,41896,41899,41901,41903,41905],{"class":117,"line":1754},[115,41886,41887],{"class":125},"        p3",[115,41889,171],{"class":121},[115,41891,30824],{"class":174},[115,41893,35185],{"class":125},[115,41895,30824],{"class":174},[115,41897,41898],{"class":125},".p3_2(",[115,41900,30824],{"class":174},[115,41902,35185],{"class":125},[115,41904,30824],{"class":174},[115,41906,41907],{"class":125},".p3_1(x))))\n",[115,41909,41910,41913,41915,41917,41919,41921,41924,41926],{"class":117,"line":1759},[115,41911,41912],{"class":125},"        p4",[115,41914,171],{"class":121},[115,41916,30824],{"class":174},[115,41918,35185],{"class":125},[115,41920,30824],{"class":174},[115,41922,41923],{"class":125},".p4_2(",[115,41925,30824],{"class":174},[115,41927,41928],{"class":125},".p4_1(x)))\n",[115,41930,41931],{"class":117,"line":1764},[115,41932,41933],{"class":184},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[115,41935,41936,41938,41941,41943,41945,41947],{"class":117,"line":1778},[115,41937,14753],{"class":121},[115,41939,41940],{"class":125}," torch.cat((p1,p2,p3,p4),",[115,41942,32686],{"class":5217},[115,41944,171],{"class":121},[115,41946,343],{"class":174},[115,41948,132],{"class":125},[115,41950,41951],{"class":117,"line":1783},[115,41952,2400],{"emptyLinePlaceholder":42},[115,41954,41955],{"class":117,"line":2577},[115,41956,2400],{"emptyLinePlaceholder":42},[115,41958,41959],{"class":117,"line":2591},[115,41960,41961],{"class":184},"# 搭建GoogLeNet网络\n",[115,41963,41964,41966,41969,41971,41973,41975,41977],{"class":117,"line":2599},[115,41965,14695],{"class":121},[115,41967,41968],{"class":1963}," GoogLeNet",[115,41970,126],{"class":125},[115,41972,30779],{"class":1963},[115,41974,683],{"class":125},[115,41976,30784],{"class":1963},[115,41978,30787],{"class":125},[115,41980,41981],{"class":117,"line":2604},[115,41982,41983],{"class":184},"    # 必须把Inception导入到里边\n",[115,41985,41986,41988,41990],{"class":117,"line":2610},[115,41987,30802],{"class":121},[115,41989,30805],{"class":174},[115,41991,41992],{"class":125},"(self,Inception):\n",[115,41994,41995,41997,42000,42002,42004,42006],{"class":117,"line":2616},[115,41996,30818],{"class":174},[115,41998,41999],{"class":125},"(GoogLeNet,",[115,42001,30824],{"class":174},[115,42003,30827],{"class":125},[115,42005,30830],{"class":174},[115,42007,1976],{"class":125},[115,42009,42010,42012,42015,42017],{"class":117,"line":2621},[115,42011,30846],{"class":174},[115,42013,42014],{"class":125},".b1",[115,42016,171],{"class":121},[115,42018,38010],{"class":125},[115,42020,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061],{"class":117,"line":7949},[115,42022,38015],{"class":125},[115,42024,30857],{"class":5217},[115,42026,171],{"class":121},[115,42028,343],{"class":174},[115,42030,503],{"class":125},[115,42032,30866],{"class":5217},[115,42034,171],{"class":121},[115,42036,329],{"class":174},[115,42038,503],{"class":125},[115,42040,30875],{"class":5217},[115,42042,171],{"class":121},[115,42044,494],{"class":174},[115,42046,503],{"class":125},[115,42048,30930],{"class":5217},[115,42050,171],{"class":121},[115,42052,203],{"class":174},[115,42054,503],{"class":125},[115,42056,30884],{"class":5217},[115,42058,171],{"class":121},[115,42060,197],{"class":174},[115,42062,38048],{"class":125},[115,42064,42065],{"class":117,"line":7973},[115,42066,38053],{"class":125},[115,42068,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093],{"class":117,"line":7978},[115,42070,38098],{"class":125},[115,42072,30875],{"class":5217},[115,42074,171],{"class":121},[115,42076,197],{"class":174},[115,42078,503],{"class":125},[115,42080,30930],{"class":5217},[115,42082,171],{"class":121},[115,42084,203],{"class":174},[115,42086,503],{"class":125},[115,42088,30884],{"class":5217},[115,42090,171],{"class":121},[115,42092,343],{"class":174},[115,42094,132],{"class":125},[115,42096,42097],{"class":117,"line":7984},[115,42098,38127],{"class":125},[115,42100,42101,42103,42106,42108],{"class":117,"line":8011},[115,42102,30846],{"class":174},[115,42104,42105],{"class":125},".b2",[115,42107,171],{"class":121},[115,42109,38010],{"class":125},[115,42111,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136],{"class":117,"line":8016},[115,42113,38015],{"class":125},[115,42115,30857],{"class":5217},[115,42117,171],{"class":121},[115,42119,329],{"class":174},[115,42121,503],{"class":125},[115,42123,30866],{"class":5217},[115,42125,171],{"class":121},[115,42127,329],{"class":174},[115,42129,503],{"class":125},[115,42131,30875],{"class":5217},[115,42133,171],{"class":121},[115,42135,343],{"class":174},[115,42137,38048],{"class":125},[115,42139,42140],{"class":117,"line":8022},[115,42141,38053],{"class":125},[115,42143,42144,42146,42148,42150,42152,42154,42156,42158,42161,42163,42165,42167,42169,42171,42173,42175,42177],{"class":117,"line":8034},[115,42145,38015],{"class":125},[115,42147,30857],{"class":5217},[115,42149,171],{"class":121},[115,42151,329],{"class":174},[115,42153,503],{"class":125},[115,42155,30866],{"class":5217},[115,42157,171],{"class":121},[115,42159,42160],{"class":174},"192",[115,42162,503],{"class":125},[115,42164,30875],{"class":5217},[115,42166,171],{"class":121},[115,42168,197],{"class":174},[115,42170,503],{"class":125},[115,42172,30884],{"class":5217},[115,42174,171],{"class":121},[115,42176,343],{"class":174},[115,42178,38048],{"class":125},[115,42180,42181],{"class":117,"line":8046},[115,42182,38053],{"class":125},[115,42184,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209],{"class":117,"line":8058},[115,42186,38098],{"class":125},[115,42188,30875],{"class":5217},[115,42190,171],{"class":121},[115,42192,197],{"class":174},[115,42194,503],{"class":125},[115,42196,30930],{"class":5217},[115,42198,171],{"class":121},[115,42200,203],{"class":174},[115,42202,503],{"class":125},[115,42204,30884],{"class":5217},[115,42206,171],{"class":121},[115,42208,343],{"class":174},[115,42210,132],{"class":125},[115,42212,42213],{"class":117,"line":9717},[115,42214,38127],{"class":125},[115,42216,42217,42219,42222,42224],{"class":117,"line":9742},[115,42218,30846],{"class":174},[115,42220,42221],{"class":125},".b3",[115,42223,171],{"class":121},[115,42225,38010],{"class":125},[115,42227,42228,42231,42233,42235,42237,42240,42242,42244,42246,42249,42251,42253,42255,42258,42260],{"class":117,"line":9765},[115,42229,42230],{"class":125},"            Inception(",[115,42232,42160],{"class":174},[115,42234,503],{"class":125},[115,42236,329],{"class":174},[115,42238,42239],{"class":125},",(",[115,42241,335],{"class":174},[115,42243,503],{"class":125},[115,42245,32071],{"class":174},[115,42247,42248],{"class":125},"),(",[115,42250,726],{"class":174},[115,42252,503],{"class":125},[115,42254,323],{"class":174},[115,42256,42257],{"class":125},"),",[115,42259,323],{"class":174},[115,42261,38048],{"class":125},[115,42263,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292],{"class":117,"line":9789},[115,42265,42230],{"class":125},[115,42267,34871],{"class":174},[115,42269,503],{"class":125},[115,42271,32071],{"class":174},[115,42273,42239],{"class":125},[115,42275,32071],{"class":174},[115,42277,503],{"class":125},[115,42279,42160],{"class":174},[115,42281,42248],{"class":125},[115,42283,323],{"class":174},[115,42285,503],{"class":125},[115,42287,335],{"class":174},[115,42289,42257],{"class":125},[115,42291,329],{"class":174},[115,42293,38048],{"class":125},[115,42295,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320],{"class":117,"line":9794},[115,42297,38098],{"class":125},[115,42299,30875],{"class":5217},[115,42301,171],{"class":121},[115,42303,197],{"class":174},[115,42305,503],{"class":125},[115,42307,30930],{"class":5217},[115,42309,171],{"class":121},[115,42311,203],{"class":174},[115,42313,503],{"class":125},[115,42315,30884],{"class":5217},[115,42317,171],{"class":121},[115,42319,343],{"class":174},[115,42321,132],{"class":125},[115,42323,42324],{"class":117,"line":9799},[115,42325,38127],{"class":125},[115,42327,42328,42330,42333,42335],{"class":117,"line":9804},[115,42329,30846],{"class":174},[115,42331,42332],{"class":125},".b4",[115,42334,171],{"class":121},[115,42336,38010],{"class":125},[115,42338,42339,42341,42344,42346,42348,42350,42352,42354,42357,42359,42361,42363,42365,42367,42369],{"class":117,"line":9813},[115,42340,42230],{"class":125},[115,42342,42343],{"class":174},"480",[115,42345,503],{"class":125},[115,42347,42160],{"class":174},[115,42349,42239],{"class":125},[115,42351,335],{"class":174},[115,42353,503],{"class":125},[115,42355,42356],{"class":174},"208",[115,42358,42248],{"class":125},[115,42360,726],{"class":174},[115,42362,503],{"class":125},[115,42364,732],{"class":174},[115,42366,42257],{"class":125},[115,42368,329],{"class":174},[115,42370,38048],{"class":125},[115,42372,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401],{"class":117,"line":9818},[115,42374,42230],{"class":125},[115,42376,38458],{"class":174},[115,42378,503],{"class":125},[115,42380,21049],{"class":174},[115,42382,42239],{"class":125},[115,42384,743],{"class":174},[115,42386,503],{"class":125},[115,42388,31502],{"class":174},[115,42390,42248],{"class":125},[115,42392,925],{"class":174},[115,42394,503],{"class":125},[115,42396,329],{"class":174},[115,42398,42257],{"class":125},[115,42400,329],{"class":174},[115,42402,38048],{"class":125},[115,42404,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429,42431,42433],{"class":117,"line":9824},[115,42406,42230],{"class":125},[115,42408,38458],{"class":174},[115,42410,503],{"class":125},[115,42412,32071],{"class":174},[115,42414,42239],{"class":125},[115,42416,32071],{"class":174},[115,42418,503],{"class":125},[115,42420,34871],{"class":174},[115,42422,42248],{"class":125},[115,42424,925],{"class":174},[115,42426,503],{"class":125},[115,42428,329],{"class":174},[115,42430,42257],{"class":125},[115,42432,329],{"class":174},[115,42434,38048],{"class":125},[115,42436,42437,42439,42441,42443,42445,42447,42449,42451,42454,42456,42458,42460,42462,42464,42466],{"class":117,"line":9845},[115,42438,42230],{"class":125},[115,42440,38458],{"class":174},[115,42442,503],{"class":125},[115,42444,743],{"class":174},[115,42446,42239],{"class":125},[115,42448,32071],{"class":174},[115,42450,503],{"class":125},[115,42452,42453],{"class":174},"288",[115,42455,42248],{"class":125},[115,42457,323],{"class":174},[115,42459,503],{"class":125},[115,42461,329],{"class":174},[115,42463,42257],{"class":125},[115,42465,329],{"class":174},[115,42467,38048],{"class":125},[115,42469,42470,42472,42475,42477,42479,42481,42483,42485,42488,42490,42492,42494,42496,42498,42500],{"class":117,"line":9851},[115,42471,42230],{"class":125},[115,42473,42474],{"class":174},"528",[115,42476,503],{"class":125},[115,42478,34871],{"class":174},[115,42480,42239],{"class":125},[115,42482,21049],{"class":174},[115,42484,503],{"class":125},[115,42486,42487],{"class":174},"320",[115,42489,42248],{"class":125},[115,42491,323],{"class":174},[115,42493,503],{"class":125},[115,42495,32071],{"class":174},[115,42497,42257],{"class":125},[115,42499,32071],{"class":174},[115,42501,38048],{"class":125},[115,42503,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528],{"class":117,"line":9865},[115,42505,38098],{"class":125},[115,42507,30875],{"class":5217},[115,42509,171],{"class":121},[115,42511,197],{"class":174},[115,42513,503],{"class":125},[115,42515,30930],{"class":5217},[115,42517,171],{"class":121},[115,42519,203],{"class":174},[115,42521,503],{"class":125},[115,42523,30884],{"class":5217},[115,42525,171],{"class":121},[115,42527,343],{"class":174},[115,42529,132],{"class":125},[115,42531,42532],{"class":117,"line":9871},[115,42533,38127],{"class":125},[115,42535,42536,42538,42541,42543],{"class":117,"line":9898},[115,42537,30846],{"class":174},[115,42539,42540],{"class":125},".b5",[115,42542,171],{"class":121},[115,42544,38010],{"class":125},[115,42546,42547,42549,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576],{"class":117,"line":9907},[115,42548,42230],{"class":125},[115,42550,42551],{"class":174},"832",[115,42553,503],{"class":125},[115,42555,34871],{"class":174},[115,42557,42239],{"class":125},[115,42559,21049],{"class":174},[115,42561,503],{"class":125},[115,42563,42487],{"class":174},[115,42565,42248],{"class":125},[115,42567,323],{"class":174},[115,42569,503],{"class":125},[115,42571,32071],{"class":174},[115,42573,42257],{"class":125},[115,42575,32071],{"class":174},[115,42577,38048],{"class":125},[115,42579,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608],{"class":117,"line":9913},[115,42581,42230],{"class":125},[115,42583,42551],{"class":174},[115,42585,503],{"class":125},[115,42587,34941],{"class":174},[115,42589,42239],{"class":125},[115,42591,42160],{"class":174},[115,42593,503],{"class":125},[115,42595,34941],{"class":174},[115,42597,42248],{"class":125},[115,42599,732],{"class":174},[115,42601,503],{"class":125},[115,42603,32071],{"class":174},[115,42605,42257],{"class":125},[115,42607,32071],{"class":174},[115,42609,38048],{"class":125},[115,42611,42612,42615,42617,42619,42621],{"class":117,"line":9921},[115,42613,42614],{"class":125},"            nn.AdaptiveAvgPool2d((",[115,42616,343],{"class":174},[115,42618,503],{"class":125},[115,42620,343],{"class":174},[115,42622,42623],{"class":125},")),\n",[115,42625,42626],{"class":117,"line":9926},[115,42627,38791],{"class":125},[115,42629,42630,42632,42635,42637,42639],{"class":117,"line":16605},[115,42631,38796],{"class":125},[115,42633,42634],{"class":174},"1024",[115,42636,503],{"class":125},[115,42638,571],{"class":174},[115,42640,132],{"class":125},[115,42642,42643],{"class":117,"line":16611},[115,42644,38127],{"class":125},[115,42646,42647],{"class":117,"line":16634},[115,42648,42649],{"class":184},"        # 对模型参数初始化\n",[115,42651,42652,42654,42656,42658,42660],{"class":117,"line":16640},[115,42653,3403],{"class":121},[115,42655,38869],{"class":125},[115,42657,26044],{"class":121},[115,42659,38874],{"class":174},[115,42661,38877],{"class":125},[115,42663,42664,42666,42668],{"class":117,"line":16663},[115,42665,4642],{"class":121},[115,42667,38889],{"class":174},[115,42669,38892],{"class":125},[115,42671,42672,42674,42677,42679,42682,42684,42686,42688,42690],{"class":117,"line":16677},[115,42673,38902],{"class":125},[115,42675,42676],{"class":5217},"mode",[115,42678,171],{"class":121},[115,42680,42681],{"class":230},"'fan_out'",[115,42683,503],{"class":125},[115,42685,38905],{"class":5217},[115,42687,171],{"class":121},[115,42689,38910],{"class":230},[115,42691,132],{"class":125},[115,42693,42694],{"class":117,"line":16697},[115,42695,42696],{"class":184},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[115,42698,42699],{"class":117,"line":16703},[115,42700,42701],{"class":184},"                # ② mode = 'fan_out'决定使用的fan值：\n",[115,42703,42704],{"class":117,"line":16714},[115,42705,42706],{"class":184},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[115,42708,42709],{"class":117,"line":16737},[115,42710,42711],{"class":184},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[115,42713,42714],{"class":117,"line":16759},[115,42715,42716],{"class":184},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[115,42718,42719],{"class":117,"line":16764},[115,42720,42721],{"class":184},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[115,42723,42724,42726,42728,42730,42732,42734],{"class":117,"line":16770},[115,42725,38922],{"class":121},[115,42727,38925],{"class":125},[115,42729,38928],{"class":121},[115,42731,38931],{"class":121},[115,42733,38934],{"class":174},[115,42735,3739],{"class":125},[115,42737,42738,42740,42742],{"class":117,"line":16784},[115,42739,38946],{"class":125},[115,42741,317],{"class":174},[115,42743,132],{"class":125},[115,42745,42746,42749,42751],{"class":117,"line":16797},[115,42747,42748],{"class":121},"                elif",[115,42750,38889],{"class":174},[115,42752,38965],{"class":125},[115,42754,42755,42758,42760,42762,42764],{"class":117,"line":16802},[115,42756,42757],{"class":125},"                    nn.init.normal_(m.weight,",[115,42759,317],{"class":174},[115,42761,503],{"class":125},[115,42763,38987],{"class":174},[115,42765,132],{"class":125},[115,42767,42768,42771,42773,42775,42777,42779],{"class":117,"line":16816},[115,42769,42770],{"class":121},"                    if",[115,42772,38925],{"class":125},[115,42774,38928],{"class":121},[115,42776,38931],{"class":121},[115,42778,38934],{"class":174},[115,42780,3739],{"class":125},[115,42782,42783,42786,42788],{"class":117,"line":16821},[115,42784,42785],{"class":125},"                        nn.init.constant_(m.bias,",[115,42787,317],{"class":174},[115,42789,132],{"class":125},[115,42791,42792],{"class":117,"line":16827},[115,42793,35166],{"class":184},[115,42795,42796,42798,42800],{"class":117,"line":16832},[115,42797,30802],{"class":121},[115,42799,31094],{"class":1963},[115,42801,31097],{"class":125},[115,42803,42804,42806,42808,42810],{"class":117,"line":16846},[115,42805,31102],{"class":125},[115,42807,171],{"class":121},[115,42809,30824],{"class":174},[115,42811,42812],{"class":125},".b1(x)\n",[115,42814,42815,42817,42819,42821],{"class":117,"line":16851},[115,42816,31102],{"class":125},[115,42818,171],{"class":121},[115,42820,30824],{"class":174},[115,42822,42823],{"class":125},".b2(x)\n",[115,42825,42826,42828,42830,42832],{"class":117,"line":16856},[115,42827,31102],{"class":125},[115,42829,171],{"class":121},[115,42831,30824],{"class":174},[115,42833,42834],{"class":125},".b3(x)\n",[115,42836,42837,42839,42841,42843],{"class":117,"line":16870},[115,42838,31102],{"class":125},[115,42840,171],{"class":121},[115,42842,30824],{"class":174},[115,42844,42845],{"class":125},".b4(x)\n",[115,42847,42848,42850,42852,42854],{"class":117,"line":16882},[115,42849,31102],{"class":125},[115,42851,171],{"class":121},[115,42853,30824],{"class":174},[115,42855,42856],{"class":125},".b5(x)\n",[115,42858,42859,42861],{"class":117,"line":16887},[115,42860,14753],{"class":121},[115,42862,31210],{"class":125},[115,42864,42865],{"class":117,"line":16900},[115,42866,2400],{"emptyLinePlaceholder":42},[115,42868,42869],{"class":117,"line":16905},[115,42870,42871],{"class":184},"# 模型展示\n",[115,42873,42874,42876,42878,42880,42882],{"class":117,"line":16910},[115,42875,1531],{"class":121},[115,42877,31221],{"class":174},[115,42879,2949],{"class":121},[115,42881,31226],{"class":230},[115,42883,3739],{"class":125},[115,42885,42886,42888,42890,42892,42894,42896,42898,42900,42902],{"class":117,"line":16915},[115,42887,31238],{"class":125},[115,42889,171],{"class":121},[115,42891,30452],{"class":125},[115,42893,31245],{"class":230},[115,42895,1704],{"class":121},[115,42897,31250],{"class":125},[115,42899,1701],{"class":121},[115,42901,30477],{"class":230},[115,42903,132],{"class":125},[115,42905,42906,42908,42910],{"class":117,"line":16928},[115,42907,31290],{"class":125},[115,42909,171],{"class":121},[115,42911,42912],{"class":125},"GoogLeNet(Inception).to(device)\n",[115,42914,42915,42917,42919,42921,42923,42925,42927,42929],{"class":117,"line":16933},[115,42916,31300],{"class":174},[115,42918,31303],{"class":125},[115,42920,343],{"class":174},[115,42922,503],{"class":125},[115,42924,31502],{"class":174},[115,42926,503],{"class":125},[115,42928,31502],{"class":174},[115,42930,31316],{"class":125},[69,42932,42933],{"start":37},[72,42934,39184],{},[106,42936,42938],{"className":30379,"code":42937,"language":30381,"meta":22,"style":22},"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",[112,42939,42940,42946,42952,42962,42968,42978,42988,42998,43008,43018,43022,43033,43043,43047,43051,43055,43063,43075,43085,43101,43111,43143,43157,43167,43177,43181,43191,43205,43215,43225,43235,43241,43245,43249,43253,43257,43261,43269,43289,43293,43297,43301,43305,43309,43325,43329,43333,43341,43345,43349,43357,43361,43365,43369,43377,43381,43385,43389,43393,43401,43405,43413,43417,43425,43429,43437,43441,43449,43453,43457,43465,43469,43473,43477,43489,43513,43527,43531,43535,43539,43547,43551,43559,43563,43571,43575,43583,43587,43595,43599,43607,43611,43623,43627,43635,43639,43647,43651,43655,43659,43663,43671,43675,43691,43695,43703,43707,43711,43715,43719,43723,43727,43731,43747,43751,43763,43767,43779,43783,43795,43799,43807,43811,43819,43823,43827,43831,43837,43841,43849,43853,43869,43873,43881,43885,43901,43913,43917,43929,43933,43937,43945,43949,43953,43961,43965,43973,43977,43985,43989,43993,44035,44077,44081,44085,44101,44105,44121,44125,44129,44137,44141,44145,44157,44195,44199,44203,44211,44215,44229,44239,44245,44251,44257,44263,44267,44271,44277,44281,44285,44293,44297,44315,44319,44323,44327,44343,44347,44351,44355,44359,44363,44383,44403,44407,44411,44415,44423,44431,44435,44451,44471,44491,44495,44499,44507,44515,44519,44523,44527,44539,44543,44553,44561,44578],{"__ignoreMap":22},[115,42941,42942,42944],{"class":117,"line":118},[115,42943,30393],{"class":121},[115,42945,31823],{"class":125},[115,42947,42948,42950],{"class":117,"line":37},[115,42949,30393],{"class":121},[115,42951,31830],{"class":125},[115,42953,42954,42956,42958,42960],{"class":117,"line":1180},[115,42955,30393],{"class":121},[115,42957,31841],{"class":125},[115,42959,31384],{"class":121},[115,42961,31846],{"class":125},[115,42963,42964,42966],{"class":117,"line":1195},[115,42965,30393],{"class":121},[115,42967,30396],{"class":125},[115,42969,42970,42972,42974,42976],{"class":117,"line":1201},[115,42971,30738],{"class":121},[115,42973,31416],{"class":125},[115,42975,30393],{"class":121},[115,42977,31863],{"class":125},[115,42979,42980,42982,42984,42986],{"class":117,"line":1215},[115,42981,30738],{"class":121},[115,42983,31369],{"class":125},[115,42985,30393],{"class":121},[115,42987,31374],{"class":125},[115,42989,42990,42992,42994,42996],{"class":117,"line":1221},[115,42991,30738],{"class":121},[115,42993,31399],{"class":125},[115,42995,30393],{"class":121},[115,42997,31404],{"class":125},[115,42999,43000,43002,43004,43006],{"class":117,"line":1312},[115,43001,30393],{"class":121},[115,43003,31416],{"class":125},[115,43005,31384],{"class":121},[115,43007,31421],{"class":125},[115,43009,43010,43012,43014,43016],{"class":117,"line":1318},[115,43011,30393],{"class":121},[115,43013,31433],{"class":125},[115,43015,31384],{"class":121},[115,43017,31438],{"class":125},[115,43019,43020],{"class":117,"line":1330},[115,43021,31908],{"class":184},[115,43023,43024,43026,43028,43030],{"class":117,"line":1612},[115,43025,30738],{"class":121},[115,43027,31915],{"class":125},[115,43029,30393],{"class":121},[115,43031,43032],{"class":125}," GoogLeNet, Inception\n",[115,43034,43035,43037,43039,43041],{"class":117,"line":1617},[115,43036,30738],{"class":121},[115,43038,30741],{"class":125},[115,43040,30393],{"class":121},[115,43042,30746],{"class":125},[115,43044,43045],{"class":117,"line":1623},[115,43046,2400],{"emptyLinePlaceholder":42},[115,43048,43049],{"class":117,"line":1628},[115,43050,2400],{"emptyLinePlaceholder":42},[115,43052,43053],{"class":117,"line":1642},[115,43054,31943],{"class":184},[115,43056,43057,43059,43061],{"class":117,"line":1647},[115,43058,31948],{"class":121},[115,43060,31951],{"class":1963},[115,43062,31954],{"class":125},[115,43064,43065,43067,43069,43071,43073],{"class":117,"line":1653},[115,43066,31959],{"class":125},[115,43068,171],{"class":121},[115,43070,31456],{"class":125},[115,43072,31464],{"class":230},[115,43074,31467],{"class":125},[115,43076,43077,43079,43081,43083],{"class":117,"line":1674},[115,43078,31972],{"class":5217},[115,43080,171],{"class":121},[115,43082,31477],{"class":174},[115,43084,31467],{"class":125},[115,43086,43087,43089,43091,43093,43095,43097,43099],{"class":117,"line":1679},[115,43088,31983],{"class":5217},[115,43090,171],{"class":121},[115,43092,31494],{"class":125},[115,43094,31497],{"class":5217},[115,43096,171],{"class":121},[115,43098,35450],{"class":174},[115,43100,31505],{"class":125},[115,43102,43103,43105,43107,43109],{"class":117,"line":1693},[115,43104,32000],{"class":5217},[115,43106,171],{"class":121},[115,43108,31477],{"class":174},[115,43110,132],{"class":125},[115,43112,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141],{"class":117,"line":1698},[115,43114,32011],{"class":125},[115,43116,171],{"class":121},[115,43118,32016],{"class":125},[115,43120,32019],{"class":174},[115,43122,126],{"class":125},[115,43124,32024],{"class":174},[115,43126,580],{"class":121},[115,43128,7359],{"class":174},[115,43130,32031],{"class":125},[115,43132,32019],{"class":174},[115,43134,126],{"class":125},[115,43136,32038],{"class":174},[115,43138,580],{"class":121},[115,43140,7359],{"class":174},[115,43142,32045],{"class":125},[115,43144,43145,43147,43149,43151,43153,43155],{"class":117,"line":1727},[115,43146,32050],{"class":125},[115,43148,171],{"class":121},[115,43150,32055],{"class":125},[115,43152,31538],{"class":5217},[115,43154,171],{"class":121},[115,43156,31543],{"class":125},[115,43158,43159,43161,43163,43165],{"class":117,"line":1732},[115,43160,32066],{"class":5217},[115,43162,171],{"class":121},[115,43164,323],{"class":174},[115,43166,31467],{"class":125},[115,43168,43169,43171,43173,43175],{"class":117,"line":1749},[115,43170,32078],{"class":5217},[115,43172,171],{"class":121},[115,43174,31477],{"class":174},[115,43176,31467],{"class":125},[115,43178,43179],{"class":117,"line":1754},[115,43180,32089],{"class":184},[115,43182,43183,43185,43187,43189],{"class":117,"line":1759},[115,43184,32094],{"class":5217},[115,43186,171],{"class":121},[115,43188,520],{"class":174},[115,43190,132],{"class":125},[115,43192,43193,43195,43197,43199,43201,43203],{"class":117,"line":1764},[115,43194,32105],{"class":125},[115,43196,171],{"class":121},[115,43198,31535],{"class":125},[115,43200,31538],{"class":5217},[115,43202,171],{"class":121},[115,43204,32116],{"class":125},[115,43206,43207,43209,43211,43213],{"class":117,"line":1778},[115,43208,32121],{"class":5217},[115,43210,171],{"class":121},[115,43212,323],{"class":174},[115,43214,31467],{"class":125},[115,43216,43217,43219,43221,43223],{"class":117,"line":1783},[115,43218,32132],{"class":5217},[115,43220,171],{"class":121},[115,43222,31477],{"class":174},[115,43224,31467],{"class":125},[115,43226,43227,43229,43231,43233],{"class":117,"line":2577},[115,43228,32143],{"class":5217},[115,43230,171],{"class":121},[115,43232,520],{"class":174},[115,43234,132],{"class":125},[115,43236,43237,43239],{"class":117,"line":2591},[115,43238,4090],{"class":121},[115,43240,32156],{"class":125},[115,43242,43243],{"class":117,"line":2599},[115,43244,2400],{"emptyLinePlaceholder":42},[115,43246,43247],{"class":117,"line":2604},[115,43248,32165],{"class":184},[115,43250,43251],{"class":117,"line":2610},[115,43252,32170],{"class":184},[115,43254,43255],{"class":117,"line":2616},[115,43256,2400],{"emptyLinePlaceholder":42},[115,43258,43259],{"class":117,"line":2621},[115,43260,32179],{"class":184},[115,43262,43263,43265,43267],{"class":117,"line":7949},[115,43264,31948],{"class":121},[115,43266,32186],{"class":1963},[115,43268,32189],{"class":125},[115,43270,43271,43273,43275,43277,43279,43281,43283,43285,43287],{"class":117,"line":7973},[115,43272,31238],{"class":125},[115,43274,171],{"class":121},[115,43276,30452],{"class":125},[115,43278,31245],{"class":230},[115,43280,1704],{"class":121},[115,43282,31250],{"class":125},[115,43284,1701],{"class":121},[115,43286,32208],{"class":230},[115,43288,132],{"class":125},[115,43290,43291],{"class":117,"line":7978},[115,43292,2400],{"emptyLinePlaceholder":42},[115,43294,43295],{"class":117,"line":7984},[115,43296,2400],{"emptyLinePlaceholder":42},[115,43298,43299],{"class":117,"line":8011},[115,43300,32223],{"class":184},[115,43302,43303],{"class":117,"line":8016},[115,43304,32228],{"class":184},[115,43306,43307],{"class":117,"line":8022},[115,43308,32233],{"class":184},[115,43310,43311,43313,43315,43317,43319,43321,43323],{"class":117,"line":8034},[115,43312,32238],{"class":125},[115,43314,171],{"class":121},[115,43316,32243],{"class":125},[115,43318,32246],{"class":5217},[115,43320,171],{"class":121},[115,43322,32251],{"class":174},[115,43324,132],{"class":125},[115,43326,43327],{"class":117,"line":8046},[115,43328,2400],{"emptyLinePlaceholder":42},[115,43330,43331],{"class":117,"line":8058},[115,43332,32262],{"class":184},[115,43334,43335,43337,43339],{"class":117,"line":9717},[115,43336,32267],{"class":125},[115,43338,171],{"class":121},[115,43340,32272],{"class":125},[115,43342,43343],{"class":117,"line":9742},[115,43344,2400],{"emptyLinePlaceholder":42},[115,43346,43347],{"class":117,"line":9765},[115,43348,32281],{"class":184},[115,43350,43351,43353,43355],{"class":117,"line":9789},[115,43352,31290],{"class":125},[115,43354,171],{"class":121},[115,43356,32290],{"class":125},[115,43358,43359],{"class":117,"line":9794},[115,43360,32295],{"class":184},[115,43362,43363],{"class":117,"line":9799},[115,43364,32300],{"class":184},[115,43366,43367],{"class":117,"line":9804},[115,43368,32305],{"class":184},[115,43370,43371,43373,43375],{"class":117,"line":9813},[115,43372,32310],{"class":125},[115,43374,171],{"class":121},[115,43376,32315],{"class":125},[115,43378,43379],{"class":117,"line":9818},[115,43380,2400],{"emptyLinePlaceholder":42},[115,43382,43383],{"class":117,"line":9824},[115,43384,2400],{"emptyLinePlaceholder":42},[115,43386,43387],{"class":117,"line":9845},[115,43388,32328],{"class":184},[115,43390,43391],{"class":117,"line":9851},[115,43392,32333],{"class":184},[115,43394,43395,43397,43399],{"class":117,"line":9865},[115,43396,32338],{"class":125},[115,43398,171],{"class":121},[115,43400,32343],{"class":174},[115,43402,43403],{"class":117,"line":9871},[115,43404,32348],{"class":184},[115,43406,43407,43409,43411],{"class":117,"line":9898},[115,43408,32353],{"class":125},[115,43410,171],{"class":121},[115,43412,32358],{"class":125},[115,43414,43415],{"class":117,"line":9907},[115,43416,32363],{"class":184},[115,43418,43419,43421,43423],{"class":117,"line":9913},[115,43420,32368],{"class":125},[115,43422,171],{"class":121},[115,43424,32358],{"class":125},[115,43426,43427],{"class":117,"line":9921},[115,43428,32377],{"class":184},[115,43430,43431,43433,43435],{"class":117,"line":9926},[115,43432,32382],{"class":125},[115,43434,171],{"class":121},[115,43436,32358],{"class":125},[115,43438,43439],{"class":117,"line":16605},[115,43440,32391],{"class":184},[115,43442,43443,43445,43447],{"class":117,"line":16611},[115,43444,32396],{"class":125},[115,43446,171],{"class":121},[115,43448,32358],{"class":125},[115,43450,43451],{"class":117,"line":16634},[115,43452,2400],{"emptyLinePlaceholder":42},[115,43454,43455],{"class":117,"line":16640},[115,43456,32409],{"class":184},[115,43458,43459,43461,43463],{"class":117,"line":16663},[115,43460,32414],{"class":125},[115,43462,171],{"class":121},[115,43464,32419],{"class":125},[115,43466,43467],{"class":117,"line":16677},[115,43468,2400],{"emptyLinePlaceholder":42},[115,43470,43471],{"class":117,"line":16697},[115,43472,2400],{"emptyLinePlaceholder":42},[115,43474,43475],{"class":117,"line":16703},[115,43476,32432],{"class":184},[115,43478,43479,43481,43483,43485,43487],{"class":117,"line":16714},[115,43480,3201],{"class":121},[115,43482,32439],{"class":125},[115,43484,26044],{"class":121},[115,43486,32444],{"class":174},[115,43488,32447],{"class":125},[115,43490,43491,43493,43495,43497,43499,43501,43503,43505,43507,43509,43511],{"class":117,"line":16737},[115,43492,32452],{"class":174},[115,43494,126],{"class":125},[115,43496,32457],{"class":230},[115,43498,32460],{"class":174},[115,43500,709],{"class":230},[115,43502,32460],{"class":174},[115,43504,376],{"class":230},[115,43506,32469],{"class":125},[115,43508,657],{"class":121},[115,43510,343],{"class":174},[115,43512,30498],{"class":125},[115,43514,43515,43517,43519,43521,43523,43525],{"class":117,"line":16759},[115,43516,32452],{"class":174},[115,43518,126],{"class":125},[115,43520,32484],{"class":230},[115,43522,580],{"class":121},[115,43524,571],{"class":174},[115,43526,132],{"class":125},[115,43528,43529],{"class":117,"line":16764},[115,43530,2400],{"emptyLinePlaceholder":42},[115,43532,43533],{"class":117,"line":16770},[115,43534,32499],{"class":184},[115,43536,43537],{"class":117,"line":16784},[115,43538,32504],{"class":184},[115,43540,43541,43543,43545],{"class":117,"line":16797},[115,43542,32509],{"class":125},[115,43544,171],{"class":121},[115,43546,32343],{"class":174},[115,43548,43549],{"class":117,"line":16802},[115,43550,32518],{"class":184},[115,43552,43553,43555,43557],{"class":117,"line":16816},[115,43554,32523],{"class":125},[115,43556,171],{"class":121},[115,43558,3085],{"class":174},[115,43560,43561],{"class":117,"line":16821},[115,43562,32532],{"class":184},[115,43564,43565,43567,43569],{"class":117,"line":16827},[115,43566,32537],{"class":125},[115,43568,171],{"class":121},[115,43570,32343],{"class":174},[115,43572,43573],{"class":117,"line":16832},[115,43574,32546],{"class":184},[115,43576,43577,43579,43581],{"class":117,"line":16846},[115,43578,32551],{"class":125},[115,43580,171],{"class":121},[115,43582,3085],{"class":174},[115,43584,43585],{"class":117,"line":16851},[115,43586,32560],{"class":184},[115,43588,43589,43591,43593],{"class":117,"line":16856},[115,43590,32565],{"class":125},[115,43592,171],{"class":121},[115,43594,3085],{"class":174},[115,43596,43597],{"class":117,"line":16870},[115,43598,32574],{"class":184},[115,43600,43601,43603,43605],{"class":117,"line":16882},[115,43602,32579],{"class":125},[115,43604,171],{"class":121},[115,43606,3085],{"class":174},[115,43608,43609],{"class":117,"line":16887},[115,43610,32588],{"class":184},[115,43612,43613,43615,43617,43619,43621],{"class":117,"line":16900},[115,43614,3403],{"class":121},[115,43616,31602],{"class":125},[115,43618,26044],{"class":121},[115,43620,31607],{"class":174},[115,43622,32601],{"class":125},[115,43624,43625],{"class":117,"line":16905},[115,43626,32606],{"class":184},[115,43628,43629,43631,43633],{"class":117,"line":16910},[115,43630,32611],{"class":125},[115,43632,171],{"class":121},[115,43634,32616],{"class":125},[115,43636,43637],{"class":117,"line":16915},[115,43638,32621],{"class":184},[115,43640,43641,43643,43645],{"class":117,"line":16928},[115,43642,32626],{"class":125},[115,43644,171],{"class":121},[115,43646,32631],{"class":125},[115,43648,43649],{"class":117,"line":16933},[115,43650,32637],{"class":184},[115,43652,43653],{"class":117,"line":32634},[115,43654,32643],{"class":125},[115,43656,43657],{"class":117,"line":32640},[115,43658,32649],{"class":184},[115,43660,43661],{"class":117,"line":32646},[115,43662,32655],{"class":184},[115,43664,43665,43667,43669],{"class":117,"line":32652},[115,43666,32661],{"class":125},[115,43668,171],{"class":121},[115,43670,32666],{"class":125},[115,43672,43673],{"class":117,"line":32658},[115,43674,32672],{"class":184},[115,43676,43677,43679,43681,43683,43685,43687,43689],{"class":117,"line":32669},[115,43678,32678],{"class":125},[115,43680,171],{"class":121},[115,43682,32683],{"class":125},[115,43684,32686],{"class":5217},[115,43686,171],{"class":121},[115,43688,343],{"class":174},[115,43690,132],{"class":125},[115,43692,43693],{"class":117,"line":32675},[115,43694,32698],{"class":184},[115,43696,43697,43699,43701],{"class":117,"line":32695},[115,43698,32704],{"class":125},[115,43700,171],{"class":121},[115,43702,32709],{"class":125},[115,43704,43705],{"class":117,"line":32701},[115,43706,32715],{"class":184},[115,43708,43709],{"class":117,"line":32712},[115,43710,32721],{"class":125},[115,43712,43713],{"class":117,"line":32718},[115,43714,32727],{"class":184},[115,43716,43717],{"class":117,"line":32724},[115,43718,32733],{"class":125},[115,43720,43721],{"class":117,"line":32730},[115,43722,32739],{"class":184},[115,43724,43725],{"class":117,"line":32736},[115,43726,32745],{"class":125},[115,43728,43729],{"class":117,"line":32742},[115,43730,32751],{"class":184},[115,43732,43733,43735,43737,43739,43741,43743,43745],{"class":117,"line":32748},[115,43734,32757],{"class":125},[115,43736,9478],{"class":121},[115,43738,32762],{"class":125},[115,43740,580],{"class":121},[115,43742,32767],{"class":125},[115,43744,317],{"class":174},[115,43746,132],{"class":125},[115,43748,43749],{"class":117,"line":32754},[115,43750,32777],{"class":184},[115,43752,43753,43755,43757,43759,43761],{"class":117,"line":32774},[115,43754,32783],{"class":125},[115,43756,9478],{"class":121},[115,43758,32788],{"class":125},[115,43760,2949],{"class":121},[115,43762,32793],{"class":125},[115,43764,43765],{"class":117,"line":32780},[115,43766,32799],{"class":184},[115,43768,43769,43771,43773,43775,43777],{"class":117,"line":32796},[115,43770,32805],{"class":125},[115,43772,9478],{"class":121},[115,43774,32767],{"class":125},[115,43776,317],{"class":174},[115,43778,132],{"class":125},[115,43780,43781],{"class":117,"line":32802},[115,43782,32819],{"class":184},[115,43784,43785,43787,43789,43791,43793],{"class":117,"line":32816},[115,43786,3403],{"class":121},[115,43788,32827],{"class":125},[115,43790,26044],{"class":121},[115,43792,31607],{"class":174},[115,43794,32834],{"class":125},[115,43796,43797],{"class":117,"line":32822},[115,43798,32840],{"class":184},[115,43800,43801,43803,43805],{"class":117,"line":32837},[115,43802,32611],{"class":125},[115,43804,171],{"class":121},[115,43806,32616],{"class":125},[115,43808,43809],{"class":117,"line":32843},[115,43810,32855],{"class":184},[115,43812,43813,43815,43817],{"class":117,"line":32852},[115,43814,32626],{"class":125},[115,43816,171],{"class":121},[115,43818,32631],{"class":125},[115,43820,43821],{"class":117,"line":32858},[115,43822,32870],{"class":184},[115,43824,43825],{"class":117,"line":32867},[115,43826,32876],{"class":125},[115,43828,43829],{"class":117,"line":32873},[115,43830,36357],{"class":184},[115,43832,43833,43835],{"class":117,"line":32879},[115,43834,32882],{"class":121},[115,43836,32885],{"class":125},[115,43838,43839],{"class":117,"line":32888},[115,43840,32891],{"class":184},[115,43842,43843,43845,43847],{"class":117,"line":32894},[115,43844,36372],{"class":125},[115,43846,171],{"class":121},[115,43848,32666],{"class":125},[115,43850,43851],{"class":117,"line":32905},[115,43852,32908],{"class":184},[115,43854,43855,43857,43859,43861,43863,43865,43867],{"class":117,"line":32911},[115,43856,36385],{"class":125},[115,43858,171],{"class":121},[115,43860,32683],{"class":125},[115,43862,32686],{"class":5217},[115,43864,171],{"class":121},[115,43866,343],{"class":174},[115,43868,132],{"class":125},[115,43870,43871],{"class":117,"line":32930},[115,43872,32933],{"class":184},[115,43874,43875,43877,43879],{"class":117,"line":32936},[115,43876,36406],{"class":125},[115,43878,171],{"class":121},[115,43880,32709],{"class":125},[115,43882,43883],{"class":117,"line":32947},[115,43884,32950],{"class":184},[115,43886,43887,43889,43891,43893,43895,43897,43899],{"class":117,"line":32953},[115,43888,36419],{"class":125},[115,43890,9478],{"class":121},[115,43892,36424],{"class":125},[115,43894,580],{"class":121},[115,43896,32767],{"class":125},[115,43898,317],{"class":174},[115,43900,132],{"class":125},[115,43902,43903,43905,43907,43909,43911],{"class":117,"line":32973},[115,43904,36437],{"class":125},[115,43906,9478],{"class":121},[115,43908,32788],{"class":125},[115,43910,2949],{"class":121},[115,43912,32793],{"class":125},[115,43914,43915],{"class":117,"line":32989},[115,43916,36450],{"class":184},[115,43918,43919,43921,43923,43925,43927],{"class":117,"line":32995},[115,43920,36455],{"class":125},[115,43922,9478],{"class":121},[115,43924,32767],{"class":125},[115,43926,317],{"class":174},[115,43928,132],{"class":125},[115,43930,43931],{"class":117,"line":33009},[115,43932,33012],{"class":184},[115,43934,43935],{"class":117,"line":33015},[115,43936,33018],{"class":184},[115,43938,43939,43941,43943],{"class":117,"line":33021},[115,43940,33024],{"class":125},[115,43942,709],{"class":121},[115,43944,33029],{"class":125},[115,43946,43947],{"class":117,"line":33032},[115,43948,33035],{"class":184},[115,43950,43951],{"class":117,"line":33038},[115,43952,33041],{"class":184},[115,43954,43955,43957,43959],{"class":117,"line":33044},[115,43956,33047],{"class":125},[115,43958,709],{"class":121},[115,43960,33029],{"class":125},[115,43962,43963],{"class":117,"line":33054},[115,43964,33057],{"class":184},[115,43966,43967,43969,43971],{"class":117,"line":33060},[115,43968,33063],{"class":125},[115,43970,709],{"class":121},[115,43972,33068],{"class":125},[115,43974,43975],{"class":117,"line":33071},[115,43976,33074],{"class":184},[115,43978,43979,43981,43983],{"class":117,"line":33077},[115,43980,33080],{"class":125},[115,43982,709],{"class":121},[115,43984,33068],{"class":125},[115,43986,43987],{"class":117,"line":33087},[115,43988,2400],{"emptyLinePlaceholder":42},[115,43990,43991],{"class":117,"line":33092},[115,43992,33095],{"class":184},[115,43994,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033],{"class":117,"line":33098},[115,43996,32452],{"class":174},[115,43998,126],{"class":125},[115,44000,3592],{"class":230},[115,44002,32460],{"class":174},[115,44004,33109],{"class":230},[115,44006,1021],{"class":174},[115,44008,33114],{"class":121},[115,44010,1071],{"class":174},[115,44012,33119],{"class":230},[115,44014,1021],{"class":174},[115,44016,33114],{"class":121},[115,44018,1071],{"class":174},[115,44020,3592],{"class":230},[115,44022,33130],{"class":125},[115,44024,657],{"class":121},[115,44026,343],{"class":174},[115,44028,33137],{"class":125},[115,44030,657],{"class":121},[115,44032,343],{"class":174},[115,44034,33144],{"class":125},[115,44036,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075],{"class":117,"line":33147},[115,44038,32452],{"class":174},[115,44040,126],{"class":125},[115,44042,3592],{"class":230},[115,44044,32460],{"class":174},[115,44046,33158],{"class":230},[115,44048,1021],{"class":174},[115,44050,33114],{"class":121},[115,44052,1071],{"class":174},[115,44054,33167],{"class":230},[115,44056,1021],{"class":174},[115,44058,33114],{"class":121},[115,44060,1071],{"class":174},[115,44062,3592],{"class":230},[115,44064,33178],{"class":125},[115,44066,657],{"class":121},[115,44068,343],{"class":174},[115,44070,33185],{"class":125},[115,44072,657],{"class":121},[115,44074,343],{"class":174},[115,44076,33144],{"class":125},[115,44078,44079],{"class":117,"line":33194},[115,44080,2400],{"emptyLinePlaceholder":42},[115,44082,44083],{"class":117,"line":33199},[115,44084,33202],{"class":184},[115,44086,44087,44089,44091,44093,44095,44097,44099],{"class":117,"line":33205},[115,44088,2497],{"class":121},[115,44090,33210],{"class":125},[115,44092,657],{"class":121},[115,44094,343],{"class":174},[115,44096,1065],{"class":125},[115,44098,1085],{"class":121},[115,44100,33221],{"class":125},[115,44102,44103],{"class":117,"line":33224},[115,44104,33227],{"class":184},[115,44106,44107,44109,44111,44113,44115,44117,44119],{"class":117,"line":33230},[115,44108,33233],{"class":125},[115,44110,165],{"class":174},[115,44112,171],{"class":121},[115,44114,33240],{"class":125},[115,44116,657],{"class":121},[115,44118,343],{"class":174},[115,44120,33247],{"class":125},[115,44122,44123],{"class":117,"line":33250},[115,44124,33253],{"class":184},[115,44126,44127],{"class":117,"line":33256},[115,44128,33259],{"class":184},[115,44130,44131,44133,44135],{"class":117,"line":33262},[115,44132,33265],{"class":125},[115,44134,171],{"class":121},[115,44136,32315],{"class":125},[115,44138,44139],{"class":117,"line":33272},[115,44140,2400],{"emptyLinePlaceholder":42},[115,44142,44143],{"class":117,"line":33277},[115,44144,33280],{"class":184},[115,44146,44147,44149,44151,44153,44155],{"class":117,"line":33283},[115,44148,33286],{"class":125},[115,44150,171],{"class":121},[115,44152,33291],{"class":125},[115,44154,657],{"class":121},[115,44156,33296],{"class":125},[115,44158,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193],{"class":117,"line":33299},[115,44160,32452],{"class":174},[115,44162,126],{"class":125},[115,44164,33306],{"class":230},[115,44166,1021],{"class":174},[115,44168,33311],{"class":121},[115,44170,1071],{"class":174},[115,44172,669],{"class":230},[115,44174,1021],{"class":174},[115,44176,33311],{"class":121},[115,44178,1071],{"class":174},[115,44180,33324],{"class":230},[115,44182,33327],{"class":125},[115,44184,33330],{"class":121},[115,44186,1032],{"class":174},[115,44188,33335],{"class":125},[115,44190,453],{"class":121},[115,44192,1032],{"class":174},[115,44194,30498],{"class":125},[115,44196,44197],{"class":117,"line":33344},[115,44198,36734],{"class":184},[115,44200,44201],{"class":117,"line":33350},[115,44202,36739],{"class":184},[115,44204,44205,44207,44209],{"class":117,"line":33356},[115,44206,36744],{"class":125},[115,44208,33368],{"class":230},[115,44210,132],{"class":125},[115,44212,44213],{"class":117,"line":33362},[115,44214,33388],{"class":184},[115,44216,44217,44219,44221,44223,44225,44227],{"class":117,"line":33373},[115,44218,33394],{"class":125},[115,44220,171],{"class":121},[115,44222,33399],{"class":125},[115,44224,33402],{"class":5217},[115,44226,171],{"class":121},[115,44228,1546],{"class":125},[115,44230,44231,44233,44235,44237],{"class":117,"line":33379},[115,44232,33412],{"class":230},[115,44234,984],{"class":125},[115,44236,33417],{"class":174},[115,44238,33420],{"class":125},[115,44240,44241,44243],{"class":117,"line":33385},[115,44242,33426],{"class":230},[115,44244,33429],{"class":125},[115,44246,44247,44249],{"class":117,"line":33391},[115,44248,33435],{"class":230},[115,44250,33438],{"class":125},[115,44252,44253,44255],{"class":117,"line":33409},[115,44254,33444],{"class":230},[115,44256,33447],{"class":125},[115,44258,44259,44261],{"class":117,"line":33423},[115,44260,33453],{"class":230},[115,44262,33456],{"class":125},[115,44264,44265],{"class":117,"line":33432},[115,44266,33462],{"class":125},[115,44268,44269],{"class":117,"line":33441},[115,44270,33468],{"class":184},[115,44272,44273,44275],{"class":117,"line":33450},[115,44274,4090],{"class":121},[115,44276,33476],{"class":125},[115,44278,44279],{"class":117,"line":33459},[115,44280,2400],{"emptyLinePlaceholder":42},[115,44282,44283],{"class":117,"line":33465},[115,44284,33487],{"class":184},[115,44286,44287,44289,44291],{"class":117,"line":33471},[115,44288,31948],{"class":121},[115,44290,33495],{"class":1963},[115,44292,33498],{"class":125},[115,44294,44295],{"class":117,"line":33479},[115,44296,33504],{"class":184},[115,44298,44299,44301,44303,44305,44307,44309,44311,44313],{"class":117,"line":33484},[115,44300,33510],{"class":125},[115,44302,31694],{"class":5217},[115,44304,171],{"class":121},[115,44306,126],{"class":125},[115,44308,623],{"class":174},[115,44310,503],{"class":125},[115,44312,418],{"class":174},[115,44314,30498],{"class":125},[115,44316,44317],{"class":117,"line":33490},[115,44318,33530],{"class":184},[115,44320,44321],{"class":117,"line":33501},[115,44322,33536],{"class":184},[115,44324,44325],{"class":117,"line":33507},[115,44326,33542],{"class":184},[115,44328,44329,44331,44333,44335,44337,44339,44341],{"class":117,"line":33527},[115,44330,31728],{"class":125},[115,44332,343],{"class":174},[115,44334,503],{"class":125},[115,44336,203],{"class":174},[115,44338,503],{"class":125},[115,44340,343],{"class":174},[115,44342,132],{"class":125},[115,44344,44345],{"class":117,"line":33533},[115,44346,33565],{"class":184},[115,44348,44349],{"class":117,"line":33539},[115,44350,33571],{"class":184},[115,44352,44353],{"class":117,"line":33545},[115,44354,33577],{"class":184},[115,44356,44357],{"class":117,"line":33562},[115,44358,33583],{"class":184},[115,44360,44361],{"class":117,"line":33568},[115,44362,33589],{"class":184},[115,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381],{"class":117,"line":33574},[115,44366,33595],{"class":125},[115,44368,33598],{"class":230},[115,44370,33601],{"class":125},[115,44372,33604],{"class":230},[115,44374,503],{"class":125},[115,44376,33609],{"class":5217},[115,44378,171],{"class":121},[115,44380,33614],{"class":230},[115,44382,132],{"class":125},[115,44384,44385,44387,44389,44391,44393,44395,44397,44399,44401],{"class":117,"line":33580},[115,44386,33595],{"class":125},[115,44388,33598],{"class":230},[115,44390,33626],{"class":125},[115,44392,33629],{"class":230},[115,44394,503],{"class":125},[115,44396,33609],{"class":5217},[115,44398,171],{"class":121},[115,44400,33638],{"class":230},[115,44402,132],{"class":125},[115,44404,44405],{"class":117,"line":33586},[115,44406,33646],{"class":184},[115,44408,44409],{"class":117,"line":33592},[115,44410,33652],{"class":125},[115,44412,44413],{"class":117,"line":33619},[115,44414,33658],{"class":184},[115,44416,44417,44419,44421],{"class":117,"line":33643},[115,44418,33664],{"class":125},[115,44420,33667],{"class":230},[115,44422,132],{"class":125},[115,44424,44425,44427,44429],{"class":117,"line":33649},[115,44426,33675],{"class":125},[115,44428,33678],{"class":230},[115,44430,132],{"class":125},[115,44432,44433],{"class":117,"line":33655},[115,44434,33686],{"class":184},[115,44436,44437,44439,44441,44443,44445,44447,44449],{"class":117,"line":33661},[115,44438,31728],{"class":125},[115,44440,343],{"class":174},[115,44442,503],{"class":125},[115,44444,203],{"class":174},[115,44446,503],{"class":125},[115,44448,203],{"class":174},[115,44450,132],{"class":125},[115,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":117,"line":33672},[115,44454,33595],{"class":125},[115,44456,33598],{"class":230},[115,44458,33713],{"class":125},[115,44460,33604],{"class":230},[115,44462,503],{"class":125},[115,44464,33609],{"class":5217},[115,44466,171],{"class":121},[115,44468,33724],{"class":230},[115,44470,132],{"class":125},[115,44472,44473,44475,44477,44479,44481,44483,44485,44487,44489],{"class":117,"line":33683},[115,44474,33595],{"class":125},[115,44476,33598],{"class":230},[115,44478,33736],{"class":125},[115,44480,33629],{"class":230},[115,44482,503],{"class":125},[115,44484,33609],{"class":5217},[115,44486,171],{"class":121},[115,44488,33747],{"class":230},[115,44490,132],{"class":125},[115,44492,44493],{"class":117,"line":33689},[115,44494,33755],{"class":184},[115,44496,44497],{"class":117,"line":33706},[115,44498,33652],{"class":125},[115,44500,44501,44503,44505],{"class":117,"line":33729},[115,44502,33664],{"class":125},[115,44504,33598],{"class":230},[115,44506,132],{"class":125},[115,44508,44509,44511,44513],{"class":117,"line":33752},[115,44510,33675],{"class":125},[115,44512,33777],{"class":230},[115,44514,132],{"class":125},[115,44516,44517],{"class":117,"line":33758},[115,44518,33785],{"class":125},[115,44520,44521],{"class":117,"line":33763},[115,44522,2400],{"emptyLinePlaceholder":42},[115,44524,44525],{"class":117,"line":33772},[115,44526,33796],{"class":184},[115,44528,44529,44531,44533,44535,44537],{"class":117,"line":33782},[115,44530,1531],{"class":121},[115,44532,31221],{"class":174},[115,44534,2949],{"class":121},[115,44536,31226],{"class":230},[115,44538,3739],{"class":125},[115,44540,44541],{"class":117,"line":33788},[115,44542,33815],{"class":184},[115,44544,44545,44548,44550],{"class":117,"line":33793},[115,44546,44547],{"class":125},"    GoogLeNet",[115,44549,171],{"class":121},[115,44551,44552],{"class":125},"GoogLeNet(Inception)\n",[115,44554,44555,44557,44559],{"class":117,"line":33799},[115,44556,33832],{"class":125},[115,44558,171],{"class":121},[115,44560,33837],{"class":125},[115,44562,44563,44565,44567,44570,44572,44574,44576],{"class":117,"line":33812},[115,44564,33394],{"class":125},[115,44566,171],{"class":121},[115,44568,44569],{"class":125},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[115,44571,33850],{"class":5217},[115,44573,171],{"class":121},[115,44575,1076],{"class":174},[115,44577,132],{"class":125},[115,44579,44580],{"class":117,"line":33818},[115,44581,33862],{"class":125},[69,44583,44584],{"start":1180},[72,44585,40575],{},[106,44587,44589],{"className":30379,"code":44588,"language":30381,"meta":22,"style":22},"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",[112,44590,44591,44597,44607,44617,44621,44631,44642,44646,44650,44654,44662,44678,44688,44704,44714,44728,44732,44742,44752,44762,44768,44772,44776,44784,44788,44804,44812,44816,44820,44828,44836,44840,44844,44848,44852,44858,44862,44872,44880,44888,44892,44896,44900,44908,44912,44928,44932,44936,44940,44952,44956,44968,44972,44976,44988,44992,45002,45006,45010,45022,45026,45034,45038,45042,45050,45054,45062,45066,45070,45074,45078,45082,45098,45106,45110,45114,45162,45168,45172,45182,45190,45198,45202,45206,45210,45214,45222,45226,45242,45246,45254,45262],{"__ignoreMap":22},[115,44592,44593,44595],{"class":117,"line":118},[115,44594,30393],{"class":121},[115,44596,30396],{"class":125},[115,44598,44599,44601,44603,44605],{"class":117,"line":37},[115,44600,30393],{"class":121},[115,44602,31416],{"class":125},[115,44604,31384],{"class":121},[115,44606,31421],{"class":125},[115,44608,44609,44611,44613,44615],{"class":117,"line":1180},[115,44610,30738],{"class":121},[115,44612,31399],{"class":125},[115,44614,30393],{"class":121},[115,44616,31404],{"class":125},[115,44618,44619],{"class":117,"line":1195},[115,44620,33923],{"class":184},[115,44622,44623,44625,44627,44629],{"class":117,"line":1201},[115,44624,30738],{"class":121},[115,44626,31369],{"class":125},[115,44628,30393],{"class":121},[115,44630,31374],{"class":125},[115,44632,44633,44635,44637,44639],{"class":117,"line":1215},[115,44634,30738],{"class":121},[115,44636,31915],{"class":125},[115,44638,30393],{"class":121},[115,44640,44641],{"class":125}," GoogLeNet,Inception\n",[115,44643,44644],{"class":117,"line":1221},[115,44645,2400],{"emptyLinePlaceholder":42},[115,44647,44648],{"class":117,"line":1312},[115,44649,2400],{"emptyLinePlaceholder":42},[115,44651,44652],{"class":117,"line":1318},[115,44653,33952],{"class":184},[115,44655,44656,44658,44660],{"class":117,"line":1330},[115,44657,31948],{"class":121},[115,44659,33959],{"class":1963},[115,44661,31954],{"class":125},[115,44663,44664,44666,44668,44670,44672,44674,44676],{"class":117,"line":1612},[115,44665,33966],{"class":125},[115,44667,171],{"class":121},[115,44669,31456],{"class":125},[115,44671,31459],{"class":5217},[115,44673,171],{"class":121},[115,44675,31464],{"class":230},[115,44677,31467],{"class":125},[115,44679,44680,44682,44684,44686],{"class":117,"line":1617},[115,44681,33983],{"class":5217},[115,44683,171],{"class":121},[115,44685,33988],{"class":174},[115,44687,31467],{"class":125},[115,44689,44690,44692,44694,44696,44698,44700,44702],{"class":117,"line":1623},[115,44691,33995],{"class":5217},[115,44693,171],{"class":121},[115,44695,31494],{"class":125},[115,44697,31497],{"class":5217},[115,44699,171],{"class":121},[115,44701,35450],{"class":174},[115,44703,31505],{"class":125},[115,44705,44706,44708,44710,44712],{"class":117,"line":1628},[115,44707,34012],{"class":5217},[115,44709,171],{"class":121},[115,44711,31477],{"class":174},[115,44713,132],{"class":125},[115,44715,44716,44718,44720,44722,44724,44726],{"class":117,"line":1642},[115,44717,34023],{"class":125},[115,44719,171],{"class":121},[115,44721,31535],{"class":125},[115,44723,31538],{"class":5217},[115,44725,171],{"class":121},[115,44727,34034],{"class":125},[115,44729,44730],{"class":117,"line":1647},[115,44731,34039],{"class":184},[115,44733,44734,44736,44738,44740],{"class":117,"line":1653},[115,44735,34044],{"class":5217},[115,44737,171],{"class":121},[115,44739,343],{"class":174},[115,44741,31467],{"class":125},[115,44743,44744,44746,44748,44750],{"class":117,"line":1674},[115,44745,34055],{"class":5217},[115,44747,171],{"class":121},[115,44749,31477],{"class":174},[115,44751,31467],{"class":125},[115,44753,44754,44756,44758,44760],{"class":117,"line":1679},[115,44755,34066],{"class":5217},[115,44757,171],{"class":121},[115,44759,317],{"class":174},[115,44761,132],{"class":125},[115,44763,44764,44766],{"class":117,"line":1693},[115,44765,4090],{"class":121},[115,44767,34079],{"class":125},[115,44769,44770],{"class":117,"line":1698},[115,44771,2400],{"emptyLinePlaceholder":42},[115,44773,44774],{"class":117,"line":1727},[115,44775,34088],{"class":184},[115,44777,44778,44780,44782],{"class":117,"line":1732},[115,44779,31948],{"class":121},[115,44781,34095],{"class":1963},[115,44783,34098],{"class":125},[115,44785,44786],{"class":117,"line":1749},[115,44787,34103],{"class":184},[115,44789,44790,44792,44794,44796,44798,44800,44802],{"class":117,"line":1754},[115,44791,31238],{"class":125},[115,44793,171],{"class":121},[115,44795,31245],{"class":230},[115,44797,1704],{"class":121},[115,44799,31250],{"class":125},[115,44801,1701],{"class":121},[115,44803,34120],{"class":230},[115,44805,44806,44808,44810],{"class":117,"line":1759},[115,44807,31290],{"class":125},[115,44809,171],{"class":121},[115,44811,32290],{"class":125},[115,44813,44814],{"class":117,"line":1764},[115,44815,2400],{"emptyLinePlaceholder":42},[115,44817,44818],{"class":117,"line":1778},[115,44819,34137],{"class":184},[115,44821,44822,44824,44826],{"class":117,"line":1783},[115,44823,34142],{"class":125},[115,44825,171],{"class":121},[115,44827,32343],{"class":174},[115,44829,44830,44832,44834],{"class":117,"line":2577},[115,44831,34151],{"class":125},[115,44833,171],{"class":121},[115,44835,3085],{"class":174},[115,44837,44838],{"class":117,"line":2591},[115,44839,2400],{"emptyLinePlaceholder":42},[115,44841,44842],{"class":117,"line":2599},[115,44843,34164],{"class":184},[115,44845,44846],{"class":117,"line":2604},[115,44847,34169],{"class":184},[115,44849,44850],{"class":117,"line":2610},[115,44851,34174],{"class":184},[115,44853,44854,44856],{"class":117,"line":2616},[115,44855,34179],{"class":121},[115,44857,32885],{"class":125},[115,44859,44860],{"class":117,"line":2621},[115,44861,34186],{"class":184},[115,44863,44864,44866,44868,44870],{"class":117,"line":7949},[115,44865,3403],{"class":121},[115,44867,34193],{"class":125},[115,44869,26044],{"class":121},[115,44871,34198],{"class":125},[115,44873,44874,44876,44878],{"class":117,"line":7973},[115,44875,34203],{"class":125},[115,44877,171],{"class":121},[115,44879,34208],{"class":125},[115,44881,44882,44884,44886],{"class":117,"line":7978},[115,44883,34213],{"class":125},[115,44885,171],{"class":121},[115,44887,34218],{"class":125},[115,44889,44890],{"class":117,"line":7984},[115,44891,34223],{"class":184},[115,44893,44894],{"class":117,"line":8011},[115,44895,32876],{"class":125},[115,44897,44898],{"class":117,"line":8016},[115,44899,34232],{"class":184},[115,44901,44902,44904,44906],{"class":117,"line":8022},[115,44903,32661],{"class":125},[115,44905,171],{"class":121},[115,44907,34241],{"class":125},[115,44909,44910],{"class":117,"line":8034},[115,44911,34246],{"class":184},[115,44913,44914,44916,44918,44920,44922,44924,44926],{"class":117,"line":8046},[115,44915,32678],{"class":125},[115,44917,171],{"class":121},[115,44919,32683],{"class":125},[115,44921,32686],{"class":5217},[115,44923,171],{"class":121},[115,44925,343],{"class":174},[115,44927,132],{"class":125},[115,44929,44930],{"class":117,"line":8058},[115,44931,34267],{"class":184},[115,44933,44934],{"class":117,"line":9717},[115,44935,34272],{"class":184},[115,44937,44938],{"class":117,"line":9742},[115,44939,34277],{"class":184},[115,44941,44942,44944,44946,44948,44950],{"class":117,"line":9765},[115,44943,34282],{"class":125},[115,44945,9478],{"class":121},[115,44947,32788],{"class":125},[115,44949,2949],{"class":121},[115,44951,34291],{"class":125},[115,44953,44954],{"class":117,"line":9789},[115,44955,34296],{"class":184},[115,44957,44958,44960,44962,44964,44966],{"class":117,"line":9794},[115,44959,34301],{"class":125},[115,44961,9478],{"class":121},[115,44963,34306],{"class":125},[115,44965,317],{"class":174},[115,44967,132],{"class":125},[115,44969,44970],{"class":117,"line":9799},[115,44971,2400],{"emptyLinePlaceholder":42},[115,44973,44974],{"class":117,"line":9804},[115,44975,34319],{"class":184},[115,44977,44978,44980,44982,44984,44986],{"class":117,"line":9813},[115,44979,34324],{"class":125},[115,44981,171],{"class":121},[115,44983,34329],{"class":125},[115,44985,709],{"class":121},[115,44987,34334],{"class":125},[115,44989,44990],{"class":117,"line":9818},[115,44991,34339],{"class":184},[115,44993,44994,44996,44998,45000],{"class":117,"line":9824},[115,44995,32452],{"class":174},[115,44997,126],{"class":125},[115,44999,34348],{"class":230},[115,45001,34351],{"class":125},[115,45003,45004],{"class":117,"line":9845},[115,45005,2400],{"emptyLinePlaceholder":42},[115,45007,45008],{"class":117,"line":9851},[115,45009,34360],{"class":184},[115,45011,45012,45014,45016,45018,45020],{"class":117,"line":9865},[115,45013,1531],{"class":121},[115,45015,31221],{"class":174},[115,45017,2949],{"class":121},[115,45019,31226],{"class":230},[115,45021,3739],{"class":125},[115,45023,45024],{"class":117,"line":9871},[115,45025,34377],{"class":184},[115,45027,45028,45030,45032],{"class":117,"line":9898},[115,45029,31290],{"class":125},[115,45031,171],{"class":121},[115,45033,44552],{"class":125},[115,45035,45036],{"class":117,"line":9907},[115,45037,34390],{"class":184},[115,45039,45040],{"class":117,"line":9913},[115,45041,34395],{"class":184},[115,45043,45044,45046,45048],{"class":117,"line":9921},[115,45045,34400],{"class":125},[115,45047,34403],{"class":230},[115,45049,30498],{"class":125},[115,45051,45052],{"class":117,"line":9926},[115,45053,34410],{"class":184},[115,45055,45056,45058,45060],{"class":117,"line":16605},[115,45057,34023],{"class":125},[115,45059,171],{"class":121},[115,45061,34419],{"class":125},[115,45063,45064],{"class":117,"line":16611},[115,45065,34424],{"class":184},[115,45067,45068],{"class":117,"line":16634},[115,45069,34429],{"class":125},[115,45071,45072],{"class":117,"line":16640},[115,45073,2400],{"emptyLinePlaceholder":42},[115,45075,45076],{"class":117,"line":16663},[115,45077,34438],{"class":184},[115,45079,45080],{"class":117,"line":16677},[115,45081,34443],{"class":184},[115,45083,45084,45086,45088,45090,45092,45094,45096],{"class":117,"line":16697},[115,45085,31238],{"class":125},[115,45087,171],{"class":121},[115,45089,31245],{"class":230},[115,45091,1704],{"class":121},[115,45093,31250],{"class":125},[115,45095,1701],{"class":121},[115,45097,34120],{"class":230},[115,45099,45100,45102,45104],{"class":117,"line":16703},[115,45101,31290],{"class":125},[115,45103,171],{"class":121},[115,45105,32290],{"class":125},[115,45107,45108],{"class":117,"line":16714},[115,45109,34472],{"class":184},[115,45111,45112],{"class":117,"line":16737},[115,45113,34477],{"class":184},[115,45115,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156,45158,45160],{"class":117,"line":16759},[115,45117,34482],{"class":125},[115,45119,171],{"class":121},[115,45121,1015],{"class":125},[115,45123,34489],{"class":230},[115,45125,503],{"class":125},[115,45127,34494],{"class":230},[115,45129,503],{"class":125},[115,45131,34499],{"class":230},[115,45133,503],{"class":125},[115,45135,34504],{"class":230},[115,45137,503],{"class":125},[115,45139,34509],{"class":230},[115,45141,503],{"class":125},[115,45143,34514],{"class":230},[115,45145,503],{"class":125},[115,45147,34519],{"class":230},[115,45149,503],{"class":125},[115,45151,34524],{"class":230},[115,45153,503],{"class":125},[115,45155,34529],{"class":230},[115,45157,503],{"class":125},[115,45159,34534],{"class":230},[115,45161,33247],{"class":125},[115,45163,45164,45166],{"class":117,"line":16764},[115,45165,34179],{"class":121},[115,45167,32885],{"class":125},[115,45169,45170],{"class":117,"line":16770},[115,45171,34547],{"class":184},[115,45173,45174,45176,45178,45180],{"class":117,"line":16784},[115,45175,3403],{"class":121},[115,45177,34554],{"class":125},[115,45179,26044],{"class":121},[115,45181,34198],{"class":125},[115,45183,45184,45186,45188],{"class":117,"line":16797},[115,45185,32611],{"class":125},[115,45187,171],{"class":121},[115,45189,32616],{"class":125},[115,45191,45192,45194,45196],{"class":117,"line":16802},[115,45193,32626],{"class":125},[115,45195,171],{"class":121},[115,45197,32631],{"class":125},[115,45199,45200],{"class":117,"line":16816},[115,45201,2400],{"emptyLinePlaceholder":42},[115,45203,45204],{"class":117,"line":16821},[115,45205,34583],{"class":184},[115,45207,45208],{"class":117,"line":16827},[115,45209,32876],{"class":125},[115,45211,45212],{"class":117,"line":16832},[115,45213,34592],{"class":184},[115,45215,45216,45218,45220],{"class":117,"line":16846},[115,45217,32661],{"class":125},[115,45219,171],{"class":121},[115,45221,32666],{"class":125},[115,45223,45224],{"class":117,"line":16851},[115,45225,34605],{"class":184},[115,45227,45228,45230,45232,45234,45236,45238,45240],{"class":117,"line":16856},[115,45229,32678],{"class":125},[115,45231,171],{"class":121},[115,45233,32683],{"class":125},[115,45235,32686],{"class":5217},[115,45237,171],{"class":121},[115,45239,343],{"class":174},[115,45241,132],{"class":125},[115,45243,45244],{"class":117,"line":16870},[115,45245,34626],{"class":184},[115,45247,45248,45250,45252],{"class":117,"line":16882},[115,45249,34631],{"class":125},[115,45251,171],{"class":121},[115,45253,34636],{"class":125},[115,45255,45256,45258,45260],{"class":117,"line":16887},[115,45257,34641],{"class":125},[115,45259,171],{"class":121},[115,45261,34646],{"class":125},[115,45263,45264,45266,45268,45270,45272,45274,45276,45278],{"class":117,"line":16900},[115,45265,34651],{"class":174},[115,45267,126],{"class":125},[115,45269,34656],{"class":230},[115,45271,34659],{"class":125},[115,45273,34662],{"class":230},[115,45275,503],{"class":125},[115,45277,34667],{"class":230},[115,45279,34670],{"class":125},[86,45281,45283],{"id":45282},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45285,45286],{},"猫狗分类任务",[14,45288,45289],{},"划分数据集和验证集",[106,45291,45293],{"className":30379,"code":45292,"language":30381,"meta":22,"style":22},"# 创建脚本，用于划分数据集和验证集\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",[112,45294,45295,45300,45307,45312,45323,45330,45334,45344,45358,45367,45371,45376,45386,45406,45410,45415,45425,45436,45449,45453,45458,45467,45477,45488,45492,45497,45507,45511,45516,45521,45526,45531,45536,45540,45550,45577,45590,45602,45629,45634,45639,45653,45658,45670,45685,45700,45708,45712,45717,45723,45735,45748,45753,45758,45763,45813,45819,45823],{"__ignoreMap":22},[115,45296,45297],{"class":117,"line":118},[115,45298,45299],{"class":184},"# 创建脚本，用于划分数据集和验证集\n",[115,45301,45302,45304],{"class":117,"line":37},[115,45303,30393],{"class":121},[115,45305,45306],{"class":125}," os\n",[115,45308,45309],{"class":117,"line":1180},[115,45310,45311],{"class":184},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[115,45313,45314,45316,45319,45321],{"class":117,"line":1195},[115,45315,30738],{"class":121},[115,45317,45318],{"class":125}," shutil ",[115,45320,30393],{"class":121},[115,45322,31823],{"class":125},[115,45324,45325,45327],{"class":117,"line":1201},[115,45326,30393],{"class":121},[115,45328,45329],{"class":125}," random\n",[115,45331,45332],{"class":117,"line":1215},[115,45333,2400],{"emptyLinePlaceholder":42},[115,45335,45336,45338,45341],{"class":117,"line":1221},[115,45337,31948],{"class":121},[115,45339,45340],{"class":1963}," mkfile",[115,45342,45343],{"class":125},"(file):\n",[115,45345,45346,45348,45350,45353,45356],{"class":117,"line":1312},[115,45347,3101],{"class":121},[115,45349,38931],{"class":121},[115,45351,45352],{"class":125}," os.path.exists(",[115,45354,45355],{"class":5217},"file",[115,45357,30787],{"class":125},[115,45359,45360,45363,45365],{"class":117,"line":1318},[115,45361,45362],{"class":125},"        os.makedirs(",[115,45364,45355],{"class":5217},[115,45366,132],{"class":125},[115,45368,45369],{"class":117,"line":1330},[115,45370,2400],{"emptyLinePlaceholder":42},[115,45372,45373],{"class":117,"line":1612},[115,45374,45375],{"class":184},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[115,45377,45378,45381,45383],{"class":117,"line":1617},[115,45379,45380],{"class":125},"file_path",[115,45382,171],{"class":121},[115,45384,45385],{"class":230},"'data_cat_dog'\n",[115,45387,45388,45391,45393,45396,45398,45401,45403],{"class":117,"line":1623},[115,45389,45390],{"class":125},"flower_class",[115,45392,171],{"class":121},[115,45394,45395],{"class":125},"[cla ",[115,45397,3025],{"class":121},[115,45399,45400],{"class":125}," cla ",[115,45402,26044],{"class":121},[115,45404,45405],{"class":125}," os.listdir(file_path)]\n",[115,45407,45408],{"class":117,"line":1628},[115,45409,2400],{"emptyLinePlaceholder":42},[115,45411,45412],{"class":117,"line":1642},[115,45413,45414],{"class":184},"# 创建训练集train文件夹\n",[115,45416,45417,45420,45423],{"class":117,"line":1647},[115,45418,45419],{"class":125},"mkfile(",[115,45421,45422],{"class":230},"'data\u002Ftrain'",[115,45424,132],{"class":125},[115,45426,45427,45429,45431,45433],{"class":117,"line":1653},[115,45428,3025],{"class":121},[115,45430,45400],{"class":125},[115,45432,26044],{"class":121},[115,45434,45435],{"class":125}," flower_class:\n",[115,45437,45438,45441,45444,45446],{"class":117,"line":1674},[115,45439,45440],{"class":125},"    mkfile(",[115,45442,45443],{"class":230},"'data\u002Ftrain\u002F'",[115,45445,606],{"class":121},[115,45447,45448],{"class":125},"cla)\n",[115,45450,45451],{"class":117,"line":1679},[115,45452,2400],{"emptyLinePlaceholder":42},[115,45454,45455],{"class":117,"line":1693},[115,45456,45457],{"class":184},"# 创建验证集val文件夹\n",[115,45459,45460,45462,45465],{"class":117,"line":1698},[115,45461,45419],{"class":125},[115,45463,45464],{"class":230},"'data\u002Ftest'",[115,45466,132],{"class":125},[115,45468,45469,45471,45473,45475],{"class":117,"line":1727},[115,45470,3025],{"class":121},[115,45472,45400],{"class":125},[115,45474,26044],{"class":121},[115,45476,45435],{"class":125},[115,45478,45479,45481,45484,45486],{"class":117,"line":1732},[115,45480,45440],{"class":125},[115,45482,45483],{"class":230},"'data\u002Ftest\u002F'",[115,45485,606],{"class":121},[115,45487,45448],{"class":125},[115,45489,45490],{"class":117,"line":1749},[115,45491,2400],{"emptyLinePlaceholder":42},[115,45493,45494],{"class":117,"line":1754},[115,45495,45496],{"class":184},"# 划分比例，训练集：测试集=9：1\n",[115,45498,45499,45502,45504],{"class":117,"line":1759},[115,45500,45501],{"class":125},"split_rate",[115,45503,171],{"class":121},[115,45505,45506],{"class":174},"0.1\n",[115,45508,45509],{"class":117,"line":1764},[115,45510,2400],{"emptyLinePlaceholder":42},[115,45512,45513],{"class":117,"line":1778},[115,45514,45515],{"class":184},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[115,45517,45518],{"class":117,"line":1783},[115,45519,45520],{"class":184},"# cla_path：当前类别的原始图片路径\n",[115,45522,45523],{"class":117,"line":2577},[115,45524,45525],{"class":184},"# images：当前类别下所有图片的文件名列表\n",[115,45527,45528],{"class":117,"line":2591},[115,45529,45530],{"class":184},"# num：该类别图片总数\n",[115,45532,45533],{"class":117,"line":2599},[115,45534,45535],{"class":184},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[115,45537,45538],{"class":117,"line":2604},[115,45539,2400],{"emptyLinePlaceholder":42},[115,45541,45542,45544,45546,45548],{"class":117,"line":2610},[115,45543,3025],{"class":121},[115,45545,45400],{"class":125},[115,45547,26044],{"class":121},[115,45549,45435],{"class":125},[115,45551,45552,45555,45557,45560,45562,45565,45568,45570,45572,45574],{"class":117,"line":2616},[115,45553,45554],{"class":125},"    cla_path ",[115,45556,171],{"class":121},[115,45558,45559],{"class":125}," file_path ",[115,45561,606],{"class":121},[115,45563,45564],{"class":230}," '\u002F'",[115,45566,45567],{"class":121}," +",[115,45569,45400],{"class":125},[115,45571,606],{"class":121},[115,45573,45564],{"class":230},[115,45575,45576],{"class":184},"  # 某一类别的子目录\n",[115,45578,45579,45582,45584,45587],{"class":117,"line":2621},[115,45580,45581],{"class":125},"    images ",[115,45583,171],{"class":121},[115,45585,45586],{"class":125}," os.listdir(cla_path)  ",[115,45588,45589],{"class":184},"# iamges 列表存储了该目录下所有图像的名称\n",[115,45591,45592,45595,45597,45599],{"class":117,"line":7949},[115,45593,45594],{"class":125},"    num ",[115,45596,171],{"class":121},[115,45598,7332],{"class":174},[115,45600,45601],{"class":125},"(images)\n",[115,45603,45604,45607,45609,45612,45614,45616,45618,45621,45623,45626],{"class":117,"line":7973},[115,45605,45606],{"class":125},"    eval_index ",[115,45608,171],{"class":121},[115,45610,45611],{"class":125}," random.sample(images, ",[115,45613,618],{"class":5217},[115,45615,171],{"class":121},[115,45617,129],{"class":174},[115,45619,45620],{"class":125},"(num ",[115,45622,580],{"class":121},[115,45624,45625],{"class":125}," split_rate))  ",[115,45627,45628],{"class":184},"# 从images列表中随机抽取 k 个图像名称\n",[115,45630,45631],{"class":117,"line":7978},[115,45632,45633],{"class":184},"    # 遍历该类别下的所有图片\n",[115,45635,45636],{"class":117,"line":7984},[115,45637,45638],{"class":184},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[115,45640,45641,45643,45646,45648,45650],{"class":117,"line":8011},[115,45642,3201],{"class":121},[115,45644,45645],{"class":125}," index, image ",[115,45647,26044],{"class":121},[115,45649,31607],{"class":174},[115,45651,45652],{"class":125},"(images):\n",[115,45654,45655],{"class":117,"line":8016},[115,45656,45657],{"class":184},"        # eval_index 中保存验证集val的图像名称\n",[115,45659,45660,45662,45665,45667],{"class":117,"line":8022},[115,45661,2497],{"class":121},[115,45663,45664],{"class":125}," image ",[115,45666,26044],{"class":121},[115,45668,45669],{"class":125}," eval_index:\n",[115,45671,45672,45675,45677,45680,45682],{"class":117,"line":8034},[115,45673,45674],{"class":125},"            image_path ",[115,45676,171],{"class":121},[115,45678,45679],{"class":125}," cla_path ",[115,45681,606],{"class":121},[115,45683,45684],{"class":125}," image\n",[115,45686,45687,45690,45692,45695,45697],{"class":117,"line":8046},[115,45688,45689],{"class":125},"            new_path ",[115,45691,171],{"class":121},[115,45693,45694],{"class":230}," 'data\u002Ftest\u002F'",[115,45696,45567],{"class":121},[115,45698,45699],{"class":125}," cla\n",[115,45701,45702,45705],{"class":117,"line":8058},[115,45703,45704],{"class":125},"            copy(image_path, new_path)  ",[115,45706,45707],{"class":184},"# 将选中的图像复制到新路径\n",[115,45709,45710],{"class":117,"line":9717},[115,45711,2400],{"emptyLinePlaceholder":42},[115,45713,45714],{"class":117,"line":9742},[115,45715,45716],{"class":184},"        # 其余的图像保存在训练集train中\n",[115,45718,45719,45721],{"class":117,"line":9765},[115,45720,2534],{"class":121},[115,45722,3739],{"class":125},[115,45724,45725,45727,45729,45731,45733],{"class":117,"line":9789},[115,45726,45674],{"class":125},[115,45728,171],{"class":121},[115,45730,45679],{"class":125},[115,45732,606],{"class":121},[115,45734,45684],{"class":125},[115,45736,45737,45739,45741,45744,45746],{"class":117,"line":9794},[115,45738,45689],{"class":125},[115,45740,171],{"class":121},[115,45742,45743],{"class":230}," 'data\u002Ftrain\u002F'",[115,45745,45567],{"class":121},[115,45747,45699],{"class":125},[115,45749,45750],{"class":117,"line":9799},[115,45751,45752],{"class":125},"            copy(image_path, new_path)\n",[115,45754,45755],{"class":117,"line":9804},[115,45756,45757],{"class":184},"            # 打印进度条信息\n",[115,45759,45760],{"class":117,"line":9813},[115,45761,45762],{"class":184},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[115,45764,45765,45767,45769,45771,45774,45776,45778,45781,45783,45785,45787,45790,45793,45795,45797,45800,45803,45805,45807,45810],{"class":117,"line":9818},[115,45766,32452],{"class":174},[115,45768,126],{"class":125},[115,45770,376],{"class":230},[115,45772,45773],{"class":174},"\\r",[115,45775,1015],{"class":230},[115,45777,32460],{"class":174},[115,45779,45780],{"class":230},"] processing [",[115,45782,32460],{"class":174},[115,45784,709],{"class":230},[115,45786,32460],{"class":174},[115,45788,45789],{"class":230},"]\"",[115,45791,45792],{"class":125},".format(cla, index ",[115,45794,606],{"class":121},[115,45796,25119],{"class":174},[115,45798,45799],{"class":125},", num), ",[115,45801,45802],{"class":5217},"end",[115,45804,171],{"class":121},[115,45806,7653],{"class":230},[115,45808,45809],{"class":125},")  ",[115,45811,45812],{"class":184},"# processing bar\n",[115,45814,45815,45817],{"class":117,"line":9824},[115,45816,31300],{"class":174},[115,45818,1976],{"class":125},[115,45820,45821],{"class":117,"line":9845},[115,45822,2400],{"emptyLinePlaceholder":42},[115,45824,45825,45827,45829,45832],{"class":117,"line":9851},[115,45826,30416],{"class":174},[115,45828,126],{"class":125},[115,45830,45831],{"class":230},"\"processing done!\"",[115,45833,132],{"class":125},[14,45835,45836],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21999,45838,45840],{"id":45839},"_242模型代码","2.4.2.模型代码",[14,45842,45843],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[106,45845,45847],{"className":30379,"code":45846,"language":30381,"meta":22,"style":22},"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",[112,45848,45849,45855,45865,45875,45879,45895,45903,45917,45927,45931,45961,45965,45999,46045,46049,46083,46129,46133,46137,46171,46201,46205,46213,46227,46249,46271,46289,46293,46307,46311,46315,46331,46335,46343,46357,46367,46411,46415,46443,46447,46457,46485,46489,46525,46529,46557,46561,46571,46603,46635,46663,46667,46677,46709,46741,46773,46805,46837,46865,46869,46879,46911,46943,46955,46959,46971,46975,46979,46991,46999,47019,47023,47027,47031,47035,47039,47043,47057,47065,47073,47085,47099,47107,47111,47119,47129,47139,47149,47159,47169,47175,47179,47183,47195,47215,47223],{"__ignoreMap":22},[115,45850,45851,45853],{"class":117,"line":118},[115,45852,30393],{"class":121},[115,45854,30396],{"class":125},[115,45856,45857,45859,45861,45863],{"class":117,"line":37},[115,45858,30738],{"class":121},[115,45860,30741],{"class":125},[115,45862,30393],{"class":121},[115,45864,30746],{"class":125},[115,45866,45867,45869,45871,45873],{"class":117,"line":1180},[115,45868,30738],{"class":121},[115,45870,30758],{"class":125},[115,45872,30393],{"class":121},[115,45874,30763],{"class":125},[115,45876,45877],{"class":117,"line":1195},[115,45878,2400],{"emptyLinePlaceholder":42},[115,45880,45881,45883,45885,45887,45889,45891,45893],{"class":117,"line":1201},[115,45882,14695],{"class":121},[115,45884,41494],{"class":1963},[115,45886,126],{"class":125},[115,45888,30779],{"class":1963},[115,45890,683],{"class":125},[115,45892,30784],{"class":1963},[115,45894,30787],{"class":125},[115,45896,45897,45899,45901],{"class":117,"line":1215},[115,45898,30802],{"class":121},[115,45900,30805],{"class":174},[115,45902,41513],{"class":125},[115,45904,45905,45907,45909,45911,45913,45915],{"class":117,"line":1221},[115,45906,30818],{"class":174},[115,45908,41520],{"class":125},[115,45910,30824],{"class":174},[115,45912,30827],{"class":125},[115,45914,30830],{"class":174},[115,45916,1976],{"class":125},[115,45918,45919,45921,45923,45925],{"class":117,"line":1312},[115,45920,30846],{"class":174},[115,45922,34772],{"class":125},[115,45924,171],{"class":121},[115,45926,34777],{"class":125},[115,45928,45929],{"class":117,"line":1318},[115,45930,41543],{"class":184},[115,45932,45933,45935,45937,45939,45941,45943,45945,45947,45949,45951,45953,45955,45957,45959],{"class":117,"line":1330},[115,45934,30846],{"class":174},[115,45936,41550],{"class":125},[115,45938,171],{"class":121},[115,45940,30854],{"class":125},[115,45942,30857],{"class":5217},[115,45944,171],{"class":121},[115,45946,41561],{"class":125},[115,45948,30866],{"class":5217},[115,45950,171],{"class":121},[115,45952,41568],{"class":125},[115,45954,30875],{"class":5217},[115,45956,171],{"class":121},[115,45958,343],{"class":174},[115,45960,132],{"class":125},[115,45962,45963],{"class":117,"line":1612},[115,45964,41581],{"class":184},[115,45966,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997],{"class":117,"line":1617},[115,45968,30846],{"class":174},[115,45970,41588],{"class":125},[115,45972,171],{"class":121},[115,45974,30854],{"class":125},[115,45976,30857],{"class":5217},[115,45978,171],{"class":121},[115,45980,41561],{"class":125},[115,45982,30866],{"class":5217},[115,45984,171],{"class":121},[115,45986,41605],{"class":125},[115,45988,317],{"class":174},[115,45990,41610],{"class":125},[115,45992,30875],{"class":5217},[115,45994,171],{"class":121},[115,45996,343],{"class":174},[115,45998,132],{"class":125},[115,46000,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043],{"class":117,"line":1623},[115,46002,30846],{"class":174},[115,46004,41625],{"class":125},[115,46006,171],{"class":121},[115,46008,30854],{"class":125},[115,46010,30857],{"class":5217},[115,46012,171],{"class":121},[115,46014,41605],{"class":125},[115,46016,317],{"class":174},[115,46018,41610],{"class":125},[115,46020,30866],{"class":5217},[115,46022,171],{"class":121},[115,46024,41605],{"class":125},[115,46026,343],{"class":174},[115,46028,41610],{"class":125},[115,46030,30875],{"class":5217},[115,46032,171],{"class":121},[115,46034,197],{"class":174},[115,46036,503],{"class":125},[115,46038,30884],{"class":5217},[115,46040,171],{"class":121},[115,46042,343],{"class":174},[115,46044,132],{"class":125},[115,46046,46047],{"class":117,"line":1628},[115,46048,41670],{"class":184},[115,46050,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081],{"class":117,"line":1642},[115,46052,30846],{"class":174},[115,46054,41677],{"class":125},[115,46056,171],{"class":121},[115,46058,30854],{"class":125},[115,46060,30857],{"class":5217},[115,46062,171],{"class":121},[115,46064,41561],{"class":125},[115,46066,30866],{"class":5217},[115,46068,171],{"class":121},[115,46070,41694],{"class":125},[115,46072,317],{"class":174},[115,46074,41610],{"class":125},[115,46076,30875],{"class":5217},[115,46078,171],{"class":121},[115,46080,343],{"class":174},[115,46082,132],{"class":125},[115,46084,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127],{"class":117,"line":1647},[115,46086,30846],{"class":174},[115,46088,41713],{"class":125},[115,46090,171],{"class":121},[115,46092,30854],{"class":125},[115,46094,30857],{"class":5217},[115,46096,171],{"class":121},[115,46098,41694],{"class":125},[115,46100,317],{"class":174},[115,46102,41610],{"class":125},[115,46104,30866],{"class":5217},[115,46106,171],{"class":121},[115,46108,41694],{"class":125},[115,46110,343],{"class":174},[115,46112,41610],{"class":125},[115,46114,30875],{"class":5217},[115,46116,171],{"class":121},[115,46118,444],{"class":174},[115,46120,503],{"class":125},[115,46122,30884],{"class":5217},[115,46124,171],{"class":121},[115,46126,203],{"class":174},[115,46128,132],{"class":125},[115,46130,46131],{"class":117,"line":1653},[115,46132,41758],{"class":184},[115,46134,46135],{"class":117,"line":1674},[115,46136,41763],{"class":184},[115,46138,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169],{"class":117,"line":1679},[115,46140,30846],{"class":174},[115,46142,41770],{"class":125},[115,46144,171],{"class":121},[115,46146,34830],{"class":125},[115,46148,30875],{"class":5217},[115,46150,171],{"class":121},[115,46152,197],{"class":174},[115,46154,503],{"class":125},[115,46156,30930],{"class":5217},[115,46158,171],{"class":121},[115,46160,343],{"class":174},[115,46162,503],{"class":125},[115,46164,30884],{"class":5217},[115,46166,171],{"class":121},[115,46168,343],{"class":174},[115,46170,132],{"class":125},[115,46172,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199],{"class":117,"line":1693},[115,46174,30846],{"class":174},[115,46176,41805],{"class":125},[115,46178,171],{"class":121},[115,46180,30854],{"class":125},[115,46182,30857],{"class":5217},[115,46184,171],{"class":121},[115,46186,41561],{"class":125},[115,46188,30866],{"class":5217},[115,46190,171],{"class":121},[115,46192,41822],{"class":125},[115,46194,30875],{"class":5217},[115,46196,171],{"class":121},[115,46198,343],{"class":174},[115,46200,132],{"class":125},[115,46202,46203],{"class":117,"line":1698},[115,46204,2400],{"emptyLinePlaceholder":42},[115,46206,46207,46209,46211],{"class":117,"line":1727},[115,46208,30802],{"class":121},[115,46210,31094],{"class":1963},[115,46212,31097],{"class":125},[115,46214,46215,46217,46219,46221,46223,46225],{"class":117,"line":1732},[115,46216,41847],{"class":125},[115,46218,171],{"class":121},[115,46220,30824],{"class":174},[115,46222,35185],{"class":125},[115,46224,30824],{"class":174},[115,46226,41858],{"class":125},[115,46228,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247],{"class":117,"line":1749},[115,46230,7086],{"class":125},[115,46232,171],{"class":121},[115,46234,30824],{"class":174},[115,46236,35185],{"class":125},[115,46238,30824],{"class":174},[115,46240,41873],{"class":125},[115,46242,30824],{"class":174},[115,46244,35185],{"class":125},[115,46246,30824],{"class":174},[115,46248,41882],{"class":125},[115,46250,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269],{"class":117,"line":1754},[115,46252,41887],{"class":125},[115,46254,171],{"class":121},[115,46256,30824],{"class":174},[115,46258,35185],{"class":125},[115,46260,30824],{"class":174},[115,46262,41898],{"class":125},[115,46264,30824],{"class":174},[115,46266,35185],{"class":125},[115,46268,30824],{"class":174},[115,46270,41907],{"class":125},[115,46272,46273,46275,46277,46279,46281,46283,46285,46287],{"class":117,"line":1759},[115,46274,41912],{"class":125},[115,46276,171],{"class":121},[115,46278,30824],{"class":174},[115,46280,35185],{"class":125},[115,46282,30824],{"class":174},[115,46284,41923],{"class":125},[115,46286,30824],{"class":174},[115,46288,41928],{"class":125},[115,46290,46291],{"class":117,"line":1764},[115,46292,41933],{"class":184},[115,46294,46295,46297,46299,46301,46303,46305],{"class":117,"line":1778},[115,46296,14753],{"class":121},[115,46298,41940],{"class":125},[115,46300,32686],{"class":5217},[115,46302,171],{"class":121},[115,46304,343],{"class":174},[115,46306,132],{"class":125},[115,46308,46309],{"class":117,"line":1783},[115,46310,2400],{"emptyLinePlaceholder":42},[115,46312,46313],{"class":117,"line":2577},[115,46314,41961],{"class":184},[115,46316,46317,46319,46321,46323,46325,46327,46329],{"class":117,"line":2591},[115,46318,14695],{"class":121},[115,46320,41968],{"class":1963},[115,46322,126],{"class":125},[115,46324,30779],{"class":1963},[115,46326,683],{"class":125},[115,46328,30784],{"class":1963},[115,46330,30787],{"class":125},[115,46332,46333],{"class":117,"line":2599},[115,46334,41983],{"class":184},[115,46336,46337,46339,46341],{"class":117,"line":2604},[115,46338,30802],{"class":121},[115,46340,30805],{"class":174},[115,46342,41992],{"class":125},[115,46344,46345,46347,46349,46351,46353,46355],{"class":117,"line":2610},[115,46346,30818],{"class":174},[115,46348,41999],{"class":125},[115,46350,30824],{"class":174},[115,46352,30827],{"class":125},[115,46354,30830],{"class":174},[115,46356,1976],{"class":125},[115,46358,46359,46361,46363,46365],{"class":117,"line":2616},[115,46360,30846],{"class":174},[115,46362,42014],{"class":125},[115,46364,171],{"class":121},[115,46366,38010],{"class":125},[115,46368,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409],{"class":117,"line":2621},[115,46370,38015],{"class":125},[115,46372,30857],{"class":5217},[115,46374,171],{"class":121},[115,46376,197],{"class":174},[115,46378,503],{"class":125},[115,46380,30866],{"class":5217},[115,46382,171],{"class":121},[115,46384,329],{"class":174},[115,46386,503],{"class":125},[115,46388,30875],{"class":5217},[115,46390,171],{"class":121},[115,46392,494],{"class":174},[115,46394,503],{"class":125},[115,46396,30930],{"class":5217},[115,46398,171],{"class":121},[115,46400,203],{"class":174},[115,46402,503],{"class":125},[115,46404,30884],{"class":5217},[115,46406,171],{"class":121},[115,46408,197],{"class":174},[115,46410,38048],{"class":125},[115,46412,46413],{"class":117,"line":7949},[115,46414,38053],{"class":125},[115,46416,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441],{"class":117,"line":7973},[115,46418,38098],{"class":125},[115,46420,30875],{"class":5217},[115,46422,171],{"class":121},[115,46424,197],{"class":174},[115,46426,503],{"class":125},[115,46428,30930],{"class":5217},[115,46430,171],{"class":121},[115,46432,203],{"class":174},[115,46434,503],{"class":125},[115,46436,30884],{"class":5217},[115,46438,171],{"class":121},[115,46440,343],{"class":174},[115,46442,132],{"class":125},[115,46444,46445],{"class":117,"line":7978},[115,46446,38127],{"class":125},[115,46448,46449,46451,46453,46455],{"class":117,"line":7984},[115,46450,30846],{"class":174},[115,46452,42105],{"class":125},[115,46454,171],{"class":121},[115,46456,38010],{"class":125},[115,46458,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483],{"class":117,"line":8011},[115,46460,38015],{"class":125},[115,46462,30857],{"class":5217},[115,46464,171],{"class":121},[115,46466,329],{"class":174},[115,46468,503],{"class":125},[115,46470,30866],{"class":5217},[115,46472,171],{"class":121},[115,46474,329],{"class":174},[115,46476,503],{"class":125},[115,46478,30875],{"class":5217},[115,46480,171],{"class":121},[115,46482,343],{"class":174},[115,46484,38048],{"class":125},[115,46486,46487],{"class":117,"line":8016},[115,46488,38053],{"class":125},[115,46490,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523],{"class":117,"line":8022},[115,46492,38015],{"class":125},[115,46494,30857],{"class":5217},[115,46496,171],{"class":121},[115,46498,329],{"class":174},[115,46500,503],{"class":125},[115,46502,30866],{"class":5217},[115,46504,171],{"class":121},[115,46506,42160],{"class":174},[115,46508,503],{"class":125},[115,46510,30875],{"class":5217},[115,46512,171],{"class":121},[115,46514,197],{"class":174},[115,46516,503],{"class":125},[115,46518,30884],{"class":5217},[115,46520,171],{"class":121},[115,46522,343],{"class":174},[115,46524,38048],{"class":125},[115,46526,46527],{"class":117,"line":8034},[115,46528,38053],{"class":125},[115,46530,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555],{"class":117,"line":8046},[115,46532,38098],{"class":125},[115,46534,30875],{"class":5217},[115,46536,171],{"class":121},[115,46538,197],{"class":174},[115,46540,503],{"class":125},[115,46542,30930],{"class":5217},[115,46544,171],{"class":121},[115,46546,203],{"class":174},[115,46548,503],{"class":125},[115,46550,30884],{"class":5217},[115,46552,171],{"class":121},[115,46554,343],{"class":174},[115,46556,132],{"class":125},[115,46558,46559],{"class":117,"line":8058},[115,46560,38127],{"class":125},[115,46562,46563,46565,46567,46569],{"class":117,"line":9717},[115,46564,30846],{"class":174},[115,46566,42221],{"class":125},[115,46568,171],{"class":121},[115,46570,38010],{"class":125},[115,46572,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601],{"class":117,"line":9742},[115,46574,42230],{"class":125},[115,46576,42160],{"class":174},[115,46578,503],{"class":125},[115,46580,329],{"class":174},[115,46582,42239],{"class":125},[115,46584,335],{"class":174},[115,46586,503],{"class":125},[115,46588,32071],{"class":174},[115,46590,42248],{"class":125},[115,46592,726],{"class":174},[115,46594,503],{"class":125},[115,46596,323],{"class":174},[115,46598,42257],{"class":125},[115,46600,323],{"class":174},[115,46602,38048],{"class":125},[115,46604,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633],{"class":117,"line":9765},[115,46606,42230],{"class":125},[115,46608,34871],{"class":174},[115,46610,503],{"class":125},[115,46612,32071],{"class":174},[115,46614,42239],{"class":125},[115,46616,32071],{"class":174},[115,46618,503],{"class":125},[115,46620,42160],{"class":174},[115,46622,42248],{"class":125},[115,46624,323],{"class":174},[115,46626,503],{"class":125},[115,46628,335],{"class":174},[115,46630,42257],{"class":125},[115,46632,329],{"class":174},[115,46634,38048],{"class":125},[115,46636,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661],{"class":117,"line":9789},[115,46638,38098],{"class":125},[115,46640,30875],{"class":5217},[115,46642,171],{"class":121},[115,46644,197],{"class":174},[115,46646,503],{"class":125},[115,46648,30930],{"class":5217},[115,46650,171],{"class":121},[115,46652,203],{"class":174},[115,46654,503],{"class":125},[115,46656,30884],{"class":5217},[115,46658,171],{"class":121},[115,46660,343],{"class":174},[115,46662,132],{"class":125},[115,46664,46665],{"class":117,"line":9794},[115,46666,38127],{"class":125},[115,46668,46669,46671,46673,46675],{"class":117,"line":9799},[115,46670,30846],{"class":174},[115,46672,42332],{"class":125},[115,46674,171],{"class":121},[115,46676,38010],{"class":125},[115,46678,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707],{"class":117,"line":9804},[115,46680,42230],{"class":125},[115,46682,42343],{"class":174},[115,46684,503],{"class":125},[115,46686,42160],{"class":174},[115,46688,42239],{"class":125},[115,46690,335],{"class":174},[115,46692,503],{"class":125},[115,46694,42356],{"class":174},[115,46696,42248],{"class":125},[115,46698,726],{"class":174},[115,46700,503],{"class":125},[115,46702,732],{"class":174},[115,46704,42257],{"class":125},[115,46706,329],{"class":174},[115,46708,38048],{"class":125},[115,46710,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739],{"class":117,"line":9813},[115,46712,42230],{"class":125},[115,46714,38458],{"class":174},[115,46716,503],{"class":125},[115,46718,21049],{"class":174},[115,46720,42239],{"class":125},[115,46722,743],{"class":174},[115,46724,503],{"class":125},[115,46726,31502],{"class":174},[115,46728,42248],{"class":125},[115,46730,925],{"class":174},[115,46732,503],{"class":125},[115,46734,329],{"class":174},[115,46736,42257],{"class":125},[115,46738,329],{"class":174},[115,46740,38048],{"class":125},[115,46742,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771],{"class":117,"line":9818},[115,46744,42230],{"class":125},[115,46746,38458],{"class":174},[115,46748,503],{"class":125},[115,46750,32071],{"class":174},[115,46752,42239],{"class":125},[115,46754,32071],{"class":174},[115,46756,503],{"class":125},[115,46758,34871],{"class":174},[115,46760,42248],{"class":125},[115,46762,925],{"class":174},[115,46764,503],{"class":125},[115,46766,329],{"class":174},[115,46768,42257],{"class":125},[115,46770,329],{"class":174},[115,46772,38048],{"class":125},[115,46774,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803],{"class":117,"line":9824},[115,46776,42230],{"class":125},[115,46778,38458],{"class":174},[115,46780,503],{"class":125},[115,46782,743],{"class":174},[115,46784,42239],{"class":125},[115,46786,32071],{"class":174},[115,46788,503],{"class":125},[115,46790,42453],{"class":174},[115,46792,42248],{"class":125},[115,46794,323],{"class":174},[115,46796,503],{"class":125},[115,46798,329],{"class":174},[115,46800,42257],{"class":125},[115,46802,329],{"class":174},[115,46804,38048],{"class":125},[115,46806,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835],{"class":117,"line":9845},[115,46808,42230],{"class":125},[115,46810,42474],{"class":174},[115,46812,503],{"class":125},[115,46814,34871],{"class":174},[115,46816,42239],{"class":125},[115,46818,21049],{"class":174},[115,46820,503],{"class":125},[115,46822,42487],{"class":174},[115,46824,42248],{"class":125},[115,46826,323],{"class":174},[115,46828,503],{"class":125},[115,46830,32071],{"class":174},[115,46832,42257],{"class":125},[115,46834,32071],{"class":174},[115,46836,38048],{"class":125},[115,46838,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863],{"class":117,"line":9851},[115,46840,38098],{"class":125},[115,46842,30875],{"class":5217},[115,46844,171],{"class":121},[115,46846,197],{"class":174},[115,46848,503],{"class":125},[115,46850,30930],{"class":5217},[115,46852,171],{"class":121},[115,46854,203],{"class":174},[115,46856,503],{"class":125},[115,46858,30884],{"class":5217},[115,46860,171],{"class":121},[115,46862,343],{"class":174},[115,46864,132],{"class":125},[115,46866,46867],{"class":117,"line":9865},[115,46868,38127],{"class":125},[115,46870,46871,46873,46875,46877],{"class":117,"line":9871},[115,46872,30846],{"class":174},[115,46874,42540],{"class":125},[115,46876,171],{"class":121},[115,46878,38010],{"class":125},[115,46880,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909],{"class":117,"line":9898},[115,46882,42230],{"class":125},[115,46884,42551],{"class":174},[115,46886,503],{"class":125},[115,46888,34871],{"class":174},[115,46890,42239],{"class":125},[115,46892,21049],{"class":174},[115,46894,503],{"class":125},[115,46896,42487],{"class":174},[115,46898,42248],{"class":125},[115,46900,323],{"class":174},[115,46902,503],{"class":125},[115,46904,32071],{"class":174},[115,46906,42257],{"class":125},[115,46908,32071],{"class":174},[115,46910,38048],{"class":125},[115,46912,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941],{"class":117,"line":9907},[115,46914,42230],{"class":125},[115,46916,42551],{"class":174},[115,46918,503],{"class":125},[115,46920,34941],{"class":174},[115,46922,42239],{"class":125},[115,46924,42160],{"class":174},[115,46926,503],{"class":125},[115,46928,34941],{"class":174},[115,46930,42248],{"class":125},[115,46932,732],{"class":174},[115,46934,503],{"class":125},[115,46936,32071],{"class":174},[115,46938,42257],{"class":125},[115,46940,32071],{"class":174},[115,46942,38048],{"class":125},[115,46944,46945,46947,46949,46951,46953],{"class":117,"line":9913},[115,46946,42614],{"class":125},[115,46948,343],{"class":174},[115,46950,503],{"class":125},[115,46952,343],{"class":174},[115,46954,42623],{"class":125},[115,46956,46957],{"class":117,"line":9921},[115,46958,38791],{"class":125},[115,46960,46961,46963,46965,46967,46969],{"class":117,"line":9926},[115,46962,38796],{"class":125},[115,46964,42634],{"class":174},[115,46966,503],{"class":125},[115,46968,203],{"class":174},[115,46970,132],{"class":125},[115,46972,46973],{"class":117,"line":16605},[115,46974,38127],{"class":125},[115,46976,46977],{"class":117,"line":16611},[115,46978,42649],{"class":184},[115,46980,46981,46983,46985,46987,46989],{"class":117,"line":16634},[115,46982,3403],{"class":121},[115,46984,38869],{"class":125},[115,46986,26044],{"class":121},[115,46988,38874],{"class":174},[115,46990,38877],{"class":125},[115,46992,46993,46995,46997],{"class":117,"line":16640},[115,46994,4642],{"class":121},[115,46996,38889],{"class":174},[115,46998,38892],{"class":125},[115,47000,47001,47003,47005,47007,47009,47011,47013,47015,47017],{"class":117,"line":16663},[115,47002,38902],{"class":125},[115,47004,42676],{"class":5217},[115,47006,171],{"class":121},[115,47008,42681],{"class":230},[115,47010,503],{"class":125},[115,47012,38905],{"class":5217},[115,47014,171],{"class":121},[115,47016,38910],{"class":230},[115,47018,132],{"class":125},[115,47020,47021],{"class":117,"line":16677},[115,47022,42696],{"class":184},[115,47024,47025],{"class":117,"line":16697},[115,47026,42701],{"class":184},[115,47028,47029],{"class":117,"line":16703},[115,47030,42706],{"class":184},[115,47032,47033],{"class":117,"line":16714},[115,47034,42711],{"class":184},[115,47036,47037],{"class":117,"line":16737},[115,47038,42716],{"class":184},[115,47040,47041],{"class":117,"line":16759},[115,47042,42721],{"class":184},[115,47044,47045,47047,47049,47051,47053,47055],{"class":117,"line":16764},[115,47046,38922],{"class":121},[115,47048,38925],{"class":125},[115,47050,38928],{"class":121},[115,47052,38931],{"class":121},[115,47054,38934],{"class":174},[115,47056,3739],{"class":125},[115,47058,47059,47061,47063],{"class":117,"line":16770},[115,47060,38946],{"class":125},[115,47062,317],{"class":174},[115,47064,132],{"class":125},[115,47066,47067,47069,47071],{"class":117,"line":16784},[115,47068,42748],{"class":121},[115,47070,38889],{"class":174},[115,47072,38965],{"class":125},[115,47074,47075,47077,47079,47081,47083],{"class":117,"line":16797},[115,47076,42757],{"class":125},[115,47078,317],{"class":174},[115,47080,503],{"class":125},[115,47082,38987],{"class":174},[115,47084,132],{"class":125},[115,47086,47087,47089,47091,47093,47095,47097],{"class":117,"line":16802},[115,47088,42770],{"class":121},[115,47090,38925],{"class":125},[115,47092,38928],{"class":121},[115,47094,38931],{"class":121},[115,47096,38934],{"class":174},[115,47098,3739],{"class":125},[115,47100,47101,47103,47105],{"class":117,"line":16816},[115,47102,42785],{"class":125},[115,47104,317],{"class":174},[115,47106,132],{"class":125},[115,47108,47109],{"class":117,"line":16821},[115,47110,35166],{"class":184},[115,47112,47113,47115,47117],{"class":117,"line":16827},[115,47114,30802],{"class":121},[115,47116,31094],{"class":1963},[115,47118,31097],{"class":125},[115,47120,47121,47123,47125,47127],{"class":117,"line":16832},[115,47122,31102],{"class":125},[115,47124,171],{"class":121},[115,47126,30824],{"class":174},[115,47128,42812],{"class":125},[115,47130,47131,47133,47135,47137],{"class":117,"line":16846},[115,47132,31102],{"class":125},[115,47134,171],{"class":121},[115,47136,30824],{"class":174},[115,47138,42823],{"class":125},[115,47140,47141,47143,47145,47147],{"class":117,"line":16851},[115,47142,31102],{"class":125},[115,47144,171],{"class":121},[115,47146,30824],{"class":174},[115,47148,42834],{"class":125},[115,47150,47151,47153,47155,47157],{"class":117,"line":16856},[115,47152,31102],{"class":125},[115,47154,171],{"class":121},[115,47156,30824],{"class":174},[115,47158,42845],{"class":125},[115,47160,47161,47163,47165,47167],{"class":117,"line":16870},[115,47162,31102],{"class":125},[115,47164,171],{"class":121},[115,47166,30824],{"class":174},[115,47168,42856],{"class":125},[115,47170,47171,47173],{"class":117,"line":16882},[115,47172,14753],{"class":121},[115,47174,31210],{"class":125},[115,47176,47177],{"class":117,"line":16887},[115,47178,2400],{"emptyLinePlaceholder":42},[115,47180,47181],{"class":117,"line":16900},[115,47182,42871],{"class":184},[115,47184,47185,47187,47189,47191,47193],{"class":117,"line":16905},[115,47186,1531],{"class":121},[115,47188,31221],{"class":174},[115,47190,2949],{"class":121},[115,47192,31226],{"class":230},[115,47194,3739],{"class":125},[115,47196,47197,47199,47201,47203,47205,47207,47209,47211,47213],{"class":117,"line":16910},[115,47198,31238],{"class":125},[115,47200,171],{"class":121},[115,47202,30452],{"class":125},[115,47204,31245],{"class":230},[115,47206,1704],{"class":121},[115,47208,31250],{"class":125},[115,47210,1701],{"class":121},[115,47212,30477],{"class":230},[115,47214,132],{"class":125},[115,47216,47217,47219,47221],{"class":117,"line":16915},[115,47218,31290],{"class":125},[115,47220,171],{"class":121},[115,47222,42912],{"class":125},[115,47224,47225,47227,47229,47231,47233,47235,47237,47239],{"class":117,"line":16928},[115,47226,31300],{"class":174},[115,47228,31303],{"class":125},[115,47230,343],{"class":174},[115,47232,503],{"class":125},[115,47234,31502],{"class":174},[115,47236,503],{"class":125},[115,47238,31502],{"class":174},[115,47240,31316],{"class":125},[21999,47242,47244],{"id":47243},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47246,47247],{},"计算图片的均值与方差，用于训练中归一化处理操作",[106,47249,47251],{"className":30379,"code":47250,"language":30381,"meta":22,"style":22},"# 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",[112,47252,47253,47258,47271,47276,47282,47287,47297,47301,47306,47316,47320,47325,47335,47352,47356,47361,47373,47385,47416,47425,47435,47445,47449,47454,47469,47473,47478,47483,47488,47498,47503,47528,47532,47537,47552,47556,47569,47573,47578,47583,47588,47593,47598,47608,47618,47641,47649,47657,47665,47669,47681,47685,47690,47694,47698,47705,47725,47749,47756,47770,47775,47780,47784,47798,47802,47814],{"__ignoreMap":22},[115,47254,47255],{"class":117,"line":118},[115,47256,47257],{"class":184},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[115,47259,47260,47262,47265,47268],{"class":117,"line":37},[115,47261,30738],{"class":121},[115,47263,47264],{"class":174}," PIL",[115,47266,47267],{"class":121}," import",[115,47269,47270],{"class":125}," Image\n",[115,47272,47273],{"class":117,"line":1180},[115,47274,47275],{"class":184},"# os 用来处理文件夹和文件路径\n",[115,47277,47278,47280],{"class":117,"line":1195},[115,47279,30393],{"class":121},[115,47281,45306],{"class":125},[115,47283,47284],{"class":117,"line":1201},[115,47285,47286],{"class":184},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[115,47288,47289,47291,47293,47295],{"class":117,"line":1215},[115,47290,30393],{"class":121},[115,47292,31381],{"class":125},[115,47294,31384],{"class":121},[115,47296,31387],{"class":125},[115,47298,47299],{"class":117,"line":1221},[115,47300,2400],{"emptyLinePlaceholder":42},[115,47302,47303],{"class":117,"line":1312},[115,47304,47305],{"class":184},"# 文件夹路径，包含所有图片文件\n",[115,47307,47308,47311,47313],{"class":117,"line":1318},[115,47309,47310],{"class":125},"folder_path ",[115,47312,171],{"class":121},[115,47314,47315],{"class":230}," 'data_cat_dog'\n",[115,47317,47318],{"class":117,"line":1330},[115,47319,2400],{"emptyLinePlaceholder":42},[115,47321,47322],{"class":117,"line":1612},[115,47323,47324],{"class":184},"# 初始化累积变量\n",[115,47326,47327,47330,47332],{"class":117,"line":1617},[115,47328,47329],{"class":125},"total_pixels ",[115,47331,171],{"class":121},[115,47333,47334],{"class":174}," 0\n",[115,47336,47337,47340,47342,47345,47347,47349],{"class":117,"line":1623},[115,47338,47339],{"class":125},"sum_normalized_pixel_values ",[115,47341,171],{"class":121},[115,47343,47344],{"class":125}," np.zeros(",[115,47346,197],{"class":174},[115,47348,45809],{"class":125},[115,47350,47351],{"class":184},"# 如果是RGB图像，需要三个通道的均值和方差\n",[115,47353,47354],{"class":117,"line":1628},[115,47355,2400],{"emptyLinePlaceholder":42},[115,47357,47358],{"class":117,"line":1642},[115,47359,47360],{"class":184},"# 遍历文件夹中的图片文件\n",[115,47362,47363,47365,47368,47370],{"class":117,"line":1647},[115,47364,3025],{"class":121},[115,47366,47367],{"class":125}," root, dirs, files ",[115,47369,26044],{"class":121},[115,47371,47372],{"class":125}," os.walk(folder_path):\n",[115,47374,47375,47377,47380,47382],{"class":117,"line":1653},[115,47376,3201],{"class":121},[115,47378,47379],{"class":125}," filename ",[115,47381,26044],{"class":121},[115,47383,47384],{"class":125}," files:\n",[115,47386,47387,47389,47392,47395,47397,47400,47402,47405,47407,47410,47413],{"class":117,"line":1674},[115,47388,2497],{"class":121},[115,47390,47391],{"class":125}," filename.endswith((",[115,47393,47394],{"class":230},"'.jpg'",[115,47396,12436],{"class":125},[115,47398,47399],{"class":230},"'.jpeg'",[115,47401,12436],{"class":125},[115,47403,47404],{"class":230},"'.png'",[115,47406,12436],{"class":125},[115,47408,47409],{"class":230},"'.bmp'",[115,47411,47412],{"class":125},")):  ",[115,47414,47415],{"class":184},"# 可根据实际情况添加其他格式\n",[115,47417,47418,47420,47422],{"class":117,"line":1679},[115,47419,45674],{"class":125},[115,47421,171],{"class":121},[115,47423,47424],{"class":125}," os.path.join(root, filename)\n",[115,47426,47427,47430,47432],{"class":117,"line":1693},[115,47428,47429],{"class":125},"            image ",[115,47431,171],{"class":121},[115,47433,47434],{"class":125}," Image.open(image_path)\n",[115,47436,47437,47440,47442],{"class":117,"line":1698},[115,47438,47439],{"class":125},"            image_array ",[115,47441,171],{"class":121},[115,47443,47444],{"class":125}," np.array(image)\n",[115,47446,47447],{"class":117,"line":1727},[115,47448,2400],{"emptyLinePlaceholder":42},[115,47450,47451],{"class":117,"line":1732},[115,47452,47453],{"class":184},"            # 归一化像素值到0-1之间\n",[115,47455,47456,47459,47461,47464,47466],{"class":117,"line":1749},[115,47457,47458],{"class":125},"            normalized_image_array ",[115,47460,171],{"class":121},[115,47462,47463],{"class":125}," image_array ",[115,47465,709],{"class":121},[115,47467,47468],{"class":174}," 255.0\n",[115,47470,47471],{"class":117,"line":1754},[115,47472,2400],{"emptyLinePlaceholder":42},[115,47474,47475],{"class":117,"line":1759},[115,47476,47477],{"class":184},"            # print(image_path)\n",[115,47479,47480],{"class":117,"line":1764},[115,47481,47482],{"class":184},"            # print(normalized_image_array.shape)\n",[115,47484,47485],{"class":117,"line":1778},[115,47486,47487],{"class":184},"            # 累积归一化后的像素值和像素数量\n",[115,47489,47490,47493,47495],{"class":117,"line":1783},[115,47491,47492],{"class":125},"            total_pixels ",[115,47494,9478],{"class":121},[115,47496,47497],{"class":125}," normalized_image_array.size\n",[115,47499,47500],{"class":117,"line":2577},[115,47501,47502],{"class":184},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[115,47504,47505,47508,47510,47513,47516,47518,47520,47522,47524,47526],{"class":117,"line":2591},[115,47506,47507],{"class":125},"            sum_normalized_pixel_values ",[115,47509,9478],{"class":121},[115,47511,47512],{"class":125}," np.sum(normalized_image_array, ",[115,47514,47515],{"class":5217},"axis",[115,47517,171],{"class":121},[115,47519,126],{"class":125},[115,47521,317],{"class":174},[115,47523,12436],{"class":125},[115,47525,343],{"class":174},[115,47527,30498],{"class":125},[115,47529,47530],{"class":117,"line":2599},[115,47531,2400],{"emptyLinePlaceholder":42},[115,47533,47534],{"class":117,"line":2604},[115,47535,47536],{"class":184},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[115,47538,47539,47542,47544,47547,47549],{"class":117,"line":2610},[115,47540,47541],{"class":125},"mean ",[115,47543,171],{"class":121},[115,47545,47546],{"class":125}," sum_normalized_pixel_values ",[115,47548,709],{"class":121},[115,47550,47551],{"class":125}," total_pixels\n",[115,47553,47554],{"class":117,"line":2616},[115,47555,2400],{"emptyLinePlaceholder":42},[115,47557,47558,47561,47563,47565,47567],{"class":117,"line":2621},[115,47559,47560],{"class":125},"sum_squared_diff ",[115,47562,171],{"class":121},[115,47564,47344],{"class":125},[115,47566,197],{"class":174},[115,47568,132],{"class":125},[115,47570,47571],{"class":117,"line":7949},[115,47572,2400],{"emptyLinePlaceholder":42},[115,47574,47575],{"class":117,"line":7973},[115,47576,47577],{"class":184},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[115,47579,47580],{"class":117,"line":7978},[115,47581,47582],{"class":184},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[115,47584,47585],{"class":117,"line":7984},[115,47586,47587],{"class":184},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[115,47589,47590],{"class":117,"line":8011},[115,47591,47592],{"class":184},"# Image.open(image_path)：打开图片\n",[115,47594,47595],{"class":117,"line":8016},[115,47596,47597],{"class":184},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[115,47599,47600,47602,47604,47606],{"class":117,"line":8022},[115,47601,3025],{"class":121},[115,47603,47367],{"class":125},[115,47605,26044],{"class":121},[115,47607,47372],{"class":125},[115,47609,47610,47612,47614,47616],{"class":117,"line":8034},[115,47611,3201],{"class":121},[115,47613,47379],{"class":125},[115,47615,26044],{"class":121},[115,47617,47384],{"class":125},[115,47619,47620,47622,47624,47626,47628,47630,47632,47634,47636,47638],{"class":117,"line":8046},[115,47621,2497],{"class":121},[115,47623,47391],{"class":125},[115,47625,47394],{"class":230},[115,47627,12436],{"class":125},[115,47629,47399],{"class":230},[115,47631,12436],{"class":125},[115,47633,47404],{"class":230},[115,47635,12436],{"class":125},[115,47637,47409],{"class":230},[115,47639,47640],{"class":125},")):\n",[115,47642,47643,47645,47647],{"class":117,"line":8058},[115,47644,45674],{"class":125},[115,47646,171],{"class":121},[115,47648,47424],{"class":125},[115,47650,47651,47653,47655],{"class":117,"line":9717},[115,47652,47429],{"class":125},[115,47654,171],{"class":121},[115,47656,47434],{"class":125},[115,47658,47659,47661,47663],{"class":117,"line":9742},[115,47660,47439],{"class":125},[115,47662,171],{"class":121},[115,47664,47444],{"class":125},[115,47666,47667],{"class":117,"line":9765},[115,47668,47453],{"class":184},[115,47670,47671,47673,47675,47677,47679],{"class":117,"line":9789},[115,47672,47458],{"class":125},[115,47674,171],{"class":121},[115,47676,47463],{"class":125},[115,47678,709],{"class":121},[115,47680,47468],{"class":174},[115,47682,47683],{"class":117,"line":9794},[115,47684,47482],{"class":184},[115,47686,47687],{"class":117,"line":9799},[115,47688,47689],{"class":184},"            # print(mean.shape)\n",[115,47691,47692],{"class":117,"line":9804},[115,47693,47477],{"class":184},[115,47695,47696],{"class":117,"line":9813},[115,47697,2400],{"emptyLinePlaceholder":42},[115,47699,47700,47703],{"class":117,"line":9818},[115,47701,47702],{"class":121},"            try",[115,47704,3739],{"class":125},[115,47706,47707,47710,47712,47715,47717,47720,47722],{"class":117,"line":9824},[115,47708,47709],{"class":125},"                diff ",[115,47711,171],{"class":121},[115,47713,47714],{"class":125}," (normalized_image_array ",[115,47716,657],{"class":121},[115,47718,47719],{"class":125}," mean) ",[115,47721,10662],{"class":121},[115,47723,47724],{"class":174}," 2\n",[115,47726,47727,47730,47732,47735,47737,47739,47741,47743,47745,47747],{"class":117,"line":9845},[115,47728,47729],{"class":125},"                sum_squared_diff ",[115,47731,9478],{"class":121},[115,47733,47734],{"class":125}," np.sum(diff, ",[115,47736,47515],{"class":5217},[115,47738,171],{"class":121},[115,47740,126],{"class":125},[115,47742,317],{"class":174},[115,47744,12436],{"class":125},[115,47746,343],{"class":174},[115,47748,30498],{"class":125},[115,47750,47751,47754],{"class":117,"line":9851},[115,47752,47753],{"class":121},"            except",[115,47755,3739],{"class":125},[115,47757,47758,47761,47763,47765,47768],{"class":117,"line":9865},[115,47759,47760],{"class":174},"                print",[115,47762,126],{"class":125},[115,47764,178],{"class":121},[115,47766,47767],{"class":230},"\"捕获到自定义异常\"",[115,47769,132],{"class":125},[115,47771,47772],{"class":117,"line":9871},[115,47773,47774],{"class":184},"            # diff = (normalized_image_array - mean) ** 2\n",[115,47776,47777],{"class":117,"line":9898},[115,47778,47779],{"class":184},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[115,47781,47782],{"class":117,"line":9907},[115,47783,2400],{"emptyLinePlaceholder":42},[115,47785,47786,47789,47791,47794,47796],{"class":117,"line":9913},[115,47787,47788],{"class":125},"variance ",[115,47790,171],{"class":121},[115,47792,47793],{"class":125}," sum_squared_diff ",[115,47795,709],{"class":121},[115,47797,47551],{"class":125},[115,47799,47800],{"class":117,"line":9921},[115,47801,2400],{"emptyLinePlaceholder":42},[115,47803,47804,47806,47808,47811],{"class":117,"line":9926},[115,47805,30416],{"class":174},[115,47807,126],{"class":125},[115,47809,47810],{"class":230},"\"Mean:\"",[115,47812,47813],{"class":125},", mean)\n",[115,47815,47816,47818,47820,47823],{"class":117,"line":16605},[115,47817,30416],{"class":174},[115,47819,126],{"class":125},[115,47821,47822],{"class":230},"\"Variance:\"",[115,47824,47825],{"class":125},", variance)\n",[106,47827,47829],{"className":30379,"code":47828,"language":30381,"meta":22,"style":22},"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",[112,47830,47831,47837,47843,47853,47859,47869,47883,47893,47903,47913,47917,47927,47937,47941,47945,47953,47958,47963,47982,47986,47991,47996,48001,48006,48047,48052,48062,48067,48080,48085,48090,48095,48100,48105,48109,48114,48119,48141,48145,48177,48191,48201,48211,48215,48225,48239,48249,48259,48269,48275,48279,48283,48287,48291,48295,48303,48323,48327,48331,48335,48339,48355,48359,48363,48371,48375,48379,48387,48391,48395,48399,48407,48411,48415,48419,48427,48431,48439,48443,48451,48455,48463,48467,48475,48479,48483,48491,48495,48499,48511,48535,48549,48553,48557,48561,48569,48573,48581,48585,48593,48597,48605,48609,48617,48621,48629,48633,48645,48649,48657,48661,48669,48673,48677,48681,48685,48693,48697,48713,48717,48725,48729,48733,48737,48741,48745,48749,48753,48769,48773,48785,48789,48801,48805,48817,48821,48829,48833,48841,48845,48849,48853,48859,48863,48871,48875,48891,48895,48903,48907,48923,48935,48939,48951,48955,48959,48967,48971,48975,48983,48987,48995,48999,49007,49011,49015,49057,49099,49103,49107,49123,49127,49143,49147,49151,49159,49163,49167,49179,49217,49221,49225,49233,49237,49251,49261,49267,49273,49279,49285,49289,49293,49299,49303,49307,49315,49319,49337,49341,49345,49349,49365,49369,49373,49377,49381,49385,49405,49425,49429,49433,49437,49445,49453,49457,49473,49493,49513,49517,49522,49531,49540,49545,49550,49555,49568,49573,49582,49591,49608],{"__ignoreMap":22},[115,47832,47833,47835],{"class":117,"line":118},[115,47834,30393],{"class":121},[115,47836,31823],{"class":125},[115,47838,47839,47841],{"class":117,"line":37},[115,47840,30393],{"class":121},[115,47842,31830],{"class":125},[115,47844,47845,47847,47849,47851],{"class":117,"line":1180},[115,47846,30393],{"class":121},[115,47848,31841],{"class":125},[115,47850,31384],{"class":121},[115,47852,31846],{"class":125},[115,47854,47855,47857],{"class":117,"line":1195},[115,47856,30393],{"class":121},[115,47858,30396],{"class":125},[115,47860,47861,47863,47865,47867],{"class":117,"line":1201},[115,47862,30738],{"class":121},[115,47864,31416],{"class":125},[115,47866,30393],{"class":121},[115,47868,31863],{"class":125},[115,47870,47871,47873,47875,47877,47880],{"class":117,"line":1215},[115,47872,30738],{"class":121},[115,47874,31369],{"class":125},[115,47876,30393],{"class":121},[115,47878,47879],{"class":125}," ImageFolder ",[115,47881,47882],{"class":184},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[115,47884,47885,47887,47889,47891],{"class":117,"line":1221},[115,47886,30738],{"class":121},[115,47888,31399],{"class":125},[115,47890,30393],{"class":121},[115,47892,31404],{"class":125},[115,47894,47895,47897,47899,47901],{"class":117,"line":1312},[115,47896,30393],{"class":121},[115,47898,31416],{"class":125},[115,47900,31384],{"class":121},[115,47902,31421],{"class":125},[115,47904,47905,47907,47909,47911],{"class":117,"line":1318},[115,47906,30393],{"class":121},[115,47908,31433],{"class":125},[115,47910,31384],{"class":121},[115,47912,31438],{"class":125},[115,47914,47915],{"class":117,"line":1330},[115,47916,31908],{"class":184},[115,47918,47919,47921,47923,47925],{"class":117,"line":1612},[115,47920,30738],{"class":121},[115,47922,31915],{"class":125},[115,47924,30393],{"class":121},[115,47926,43032],{"class":125},[115,47928,47929,47931,47933,47935],{"class":117,"line":1617},[115,47930,30738],{"class":121},[115,47932,30741],{"class":125},[115,47934,30393],{"class":121},[115,47936,30746],{"class":125},[115,47938,47939],{"class":117,"line":1623},[115,47940,2400],{"emptyLinePlaceholder":42},[115,47942,47943],{"class":117,"line":1628},[115,47944,31943],{"class":184},[115,47946,47947,47949,47951],{"class":117,"line":1642},[115,47948,31948],{"class":121},[115,47950,31951],{"class":1963},[115,47952,31954],{"class":125},[115,47954,47955],{"class":117,"line":1647},[115,47956,47957],{"class":184},"    # 导入自己的数据集，并进行数据处理\n",[115,47959,47960],{"class":117,"line":1653},[115,47961,47962],{"class":184},"    # 定义数据集的路径\n",[115,47964,47965,47968,47970,47972,47974,47976,47980],{"class":117,"line":1674},[115,47966,47967],{"class":174},"    ROOT_PATH",[115,47969,171],{"class":121},[115,47971,795],{"class":121},[115,47973,376],{"class":230},[115,47975,683],{"class":174},[115,47977,47979],{"class":47978},"sA_wV","\u002Fdata\u002Ftrain",[115,47981,25134],{"class":230},[115,47983,47984],{"class":117,"line":1679},[115,47985,2400],{"emptyLinePlaceholder":42},[115,47987,47988],{"class":117,"line":1693},[115,47989,47990],{"class":184},"    # 定义归一化方法\n",[115,47992,47993],{"class":117,"line":1698},[115,47994,47995],{"class":184},"    # 这里需要先计算一下数据集的均值和方差\n",[115,47997,47998],{"class":117,"line":1727},[115,47999,48000],{"class":184},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[115,48002,48003],{"class":117,"line":1732},[115,48004,48005],{"class":184},"    # 第一个参数是均值，第二个参数是方差\n",[115,48007,48008,48011,48013,48016,48019,48021,48024,48026,48029,48032,48035,48037,48040,48042,48045],{"class":117,"line":1749},[115,48009,48010],{"class":125},"    normalize",[115,48012,171],{"class":121},[115,48014,48015],{"class":125},"transforms.Normalize([",[115,48017,48018],{"class":174},"0.162",[115,48020,503],{"class":125},[115,48022,48023],{"class":174},"0.151",[115,48025,503],{"class":125},[115,48027,48028],{"class":174},"0.138",[115,48030,48031],{"class":125},"],[",[115,48033,48034],{"class":174},"0.058",[115,48036,503],{"class":125},[115,48038,48039],{"class":174},"0.052",[115,48041,503],{"class":125},[115,48043,48044],{"class":174},"0.048",[115,48046,4657],{"class":125},[115,48048,48049],{"class":117,"line":1754},[115,48050,48051],{"class":184},"    # 定义数据集处理方法变量\n",[115,48053,48054,48057,48059],{"class":117,"line":1759},[115,48055,48056],{"class":125},"    train_transform",[115,48058,171],{"class":121},[115,48060,48061],{"class":125},"transforms.Compose([\n",[115,48063,48064],{"class":117,"line":1764},[115,48065,48066],{"class":184},"        # 调整图像大小为224*224\n",[115,48068,48069,48072,48074,48076,48078],{"class":117,"line":1778},[115,48070,48071],{"class":125},"        transforms.Resize((",[115,48073,31502],{"class":174},[115,48075,503],{"class":125},[115,48077,31502],{"class":174},[115,48079,42623],{"class":125},[115,48081,48082],{"class":117,"line":1783},[115,48083,48084],{"class":184},"        # 将图像转换为张量\n",[115,48086,48087],{"class":117,"line":2577},[115,48088,48089],{"class":125},"        transforms.ToTensor(),\n",[115,48091,48092],{"class":117,"line":2591},[115,48093,48094],{"class":125},"        normalize])\n",[115,48096,48097],{"class":117,"line":2599},[115,48098,48099],{"class":184},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[115,48101,48102],{"class":117,"line":2604},[115,48103,48104],{"class":184},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[115,48106,48107],{"class":117,"line":2610},[115,48108,2400],{"emptyLinePlaceholder":42},[115,48110,48111],{"class":117,"line":2616},[115,48112,48113],{"class":184},"    # 加载数据集\n",[115,48115,48116],{"class":117,"line":2621},[115,48117,48118],{"class":184},"    # 传入数据集路径与处理方法\n",[115,48120,48121,48123,48125,48128,48131,48133,48136,48138],{"class":117,"line":7949},[115,48122,31959],{"class":125},[115,48124,171],{"class":121},[115,48126,48127],{"class":125},"ImageFolder(",[115,48129,48130],{"class":174},"ROOT_PATH",[115,48132,503],{"class":125},[115,48134,48135],{"class":5217},"transform",[115,48137,171],{"class":121},[115,48139,48140],{"class":125},"train_transform)\n",[115,48142,48143],{"class":117,"line":7973},[115,48144,2400],{"emptyLinePlaceholder":42},[115,48146,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167,48169,48171,48173,48175],{"class":117,"line":7978},[115,48148,32011],{"class":125},[115,48150,171],{"class":121},[115,48152,32016],{"class":125},[115,48154,32019],{"class":174},[115,48156,126],{"class":125},[115,48158,32024],{"class":174},[115,48160,580],{"class":121},[115,48162,7359],{"class":174},[115,48164,32031],{"class":125},[115,48166,32019],{"class":174},[115,48168,126],{"class":125},[115,48170,32038],{"class":174},[115,48172,580],{"class":121},[115,48174,7359],{"class":174},[115,48176,32045],{"class":125},[115,48178,48179,48181,48183,48185,48187,48189],{"class":117,"line":7984},[115,48180,32050],{"class":125},[115,48182,171],{"class":121},[115,48184,32055],{"class":125},[115,48186,31538],{"class":5217},[115,48188,171],{"class":121},[115,48190,31543],{"class":125},[115,48192,48193,48195,48197,48199],{"class":117,"line":8011},[115,48194,32066],{"class":5217},[115,48196,171],{"class":121},[115,48198,323],{"class":174},[115,48200,31467],{"class":125},[115,48202,48203,48205,48207,48209],{"class":117,"line":8016},[115,48204,32078],{"class":5217},[115,48206,171],{"class":121},[115,48208,31477],{"class":174},[115,48210,31467],{"class":125},[115,48212,48213],{"class":117,"line":8022},[115,48214,32089],{"class":184},[115,48216,48217,48219,48221,48223],{"class":117,"line":8034},[115,48218,32094],{"class":5217},[115,48220,171],{"class":121},[115,48222,520],{"class":174},[115,48224,132],{"class":125},[115,48226,48227,48229,48231,48233,48235,48237],{"class":117,"line":8046},[115,48228,32105],{"class":125},[115,48230,171],{"class":121},[115,48232,31535],{"class":125},[115,48234,31538],{"class":5217},[115,48236,171],{"class":121},[115,48238,32116],{"class":125},[115,48240,48241,48243,48245,48247],{"class":117,"line":8058},[115,48242,32121],{"class":5217},[115,48244,171],{"class":121},[115,48246,323],{"class":174},[115,48248,31467],{"class":125},[115,48250,48251,48253,48255,48257],{"class":117,"line":9717},[115,48252,32132],{"class":5217},[115,48254,171],{"class":121},[115,48256,31477],{"class":174},[115,48258,31467],{"class":125},[115,48260,48261,48263,48265,48267],{"class":117,"line":9742},[115,48262,32143],{"class":5217},[115,48264,171],{"class":121},[115,48266,520],{"class":174},[115,48268,132],{"class":125},[115,48270,48271,48273],{"class":117,"line":9765},[115,48272,4090],{"class":121},[115,48274,32156],{"class":125},[115,48276,48277],{"class":117,"line":9789},[115,48278,2400],{"emptyLinePlaceholder":42},[115,48280,48281],{"class":117,"line":9794},[115,48282,32165],{"class":184},[115,48284,48285],{"class":117,"line":9799},[115,48286,32170],{"class":184},[115,48288,48289],{"class":117,"line":9804},[115,48290,2400],{"emptyLinePlaceholder":42},[115,48292,48293],{"class":117,"line":9813},[115,48294,32179],{"class":184},[115,48296,48297,48299,48301],{"class":117,"line":9818},[115,48298,31948],{"class":121},[115,48300,32186],{"class":1963},[115,48302,32189],{"class":125},[115,48304,48305,48307,48309,48311,48313,48315,48317,48319,48321],{"class":117,"line":9824},[115,48306,31238],{"class":125},[115,48308,171],{"class":121},[115,48310,30452],{"class":125},[115,48312,31245],{"class":230},[115,48314,1704],{"class":121},[115,48316,31250],{"class":125},[115,48318,1701],{"class":121},[115,48320,32208],{"class":230},[115,48322,132],{"class":125},[115,48324,48325],{"class":117,"line":9845},[115,48326,2400],{"emptyLinePlaceholder":42},[115,48328,48329],{"class":117,"line":9851},[115,48330,32223],{"class":184},[115,48332,48333],{"class":117,"line":9865},[115,48334,32228],{"class":184},[115,48336,48337],{"class":117,"line":9871},[115,48338,32233],{"class":184},[115,48340,48341,48343,48345,48347,48349,48351,48353],{"class":117,"line":9898},[115,48342,32238],{"class":125},[115,48344,171],{"class":121},[115,48346,32243],{"class":125},[115,48348,32246],{"class":5217},[115,48350,171],{"class":121},[115,48352,32251],{"class":174},[115,48354,132],{"class":125},[115,48356,48357],{"class":117,"line":9907},[115,48358,2400],{"emptyLinePlaceholder":42},[115,48360,48361],{"class":117,"line":9913},[115,48362,32262],{"class":184},[115,48364,48365,48367,48369],{"class":117,"line":9921},[115,48366,32267],{"class":125},[115,48368,171],{"class":121},[115,48370,32272],{"class":125},[115,48372,48373],{"class":117,"line":9926},[115,48374,2400],{"emptyLinePlaceholder":42},[115,48376,48377],{"class":117,"line":16605},[115,48378,32281],{"class":184},[115,48380,48381,48383,48385],{"class":117,"line":16611},[115,48382,31290],{"class":125},[115,48384,171],{"class":121},[115,48386,32290],{"class":125},[115,48388,48389],{"class":117,"line":16634},[115,48390,32295],{"class":184},[115,48392,48393],{"class":117,"line":16640},[115,48394,32300],{"class":184},[115,48396,48397],{"class":117,"line":16663},[115,48398,32305],{"class":184},[115,48400,48401,48403,48405],{"class":117,"line":16677},[115,48402,32310],{"class":125},[115,48404,171],{"class":121},[115,48406,32315],{"class":125},[115,48408,48409],{"class":117,"line":16697},[115,48410,2400],{"emptyLinePlaceholder":42},[115,48412,48413],{"class":117,"line":16703},[115,48414,32328],{"class":184},[115,48416,48417],{"class":117,"line":16714},[115,48418,32333],{"class":184},[115,48420,48421,48423,48425],{"class":117,"line":16737},[115,48422,32338],{"class":125},[115,48424,171],{"class":121},[115,48426,32343],{"class":174},[115,48428,48429],{"class":117,"line":16759},[115,48430,32348],{"class":184},[115,48432,48433,48435,48437],{"class":117,"line":16764},[115,48434,32353],{"class":125},[115,48436,171],{"class":121},[115,48438,32358],{"class":125},[115,48440,48441],{"class":117,"line":16770},[115,48442,32363],{"class":184},[115,48444,48445,48447,48449],{"class":117,"line":16784},[115,48446,32368],{"class":125},[115,48448,171],{"class":121},[115,48450,32358],{"class":125},[115,48452,48453],{"class":117,"line":16797},[115,48454,32377],{"class":184},[115,48456,48457,48459,48461],{"class":117,"line":16802},[115,48458,32382],{"class":125},[115,48460,171],{"class":121},[115,48462,32358],{"class":125},[115,48464,48465],{"class":117,"line":16816},[115,48466,32391],{"class":184},[115,48468,48469,48471,48473],{"class":117,"line":16821},[115,48470,32396],{"class":125},[115,48472,171],{"class":121},[115,48474,32358],{"class":125},[115,48476,48477],{"class":117,"line":16827},[115,48478,2400],{"emptyLinePlaceholder":42},[115,48480,48481],{"class":117,"line":16832},[115,48482,32409],{"class":184},[115,48484,48485,48487,48489],{"class":117,"line":16846},[115,48486,32414],{"class":125},[115,48488,171],{"class":121},[115,48490,32419],{"class":125},[115,48492,48493],{"class":117,"line":16851},[115,48494,2400],{"emptyLinePlaceholder":42},[115,48496,48497],{"class":117,"line":16856},[115,48498,32432],{"class":184},[115,48500,48501,48503,48505,48507,48509],{"class":117,"line":16870},[115,48502,3201],{"class":121},[115,48504,32439],{"class":125},[115,48506,26044],{"class":121},[115,48508,32444],{"class":174},[115,48510,32447],{"class":125},[115,48512,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533],{"class":117,"line":16882},[115,48514,32452],{"class":174},[115,48516,126],{"class":125},[115,48518,32457],{"class":230},[115,48520,32460],{"class":174},[115,48522,709],{"class":230},[115,48524,32460],{"class":174},[115,48526,376],{"class":230},[115,48528,32469],{"class":125},[115,48530,657],{"class":121},[115,48532,343],{"class":174},[115,48534,30498],{"class":125},[115,48536,48537,48539,48541,48543,48545,48547],{"class":117,"line":16887},[115,48538,32452],{"class":174},[115,48540,126],{"class":125},[115,48542,32484],{"class":230},[115,48544,580],{"class":121},[115,48546,571],{"class":174},[115,48548,132],{"class":125},[115,48550,48551],{"class":117,"line":16900},[115,48552,2400],{"emptyLinePlaceholder":42},[115,48554,48555],{"class":117,"line":16905},[115,48556,32499],{"class":184},[115,48558,48559],{"class":117,"line":16910},[115,48560,32504],{"class":184},[115,48562,48563,48565,48567],{"class":117,"line":16915},[115,48564,32509],{"class":125},[115,48566,171],{"class":121},[115,48568,32343],{"class":174},[115,48570,48571],{"class":117,"line":16928},[115,48572,32518],{"class":184},[115,48574,48575,48577,48579],{"class":117,"line":16933},[115,48576,32523],{"class":125},[115,48578,171],{"class":121},[115,48580,3085],{"class":174},[115,48582,48583],{"class":117,"line":32634},[115,48584,32532],{"class":184},[115,48586,48587,48589,48591],{"class":117,"line":32640},[115,48588,32537],{"class":125},[115,48590,171],{"class":121},[115,48592,32343],{"class":174},[115,48594,48595],{"class":117,"line":32646},[115,48596,32546],{"class":184},[115,48598,48599,48601,48603],{"class":117,"line":32652},[115,48600,32551],{"class":125},[115,48602,171],{"class":121},[115,48604,3085],{"class":174},[115,48606,48607],{"class":117,"line":32658},[115,48608,32560],{"class":184},[115,48610,48611,48613,48615],{"class":117,"line":32669},[115,48612,32565],{"class":125},[115,48614,171],{"class":121},[115,48616,3085],{"class":174},[115,48618,48619],{"class":117,"line":32675},[115,48620,32574],{"class":184},[115,48622,48623,48625,48627],{"class":117,"line":32695},[115,48624,32579],{"class":125},[115,48626,171],{"class":121},[115,48628,3085],{"class":174},[115,48630,48631],{"class":117,"line":32701},[115,48632,32588],{"class":184},[115,48634,48635,48637,48639,48641,48643],{"class":117,"line":32712},[115,48636,3403],{"class":121},[115,48638,31602],{"class":125},[115,48640,26044],{"class":121},[115,48642,31607],{"class":174},[115,48644,32601],{"class":125},[115,48646,48647],{"class":117,"line":32718},[115,48648,32606],{"class":184},[115,48650,48651,48653,48655],{"class":117,"line":32724},[115,48652,32611],{"class":125},[115,48654,171],{"class":121},[115,48656,32616],{"class":125},[115,48658,48659],{"class":117,"line":32730},[115,48660,32621],{"class":184},[115,48662,48663,48665,48667],{"class":117,"line":32736},[115,48664,32626],{"class":125},[115,48666,171],{"class":121},[115,48668,32631],{"class":125},[115,48670,48671],{"class":117,"line":32742},[115,48672,32637],{"class":184},[115,48674,48675],{"class":117,"line":32748},[115,48676,32643],{"class":125},[115,48678,48679],{"class":117,"line":32754},[115,48680,32649],{"class":184},[115,48682,48683],{"class":117,"line":32774},[115,48684,32655],{"class":184},[115,48686,48687,48689,48691],{"class":117,"line":32780},[115,48688,32661],{"class":125},[115,48690,171],{"class":121},[115,48692,32666],{"class":125},[115,48694,48695],{"class":117,"line":32796},[115,48696,32672],{"class":184},[115,48698,48699,48701,48703,48705,48707,48709,48711],{"class":117,"line":32802},[115,48700,32678],{"class":125},[115,48702,171],{"class":121},[115,48704,32683],{"class":125},[115,48706,32686],{"class":5217},[115,48708,171],{"class":121},[115,48710,343],{"class":174},[115,48712,132],{"class":125},[115,48714,48715],{"class":117,"line":32816},[115,48716,32698],{"class":184},[115,48718,48719,48721,48723],{"class":117,"line":32822},[115,48720,32704],{"class":125},[115,48722,171],{"class":121},[115,48724,32709],{"class":125},[115,48726,48727],{"class":117,"line":32837},[115,48728,32715],{"class":184},[115,48730,48731],{"class":117,"line":32843},[115,48732,32721],{"class":125},[115,48734,48735],{"class":117,"line":32852},[115,48736,32727],{"class":184},[115,48738,48739],{"class":117,"line":32858},[115,48740,32733],{"class":125},[115,48742,48743],{"class":117,"line":32867},[115,48744,32739],{"class":184},[115,48746,48747],{"class":117,"line":32873},[115,48748,32745],{"class":125},[115,48750,48751],{"class":117,"line":32879},[115,48752,32751],{"class":184},[115,48754,48755,48757,48759,48761,48763,48765,48767],{"class":117,"line":32888},[115,48756,32757],{"class":125},[115,48758,9478],{"class":121},[115,48760,32762],{"class":125},[115,48762,580],{"class":121},[115,48764,32767],{"class":125},[115,48766,317],{"class":174},[115,48768,132],{"class":125},[115,48770,48771],{"class":117,"line":32894},[115,48772,32777],{"class":184},[115,48774,48775,48777,48779,48781,48783],{"class":117,"line":32905},[115,48776,32783],{"class":125},[115,48778,9478],{"class":121},[115,48780,32788],{"class":125},[115,48782,2949],{"class":121},[115,48784,32793],{"class":125},[115,48786,48787],{"class":117,"line":32911},[115,48788,32799],{"class":184},[115,48790,48791,48793,48795,48797,48799],{"class":117,"line":32930},[115,48792,32805],{"class":125},[115,48794,9478],{"class":121},[115,48796,32767],{"class":125},[115,48798,317],{"class":174},[115,48800,132],{"class":125},[115,48802,48803],{"class":117,"line":32936},[115,48804,32819],{"class":184},[115,48806,48807,48809,48811,48813,48815],{"class":117,"line":32947},[115,48808,3403],{"class":121},[115,48810,32827],{"class":125},[115,48812,26044],{"class":121},[115,48814,31607],{"class":174},[115,48816,32834],{"class":125},[115,48818,48819],{"class":117,"line":32953},[115,48820,32840],{"class":184},[115,48822,48823,48825,48827],{"class":117,"line":32973},[115,48824,32611],{"class":125},[115,48826,171],{"class":121},[115,48828,32616],{"class":125},[115,48830,48831],{"class":117,"line":32989},[115,48832,32855],{"class":184},[115,48834,48835,48837,48839],{"class":117,"line":32995},[115,48836,32626],{"class":125},[115,48838,171],{"class":121},[115,48840,32631],{"class":125},[115,48842,48843],{"class":117,"line":33009},[115,48844,32870],{"class":184},[115,48846,48847],{"class":117,"line":33015},[115,48848,32876],{"class":125},[115,48850,48851],{"class":117,"line":33021},[115,48852,36357],{"class":184},[115,48854,48855,48857],{"class":117,"line":33032},[115,48856,32882],{"class":121},[115,48858,32885],{"class":125},[115,48860,48861],{"class":117,"line":33038},[115,48862,32891],{"class":184},[115,48864,48865,48867,48869],{"class":117,"line":33044},[115,48866,36372],{"class":125},[115,48868,171],{"class":121},[115,48870,32666],{"class":125},[115,48872,48873],{"class":117,"line":33054},[115,48874,32908],{"class":184},[115,48876,48877,48879,48881,48883,48885,48887,48889],{"class":117,"line":33060},[115,48878,36385],{"class":125},[115,48880,171],{"class":121},[115,48882,32683],{"class":125},[115,48884,32686],{"class":5217},[115,48886,171],{"class":121},[115,48888,343],{"class":174},[115,48890,132],{"class":125},[115,48892,48893],{"class":117,"line":33071},[115,48894,32933],{"class":184},[115,48896,48897,48899,48901],{"class":117,"line":33077},[115,48898,36406],{"class":125},[115,48900,171],{"class":121},[115,48902,32709],{"class":125},[115,48904,48905],{"class":117,"line":33087},[115,48906,32950],{"class":184},[115,48908,48909,48911,48913,48915,48917,48919,48921],{"class":117,"line":33092},[115,48910,36419],{"class":125},[115,48912,9478],{"class":121},[115,48914,36424],{"class":125},[115,48916,580],{"class":121},[115,48918,32767],{"class":125},[115,48920,317],{"class":174},[115,48922,132],{"class":125},[115,48924,48925,48927,48929,48931,48933],{"class":117,"line":33098},[115,48926,36437],{"class":125},[115,48928,9478],{"class":121},[115,48930,32788],{"class":125},[115,48932,2949],{"class":121},[115,48934,32793],{"class":125},[115,48936,48937],{"class":117,"line":33147},[115,48938,36450],{"class":184},[115,48940,48941,48943,48945,48947,48949],{"class":117,"line":33194},[115,48942,36455],{"class":125},[115,48944,9478],{"class":121},[115,48946,32767],{"class":125},[115,48948,317],{"class":174},[115,48950,132],{"class":125},[115,48952,48953],{"class":117,"line":33199},[115,48954,33012],{"class":184},[115,48956,48957],{"class":117,"line":33205},[115,48958,33018],{"class":184},[115,48960,48961,48963,48965],{"class":117,"line":33224},[115,48962,33024],{"class":125},[115,48964,709],{"class":121},[115,48966,33029],{"class":125},[115,48968,48969],{"class":117,"line":33230},[115,48970,33035],{"class":184},[115,48972,48973],{"class":117,"line":33250},[115,48974,33041],{"class":184},[115,48976,48977,48979,48981],{"class":117,"line":33256},[115,48978,33047],{"class":125},[115,48980,709],{"class":121},[115,48982,33029],{"class":125},[115,48984,48985],{"class":117,"line":33262},[115,48986,33057],{"class":184},[115,48988,48989,48991,48993],{"class":117,"line":33272},[115,48990,33063],{"class":125},[115,48992,709],{"class":121},[115,48994,33068],{"class":125},[115,48996,48997],{"class":117,"line":33277},[115,48998,33074],{"class":184},[115,49000,49001,49003,49005],{"class":117,"line":33283},[115,49002,33080],{"class":125},[115,49004,709],{"class":121},[115,49006,33068],{"class":125},[115,49008,49009],{"class":117,"line":33299},[115,49010,2400],{"emptyLinePlaceholder":42},[115,49012,49013],{"class":117,"line":33344},[115,49014,33095],{"class":184},[115,49016,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055],{"class":117,"line":33350},[115,49018,32452],{"class":174},[115,49020,126],{"class":125},[115,49022,3592],{"class":230},[115,49024,32460],{"class":174},[115,49026,33109],{"class":230},[115,49028,1021],{"class":174},[115,49030,33114],{"class":121},[115,49032,1071],{"class":174},[115,49034,33119],{"class":230},[115,49036,1021],{"class":174},[115,49038,33114],{"class":121},[115,49040,1071],{"class":174},[115,49042,3592],{"class":230},[115,49044,33130],{"class":125},[115,49046,657],{"class":121},[115,49048,343],{"class":174},[115,49050,33137],{"class":125},[115,49052,657],{"class":121},[115,49054,343],{"class":174},[115,49056,33144],{"class":125},[115,49058,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097],{"class":117,"line":33356},[115,49060,32452],{"class":174},[115,49062,126],{"class":125},[115,49064,3592],{"class":230},[115,49066,32460],{"class":174},[115,49068,33158],{"class":230},[115,49070,1021],{"class":174},[115,49072,33114],{"class":121},[115,49074,1071],{"class":174},[115,49076,33167],{"class":230},[115,49078,1021],{"class":174},[115,49080,33114],{"class":121},[115,49082,1071],{"class":174},[115,49084,3592],{"class":230},[115,49086,33178],{"class":125},[115,49088,657],{"class":121},[115,49090,343],{"class":174},[115,49092,33185],{"class":125},[115,49094,657],{"class":121},[115,49096,343],{"class":174},[115,49098,33144],{"class":125},[115,49100,49101],{"class":117,"line":33362},[115,49102,2400],{"emptyLinePlaceholder":42},[115,49104,49105],{"class":117,"line":33373},[115,49106,33202],{"class":184},[115,49108,49109,49111,49113,49115,49117,49119,49121],{"class":117,"line":33379},[115,49110,2497],{"class":121},[115,49112,33210],{"class":125},[115,49114,657],{"class":121},[115,49116,343],{"class":174},[115,49118,1065],{"class":125},[115,49120,1085],{"class":121},[115,49122,33221],{"class":125},[115,49124,49125],{"class":117,"line":33385},[115,49126,33227],{"class":184},[115,49128,49129,49131,49133,49135,49137,49139,49141],{"class":117,"line":33391},[115,49130,33233],{"class":125},[115,49132,165],{"class":174},[115,49134,171],{"class":121},[115,49136,33240],{"class":125},[115,49138,657],{"class":121},[115,49140,343],{"class":174},[115,49142,33247],{"class":125},[115,49144,49145],{"class":117,"line":33409},[115,49146,33253],{"class":184},[115,49148,49149],{"class":117,"line":33423},[115,49150,33259],{"class":184},[115,49152,49153,49155,49157],{"class":117,"line":33432},[115,49154,33265],{"class":125},[115,49156,171],{"class":121},[115,49158,32315],{"class":125},[115,49160,49161],{"class":117,"line":33441},[115,49162,2400],{"emptyLinePlaceholder":42},[115,49164,49165],{"class":117,"line":33450},[115,49166,33280],{"class":184},[115,49168,49169,49171,49173,49175,49177],{"class":117,"line":33459},[115,49170,33286],{"class":125},[115,49172,171],{"class":121},[115,49174,33291],{"class":125},[115,49176,657],{"class":121},[115,49178,33296],{"class":125},[115,49180,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215],{"class":117,"line":33465},[115,49182,32452],{"class":174},[115,49184,126],{"class":125},[115,49186,33306],{"class":230},[115,49188,1021],{"class":174},[115,49190,33311],{"class":121},[115,49192,1071],{"class":174},[115,49194,669],{"class":230},[115,49196,1021],{"class":174},[115,49198,33311],{"class":121},[115,49200,1071],{"class":174},[115,49202,33324],{"class":230},[115,49204,33327],{"class":125},[115,49206,33330],{"class":121},[115,49208,1032],{"class":174},[115,49210,33335],{"class":125},[115,49212,453],{"class":121},[115,49214,1032],{"class":174},[115,49216,30498],{"class":125},[115,49218,49219],{"class":117,"line":33471},[115,49220,36734],{"class":184},[115,49222,49223],{"class":117,"line":33479},[115,49224,36739],{"class":184},[115,49226,49227,49229,49231],{"class":117,"line":33484},[115,49228,36744],{"class":125},[115,49230,33368],{"class":230},[115,49232,132],{"class":125},[115,49234,49235],{"class":117,"line":33490},[115,49236,33388],{"class":184},[115,49238,49239,49241,49243,49245,49247,49249],{"class":117,"line":33501},[115,49240,33394],{"class":125},[115,49242,171],{"class":121},[115,49244,33399],{"class":125},[115,49246,33402],{"class":5217},[115,49248,171],{"class":121},[115,49250,1546],{"class":125},[115,49252,49253,49255,49257,49259],{"class":117,"line":33507},[115,49254,33412],{"class":230},[115,49256,984],{"class":125},[115,49258,33417],{"class":174},[115,49260,33420],{"class":125},[115,49262,49263,49265],{"class":117,"line":33527},[115,49264,33426],{"class":230},[115,49266,33429],{"class":125},[115,49268,49269,49271],{"class":117,"line":33533},[115,49270,33435],{"class":230},[115,49272,33438],{"class":125},[115,49274,49275,49277],{"class":117,"line":33539},[115,49276,33444],{"class":230},[115,49278,33447],{"class":125},[115,49280,49281,49283],{"class":117,"line":33545},[115,49282,33453],{"class":230},[115,49284,33456],{"class":125},[115,49286,49287],{"class":117,"line":33562},[115,49288,33462],{"class":125},[115,49290,49291],{"class":117,"line":33568},[115,49292,33468],{"class":184},[115,49294,49295,49297],{"class":117,"line":33574},[115,49296,4090],{"class":121},[115,49298,33476],{"class":125},[115,49300,49301],{"class":117,"line":33580},[115,49302,2400],{"emptyLinePlaceholder":42},[115,49304,49305],{"class":117,"line":33586},[115,49306,33487],{"class":184},[115,49308,49309,49311,49313],{"class":117,"line":33592},[115,49310,31948],{"class":121},[115,49312,33495],{"class":1963},[115,49314,33498],{"class":125},[115,49316,49317],{"class":117,"line":33619},[115,49318,33504],{"class":184},[115,49320,49321,49323,49325,49327,49329,49331,49333,49335],{"class":117,"line":33643},[115,49322,33510],{"class":125},[115,49324,31694],{"class":5217},[115,49326,171],{"class":121},[115,49328,126],{"class":125},[115,49330,623],{"class":174},[115,49332,503],{"class":125},[115,49334,418],{"class":174},[115,49336,30498],{"class":125},[115,49338,49339],{"class":117,"line":33649},[115,49340,33530],{"class":184},[115,49342,49343],{"class":117,"line":33655},[115,49344,33536],{"class":184},[115,49346,49347],{"class":117,"line":33661},[115,49348,33542],{"class":184},[115,49350,49351,49353,49355,49357,49359,49361,49363],{"class":117,"line":33672},[115,49352,31728],{"class":125},[115,49354,343],{"class":174},[115,49356,503],{"class":125},[115,49358,203],{"class":174},[115,49360,503],{"class":125},[115,49362,343],{"class":174},[115,49364,132],{"class":125},[115,49366,49367],{"class":117,"line":33683},[115,49368,33565],{"class":184},[115,49370,49371],{"class":117,"line":33689},[115,49372,33571],{"class":184},[115,49374,49375],{"class":117,"line":33706},[115,49376,33577],{"class":184},[115,49378,49379],{"class":117,"line":33729},[115,49380,33583],{"class":184},[115,49382,49383],{"class":117,"line":33752},[115,49384,33589],{"class":184},[115,49386,49387,49389,49391,49393,49395,49397,49399,49401,49403],{"class":117,"line":33758},[115,49388,33595],{"class":125},[115,49390,33598],{"class":230},[115,49392,33601],{"class":125},[115,49394,33604],{"class":230},[115,49396,503],{"class":125},[115,49398,33609],{"class":5217},[115,49400,171],{"class":121},[115,49402,33614],{"class":230},[115,49404,132],{"class":125},[115,49406,49407,49409,49411,49413,49415,49417,49419,49421,49423],{"class":117,"line":33763},[115,49408,33595],{"class":125},[115,49410,33598],{"class":230},[115,49412,33626],{"class":125},[115,49414,33629],{"class":230},[115,49416,503],{"class":125},[115,49418,33609],{"class":5217},[115,49420,171],{"class":121},[115,49422,33638],{"class":230},[115,49424,132],{"class":125},[115,49426,49427],{"class":117,"line":33772},[115,49428,33646],{"class":184},[115,49430,49431],{"class":117,"line":33782},[115,49432,33652],{"class":125},[115,49434,49435],{"class":117,"line":33788},[115,49436,33658],{"class":184},[115,49438,49439,49441,49443],{"class":117,"line":33793},[115,49440,33664],{"class":125},[115,49442,33667],{"class":230},[115,49444,132],{"class":125},[115,49446,49447,49449,49451],{"class":117,"line":33799},[115,49448,33675],{"class":125},[115,49450,33678],{"class":230},[115,49452,132],{"class":125},[115,49454,49455],{"class":117,"line":33812},[115,49456,33686],{"class":184},[115,49458,49459,49461,49463,49465,49467,49469,49471],{"class":117,"line":33818},[115,49460,31728],{"class":125},[115,49462,343],{"class":174},[115,49464,503],{"class":125},[115,49466,203],{"class":174},[115,49468,503],{"class":125},[115,49470,203],{"class":174},[115,49472,132],{"class":125},[115,49474,49475,49477,49479,49481,49483,49485,49487,49489,49491],{"class":117,"line":33829},[115,49476,33595],{"class":125},[115,49478,33598],{"class":230},[115,49480,33713],{"class":125},[115,49482,33604],{"class":230},[115,49484,503],{"class":125},[115,49486,33609],{"class":5217},[115,49488,171],{"class":121},[115,49490,33724],{"class":230},[115,49492,132],{"class":125},[115,49494,49495,49497,49499,49501,49503,49505,49507,49509,49511],{"class":117,"line":33840},[115,49496,33595],{"class":125},[115,49498,33598],{"class":230},[115,49500,33736],{"class":125},[115,49502,33629],{"class":230},[115,49504,503],{"class":125},[115,49506,33609],{"class":5217},[115,49508,171],{"class":121},[115,49510,33747],{"class":230},[115,49512,132],{"class":125},[115,49514,49515],{"class":117,"line":33859},[115,49516,33755],{"class":184},[115,49518,49520],{"class":117,"line":49519},219,[115,49521,33652],{"class":125},[115,49523,49525,49527,49529],{"class":117,"line":49524},220,[115,49526,33664],{"class":125},[115,49528,33598],{"class":230},[115,49530,132],{"class":125},[115,49532,49534,49536,49538],{"class":117,"line":49533},221,[115,49535,33675],{"class":125},[115,49537,33777],{"class":230},[115,49539,132],{"class":125},[115,49541,49543],{"class":117,"line":49542},222,[115,49544,33785],{"class":125},[115,49546,49548],{"class":117,"line":49547},223,[115,49549,2400],{"emptyLinePlaceholder":42},[115,49551,49553],{"class":117,"line":49552},224,[115,49554,33796],{"class":184},[115,49556,49558,49560,49562,49564,49566],{"class":117,"line":49557},225,[115,49559,1531],{"class":121},[115,49561,31221],{"class":174},[115,49563,2949],{"class":121},[115,49565,31226],{"class":230},[115,49567,3739],{"class":125},[115,49569,49571],{"class":117,"line":49570},226,[115,49572,33815],{"class":184},[115,49574,49576,49578,49580],{"class":117,"line":49575},227,[115,49577,44547],{"class":125},[115,49579,171],{"class":121},[115,49581,44552],{"class":125},[115,49583,49585,49587,49589],{"class":117,"line":49584},228,[115,49586,33832],{"class":125},[115,49588,171],{"class":121},[115,49590,33837],{"class":125},[115,49592,49594,49596,49598,49600,49602,49604,49606],{"class":117,"line":49593},229,[115,49595,33394],{"class":125},[115,49597,171],{"class":121},[115,49599,44569],{"class":125},[115,49601,33850],{"class":5217},[115,49603,171],{"class":121},[115,49605,1032],{"class":174},[115,49607,132],{"class":125},[115,49609,49611],{"class":117,"line":49610},230,[115,49612,33862],{"class":125},[21999,49614,49616],{"id":49615},"_242测试代码","2.4.2.测试代码",[14,49618,49619],{},"使用测试集进行测试与推理",[106,49621,49623],{"className":30379,"code":49622,"language":30381,"meta":22,"style":22},"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",[112,49624,49625,49631,49641,49651,49662,49672,49676,49680,49688,49693,49697,49714,49718,49722,49726,49730,49734,49766,49770,49778,49782,49794,49798,49802,49806,49810,49814,49818,49822,49826,49844,49858,49862,49872,49882,49892,49898,49902,49906,49914,49918,49934,49942,49946,49950,49958,49966,49970,49974,49978,49982,49988,49992,50002,50010,50018,50022,50026,50030,50038,50042,50058,50062,50066,50070,50082,50086,50098,50102,50106,50118,50122,50132,50136,50140,50152,50156,50164,50168,50172,50180,50184,50192,50196,50200,50204,50208,50212,50228,50236,50240,50244,50262,50268,50272,50282,50290,50298,50302,50306,50310,50314,50322,50326,50342,50346,50354,50362],{"__ignoreMap":22},[115,49626,49627,49629],{"class":117,"line":118},[115,49628,30393],{"class":121},[115,49630,30396],{"class":125},[115,49632,49633,49635,49637,49639],{"class":117,"line":37},[115,49634,30393],{"class":121},[115,49636,31416],{"class":125},[115,49638,31384],{"class":121},[115,49640,31421],{"class":125},[115,49642,49643,49645,49647,49649],{"class":117,"line":1180},[115,49644,30738],{"class":121},[115,49646,31399],{"class":125},[115,49648,30393],{"class":121},[115,49650,31404],{"class":125},[115,49652,49653,49655,49657,49659],{"class":117,"line":1195},[115,49654,30738],{"class":121},[115,49656,31369],{"class":125},[115,49658,30393],{"class":121},[115,49660,49661],{"class":125}," ImageFolder\n",[115,49663,49664,49666,49668,49670],{"class":117,"line":1201},[115,49665,30738],{"class":121},[115,49667,31915],{"class":125},[115,49669,30393],{"class":121},[115,49671,44641],{"class":125},[115,49673,49674],{"class":117,"line":1215},[115,49675,2400],{"emptyLinePlaceholder":42},[115,49677,49678],{"class":117,"line":1221},[115,49679,33952],{"class":184},[115,49681,49682,49684,49686],{"class":117,"line":1312},[115,49683,31948],{"class":121},[115,49685,33959],{"class":1963},[115,49687,31954],{"class":125},[115,49689,49690],{"class":117,"line":1318},[115,49691,49692],{"class":184},"   # 导入自己的数据集，并进行数据处理\n",[115,49694,49695],{"class":117,"line":1330},[115,49696,47962],{"class":184},[115,49698,49699,49701,49703,49705,49707,49709,49712],{"class":117,"line":1612},[115,49700,47967],{"class":174},[115,49702,171],{"class":121},[115,49704,795],{"class":121},[115,49706,376],{"class":230},[115,49708,683],{"class":174},[115,49710,49711],{"class":47978},"\u002Fdata\u002Ftest",[115,49713,25134],{"class":230},[115,49715,49716],{"class":117,"line":1617},[115,49717,2400],{"emptyLinePlaceholder":42},[115,49719,49720],{"class":117,"line":1623},[115,49721,47990],{"class":184},[115,49723,49724],{"class":117,"line":1628},[115,49725,47995],{"class":184},[115,49727,49728],{"class":117,"line":1642},[115,49729,48000],{"class":184},[115,49731,49732],{"class":117,"line":1647},[115,49733,48005],{"class":184},[115,49735,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764],{"class":117,"line":1653},[115,49737,48010],{"class":125},[115,49739,171],{"class":121},[115,49741,48015],{"class":125},[115,49743,48018],{"class":174},[115,49745,503],{"class":125},[115,49747,48023],{"class":174},[115,49749,503],{"class":125},[115,49751,48028],{"class":174},[115,49753,48031],{"class":125},[115,49755,48034],{"class":174},[115,49757,503],{"class":125},[115,49759,48039],{"class":174},[115,49761,503],{"class":125},[115,49763,48044],{"class":174},[115,49765,4657],{"class":125},[115,49767,49768],{"class":117,"line":1674},[115,49769,48051],{"class":184},[115,49771,49772,49774,49776],{"class":117,"line":1679},[115,49773,48056],{"class":125},[115,49775,171],{"class":121},[115,49777,48061],{"class":125},[115,49779,49780],{"class":117,"line":1693},[115,49781,48066],{"class":184},[115,49783,49784,49786,49788,49790,49792],{"class":117,"line":1698},[115,49785,48071],{"class":125},[115,49787,31502],{"class":174},[115,49789,503],{"class":125},[115,49791,31502],{"class":174},[115,49793,42623],{"class":125},[115,49795,49796],{"class":117,"line":1727},[115,49797,48084],{"class":184},[115,49799,49800],{"class":117,"line":1732},[115,49801,48089],{"class":125},[115,49803,49804],{"class":117,"line":1749},[115,49805,48094],{"class":125},[115,49807,49808],{"class":117,"line":1754},[115,49809,48099],{"class":184},[115,49811,49812],{"class":117,"line":1759},[115,49813,48104],{"class":184},[115,49815,49816],{"class":117,"line":1764},[115,49817,2400],{"emptyLinePlaceholder":42},[115,49819,49820],{"class":117,"line":1778},[115,49821,48113],{"class":184},[115,49823,49824],{"class":117,"line":1783},[115,49825,48118],{"class":184},[115,49827,49828,49830,49832,49834,49836,49838,49840,49842],{"class":117,"line":2577},[115,49829,33966],{"class":125},[115,49831,171],{"class":121},[115,49833,48127],{"class":125},[115,49835,48130],{"class":174},[115,49837,503],{"class":125},[115,49839,48135],{"class":5217},[115,49841,171],{"class":121},[115,49843,48140],{"class":125},[115,49845,49846,49848,49850,49852,49854,49856],{"class":117,"line":2591},[115,49847,34023],{"class":125},[115,49849,171],{"class":121},[115,49851,31535],{"class":125},[115,49853,31538],{"class":5217},[115,49855,171],{"class":121},[115,49857,34034],{"class":125},[115,49859,49860],{"class":117,"line":2599},[115,49861,34039],{"class":184},[115,49863,49864,49866,49868,49870],{"class":117,"line":2604},[115,49865,34044],{"class":5217},[115,49867,171],{"class":121},[115,49869,343],{"class":174},[115,49871,31467],{"class":125},[115,49873,49874,49876,49878,49880],{"class":117,"line":2610},[115,49875,34055],{"class":5217},[115,49877,171],{"class":121},[115,49879,31477],{"class":174},[115,49881,31467],{"class":125},[115,49883,49884,49886,49888,49890],{"class":117,"line":2616},[115,49885,34066],{"class":5217},[115,49887,171],{"class":121},[115,49889,317],{"class":174},[115,49891,132],{"class":125},[115,49893,49894,49896],{"class":117,"line":2621},[115,49895,4090],{"class":121},[115,49897,34079],{"class":125},[115,49899,49900],{"class":117,"line":7949},[115,49901,2400],{"emptyLinePlaceholder":42},[115,49903,49904],{"class":117,"line":7973},[115,49905,34088],{"class":184},[115,49907,49908,49910,49912],{"class":117,"line":7978},[115,49909,31948],{"class":121},[115,49911,34095],{"class":1963},[115,49913,34098],{"class":125},[115,49915,49916],{"class":117,"line":7984},[115,49917,34103],{"class":184},[115,49919,49920,49922,49924,49926,49928,49930,49932],{"class":117,"line":8011},[115,49921,31238],{"class":125},[115,49923,171],{"class":121},[115,49925,31245],{"class":230},[115,49927,1704],{"class":121},[115,49929,31250],{"class":125},[115,49931,1701],{"class":121},[115,49933,34120],{"class":230},[115,49935,49936,49938,49940],{"class":117,"line":8016},[115,49937,31290],{"class":125},[115,49939,171],{"class":121},[115,49941,32290],{"class":125},[115,49943,49944],{"class":117,"line":8022},[115,49945,2400],{"emptyLinePlaceholder":42},[115,49947,49948],{"class":117,"line":8034},[115,49949,34137],{"class":184},[115,49951,49952,49954,49956],{"class":117,"line":8046},[115,49953,34142],{"class":125},[115,49955,171],{"class":121},[115,49957,32343],{"class":174},[115,49959,49960,49962,49964],{"class":117,"line":8058},[115,49961,34151],{"class":125},[115,49963,171],{"class":121},[115,49965,3085],{"class":174},[115,49967,49968],{"class":117,"line":9717},[115,49969,2400],{"emptyLinePlaceholder":42},[115,49971,49972],{"class":117,"line":9742},[115,49973,34164],{"class":184},[115,49975,49976],{"class":117,"line":9765},[115,49977,34169],{"class":184},[115,49979,49980],{"class":117,"line":9789},[115,49981,34174],{"class":184},[115,49983,49984,49986],{"class":117,"line":9794},[115,49985,34179],{"class":121},[115,49987,32885],{"class":125},[115,49989,49990],{"class":117,"line":9799},[115,49991,34186],{"class":184},[115,49993,49994,49996,49998,50000],{"class":117,"line":9804},[115,49995,3403],{"class":121},[115,49997,34193],{"class":125},[115,49999,26044],{"class":121},[115,50001,34198],{"class":125},[115,50003,50004,50006,50008],{"class":117,"line":9813},[115,50005,34203],{"class":125},[115,50007,171],{"class":121},[115,50009,34208],{"class":125},[115,50011,50012,50014,50016],{"class":117,"line":9818},[115,50013,34213],{"class":125},[115,50015,171],{"class":121},[115,50017,34218],{"class":125},[115,50019,50020],{"class":117,"line":9824},[115,50021,34223],{"class":184},[115,50023,50024],{"class":117,"line":9845},[115,50025,32876],{"class":125},[115,50027,50028],{"class":117,"line":9851},[115,50029,34232],{"class":184},[115,50031,50032,50034,50036],{"class":117,"line":9865},[115,50033,32661],{"class":125},[115,50035,171],{"class":121},[115,50037,34241],{"class":125},[115,50039,50040],{"class":117,"line":9871},[115,50041,34246],{"class":184},[115,50043,50044,50046,50048,50050,50052,50054,50056],{"class":117,"line":9898},[115,50045,32678],{"class":125},[115,50047,171],{"class":121},[115,50049,32683],{"class":125},[115,50051,32686],{"class":5217},[115,50053,171],{"class":121},[115,50055,343],{"class":174},[115,50057,132],{"class":125},[115,50059,50060],{"class":117,"line":9907},[115,50061,34267],{"class":184},[115,50063,50064],{"class":117,"line":9913},[115,50065,34272],{"class":184},[115,50067,50068],{"class":117,"line":9921},[115,50069,34277],{"class":184},[115,50071,50072,50074,50076,50078,50080],{"class":117,"line":9926},[115,50073,34282],{"class":125},[115,50075,9478],{"class":121},[115,50077,32788],{"class":125},[115,50079,2949],{"class":121},[115,50081,34291],{"class":125},[115,50083,50084],{"class":117,"line":16605},[115,50085,34296],{"class":184},[115,50087,50088,50090,50092,50094,50096],{"class":117,"line":16611},[115,50089,34301],{"class":125},[115,50091,9478],{"class":121},[115,50093,34306],{"class":125},[115,50095,317],{"class":174},[115,50097,132],{"class":125},[115,50099,50100],{"class":117,"line":16634},[115,50101,2400],{"emptyLinePlaceholder":42},[115,50103,50104],{"class":117,"line":16640},[115,50105,34319],{"class":184},[115,50107,50108,50110,50112,50114,50116],{"class":117,"line":16663},[115,50109,34324],{"class":125},[115,50111,171],{"class":121},[115,50113,34329],{"class":125},[115,50115,709],{"class":121},[115,50117,34334],{"class":125},[115,50119,50120],{"class":117,"line":16677},[115,50121,34339],{"class":184},[115,50123,50124,50126,50128,50130],{"class":117,"line":16697},[115,50125,32452],{"class":174},[115,50127,126],{"class":125},[115,50129,34348],{"class":230},[115,50131,34351],{"class":125},[115,50133,50134],{"class":117,"line":16703},[115,50135,2400],{"emptyLinePlaceholder":42},[115,50137,50138],{"class":117,"line":16714},[115,50139,34360],{"class":184},[115,50141,50142,50144,50146,50148,50150],{"class":117,"line":16737},[115,50143,1531],{"class":121},[115,50145,31221],{"class":174},[115,50147,2949],{"class":121},[115,50149,31226],{"class":230},[115,50151,3739],{"class":125},[115,50153,50154],{"class":117,"line":16759},[115,50155,34377],{"class":184},[115,50157,50158,50160,50162],{"class":117,"line":16764},[115,50159,31290],{"class":125},[115,50161,171],{"class":121},[115,50163,44552],{"class":125},[115,50165,50166],{"class":117,"line":16770},[115,50167,34390],{"class":184},[115,50169,50170],{"class":117,"line":16784},[115,50171,34395],{"class":184},[115,50173,50174,50176,50178],{"class":117,"line":16797},[115,50175,34400],{"class":125},[115,50177,34403],{"class":230},[115,50179,30498],{"class":125},[115,50181,50182],{"class":117,"line":16802},[115,50183,34410],{"class":184},[115,50185,50186,50188,50190],{"class":117,"line":16816},[115,50187,34023],{"class":125},[115,50189,171],{"class":121},[115,50191,34419],{"class":125},[115,50193,50194],{"class":117,"line":16821},[115,50195,34424],{"class":184},[115,50197,50198],{"class":117,"line":16827},[115,50199,34429],{"class":125},[115,50201,50202],{"class":117,"line":16832},[115,50203,2400],{"emptyLinePlaceholder":42},[115,50205,50206],{"class":117,"line":16846},[115,50207,34438],{"class":184},[115,50209,50210],{"class":117,"line":16851},[115,50211,34443],{"class":184},[115,50213,50214,50216,50218,50220,50222,50224,50226],{"class":117,"line":16856},[115,50215,31238],{"class":125},[115,50217,171],{"class":121},[115,50219,31245],{"class":230},[115,50221,1704],{"class":121},[115,50223,31250],{"class":125},[115,50225,1701],{"class":121},[115,50227,34120],{"class":230},[115,50229,50230,50232,50234],{"class":117,"line":16870},[115,50231,31290],{"class":125},[115,50233,171],{"class":121},[115,50235,32290],{"class":125},[115,50237,50238],{"class":117,"line":16882},[115,50239,34472],{"class":184},[115,50241,50242],{"class":117,"line":16887},[115,50243,34477],{"class":184},[115,50245,50246,50248,50250,50252,50255,50257,50260],{"class":117,"line":16900},[115,50247,34482],{"class":125},[115,50249,171],{"class":121},[115,50251,1015],{"class":125},[115,50253,50254],{"class":230},"'猫'",[115,50256,503],{"class":125},[115,50258,50259],{"class":230},"'狗'",[115,50261,33247],{"class":125},[115,50263,50264,50266],{"class":117,"line":16905},[115,50265,34179],{"class":121},[115,50267,32885],{"class":125},[115,50269,50270],{"class":117,"line":16910},[115,50271,34547],{"class":184},[115,50273,50274,50276,50278,50280],{"class":117,"line":16915},[115,50275,3403],{"class":121},[115,50277,34554],{"class":125},[115,50279,26044],{"class":121},[115,50281,34198],{"class":125},[115,50283,50284,50286,50288],{"class":117,"line":16928},[115,50285,32611],{"class":125},[115,50287,171],{"class":121},[115,50289,32616],{"class":125},[115,50291,50292,50294,50296],{"class":117,"line":16933},[115,50293,32626],{"class":125},[115,50295,171],{"class":121},[115,50297,32631],{"class":125},[115,50299,50300],{"class":117,"line":32634},[115,50301,2400],{"emptyLinePlaceholder":42},[115,50303,50304],{"class":117,"line":32640},[115,50305,34583],{"class":184},[115,50307,50308],{"class":117,"line":32646},[115,50309,32876],{"class":125},[115,50311,50312],{"class":117,"line":32652},[115,50313,34592],{"class":184},[115,50315,50316,50318,50320],{"class":117,"line":32658},[115,50317,32661],{"class":125},[115,50319,171],{"class":121},[115,50321,32666],{"class":125},[115,50323,50324],{"class":117,"line":32669},[115,50325,34605],{"class":184},[115,50327,50328,50330,50332,50334,50336,50338,50340],{"class":117,"line":32675},[115,50329,32678],{"class":125},[115,50331,171],{"class":121},[115,50333,32683],{"class":125},[115,50335,32686],{"class":5217},[115,50337,171],{"class":121},[115,50339,343],{"class":174},[115,50341,132],{"class":125},[115,50343,50344],{"class":117,"line":32695},[115,50345,34626],{"class":184},[115,50347,50348,50350,50352],{"class":117,"line":32701},[115,50349,34631],{"class":125},[115,50351,171],{"class":121},[115,50353,34636],{"class":125},[115,50355,50356,50358,50360],{"class":117,"line":32712},[115,50357,34641],{"class":125},[115,50359,171],{"class":121},[115,50361,34646],{"class":125},[115,50363,50364,50366,50368,50370,50372,50374,50376,50378],{"class":117,"line":32718},[115,50365,34651],{"class":174},[115,50367,126],{"class":125},[115,50369,34656],{"class":230},[115,50371,34659],{"class":125},[115,50373,34662],{"class":230},[115,50375,503],{"class":125},[115,50377,34667],{"class":230},[115,50379,34670],{"class":125},[5127,50381,50382],{},"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":22,"searchDepth":37,"depth":37,"links":50384},[50385,50386,50387,50388],{"id":30592,"depth":1180,"text":30593},{"id":37840,"depth":1180,"text":37841},{"id":41273,"depth":1180,"text":41274},{"id":45282,"depth":1180,"text":45283},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30584,"description":39},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50395,"title":50396,"body":50397,"description":39,"extension":40,"meta":50404,"navigation":42,"path":50405,"seo":50406,"stem":50407,"__hash__":50408},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50398,"toc":50402},[50399],[10,50400,50396],{"id":50401},"_3yolo模型学习",{"title":22,"searchDepth":37,"depth":37,"links":50403},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50396,"description":39},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50410,"title":50411,"body":50412,"description":50419,"extension":40,"meta":50420,"navigation":42,"path":50422,"seo":50423,"stem":50424,"__hash__":50425},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50413,"toc":50417},[50414],[14,50415,50416],{},"yolo模型还未补充",{"title":22,"searchDepth":37,"depth":37,"links":50418},[],"深度学习学习",{"category":50421},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50411,"description":50419},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":4,"title":5,"body":50427,"description":39,"extension":40,"meta":50446,"navigation":42,"path":43,"seo":50447,"stem":45,"__hash__":46},{"type":7,"value":50428,"toc":50444},[50429,50431,50433,50437,50442],[10,50430,5],{"id":12},[14,50432,16],{},[14,50434,50435],{},[20,50436],{"alt":22,"src":23},[14,50438,50439],{},[27,50440,32],{"href":29,"rel":50441},[31],[14,50443,35],{},{"title":22,"searchDepth":37,"depth":37,"links":50445},[],{},{"title":5,"description":39},{"id":50449,"title":50450,"body":50451,"description":39,"extension":40,"meta":53315,"navigation":42,"path":53316,"seo":53317,"stem":53318,"__hash__":53319},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50452,"toc":53266},[50453,50456,50460,50464,50469,50472,50477,50481,50488,50493,50500,50505,50512,50517,50521,50526,50529,50533,50538,50542,50547,50550,50553,50556,50559,50562,50565,50568,50571,50576,50581,50586,50590,50593,50596,50600,50605,50608,50616,50621,50638,50646,50651,50656,50661,50666,50671,50674,50679,50684,50688,50697,50702,50707,50711,50716,50719,50723,50728,50736,50741,50746,50749,50754,50759,50764,50767,50770,50773,50778,50783,50786,50791,50794,50799,50802,50805,50808,50813,50816,50819,50834,50839,50844,50849,50852,50855,50858,50872,50875,50880,50885,50888,50891,50894,50897,50900,50903,50906,50910,50914,50919,50923,50926,50931,50936,50939,50944,50947,50951,50956,50959,50962,50965,50968,50971,50974,50977,50980,50983,50987,50992,50997,51002,51005,51008,51012,51017,51020,51024,51027,51030,51035,51038,51041,51045,51049,51052,51057,51062,51065,51094,51099,51104,51109,51114,51118,51123,51127,51132,51135,51139,51143,51148,51152,51157,51162,51166,51171,51174,51176,51179,51184,51188,51193,51197,51201,51206,51211,51216,51221,51225,51230,51235,51240,51243,51246,51251,51254,51259,51264,51269,51274,51278,52085,52089,52432,52437,52440,52443,52446,52449,52452,52455,52458,52461,52463,52466,52468,52471,52475,52480,52483,52486,52489,52493,52498,52503,52523,52526,52530,52535,52540,52557,52561,52590,52594,52616,52618,52657,52665,52671,52675,52678,52681,52686,52691,52694,52697,52700,52705,52710,52713,52716,52719,52722,52725,52728,52731,52734,52737,52740,52743,52745,52748,52751,52754,52757,52760,52763,52766,52769,52773,52778,52781,52786,52789,52792,52795,52798,52801,52804,52807,52809,52812,52815,52818,52821,52824,52827,52831,52834,52843,52846,52851,52854,52859,52862,52865,52868,52871,52874,52877,52880,52884,52888,52891,52894,52899,52904,52909,52913,52918,52923,52926,52929,52932,52935,52938,52943,52946,52951,52953,52958,52961,52965,52970,52973,52976,52981,52985,52988,52993,52996,52999,53028,53033,53036,53039,53042,53045,53048,53052,53055,53141,53145,53148,53153,53158,53165,53168,53171,53174,53177,53180,53185,53190,53193,53196,53199,53202,53205,53208,53211,53214,53217,53219,53222,53226,53231,53236,53241,53244,53249,53254,53257,53260,53263],[10,50454,50450],{"id":50455},"_2基础语法",[57,50457,50459],{"id":50458},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[86,50461,50463],{"id":50462},"_211-js组成","2.1.1 js组成",[69,50465,50466],{},[72,50467,50468],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50470,50471],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[69,50473,50474],{"start":37},[72,50475,50476],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[86,50478,50480],{"id":50479},"_212-js书写位置","2.1.2 js书写位置",[69,50482,50483],{},[72,50484,50485],{},[275,50486,50487],{},"内部 JavaScript",[14,50489,50490],{},[20,50491],{"alt":22,"src":50492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[69,50494,50495],{"start":37},[72,50496,50497],{},[275,50498,50499],{},"外部 JavaScript",[14,50501,50502],{},[20,50503],{"alt":22,"src":50504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[69,50506,50507],{"start":1180},[72,50508,50509],{},[275,50510,50511],{},"内联 JavaScript",[14,50513,50514],{},[20,50515],{"alt":22,"src":50516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[86,50518,50520],{"id":50519},"_213-javascript注释","2.1.3 JavaScript注释",[14,50522,50523],{},[20,50524],{"alt":22,"src":50525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50527,50528],{},"alt+shift+a一定要记住！",[86,50530,50532],{"id":50531},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50534,50535],{},[20,50536],{"alt":22,"src":50537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[86,50539,50541],{"id":50540},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[69,50543,50544],{},[72,50545,50546],{},"输出语法：",[14,50548,50549],{},"①document.write('要出的内容')",[14,50551,50552],{},"向body内输出内容；",[14,50554,50555],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50557,50558],{},"②alert('要出的内容')",[14,50560,50561],{},"页面弹出警告对话框",[14,50563,50564],{},"③console.log('控制台打印')",[14,50566,50567],{},"控制台输出语法，程序员调试使用",[14,50569,50570],{},"输入log就行，自动生成：",[14,50572,50573],{},[20,50574],{"alt":22,"src":50575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[69,50577,50578],{"start":37},[72,50579,50580],{},"输入语法：",[14,50582,50583],{},[20,50584],{"alt":22,"src":50585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[86,50587,50589],{"id":50588},"_2116-字面量","21.1.6 字面量",[14,50591,50592],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50594,50595],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[57,50597,50599],{"id":50598},"_22-变量","2.2 变量",[69,50601,50602],{},[72,50603,50604],{},"变量声明",[14,50606,50607],{},"let 变量名",[1132,50609,50610,50613],{},[72,50611,50612],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[72,50614,50615],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[69,50617,50618],{"start":37},[72,50619,50620],{},"变量赋值",[106,50622,50626],{"className":50623,"code":50624,"language":50625,"meta":22,"style":22},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[112,50627,50628,50633],{"__ignoreMap":22},[115,50629,50630],{"class":117,"line":118},[115,50631,50632],{"class":125},"let age\n",[115,50634,50635],{"class":117,"line":37},[115,50636,50637],{"class":125},"age=18\n",[69,50639,50640,50643],{"start":1180},[72,50641,50642],{},"连这些（变量的初始化）：let age=18",[72,50644,50645],{},"更新变量",[14,50647,50648],{},[20,50649],{"alt":22,"src":50650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[69,50652,50653],{"start":1201},[72,50654,50655],{},"声明多个变量",[14,50657,50658],{},[20,50659],{"alt":22,"src":50660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[69,50662,50663],{"start":1215},[72,50664,50665],{},"变量命名规则与规范",[14,50667,50668],{},[20,50669],{"alt":22,"src":50670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50672,50673],{},"遵守小驼峰！",[69,50675,50676],{"start":1221},[72,50677,50678],{},"变量拓展-let和var的区别",[14,50680,50681],{},[20,50682],{"alt":22,"src":50683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[57,50685,50687],{"id":50686},"_23-数组","2.3 数组",[106,50689,50691],{"className":50623,"code":50690,"language":50625,"meta":22,"style":22},"let arr = []\n",[112,50692,50693],{"__ignoreMap":22},[115,50694,50695],{"class":117,"line":118},[115,50696,50690],{"class":125},[14,50698,50699],{},[20,50700],{"alt":22,"src":50701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50703,50704],{},[20,50705],{"alt":22,"src":50706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[57,50708,50710],{"id":50709},"_24-常量","2.4 常量",[14,50712,50713],{},[20,50714],{"alt":22,"src":50715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50717,50718],{},"const — 类似于 let ，但是变量的值无法被修改",[57,50720,50722],{"id":50721},"_25-数据类型","2.5 数据类型",[14,50724,50725],{},[20,50726],{"alt":22,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[69,50729,50730,50733],{},[72,50731,50732],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[72,50734,50735],{},"算数运算符：",[14,50737,50738],{},[20,50739],{"alt":22,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[69,50742,50743],{"start":1180},[72,50744,50745],{},"数字类型（Number）",[14,50747,50748],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50750,50751],{},[20,50752],{"alt":22,"src":50753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[69,50755,50756],{"start":1195},[72,50757,50758],{},"字符串类型（string）",[14,50760,50761],{},[20,50762],{"alt":22,"src":50763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50765,50766],{},"反引号也是可以使用的",[14,50768,50769],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50771,50772],{},"例如：document.write(\"我今年\"+age+\"岁\")",[69,50774,50775],{"start":1201},[72,50776,50777],{},"模板字符串",[14,50779,50780],{},[20,50781],{"alt":22,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50784,50785],{},"类似于python的字符串格式化",[69,50787,50788],{"start":1215},[72,50789,50790],{},"布尔类型",[14,50792,50793],{},"true 和 false",[69,50795,50796],{"start":1221},[72,50797,50798],{},"未定义类型（underfined）",[14,50800,50801],{},"表示没有赋值",[14,50803,50804],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50806,50807],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[69,50809,50810],{"start":1312},[72,50811,50812],{},"null（空类型）",[14,50814,50815],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50817,50818],{},"赋值了，但是内容为空",[106,50820,50822],{"className":50623,"code":50821,"language":50625,"meta":22,"style":22},"typeof null\n输出的是'object'，是一个对象数据类型\n",[112,50823,50824,50829],{"__ignoreMap":22},[115,50825,50826],{"class":117,"line":118},[115,50827,50828],{"class":125},"typeof null\n",[115,50830,50831],{"class":117,"line":37},[115,50832,50833],{"class":125},"输出的是'object'，是一个对象数据类型\n",[69,50835,50836],{"start":1318},[72,50837,50838],{},"控制台检测数据类型",[14,50840,50841],{},[20,50842],{"alt":22,"src":50843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[69,50845,50846],{"start":1330},[72,50847,50848],{},"类型转换",[14,50850,50851],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50853,50854],{},"转换方式：隐式转换和显示转换",[14,50856,50857],{},"①隐式转换",[1132,50859,50860,50863,50866,50869],{},[72,50861,50862],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[72,50864,50865],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[72,50867,50868],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[72,50870,50871],{},"任何数据和字符串相加结果都是字符串",[14,50873,50874],{},"②显示转换",[14,50876,50877],{},[20,50878],{"alt":22,"src":50879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50881,50882],{},[20,50883],{"alt":22,"src":50884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50886,50887],{},"在输入的时候要用好隐式转换，简单写起来",[14,50889,50890],{},"let num = +prompt(’请输入数字：‘)",[14,50892,50893],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50895,50896],{},"console.log(parseInt('12.333px'))",[14,50898,50899],{},"输出为：12",[14,50901,50902],{},"console.log(parseInt('a'a'a12.333px'))",[14,50904,50905],{},"输出：NaN",[57,50907,50909],{"id":50908},"_26-运算符","2.6 运算符",[86,50911,50913],{"id":50912},"_261-赋值运算符","2.6.1 赋值运算符",[14,50915,50916],{},[20,50917],{"alt":22,"src":50918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[86,50920,50922],{"id":50921},"_262-一元运算符","2.6.2 一元运算符",[14,50924,50925],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50927,50928],{},[20,50929],{"alt":22,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50932,50933],{},[20,50934],{"alt":22,"src":50935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50937,50938],{},"两者的区别：",[14,50940,50941],{},[20,50942],{"alt":22,"src":50943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50945,50946],{},"前置先自加；后置后加，代码执行完之后再加",[86,50948,50950],{"id":50949},"_263-比较运算符","2.6.3 比较运算符",[14,50952,50953],{},[20,50954],{"alt":22,"src":50955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50957,50958],{},"比较运算符也有隐式转换",[14,50960,50961],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50963,50964],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50966,50967],{},"要使用三等，开发的时候",[14,50969,50970],{},"NaN不等于任何人，包括它自己",[14,50972,50973],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50975,50976],{},"7\u002F10=0.7",[14,50978,50979],{},"最后：0.5+0.2=0.7",[14,50981,50982],{},"字符串比较，比较的是字符对应的ASCII码",[86,50984,50986],{"id":50985},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50988,50989],{},[20,50990],{"alt":22,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50993,50994],{},[20,50995],{"alt":22,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,50998,50999],{},[20,51000],{"alt":22,"src":51001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51003,51004],{},"上述题目选D",[14,51006,51007],{},"与真2假1；或真1假2",[86,51009,51011],{"id":51010},"_265-运算符优先级","2.6.5 运算符优先级",[14,51013,51014],{},[20,51015],{"alt":22,"src":51016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51018,51019],{},"先算逻辑与，后算逻辑或",[57,51021,51023],{"id":51022},"_27-语句","2.7 语句",[14,51025,51026],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51028,51029],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51031,51032],{},[20,51033],{"alt":22,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51036,51037],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51039,51040],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[86,51042,51044],{"id":51043},"_271-分支语句","2.7.1 分支语句",[21999,51046,51048],{"id":51047},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51050,51051],{},"if语句单行简单的话，可以不写{}，写在一行就行",[69,51053,51054],{},[72,51055,51056],{},"单分支语句",[14,51058,51059],{},[20,51060],{"alt":22,"src":51061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51063,51064],{},"除了0，所有数字都为真",[106,51066,51068],{"className":50623,"code":51067,"language":50625,"meta":22,"style":22},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[112,51069,51070,51075,51080,51085,51089],{"__ignoreMap":22},[115,51071,51072],{"class":117,"line":118},[115,51073,51074],{"class":125},"if（0) {\n",[115,51076,51077],{"class":117,"line":37},[115,51078,51079],{"class":125},"    let a=1\n",[115,51081,51082],{"class":117,"line":1180},[115,51083,51084],{"class":125},"    alert(typeof a)\n",[115,51086,51087],{"class":117,"line":1195},[115,51088,1565],{"class":125},[115,51090,51091],{"class":117,"line":1201},[115,51092,51093],{"class":125},"不输出，括号为假\n",[69,51095,51096],{"start":37},[72,51097,51098],{},"双分支语句",[14,51100,51101],{},[20,51102],{"alt":22,"src":51103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[69,51105,51106],{"start":1180},[72,51107,51108],{},"多分支语句",[14,51110,51111],{},[20,51112],{"alt":22,"src":51113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21999,51115,51117],{"id":51116},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51119,51120],{},[20,51121],{"alt":22,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21999,51124,51126],{"id":51125},"_2713-switch语句","2.7.1.3 switch语句",[14,51128,51129],{},[20,51130],{"alt":22,"src":51131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51133,51134],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[86,51136,51138],{"id":51137},"_272-循环语句","2.7.2 循环语句",[21999,51140,51142],{"id":51141},"_2721-断点演示","2.7.2.1 断点演示",[14,51144,51145],{},[20,51146],{"alt":22,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21999,51149,51151],{"id":51150},"_2722-while循环","2.7.2.2 while循环",[14,51153,51154],{},[20,51155],{"alt":22,"src":51156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51158,51159],{},[20,51160],{"alt":22,"src":51161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21999,51163,51165],{"id":51164},"_2723-for循环","2.7.2.3 for循环",[14,51167,51168],{},[20,51169],{"alt":22,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51172,51173],{},"for(;;) {",[14,51175,1071],{},[14,51177,51178],{},"表示无限循环",[14,51180,51181],{},[20,51182],{"alt":22,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21999,51185,51187],{"id":51186},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51189,51190],{},[20,51191],{"alt":22,"src":51192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[57,51194,51196],{"id":51195},"_28-数组","2.8 数组",[86,51198,51200],{"id":51199},"_281-基础认识","2.8.1 基础认识",[14,51202,51203],{},[20,51204],{"alt":22,"src":51205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51207,51208],{},[20,51209],{"alt":22,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51212,51213],{},[20,51214],{"alt":22,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51217,51218],{},[20,51219],{"alt":22,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[86,51222,51224],{"id":51223},"_282-操作数组","2.8.2 操作数组",[14,51226,51227],{},[20,51228],{"alt":22,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[69,51231,51232],{},[72,51233,51234],{},"添加元素",[14,51236,51237],{},[20,51238],{"alt":22,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51241,51242],{},"console.log(arr.push('green'))",[14,51244,51245],{},"输出结果：为新数组的长度",[14,51247,51248],{},[20,51249],{"alt":22,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51252,51253],{},"push用的非常多，一定要记住",[69,51255,51256],{},[72,51257,51258],{},"删除元素",[14,51260,51261],{},[20,51262],{"alt":22,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51265,51266],{},[20,51267],{"alt":22,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51270,51271],{},[20,51272],{"alt":22,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[86,51275,51277],{"id":51276},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[106,51279,51281],{"className":50623,"code":51280,"language":50625,"meta":22,"style":22},"\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",[112,51282,51283,51298,51314,51318,51327,51345,51369,51391,51405,51413,51420,51432,51443,51447,51451,51458,51470,51485,51498,51517,51534,51549,51561,51573,51585,51589,51593,51604,51614,51626,51638,51650,51661,51665,51669,51681,51685,51699,51703,51707,51718,51732,51744,51758,51762,51771,51780,51784,51793,51797,51806,51811,51816,51829,51857,51862,51867,51892,51897,51901,51906,51911,51926,51930,51935,51965,51977,51993,52009,52023,52028,52035,52039,52044,52057,52065,52073,52077],{"__ignoreMap":22},[115,51284,51285,51288,51292,51295],{"class":117,"line":118},[115,51286,51287],{"class":125},"\u003C!",[115,51289,51291],{"class":51290},"s9eBZ","DOCTYPE",[115,51293,51294],{"class":1963}," html",[115,51296,51297],{"class":125},">\n",[115,51299,51300,51302,51304,51307,51309,51312],{"class":117,"line":37},[115,51301,1035],{"class":125},[115,51303,50625],{"class":51290},[115,51305,51306],{"class":1963}," lang",[115,51308,171],{"class":125},[115,51310,51311],{"class":230},"\"en\"",[115,51313,51297],{"class":125},[115,51315,51316],{"class":117,"line":1180},[115,51317,2400],{"emptyLinePlaceholder":42},[115,51319,51320,51322,51325],{"class":117,"line":1195},[115,51321,1035],{"class":125},[115,51323,51324],{"class":51290},"head",[115,51326,51297],{"class":125},[115,51328,51329,51332,51335,51338,51340,51343],{"class":117,"line":1201},[115,51330,51331],{"class":125},"    \u003C",[115,51333,51334],{"class":51290},"meta",[115,51336,51337],{"class":1963}," charset",[115,51339,171],{"class":125},[115,51341,51342],{"class":230},"\"UTF-8\"",[115,51344,51297],{"class":125},[115,51346,51347,51349,51351,51354,51356,51359,51362,51364,51367],{"class":117,"line":1215},[115,51348,51331],{"class":125},[115,51350,51334],{"class":51290},[115,51352,51353],{"class":1963}," http-equiv",[115,51355,171],{"class":125},[115,51357,51358],{"class":230},"\"X-UA-Compatible\"",[115,51360,51361],{"class":1963}," content",[115,51363,171],{"class":125},[115,51365,51366],{"class":230},"\"IE=edge\"",[115,51368,51297],{"class":125},[115,51370,51371,51373,51375,51377,51379,51382,51384,51386,51389],{"class":117,"line":1221},[115,51372,51331],{"class":125},[115,51374,51334],{"class":51290},[115,51376,14921],{"class":1963},[115,51378,171],{"class":125},[115,51380,51381],{"class":230},"\"viewport\"",[115,51383,51361],{"class":1963},[115,51385,171],{"class":125},[115,51387,51388],{"class":230},"\"width=device-width, initial-scale=1.0\"",[115,51390,51297],{"class":125},[115,51392,51393,51395,51398,51401,51403],{"class":117,"line":1312},[115,51394,51331],{"class":125},[115,51396,51397],{"class":51290},"title",[115,51399,51400],{"class":125},">Document\u003C\u002F",[115,51402,51397],{"class":51290},[115,51404,51297],{"class":125},[115,51406,51407,51409,51411],{"class":117,"line":1318},[115,51408,51331],{"class":125},[115,51410,5127],{"class":51290},[115,51412,51297],{"class":125},[115,51414,51415,51418],{"class":117,"line":1330},[115,51416,51417],{"class":51290},"        *",[115,51419,15573],{"class":125},[115,51421,51422,51425,51428,51430],{"class":117,"line":1612},[115,51423,51424],{"class":174},"            margin",[115,51426,51427],{"class":125},": ",[115,51429,317],{"class":174},[115,51431,1291],{"class":125},[115,51433,51434,51437,51439,51441],{"class":117,"line":1617},[115,51435,51436],{"class":174},"            padding",[115,51438,51427],{"class":125},[115,51440,317],{"class":174},[115,51442,1291],{"class":125},[115,51444,51445],{"class":117,"line":1623},[115,51446,2529],{"class":125},[115,51448,51449],{"class":117,"line":1628},[115,51450,2400],{"emptyLinePlaceholder":42},[115,51452,51453,51456],{"class":117,"line":1642},[115,51454,51455],{"class":1963},"        .box",[115,51457,15573],{"class":125},[115,51459,51460,51463,51465,51468],{"class":117,"line":1647},[115,51461,51462],{"class":174},"            display",[115,51464,51427],{"class":125},[115,51466,51467],{"class":174},"flex",[115,51469,1291],{"class":125},[115,51471,51472,51475,51477,51480,51483],{"class":117,"line":1653},[115,51473,51474],{"class":174},"            width",[115,51476,51427],{"class":125},[115,51478,51479],{"class":174},"700",[115,51481,51482],{"class":121},"px",[115,51484,1291],{"class":125},[115,51486,51487,51490,51492,51494,51496],{"class":117,"line":1674},[115,51488,51489],{"class":174},"            height",[115,51491,51427],{"class":125},[115,51493,3973],{"class":174},[115,51495,51482],{"class":121},[115,51497,1291],{"class":125},[115,51499,51500,51503,51505,51507,51509,51512,51515],{"class":117,"line":1679},[115,51501,51502],{"class":174},"            border-left",[115,51504,51427],{"class":125},[115,51506,343],{"class":174},[115,51508,51482],{"class":121},[115,51510,51511],{"class":174}," solid",[115,51513,51514],{"class":174}," pink",[115,51516,1291],{"class":125},[115,51518,51519,51522,51524,51526,51528,51530,51532],{"class":117,"line":1693},[115,51520,51521],{"class":174},"            border-bottom",[115,51523,51427],{"class":125},[115,51525,343],{"class":174},[115,51527,51482],{"class":121},[115,51529,51511],{"class":174},[115,51531,51514],{"class":174},[115,51533,1291],{"class":125},[115,51535,51536,51538,51540,51542,51544,51547],{"class":117,"line":1698},[115,51537,51424],{"class":174},[115,51539,51427],{"class":125},[115,51541,781],{"class":174},[115,51543,51482],{"class":121},[115,51545,51546],{"class":174}," auto",[115,51548,1291],{"class":125},[115,51550,51551,51554,51556,51559],{"class":117,"line":1727},[115,51552,51553],{"class":174},"            justify-content",[115,51555,51427],{"class":125},[115,51557,51558],{"class":174},"space-around",[115,51560,1291],{"class":125},[115,51562,51563,51566,51568,51571],{"class":117,"line":1732},[115,51564,51565],{"class":174},"            align-items",[115,51567,51427],{"class":125},[115,51569,51570],{"class":174},"flex-end",[115,51572,1291],{"class":125},[115,51574,51575,51578,51580,51583],{"class":117,"line":1749},[115,51576,51577],{"class":174},"            text-align",[115,51579,51427],{"class":125},[115,51581,51582],{"class":174},"center",[115,51584,1291],{"class":125},[115,51586,51587],{"class":117,"line":1754},[115,51588,2529],{"class":125},[115,51590,51591],{"class":117,"line":1759},[115,51592,2400],{"emptyLinePlaceholder":42},[115,51594,51595,51597,51599,51602],{"class":117,"line":1764},[115,51596,51455],{"class":1963},[115,51598,1085],{"class":121},[115,51600,51601],{"class":51290},"div",[115,51603,15573],{"class":125},[115,51605,51606,51608,51610,51612],{"class":117,"line":1778},[115,51607,51462],{"class":174},[115,51609,51427],{"class":125},[115,51611,51467],{"class":174},[115,51613,1291],{"class":125},[115,51615,51616,51618,51620,51622,51624],{"class":117,"line":1783},[115,51617,51474],{"class":174},[115,51619,51427],{"class":125},[115,51621,781],{"class":174},[115,51623,51482],{"class":121},[115,51625,1291],{"class":125},[115,51627,51628,51631,51633,51636],{"class":117,"line":2577},[115,51629,51630],{"class":174},"            background-color",[115,51632,51427],{"class":125},[115,51634,51635],{"class":174},"pink",[115,51637,1291],{"class":125},[115,51639,51640,51643,51645,51648],{"class":117,"line":2591},[115,51641,51642],{"class":174},"            flex-direction",[115,51644,51427],{"class":125},[115,51646,51647],{"class":174},"column",[115,51649,1291],{"class":125},[115,51651,51652,51654,51656,51659],{"class":117,"line":2599},[115,51653,51553],{"class":174},[115,51655,51427],{"class":125},[115,51657,51658],{"class":174},"space-between",[115,51660,1291],{"class":125},[115,51662,51663],{"class":117,"line":2604},[115,51664,2529],{"class":125},[115,51666,51667],{"class":117,"line":2610},[115,51668,2400],{"emptyLinePlaceholder":42},[115,51670,51671,51673,51676,51679],{"class":117,"line":2616},[115,51672,51455],{"class":1963},[115,51674,51675],{"class":51290}," div",[115,51677,51678],{"class":51290}," span",[115,51680,15573],{"class":125},[115,51682,51683],{"class":117,"line":2621},[115,51684,2400],{"emptyLinePlaceholder":42},[115,51686,51687,51690,51692,51695,51697],{"class":117,"line":7949},[115,51688,51689],{"class":174},"            margin-top",[115,51691,51427],{"class":125},[115,51693,51694],{"class":174},"-20",[115,51696,51482],{"class":121},[115,51698,1291],{"class":125},[115,51700,51701],{"class":117,"line":7973},[115,51702,2529],{"class":125},[115,51704,51705],{"class":117,"line":7978},[115,51706,2400],{"emptyLinePlaceholder":42},[115,51708,51709,51711,51713,51716],{"class":117,"line":7984},[115,51710,51455],{"class":1963},[115,51712,51675],{"class":51290},[115,51714,51715],{"class":51290}," h4",[115,51717,15573],{"class":125},[115,51719,51720,51723,51725,51728,51730],{"class":117,"line":8011},[115,51721,51722],{"class":174},"            margin-bottom",[115,51724,51427],{"class":125},[115,51726,51727],{"class":174},"-35",[115,51729,51482],{"class":121},[115,51731,1291],{"class":125},[115,51733,51734,51736,51738,51740,51742],{"class":117,"line":8016},[115,51735,51474],{"class":174},[115,51737,51427],{"class":125},[115,51739,481],{"class":174},[115,51741,51482],{"class":121},[115,51743,1291],{"class":125},[115,51745,51746,51749,51751,51754,51756],{"class":117,"line":8022},[115,51747,51748],{"class":174},"            margin-left",[115,51750,51427],{"class":125},[115,51752,51753],{"class":174},"-10",[115,51755,51482],{"class":121},[115,51757,1291],{"class":125},[115,51759,51760],{"class":117,"line":8034},[115,51761,2529],{"class":125},[115,51763,51764,51767,51769],{"class":117,"line":8046},[115,51765,51766],{"class":125},"    \u003C\u002F",[115,51768,5127],{"class":51290},[115,51770,51297],{"class":125},[115,51772,51773,51776,51778],{"class":117,"line":8058},[115,51774,51775],{"class":125},"\u003C\u002F",[115,51777,51324],{"class":51290},[115,51779,51297],{"class":125},[115,51781,51782],{"class":117,"line":9717},[115,51783,2400],{"emptyLinePlaceholder":42},[115,51785,51786,51788,51791],{"class":117,"line":9742},[115,51787,1035],{"class":125},[115,51789,51790],{"class":51290},"body",[115,51792,51297],{"class":125},[115,51794,51795],{"class":117,"line":9765},[115,51796,2400],{"emptyLinePlaceholder":42},[115,51798,51799,51801,51804],{"class":117,"line":9789},[115,51800,51331],{"class":125},[115,51802,51803],{"class":51290},"script",[115,51805,51297],{"class":125},[115,51807,51808],{"class":117,"line":9794},[115,51809,51810],{"class":184},"        \u002F\u002F 1. 四次弹框效果\n",[115,51812,51813],{"class":117,"line":9799},[115,51814,51815],{"class":184},"        \u002F\u002F 声明一个新的数组\n",[115,51817,51818,51821,51824,51826],{"class":117,"line":9804},[115,51819,51820],{"class":121},"        let",[115,51822,51823],{"class":125}," arr ",[115,51825,171],{"class":121},[115,51827,51828],{"class":125}," []\n",[115,51830,51831,51833,51835,51838,51840,51842,51844,51846,51848,51851,51853,51855],{"class":117,"line":9813},[115,51832,3403],{"class":121},[115,51834,1658],{"class":125},[115,51836,51837],{"class":121},"let",[115,51839,9439],{"class":125},[115,51841,171],{"class":121},[115,51843,25119],{"class":174},[115,51845,9446],{"class":125},[115,51847,1588],{"class":121},[115,51849,51850],{"class":174}," 4",[115,51852,3214],{"class":125},[115,51854,2292],{"class":121},[115,51856,12443],{"class":125},[115,51858,51859],{"class":117,"line":9818},[115,51860,51861],{"class":184},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[115,51863,51864],{"class":117,"line":9824},[115,51865,51866],{"class":184},"            \u002F\u002F arr.push(num)\n",[115,51868,51869,51872,51875,51877,51880,51882,51885,51887,51890],{"class":117,"line":9845},[115,51870,51871],{"class":125},"            arr.",[115,51873,51874],{"class":1963},"push",[115,51876,126],{"class":125},[115,51878,51879],{"class":1963},"prompt",[115,51881,126],{"class":125},[115,51883,51884],{"class":230},"`请输入第${",[115,51886,566],{"class":125},[115,51888,51889],{"class":230},"}季度的数据:`",[115,51891,30498],{"class":125},[115,51893,51894],{"class":117,"line":9851},[115,51895,51896],{"class":184},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[115,51898,51899],{"class":117,"line":9865},[115,51900,2529],{"class":125},[115,51902,51903],{"class":117,"line":9871},[115,51904,51905],{"class":184},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[115,51907,51908],{"class":117,"line":9898},[115,51909,51910],{"class":184},"        \u002F\u002F 盒子开头\n",[115,51912,51913,51916,51919,51921,51924],{"class":117,"line":9907},[115,51914,51915],{"class":125},"        document.",[115,51917,51918],{"class":1963},"write",[115,51920,126],{"class":125},[115,51922,51923],{"class":230},"` \u003Cdiv class=\"box\">`",[115,51925,132],{"class":125},[115,51927,51928],{"class":117,"line":9913},[115,51929,2400],{"emptyLinePlaceholder":42},[115,51931,51932],{"class":117,"line":9921},[115,51933,51934],{"class":184},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[115,51936,51937,51939,51941,51943,51945,51947,51949,51951,51953,51956,51959,51961,51963],{"class":117,"line":9926},[115,51938,3403],{"class":121},[115,51940,1658],{"class":125},[115,51942,51837],{"class":121},[115,51944,9439],{"class":125},[115,51946,171],{"class":121},[115,51948,4093],{"class":174},[115,51950,9446],{"class":125},[115,51952,1035],{"class":121},[115,51954,51955],{"class":125}," arr.",[115,51957,51958],{"class":174},"length",[115,51960,3214],{"class":125},[115,51962,2292],{"class":121},[115,51964,12443],{"class":125},[115,51966,51967,51970,51972,51974],{"class":117,"line":16605},[115,51968,51969],{"class":125},"            document.",[115,51971,51918],{"class":1963},[115,51973,126],{"class":125},[115,51975,51976],{"class":230},"`\n",[115,51978,51979,51982,51984,51986,51988,51990],{"class":117,"line":16611},[115,51980,51981],{"class":230},"              \u003Cdiv style=\"height: ${",[115,51983,3880],{"class":125},[115,51985,1015],{"class":230},[115,51987,566],{"class":125},[115,51989,1065],{"class":230},[115,51991,51992],{"class":230},"}px;\">\n",[115,51994,51995,51998,52000,52002,52004,52006],{"class":117,"line":16634},[115,51996,51997],{"class":230},"                \u003Cspan>${",[115,51999,3880],{"class":125},[115,52001,1015],{"class":230},[115,52003,566],{"class":125},[115,52005,1065],{"class":230},[115,52007,52008],{"class":230},"}\u003C\u002Fspan>\n",[115,52010,52011,52014,52016,52018,52020],{"class":117,"line":16640},[115,52012,52013],{"class":230},"                \u003Ch4>第${",[115,52015,566],{"class":125},[115,52017,45567],{"class":121},[115,52019,25119],{"class":174},[115,52021,52022],{"class":230},"}季度\u003C\u002Fh4>\n",[115,52024,52025],{"class":117,"line":16663},[115,52026,52027],{"class":230},"              \u003C\u002Fdiv>          \n",[115,52029,52030,52033],{"class":117,"line":16677},[115,52031,52032],{"class":230},"            `",[115,52034,132],{"class":125},[115,52036,52037],{"class":117,"line":16697},[115,52038,2529],{"class":125},[115,52040,52041],{"class":117,"line":16703},[115,52042,52043],{"class":184},"        \u002F\u002F 盒子结尾\n",[115,52045,52046,52048,52050,52052,52055],{"class":117,"line":16714},[115,52047,51915],{"class":125},[115,52049,51918],{"class":1963},[115,52051,126],{"class":125},[115,52053,52054],{"class":230},"` \u003C\u002Fdiv>`",[115,52056,132],{"class":125},[115,52058,52059,52061,52063],{"class":117,"line":16737},[115,52060,51766],{"class":125},[115,52062,51803],{"class":51290},[115,52064,51297],{"class":125},[115,52066,52067,52069,52071],{"class":117,"line":16759},[115,52068,51775],{"class":125},[115,52070,51790],{"class":51290},[115,52072,51297],{"class":125},[115,52074,52075],{"class":117,"line":16764},[115,52076,2400],{"emptyLinePlaceholder":42},[115,52078,52079,52081,52083],{"class":117,"line":16770},[115,52080,51775],{"class":125},[115,52082,50625],{"class":51290},[115,52084,51297],{"class":125},[86,52086,52088],{"id":52087},"_284-冒泡排序","2.8.4 冒泡排序",[106,52090,52092],{"className":50623,"code":52091,"language":50625,"meta":22,"style":22},"\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",[112,52093,52094,52104,52118,52122,52130,52145,52165,52177,52185,52189,52197,52205,52237,52270,52307,52312,52331,52336,52349,52364,52380,52384,52389,52393,52403,52412,52420,52424],{"__ignoreMap":22},[115,52095,52096,52098,52100,52102],{"class":117,"line":118},[115,52097,51287],{"class":125},[115,52099,51291],{"class":51290},[115,52101,51294],{"class":1963},[115,52103,51297],{"class":125},[115,52105,52106,52108,52110,52112,52114,52116],{"class":117,"line":37},[115,52107,1035],{"class":125},[115,52109,50625],{"class":51290},[115,52111,51306],{"class":1963},[115,52113,171],{"class":125},[115,52115,51311],{"class":230},[115,52117,51297],{"class":125},[115,52119,52120],{"class":117,"line":1180},[115,52121,2400],{"emptyLinePlaceholder":42},[115,52123,52124,52126,52128],{"class":117,"line":1195},[115,52125,1035],{"class":125},[115,52127,51324],{"class":51290},[115,52129,51297],{"class":125},[115,52131,52132,52135,52137,52139,52141,52143],{"class":117,"line":1201},[115,52133,52134],{"class":125},"  \u003C",[115,52136,51334],{"class":51290},[115,52138,51337],{"class":1963},[115,52140,171],{"class":125},[115,52142,51342],{"class":230},[115,52144,51297],{"class":125},[115,52146,52147,52149,52151,52153,52155,52157,52159,52161,52163],{"class":117,"line":1215},[115,52148,52134],{"class":125},[115,52150,51334],{"class":51290},[115,52152,14921],{"class":1963},[115,52154,171],{"class":125},[115,52156,51381],{"class":230},[115,52158,51361],{"class":1963},[115,52160,171],{"class":125},[115,52162,51388],{"class":230},[115,52164,51297],{"class":125},[115,52166,52167,52169,52171,52173,52175],{"class":117,"line":1221},[115,52168,52134],{"class":125},[115,52170,51397],{"class":51290},[115,52172,51400],{"class":125},[115,52174,51397],{"class":51290},[115,52176,51297],{"class":125},[115,52178,52179,52181,52183],{"class":117,"line":1312},[115,52180,51775],{"class":125},[115,52182,51324],{"class":51290},[115,52184,51297],{"class":125},[115,52186,52187],{"class":117,"line":1318},[115,52188,2400],{"emptyLinePlaceholder":42},[115,52190,52191,52193,52195],{"class":117,"line":1330},[115,52192,1035],{"class":125},[115,52194,51790],{"class":51290},[115,52196,51297],{"class":125},[115,52198,52199,52201,52203],{"class":117,"line":1612},[115,52200,52134],{"class":125},[115,52202,51803],{"class":51290},[115,52204,51297],{"class":125},[115,52206,52207,52210,52212,52214,52217,52219,52221,52223,52225,52227,52229,52231,52233,52235],{"class":117,"line":1617},[115,52208,52209],{"class":121},"    let",[115,52211,51823],{"class":125},[115,52213,171],{"class":121},[115,52215,52216],{"class":125}," [",[115,52218,444],{"class":174},[115,52220,12436],{"class":125},[115,52222,418],{"class":174},[115,52224,12436],{"class":125},[115,52226,197],{"class":174},[115,52228,12436],{"class":125},[115,52230,203],{"class":174},[115,52232,12436],{"class":125},[115,52234,343],{"class":174},[115,52236,33247],{"class":125},[115,52238,52239,52241,52243,52245,52247,52249,52251,52253,52255,52257,52259,52262,52264,52266,52268],{"class":117,"line":1623},[115,52240,3201],{"class":121},[115,52242,1658],{"class":125},[115,52244,51837],{"class":121},[115,52246,9439],{"class":125},[115,52248,171],{"class":121},[115,52250,4093],{"class":174},[115,52252,9446],{"class":125},[115,52254,1035],{"class":121},[115,52256,51955],{"class":125},[115,52258,51958],{"class":174},[115,52260,52261],{"class":121}," -",[115,52263,25119],{"class":174},[115,52265,3214],{"class":125},[115,52267,2292],{"class":121},[115,52269,12443],{"class":125},[115,52271,52272,52275,52277,52279,52281,52283,52285,52287,52289,52291,52293,52295,52297,52299,52301,52303,52305],{"class":117,"line":1628},[115,52273,52274],{"class":121},"      for",[115,52276,1658],{"class":125},[115,52278,51837],{"class":121},[115,52280,9501],{"class":125},[115,52282,171],{"class":121},[115,52284,4093],{"class":174},[115,52286,9508],{"class":125},[115,52288,1035],{"class":121},[115,52290,51955],{"class":125},[115,52292,51958],{"class":174},[115,52294,52261],{"class":121},[115,52296,9439],{"class":125},[115,52298,657],{"class":121},[115,52300,25119],{"class":174},[115,52302,9515],{"class":125},[115,52304,2292],{"class":121},[115,52306,12443],{"class":125},[115,52308,52309],{"class":117,"line":1642},[115,52310,52311],{"class":184},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[115,52313,52314,52316,52319,52321,52324,52326,52328],{"class":117,"line":1647},[115,52315,2497],{"class":121},[115,52317,52318],{"class":125}," (arr[j] ",[115,52320,1085],{"class":121},[115,52322,52323],{"class":125}," arr[j ",[115,52325,606],{"class":121},[115,52327,25119],{"class":174},[115,52329,52330],{"class":125},"]) {\n",[115,52332,52333],{"class":117,"line":1653},[115,52334,52335],{"class":184},"          \u002F\u002F 交换两个变量\n",[115,52337,52338,52341,52344,52346],{"class":117,"line":1674},[115,52339,52340],{"class":121},"          let",[115,52342,52343],{"class":125}," tmp ",[115,52345,171],{"class":121},[115,52347,52348],{"class":125}," arr[j]\n",[115,52350,52351,52354,52356,52358,52360,52362],{"class":117,"line":1679},[115,52352,52353],{"class":125},"          arr[j] ",[115,52355,171],{"class":121},[115,52357,52323],{"class":125},[115,52359,606],{"class":121},[115,52361,25119],{"class":174},[115,52363,33247],{"class":125},[115,52365,52366,52369,52371,52373,52375,52377],{"class":117,"line":1693},[115,52367,52368],{"class":125},"          arr[j ",[115,52370,606],{"class":121},[115,52372,25119],{"class":174},[115,52374,4443],{"class":125},[115,52376,171],{"class":121},[115,52378,52379],{"class":125}," tmp\n",[115,52381,52382],{"class":117,"line":1698},[115,52383,2529],{"class":125},[115,52385,52386],{"class":117,"line":1727},[115,52387,52388],{"class":125},"      }\n",[115,52390,52391],{"class":117,"line":1732},[115,52392,2187],{"class":125},[115,52394,52395,52398,52400],{"class":117,"line":1749},[115,52396,52397],{"class":125},"    document.",[115,52399,51918],{"class":1963},[115,52401,52402],{"class":125},"(arr)\n",[115,52404,52405,52408,52410],{"class":117,"line":1754},[115,52406,52407],{"class":125},"  \u003C\u002F",[115,52409,51803],{"class":51290},[115,52411,51297],{"class":125},[115,52413,52414,52416,52418],{"class":117,"line":1759},[115,52415,51775],{"class":125},[115,52417,51790],{"class":51290},[115,52419,51297],{"class":125},[115,52421,52422],{"class":117,"line":1764},[115,52423,2400],{"emptyLinePlaceholder":42},[115,52425,52426,52428,52430],{"class":117,"line":1778},[115,52427,51775],{"class":125},[115,52429,50625],{"class":51290},[115,52431,51297],{"class":125},[14,52433,52434],{},[20,52435],{"alt":22,"src":52436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52438,52439],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52441,52442],{},"let arr = [4, 2, 5, 1, 3]",[14,52444,52445],{},"\u002F\u002F 1.升序排列写法",[14,52447,52448],{},"arr.sort(function (a, b) {",[14,52450,52451],{},"return a - b",[14,52453,52454],{},"})",[14,52456,52457],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52459,52460],{},"\u002F\u002F 降序排列写法",[14,52462,52448],{},[14,52464,52465],{},"return b - a",[14,52467,52454],{},[14,52469,52470],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[57,52472,52474],{"id":52473},"_29-函数","2.9 函数",[14,52476,52477],{},[20,52478],{"alt":22,"src":52479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52481,52482],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52484,52485],{},"函数的声明用function",[14,52487,52488],{},"函数里边可以嵌套函数",[86,52490,52492],{"id":52491},"_291-函数传参","2.9.1 函数传参",[14,52494,52495],{},[20,52496],{"alt":22,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52499,52500],{},[20,52501],{"alt":22,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1132,52504,52505,52508,52511,52514,52517,52520],{},[72,52506,52507],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[72,52509,52510],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[72,52512,52513],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[72,52515,52516],{},"开发中尽量保持形参和实参个数一致",[72,52518,52519],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[72,52521,52522],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52524,52525],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[86,52527,52529],{"id":52528},"_292-函数的返回值","2.9.2 函数的返回值",[14,52531,52532],{},[20,52533],{"alt":22,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52536,52537],{},[20,52538],{"alt":22,"src":52539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1132,52541,52542,52545,52548,52551,52554],{},[72,52543,52544],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[72,52546,52547],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[72,52549,52550],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[72,52552,52553],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[72,52555,52556],{},"断点调试:进入函数内部看执行过程F11",[86,52558,52560],{"id":52559},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[106,52562,52564],{"className":50623,"code":52563,"language":50625,"meta":22,"style":22},"    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",[112,52565,52566,52571,52576,52580,52585],{"__ignoreMap":22},[115,52567,52568],{"class":117,"line":118},[115,52569,52570],{"class":125},"    function fn(a, b) {\n",[115,52572,52573],{"class":117,"line":37},[115,52574,52575],{"class":125},"      console.log(a + b);\n",[115,52577,52578],{"class":117,"line":1180},[115,52579,2187],{"class":125},[115,52581,52582],{"class":117,"line":1195},[115,52583,52584],{"class":125},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[115,52586,52587],{"class":117,"line":1201},[115,52588,52589],{"class":125},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[86,52591,52593],{"id":52592},"_294-作用域","2.9.4 作用域",[1132,52595,52596,52602,52607,52610,52613],{},[72,52597,52598,52599],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[275,52600,52601],{},"作用域",[72,52603,52604],{},[275,52605,52606],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[72,52608,52609],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[72,52611,52612],{},"函数内部可以直接所使用全局变量",[72,52614,52615],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52617,14634],{},[106,52619,52621],{"className":50623,"code":52620,"language":50625,"meta":22,"style":22},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[112,52622,52623,52628,52633,52637,52642,52647,52652],{"__ignoreMap":22},[115,52624,52625],{"class":117,"line":118},[115,52626,52627],{"class":125},"    function fun() {\n",[115,52629,52630],{"class":117,"line":37},[115,52631,52632],{"class":125},"      num = 10\n",[115,52634,52635],{"class":117,"line":1180},[115,52636,2187],{"class":125},[115,52638,52639],{"class":117,"line":1195},[115,52640,52641],{"class":125},"    fun()\n",[115,52643,52644],{"class":117,"line":1201},[115,52645,52646],{"class":125},"    console.log(num)\n",[115,52648,52649],{"class":117,"line":1215},[115,52650,52651],{"class":125},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[115,52653,52654],{"class":117,"line":1221},[115,52655,52656],{"class":125},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1132,52658,52659,52662],{},[72,52660,52661],{},"函数内部的形参可以看做是局部变量",[72,52663,52664],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52666,52667,52668],{},"变量访问原则： ",[275,52669,52670],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[86,52672,52674],{"id":52673},"_295-匿名函数","2.9.5 匿名函数",[14,52676,52677],{},"函数可以分为具名函数和匿名函数",[14,52679,52680],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[69,52682,52683],{},[72,52684,52685],{},"函数表达式",[14,52687,52688],{},[20,52689],{"alt":22,"src":52690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52692,52693],{},"里边也可以写参数",[14,52695,52696],{},"具名函数调用位置可以随意调整；",[14,52698,52699],{},"匿名函数函数表达式形式只能在声明后才可以使用",[69,52701,52702],{"start":37},[72,52703,52704],{},"立即执行函数",[14,52706,52707],{},[20,52708],{"alt":22,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52711,52712],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52714,52715],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52717,52718],{},"(function () {})();",[14,52720,52721],{},"不要落下最后的;",[14,52723,52724],{},"立即执行函数必须要加;",[14,52726,52727],{},"分号写前写后都没问题",[14,52729,52730],{},"写前：",[14,52732,52733],{},"(function() {})()",[14,52735,52736],{},";(function () {})();",[14,52738,52739],{},"写后:",[14,52741,52742],{},"(function() {})();",[14,52744,52718],{},[14,52746,52747],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52749,52750],{},"还有一种写法：",[14,52752,52753],{},"(function(){}());",[14,52755,52756],{},"或者:",[14,52758,52759],{},"!function(){}();",[14,52761,52762],{},"立即执行函数有时候也是可以加名字的：",[14,52764,52765],{},"(function flexible(window,document) {}(window,document));",[14,52767,52768],{},"省一些调用方法",[86,52770,52772],{"id":52771},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52774,52775],{},[20,52776],{"alt":22,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52779,52780],{},"这样就不用非得给x,y初始化了",[14,52782,52783],{},[20,52784],{"alt":22,"src":52785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52787,52788],{},"代码执行时先看左边",[14,52790,52791],{},"例如：console.log(false && 3+5)",[14,52793,52794],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52796,52797],{},"&&都是真时，就返回最后一个真值",[14,52799,52800],{},"console.log(11 && 22)",[14,52802,52803],{},"输出22",[14,52805,52806],{},"逻辑与：遇真则真",[14,52808,14634],{},[14,52810,52811],{},"let age=1",[14,52813,52814],{},"console.log(11 || age++)",[14,52816,52817],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52819,52820],{},"console.log(11 || 22)",[14,52822,52823],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52825,52826],{},"||如果都是假的话，就取最后一个假的值了",[86,52828,52830],{"id":52829},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52832,52833],{},"显示转换：",[14,52835,52836,52839,52840],{},[275,52837,52838],{},"记忆","： ",[275,52841,52842],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52844,52845],{},"空字符串为假，其他字符串全为真",[14,52847,52848],{},[20,52849],{"alt":22,"src":52850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52852,52853],{},"隐式转换：",[14,52855,52856],{},[20,52857],{"alt":22,"src":52858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52860,52861],{},"隐式转换:",[14,52863,52864],{},"null+3=3",[14,52866,52867],{},"undefined+3=NaN",[14,52869,52870],{},"null==undefined 输出true,他两个都当0看",[14,52872,52873],{},"null===undefined 输出false",[14,52875,52876],{},"undefined做任何操作都是NaN",[14,52878,52879],{},"NaN不等于NaN，NaN表示计算错误",[57,52881,52883],{"id":52882},"_210-对象","2.10 对象",[86,52885,52887],{"id":52886},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52889,52890],{},"对象也是一种数据类型，里边的数据是无序的",[14,52892,52893],{},"对象由属性和方法组成",[14,52895,52896],{},[20,52897],{"alt":22,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52900,52901],{},[20,52902],{"alt":22,"src":52903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52905,52906],{},[20,52907],{"alt":22,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[86,52910,52912],{"id":52911},"_2102-对象属性","2.10.2 对象属性",[14,52914,52915],{},[20,52916],{"alt":22,"src":52917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[69,52919,52920],{},[72,52921,52922],{},"查询对象",[14,52924,52925],{},"对象名.属性 goods.uname",[14,52927,52928],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52930,52931],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52933,52934],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52936,52937],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[69,52939,52940],{"start":37},[72,52941,52942],{},"重新赋值",[14,52944,52945],{},"对象名.属性=新值",[69,52947,52948],{"start":1180},[72,52949,52950],{},"增加新数据",[14,52952,52945],{},[69,52954,52955],{"start":1195},[72,52956,52957],{},"删除对象中的属性",[14,52959,52960],{},"delete 对象名.属性",[86,52962,52964],{"id":52963},"_2103-对象方法","2.10.3 对象方法",[14,52966,52967],{},[20,52968],{"alt":22,"src":52969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52971,52972],{},"后边跟的是匿名函数",[14,52974,52975],{},"对象外面的叫函数；对象内部的叫方法",[14,52977,52978],{},[20,52979],{"alt":22,"src":52980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[86,52982,52984],{"id":52983},"_2104-遍历对象","2.10.4 遍历对象",[14,52986,52987],{},"理解为加括号的python字典遍历",[14,52989,52990],{},[20,52991],{"alt":22,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52994,52995],{},"k是字符串类型",[14,52997,52998],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[106,53000,53002],{"className":50623,"code":53001,"language":50625,"meta":22,"style":22},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[112,53003,53004,53009,53014,53019,53024],{"__ignoreMap":22},[115,53005,53006],{"class":117,"line":118},[115,53007,53008],{"class":125},"   let arr = [1, 2, 3]\n",[115,53010,53011],{"class":117,"line":37},[115,53012,53013],{"class":125},"    for (let k in arr) {\n",[115,53015,53016],{"class":117,"line":1180},[115,53017,53018],{"class":125},"      console.log(k)\n",[115,53020,53021],{"class":117,"line":1195},[115,53022,53023],{"class":125},"      console.log(arr[k])\n",[115,53025,53026],{"class":117,"line":1201},[115,53027,2187],{"class":125},[14,53029,53030],{},[20,53031],{"alt":22,"src":53032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53034,53035],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53037,53038],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53040,53041],{},"for in 得到的k是属性名",[51803,53043,53044],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53046,53047],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[86,53049,53051],{"id":53050},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53053,53054],{},"数组中放对象信息",[106,53056,53060],{"className":53057,"code":53058,"language":53059,"meta":22,"style":22},"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",[112,53061,53062,53070,53075,53080,53085,53090,53095,53100,53105,53110,53115,53120,53125,53129,53133],{"__ignoreMap":22},[115,53063,53064,53066,53068],{"class":117,"line":118},[115,53065,1035],{"class":125},[115,53067,51803],{"class":51290},[115,53069,51297],{"class":125},[115,53071,53072],{"class":117,"line":37},[115,53073,53074],{"class":125},"    let students = [\n",[115,53076,53077],{"class":117,"line":1180},[115,53078,53079],{"class":125},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[115,53081,53082],{"class":117,"line":1195},[115,53083,53084],{"class":125},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[115,53086,53087],{"class":117,"line":1201},[115,53088,53089],{"class":125},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[115,53091,53092],{"class":117,"line":1215},[115,53093,53094],{"class":125},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[115,53096,53097],{"class":117,"line":1221},[115,53098,53099],{"class":125},"    ]\n",[115,53101,53102],{"class":117,"line":1312},[115,53103,53104],{"class":125},"    for (let i = 0; i \u003C students.length; i++) {\n",[115,53106,53107],{"class":117,"line":1318},[115,53108,53109],{"class":125},"      for (let k in students[i]) {\n",[115,53111,53112],{"class":117,"line":1330},[115,53113,53114],{"class":125},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[115,53116,53117],{"class":117,"line":1612},[115,53118,53119],{"class":125},"        \u002F\u002F输出每个人的名字：\n",[115,53121,53122],{"class":117,"line":1617},[115,53123,53124],{"class":125},"        \u002F\u002Fconsole.log(students[i].name)\n",[115,53126,53127],{"class":117,"line":1623},[115,53128,52388],{"class":125},[115,53130,53131],{"class":117,"line":1628},[115,53132,2187],{"class":125},[115,53134,53135,53137,53139],{"class":117,"line":1642},[115,53136,52407],{"class":125},[115,53138,51803],{"class":51290},[115,53140,51297],{"class":125},[86,53142,53144],{"id":53143},"_2106-内置对象","2.10.6 内置对象",[14,53146,53147],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[69,53149,53150],{},[72,53151,53152],{},"数学对象Math",[14,53154,53155],{},[20,53156],{"alt":22,"src":53157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53159,53160],{},[27,53161,53164],{"href":53162,"rel":53163},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[31],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53166,53167],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53169,53170],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53172,53173],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53175,53176],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53178,53179],{},"null属于对象数据类型",[69,53181,53182],{"start":37},[72,53183,53184],{},"生成任意范围随机数",[14,53186,53187],{},[20,53188],{"alt":22,"src":53189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53191,53192],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53194,53195],{},"乘以几就取不到几",[14,53197,53198],{},"取数组中的随机元素：",[14,53200,53201],{},"let arr = ['red', 'green', 'blue']",[14,53203,53204],{},"let random = Math.floor(Math.random() * arr.length)",[14,53206,53207],{},"console.log(arr[random])",[14,53209,53210],{},"这个函数得到的是全闭区间",[14,53212,53213],{},"function getRandom(N, M) {",[14,53215,53216],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53218,1071],{},[14,53220,53221],{},"console.log(getRandom(4, 8))",[86,53223,53225],{"id":53224},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53227,53228],{},[20,53229],{"alt":22,"src":53230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53232,53233],{},[20,53234],{"alt":22,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53237,53238],{},[20,53239],{"alt":22,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53242,53243],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53245,53246],{},[20,53247],{"alt":22,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53250,53251],{},[20,53252],{"alt":22,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53255,53256],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53258,53259],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53261,53262],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5127,53264,53265],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":22,"searchDepth":37,"depth":37,"links":53267},[53268,53276,53277,53278,53279,53280,53287,53291,53297,53306],{"id":50458,"depth":37,"text":50459,"children":53269},[53270,53271,53272,53273,53274,53275],{"id":50462,"depth":1180,"text":50463},{"id":50479,"depth":1180,"text":50480},{"id":50519,"depth":1180,"text":50520},{"id":50531,"depth":1180,"text":50532},{"id":50540,"depth":1180,"text":50541},{"id":50588,"depth":1180,"text":50589},{"id":50598,"depth":37,"text":50599},{"id":50686,"depth":37,"text":50687},{"id":50709,"depth":37,"text":50710},{"id":50721,"depth":37,"text":50722},{"id":50908,"depth":37,"text":50909,"children":53281},[53282,53283,53284,53285,53286],{"id":50912,"depth":1180,"text":50913},{"id":50921,"depth":1180,"text":50922},{"id":50949,"depth":1180,"text":50950},{"id":50985,"depth":1180,"text":50986},{"id":51010,"depth":1180,"text":51011},{"id":51022,"depth":37,"text":51023,"children":53288},[53289,53290],{"id":51043,"depth":1180,"text":51044},{"id":51137,"depth":1180,"text":51138},{"id":51195,"depth":37,"text":51196,"children":53292},[53293,53294,53295,53296],{"id":51199,"depth":1180,"text":51200},{"id":51223,"depth":1180,"text":51224},{"id":51276,"depth":1180,"text":51277},{"id":52087,"depth":1180,"text":52088},{"id":52473,"depth":37,"text":52474,"children":53298},[53299,53300,53301,53302,53303,53304,53305],{"id":52491,"depth":1180,"text":52492},{"id":52528,"depth":1180,"text":52529},{"id":52559,"depth":1180,"text":52560},{"id":52592,"depth":1180,"text":52593},{"id":52673,"depth":1180,"text":52674},{"id":52771,"depth":1180,"text":52772},{"id":52829,"depth":1180,"text":52830},{"id":52882,"depth":37,"text":52883,"children":53307},[53308,53309,53310,53311,53312,53313,53314],{"id":52886,"depth":1180,"text":52887},{"id":52911,"depth":1180,"text":52912},{"id":52963,"depth":1180,"text":52964},{"id":52983,"depth":1180,"text":52984},{"id":53050,"depth":1180,"text":53051},{"id":53143,"depth":1180,"text":53144},{"id":53224,"depth":1180,"text":53225},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50450,"description":39},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53321,"title":53322,"body":53323,"description":39,"extension":40,"meta":76663,"navigation":42,"path":76664,"seo":76665,"stem":76666,"__hash__":76667},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53324,"toc":76603},[53325,53328,53331,53334,53339,53342,53345,53348,53352,53356,53362,53367,53375,53382,53385,53389,53394,53399,53404,53407,53410,53421,53424,53428,53431,53434,53439,53444,53449,53452,53455,53547,53550,53555,53558,53563,53566,53569,53574,53577,53582,53586,53589,53603,53607,53612,53615,53618,53622,53627,53630,53634,53638,53643,53647,53652,53655,53658,53661,53664,53667,53670,53675,53680,53708,53711,53714,53717,53722,53725,53728,53731,53734,53738,53767,53771,53776,53781,53784,53787,53790,53795,53910,53915,53920,54081,54086,54089,54093,54098,54103,54106,54109,54112,54115,54118,54121,54124,54127,54130,54133,54136,54139,54142,54145,54147,54150,54153,54156,54161,54165,54562,54565,54571,54575,54580,55862,55867,55870,55873,55876,55881,57077,57081,57087,57092,57095,57100,57105,57109,57113,57118,57121,57126,57129,57132,57136,58044,58047,58051,58272,58275,58278,58281,58507,58510,58734,58737,58741,58746,58749,58752,58980,58983,59016,59019,59023,59028,59032,59035,59038,59041,59044,59047,59050,59053,59058,60338,60342,60345,61438,61442,61445,61448,61451,61454,61458,61461,61464,61466,61474,62955,62959,62962,62965,62968,63177,63180,63184,63188,63193,63198,63201,63204,63209,63213,63218,63221,63330,63334,63339,63344,63347,63350,63354,63359,63364,63369,63372,63375,63386,63389,63394,63399,63402,63405,63478,63482,63487,63490,63492,63503,63507,63512,64838,64841,64844,64847,64849,64852,64855,64858,64861,64864,64867,64870,64873,64876,64879,64882,64885,64887,64889,64892,64896,65990,65993,65996,66012,66026,66029,66034,66040,66045,66049,66053,66058,66062,66067,66509,66514,66517,66521,66526,66529,66532,66536,66541,66545,66550,66555,66559,66564,66569,66572,66577,66582,66586,66591,66596,66700,66703,66707,66712,67078,67081,67084,67087,67090,67093,67096,67099,67102,68398,68402,68407,68412,68415,68418,68421,68424,68426,68431,68436,68439,68443,68448,68453,68458,68461,68464,68467,68470,68473,68478,68481,68485,68490,68495,68499,68504,68507,68512,68515,68518,68521,68524,68527,68532,68535,68538,68541,68544,68548,68553,68556,68560,68565,68568,68571,68575,68604,68607,68611,68615,68620,68624,68629,68632,68635,68638,68641,68644,68647,68650,68653,68656,68659,68662,68665,68668,68671,68675,68680,68685,68688,68692,68696,68701,68704,68708,68711,68714,68719,68724,68729,68734,68739,68742,68745,68750,68755,68759,68764,68767,68772,68775,68778,68781,68784,68789,68792,68801,68805,68810,68813,68816,68820,68823,68828,68832,68835,68841,68847,68851,68877,68880,70441,70444,70940,70943,70948,70953,70958,70962,70967,70972,70977,70981,70986,70989,70992,70995,70998,71002,71005,71010,71013,71018,71022,71027,71030,71035,71040,71045,71048,71051,71056,71061,71064,71067,71071,71074,71079,71082,71087,71090,71095,71100,71105,71108,71113,71178,71181,71192,71196,71201,71373,71377,71382,71385,71388,71391,71395,71406,71410,71413,71418,71423,71426,71429,71432,71435,71438,71440,71443,71446,71449,71454,71457,71462,71465,71469,71472,71475,71489,71493,71496,71551,71556,71559,71562,71567,71570,71574,71579,71709,71713,71718,71723,71804,71809,71813,71816,71821,71826,71832,71835,71838,71841,71845,71850,71853,71864,71868,71885,74932,74936,74939,74942,74945,74966,74970,74973,74981,74984,74989,74992,74995,75000,75005,75009,75030,75034,75039,75042,75045,75048,75051,75055,75060,75063,75067,75072,75075,75080,75083,75088,75091,75096,76299,76303,76308,76311,76316,76600],[10,53326,53322],{"id":53327},"_3web-apis",[14,53329,53330],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53332,53333],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53335,53336],{},[20,53337],{"alt":22,"src":53338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53340,53341],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53343,53344],{},"建议数组和对象使用 const 来声明",[14,53346,53347],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[57,53349,53351],{"id":53350},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[86,53353,53355],{"id":53354},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53357,53358,53361],{},[112,53359,53360],{},"document"," = HTML 文件解析后的对象化表示；",[14,53363,53364,53366],{},[112,53365,53360],{}," ≠ HTML 文件本身",[14,53368,53369,53374],{},[275,53370,53371],{},[112,53372,53373],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53376,53377,53381],{},[275,53378,53379],{},[112,53380,53360],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53383,53384],{},"document实际上为window.document的简写",[86,53386,53388],{"id":53387},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53390,53391],{},[20,53392],{"alt":22,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53395,53396],{},[20,53397],{"alt":22,"src":53398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53400,53401],{},[20,53402],{"alt":22,"src":53403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53405,53406],{},"console.dir()",[14,53408,53409],{},"dir用来打印对象",[1132,53411,53412,53415,53418],{},[72,53413,53414],{},"任何一个标签，都是一个对象",[72,53416,53417],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[72,53419,53420],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53422,53423],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[86,53425,53427],{"id":53426},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53429,53430],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53432,53433],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53435,53436],{},[275,53437,53438],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[69,53440,53441],{},[72,53442,53443],{},"利用CSS选择器来获取标签元素",[14,53445,53446],{},[20,53447],{"alt":22,"src":53448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53450,53451],{},"里边的选择器必须必须加引号！！！",[14,53453,53454],{},"只选择第一个元素",[106,53456,53458],{"className":53057,"code":53457,"language":53059,"meta":22,"style":22},"\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",[112,53459,53460,53468,53489,53508,53516,53521,53526,53531,53539],{"__ignoreMap":22},[115,53461,53462,53464,53466],{"class":117,"line":118},[115,53463,1035],{"class":125},[115,53465,51790],{"class":51290},[115,53467,51297],{"class":125},[115,53469,53470,53472,53474,53477,53479,53482,53485,53487],{"class":117,"line":37},[115,53471,52134],{"class":125},[115,53473,51601],{"class":51290},[115,53475,53476],{"class":1963}," class",[115,53478,171],{"class":125},[115,53480,53481],{"class":230},"\"box\"",[115,53483,53484],{"class":125},">123\u003C\u002F",[115,53486,51601],{"class":51290},[115,53488,51297],{"class":125},[115,53490,53491,53493,53495,53497,53499,53501,53504,53506],{"class":117,"line":1180},[115,53492,52134],{"class":125},[115,53494,51601],{"class":51290},[115,53496,53476],{"class":1963},[115,53498,171],{"class":125},[115,53500,53481],{"class":230},[115,53502,53503],{"class":125},">456\u003C\u002F",[115,53505,51601],{"class":51290},[115,53507,51297],{"class":125},[115,53509,53510,53512,53514],{"class":117,"line":1195},[115,53511,52134],{"class":125},[115,53513,51803],{"class":51290},[115,53515,51297],{"class":125},[115,53517,53518],{"class":117,"line":1201},[115,53519,53520],{"class":125},"    \u002F\u002F 1.获取匹配的第一个元素\n",[115,53522,53523],{"class":117,"line":1215},[115,53524,53525],{"class":125},"    const box = document.querySelector('div')\n",[115,53527,53528],{"class":117,"line":1221},[115,53529,53530],{"class":125},"    console.dir(box)\n",[115,53532,53533,53535,53537],{"class":117,"line":1312},[115,53534,52407],{"class":125},[115,53536,51803],{"class":51290},[115,53538,51297],{"class":125},[115,53540,53541,53543,53545],{"class":117,"line":1318},[115,53542,51775],{"class":125},[115,53544,51790],{"class":51290},[115,53546,51297],{"class":125},[14,53548,53549],{},"只选123，不选456",[14,53551,53552],{},[20,53553],{"alt":22,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53556,53557],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53559,53560],{},[20,53561],{"alt":22,"src":53562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53564,53565],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53567,53568],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[69,53570,53571],{"start":37},[72,53572,53573],{},"其他方法来获取标签元素",[14,53575,53576],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53578,53579],{},[20,53580],{"alt":22,"src":53581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[86,53583,53585],{"id":53584},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53587,53588],{},"设置修改DOM元素内容有两种方式：",[1132,53590,53591,53594,53597,53600],{},[72,53592,53593],{},"元素.innerText=''",[72,53595,53596],{},"元素.innerHTML=''",[72,53598,53599],{},"不写字符串输出数字也是可以的",[72,53601,53602],{},"元素.innerHtml=1",[21999,53604,53606],{"id":53605},"_3131-innertext","3.1.3.1 innerText",[14,53608,53609],{},[20,53610],{"alt":22,"src":53611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53613,53614],{},"思路：实现了修改盒子中的内容！",[14,53616,53617],{},"它只显示纯文本，不解析标签",[21999,53619,53621],{"id":53620},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53623,53624],{},[20,53625],{"alt":22,"src":53626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53628,53629],{},"相比于innerText，他的强大之处在于可以解析标签",[86,53631,53633],{"id":53632},"_314-操作元素属性","3.1.4 操作元素属性",[21999,53635,53637],{"id":53636},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53639,53640],{},[20,53641],{"alt":22,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21999,53644,53646],{"id":53645},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53648,53649],{},[20,53650],{"alt":22,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53653,53654],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53656,53657],{},"div.style.backgroundColor = 'hotpink'",[14,53659,53660],{},"如果按照css的写法，-表示减，就会出错",[14,53662,53663],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53665,53666],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53668,53669],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53671,53672],{},[20,53673],{"alt":22,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53676,53677],{},[20,53678],{"alt":22,"src":53679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[69,53681,53682,53685,53688,53691,53694,53697],{},[72,53683,53684],{},"className这个方式就是修改很多样式的时候来使用的！",[72,53686,53687],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[72,53689,53690],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[72,53692,53693],{},"className为属性名，如果还用class的话就导致与关键字冲突",[72,53695,53696],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[72,53698,53699,53700,53705],{},"解析标签的时候就变为了",[51601,53701],{"className":53702},[53703,53704],"nav","box",[53706,53707],"br",{},[14,53709,53710],{},"例子：",[51601,53712],{"className":53713},[53703],[51803,53715,53716],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53718,53719],{},[20,53720],{"alt":22,"src":53721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53723,53724],{},"追加和删除类名用classList",[14,53726,53727],{},"常用于类似于开关的操作",[14,53729,53730],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53732,53733],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21999,53735,53737],{"id":53736},"_3143-牢记点","3.1.4.3 牢记点",[69,53739,53740,53743,53746,53749,53752,53755,53758,53761,53764],{},[72,53741,53742],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[72,53744,53745],{},"使用style属性操作css时不要忘记引号",[72,53747,53748],{},"使用className或者classList时也不要忘记引号",[72,53750,53751],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[72,53753,53754],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[72,53756,53757],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[72,53759,53760],{},"若： let arr=['1','2',3] arr[0]=1",[72,53762,53763],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[72,53765,53766],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[86,53768,53770],{"id":53769},"_315-操作表单元素","3.1.5 操作表单元素",[69,53772,53773],{},[72,53774,53775],{},"天生的属性",[14,53777,53778],{},[20,53779],{"alt":22,"src":53780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53782,53783],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53785,53786],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53788,53789],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53791,53792],{},[20,53793],{"alt":22,"src":53794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[106,53796,53798],{"className":50623,"code":53797,"language":50625,"meta":22,"style":22},"在复选框中如果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",[112,53799,53800,53805,53837,53842,53847,53852,53857,53861,53866,53871,53888,53900,53905],{"__ignoreMap":22},[115,53801,53802],{"class":117,"line":118},[115,53803,53804],{"class":125},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[115,53806,53807,53809,53812,53815,53817,53820,53822,53824,53826,53828,53830,53832,53835],{"class":117,"line":37},[115,53808,1035],{"class":125},[115,53810,53811],{"class":51290},"input",[115,53813,53814],{"class":1963}," type",[115,53816,171],{"class":125},[115,53818,53819],{"class":230},"\"checkbox\"",[115,53821,14921],{"class":1963},[115,53823,171],{"class":125},[115,53825,7653],{"class":230},[115,53827,14960],{"class":1963},[115,53829,171],{"class":125},[115,53831,7653],{"class":230},[115,53833,53834],{"class":1963}," checked",[115,53836,51297],{"class":125},[115,53838,53839],{"class":117,"line":1180},[115,53840,53841],{"class":125},"不选的话：\n",[115,53843,53844],{"class":117,"line":1195},[115,53845,53846],{"class":125},"const input = document.querySelector('input')\n",[115,53848,53849],{"class":117,"line":1201},[115,53850,53851],{"class":125},"input.checked=false\n",[115,53853,53854],{"class":117,"line":1215},[115,53855,53856],{"class":125},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[115,53858,53859],{"class":117,"line":1221},[115,53860,2400],{"emptyLinePlaceholder":42},[115,53862,53863],{"class":117,"line":1312},[115,53864,53865],{"class":125},"禁用按钮：\n",[115,53867,53868],{"class":117,"line":1318},[115,53869,53870],{"class":125},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[115,53872,53873,53875,53878,53881,53884,53886],{"class":117,"line":1330},[115,53874,1035],{"class":125},[115,53876,53877],{"class":51290},"button",[115,53879,53880],{"class":1963}," disabled",[115,53882,53883],{"class":125},">点击\u003C\u002F",[115,53885,53877],{"class":51290},[115,53887,51297],{"class":125},[115,53889,53890,53892,53894,53896,53898],{"class":117,"line":1612},[115,53891,1035],{"class":125},[115,53893,53877],{"class":51290},[115,53895,53883],{"class":125},[115,53897,53877],{"class":51290},[115,53899,51297],{"class":125},[115,53901,53902],{"class":117,"line":1617},[115,53903,53904],{"class":125},"const bt = document.querySelector('button')\n",[115,53906,53907],{"class":117,"line":1623},[115,53908,53909],{"class":125},"bt.disabled = false\n",[69,53911,53912],{"start":37},[72,53913,53914],{},"自定义属性",[14,53916,53917],{},[20,53918],{"alt":22,"src":53919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[106,53921,53923],{"className":53057,"code":53922,"language":53059,"meta":22,"style":22},"\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",[112,53924,53925,53933,53961,53980,53999,54018,54037,54045,54050,54055,54060,54065,54073],{"__ignoreMap":22},[115,53926,53927,53929,53931],{"class":117,"line":118},[115,53928,1035],{"class":125},[115,53930,51790],{"class":51290},[115,53932,51297],{"class":125},[115,53934,53935,53937,53939,53942,53944,53946,53949,53951,53954,53957,53959],{"class":117,"line":37},[115,53936,52134],{"class":125},[115,53938,51601],{"class":51290},[115,53940,53941],{"class":1963}," data-id",[115,53943,171],{"class":125},[115,53945,3678],{"class":230},[115,53947,53948],{"class":1963}," data-spm",[115,53950,171],{"class":125},[115,53952,53953],{"class":230},"\"我不知道\"",[115,53955,53956],{"class":125},">1\u003C\u002F",[115,53958,51601],{"class":51290},[115,53960,51297],{"class":125},[115,53962,53963,53965,53967,53969,53971,53973,53976,53978],{"class":117,"line":1180},[115,53964,52134],{"class":125},[115,53966,51601],{"class":51290},[115,53968,53941],{"class":1963},[115,53970,171],{"class":125},[115,53972,3701],{"class":230},[115,53974,53975],{"class":125},">2\u003C\u002F",[115,53977,51601],{"class":51290},[115,53979,51297],{"class":125},[115,53981,53982,53984,53986,53988,53990,53992,53995,53997],{"class":117,"line":1195},[115,53983,52134],{"class":125},[115,53985,51601],{"class":51290},[115,53987,53941],{"class":1963},[115,53989,171],{"class":125},[115,53991,3714],{"class":230},[115,53993,53994],{"class":125},">3\u003C\u002F",[115,53996,51601],{"class":51290},[115,53998,51297],{"class":125},[115,54000,54001,54003,54005,54007,54009,54011,54014,54016],{"class":117,"line":1201},[115,54002,52134],{"class":125},[115,54004,51601],{"class":51290},[115,54006,53941],{"class":1963},[115,54008,171],{"class":125},[115,54010,3727],{"class":230},[115,54012,54013],{"class":125},">4\u003C\u002F",[115,54015,51601],{"class":51290},[115,54017,51297],{"class":125},[115,54019,54020,54022,54024,54026,54028,54030,54033,54035],{"class":117,"line":1215},[115,54021,52134],{"class":125},[115,54023,51601],{"class":51290},[115,54025,53941],{"class":1963},[115,54027,171],{"class":125},[115,54029,3748],{"class":230},[115,54031,54032],{"class":125},">5\u003C\u002F",[115,54034,51601],{"class":51290},[115,54036,51297],{"class":125},[115,54038,54039,54041,54043],{"class":117,"line":1221},[115,54040,52134],{"class":125},[115,54042,51803],{"class":51290},[115,54044,51297],{"class":125},[115,54046,54047],{"class":117,"line":1312},[115,54048,54049],{"class":125},"    const one = document.querySelector('div')\n",[115,54051,54052],{"class":117,"line":1318},[115,54053,54054],{"class":125},"    console.log(one.dataset)\n",[115,54056,54057],{"class":117,"line":1330},[115,54058,54059],{"class":125},"    console.log(one.dataset.id)\n",[115,54061,54062],{"class":117,"line":1612},[115,54063,54064],{"class":125},"    console.log(one.dataset.spm)\n",[115,54066,54067,54069,54071],{"class":117,"line":1617},[115,54068,52407],{"class":125},[115,54070,51803],{"class":51290},[115,54072,51297],{"class":125},[115,54074,54075,54077,54079],{"class":117,"line":1623},[115,54076,51775],{"class":125},[115,54078,51790],{"class":51290},[115,54080,51297],{"class":125},[14,54082,54083],{},[20,54084],{"alt":22,"src":54085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54087,54088],{},"document.querySelector选择的是第一个对象（元素）",[86,54090,54092],{"id":54091},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54094,54095],{},[20,54096],{"alt":22,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54099,54100],{},[20,54101],{"alt":22,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54104,54105],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51803,54107,54108],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54110,54111],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51803,54113,54114],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54116,54117],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54119,54120],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54122,54123],{},"单位为毫秒！！！",[14,54125,54126],{},"可以搭配匿名函数来用！！！",[14,54128,54129],{},"setInterval(function () {",[14,54131,54132],{},"alert('两秒执行一次')",[14,54134,54135],{},"}, 2000)",[14,54137,54138],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54140,54141],{},"function fn() {",[14,54143,54144],{},"document.write(1)",[14,54146,1071],{},[14,54148,54149],{},"setInterval(fn, 1000)",[14,54151,54152],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54154,54155],{},"setInterval('fn()', 1000)",[14,54157,54158],{},[20,54159],{"alt":22,"src":54160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21999,54162,54164],{"id":54163},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[106,54166,54168],{"className":50623,"code":54167,"language":50625,"meta":22,"style":22},"\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",[112,54169,54170,54180,54194,54198,54206,54220,54240,54252,54260,54264,54272,54309,54314,54319,54324,54332,54340,54362,54370,54375,54397,54402,54407,54418,54423,54443,54451,54466,54481,54492,54497,54507,54517,54521,54530,54534,54542,54550,54554],{"__ignoreMap":22},[115,54171,54172,54174,54176,54178],{"class":117,"line":118},[115,54173,51287],{"class":125},[115,54175,51291],{"class":51290},[115,54177,51294],{"class":1963},[115,54179,51297],{"class":125},[115,54181,54182,54184,54186,54188,54190,54192],{"class":117,"line":37},[115,54183,1035],{"class":125},[115,54185,50625],{"class":51290},[115,54187,51306],{"class":1963},[115,54189,171],{"class":125},[115,54191,51311],{"class":230},[115,54193,51297],{"class":125},[115,54195,54196],{"class":117,"line":1180},[115,54197,2400],{"emptyLinePlaceholder":42},[115,54199,54200,54202,54204],{"class":117,"line":1195},[115,54201,1035],{"class":125},[115,54203,51324],{"class":51290},[115,54205,51297],{"class":125},[115,54207,54208,54210,54212,54214,54216,54218],{"class":117,"line":1201},[115,54209,52134],{"class":125},[115,54211,51334],{"class":51290},[115,54213,51337],{"class":1963},[115,54215,171],{"class":125},[115,54217,51342],{"class":230},[115,54219,51297],{"class":125},[115,54221,54222,54224,54226,54228,54230,54232,54234,54236,54238],{"class":117,"line":1215},[115,54223,52134],{"class":125},[115,54225,51334],{"class":51290},[115,54227,14921],{"class":1963},[115,54229,171],{"class":125},[115,54231,51381],{"class":230},[115,54233,51361],{"class":1963},[115,54235,171],{"class":125},[115,54237,51388],{"class":230},[115,54239,51297],{"class":125},[115,54241,54242,54244,54246,54248,54250],{"class":117,"line":1221},[115,54243,52134],{"class":125},[115,54245,51397],{"class":51290},[115,54247,51400],{"class":125},[115,54249,51397],{"class":51290},[115,54251,51297],{"class":125},[115,54253,54254,54256,54258],{"class":117,"line":1312},[115,54255,51775],{"class":125},[115,54257,51324],{"class":51290},[115,54259,51297],{"class":125},[115,54261,54262],{"class":117,"line":1318},[115,54263,2400],{"emptyLinePlaceholder":42},[115,54265,54266,54268,54270],{"class":117,"line":1330},[115,54267,1035],{"class":125},[115,54269,51790],{"class":51290},[115,54271,51297],{"class":125},[115,54273,54274,54276,54279,54281,54283,54285,54287,54289,54291,54294,54296,54299,54302,54304,54307],{"class":117,"line":1612},[115,54275,52134],{"class":125},[115,54277,54278],{"class":51290},"textarea",[115,54280,14921],{"class":1963},[115,54282,171],{"class":125},[115,54284,7653],{"class":230},[115,54286,14960],{"class":1963},[115,54288,171],{"class":125},[115,54290,7653],{"class":230},[115,54292,54293],{"class":1963}," cols",[115,54295,171],{"class":125},[115,54297,54298],{"class":230},"\"30\"",[115,54300,54301],{"class":1963}," rows",[115,54303,171],{"class":125},[115,54305,54306],{"class":230},"\"10\"",[115,54308,51297],{"class":125},[115,54310,54311],{"class":117,"line":1617},[115,54312,54313],{"class":125},"        用户注册协议\n",[115,54315,54316],{"class":117,"line":1623},[115,54317,54318],{"class":125},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[115,54320,54321],{"class":117,"line":1628},[115,54322,54323],{"class":125},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[115,54325,54326,54328,54330],{"class":117,"line":1642},[115,54327,51766],{"class":125},[115,54329,54278],{"class":51290},[115,54331,51297],{"class":125},[115,54333,54334,54336,54338],{"class":117,"line":1647},[115,54335,52134],{"class":125},[115,54337,53706],{"class":51290},[115,54339,51297],{"class":125},[115,54341,54342,54344,54346,54348,54350,54353,54355,54358,54360],{"class":117,"line":1653},[115,54343,52134],{"class":125},[115,54345,53877],{"class":51290},[115,54347,53476],{"class":1963},[115,54349,171],{"class":125},[115,54351,54352],{"class":230},"\"btn\"",[115,54354,53880],{"class":1963},[115,54356,54357],{"class":125},">我已经阅读用户协议(5)\u003C\u002F",[115,54359,53877],{"class":51290},[115,54361,51297],{"class":125},[115,54363,54364,54366,54368],{"class":117,"line":1674},[115,54365,52134],{"class":125},[115,54367,51803],{"class":51290},[115,54369,51297],{"class":125},[115,54371,54372],{"class":117,"line":1679},[115,54373,54374],{"class":184},"    \u002F\u002F 1. 获取元素\n",[115,54376,54377,54379,54382,54384,54387,54390,54392,54395],{"class":117,"line":1693},[115,54378,11222],{"class":121},[115,54380,54381],{"class":174}," btn",[115,54383,13565],{"class":121},[115,54385,54386],{"class":125}," document.",[115,54388,54389],{"class":1963},"querySelector",[115,54391,126],{"class":125},[115,54393,54394],{"class":230},"'.btn'",[115,54396,132],{"class":125},[115,54398,54399],{"class":117,"line":1698},[115,54400,54401],{"class":184},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[115,54403,54404],{"class":117,"line":1727},[115,54405,54406],{"class":184},"    \u002F\u002F 2. 倒计时\n",[115,54408,54409,54411,54413,54415],{"class":117,"line":1732},[115,54410,52209],{"class":121},[115,54412,9439],{"class":125},[115,54414,171],{"class":121},[115,54416,54417],{"class":174}," 5\n",[115,54419,54420],{"class":117,"line":1749},[115,54421,54422],{"class":184},"    \u002F\u002F 2.1 开启定时器\n",[115,54424,54425,54427,54430,54432,54435,54437,54440],{"class":117,"line":1754},[115,54426,52209],{"class":121},[115,54428,54429],{"class":125}," n ",[115,54431,171],{"class":121},[115,54433,54434],{"class":1963}," setInterval",[115,54436,126],{"class":125},[115,54438,54439],{"class":121},"function",[115,54441,54442],{"class":125}," () {\n",[115,54444,54445,54448],{"class":117,"line":1759},[115,54446,54447],{"class":125},"      i",[115,54449,54450],{"class":121},"--\n",[115,54452,54453,54456,54458,54461,54463],{"class":117,"line":1764},[115,54454,54455],{"class":125},"      btn.innerHTML ",[115,54457,171],{"class":121},[115,54459,54460],{"class":230}," `我已经阅读用户协议(${",[115,54462,566],{"class":125},[115,54464,54465],{"class":230},"})`\n",[115,54467,54468,54471,54474,54477,54479],{"class":117,"line":1778},[115,54469,54470],{"class":121},"      if",[115,54472,54473],{"class":125}," (i ",[115,54475,54476],{"class":121},"===",[115,54478,4093],{"class":174},[115,54480,12443],{"class":125},[115,54482,54483,54486,54489],{"class":117,"line":1783},[115,54484,54485],{"class":1963},"        clearInterval",[115,54487,54488],{"class":125},"(n)  ",[115,54490,54491],{"class":184},"\u002F\u002F 关闭定时器\n",[115,54493,54494],{"class":117,"line":2577},[115,54495,54496],{"class":184},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[115,54498,54499,54502,54504],{"class":117,"line":2591},[115,54500,54501],{"class":125},"        btn.disabled ",[115,54503,171],{"class":121},[115,54505,54506],{"class":174}," false\n",[115,54508,54509,54512,54514],{"class":117,"line":2599},[115,54510,54511],{"class":125},"        btn.innerHTML ",[115,54513,171],{"class":121},[115,54515,54516],{"class":230}," '同意'\n",[115,54518,54519],{"class":117,"line":2604},[115,54520,52388],{"class":125},[115,54522,54523,54526,54528],{"class":117,"line":2610},[115,54524,54525],{"class":125},"    }, ",[115,54527,6411],{"class":174},[115,54529,132],{"class":125},[115,54531,54532],{"class":117,"line":2616},[115,54533,2400],{"emptyLinePlaceholder":42},[115,54535,54536,54538,54540],{"class":117,"line":2621},[115,54537,52407],{"class":125},[115,54539,51803],{"class":51290},[115,54541,51297],{"class":125},[115,54543,54544,54546,54548],{"class":117,"line":7949},[115,54545,51775],{"class":125},[115,54547,51790],{"class":51290},[115,54549,51297],{"class":125},[115,54551,54552],{"class":117,"line":7973},[115,54553,2400],{"emptyLinePlaceholder":42},[115,54555,54556,54558,54560],{"class":117,"line":7978},[115,54557,51775],{"class":125},[115,54559,50625],{"class":51290},[115,54561,51297],{"class":125},[14,54563,54564],{},"不要一直想着用死循环,避免死循环",[14,54566,54567,54570],{},[112,54568,54569],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21999,54572,54574],{"id":54573},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[69,54576,54577],{},[72,54578,54579],{},"法1",[106,54581,54583],{"className":50623,"code":54582,"language":50625,"meta":22,"style":22},"\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",[112,54584,54585,54595,54609,54613,54621,54635,54655,54667,54675,54681,54692,54703,54707,54711,54718,54730,54734,54738,54745,54757,54771,54784,54798,54802,54806,54813,54824,54835,54846,54858,54870,54882,54886,54890,54898,54908,54921,54933,54946,54950,54954,54961,54971,54983,54995,55006,55017,55027,55039,55051,55055,55059,55068,55080,55092,55120,55133,55137,55141,55148,55159,55163,55171,55179,55183,55191,55205,55220,55244,55252,55267,55280,55288,55309,55321,55333,55345,55357,55369,55381,55393,55402,55410,55418,55426,55438,55461,55480,55499,55518,55537,55556,55575,55595,55599,55619,55638,55658,55679,55690,55707,55717,55727,55737,55742,55747,55752,55757,55782,55795,55799,55822,55826,55834,55842,55850,55854],{"__ignoreMap":22},[115,54586,54587,54589,54591,54593],{"class":117,"line":118},[115,54588,51287],{"class":125},[115,54590,51291],{"class":51290},[115,54592,51294],{"class":1963},[115,54594,51297],{"class":125},[115,54596,54597,54599,54601,54603,54605,54607],{"class":117,"line":37},[115,54598,1035],{"class":125},[115,54600,50625],{"class":51290},[115,54602,51306],{"class":1963},[115,54604,171],{"class":125},[115,54606,51311],{"class":230},[115,54608,51297],{"class":125},[115,54610,54611],{"class":117,"line":1180},[115,54612,2400],{"emptyLinePlaceholder":42},[115,54614,54615,54617,54619],{"class":117,"line":1195},[115,54616,1035],{"class":125},[115,54618,51324],{"class":51290},[115,54620,51297],{"class":125},[115,54622,54623,54625,54627,54629,54631,54633],{"class":117,"line":1201},[115,54624,52134],{"class":125},[115,54626,51334],{"class":51290},[115,54628,51337],{"class":1963},[115,54630,171],{"class":125},[115,54632,51342],{"class":230},[115,54634,51297],{"class":125},[115,54636,54637,54639,54641,54643,54645,54647,54649,54651,54653],{"class":117,"line":1215},[115,54638,52134],{"class":125},[115,54640,51334],{"class":51290},[115,54642,14921],{"class":1963},[115,54644,171],{"class":125},[115,54646,51381],{"class":230},[115,54648,51361],{"class":1963},[115,54650,171],{"class":125},[115,54652,51388],{"class":230},[115,54654,51297],{"class":125},[115,54656,54657,54659,54661,54663,54665],{"class":117,"line":1221},[115,54658,52134],{"class":125},[115,54660,51397],{"class":51290},[115,54662,51400],{"class":125},[115,54664,51397],{"class":51290},[115,54666,51297],{"class":125},[115,54668,54669,54671,54673],{"class":117,"line":1312},[115,54670,52134],{"class":125},[115,54672,5127],{"class":51290},[115,54674,51297],{"class":125},[115,54676,54677,54679],{"class":117,"line":1318},[115,54678,6404],{"class":51290},[115,54680,15573],{"class":125},[115,54682,54683,54686,54688,54690],{"class":117,"line":1330},[115,54684,54685],{"class":174},"      padding",[115,54687,51427],{"class":125},[115,54689,317],{"class":174},[115,54691,1291],{"class":125},[115,54693,54694,54697,54699,54701],{"class":117,"line":1612},[115,54695,54696],{"class":174},"      margin",[115,54698,51427],{"class":125},[115,54700,317],{"class":174},[115,54702,1291],{"class":125},[115,54704,54705],{"class":117,"line":1617},[115,54706,2187],{"class":125},[115,54708,54709],{"class":117,"line":1623},[115,54710,2400],{"emptyLinePlaceholder":42},[115,54712,54713,54716],{"class":117,"line":1628},[115,54714,54715],{"class":51290},"    li",[115,54717,15573],{"class":125},[115,54719,54720,54723,54725,54728],{"class":117,"line":1642},[115,54721,54722],{"class":174},"      list-style",[115,54724,51427],{"class":125},[115,54726,54727],{"class":174},"none",[115,54729,1291],{"class":125},[115,54731,54732],{"class":117,"line":1647},[115,54733,2187],{"class":125},[115,54735,54736],{"class":117,"line":1653},[115,54737,2400],{"emptyLinePlaceholder":42},[115,54739,54740,54743],{"class":117,"line":1674},[115,54741,54742],{"class":1963},"    .box",[115,54744,15573],{"class":125},[115,54746,54747,54750,54752,54755],{"class":117,"line":1679},[115,54748,54749],{"class":174},"      position",[115,54751,51427],{"class":125},[115,54753,54754],{"class":174},"relative",[115,54756,1291],{"class":125},[115,54758,54759,54762,54764,54767,54769],{"class":117,"line":1693},[115,54760,54761],{"class":174},"      width",[115,54763,51427],{"class":125},[115,54765,54766],{"class":174},"976",[115,54768,51482],{"class":121},[115,54770,1291],{"class":125},[115,54772,54773,54776,54778,54780,54782],{"class":117,"line":1698},[115,54774,54775],{"class":174},"      height",[115,54777,51427],{"class":125},[115,54779,1539],{"class":174},[115,54781,51482],{"class":121},[115,54783,1291],{"class":125},[115,54785,54786,54788,54790,54792,54794,54796],{"class":117,"line":1727},[115,54787,54696],{"class":174},[115,54789,51427],{"class":125},[115,54791,436],{"class":174},[115,54793,51482],{"class":121},[115,54795,51546],{"class":174},[115,54797,1291],{"class":125},[115,54799,54800],{"class":117,"line":1732},[115,54801,2187],{"class":125},[115,54803,54804],{"class":117,"line":1749},[115,54805,2400],{"emptyLinePlaceholder":42},[115,54807,54808,54811],{"class":117,"line":1754},[115,54809,54810],{"class":1963},"    .slider-footer",[115,54812,15573],{"class":125},[115,54814,54815,54817,54819,54822],{"class":117,"line":1759},[115,54816,54749],{"class":174},[115,54818,51427],{"class":125},[115,54820,54821],{"class":174},"absolute",[115,54823,1291],{"class":125},[115,54825,54826,54829,54831,54833],{"class":117,"line":1764},[115,54827,54828],{"class":174},"      left",[115,54830,51427],{"class":125},[115,54832,317],{"class":174},[115,54834,1291],{"class":125},[115,54836,54837,54840,54842,54844],{"class":117,"line":1778},[115,54838,54839],{"class":174},"      bottom",[115,54841,51427],{"class":125},[115,54843,317],{"class":174},[115,54845,1291],{"class":125},[115,54847,54848,54850,54852,54854,54856],{"class":117,"line":1783},[115,54849,54761],{"class":174},[115,54851,51427],{"class":125},[115,54853,436],{"class":174},[115,54855,453],{"class":121},[115,54857,1291],{"class":125},[115,54859,54860,54862,54864,54866,54868],{"class":117,"line":2577},[115,54861,54775],{"class":174},[115,54863,51427],{"class":125},[115,54865,700],{"class":174},[115,54867,453],{"class":121},[115,54869,1291],{"class":125},[115,54871,54872,54875,54877,54880],{"class":117,"line":2591},[115,54873,54874],{"class":174},"      background-color",[115,54876,51427],{"class":125},[115,54878,54879],{"class":174},"skyblue",[115,54881,1291],{"class":125},[115,54883,54884],{"class":117,"line":2599},[115,54885,2187],{"class":125},[115,54887,54888],{"class":117,"line":2604},[115,54889,2400],{"emptyLinePlaceholder":42},[115,54891,54892,54894,54896],{"class":117,"line":2610},[115,54893,54810],{"class":1963},[115,54895,6826],{"class":51290},[115,54897,15573],{"class":125},[115,54899,54900,54902,54904,54906],{"class":117,"line":2616},[115,54901,54749],{"class":174},[115,54903,51427],{"class":125},[115,54905,54821],{"class":174},[115,54907,1291],{"class":125},[115,54909,54910,54913,54915,54917,54919],{"class":117,"line":2621},[115,54911,54912],{"class":174},"      font-size",[115,54914,51427],{"class":125},[115,54916,1026],{"class":174},[115,54918,51482],{"class":121},[115,54920,1291],{"class":125},[115,54922,54923,54925,54927,54929,54931],{"class":117,"line":7949},[115,54924,54828],{"class":174},[115,54926,51427],{"class":125},[115,54928,825],{"class":174},[115,54930,51482],{"class":121},[115,54932,1291],{"class":125},[115,54934,54935,54938,54940,54942,54944],{"class":117,"line":7973},[115,54936,54937],{"class":174},"      top",[115,54939,51427],{"class":125},[115,54941,444],{"class":174},[115,54943,51482],{"class":121},[115,54945,1291],{"class":125},[115,54947,54948],{"class":117,"line":7978},[115,54949,2187],{"class":125},[115,54951,54952],{"class":117,"line":7984},[115,54953,2400],{"emptyLinePlaceholder":42},[115,54955,54956,54959],{"class":117,"line":8011},[115,54957,54958],{"class":51290},"    ul",[115,54960,15573],{"class":125},[115,54962,54963,54965,54967,54969],{"class":117,"line":8016},[115,54964,54749],{"class":174},[115,54966,51427],{"class":125},[115,54968,54821],{"class":174},[115,54970,1291],{"class":125},[115,54972,54973,54975,54977,54979,54981],{"class":117,"line":8022},[115,54974,54937],{"class":174},[115,54976,51427],{"class":125},[115,54978,906],{"class":174},[115,54980,51482],{"class":121},[115,54982,1291],{"class":125},[115,54984,54985,54987,54989,54991,54993],{"class":117,"line":8034},[115,54986,54828],{"class":174},[115,54988,51427],{"class":125},[115,54990,825],{"class":174},[115,54992,51482],{"class":121},[115,54994,1291],{"class":125},[115,54996,54997,55000,55002,55004],{"class":117,"line":8046},[115,54998,54999],{"class":174},"      display",[115,55001,51427],{"class":125},[115,55003,51467],{"class":174},[115,55005,1291],{"class":125},[115,55007,55008,55011,55013,55015],{"class":117,"line":8058},[115,55009,55010],{"class":174},"      justify-content",[115,55012,51427],{"class":125},[115,55014,51658],{"class":174},[115,55016,1291],{"class":125},[115,55018,55019,55021,55023,55025],{"class":117,"line":9717},[115,55020,54749],{"class":174},[115,55022,51427],{"class":125},[115,55024,54821],{"class":174},[115,55026,1291],{"class":125},[115,55028,55029,55031,55033,55035,55037],{"class":117,"line":9742},[115,55030,54761],{"class":174},[115,55032,51427],{"class":125},[115,55034,3992],{"class":174},[115,55036,51482],{"class":121},[115,55038,1291],{"class":125},[115,55040,55041,55043,55045,55047,55049],{"class":117,"line":9765},[115,55042,54775],{"class":174},[115,55044,51427],{"class":125},[115,55046,825],{"class":174},[115,55048,51482],{"class":121},[115,55050,1291],{"class":125},[115,55052,55053],{"class":117,"line":9789},[115,55054,2187],{"class":125},[115,55056,55057],{"class":117,"line":9794},[115,55058,2400],{"emptyLinePlaceholder":42},[115,55060,55061,55063,55066],{"class":117,"line":9799},[115,55062,54958],{"class":51290},[115,55064,55065],{"class":51290}," li",[115,55067,15573],{"class":125},[115,55069,55070,55072,55074,55076,55078],{"class":117,"line":9804},[115,55071,54761],{"class":174},[115,55073,51427],{"class":125},[115,55075,825],{"class":174},[115,55077,51482],{"class":121},[115,55079,1291],{"class":125},[115,55081,55082,55084,55086,55088,55090],{"class":117,"line":9813},[115,55083,54775],{"class":174},[115,55085,51427],{"class":125},[115,55087,825],{"class":174},[115,55089,51482],{"class":121},[115,55091,1291],{"class":125},[115,55093,55094,55096,55098,55101,55103,55105,55107,55109,55111,55113,55115,55118],{"class":117,"line":9818},[115,55095,54874],{"class":174},[115,55097,51427],{"class":125},[115,55099,55100],{"class":174},"rgba",[115,55102,126],{"class":125},[115,55104,317],{"class":174},[115,55106,12436],{"class":125},[115,55108,317],{"class":174},[115,55110,12436],{"class":125},[115,55112,317],{"class":174},[115,55114,12436],{"class":125},[115,55116,55117],{"class":174},".4",[115,55119,2719],{"class":125},[115,55121,55122,55125,55127,55129,55131],{"class":117,"line":9824},[115,55123,55124],{"class":174},"      border-radius",[115,55126,51427],{"class":125},[115,55128,571],{"class":174},[115,55130,51482],{"class":121},[115,55132,1291],{"class":125},[115,55134,55135],{"class":117,"line":9845},[115,55136,2187],{"class":125},[115,55138,55139],{"class":117,"line":9851},[115,55140,2400],{"emptyLinePlaceholder":42},[115,55142,55143,55146],{"class":117,"line":9865},[115,55144,55145],{"class":1963},"    .activate",[115,55147,15573],{"class":125},[115,55149,55150,55152,55154,55157],{"class":117,"line":9871},[115,55151,54874],{"class":174},[115,55153,51427],{"class":125},[115,55155,55156],{"class":174},"#f7f7f7",[115,55158,1291],{"class":125},[115,55160,55161],{"class":117,"line":9898},[115,55162,2187],{"class":125},[115,55164,55165,55167,55169],{"class":117,"line":9907},[115,55166,52407],{"class":125},[115,55168,5127],{"class":51290},[115,55170,51297],{"class":125},[115,55172,55173,55175,55177],{"class":117,"line":9913},[115,55174,51775],{"class":125},[115,55176,51324],{"class":51290},[115,55178,51297],{"class":125},[115,55180,55181],{"class":117,"line":9921},[115,55182,2400],{"emptyLinePlaceholder":42},[115,55184,55185,55187,55189],{"class":117,"line":9926},[115,55186,1035],{"class":125},[115,55188,51790],{"class":51290},[115,55190,51297],{"class":125},[115,55192,55193,55195,55197,55199,55201,55203],{"class":117,"line":16605},[115,55194,52134],{"class":125},[115,55196,51601],{"class":51290},[115,55198,53476],{"class":1963},[115,55200,171],{"class":125},[115,55202,53481],{"class":230},[115,55204,51297],{"class":125},[115,55206,55207,55209,55211,55213,55215,55218],{"class":117,"line":16611},[115,55208,51331],{"class":125},[115,55210,51601],{"class":51290},[115,55212,53476],{"class":1963},[115,55214,171],{"class":125},[115,55216,55217],{"class":230},"\"slider-wrapper\"",[115,55219,51297],{"class":125},[115,55221,55222,55225,55227,55230,55232,55235,55238,55240,55242],{"class":117,"line":16634},[115,55223,55224],{"class":125},"      \u003C",[115,55226,20],{"class":51290},[115,55228,55229],{"class":1963}," src",[115,55231,171],{"class":125},[115,55233,55234],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[115,55236,55237],{"class":1963}," alt",[115,55239,171],{"class":125},[115,55241,7653],{"class":230},[115,55243,51297],{"class":125},[115,55245,55246,55248,55250],{"class":117,"line":16640},[115,55247,51766],{"class":125},[115,55249,51601],{"class":51290},[115,55251,51297],{"class":125},[115,55253,55254,55256,55258,55260,55262,55265],{"class":117,"line":16663},[115,55255,51331],{"class":125},[115,55257,51601],{"class":51290},[115,55259,53476],{"class":1963},[115,55261,171],{"class":125},[115,55263,55264],{"class":230},"\"slider-footer\"",[115,55266,51297],{"class":125},[115,55268,55269,55271,55273,55276,55278],{"class":117,"line":16677},[115,55270,55224],{"class":125},[115,55272,14],{"class":51290},[115,55274,55275],{"class":125},">对人类来说会不会太超前了?\u003C\u002F",[115,55277,14],{"class":51290},[115,55279,51297],{"class":125},[115,55281,55282,55284,55286],{"class":117,"line":16697},[115,55283,55224],{"class":125},[115,55285,1132],{"class":51290},[115,55287,51297],{"class":125},[115,55289,55290,55293,55295,55297,55299,55302,55305,55307],{"class":117,"line":16703},[115,55291,55292],{"class":125},"        \u003C",[115,55294,72],{"class":51290},[115,55296,53476],{"class":1963},[115,55298,171],{"class":125},[115,55300,55301],{"class":230},"\"activate\"",[115,55303,55304],{"class":125},">\u003C\u002F",[115,55306,72],{"class":51290},[115,55308,51297],{"class":125},[115,55310,55311,55313,55315,55317,55319],{"class":117,"line":16714},[115,55312,55292],{"class":125},[115,55314,72],{"class":51290},[115,55316,55304],{"class":125},[115,55318,72],{"class":51290},[115,55320,51297],{"class":125},[115,55322,55323,55325,55327,55329,55331],{"class":117,"line":16737},[115,55324,55292],{"class":125},[115,55326,72],{"class":51290},[115,55328,55304],{"class":125},[115,55330,72],{"class":51290},[115,55332,51297],{"class":125},[115,55334,55335,55337,55339,55341,55343],{"class":117,"line":16759},[115,55336,55292],{"class":125},[115,55338,72],{"class":51290},[115,55340,55304],{"class":125},[115,55342,72],{"class":51290},[115,55344,51297],{"class":125},[115,55346,55347,55349,55351,55353,55355],{"class":117,"line":16764},[115,55348,55292],{"class":125},[115,55350,72],{"class":51290},[115,55352,55304],{"class":125},[115,55354,72],{"class":51290},[115,55356,51297],{"class":125},[115,55358,55359,55361,55363,55365,55367],{"class":117,"line":16770},[115,55360,55292],{"class":125},[115,55362,72],{"class":51290},[115,55364,55304],{"class":125},[115,55366,72],{"class":51290},[115,55368,51297],{"class":125},[115,55370,55371,55373,55375,55377,55379],{"class":117,"line":16784},[115,55372,55292],{"class":125},[115,55374,72],{"class":51290},[115,55376,55304],{"class":125},[115,55378,72],{"class":51290},[115,55380,51297],{"class":125},[115,55382,55383,55385,55387,55389,55391],{"class":117,"line":16797},[115,55384,55292],{"class":125},[115,55386,72],{"class":51290},[115,55388,55304],{"class":125},[115,55390,72],{"class":51290},[115,55392,51297],{"class":125},[115,55394,55395,55398,55400],{"class":117,"line":16802},[115,55396,55397],{"class":125},"      \u003C\u002F",[115,55399,1132],{"class":51290},[115,55401,51297],{"class":125},[115,55403,55404,55406,55408],{"class":117,"line":16816},[115,55405,51766],{"class":125},[115,55407,51601],{"class":51290},[115,55409,51297],{"class":125},[115,55411,55412,55414,55416],{"class":117,"line":16821},[115,55413,52407],{"class":125},[115,55415,51601],{"class":51290},[115,55417,51297],{"class":125},[115,55419,55420,55422,55424],{"class":117,"line":16827},[115,55421,52134],{"class":125},[115,55423,51803],{"class":51290},[115,55425,51297],{"class":125},[115,55427,55428,55430,55433,55435],{"class":117,"line":16832},[115,55429,11222],{"class":121},[115,55431,55432],{"class":174}," arrImage",[115,55434,13565],{"class":121},[115,55436,55437],{"class":125}," [\n",[115,55439,55440,55443,55446,55449,55452,55455,55458],{"class":117,"line":16846},[115,55441,55442],{"class":125},"      { url: ",[115,55444,55445],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[115,55447,55448],{"class":125},", title: ",[115,55450,55451],{"class":230},"'对人类来说会不会太超前了?'",[115,55453,55454],{"class":125},", color: ",[115,55456,55457],{"class":230},"'rgba(100,67,68)'",[115,55459,55460],{"class":125}," },\n",[115,55462,55463,55465,55468,55470,55473,55475,55478],{"class":117,"line":16851},[115,55464,55442],{"class":125},[115,55466,55467],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[115,55469,55448],{"class":125},[115,55471,55472],{"class":230},"'开启剑与雪的黑暗传说!'",[115,55474,55454],{"class":125},[115,55476,55477],{"class":230},"'rgba(43,35,26)'",[115,55479,55460],{"class":125},[115,55481,55482,55484,55487,55489,55492,55494,55497],{"class":117,"line":16856},[115,55483,55442],{"class":125},[115,55485,55486],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[115,55488,55448],{"class":125},[115,55490,55491],{"class":230},"'真正的jo厨出现了!'",[115,55493,55454],{"class":125},[115,55495,55496],{"class":230},"'rgba(36,31,33)'",[115,55498,55460],{"class":125},[115,55500,55501,55503,55506,55508,55511,55513,55516],{"class":117,"line":16870},[115,55502,55442],{"class":125},[115,55504,55505],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[115,55507,55448],{"class":125},[115,55509,55510],{"class":230},"'李玉刚:让世界通过b站看到东方大国文化'",[115,55512,55454],{"class":125},[115,55514,55515],{"class":230},"'rgba(139,98,66)'",[115,55517,55460],{"class":125},[115,55519,55520,55522,55525,55527,55530,55532,55535],{"class":117,"line":16882},[115,55521,55442],{"class":125},[115,55523,55524],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[115,55526,55448],{"class":125},[115,55528,55529],{"class":230},"'快来分享你的寒假日常吧'",[115,55531,55454],{"class":125},[115,55533,55534],{"class":230},"'rgba(67,90,92)'",[115,55536,55460],{"class":125},[115,55538,55539,55541,55544,55546,55549,55551,55554],{"class":117,"line":16887},[115,55540,55442],{"class":125},[115,55542,55543],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[115,55545,55448],{"class":125},[115,55547,55548],{"class":230},"'哔哩哔哩小年YEAR'",[115,55550,55454],{"class":125},[115,55552,55553],{"class":230},"'rgba(166,131,143)'",[115,55555,55460],{"class":125},[115,55557,55558,55560,55563,55565,55568,55570,55573],{"class":117,"line":16900},[115,55559,55442],{"class":125},[115,55561,55562],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[115,55564,55448],{"class":125},[115,55566,55567],{"class":230},"'一站式解决你的电脑配置问题'",[115,55569,55454],{"class":125},[115,55571,55572],{"class":230},"'rgba(53,29,25)'",[115,55574,55460],{"class":125},[115,55576,55577,55579,55582,55584,55587,55589,55592],{"class":117,"line":16905},[115,55578,55442],{"class":125},[115,55580,55581],{"class":230},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[115,55583,55448],{"class":125},[115,55585,55586],{"class":230},"'谁不想和小猫咪贴贴呢?'",[115,55588,55454],{"class":125},[115,55590,55591],{"class":230},"'rgba(99,72,114)'",[115,55593,55594],{"class":125}," }\n",[115,55596,55597],{"class":117,"line":16910},[115,55598,53099],{"class":125},[115,55600,55601,55603,55606,55608,55610,55612,55614,55617],{"class":117,"line":16915},[115,55602,11222],{"class":121},[115,55604,55605],{"class":174}," img",[115,55607,13565],{"class":121},[115,55609,54386],{"class":125},[115,55611,54389],{"class":1963},[115,55613,126],{"class":125},[115,55615,55616],{"class":230},"'.slider-wrapper img'",[115,55618,132],{"class":125},[115,55620,55621,55623,55625,55627,55629,55631,55633,55636],{"class":117,"line":16928},[115,55622,11222],{"class":121},[115,55624,6826],{"class":174},[115,55626,13565],{"class":121},[115,55628,54386],{"class":125},[115,55630,54389],{"class":1963},[115,55632,126],{"class":125},[115,55634,55635],{"class":230},"'.slider-footer p'",[115,55637,132],{"class":125},[115,55639,55640,55642,55645,55647,55649,55651,55653,55656],{"class":117,"line":16933},[115,55641,11222],{"class":121},[115,55643,55644],{"class":174}," color",[115,55646,13565],{"class":121},[115,55648,54386],{"class":125},[115,55650,54389],{"class":1963},[115,55652,126],{"class":125},[115,55654,55655],{"class":230},"'.slider-footer'",[115,55657,132],{"class":125},[115,55659,55660,55662,55665,55667,55669,55672,55674,55677],{"class":117,"line":32634},[115,55661,11222],{"class":121},[115,55663,55664],{"class":174}," lis",[115,55666,13565],{"class":121},[115,55668,54386],{"class":125},[115,55670,55671],{"class":1963},"querySelectorAll",[115,55673,126],{"class":125},[115,55675,55676],{"class":230},"'.slider-footer ul li'",[115,55678,132],{"class":125},[115,55680,55681,55683,55685,55687],{"class":117,"line":32640},[115,55682,52209],{"class":121},[115,55684,9439],{"class":125},[115,55686,171],{"class":121},[115,55688,55689],{"class":174}," 1\n",[115,55691,55692,55694,55697,55699,55701,55703,55705],{"class":117,"line":32646},[115,55693,52209],{"class":121},[115,55695,55696],{"class":125}," timer ",[115,55698,171],{"class":121},[115,55700,54434],{"class":1963},[115,55702,126],{"class":125},[115,55704,54439],{"class":121},[115,55706,54442],{"class":125},[115,55708,55709,55712,55714],{"class":117,"line":32652},[115,55710,55711],{"class":125},"      img.src ",[115,55713,171],{"class":121},[115,55715,55716],{"class":125}," arrImage[i].url\n",[115,55718,55719,55722,55724],{"class":117,"line":32658},[115,55720,55721],{"class":125},"      p.innerHTML ",[115,55723,171],{"class":121},[115,55725,55726],{"class":125}," arrImage[i].title\n",[115,55728,55729,55732,55734],{"class":117,"line":32669},[115,55730,55731],{"class":125},"      color.style.backgroundColor ",[115,55733,171],{"class":121},[115,55735,55736],{"class":125}," arrImage[i].color\n",[115,55738,55739],{"class":117,"line":32675},[115,55740,55741],{"class":184},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[115,55743,55744],{"class":117,"line":32695},[115,55745,55746],{"class":184},"      \u002F\u002F li.classList.add('activate')\n",[115,55748,55749],{"class":117,"line":32701},[115,55750,55751],{"class":184},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[115,55753,55754],{"class":117,"line":32712},[115,55755,55756],{"class":184},"      \u002F\u002F lis[i].classList.remove('activate')\n",[115,55758,55759,55762,55764,55766,55769,55772,55775,55777,55780],{"class":117,"line":32718},[115,55760,55761],{"class":125},"      document.",[115,55763,54389],{"class":1963},[115,55765,126],{"class":125},[115,55767,55768],{"class":230},"'.activate'",[115,55770,55771],{"class":125},")?.classList.",[115,55773,55774],{"class":1963},"toggle",[115,55776,126],{"class":125},[115,55778,55779],{"class":230},"'activate'",[115,55781,132],{"class":125},[115,55783,55784,55787,55789,55791,55793],{"class":117,"line":32724},[115,55785,55786],{"class":125},"      lis[i].classList.",[115,55788,5335],{"class":1963},[115,55790,126],{"class":125},[115,55792,55779],{"class":230},[115,55794,132],{"class":125},[115,55796,55797],{"class":117,"line":32730},[115,55798,2400],{"emptyLinePlaceholder":42},[115,55800,55801,55804,55806,55808,55810,55812,55814,55816,55819],{"class":117,"line":32736},[115,55802,55803],{"class":125},"      i ",[115,55805,171],{"class":121},[115,55807,54473],{"class":125},[115,55809,606],{"class":121},[115,55811,25119],{"class":174},[115,55813,13715],{"class":125},[115,55815,453],{"class":121},[115,55817,55818],{"class":125}," arrImage.",[115,55820,55821],{"class":174},"length\n",[115,55823,55824],{"class":117,"line":32742},[115,55825,2400],{"emptyLinePlaceholder":42},[115,55827,55828,55830,55832],{"class":117,"line":32748},[115,55829,54525],{"class":125},[115,55831,6411],{"class":174},[115,55833,132],{"class":125},[115,55835,55836,55838,55840],{"class":117,"line":32754},[115,55837,52407],{"class":125},[115,55839,51803],{"class":51290},[115,55841,51297],{"class":125},[115,55843,55844,55846,55848],{"class":117,"line":32774},[115,55845,51775],{"class":125},[115,55847,51790],{"class":51290},[115,55849,51297],{"class":125},[115,55851,55852],{"class":117,"line":32780},[115,55853,2400],{"emptyLinePlaceholder":42},[115,55855,55856,55858,55860],{"class":117,"line":32796},[115,55857,51775],{"class":125},[115,55859,50625],{"class":51290},[115,55861,51297],{"class":125},[14,55863,55864],{},[20,55865],{"alt":22,"src":55866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55868,55869],{},"?.就是短路保护,确保输出正常进行",[14,55871,55872],{},"不要忘记取余%,有时候可以用",[14,55874,55875],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[69,55877,55878],{"start":37},[72,55879,55880],{},"法2",[106,55882,55884],{"className":50623,"code":55883,"language":50625,"meta":22,"style":22},"\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",[112,55885,55886,55896,55910,55914,55922,55936,55956,55968,55976,55982,55992,56002,56006,56010,56016,56026,56030,56034,56040,56050,56062,56074,56088,56092,56096,56102,56112,56122,56132,56144,56156,56166,56170,56174,56182,56192,56204,56216,56228,56232,56236,56242,56252,56264,56276,56286,56296,56306,56318,56330,56334,56338,56346,56358,56370,56396,56408,56412,56416,56422,56432,56436,56444,56452,56456,56464,56478,56492,56512,56520,56534,56546,56554,56572,56584,56596,56608,56620,56632,56644,56656,56664,56672,56680,56688,56699,56715,56731,56747,56763,56779,56795,56811,56827,56831,56836,56854,56872,56882,56887,56892,56903,56909,56924,56933,56937,56942,56951,56956,56965,56970,56975,56980,57003,57033,57037,57045,57049,57057,57065,57069],{"__ignoreMap":22},[115,55887,55888,55890,55892,55894],{"class":117,"line":118},[115,55889,51287],{"class":125},[115,55891,51291],{"class":51290},[115,55893,51294],{"class":1963},[115,55895,51297],{"class":125},[115,55897,55898,55900,55902,55904,55906,55908],{"class":117,"line":37},[115,55899,1035],{"class":125},[115,55901,50625],{"class":51290},[115,55903,51306],{"class":1963},[115,55905,171],{"class":125},[115,55907,51311],{"class":230},[115,55909,51297],{"class":125},[115,55911,55912],{"class":117,"line":1180},[115,55913,2400],{"emptyLinePlaceholder":42},[115,55915,55916,55918,55920],{"class":117,"line":1195},[115,55917,1035],{"class":125},[115,55919,51324],{"class":51290},[115,55921,51297],{"class":125},[115,55923,55924,55926,55928,55930,55932,55934],{"class":117,"line":1201},[115,55925,52134],{"class":125},[115,55927,51334],{"class":51290},[115,55929,51337],{"class":1963},[115,55931,171],{"class":125},[115,55933,51342],{"class":230},[115,55935,51297],{"class":125},[115,55937,55938,55940,55942,55944,55946,55948,55950,55952,55954],{"class":117,"line":1215},[115,55939,52134],{"class":125},[115,55941,51334],{"class":51290},[115,55943,14921],{"class":1963},[115,55945,171],{"class":125},[115,55947,51381],{"class":230},[115,55949,51361],{"class":1963},[115,55951,171],{"class":125},[115,55953,51388],{"class":230},[115,55955,51297],{"class":125},[115,55957,55958,55960,55962,55964,55966],{"class":117,"line":1221},[115,55959,52134],{"class":125},[115,55961,51397],{"class":51290},[115,55963,51400],{"class":125},[115,55965,51397],{"class":51290},[115,55967,51297],{"class":125},[115,55969,55970,55972,55974],{"class":117,"line":1312},[115,55971,52134],{"class":125},[115,55973,5127],{"class":51290},[115,55975,51297],{"class":125},[115,55977,55978,55980],{"class":117,"line":1318},[115,55979,6404],{"class":51290},[115,55981,15573],{"class":125},[115,55983,55984,55986,55988,55990],{"class":117,"line":1330},[115,55985,54685],{"class":174},[115,55987,51427],{"class":125},[115,55989,317],{"class":174},[115,55991,1291],{"class":125},[115,55993,55994,55996,55998,56000],{"class":117,"line":1612},[115,55995,54696],{"class":174},[115,55997,51427],{"class":125},[115,55999,317],{"class":174},[115,56001,1291],{"class":125},[115,56003,56004],{"class":117,"line":1617},[115,56005,2187],{"class":125},[115,56007,56008],{"class":117,"line":1623},[115,56009,2400],{"emptyLinePlaceholder":42},[115,56011,56012,56014],{"class":117,"line":1628},[115,56013,54715],{"class":51290},[115,56015,15573],{"class":125},[115,56017,56018,56020,56022,56024],{"class":117,"line":1642},[115,56019,54722],{"class":174},[115,56021,51427],{"class":125},[115,56023,54727],{"class":174},[115,56025,1291],{"class":125},[115,56027,56028],{"class":117,"line":1647},[115,56029,2187],{"class":125},[115,56031,56032],{"class":117,"line":1653},[115,56033,2400],{"emptyLinePlaceholder":42},[115,56035,56036,56038],{"class":117,"line":1674},[115,56037,54742],{"class":1963},[115,56039,15573],{"class":125},[115,56041,56042,56044,56046,56048],{"class":117,"line":1679},[115,56043,54749],{"class":174},[115,56045,51427],{"class":125},[115,56047,54754],{"class":174},[115,56049,1291],{"class":125},[115,56051,56052,56054,56056,56058,56060],{"class":117,"line":1693},[115,56053,54761],{"class":174},[115,56055,51427],{"class":125},[115,56057,54766],{"class":174},[115,56059,51482],{"class":121},[115,56061,1291],{"class":125},[115,56063,56064,56066,56068,56070,56072],{"class":117,"line":1698},[115,56065,54775],{"class":174},[115,56067,51427],{"class":125},[115,56069,1539],{"class":174},[115,56071,51482],{"class":121},[115,56073,1291],{"class":125},[115,56075,56076,56078,56080,56082,56084,56086],{"class":117,"line":1727},[115,56077,54696],{"class":174},[115,56079,51427],{"class":125},[115,56081,436],{"class":174},[115,56083,51482],{"class":121},[115,56085,51546],{"class":174},[115,56087,1291],{"class":125},[115,56089,56090],{"class":117,"line":1732},[115,56091,2187],{"class":125},[115,56093,56094],{"class":117,"line":1749},[115,56095,2400],{"emptyLinePlaceholder":42},[115,56097,56098,56100],{"class":117,"line":1754},[115,56099,54810],{"class":1963},[115,56101,15573],{"class":125},[115,56103,56104,56106,56108,56110],{"class":117,"line":1759},[115,56105,54749],{"class":174},[115,56107,51427],{"class":125},[115,56109,54821],{"class":174},[115,56111,1291],{"class":125},[115,56113,56114,56116,56118,56120],{"class":117,"line":1764},[115,56115,54828],{"class":174},[115,56117,51427],{"class":125},[115,56119,317],{"class":174},[115,56121,1291],{"class":125},[115,56123,56124,56126,56128,56130],{"class":117,"line":1778},[115,56125,54839],{"class":174},[115,56127,51427],{"class":125},[115,56129,317],{"class":174},[115,56131,1291],{"class":125},[115,56133,56134,56136,56138,56140,56142],{"class":117,"line":1783},[115,56135,54761],{"class":174},[115,56137,51427],{"class":125},[115,56139,436],{"class":174},[115,56141,453],{"class":121},[115,56143,1291],{"class":125},[115,56145,56146,56148,56150,56152,56154],{"class":117,"line":2577},[115,56147,54775],{"class":174},[115,56149,51427],{"class":125},[115,56151,700],{"class":174},[115,56153,453],{"class":121},[115,56155,1291],{"class":125},[115,56157,56158,56160,56162,56164],{"class":117,"line":2591},[115,56159,54874],{"class":174},[115,56161,51427],{"class":125},[115,56163,54879],{"class":174},[115,56165,1291],{"class":125},[115,56167,56168],{"class":117,"line":2599},[115,56169,2187],{"class":125},[115,56171,56172],{"class":117,"line":2604},[115,56173,2400],{"emptyLinePlaceholder":42},[115,56175,56176,56178,56180],{"class":117,"line":2610},[115,56177,54810],{"class":1963},[115,56179,6826],{"class":51290},[115,56181,15573],{"class":125},[115,56183,56184,56186,56188,56190],{"class":117,"line":2616},[115,56185,54749],{"class":174},[115,56187,51427],{"class":125},[115,56189,54821],{"class":174},[115,56191,1291],{"class":125},[115,56193,56194,56196,56198,56200,56202],{"class":117,"line":2621},[115,56195,54912],{"class":174},[115,56197,51427],{"class":125},[115,56199,1026],{"class":174},[115,56201,51482],{"class":121},[115,56203,1291],{"class":125},[115,56205,56206,56208,56210,56212,56214],{"class":117,"line":7949},[115,56207,54828],{"class":174},[115,56209,51427],{"class":125},[115,56211,825],{"class":174},[115,56213,51482],{"class":121},[115,56215,1291],{"class":125},[115,56217,56218,56220,56222,56224,56226],{"class":117,"line":7973},[115,56219,54937],{"class":174},[115,56221,51427],{"class":125},[115,56223,444],{"class":174},[115,56225,51482],{"class":121},[115,56227,1291],{"class":125},[115,56229,56230],{"class":117,"line":7978},[115,56231,2187],{"class":125},[115,56233,56234],{"class":117,"line":7984},[115,56235,2400],{"emptyLinePlaceholder":42},[115,56237,56238,56240],{"class":117,"line":8011},[115,56239,54958],{"class":51290},[115,56241,15573],{"class":125},[115,56243,56244,56246,56248,56250],{"class":117,"line":8016},[115,56245,54749],{"class":174},[115,56247,51427],{"class":125},[115,56249,54821],{"class":174},[115,56251,1291],{"class":125},[115,56253,56254,56256,56258,56260,56262],{"class":117,"line":8022},[115,56255,54937],{"class":174},[115,56257,51427],{"class":125},[115,56259,906],{"class":174},[115,56261,51482],{"class":121},[115,56263,1291],{"class":125},[115,56265,56266,56268,56270,56272,56274],{"class":117,"line":8034},[115,56267,54828],{"class":174},[115,56269,51427],{"class":125},[115,56271,825],{"class":174},[115,56273,51482],{"class":121},[115,56275,1291],{"class":125},[115,56277,56278,56280,56282,56284],{"class":117,"line":8046},[115,56279,54999],{"class":174},[115,56281,51427],{"class":125},[115,56283,51467],{"class":174},[115,56285,1291],{"class":125},[115,56287,56288,56290,56292,56294],{"class":117,"line":8058},[115,56289,55010],{"class":174},[115,56291,51427],{"class":125},[115,56293,51658],{"class":174},[115,56295,1291],{"class":125},[115,56297,56298,56300,56302,56304],{"class":117,"line":9717},[115,56299,54749],{"class":174},[115,56301,51427],{"class":125},[115,56303,54821],{"class":174},[115,56305,1291],{"class":125},[115,56307,56308,56310,56312,56314,56316],{"class":117,"line":9742},[115,56309,54761],{"class":174},[115,56311,51427],{"class":125},[115,56313,3992],{"class":174},[115,56315,51482],{"class":121},[115,56317,1291],{"class":125},[115,56319,56320,56322,56324,56326,56328],{"class":117,"line":9765},[115,56321,54775],{"class":174},[115,56323,51427],{"class":125},[115,56325,825],{"class":174},[115,56327,51482],{"class":121},[115,56329,1291],{"class":125},[115,56331,56332],{"class":117,"line":9789},[115,56333,2187],{"class":125},[115,56335,56336],{"class":117,"line":9794},[115,56337,2400],{"emptyLinePlaceholder":42},[115,56339,56340,56342,56344],{"class":117,"line":9799},[115,56341,54958],{"class":51290},[115,56343,55065],{"class":51290},[115,56345,15573],{"class":125},[115,56347,56348,56350,56352,56354,56356],{"class":117,"line":9804},[115,56349,54761],{"class":174},[115,56351,51427],{"class":125},[115,56353,825],{"class":174},[115,56355,51482],{"class":121},[115,56357,1291],{"class":125},[115,56359,56360,56362,56364,56366,56368],{"class":117,"line":9813},[115,56361,54775],{"class":174},[115,56363,51427],{"class":125},[115,56365,825],{"class":174},[115,56367,51482],{"class":121},[115,56369,1291],{"class":125},[115,56371,56372,56374,56376,56378,56380,56382,56384,56386,56388,56390,56392,56394],{"class":117,"line":9818},[115,56373,54874],{"class":174},[115,56375,51427],{"class":125},[115,56377,55100],{"class":174},[115,56379,126],{"class":125},[115,56381,317],{"class":174},[115,56383,12436],{"class":125},[115,56385,317],{"class":174},[115,56387,12436],{"class":125},[115,56389,317],{"class":174},[115,56391,12436],{"class":125},[115,56393,55117],{"class":174},[115,56395,2719],{"class":125},[115,56397,56398,56400,56402,56404,56406],{"class":117,"line":9824},[115,56399,55124],{"class":174},[115,56401,51427],{"class":125},[115,56403,571],{"class":174},[115,56405,51482],{"class":121},[115,56407,1291],{"class":125},[115,56409,56410],{"class":117,"line":9845},[115,56411,2187],{"class":125},[115,56413,56414],{"class":117,"line":9851},[115,56415,2400],{"emptyLinePlaceholder":42},[115,56417,56418,56420],{"class":117,"line":9865},[115,56419,55145],{"class":1963},[115,56421,15573],{"class":125},[115,56423,56424,56426,56428,56430],{"class":117,"line":9871},[115,56425,54874],{"class":174},[115,56427,51427],{"class":125},[115,56429,55156],{"class":174},[115,56431,1291],{"class":125},[115,56433,56434],{"class":117,"line":9898},[115,56435,2187],{"class":125},[115,56437,56438,56440,56442],{"class":117,"line":9907},[115,56439,52407],{"class":125},[115,56441,5127],{"class":51290},[115,56443,51297],{"class":125},[115,56445,56446,56448,56450],{"class":117,"line":9913},[115,56447,51775],{"class":125},[115,56449,51324],{"class":51290},[115,56451,51297],{"class":125},[115,56453,56454],{"class":117,"line":9921},[115,56455,2400],{"emptyLinePlaceholder":42},[115,56457,56458,56460,56462],{"class":117,"line":9926},[115,56459,1035],{"class":125},[115,56461,51790],{"class":51290},[115,56463,51297],{"class":125},[115,56465,56466,56468,56470,56472,56474,56476],{"class":117,"line":16605},[115,56467,52134],{"class":125},[115,56469,51601],{"class":51290},[115,56471,53476],{"class":1963},[115,56473,171],{"class":125},[115,56475,53481],{"class":230},[115,56477,51297],{"class":125},[115,56479,56480,56482,56484,56486,56488,56490],{"class":117,"line":16611},[115,56481,51331],{"class":125},[115,56483,51601],{"class":51290},[115,56485,53476],{"class":1963},[115,56487,171],{"class":125},[115,56489,55217],{"class":230},[115,56491,51297],{"class":125},[115,56493,56494,56496,56498,56500,56502,56504,56506,56508,56510],{"class":117,"line":16634},[115,56495,55224],{"class":125},[115,56497,20],{"class":51290},[115,56499,55229],{"class":1963},[115,56501,171],{"class":125},[115,56503,55234],{"class":230},[115,56505,55237],{"class":1963},[115,56507,171],{"class":125},[115,56509,7653],{"class":230},[115,56511,51297],{"class":125},[115,56513,56514,56516,56518],{"class":117,"line":16640},[115,56515,51766],{"class":125},[115,56517,51601],{"class":51290},[115,56519,51297],{"class":125},[115,56521,56522,56524,56526,56528,56530,56532],{"class":117,"line":16663},[115,56523,51331],{"class":125},[115,56525,51601],{"class":51290},[115,56527,53476],{"class":1963},[115,56529,171],{"class":125},[115,56531,55264],{"class":230},[115,56533,51297],{"class":125},[115,56535,56536,56538,56540,56542,56544],{"class":117,"line":16677},[115,56537,55224],{"class":125},[115,56539,14],{"class":51290},[115,56541,55275],{"class":125},[115,56543,14],{"class":51290},[115,56545,51297],{"class":125},[115,56547,56548,56550,56552],{"class":117,"line":16697},[115,56549,55224],{"class":125},[115,56551,1132],{"class":51290},[115,56553,51297],{"class":125},[115,56555,56556,56558,56560,56562,56564,56566,56568,56570],{"class":117,"line":16703},[115,56557,55292],{"class":125},[115,56559,72],{"class":51290},[115,56561,53476],{"class":1963},[115,56563,171],{"class":125},[115,56565,55301],{"class":230},[115,56567,55304],{"class":125},[115,56569,72],{"class":51290},[115,56571,51297],{"class":125},[115,56573,56574,56576,56578,56580,56582],{"class":117,"line":16714},[115,56575,55292],{"class":125},[115,56577,72],{"class":51290},[115,56579,55304],{"class":125},[115,56581,72],{"class":51290},[115,56583,51297],{"class":125},[115,56585,56586,56588,56590,56592,56594],{"class":117,"line":16737},[115,56587,55292],{"class":125},[115,56589,72],{"class":51290},[115,56591,55304],{"class":125},[115,56593,72],{"class":51290},[115,56595,51297],{"class":125},[115,56597,56598,56600,56602,56604,56606],{"class":117,"line":16759},[115,56599,55292],{"class":125},[115,56601,72],{"class":51290},[115,56603,55304],{"class":125},[115,56605,72],{"class":51290},[115,56607,51297],{"class":125},[115,56609,56610,56612,56614,56616,56618],{"class":117,"line":16764},[115,56611,55292],{"class":125},[115,56613,72],{"class":51290},[115,56615,55304],{"class":125},[115,56617,72],{"class":51290},[115,56619,51297],{"class":125},[115,56621,56622,56624,56626,56628,56630],{"class":117,"line":16770},[115,56623,55292],{"class":125},[115,56625,72],{"class":51290},[115,56627,55304],{"class":125},[115,56629,72],{"class":51290},[115,56631,51297],{"class":125},[115,56633,56634,56636,56638,56640,56642],{"class":117,"line":16784},[115,56635,55292],{"class":125},[115,56637,72],{"class":51290},[115,56639,55304],{"class":125},[115,56641,72],{"class":51290},[115,56643,51297],{"class":125},[115,56645,56646,56648,56650,56652,56654],{"class":117,"line":16797},[115,56647,55292],{"class":125},[115,56649,72],{"class":51290},[115,56651,55304],{"class":125},[115,56653,72],{"class":51290},[115,56655,51297],{"class":125},[115,56657,56658,56660,56662],{"class":117,"line":16802},[115,56659,55397],{"class":125},[115,56661,1132],{"class":51290},[115,56663,51297],{"class":125},[115,56665,56666,56668,56670],{"class":117,"line":16816},[115,56667,51766],{"class":125},[115,56669,51601],{"class":51290},[115,56671,51297],{"class":125},[115,56673,56674,56676,56678],{"class":117,"line":16821},[115,56675,52407],{"class":125},[115,56677,51601],{"class":51290},[115,56679,51297],{"class":125},[115,56681,56682,56684,56686],{"class":117,"line":16827},[115,56683,52134],{"class":125},[115,56685,51803],{"class":51290},[115,56687,51297],{"class":125},[115,56689,56690,56692,56695,56697],{"class":117,"line":16832},[115,56691,11222],{"class":121},[115,56693,56694],{"class":174}," sliderData",[115,56696,13565],{"class":121},[115,56698,55437],{"class":125},[115,56700,56701,56703,56705,56707,56709,56711,56713],{"class":117,"line":16846},[115,56702,55442],{"class":125},[115,56704,55445],{"class":230},[115,56706,55448],{"class":125},[115,56708,55451],{"class":230},[115,56710,55454],{"class":125},[115,56712,55457],{"class":230},[115,56714,55460],{"class":125},[115,56716,56717,56719,56721,56723,56725,56727,56729],{"class":117,"line":16851},[115,56718,55442],{"class":125},[115,56720,55467],{"class":230},[115,56722,55448],{"class":125},[115,56724,55472],{"class":230},[115,56726,55454],{"class":125},[115,56728,55477],{"class":230},[115,56730,55460],{"class":125},[115,56732,56733,56735,56737,56739,56741,56743,56745],{"class":117,"line":16856},[115,56734,55442],{"class":125},[115,56736,55486],{"class":230},[115,56738,55448],{"class":125},[115,56740,55491],{"class":230},[115,56742,55454],{"class":125},[115,56744,55496],{"class":230},[115,56746,55460],{"class":125},[115,56748,56749,56751,56753,56755,56757,56759,56761],{"class":117,"line":16870},[115,56750,55442],{"class":125},[115,56752,55505],{"class":230},[115,56754,55448],{"class":125},[115,56756,55510],{"class":230},[115,56758,55454],{"class":125},[115,56760,55515],{"class":230},[115,56762,55460],{"class":125},[115,56764,56765,56767,56769,56771,56773,56775,56777],{"class":117,"line":16882},[115,56766,55442],{"class":125},[115,56768,55524],{"class":230},[115,56770,55448],{"class":125},[115,56772,55529],{"class":230},[115,56774,55454],{"class":125},[115,56776,55534],{"class":230},[115,56778,55460],{"class":125},[115,56780,56781,56783,56785,56787,56789,56791,56793],{"class":117,"line":16887},[115,56782,55442],{"class":125},[115,56784,55543],{"class":230},[115,56786,55448],{"class":125},[115,56788,55548],{"class":230},[115,56790,55454],{"class":125},[115,56792,55553],{"class":230},[115,56794,55460],{"class":125},[115,56796,56797,56799,56801,56803,56805,56807,56809],{"class":117,"line":16900},[115,56798,55442],{"class":125},[115,56800,55562],{"class":230},[115,56802,55448],{"class":125},[115,56804,55567],{"class":230},[115,56806,55454],{"class":125},[115,56808,55572],{"class":230},[115,56810,55460],{"class":125},[115,56812,56813,56815,56817,56819,56821,56823,56825],{"class":117,"line":16905},[115,56814,55442],{"class":125},[115,56816,55581],{"class":230},[115,56818,55448],{"class":125},[115,56820,55586],{"class":230},[115,56822,55454],{"class":125},[115,56824,55591],{"class":230},[115,56826,55594],{"class":125},[115,56828,56829],{"class":117,"line":16910},[115,56830,53099],{"class":125},[115,56832,56833],{"class":117,"line":16915},[115,56834,56835],{"class":184},"    \u002F\u002F 1.获取元素\n",[115,56837,56838,56840,56842,56844,56846,56848,56850,56852],{"class":117,"line":16928},[115,56839,11222],{"class":121},[115,56841,55605],{"class":174},[115,56843,13565],{"class":121},[115,56845,54386],{"class":125},[115,56847,54389],{"class":1963},[115,56849,126],{"class":125},[115,56851,55616],{"class":230},[115,56853,132],{"class":125},[115,56855,56856,56858,56860,56862,56864,56866,56868,56870],{"class":117,"line":16933},[115,56857,11222],{"class":121},[115,56859,6826],{"class":174},[115,56861,13565],{"class":121},[115,56863,54386],{"class":125},[115,56865,54389],{"class":1963},[115,56867,126],{"class":125},[115,56869,55635],{"class":230},[115,56871,132],{"class":125},[115,56873,56874,56876,56878,56880],{"class":117,"line":32634},[115,56875,52209],{"class":121},[115,56877,9439],{"class":125},[115,56879,171],{"class":121},[115,56881,47334],{"class":174},[115,56883,56884],{"class":117,"line":32640},[115,56885,56886],{"class":184},"    \u002F\u002F 2.开启定时器\n",[115,56888,56889],{"class":117,"line":32646},[115,56890,56891],{"class":184},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[115,56893,56894,56897,56899,56901],{"class":117,"line":32652},[115,56895,56896],{"class":1963},"    setInterval",[115,56898,126],{"class":125},[115,56900,54439],{"class":121},[115,56902,54442],{"class":125},[115,56904,56905,56907],{"class":117,"line":32658},[115,56906,54447],{"class":125},[115,56908,2702],{"class":121},[115,56910,56911,56913,56915,56917,56920,56922],{"class":117,"line":32669},[115,56912,54470],{"class":121},[115,56914,54473],{"class":125},[115,56916,1710],{"class":121},[115,56918,56919],{"class":125}," sliderData.",[115,56921,51958],{"class":174},[115,56923,12443],{"class":125},[115,56925,56926,56929,56931],{"class":117,"line":32675},[115,56927,56928],{"class":125},"        i ",[115,56930,171],{"class":121},[115,56932,47334],{"class":174},[115,56934,56935],{"class":117,"line":32695},[115,56936,52388],{"class":125},[115,56938,56939],{"class":117,"line":32701},[115,56940,56941],{"class":184},"      \u002F\u002F 更换图片路径\n",[115,56943,56944,56946,56948],{"class":117,"line":32712},[115,56945,55711],{"class":125},[115,56947,171],{"class":121},[115,56949,56950],{"class":125}," sliderData[i].url\n",[115,56952,56953],{"class":117,"line":32718},[115,56954,56955],{"class":184},"      \u002F\u002F 把文字写到p里面\n",[115,56957,56958,56960,56962],{"class":117,"line":32724},[115,56959,55721],{"class":125},[115,56961,171],{"class":121},[115,56963,56964],{"class":125}," sliderData[i].title\n",[115,56966,56967],{"class":117,"line":32730},[115,56968,56969],{"class":184},"      \u002F\u002F 小圆点\n",[115,56971,56972],{"class":117,"line":32736},[115,56973,56974],{"class":184},"      \u002F\u002F 先删除以前的active\n",[115,56976,56977],{"class":117,"line":32742},[115,56978,56979],{"class":184},"      \u002F\u002F 只让当前li添加active\n",[115,56981,56982,56984,56986,56988,56991,56994,56997,56999,57001],{"class":117,"line":32748},[115,56983,55761],{"class":125},[115,56985,54389],{"class":1963},[115,56987,126],{"class":125},[115,56989,56990],{"class":230},"'.slider-footer .activate'",[115,56992,56993],{"class":125},").classList.",[115,56995,56996],{"class":1963},"remove",[115,56998,126],{"class":125},[115,57000,55779],{"class":230},[115,57002,132],{"class":125},[115,57004,57005,57007,57009,57011,57014,57016,57018,57020,57023,57025,57027,57029,57031],{"class":117,"line":32754},[115,57006,55761],{"class":125},[115,57008,54389],{"class":1963},[115,57010,126],{"class":125},[115,57012,57013],{"class":230},"`.slider-footer ul li:nth-child(${",[115,57015,566],{"class":125},[115,57017,45567],{"class":121},[115,57019,25119],{"class":174},[115,57021,57022],{"class":230},"})`",[115,57024,56993],{"class":125},[115,57026,5335],{"class":1963},[115,57028,126],{"class":125},[115,57030,55779],{"class":230},[115,57032,132],{"class":125},[115,57034,57035],{"class":117,"line":32774},[115,57036,2400],{"emptyLinePlaceholder":42},[115,57038,57039,57041,57043],{"class":117,"line":32780},[115,57040,54525],{"class":125},[115,57042,6411],{"class":174},[115,57044,132],{"class":125},[115,57046,57047],{"class":117,"line":32796},[115,57048,2400],{"emptyLinePlaceholder":42},[115,57050,57051,57053,57055],{"class":117,"line":32802},[115,57052,52407],{"class":125},[115,57054,51803],{"class":51290},[115,57056,51297],{"class":125},[115,57058,57059,57061,57063],{"class":117,"line":32816},[115,57060,51775],{"class":125},[115,57062,51790],{"class":51290},[115,57064,51297],{"class":125},[115,57066,57067],{"class":117,"line":32822},[115,57068,2400],{"emptyLinePlaceholder":42},[115,57070,57071,57073,57075],{"class":117,"line":32837},[115,57072,51775],{"class":125},[115,57074,50625],{"class":51290},[115,57076,51297],{"class":125},[86,57078,57080],{"id":57079},"_317-重要知识点","3.1.7 重要知识点",[14,57082,57083,57084],{},"浏览器在渲染文本时， ",[275,57085,57086],{},"没有空格或换行符就没有“断行点”",[14,57088,57089],{},[20,57090],{"alt":22,"src":57091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57093,57094],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57096,57097],{},[20,57098],{"alt":22,"src":57099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57101,57102],{},[20,57103],{"alt":22,"src":57104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[57,57106,57108],{"id":57107},"_32-dom事件基础","3.2 DOM事件基础",[86,57110,57112],{"id":57111},"_321-事件监听","3.2.1 事件监听",[14,57114,57115],{},[20,57116],{"alt":22,"src":57117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57119,57120],{},"事件监听有响应的发生",[14,57122,57123],{},[20,57124],{"alt":22,"src":57125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57127,57128],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57130,57131],{},"对于有名函数,要执行的函数名后边不要加()",[86,57133,57135],{"id":57134},"_322-随机点名案例","3.2.2 随机点名案例",[106,57137,57139],{"className":50623,"code":57138,"language":50625,"meta":22,"style":22},"\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",[112,57140,57141,57151,57165,57169,57177,57191,57211,57223,57231,57237,57247,57257,57261,57265,57272,57283,57287,57291,57297,57309,57323,57333,57345,57358,57362,57366,57373,57377,57390,57402,57414,57418,57422,57426,57433,57443,57447,57451,57460,57472,57484,57499,57503,57511,57519,57523,57531,57544,57558,57571,57591,57599,57614,57634,57654,57662,57666,57674,57679,57715,57735,57740,57759,57764,57775,57780,57791,57796,57815,57830,57835,57861,57871,57880,57885,57901,57906,57911,57916,57931,57935,57939,57944,57963,57980,57988,57993,58008,58012,58016,58024,58032,58036],{"__ignoreMap":22},[115,57142,57143,57145,57147,57149],{"class":117,"line":118},[115,57144,51287],{"class":125},[115,57146,51291],{"class":51290},[115,57148,51294],{"class":1963},[115,57150,51297],{"class":125},[115,57152,57153,57155,57157,57159,57161,57163],{"class":117,"line":37},[115,57154,1035],{"class":125},[115,57156,50625],{"class":51290},[115,57158,51306],{"class":1963},[115,57160,171],{"class":125},[115,57162,51311],{"class":230},[115,57164,51297],{"class":125},[115,57166,57167],{"class":117,"line":1180},[115,57168,2400],{"emptyLinePlaceholder":42},[115,57170,57171,57173,57175],{"class":117,"line":1195},[115,57172,1035],{"class":125},[115,57174,51324],{"class":51290},[115,57176,51297],{"class":125},[115,57178,57179,57181,57183,57185,57187,57189],{"class":117,"line":1201},[115,57180,52134],{"class":125},[115,57182,51334],{"class":51290},[115,57184,51337],{"class":1963},[115,57186,171],{"class":125},[115,57188,51342],{"class":230},[115,57190,51297],{"class":125},[115,57192,57193,57195,57197,57199,57201,57203,57205,57207,57209],{"class":117,"line":1215},[115,57194,52134],{"class":125},[115,57196,51334],{"class":51290},[115,57198,14921],{"class":1963},[115,57200,171],{"class":125},[115,57202,51381],{"class":230},[115,57204,51361],{"class":1963},[115,57206,171],{"class":125},[115,57208,51388],{"class":230},[115,57210,51297],{"class":125},[115,57212,57213,57215,57217,57219,57221],{"class":117,"line":1221},[115,57214,52134],{"class":125},[115,57216,51397],{"class":51290},[115,57218,51400],{"class":125},[115,57220,51397],{"class":51290},[115,57222,51297],{"class":125},[115,57224,57225,57227,57229],{"class":117,"line":1312},[115,57226,52134],{"class":125},[115,57228,5127],{"class":51290},[115,57230,51297],{"class":125},[115,57232,57233,57235],{"class":117,"line":1318},[115,57234,6404],{"class":51290},[115,57236,15573],{"class":125},[115,57238,57239,57241,57243,57245],{"class":117,"line":1330},[115,57240,54696],{"class":174},[115,57242,51427],{"class":125},[115,57244,317],{"class":174},[115,57246,1291],{"class":125},[115,57248,57249,57251,57253,57255],{"class":117,"line":1612},[115,57250,54685],{"class":174},[115,57252,51427],{"class":125},[115,57254,317],{"class":174},[115,57256,1291],{"class":125},[115,57258,57259],{"class":117,"line":1617},[115,57260,2187],{"class":125},[115,57262,57263],{"class":117,"line":1623},[115,57264,2400],{"emptyLinePlaceholder":42},[115,57266,57267,57270],{"class":117,"line":1628},[115,57268,57269],{"class":51290},"    h2",[115,57271,15573],{"class":125},[115,57273,57274,57277,57279,57281],{"class":117,"line":1642},[115,57275,57276],{"class":174},"      text-align",[115,57278,51427],{"class":125},[115,57280,51582],{"class":174},[115,57282,1291],{"class":125},[115,57284,57285],{"class":117,"line":1647},[115,57286,2187],{"class":125},[115,57288,57289],{"class":117,"line":1653},[115,57290,2400],{"emptyLinePlaceholder":42},[115,57292,57293,57295],{"class":117,"line":1674},[115,57294,54742],{"class":1963},[115,57296,15573],{"class":125},[115,57298,57299,57301,57303,57305,57307],{"class":117,"line":1679},[115,57300,54761],{"class":174},[115,57302,51427],{"class":125},[115,57304,1539],{"class":174},[115,57306,51482],{"class":121},[115,57308,1291],{"class":125},[115,57310,57311,57313,57315,57317,57319,57321],{"class":117,"line":1693},[115,57312,54696],{"class":174},[115,57314,51427],{"class":125},[115,57316,781],{"class":174},[115,57318,51482],{"class":121},[115,57320,51546],{"class":174},[115,57322,1291],{"class":125},[115,57324,57325,57327,57329,57331],{"class":117,"line":1698},[115,57326,54999],{"class":174},[115,57328,51427],{"class":125},[115,57330,51467],{"class":174},[115,57332,1291],{"class":125},[115,57334,57335,57337,57339,57341,57343],{"class":117,"line":1727},[115,57336,54912],{"class":174},[115,57338,51427],{"class":125},[115,57340,950],{"class":174},[115,57342,51482],{"class":121},[115,57344,1291],{"class":125},[115,57346,57347,57350,57352,57354,57356],{"class":117,"line":1732},[115,57348,57349],{"class":174},"      line-height",[115,57351,51427],{"class":125},[115,57353,526],{"class":174},[115,57355,51482],{"class":121},[115,57357,1291],{"class":125},[115,57359,57360],{"class":117,"line":1749},[115,57361,2187],{"class":125},[115,57363,57364],{"class":117,"line":1754},[115,57365,2400],{"emptyLinePlaceholder":42},[115,57367,57368,57371],{"class":117,"line":1759},[115,57369,57370],{"class":1963},"    .qs",[115,57372,15573],{"class":125},[115,57374,57375],{"class":117,"line":1764},[115,57376,2400],{"emptyLinePlaceholder":42},[115,57378,57379,57381,57383,57386,57388],{"class":117,"line":1778},[115,57380,54761],{"class":174},[115,57382,51427],{"class":125},[115,57384,57385],{"class":174},"450",[115,57387,51482],{"class":121},[115,57389,1291],{"class":125},[115,57391,57392,57394,57396,57398,57400],{"class":117,"line":1783},[115,57393,54775],{"class":174},[115,57395,51427],{"class":125},[115,57397,526],{"class":174},[115,57399,51482],{"class":121},[115,57401,1291],{"class":125},[115,57403,57404,57407,57409,57412],{"class":117,"line":2577},[115,57405,57406],{"class":174},"      color",[115,57408,51427],{"class":125},[115,57410,57411],{"class":174},"red",[115,57413,1291],{"class":125},[115,57415,57416],{"class":117,"line":2591},[115,57417,2400],{"emptyLinePlaceholder":42},[115,57419,57420],{"class":117,"line":2599},[115,57421,2187],{"class":125},[115,57423,57424],{"class":117,"line":2604},[115,57425,2400],{"emptyLinePlaceholder":42},[115,57427,57428,57431],{"class":117,"line":2610},[115,57429,57430],{"class":1963},"    .btns",[115,57432,15573],{"class":125},[115,57434,57435,57437,57439,57441],{"class":117,"line":2616},[115,57436,57276],{"class":174},[115,57438,51427],{"class":125},[115,57440,51582],{"class":174},[115,57442,1291],{"class":125},[115,57444,57445],{"class":117,"line":2621},[115,57446,2187],{"class":125},[115,57448,57449],{"class":117,"line":7949},[115,57450,2400],{"emptyLinePlaceholder":42},[115,57452,57453,57455,57458],{"class":117,"line":7973},[115,57454,57430],{"class":1963},[115,57456,57457],{"class":51290}," button",[115,57459,15573],{"class":125},[115,57461,57462,57464,57466,57468,57470],{"class":117,"line":7978},[115,57463,54761],{"class":174},[115,57465,51427],{"class":125},[115,57467,942],{"class":174},[115,57469,51482],{"class":121},[115,57471,1291],{"class":125},[115,57473,57474,57476,57478,57480,57482],{"class":117,"line":7984},[115,57475,54775],{"class":174},[115,57477,51427],{"class":125},[115,57479,398],{"class":174},[115,57481,51482],{"class":121},[115,57483,1291],{"class":125},[115,57485,57486,57488,57490,57492,57495,57497],{"class":117,"line":8011},[115,57487,54696],{"class":174},[115,57489,51427],{"class":125},[115,57491,317],{"class":174},[115,57493,57494],{"class":174}," 50",[115,57496,51482],{"class":121},[115,57498,1291],{"class":125},[115,57500,57501],{"class":117,"line":8016},[115,57502,2187],{"class":125},[115,57504,57505,57507,57509],{"class":117,"line":8022},[115,57506,52407],{"class":125},[115,57508,5127],{"class":51290},[115,57510,51297],{"class":125},[115,57512,57513,57515,57517],{"class":117,"line":8034},[115,57514,51775],{"class":125},[115,57516,51324],{"class":51290},[115,57518,51297],{"class":125},[115,57520,57521],{"class":117,"line":8046},[115,57522,2400],{"emptyLinePlaceholder":42},[115,57524,57525,57527,57529],{"class":117,"line":8058},[115,57526,1035],{"class":125},[115,57528,51790],{"class":51290},[115,57530,51297],{"class":125},[115,57532,57533,57535,57537,57540,57542],{"class":117,"line":9717},[115,57534,52134],{"class":125},[115,57536,57],{"class":51290},[115,57538,57539],{"class":125},">随机点名\u003C\u002F",[115,57541,57],{"class":51290},[115,57543,51297],{"class":125},[115,57545,57546,57548,57550,57552,57554,57556],{"class":117,"line":9742},[115,57547,52134],{"class":125},[115,57549,51601],{"class":51290},[115,57551,53476],{"class":1963},[115,57553,171],{"class":125},[115,57555,53481],{"class":230},[115,57557,51297],{"class":125},[115,57559,57560,57562,57564,57567,57569],{"class":117,"line":9765},[115,57561,51331],{"class":125},[115,57563,115],{"class":51290},[115,57565,57566],{"class":125},">名字是：\u003C\u002F",[115,57568,115],{"class":51290},[115,57570,51297],{"class":125},[115,57572,57573,57575,57577,57579,57581,57584,57587,57589],{"class":117,"line":9789},[115,57574,51331],{"class":125},[115,57576,51601],{"class":51290},[115,57578,53476],{"class":1963},[115,57580,171],{"class":125},[115,57582,57583],{"class":230},"\"qs\"",[115,57585,57586],{"class":125},">这里显示姓名\u003C\u002F",[115,57588,51601],{"class":51290},[115,57590,51297],{"class":125},[115,57592,57593,57595,57597],{"class":117,"line":9794},[115,57594,52407],{"class":125},[115,57596,51601],{"class":51290},[115,57598,51297],{"class":125},[115,57600,57601,57603,57605,57607,57609,57612],{"class":117,"line":9799},[115,57602,52134],{"class":125},[115,57604,51601],{"class":51290},[115,57606,53476],{"class":1963},[115,57608,171],{"class":125},[115,57610,57611],{"class":230},"\"btns\"",[115,57613,51297],{"class":125},[115,57615,57616,57618,57620,57622,57624,57627,57630,57632],{"class":117,"line":9804},[115,57617,51331],{"class":125},[115,57619,53877],{"class":51290},[115,57621,53476],{"class":1963},[115,57623,171],{"class":125},[115,57625,57626],{"class":230},"\"start\"",[115,57628,57629],{"class":125},">开始\u003C\u002F",[115,57631,53877],{"class":51290},[115,57633,51297],{"class":125},[115,57635,57636,57638,57640,57642,57644,57647,57650,57652],{"class":117,"line":9813},[115,57637,51331],{"class":125},[115,57639,53877],{"class":51290},[115,57641,53476],{"class":1963},[115,57643,171],{"class":125},[115,57645,57646],{"class":230},"\"end\"",[115,57648,57649],{"class":125},">结束\u003C\u002F",[115,57651,53877],{"class":51290},[115,57653,51297],{"class":125},[115,57655,57656,57658,57660],{"class":117,"line":9818},[115,57657,52407],{"class":125},[115,57659,51601],{"class":51290},[115,57661,51297],{"class":125},[115,57663,57664],{"class":117,"line":9824},[115,57665,2400],{"emptyLinePlaceholder":42},[115,57667,57668,57670,57672],{"class":117,"line":9845},[115,57669,52134],{"class":125},[115,57671,51803],{"class":51290},[115,57673,51297],{"class":125},[115,57675,57676],{"class":117,"line":9851},[115,57677,57678],{"class":184},"    \u002F\u002F 数据数组\n",[115,57680,57681,57683,57686,57688,57690,57693,57695,57698,57700,57703,57705,57708,57710,57713],{"class":117,"line":9865},[115,57682,11222],{"class":121},[115,57684,57685],{"class":174}," arr",[115,57687,13565],{"class":121},[115,57689,52216],{"class":125},[115,57691,57692],{"class":230},"'马超'",[115,57694,12436],{"class":125},[115,57696,57697],{"class":230},"'黄忠'",[115,57699,12436],{"class":125},[115,57701,57702],{"class":230},"'赵云'",[115,57704,12436],{"class":125},[115,57706,57707],{"class":230},"'关羽'",[115,57709,12436],{"class":125},[115,57711,57712],{"class":230},"'张飞'",[115,57714,33247],{"class":125},[115,57716,57717,57719,57722,57724,57726,57728,57730,57733],{"class":117,"line":9871},[115,57718,11222],{"class":121},[115,57720,57721],{"class":174}," qs",[115,57723,13565],{"class":121},[115,57725,54386],{"class":125},[115,57727,54389],{"class":1963},[115,57729,126],{"class":125},[115,57731,57732],{"class":230},"'.qs'",[115,57734,132],{"class":125},[115,57736,57737],{"class":117,"line":9898},[115,57738,57739],{"class":184},"    \u002F\u002F 1.业务1.开始按钮模块\n",[115,57741,57742,57744,57746,57748,57750,57752,57754,57757],{"class":117,"line":9907},[115,57743,11222],{"class":121},[115,57745,4184],{"class":174},[115,57747,13565],{"class":121},[115,57749,54386],{"class":125},[115,57751,54389],{"class":1963},[115,57753,126],{"class":125},[115,57755,57756],{"class":230},"'.start'",[115,57758,132],{"class":125},[115,57760,57761],{"class":117,"line":9913},[115,57762,57763],{"class":184},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[115,57765,57766,57768,57771,57773],{"class":117,"line":9921},[115,57767,52209],{"class":121},[115,57769,57770],{"class":125}," timerId ",[115,57772,171],{"class":121},[115,57774,47334],{"class":174},[115,57776,57777],{"class":117,"line":9926},[115,57778,57779],{"class":184},"    \u002F\u002F 随机号要全局变量\n",[115,57781,57782,57784,57787,57789],{"class":117,"line":16605},[115,57783,52209],{"class":121},[115,57785,57786],{"class":125}," random ",[115,57788,171],{"class":121},[115,57790,47334],{"class":174},[115,57792,57793],{"class":117,"line":16611},[115,57794,57795],{"class":184},"    \u002F\u002F 1.1 添加点击事件\n",[115,57797,57798,57801,57804,57806,57809,57811,57813],{"class":117,"line":16634},[115,57799,57800],{"class":125},"    start.",[115,57802,57803],{"class":1963},"addEventListener",[115,57805,126],{"class":125},[115,57807,57808],{"class":230},"'click'",[115,57810,12436],{"class":125},[115,57812,54439],{"class":121},[115,57814,54442],{"class":125},[115,57816,57817,57820,57822,57824,57826,57828],{"class":117,"line":16640},[115,57818,57819],{"class":125},"      timerId ",[115,57821,171],{"class":121},[115,57823,54434],{"class":1963},[115,57825,126],{"class":125},[115,57827,54439],{"class":121},[115,57829,54442],{"class":125},[115,57831,57832],{"class":117,"line":16663},[115,57833,57834],{"class":184},"        \u002F\u002F 随机数\n",[115,57836,57837,57840,57842,57845,57848,57851,57853,57855,57857,57859],{"class":117,"line":16677},[115,57838,57839],{"class":125},"        random ",[115,57841,171],{"class":121},[115,57843,57844],{"class":1963}," parseInt",[115,57846,57847],{"class":125},"(Math.",[115,57849,57850],{"class":1963},"random",[115,57852,13051],{"class":125},[115,57854,580],{"class":121},[115,57856,51955],{"class":125},[115,57858,51958],{"class":174},[115,57860,132],{"class":125},[115,57862,57863,57866,57868],{"class":117,"line":16697},[115,57864,57865],{"class":125},"        qs.innerHTML ",[115,57867,171],{"class":121},[115,57869,57870],{"class":125}," arr[random]\n",[115,57872,57873,57876,57878],{"class":117,"line":16703},[115,57874,57875],{"class":125},"      }, ",[115,57877,398],{"class":174},[115,57879,132],{"class":125},[115,57881,57882],{"class":117,"line":16714},[115,57883,57884],{"class":184},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[115,57886,57887,57889,57892,57894,57897,57899],{"class":117,"line":16737},[115,57888,54470],{"class":121},[115,57890,57891],{"class":125}," (arr.",[115,57893,51958],{"class":174},[115,57895,57896],{"class":121}," ===",[115,57898,25119],{"class":174},[115,57900,12443],{"class":125},[115,57902,57903],{"class":117,"line":16759},[115,57904,57905],{"class":184},"        \u002F\u002F start.disabled = true\n",[115,57907,57908],{"class":117,"line":16764},[115,57909,57910],{"class":184},"        \u002F\u002F end.disabled = true\n",[115,57912,57913],{"class":117,"line":16770},[115,57914,57915],{"class":184},"        \u002F\u002F 可以合起来写\n",[115,57917,57918,57921,57923,57926,57928],{"class":117,"line":16784},[115,57919,57920],{"class":125},"        start.disabled ",[115,57922,171],{"class":121},[115,57924,57925],{"class":125}," end.disabled ",[115,57927,171],{"class":121},[115,57929,57930],{"class":174}," true\n",[115,57932,57933],{"class":117,"line":16797},[115,57934,52388],{"class":125},[115,57936,57937],{"class":117,"line":16802},[115,57938,33462],{"class":125},[115,57940,57941],{"class":117,"line":16816},[115,57942,57943],{"class":184},"    \u002F\u002F 1.2 关闭按钮模块\n",[115,57945,57946,57948,57950,57952,57954,57956,57958,57961],{"class":117,"line":16821},[115,57947,11222],{"class":121},[115,57949,4200],{"class":174},[115,57951,13565],{"class":121},[115,57953,54386],{"class":125},[115,57955,54389],{"class":1963},[115,57957,126],{"class":125},[115,57959,57960],{"class":230},"'.end'",[115,57962,132],{"class":125},[115,57964,57965,57968,57970,57972,57974,57976,57978],{"class":117,"line":16827},[115,57966,57967],{"class":125},"    end.",[115,57969,57803],{"class":1963},[115,57971,126],{"class":125},[115,57973,57808],{"class":230},[115,57975,12436],{"class":125},[115,57977,54439],{"class":121},[115,57979,54442],{"class":125},[115,57981,57982,57985],{"class":117,"line":16832},[115,57983,57984],{"class":1963},"      clearInterval",[115,57986,57987],{"class":125},"(timerId)\n",[115,57989,57990],{"class":117,"line":16846},[115,57991,57992],{"class":184},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[115,57994,57995,57998,58001,58004,58006],{"class":117,"line":16851},[115,57996,57997],{"class":125},"      arr.",[115,57999,58000],{"class":1963},"splice",[115,58002,58003],{"class":125},"(random, ",[115,58005,343],{"class":174},[115,58007,132],{"class":125},[115,58009,58010],{"class":117,"line":16856},[115,58011,33462],{"class":125},[115,58013,58014],{"class":117,"line":16870},[115,58015,2400],{"emptyLinePlaceholder":42},[115,58017,58018,58020,58022],{"class":117,"line":16882},[115,58019,52407],{"class":125},[115,58021,51803],{"class":51290},[115,58023,51297],{"class":125},[115,58025,58026,58028,58030],{"class":117,"line":16887},[115,58027,51775],{"class":125},[115,58029,51790],{"class":51290},[115,58031,51297],{"class":125},[115,58033,58034],{"class":117,"line":16900},[115,58035,2400],{"emptyLinePlaceholder":42},[115,58037,58038,58040,58042],{"class":117,"line":16905},[115,58039,51775],{"class":125},[115,58041,50625],{"class":51290},[115,58043,51297],{"class":125},[14,58045,58046],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[86,58048,58050],{"id":58049},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[106,58052,58054],{"className":50623,"code":58053,"language":50625,"meta":22,"style":22},"\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",[112,58055,58056,58066,58080,58084,58092,58106,58126,58138,58146,58150,58158,58170,58178,58197,58214,58230,58240,58244,58252,58260,58264],{"__ignoreMap":22},[115,58057,58058,58060,58062,58064],{"class":117,"line":118},[115,58059,51287],{"class":125},[115,58061,51291],{"class":51290},[115,58063,51294],{"class":1963},[115,58065,51297],{"class":125},[115,58067,58068,58070,58072,58074,58076,58078],{"class":117,"line":37},[115,58069,1035],{"class":125},[115,58071,50625],{"class":51290},[115,58073,51306],{"class":1963},[115,58075,171],{"class":125},[115,58077,51311],{"class":230},[115,58079,51297],{"class":125},[115,58081,58082],{"class":117,"line":1180},[115,58083,2400],{"emptyLinePlaceholder":42},[115,58085,58086,58088,58090],{"class":117,"line":1195},[115,58087,1035],{"class":125},[115,58089,51324],{"class":51290},[115,58091,51297],{"class":125},[115,58093,58094,58096,58098,58100,58102,58104],{"class":117,"line":1201},[115,58095,52134],{"class":125},[115,58097,51334],{"class":51290},[115,58099,51337],{"class":1963},[115,58101,171],{"class":125},[115,58103,51342],{"class":230},[115,58105,51297],{"class":125},[115,58107,58108,58110,58112,58114,58116,58118,58120,58122,58124],{"class":117,"line":1215},[115,58109,52134],{"class":125},[115,58111,51334],{"class":51290},[115,58113,14921],{"class":1963},[115,58115,171],{"class":125},[115,58117,51381],{"class":230},[115,58119,51361],{"class":1963},[115,58121,171],{"class":125},[115,58123,51388],{"class":230},[115,58125,51297],{"class":125},[115,58127,58128,58130,58132,58134,58136],{"class":117,"line":1221},[115,58129,52134],{"class":125},[115,58131,51397],{"class":51290},[115,58133,51400],{"class":125},[115,58135,51397],{"class":51290},[115,58137,51297],{"class":125},[115,58139,58140,58142,58144],{"class":117,"line":1312},[115,58141,51775],{"class":125},[115,58143,51324],{"class":51290},[115,58145,51297],{"class":125},[115,58147,58148],{"class":117,"line":1318},[115,58149,2400],{"emptyLinePlaceholder":42},[115,58151,58152,58154,58156],{"class":117,"line":1330},[115,58153,1035],{"class":125},[115,58155,51790],{"class":51290},[115,58157,51297],{"class":125},[115,58159,58160,58162,58164,58166,58168],{"class":117,"line":1612},[115,58161,52134],{"class":125},[115,58163,53877],{"class":51290},[115,58165,53883],{"class":125},[115,58167,53877],{"class":51290},[115,58169,51297],{"class":125},[115,58171,58172,58174,58176],{"class":117,"line":1617},[115,58173,52134],{"class":125},[115,58175,51803],{"class":51290},[115,58177,51297],{"class":125},[115,58179,58180,58182,58184,58186,58188,58190,58192,58195],{"class":117,"line":1623},[115,58181,11222],{"class":121},[115,58183,54381],{"class":174},[115,58185,13565],{"class":121},[115,58187,54386],{"class":125},[115,58189,54389],{"class":1963},[115,58191,126],{"class":125},[115,58193,58194],{"class":230},"'button'",[115,58196,132],{"class":125},[115,58198,58199,58202,58204,58206,58208,58210,58212],{"class":117,"line":1628},[115,58200,58201],{"class":125},"    btn.",[115,58203,57803],{"class":1963},[115,58205,126],{"class":125},[115,58207,57808],{"class":230},[115,58209,12436],{"class":125},[115,58211,54439],{"class":121},[115,58213,54442],{"class":125},[115,58215,58216,58219,58221,58223,58226,58228],{"class":117,"line":1642},[115,58217,58218],{"class":121},"      const",[115,58220,2240],{"class":174},[115,58222,13565],{"class":121},[115,58224,58225],{"class":125}," Math.",[115,58227,57850],{"class":1963},[115,58229,1976],{"class":125},[115,58231,58232,58235,58238],{"class":117,"line":1647},[115,58233,58234],{"class":125},"      console.",[115,58236,58237],{"class":1963},"log",[115,58239,139],{"class":125},[115,58241,58242],{"class":117,"line":1653},[115,58243,33462],{"class":125},[115,58245,58246,58248,58250],{"class":117,"line":1674},[115,58247,52407],{"class":125},[115,58249,51803],{"class":51290},[115,58251,51297],{"class":125},[115,58253,58254,58256,58258],{"class":117,"line":1679},[115,58255,51775],{"class":125},[115,58257,51790],{"class":51290},[115,58259,51297],{"class":125},[115,58261,58262],{"class":117,"line":1693},[115,58263,2400],{"emptyLinePlaceholder":42},[115,58265,58266,58268,58270],{"class":117,"line":1698},[115,58267,51775],{"class":125},[115,58269,50625],{"class":51290},[115,58271,51297],{"class":125},[14,58273,58274],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58276,58277],{},"常量不可以重新赋值",[14,58279,58280],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[106,58282,58284],{"className":50623,"code":58283,"language":50625,"meta":22,"style":22},"\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",[112,58285,58286,58296,58310,58314,58322,58336,58356,58368,58376,58380,58388,58400,58408,58419,58437,58453,58467,58475,58479,58487,58495,58499],{"__ignoreMap":22},[115,58287,58288,58290,58292,58294],{"class":117,"line":118},[115,58289,51287],{"class":125},[115,58291,51291],{"class":51290},[115,58293,51294],{"class":1963},[115,58295,51297],{"class":125},[115,58297,58298,58300,58302,58304,58306,58308],{"class":117,"line":37},[115,58299,1035],{"class":125},[115,58301,50625],{"class":51290},[115,58303,51306],{"class":1963},[115,58305,171],{"class":125},[115,58307,51311],{"class":230},[115,58309,51297],{"class":125},[115,58311,58312],{"class":117,"line":1180},[115,58313,2400],{"emptyLinePlaceholder":42},[115,58315,58316,58318,58320],{"class":117,"line":1195},[115,58317,1035],{"class":125},[115,58319,51324],{"class":51290},[115,58321,51297],{"class":125},[115,58323,58324,58326,58328,58330,58332,58334],{"class":117,"line":1201},[115,58325,52134],{"class":125},[115,58327,51334],{"class":51290},[115,58329,51337],{"class":1963},[115,58331,171],{"class":125},[115,58333,51342],{"class":230},[115,58335,51297],{"class":125},[115,58337,58338,58340,58342,58344,58346,58348,58350,58352,58354],{"class":117,"line":1215},[115,58339,52134],{"class":125},[115,58341,51334],{"class":51290},[115,58343,14921],{"class":1963},[115,58345,171],{"class":125},[115,58347,51381],{"class":230},[115,58349,51361],{"class":1963},[115,58351,171],{"class":125},[115,58353,51388],{"class":230},[115,58355,51297],{"class":125},[115,58357,58358,58360,58362,58364,58366],{"class":117,"line":1221},[115,58359,52134],{"class":125},[115,58361,51397],{"class":51290},[115,58363,51400],{"class":125},[115,58365,51397],{"class":51290},[115,58367,51297],{"class":125},[115,58369,58370,58372,58374],{"class":117,"line":1312},[115,58371,51775],{"class":125},[115,58373,51324],{"class":51290},[115,58375,51297],{"class":125},[115,58377,58378],{"class":117,"line":1318},[115,58379,2400],{"emptyLinePlaceholder":42},[115,58381,58382,58384,58386],{"class":117,"line":1330},[115,58383,1035],{"class":125},[115,58385,51790],{"class":51290},[115,58387,51297],{"class":125},[115,58389,58390,58392,58394,58396,58398],{"class":117,"line":1612},[115,58391,52134],{"class":125},[115,58393,53877],{"class":51290},[115,58395,53883],{"class":125},[115,58397,53877],{"class":51290},[115,58399,51297],{"class":125},[115,58401,58402,58404,58406],{"class":117,"line":1617},[115,58403,52134],{"class":125},[115,58405,51803],{"class":51290},[115,58407,51297],{"class":125},[115,58409,58410,58412,58414,58416],{"class":117,"line":1623},[115,58411,11222],{"class":121},[115,58413,2240],{"class":174},[115,58415,13565],{"class":121},[115,58417,58418],{"class":174}," 10\n",[115,58420,58421,58423,58425,58427,58429,58431,58433,58435],{"class":117,"line":1628},[115,58422,11222],{"class":121},[115,58424,54381],{"class":174},[115,58426,13565],{"class":121},[115,58428,54386],{"class":125},[115,58430,54389],{"class":1963},[115,58432,126],{"class":125},[115,58434,58194],{"class":230},[115,58436,132],{"class":125},[115,58438,58439,58441,58443,58445,58447,58449,58451],{"class":117,"line":1642},[115,58440,58201],{"class":125},[115,58442,57803],{"class":1963},[115,58444,126],{"class":125},[115,58446,57808],{"class":230},[115,58448,12436],{"class":125},[115,58450,54439],{"class":121},[115,58452,54442],{"class":125},[115,58454,58455,58457,58459,58461,58463,58465],{"class":117,"line":1647},[115,58456,58218],{"class":121},[115,58458,2240],{"class":174},[115,58460,13565],{"class":121},[115,58462,58225],{"class":125},[115,58464,57850],{"class":1963},[115,58466,1976],{"class":125},[115,58468,58469,58471,58473],{"class":117,"line":1653},[115,58470,58234],{"class":125},[115,58472,58237],{"class":1963},[115,58474,139],{"class":125},[115,58476,58477],{"class":117,"line":1674},[115,58478,33462],{"class":125},[115,58480,58481,58483,58485],{"class":117,"line":1679},[115,58482,52407],{"class":125},[115,58484,51803],{"class":51290},[115,58486,51297],{"class":125},[115,58488,58489,58491,58493],{"class":117,"line":1693},[115,58490,51775],{"class":125},[115,58492,51790],{"class":51290},[115,58494,51297],{"class":125},[115,58496,58497],{"class":117,"line":1698},[115,58498,2400],{"emptyLinePlaceholder":42},[115,58500,58501,58503,58505],{"class":117,"line":1727},[115,58502,51775],{"class":125},[115,58504,50625],{"class":51290},[115,58506,51297],{"class":125},[14,58508,58509],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[106,58511,58513],{"className":50623,"code":58512,"language":50625,"meta":22,"style":22},"\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",[112,58514,58515,58525,58539,58543,58551,58565,58585,58597,58605,58609,58617,58629,58637,58647,58665,58681,58694,58702,58706,58714,58722,58726],{"__ignoreMap":22},[115,58516,58517,58519,58521,58523],{"class":117,"line":118},[115,58518,51287],{"class":125},[115,58520,51291],{"class":51290},[115,58522,51294],{"class":1963},[115,58524,51297],{"class":125},[115,58526,58527,58529,58531,58533,58535,58537],{"class":117,"line":37},[115,58528,1035],{"class":125},[115,58530,50625],{"class":51290},[115,58532,51306],{"class":1963},[115,58534,171],{"class":125},[115,58536,51311],{"class":230},[115,58538,51297],{"class":125},[115,58540,58541],{"class":117,"line":1180},[115,58542,2400],{"emptyLinePlaceholder":42},[115,58544,58545,58547,58549],{"class":117,"line":1195},[115,58546,1035],{"class":125},[115,58548,51324],{"class":51290},[115,58550,51297],{"class":125},[115,58552,58553,58555,58557,58559,58561,58563],{"class":117,"line":1201},[115,58554,52134],{"class":125},[115,58556,51334],{"class":51290},[115,58558,51337],{"class":1963},[115,58560,171],{"class":125},[115,58562,51342],{"class":230},[115,58564,51297],{"class":125},[115,58566,58567,58569,58571,58573,58575,58577,58579,58581,58583],{"class":117,"line":1215},[115,58568,52134],{"class":125},[115,58570,51334],{"class":51290},[115,58572,14921],{"class":1963},[115,58574,171],{"class":125},[115,58576,51381],{"class":230},[115,58578,51361],{"class":1963},[115,58580,171],{"class":125},[115,58582,51388],{"class":230},[115,58584,51297],{"class":125},[115,58586,58587,58589,58591,58593,58595],{"class":117,"line":1221},[115,58588,52134],{"class":125},[115,58590,51397],{"class":51290},[115,58592,51400],{"class":125},[115,58594,51397],{"class":51290},[115,58596,51297],{"class":125},[115,58598,58599,58601,58603],{"class":117,"line":1312},[115,58600,51775],{"class":125},[115,58602,51324],{"class":51290},[115,58604,51297],{"class":125},[115,58606,58607],{"class":117,"line":1318},[115,58608,2400],{"emptyLinePlaceholder":42},[115,58610,58611,58613,58615],{"class":117,"line":1330},[115,58612,1035],{"class":125},[115,58614,51790],{"class":51290},[115,58616,51297],{"class":125},[115,58618,58619,58621,58623,58625,58627],{"class":117,"line":1612},[115,58620,52134],{"class":125},[115,58622,53877],{"class":51290},[115,58624,53883],{"class":125},[115,58626,53877],{"class":51290},[115,58628,51297],{"class":125},[115,58630,58631,58633,58635],{"class":117,"line":1617},[115,58632,52134],{"class":125},[115,58634,51803],{"class":51290},[115,58636,51297],{"class":125},[115,58638,58639,58641,58643,58645],{"class":117,"line":1623},[115,58640,11222],{"class":121},[115,58642,2240],{"class":174},[115,58644,13565],{"class":121},[115,58646,58418],{"class":174},[115,58648,58649,58651,58653,58655,58657,58659,58661,58663],{"class":117,"line":1628},[115,58650,11222],{"class":121},[115,58652,54381],{"class":174},[115,58654,13565],{"class":121},[115,58656,54386],{"class":125},[115,58658,54389],{"class":1963},[115,58660,126],{"class":125},[115,58662,58194],{"class":230},[115,58664,132],{"class":125},[115,58666,58667,58669,58671,58673,58675,58677,58679],{"class":117,"line":1642},[115,58668,58201],{"class":125},[115,58670,57803],{"class":1963},[115,58672,126],{"class":125},[115,58674,57808],{"class":230},[115,58676,12436],{"class":125},[115,58678,54439],{"class":121},[115,58680,54442],{"class":125},[115,58682,58683,58686,58688,58690,58692],{"class":117,"line":1647},[115,58684,58685],{"class":125},"      num ",[115,58687,171],{"class":121},[115,58689,58225],{"class":125},[115,58691,57850],{"class":1963},[115,58693,1976],{"class":125},[115,58695,58696,58698,58700],{"class":117,"line":1653},[115,58697,58234],{"class":125},[115,58699,58237],{"class":1963},[115,58701,139],{"class":125},[115,58703,58704],{"class":117,"line":1674},[115,58705,33462],{"class":125},[115,58707,58708,58710,58712],{"class":117,"line":1679},[115,58709,52407],{"class":125},[115,58711,51803],{"class":51290},[115,58713,51297],{"class":125},[115,58715,58716,58718,58720],{"class":117,"line":1693},[115,58717,51775],{"class":125},[115,58719,51790],{"class":51290},[115,58721,51297],{"class":125},[115,58723,58724],{"class":117,"line":1698},[115,58725,2400],{"emptyLinePlaceholder":42},[115,58727,58728,58730,58732],{"class":117,"line":1727},[115,58729,51775],{"class":125},[115,58731,50625],{"class":51290},[115,58733,51297],{"class":125},[14,58735,58736],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[86,58738,58740],{"id":58739},"_324-事件监听版本","3.2.4 事件监听版本",[14,58742,58743],{},[20,58744],{"alt":22,"src":58745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58747,58748],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58750,58751],{},"这种方式会覆盖前边的事件监听:",[106,58753,58755],{"className":50623,"code":58754,"language":50625,"meta":22,"style":22},"\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",[112,58756,58757,58767,58781,58785,58793,58807,58827,58839,58847,58851,58859,58871,58879,58897,58911,58922,58926,58938,58948,58952,58960,58968,58972],{"__ignoreMap":22},[115,58758,58759,58761,58763,58765],{"class":117,"line":118},[115,58760,51287],{"class":125},[115,58762,51291],{"class":51290},[115,58764,51294],{"class":1963},[115,58766,51297],{"class":125},[115,58768,58769,58771,58773,58775,58777,58779],{"class":117,"line":37},[115,58770,1035],{"class":125},[115,58772,50625],{"class":51290},[115,58774,51306],{"class":1963},[115,58776,171],{"class":125},[115,58778,51311],{"class":230},[115,58780,51297],{"class":125},[115,58782,58783],{"class":117,"line":1180},[115,58784,2400],{"emptyLinePlaceholder":42},[115,58786,58787,58789,58791],{"class":117,"line":1195},[115,58788,1035],{"class":125},[115,58790,51324],{"class":51290},[115,58792,51297],{"class":125},[115,58794,58795,58797,58799,58801,58803,58805],{"class":117,"line":1201},[115,58796,52134],{"class":125},[115,58798,51334],{"class":51290},[115,58800,51337],{"class":1963},[115,58802,171],{"class":125},[115,58804,51342],{"class":230},[115,58806,51297],{"class":125},[115,58808,58809,58811,58813,58815,58817,58819,58821,58823,58825],{"class":117,"line":1215},[115,58810,52134],{"class":125},[115,58812,51334],{"class":51290},[115,58814,14921],{"class":1963},[115,58816,171],{"class":125},[115,58818,51381],{"class":230},[115,58820,51361],{"class":1963},[115,58822,171],{"class":125},[115,58824,51388],{"class":230},[115,58826,51297],{"class":125},[115,58828,58829,58831,58833,58835,58837],{"class":117,"line":1221},[115,58830,52134],{"class":125},[115,58832,51397],{"class":51290},[115,58834,51400],{"class":125},[115,58836,51397],{"class":51290},[115,58838,51297],{"class":125},[115,58840,58841,58843,58845],{"class":117,"line":1312},[115,58842,51775],{"class":125},[115,58844,51324],{"class":51290},[115,58846,51297],{"class":125},[115,58848,58849],{"class":117,"line":1318},[115,58850,2400],{"emptyLinePlaceholder":42},[115,58852,58853,58855,58857],{"class":117,"line":1330},[115,58854,1035],{"class":125},[115,58856,51790],{"class":51290},[115,58858,51297],{"class":125},[115,58860,58861,58863,58865,58867,58869],{"class":117,"line":1612},[115,58862,52134],{"class":125},[115,58864,53877],{"class":51290},[115,58866,53883],{"class":125},[115,58868,53877],{"class":51290},[115,58870,51297],{"class":125},[115,58872,58873,58875,58877],{"class":117,"line":1617},[115,58874,52134],{"class":125},[115,58876,51803],{"class":51290},[115,58878,51297],{"class":125},[115,58880,58881,58883,58885,58887,58889,58891,58893,58895],{"class":117,"line":1623},[115,58882,11222],{"class":121},[115,58884,54381],{"class":174},[115,58886,13565],{"class":121},[115,58888,54386],{"class":125},[115,58890,54389],{"class":1963},[115,58892,126],{"class":125},[115,58894,58194],{"class":230},[115,58896,132],{"class":125},[115,58898,58899,58901,58904,58906,58909],{"class":117,"line":1628},[115,58900,58201],{"class":125},[115,58902,58903],{"class":1963},"onclick",[115,58905,13565],{"class":121},[115,58907,58908],{"class":121}," function",[115,58910,54442],{"class":125},[115,58912,58913,58916,58918,58920],{"class":117,"line":1642},[115,58914,58915],{"class":1963},"      alert",[115,58917,126],{"class":125},[115,58919,597],{"class":174},[115,58921,132],{"class":125},[115,58923,58924],{"class":117,"line":1647},[115,58925,2187],{"class":125},[115,58927,58928,58930,58932,58934,58936],{"class":117,"line":1653},[115,58929,58201],{"class":125},[115,58931,58903],{"class":1963},[115,58933,13565],{"class":121},[115,58935,58908],{"class":121},[115,58937,54442],{"class":125},[115,58939,58940,58942,58944,58946],{"class":117,"line":1674},[115,58941,58915],{"class":1963},[115,58943,126],{"class":125},[115,58945,875],{"class":174},[115,58947,132],{"class":125},[115,58949,58950],{"class":117,"line":1679},[115,58951,2187],{"class":125},[115,58953,58954,58956,58958],{"class":117,"line":1693},[115,58955,52407],{"class":125},[115,58957,51803],{"class":51290},[115,58959,51297],{"class":125},[115,58961,58962,58964,58966],{"class":117,"line":1698},[115,58963,51775],{"class":125},[115,58965,51790],{"class":51290},[115,58967,51297],{"class":125},[115,58969,58970],{"class":117,"line":1727},[115,58971,2400],{"emptyLinePlaceholder":42},[115,58973,58974,58976,58978],{"class":117,"line":1732},[115,58975,51775],{"class":125},[115,58977,50625],{"class":51290},[115,58979,51297],{"class":125},[14,58981,58982],{},"只要点击就输出结果为22,前边11被覆盖了",[106,58984,58986],{"className":50623,"code":58985,"language":50625,"meta":22,"style":22},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[112,58987,58988,58993,58998,59002,59007,59012],{"__ignoreMap":22},[115,58989,58990],{"class":117,"line":118},[115,58991,58992],{"class":125},"  btn.addEventListener('click', function () {\n",[115,58994,58995],{"class":117,"line":37},[115,58996,58997],{"class":125},"      alert(11)\n",[115,58999,59000],{"class":117,"line":1180},[115,59001,33462],{"class":125},[115,59003,59004],{"class":117,"line":1195},[115,59005,59006],{"class":125},"    btn.addEventListener('click', function () {\n",[115,59008,59009],{"class":117,"line":1201},[115,59010,59011],{"class":125},"      alert(22)\n",[115,59013,59014],{"class":117,"line":1215},[115,59015,33462],{"class":125},[14,59017,59018],{},"点击第一次输出11,第二次点击为22",[86,59020,59022],{"id":59021},"_325-事件类型","3.2.5 事件类型",[14,59024,59025],{},[20,59026],{"alt":22,"src":59027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21999,59029,59031],{"id":59030},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59033,59034],{},"补充知识:",[14,59036,59037],{},"轮播图自动播放模块,可以使用",[14,59039,59040],{},"let timerId = setInterval(function () {",[14,59042,59043],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59045,59046],{},"用js方法模拟进行点击事件,click必须加()",[14,59048,59049],{},"next.click()",[14,59051,59052],{},"}, 1000)",[14,59054,59055],{},[20,59056],{"alt":22,"src":59057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[106,59059,59061],{"className":53057,"code":59060,"language":53059,"meta":22,"style":22},"\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",[112,59062,59063,59067,59077,59091,59095,59103,59118,59138,59158,59171,59179,59184,59189,59193,59197,59202,59207,59212,59217,59221,59225,59230,59235,59240,59244,59248,59253,59257,59262,59267,59271,59275,59280,59285,59290,59295,59300,59304,59308,59313,59318,59323,59328,59333,59337,59341,59346,59351,59356,59361,59366,59371,59376,59381,59386,59391,59395,59399,59404,59409,59413,59417,59422,59427,59431,59436,59441,59445,59449,59454,59458,59463,59468,59472,59477,59481,59485,59490,59495,59500,59505,59510,59515,59520,59524,59528,59532,59537,59542,59547,59552,59556,59564,59572,59576,59584,59599,59613,59634,59642,59656,59669,59684,59703,59715,59727,59739,59751,59763,59775,59787,59795,59810,59834,59858,59866,59874,59882,59890,59895,59900,59905,59910,59915,59920,59925,59930,59935,59940,59944,59949,59954,59959,59964,59969,59974,59979,59984,59989,59993,59998,60003,60008,60013,60018,60023,60028,60033,60038,60043,60048,60053,60057,60061,60066,60071,60076,60080,60085,60090,60095,60100,60105,60109,60114,60118,60122,60126,60130,60134,60138,60143,60148,60153,60158,60163,60168,60173,60178,60183,60187,60191,60196,60201,60206,60211,60216,60220,60225,60230,60235,60240,60245,60250,60254,60258,60263,60267,60272,60276,60281,60286,60291,60296,60301,60306,60310,60318,60326,60330],{"__ignoreMap":22},[115,59064,59065],{"class":117,"line":118},[115,59066,2400],{"emptyLinePlaceholder":42},[115,59068,59069,59071,59073,59075],{"class":117,"line":37},[115,59070,51287],{"class":125},[115,59072,51291],{"class":121},[115,59074,51294],{"class":174},[115,59076,51297],{"class":125},[115,59078,59079,59081,59083,59085,59087,59089],{"class":117,"line":1180},[115,59080,1035],{"class":125},[115,59082,50625],{"class":51290},[115,59084,51306],{"class":1963},[115,59086,171],{"class":125},[115,59088,51311],{"class":230},[115,59090,51297],{"class":125},[115,59092,59093],{"class":117,"line":1195},[115,59094,2400],{"emptyLinePlaceholder":42},[115,59096,59097,59099,59101],{"class":117,"line":1201},[115,59098,1035],{"class":125},[115,59100,51324],{"class":51290},[115,59102,51297],{"class":125},[115,59104,59105,59107,59109,59111,59113,59115],{"class":117,"line":1215},[115,59106,52134],{"class":125},[115,59108,51334],{"class":51290},[115,59110,51337],{"class":1963},[115,59112,171],{"class":125},[115,59114,51342],{"class":230},[115,59116,59117],{"class":125}," \u002F>\n",[115,59119,59120,59122,59124,59126,59128,59130,59132,59134,59136],{"class":117,"line":1221},[115,59121,52134],{"class":125},[115,59123,51334],{"class":51290},[115,59125,51353],{"class":1963},[115,59127,171],{"class":125},[115,59129,51358],{"class":230},[115,59131,51361],{"class":1963},[115,59133,171],{"class":125},[115,59135,51366],{"class":230},[115,59137,59117],{"class":125},[115,59139,59140,59142,59144,59146,59148,59150,59152,59154,59156],{"class":117,"line":1312},[115,59141,52134],{"class":125},[115,59143,51334],{"class":51290},[115,59145,14921],{"class":1963},[115,59147,171],{"class":125},[115,59149,51381],{"class":230},[115,59151,51361],{"class":1963},[115,59153,171],{"class":125},[115,59155,51388],{"class":230},[115,59157,59117],{"class":125},[115,59159,59160,59162,59164,59167,59169],{"class":117,"line":1318},[115,59161,52134],{"class":125},[115,59163,51397],{"class":51290},[115,59165,59166],{"class":125},">轮播图点击切换\u003C\u002F",[115,59168,51397],{"class":51290},[115,59170,51297],{"class":125},[115,59172,59173,59175,59177],{"class":117,"line":1330},[115,59174,52134],{"class":125},[115,59176,5127],{"class":51290},[115,59178,51297],{"class":125},[115,59180,59181],{"class":117,"line":1612},[115,59182,59183],{"class":125},"    * {\n",[115,59185,59186],{"class":117,"line":1617},[115,59187,59188],{"class":125},"      box-sizing: border-box;\n",[115,59190,59191],{"class":117,"line":1623},[115,59192,2187],{"class":125},[115,59194,59195],{"class":117,"line":1628},[115,59196,2400],{"emptyLinePlaceholder":42},[115,59198,59199],{"class":117,"line":1642},[115,59200,59201],{"class":125},"    .slider {\n",[115,59203,59204],{"class":117,"line":1647},[115,59205,59206],{"class":125},"      width: 560px;\n",[115,59208,59209],{"class":117,"line":1653},[115,59210,59211],{"class":125},"      height: 400px;\n",[115,59213,59214],{"class":117,"line":1674},[115,59215,59216],{"class":125},"      overflow: hidden;\n",[115,59218,59219],{"class":117,"line":1679},[115,59220,2187],{"class":125},[115,59222,59223],{"class":117,"line":1693},[115,59224,2400],{"emptyLinePlaceholder":42},[115,59226,59227],{"class":117,"line":1698},[115,59228,59229],{"class":125},"    .slider-wrapper {\n",[115,59231,59232],{"class":117,"line":1727},[115,59233,59234],{"class":125},"      width: 100%;\n",[115,59236,59237],{"class":117,"line":1732},[115,59238,59239],{"class":125},"      height: 320px;\n",[115,59241,59242],{"class":117,"line":1749},[115,59243,2187],{"class":125},[115,59245,59246],{"class":117,"line":1754},[115,59247,2400],{"emptyLinePlaceholder":42},[115,59249,59250],{"class":117,"line":1759},[115,59251,59252],{"class":125},"    .slider-wrapper img {\n",[115,59254,59255],{"class":117,"line":1764},[115,59256,59234],{"class":125},[115,59258,59259],{"class":117,"line":1778},[115,59260,59261],{"class":125},"      height: 100%;\n",[115,59263,59264],{"class":117,"line":1783},[115,59265,59266],{"class":125},"      display: block;\n",[115,59268,59269],{"class":117,"line":2577},[115,59270,2187],{"class":125},[115,59272,59273],{"class":117,"line":2591},[115,59274,2400],{"emptyLinePlaceholder":42},[115,59276,59277],{"class":117,"line":2599},[115,59278,59279],{"class":125},"    .slider-footer {\n",[115,59281,59282],{"class":117,"line":2604},[115,59283,59284],{"class":125},"      height: 80px;\n",[115,59286,59287],{"class":117,"line":2610},[115,59288,59289],{"class":125},"      background-color: rgb(100, 67, 68);\n",[115,59291,59292],{"class":117,"line":2616},[115,59293,59294],{"class":125},"      padding: 12px 12px 0 12px;\n",[115,59296,59297],{"class":117,"line":2621},[115,59298,59299],{"class":125},"      position: relative;\n",[115,59301,59302],{"class":117,"line":7949},[115,59303,2187],{"class":125},[115,59305,59306],{"class":117,"line":7973},[115,59307,2400],{"emptyLinePlaceholder":42},[115,59309,59310],{"class":117,"line":7978},[115,59311,59312],{"class":125},"    .slider-footer .toggle {\n",[115,59314,59315],{"class":117,"line":7984},[115,59316,59317],{"class":125},"      position: absolute;\n",[115,59319,59320],{"class":117,"line":8011},[115,59321,59322],{"class":125},"      right: 0;\n",[115,59324,59325],{"class":117,"line":8016},[115,59326,59327],{"class":125},"      top: 12px;\n",[115,59329,59330],{"class":117,"line":8022},[115,59331,59332],{"class":125},"      display: flex;\n",[115,59334,59335],{"class":117,"line":8034},[115,59336,2187],{"class":125},[115,59338,59339],{"class":117,"line":8046},[115,59340,2400],{"emptyLinePlaceholder":42},[115,59342,59343],{"class":117,"line":8058},[115,59344,59345],{"class":125},"    .slider-footer .toggle button {\n",[115,59347,59348],{"class":117,"line":9717},[115,59349,59350],{"class":125},"      margin-right: 12px;\n",[115,59352,59353],{"class":117,"line":9742},[115,59354,59355],{"class":125},"      width: 28px;\n",[115,59357,59358],{"class":117,"line":9765},[115,59359,59360],{"class":125},"      height: 28px;\n",[115,59362,59363],{"class":117,"line":9789},[115,59364,59365],{"class":125},"      appearance: none;\n",[115,59367,59368],{"class":117,"line":9794},[115,59369,59370],{"class":125},"      border: none;\n",[115,59372,59373],{"class":117,"line":9799},[115,59374,59375],{"class":125},"      background: rgba(255, 255, 255, 0.1);\n",[115,59377,59378],{"class":117,"line":9804},[115,59379,59380],{"class":125},"      color: #fff;\n",[115,59382,59383],{"class":117,"line":9813},[115,59384,59385],{"class":125},"      border-radius: 4px;\n",[115,59387,59388],{"class":117,"line":9818},[115,59389,59390],{"class":125},"      cursor: pointer;\n",[115,59392,59393],{"class":117,"line":9824},[115,59394,2187],{"class":125},[115,59396,59397],{"class":117,"line":9845},[115,59398,2400],{"emptyLinePlaceholder":42},[115,59400,59401],{"class":117,"line":9851},[115,59402,59403],{"class":125},"    .slider-footer .toggle button:hover {\n",[115,59405,59406],{"class":117,"line":9865},[115,59407,59408],{"class":125},"      background: rgba(255, 255, 255, 0.2);\n",[115,59410,59411],{"class":117,"line":9871},[115,59412,2187],{"class":125},[115,59414,59415],{"class":117,"line":9898},[115,59416,2400],{"emptyLinePlaceholder":42},[115,59418,59419],{"class":117,"line":9907},[115,59420,59421],{"class":125},"    .slider-footer p {\n",[115,59423,59424],{"class":117,"line":9913},[115,59425,59426],{"class":125},"      margin: 0;\n",[115,59428,59429],{"class":117,"line":9921},[115,59430,59380],{"class":125},[115,59432,59433],{"class":117,"line":9926},[115,59434,59435],{"class":125},"      font-size: 18px;\n",[115,59437,59438],{"class":117,"line":16605},[115,59439,59440],{"class":125},"      margin-bottom: 10px;\n",[115,59442,59443],{"class":117,"line":16611},[115,59444,2187],{"class":125},[115,59446,59447],{"class":117,"line":16634},[115,59448,2400],{"emptyLinePlaceholder":42},[115,59450,59451],{"class":117,"line":16640},[115,59452,59453],{"class":125},"    .slider-indicator {\n",[115,59455,59456],{"class":117,"line":16663},[115,59457,59426],{"class":125},[115,59459,59460],{"class":117,"line":16677},[115,59461,59462],{"class":125},"      padding: 0;\n",[115,59464,59465],{"class":117,"line":16697},[115,59466,59467],{"class":125},"      list-style: none;\n",[115,59469,59470],{"class":117,"line":16703},[115,59471,59332],{"class":125},[115,59473,59474],{"class":117,"line":16714},[115,59475,59476],{"class":125},"      align-items: center;\n",[115,59478,59479],{"class":117,"line":16737},[115,59480,2187],{"class":125},[115,59482,59483],{"class":117,"line":16759},[115,59484,2400],{"emptyLinePlaceholder":42},[115,59486,59487],{"class":117,"line":16764},[115,59488,59489],{"class":125},"    .slider-indicator li {\n",[115,59491,59492],{"class":117,"line":16770},[115,59493,59494],{"class":125},"      width: 8px;\n",[115,59496,59497],{"class":117,"line":16784},[115,59498,59499],{"class":125},"      height: 8px;\n",[115,59501,59502],{"class":117,"line":16797},[115,59503,59504],{"class":125},"      margin: 4px;\n",[115,59506,59507],{"class":117,"line":16802},[115,59508,59509],{"class":125},"      border-radius: 50%;\n",[115,59511,59512],{"class":117,"line":16816},[115,59513,59514],{"class":125},"      background: #fff;\n",[115,59516,59517],{"class":117,"line":16821},[115,59518,59519],{"class":125},"      opacity: 0.4;\n",[115,59521,59522],{"class":117,"line":16827},[115,59523,59390],{"class":125},[115,59525,59526],{"class":117,"line":16832},[115,59527,2187],{"class":125},[115,59529,59530],{"class":117,"line":16846},[115,59531,2400],{"emptyLinePlaceholder":42},[115,59533,59534],{"class":117,"line":16851},[115,59535,59536],{"class":125},"    .slider-indicator li.active {\n",[115,59538,59539],{"class":117,"line":16856},[115,59540,59541],{"class":125},"      width: 12px;\n",[115,59543,59544],{"class":117,"line":16870},[115,59545,59546],{"class":125},"      height: 12px;\n",[115,59548,59549],{"class":117,"line":16882},[115,59550,59551],{"class":125},"      opacity: 1;\n",[115,59553,59554],{"class":117,"line":16887},[115,59555,2187],{"class":125},[115,59557,59558,59560,59562],{"class":117,"line":16900},[115,59559,52407],{"class":125},[115,59561,5127],{"class":51290},[115,59563,51297],{"class":125},[115,59565,59566,59568,59570],{"class":117,"line":16905},[115,59567,51775],{"class":125},[115,59569,51324],{"class":51290},[115,59571,51297],{"class":125},[115,59573,59574],{"class":117,"line":16910},[115,59575,2400],{"emptyLinePlaceholder":42},[115,59577,59578,59580,59582],{"class":117,"line":16915},[115,59579,1035],{"class":125},[115,59581,51790],{"class":51290},[115,59583,51297],{"class":125},[115,59585,59586,59588,59590,59592,59594,59597],{"class":117,"line":16928},[115,59587,52134],{"class":125},[115,59589,51601],{"class":51290},[115,59591,53476],{"class":1963},[115,59593,171],{"class":125},[115,59595,59596],{"class":230},"\"slider\"",[115,59598,51297],{"class":125},[115,59600,59601,59603,59605,59607,59609,59611],{"class":117,"line":16933},[115,59602,51331],{"class":125},[115,59604,51601],{"class":51290},[115,59606,53476],{"class":1963},[115,59608,171],{"class":125},[115,59610,55217],{"class":230},[115,59612,51297],{"class":125},[115,59614,59615,59617,59619,59621,59623,59626,59628,59630,59632],{"class":117,"line":32634},[115,59616,55224],{"class":125},[115,59618,20],{"class":51290},[115,59620,55229],{"class":1963},[115,59622,171],{"class":125},[115,59624,59625],{"class":230},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[115,59627,55237],{"class":1963},[115,59629,171],{"class":125},[115,59631,7653],{"class":230},[115,59633,59117],{"class":125},[115,59635,59636,59638,59640],{"class":117,"line":32640},[115,59637,51766],{"class":125},[115,59639,51601],{"class":51290},[115,59641,51297],{"class":125},[115,59643,59644,59646,59648,59650,59652,59654],{"class":117,"line":32646},[115,59645,51331],{"class":125},[115,59647,51601],{"class":51290},[115,59649,53476],{"class":1963},[115,59651,171],{"class":125},[115,59653,55264],{"class":230},[115,59655,51297],{"class":125},[115,59657,59658,59660,59662,59665,59667],{"class":117,"line":32652},[115,59659,55224],{"class":125},[115,59661,14],{"class":51290},[115,59663,59664],{"class":125},">对人类来说会不会太超前了？\u003C\u002F",[115,59666,14],{"class":51290},[115,59668,51297],{"class":125},[115,59670,59671,59673,59675,59677,59679,59682],{"class":117,"line":32658},[115,59672,55224],{"class":125},[115,59674,1132],{"class":51290},[115,59676,53476],{"class":1963},[115,59678,171],{"class":125},[115,59680,59681],{"class":230},"\"slider-indicator\"",[115,59683,51297],{"class":125},[115,59685,59686,59688,59690,59692,59694,59697,59699,59701],{"class":117,"line":32669},[115,59687,55292],{"class":125},[115,59689,72],{"class":51290},[115,59691,53476],{"class":1963},[115,59693,171],{"class":125},[115,59695,59696],{"class":230},"\"active\"",[115,59698,55304],{"class":125},[115,59700,72],{"class":51290},[115,59702,51297],{"class":125},[115,59704,59705,59707,59709,59711,59713],{"class":117,"line":32675},[115,59706,55292],{"class":125},[115,59708,72],{"class":51290},[115,59710,55304],{"class":125},[115,59712,72],{"class":51290},[115,59714,51297],{"class":125},[115,59716,59717,59719,59721,59723,59725],{"class":117,"line":32695},[115,59718,55292],{"class":125},[115,59720,72],{"class":51290},[115,59722,55304],{"class":125},[115,59724,72],{"class":51290},[115,59726,51297],{"class":125},[115,59728,59729,59731,59733,59735,59737],{"class":117,"line":32701},[115,59730,55292],{"class":125},[115,59732,72],{"class":51290},[115,59734,55304],{"class":125},[115,59736,72],{"class":51290},[115,59738,51297],{"class":125},[115,59740,59741,59743,59745,59747,59749],{"class":117,"line":32712},[115,59742,55292],{"class":125},[115,59744,72],{"class":51290},[115,59746,55304],{"class":125},[115,59748,72],{"class":51290},[115,59750,51297],{"class":125},[115,59752,59753,59755,59757,59759,59761],{"class":117,"line":32718},[115,59754,55292],{"class":125},[115,59756,72],{"class":51290},[115,59758,55304],{"class":125},[115,59760,72],{"class":51290},[115,59762,51297],{"class":125},[115,59764,59765,59767,59769,59771,59773],{"class":117,"line":32724},[115,59766,55292],{"class":125},[115,59768,72],{"class":51290},[115,59770,55304],{"class":125},[115,59772,72],{"class":51290},[115,59774,51297],{"class":125},[115,59776,59777,59779,59781,59783,59785],{"class":117,"line":32730},[115,59778,55292],{"class":125},[115,59780,72],{"class":51290},[115,59782,55304],{"class":125},[115,59784,72],{"class":51290},[115,59786,51297],{"class":125},[115,59788,59789,59791,59793],{"class":117,"line":32736},[115,59790,55397],{"class":125},[115,59792,1132],{"class":51290},[115,59794,51297],{"class":125},[115,59796,59797,59799,59801,59803,59805,59808],{"class":117,"line":32742},[115,59798,55224],{"class":125},[115,59800,51601],{"class":51290},[115,59802,53476],{"class":1963},[115,59804,171],{"class":125},[115,59806,59807],{"class":230},"\"toggle\"",[115,59809,51297],{"class":125},[115,59811,59812,59814,59816,59818,59820,59823,59825,59828,59830,59832],{"class":117,"line":32748},[115,59813,55292],{"class":125},[115,59815,53877],{"class":51290},[115,59817,53476],{"class":1963},[115,59819,171],{"class":125},[115,59821,59822],{"class":230},"\"prev\"",[115,59824,1085],{"class":125},[115,59826,59827],{"class":174},"&lt;",[115,59829,51775],{"class":125},[115,59831,53877],{"class":51290},[115,59833,51297],{"class":125},[115,59835,59836,59838,59840,59842,59844,59847,59849,59852,59854,59856],{"class":117,"line":32754},[115,59837,55292],{"class":125},[115,59839,53877],{"class":51290},[115,59841,53476],{"class":1963},[115,59843,171],{"class":125},[115,59845,59846],{"class":230},"\"next\"",[115,59848,1085],{"class":125},[115,59850,59851],{"class":174},"&gt;",[115,59853,51775],{"class":125},[115,59855,53877],{"class":51290},[115,59857,51297],{"class":125},[115,59859,59860,59862,59864],{"class":117,"line":32774},[115,59861,55397],{"class":125},[115,59863,51601],{"class":51290},[115,59865,51297],{"class":125},[115,59867,59868,59870,59872],{"class":117,"line":32780},[115,59869,51766],{"class":125},[115,59871,51601],{"class":51290},[115,59873,51297],{"class":125},[115,59875,59876,59878,59880],{"class":117,"line":32796},[115,59877,52407],{"class":125},[115,59879,51601],{"class":51290},[115,59881,51297],{"class":125},[115,59883,59884,59886,59888],{"class":117,"line":32802},[115,59885,52134],{"class":125},[115,59887,51803],{"class":51290},[115,59889,51297],{"class":125},[115,59891,59892],{"class":117,"line":32816},[115,59893,59894],{"class":125},"    \u002F\u002F 1. 初始数据\n",[115,59896,59897],{"class":117,"line":32822},[115,59898,59899],{"class":125},"    const data = [\n",[115,59901,59902],{"class":117,"line":32837},[115,59903,59904],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[115,59906,59907],{"class":117,"line":32843},[115,59908,59909],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[115,59911,59912],{"class":117,"line":32852},[115,59913,59914],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[115,59916,59917],{"class":117,"line":32858},[115,59918,59919],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[115,59921,59922],{"class":117,"line":32867},[115,59923,59924],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[115,59926,59927],{"class":117,"line":32873},[115,59928,59929],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[115,59931,59932],{"class":117,"line":32879},[115,59933,59934],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[115,59936,59937],{"class":117,"line":32888},[115,59938,59939],{"class":125},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[115,59941,59942],{"class":117,"line":32894},[115,59943,53099],{"class":125},[115,59945,59946],{"class":117,"line":32905},[115,59947,59948],{"class":125},"    \u002F\u002F 获取元素\n",[115,59950,59951],{"class":117,"line":32911},[115,59952,59953],{"class":125},"    const img = document.querySelector('.slider-wrapper img')\n",[115,59955,59956],{"class":117,"line":32930},[115,59957,59958],{"class":125},"    const p = document.querySelector('.slider-footer p')\n",[115,59960,59961],{"class":117,"line":32936},[115,59962,59963],{"class":125},"    const footer = document.querySelector('.slider-footer')\n",[115,59965,59966],{"class":117,"line":32947},[115,59967,59968],{"class":125},"    \u002F\u002F 1. 右按钮业务\n",[115,59970,59971],{"class":117,"line":32953},[115,59972,59973],{"class":125},"    \u002F\u002F 1.1 获取右侧按钮 \n",[115,59975,59976],{"class":117,"line":32973},[115,59977,59978],{"class":125},"    const next = document.querySelector('.next')\n",[115,59980,59981],{"class":117,"line":32989},[115,59982,59983],{"class":125},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[115,59985,59986],{"class":117,"line":32995},[115,59987,59988],{"class":125},"    \u002F\u002F 1.2 注册点击事件\n",[115,59990,59991],{"class":117,"line":33009},[115,59992,2400],{"emptyLinePlaceholder":42},[115,59994,59995],{"class":117,"line":33015},[115,59996,59997],{"class":125},"    next.addEventListener('click', function () {\n",[115,59999,60000],{"class":117,"line":33021},[115,60001,60002],{"class":125},"      \u002F\u002F console.log(11)\n",[115,60004,60005],{"class":117,"line":33032},[115,60006,60007],{"class":125},"      i++\n",[115,60009,60010],{"class":117,"line":33038},[115,60011,60012],{"class":125},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[115,60014,60015],{"class":117,"line":33044},[115,60016,60017],{"class":125},"      \u002F\u002F if (i >= 8) {\n",[115,60019,60020],{"class":117,"line":33054},[115,60021,60022],{"class":125},"      \u002F\u002F   i = 0\n",[115,60024,60025],{"class":117,"line":33060},[115,60026,60027],{"class":125},"      \u002F\u002F }\n",[115,60029,60030],{"class":117,"line":33071},[115,60031,60032],{"class":125},"      i = i >= data.length ? 0 : i\n",[115,60034,60035],{"class":117,"line":33077},[115,60036,60037],{"class":125},"      \u002F\u002F 1.3 得到对应的对象\n",[115,60039,60040],{"class":117,"line":33087},[115,60041,60042],{"class":125},"      \u002F\u002F console.log(data[i])\n",[115,60044,60045],{"class":117,"line":33092},[115,60046,60047],{"class":125},"      \u002F\u002F 调用函数\n",[115,60049,60050],{"class":117,"line":33098},[115,60051,60052],{"class":125},"      toggle()\n",[115,60054,60055],{"class":117,"line":33147},[115,60056,33462],{"class":125},[115,60058,60059],{"class":117,"line":33194},[115,60060,2400],{"emptyLinePlaceholder":42},[115,60062,60063],{"class":117,"line":33199},[115,60064,60065],{"class":125},"    \u002F\u002F 2. 左侧按钮业务\n",[115,60067,60068],{"class":117,"line":33205},[115,60069,60070],{"class":125},"    \u002F\u002F 2.1 获取左侧按钮 \n",[115,60072,60073],{"class":117,"line":33224},[115,60074,60075],{"class":125},"    const prev = document.querySelector('.prev')\n",[115,60077,60078],{"class":117,"line":33230},[115,60079,59988],{"class":125},[115,60081,60082],{"class":117,"line":33250},[115,60083,60084],{"class":125},"    prev.addEventListener('click', function () {\n",[115,60086,60087],{"class":117,"line":33256},[115,60088,60089],{"class":125},"      i--\n",[115,60091,60092],{"class":117,"line":33262},[115,60093,60094],{"class":125},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[115,60096,60097],{"class":117,"line":33272},[115,60098,60099],{"class":125},"      \u002F\u002F if (i \u003C 0) {\n",[115,60101,60102],{"class":117,"line":33277},[115,60103,60104],{"class":125},"      \u002F\u002F   i = 7\n",[115,60106,60107],{"class":117,"line":33283},[115,60108,60027],{"class":125},[115,60110,60111],{"class":117,"line":33299},[115,60112,60113],{"class":125},"      i = i \u003C 0 ? data.length - 1 : i\n",[115,60115,60116],{"class":117,"line":33344},[115,60117,60037],{"class":125},[115,60119,60120],{"class":117,"line":33350},[115,60121,60042],{"class":125},[115,60123,60124],{"class":117,"line":33356},[115,60125,60047],{"class":125},[115,60127,60128],{"class":117,"line":33362},[115,60129,60052],{"class":125},[115,60131,60132],{"class":117,"line":33373},[115,60133,33462],{"class":125},[115,60135,60136],{"class":117,"line":33379},[115,60137,2400],{"emptyLinePlaceholder":42},[115,60139,60140],{"class":117,"line":33385},[115,60141,60142],{"class":125},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[115,60144,60145],{"class":117,"line":33391},[115,60146,60147],{"class":125},"    function toggle() {\n",[115,60149,60150],{"class":117,"line":33409},[115,60151,60152],{"class":125},"      \u002F\u002F 1.4 渲染对应的数据\n",[115,60154,60155],{"class":117,"line":33423},[115,60156,60157],{"class":125},"      img.src = data[i].url\n",[115,60159,60160],{"class":117,"line":33432},[115,60161,60162],{"class":125},"      p.innerHTML = data[i].title\n",[115,60164,60165],{"class":117,"line":33441},[115,60166,60167],{"class":125},"      footer.style.backgroundColor = data[i].color\n",[115,60169,60170],{"class":117,"line":33450},[115,60171,60172],{"class":125},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[115,60174,60175],{"class":117,"line":33459},[115,60176,60177],{"class":125},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[115,60179,60180],{"class":117,"line":33465},[115,60181,60182],{"class":125},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[115,60184,60185],{"class":117,"line":33471},[115,60186,2187],{"class":125},[115,60188,60189],{"class":117,"line":33479},[115,60190,2400],{"emptyLinePlaceholder":42},[115,60192,60193],{"class":117,"line":33484},[115,60194,60195],{"class":125},"    \u002F\u002F 3. 自动播放模块\n",[115,60197,60198],{"class":117,"line":33490},[115,60199,60200],{"class":125},"    let timerId = setInterval(function () {\n",[115,60202,60203],{"class":117,"line":33501},[115,60204,60205],{"class":125},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[115,60207,60208],{"class":117,"line":33507},[115,60209,60210],{"class":125},"      next.click()\n",[115,60212,60213],{"class":117,"line":33527},[115,60214,60215],{"class":125},"    }, 1000)\n",[115,60217,60218],{"class":117,"line":33533},[115,60219,2400],{"emptyLinePlaceholder":42},[115,60221,60222],{"class":117,"line":33539},[115,60223,60224],{"class":125},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[115,60226,60227],{"class":117,"line":33545},[115,60228,60229],{"class":125},"    const slider = document.querySelector('.slider')\n",[115,60231,60232],{"class":117,"line":33562},[115,60233,60234],{"class":125},"    \u002F\u002F 注册事件\n",[115,60236,60237],{"class":117,"line":33568},[115,60238,60239],{"class":125},"    slider.addEventListener('mouseenter', function () {\n",[115,60241,60242],{"class":117,"line":33574},[115,60243,60244],{"class":125},"      \u002F\u002F 停止定时器\n",[115,60246,60247],{"class":117,"line":33580},[115,60248,60249],{"class":125},"      clearInterval(timerId)\n",[115,60251,60252],{"class":117,"line":33586},[115,60253,33462],{"class":125},[115,60255,60256],{"class":117,"line":33592},[115,60257,2400],{"emptyLinePlaceholder":42},[115,60259,60260],{"class":117,"line":33619},[115,60261,60262],{"class":125},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[115,60264,60265],{"class":117,"line":33643},[115,60266,60234],{"class":125},[115,60268,60269],{"class":117,"line":33649},[115,60270,60271],{"class":125},"    slider.addEventListener('mouseleave', function () {\n",[115,60273,60274],{"class":117,"line":33655},[115,60275,60244],{"class":125},[115,60277,60278],{"class":117,"line":33661},[115,60279,60280],{"class":125},"      if (timerId) clearInterval(timerId)\n",[115,60282,60283],{"class":117,"line":33672},[115,60284,60285],{"class":125},"      \u002F\u002F 开启定时器\n",[115,60287,60288],{"class":117,"line":33683},[115,60289,60290],{"class":125},"      timerId = setInterval(function () {\n",[115,60292,60293],{"class":117,"line":33689},[115,60294,60295],{"class":125},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[115,60297,60298],{"class":117,"line":33706},[115,60299,60300],{"class":125},"        next.click()\n",[115,60302,60303],{"class":117,"line":33729},[115,60304,60305],{"class":125},"      }, 1000)\n",[115,60307,60308],{"class":117,"line":33752},[115,60309,33462],{"class":125},[115,60311,60312,60314,60316],{"class":117,"line":33758},[115,60313,52407],{"class":125},[115,60315,51803],{"class":51290},[115,60317,51297],{"class":125},[115,60319,60320,60322,60324],{"class":117,"line":33763},[115,60321,51775],{"class":125},[115,60323,51790],{"class":51290},[115,60325,51297],{"class":125},[115,60327,60328],{"class":117,"line":33772},[115,60329,2400],{"emptyLinePlaceholder":42},[115,60331,60332,60334,60336],{"class":117,"line":33782},[115,60333,51775],{"class":125},[115,60335,50625],{"class":51290},[115,60337,51297],{"class":125},[21999,60339,60341],{"id":60340},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60343,60344],{},"小米搜索框案例：",[106,60346,60348],{"className":50623,"code":60347,"language":50625,"meta":22,"style":22},"\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",[112,60349,60350,60360,60374,60378,60386,60400,60420,60440,60452,60460,60466,60476,60486,60498,60502,60506,60513,60517,60528,60532,60536,60543,60554,60567,60581,60585,60589,60598,60610,60622,60636,60649,60662,60680,60691,60695,60699,60708,60725,60729,60733,60740,60750,60760,60771,60784,60796,60812,60823,60835,60839,60843,60851,60862,60879,60891,60903,60914,60918,60922,60933,60944,60948,60956,60960,60968,60972,60980,60995,61018,61033,61064,61091,61118,61145,61172,61199,61226,61235,61243,61251,61256,61276,61296,61301,61306,61324,61329,61339,61344,61358,61363,61368,61385,61394,61406,61410,61418,61426,61430],{"__ignoreMap":22},[115,60351,60352,60354,60356,60358],{"class":117,"line":118},[115,60353,51287],{"class":125},[115,60355,51291],{"class":51290},[115,60357,51294],{"class":1963},[115,60359,51297],{"class":125},[115,60361,60362,60364,60366,60368,60370,60372],{"class":117,"line":37},[115,60363,1035],{"class":125},[115,60365,50625],{"class":51290},[115,60367,51306],{"class":1963},[115,60369,171],{"class":125},[115,60371,51311],{"class":230},[115,60373,51297],{"class":125},[115,60375,60376],{"class":117,"line":1180},[115,60377,2400],{"emptyLinePlaceholder":42},[115,60379,60380,60382,60384],{"class":117,"line":1195},[115,60381,1035],{"class":125},[115,60383,51324],{"class":51290},[115,60385,51297],{"class":125},[115,60387,60388,60390,60392,60394,60396,60398],{"class":117,"line":1201},[115,60389,51331],{"class":125},[115,60391,51334],{"class":51290},[115,60393,51337],{"class":1963},[115,60395,171],{"class":125},[115,60397,51342],{"class":230},[115,60399,51297],{"class":125},[115,60401,60402,60404,60406,60408,60410,60412,60414,60416,60418],{"class":117,"line":1215},[115,60403,51331],{"class":125},[115,60405,51334],{"class":51290},[115,60407,51353],{"class":1963},[115,60409,171],{"class":125},[115,60411,51358],{"class":230},[115,60413,51361],{"class":1963},[115,60415,171],{"class":125},[115,60417,51366],{"class":230},[115,60419,51297],{"class":125},[115,60421,60422,60424,60426,60428,60430,60432,60434,60436,60438],{"class":117,"line":1221},[115,60423,51331],{"class":125},[115,60425,51334],{"class":51290},[115,60427,14921],{"class":1963},[115,60429,171],{"class":125},[115,60431,51381],{"class":230},[115,60433,51361],{"class":1963},[115,60435,171],{"class":125},[115,60437,51388],{"class":230},[115,60439,51297],{"class":125},[115,60441,60442,60444,60446,60448,60450],{"class":117,"line":1312},[115,60443,51331],{"class":125},[115,60445,51397],{"class":51290},[115,60447,51400],{"class":125},[115,60449,51397],{"class":51290},[115,60451,51297],{"class":125},[115,60453,60454,60456,60458],{"class":117,"line":1318},[115,60455,51331],{"class":125},[115,60457,5127],{"class":51290},[115,60459,51297],{"class":125},[115,60461,60462,60464],{"class":117,"line":1330},[115,60463,51417],{"class":51290},[115,60465,15573],{"class":125},[115,60467,60468,60470,60472,60474],{"class":117,"line":1612},[115,60469,51424],{"class":174},[115,60471,51427],{"class":125},[115,60473,317],{"class":174},[115,60475,1291],{"class":125},[115,60477,60478,60480,60482,60484],{"class":117,"line":1617},[115,60479,51436],{"class":174},[115,60481,51427],{"class":125},[115,60483,317],{"class":174},[115,60485,1291],{"class":125},[115,60487,60488,60491,60493,60496],{"class":117,"line":1623},[115,60489,60490],{"class":174},"            box-sizing",[115,60492,51427],{"class":125},[115,60494,60495],{"class":174},"border-box",[115,60497,1291],{"class":125},[115,60499,60500],{"class":117,"line":1628},[115,60501,2529],{"class":125},[115,60503,60504],{"class":117,"line":1642},[115,60505,2400],{"emptyLinePlaceholder":42},[115,60507,60508,60511],{"class":117,"line":1647},[115,60509,60510],{"class":51290},"        ul",[115,60512,15573],{"class":125},[115,60514,60515],{"class":117,"line":1653},[115,60516,2400],{"emptyLinePlaceholder":42},[115,60518,60519,60522,60524,60526],{"class":117,"line":1674},[115,60520,60521],{"class":174},"            list-style",[115,60523,51427],{"class":125},[115,60525,54727],{"class":174},[115,60527,1291],{"class":125},[115,60529,60530],{"class":117,"line":1679},[115,60531,2529],{"class":125},[115,60533,60534],{"class":117,"line":1693},[115,60535,2400],{"emptyLinePlaceholder":42},[115,60537,60538,60541],{"class":117,"line":1698},[115,60539,60540],{"class":1963},"        .mi",[115,60542,15573],{"class":125},[115,60544,60545,60548,60550,60552],{"class":117,"line":1727},[115,60546,60547],{"class":174},"            position",[115,60549,51427],{"class":125},[115,60551,54754],{"class":174},[115,60553,1291],{"class":125},[115,60555,60556,60558,60560,60563,60565],{"class":117,"line":1732},[115,60557,51474],{"class":174},[115,60559,51427],{"class":125},[115,60561,60562],{"class":174},"223",[115,60564,51482],{"class":121},[115,60566,1291],{"class":125},[115,60568,60569,60571,60573,60575,60577,60579],{"class":117,"line":1749},[115,60570,51424],{"class":174},[115,60572,51427],{"class":125},[115,60574,436],{"class":174},[115,60576,51482],{"class":121},[115,60578,51546],{"class":174},[115,60580,1291],{"class":125},[115,60582,60583],{"class":117,"line":1754},[115,60584,2529],{"class":125},[115,60586,60587],{"class":117,"line":1759},[115,60588,2400],{"emptyLinePlaceholder":42},[115,60590,60591,60593,60596],{"class":117,"line":1764},[115,60592,60540],{"class":1963},[115,60594,60595],{"class":51290}," input",[115,60597,15573],{"class":125},[115,60599,60600,60602,60604,60606,60608],{"class":117,"line":1778},[115,60601,51474],{"class":174},[115,60603,51427],{"class":125},[115,60605,60562],{"class":174},[115,60607,51482],{"class":121},[115,60609,1291],{"class":125},[115,60611,60612,60614,60616,60618,60620],{"class":117,"line":1783},[115,60613,51489],{"class":174},[115,60615,51427],{"class":125},[115,60617,732],{"class":174},[115,60619,51482],{"class":121},[115,60621,1291],{"class":125},[115,60623,60624,60626,60628,60630,60632,60634],{"class":117,"line":2577},[115,60625,51436],{"class":174},[115,60627,51427],{"class":125},[115,60629,317],{"class":174},[115,60631,2038],{"class":174},[115,60633,51482],{"class":121},[115,60635,1291],{"class":125},[115,60637,60638,60641,60643,60645,60647],{"class":117,"line":2591},[115,60639,60640],{"class":174},"            font-size",[115,60642,51427],{"class":125},[115,60644,674],{"class":174},[115,60646,51482],{"class":121},[115,60648,1291],{"class":125},[115,60650,60651,60654,60656,60658,60660],{"class":117,"line":2599},[115,60652,60653],{"class":174},"            line-height",[115,60655,51427],{"class":125},[115,60657,732],{"class":174},[115,60659,51482],{"class":121},[115,60661,1291],{"class":125},[115,60663,60664,60667,60669,60671,60673,60675,60678],{"class":117,"line":2604},[115,60665,60666],{"class":174},"            border",[115,60668,51427],{"class":125},[115,60670,343],{"class":174},[115,60672,51482],{"class":121},[115,60674,51511],{"class":174},[115,60676,60677],{"class":174}," #e0e0e0",[115,60679,1291],{"class":125},[115,60681,60682,60685,60687,60689],{"class":117,"line":2610},[115,60683,60684],{"class":174},"            outline",[115,60686,51427],{"class":125},[115,60688,54727],{"class":174},[115,60690,1291],{"class":125},[115,60692,60693],{"class":117,"line":2616},[115,60694,2529],{"class":125},[115,60696,60697],{"class":117,"line":2621},[115,60698,2400],{"emptyLinePlaceholder":42},[115,60700,60701,60703,60706],{"class":117,"line":7949},[115,60702,60540],{"class":1963},[115,60704,60705],{"class":1963}," .search",[115,60707,15573],{"class":125},[115,60709,60710,60712,60714,60716,60718,60720,60723],{"class":117,"line":7973},[115,60711,60666],{"class":174},[115,60713,51427],{"class":125},[115,60715,343],{"class":174},[115,60717,51482],{"class":121},[115,60719,51511],{"class":174},[115,60721,60722],{"class":174}," #ff6700",[115,60724,1291],{"class":125},[115,60726,60727],{"class":117,"line":7978},[115,60728,2529],{"class":125},[115,60730,60731],{"class":117,"line":7984},[115,60732,2400],{"emptyLinePlaceholder":42},[115,60734,60735,60738],{"class":117,"line":8011},[115,60736,60737],{"class":1963},"        .result-list",[115,60739,15573],{"class":125},[115,60741,60742,60744,60746,60748],{"class":117,"line":8016},[115,60743,51462],{"class":174},[115,60745,51427],{"class":125},[115,60747,54727],{"class":174},[115,60749,1291],{"class":125},[115,60751,60752,60754,60756,60758],{"class":117,"line":8022},[115,60753,60547],{"class":174},[115,60755,51427],{"class":125},[115,60757,54821],{"class":174},[115,60759,1291],{"class":125},[115,60761,60762,60765,60767,60769],{"class":117,"line":8034},[115,60763,60764],{"class":174},"            left",[115,60766,51427],{"class":125},[115,60768,317],{"class":174},[115,60770,1291],{"class":125},[115,60772,60773,60776,60778,60780,60782],{"class":117,"line":8046},[115,60774,60775],{"class":174},"            top",[115,60777,51427],{"class":125},[115,60779,732],{"class":174},[115,60781,51482],{"class":121},[115,60783,1291],{"class":125},[115,60785,60786,60788,60790,60792,60794],{"class":117,"line":8058},[115,60787,51474],{"class":174},[115,60789,51427],{"class":125},[115,60791,60562],{"class":174},[115,60793,51482],{"class":121},[115,60795,1291],{"class":125},[115,60797,60798,60800,60802,60804,60806,60808,60810],{"class":117,"line":9717},[115,60799,60666],{"class":174},[115,60801,51427],{"class":125},[115,60803,343],{"class":174},[115,60805,51482],{"class":121},[115,60807,51511],{"class":174},[115,60809,60722],{"class":174},[115,60811,1291],{"class":125},[115,60813,60814,60817,60819,60821],{"class":117,"line":9742},[115,60815,60816],{"class":174},"            border-top",[115,60818,51427],{"class":125},[115,60820,317],{"class":174},[115,60822,1291],{"class":125},[115,60824,60825,60828,60830,60833],{"class":117,"line":9765},[115,60826,60827],{"class":174},"            background",[115,60829,51427],{"class":125},[115,60831,60832],{"class":174},"#fff",[115,60834,1291],{"class":125},[115,60836,60837],{"class":117,"line":9789},[115,60838,2529],{"class":125},[115,60840,60841],{"class":117,"line":9794},[115,60842,2400],{"emptyLinePlaceholder":42},[115,60844,60845,60847,60849],{"class":117,"line":9799},[115,60846,60737],{"class":1963},[115,60848,1399],{"class":51290},[115,60850,15573],{"class":125},[115,60852,60853,60855,60857,60860],{"class":117,"line":9804},[115,60854,51462],{"class":174},[115,60856,51427],{"class":125},[115,60858,60859],{"class":174},"block",[115,60861,1291],{"class":125},[115,60863,60864,60866,60868,60870,60872,60875,60877],{"class":117,"line":9813},[115,60865,51436],{"class":174},[115,60867,51427],{"class":125},[115,60869,469],{"class":174},[115,60871,51482],{"class":121},[115,60873,60874],{"class":174}," 15",[115,60876,51482],{"class":121},[115,60878,1291],{"class":125},[115,60880,60881,60883,60885,60887,60889],{"class":117,"line":9818},[115,60882,60640],{"class":174},[115,60884,51427],{"class":125},[115,60886,623],{"class":174},[115,60888,51482],{"class":121},[115,60890,1291],{"class":125},[115,60892,60893,60896,60898,60901],{"class":117,"line":9824},[115,60894,60895],{"class":174},"            color",[115,60897,51427],{"class":125},[115,60899,60900],{"class":174},"#424242",[115,60902,1291],{"class":125},[115,60904,60905,60908,60910,60912],{"class":117,"line":9845},[115,60906,60907],{"class":174},"            text-decoration",[115,60909,51427],{"class":125},[115,60911,54727],{"class":174},[115,60913,1291],{"class":125},[115,60915,60916],{"class":117,"line":9851},[115,60917,2529],{"class":125},[115,60919,60920],{"class":117,"line":9865},[115,60921,2400],{"emptyLinePlaceholder":42},[115,60923,60924,60926,60928,60931],{"class":117,"line":9871},[115,60925,60737],{"class":1963},[115,60927,1399],{"class":51290},[115,60929,60930],{"class":1963},":hover",[115,60932,15573],{"class":125},[115,60934,60935,60937,60939,60942],{"class":117,"line":9898},[115,60936,51630],{"class":174},[115,60938,51427],{"class":125},[115,60940,60941],{"class":174},"#eee",[115,60943,1291],{"class":125},[115,60945,60946],{"class":117,"line":9907},[115,60947,2529],{"class":125},[115,60949,60950,60952,60954],{"class":117,"line":9913},[115,60951,51766],{"class":125},[115,60953,5127],{"class":51290},[115,60955,51297],{"class":125},[115,60957,60958],{"class":117,"line":9921},[115,60959,2400],{"emptyLinePlaceholder":42},[115,60961,60962,60964,60966],{"class":117,"line":9926},[115,60963,51775],{"class":125},[115,60965,51324],{"class":51290},[115,60967,51297],{"class":125},[115,60969,60970],{"class":117,"line":16605},[115,60971,2400],{"emptyLinePlaceholder":42},[115,60973,60974,60976,60978],{"class":117,"line":16611},[115,60975,1035],{"class":125},[115,60977,51790],{"class":51290},[115,60979,51297],{"class":125},[115,60981,60982,60984,60986,60988,60990,60993],{"class":117,"line":16634},[115,60983,51331],{"class":125},[115,60985,51601],{"class":51290},[115,60987,53476],{"class":1963},[115,60989,171],{"class":125},[115,60991,60992],{"class":230},"\"mi\"",[115,60994,51297],{"class":125},[115,60996,60997,60999,61001,61003,61005,61008,61011,61013,61016],{"class":117,"line":16640},[115,60998,55292],{"class":125},[115,61000,53811],{"class":51290},[115,61002,53814],{"class":1963},[115,61004,171],{"class":125},[115,61006,61007],{"class":230},"\"search\"",[115,61009,61010],{"class":1963}," placeholder",[115,61012,171],{"class":125},[115,61014,61015],{"class":230},"\"小米笔记本\"",[115,61017,51297],{"class":125},[115,61019,61020,61022,61024,61026,61028,61031],{"class":117,"line":16663},[115,61021,55292],{"class":125},[115,61023,1132],{"class":51290},[115,61025,53476],{"class":1963},[115,61027,171],{"class":125},[115,61029,61030],{"class":230},"\"result-list\"",[115,61032,51297],{"class":125},[115,61034,61035,61038,61040,61043,61045,61048,61050,61053,61056,61058,61060,61062],{"class":117,"line":16677},[115,61036,61037],{"class":125},"            \u003C",[115,61039,72],{"class":51290},[115,61041,61042],{"class":125},">\u003C",[115,61044,27],{"class":51290},[115,61046,61047],{"class":1963}," href",[115,61049,171],{"class":125},[115,61051,61052],{"class":230},"\"#\"",[115,61054,61055],{"class":125},">全部商品\u003C\u002F",[115,61057,27],{"class":51290},[115,61059,55304],{"class":125},[115,61061,72],{"class":51290},[115,61063,51297],{"class":125},[115,61065,61066,61068,61070,61072,61074,61076,61078,61080,61083,61085,61087,61089],{"class":117,"line":16697},[115,61067,61037],{"class":125},[115,61069,72],{"class":51290},[115,61071,61042],{"class":125},[115,61073,27],{"class":51290},[115,61075,61047],{"class":1963},[115,61077,171],{"class":125},[115,61079,61052],{"class":230},[115,61081,61082],{"class":125},">小米11\u003C\u002F",[115,61084,27],{"class":51290},[115,61086,55304],{"class":125},[115,61088,72],{"class":51290},[115,61090,51297],{"class":125},[115,61092,61093,61095,61097,61099,61101,61103,61105,61107,61110,61112,61114,61116],{"class":117,"line":16703},[115,61094,61037],{"class":125},[115,61096,72],{"class":51290},[115,61098,61042],{"class":125},[115,61100,27],{"class":51290},[115,61102,61047],{"class":1963},[115,61104,171],{"class":125},[115,61106,61052],{"class":230},[115,61108,61109],{"class":125},">小米10S\u003C\u002F",[115,61111,27],{"class":51290},[115,61113,55304],{"class":125},[115,61115,72],{"class":51290},[115,61117,51297],{"class":125},[115,61119,61120,61122,61124,61126,61128,61130,61132,61134,61137,61139,61141,61143],{"class":117,"line":16714},[115,61121,61037],{"class":125},[115,61123,72],{"class":51290},[115,61125,61042],{"class":125},[115,61127,27],{"class":51290},[115,61129,61047],{"class":1963},[115,61131,171],{"class":125},[115,61133,61052],{"class":230},[115,61135,61136],{"class":125},">小米笔记本\u003C\u002F",[115,61138,27],{"class":51290},[115,61140,55304],{"class":125},[115,61142,72],{"class":51290},[115,61144,51297],{"class":125},[115,61146,61147,61149,61151,61153,61155,61157,61159,61161,61164,61166,61168,61170],{"class":117,"line":16737},[115,61148,61037],{"class":125},[115,61150,72],{"class":51290},[115,61152,61042],{"class":125},[115,61154,27],{"class":51290},[115,61156,61047],{"class":1963},[115,61158,171],{"class":125},[115,61160,61052],{"class":230},[115,61162,61163],{"class":125},">小米手机\u003C\u002F",[115,61165,27],{"class":51290},[115,61167,55304],{"class":125},[115,61169,72],{"class":51290},[115,61171,51297],{"class":125},[115,61173,61174,61176,61178,61180,61182,61184,61186,61188,61191,61193,61195,61197],{"class":117,"line":16759},[115,61175,61037],{"class":125},[115,61177,72],{"class":51290},[115,61179,61042],{"class":125},[115,61181,27],{"class":51290},[115,61183,61047],{"class":1963},[115,61185,171],{"class":125},[115,61187,61052],{"class":230},[115,61189,61190],{"class":125},">黑鲨4\u003C\u002F",[115,61192,27],{"class":51290},[115,61194,55304],{"class":125},[115,61196,72],{"class":51290},[115,61198,51297],{"class":125},[115,61200,61201,61203,61205,61207,61209,61211,61213,61215,61218,61220,61222,61224],{"class":117,"line":16764},[115,61202,61037],{"class":125},[115,61204,72],{"class":51290},[115,61206,61042],{"class":125},[115,61208,27],{"class":51290},[115,61210,61047],{"class":1963},[115,61212,171],{"class":125},[115,61214,61052],{"class":230},[115,61216,61217],{"class":125},">空调\u003C\u002F",[115,61219,27],{"class":51290},[115,61221,55304],{"class":125},[115,61223,72],{"class":51290},[115,61225,51297],{"class":125},[115,61227,61228,61231,61233],{"class":117,"line":16770},[115,61229,61230],{"class":125},"        \u003C\u002F",[115,61232,1132],{"class":51290},[115,61234,51297],{"class":125},[115,61236,61237,61239,61241],{"class":117,"line":16784},[115,61238,51766],{"class":125},[115,61240,51601],{"class":51290},[115,61242,51297],{"class":125},[115,61244,61245,61247,61249],{"class":117,"line":16797},[115,61246,51331],{"class":125},[115,61248,51803],{"class":51290},[115,61250,51297],{"class":125},[115,61252,61253],{"class":117,"line":16802},[115,61254,61255],{"class":184},"        \u002F\u002F 1. 获取元素\n",[115,61257,61258,61261,61263,61265,61267,61269,61271,61274],{"class":117,"line":16816},[115,61259,61260],{"class":121},"        const",[115,61262,60595],{"class":174},[115,61264,13565],{"class":121},[115,61266,54386],{"class":125},[115,61268,54389],{"class":1963},[115,61270,126],{"class":125},[115,61272,61273],{"class":230},"'[type=search]'",[115,61275,132],{"class":125},[115,61277,61278,61280,61283,61285,61287,61289,61291,61294],{"class":117,"line":16821},[115,61279,61260],{"class":121},[115,61281,61282],{"class":174}," ul",[115,61284,13565],{"class":121},[115,61286,54386],{"class":125},[115,61288,54389],{"class":1963},[115,61290,126],{"class":125},[115,61292,61293],{"class":230},"'.result-list'",[115,61295,132],{"class":125},[115,61297,61298],{"class":117,"line":16827},[115,61299,61300],{"class":184},"        \u002F\u002F console.log(input)\n",[115,61302,61303],{"class":117,"line":16832},[115,61304,61305],{"class":184},"        \u002F\u002F 2. 监听事件 获得焦点\n",[115,61307,61308,61311,61313,61315,61318,61320,61322],{"class":117,"line":16846},[115,61309,61310],{"class":125},"        input.",[115,61312,57803],{"class":1963},[115,61314,126],{"class":125},[115,61316,61317],{"class":230},"'focus'",[115,61319,12436],{"class":125},[115,61321,54439],{"class":121},[115,61323,54442],{"class":125},[115,61325,61326],{"class":117,"line":16851},[115,61327,61328],{"class":184},"            \u002F\u002F ul显示\n",[115,61330,61331,61334,61336],{"class":117,"line":16856},[115,61332,61333],{"class":125},"            ul.style.display ",[115,61335,171],{"class":121},[115,61337,61338],{"class":230}," 'block'\n",[115,61340,61341],{"class":117,"line":16870},[115,61342,61343],{"class":184},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[115,61345,61346,61349,61351,61353,61356],{"class":117,"line":16882},[115,61347,61348],{"class":125},"            input.classList.",[115,61350,5335],{"class":1963},[115,61352,126],{"class":125},[115,61354,61355],{"class":230},"'search'",[115,61357,132],{"class":125},[115,61359,61360],{"class":117,"line":16887},[115,61361,61362],{"class":125},"        })\n",[115,61364,61365],{"class":117,"line":16900},[115,61366,61367],{"class":184},"        \u002F\u002F 3. 监听事件 失去焦点\n",[115,61369,61370,61372,61374,61376,61379,61381,61383],{"class":117,"line":16905},[115,61371,61310],{"class":125},[115,61373,57803],{"class":1963},[115,61375,126],{"class":125},[115,61377,61378],{"class":230},"'blur'",[115,61380,12436],{"class":125},[115,61382,54439],{"class":121},[115,61384,54442],{"class":125},[115,61386,61387,61389,61391],{"class":117,"line":16910},[115,61388,61333],{"class":125},[115,61390,171],{"class":121},[115,61392,61393],{"class":230}," 'none'\n",[115,61395,61396,61398,61400,61402,61404],{"class":117,"line":16915},[115,61397,61348],{"class":125},[115,61399,56996],{"class":1963},[115,61401,126],{"class":125},[115,61403,61355],{"class":230},[115,61405,132],{"class":125},[115,61407,61408],{"class":117,"line":16928},[115,61409,61362],{"class":125},[115,61411,61412,61414,61416],{"class":117,"line":16933},[115,61413,51766],{"class":125},[115,61415,51803],{"class":51290},[115,61417,51297],{"class":125},[115,61419,61420,61422,61424],{"class":117,"line":32634},[115,61421,51775],{"class":125},[115,61423,51790],{"class":51290},[115,61425,51297],{"class":125},[115,61427,61428],{"class":117,"line":32640},[115,61429,2400],{"emptyLinePlaceholder":42},[115,61431,61432,61434,61436],{"class":117,"line":32646},[115,61433,51775],{"class":125},[115,61435,50625],{"class":51290},[115,61437,51297],{"class":125},[21999,61439,61441],{"id":61440},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61443,61444],{},"评论字数统计案例",[14,61446,61447],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61449,61450],{},"牢记focus伪类选择器",[51334,61452],{"charSet":61453},"UTF-8",[51334,61455],{"name":61456,"content":61457},"viewport","width=device-width, initial-scale=1.0",[51397,61459,61460],{},"Document",[5127,61462,61463],{},"\n\ninput {\n\nwidth: 200px;\n\ntransition: all .3;\n\n}\n\n\u002F\\* 获得了光标 \\*\u002F\n\ninput:focus {\n\nwidth: 300px;\n\n}\n\n",[53811,61465],{"type":5188},[1132,61467,61468,61471],{},[72,61469,61470],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[72,61472,61473],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[106,61475,61477],{"className":50623,"code":61476,"language":50625,"meta":22,"style":22},"\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",[112,61478,61479,61489,61503,61507,61515,61529,61549,61569,61582,61590,61597,61610,61624,61634,61644,61648,61652,61659,61671,61683,61695,61707,61736,61749,61753,61757,61766,61777,61789,61800,61811,61823,61834,61846,61862,61874,61878,61882,61893,61904,61914,61926,61930,61934,61942,61953,61963,61974,61986,61999,62011,62023,62027,62031,62040,62052,62063,62076,62087,62101,62105,62109,62116,62128,62140,62150,62154,62158,62167,62179,62189,62193,62197,62208,62218,62237,62250,62254,62258,62268,62278,62282,62286,62297,62308,62320,62332,62336,62340,62351,62362,62376,62380,62384,62395,62405,62417,62421,62429,62437,62441,62449,62464,62483,62523,62536,62544,62558,62578,62586,62601,62624,62642,62657,62677,62697,62717,62725,62733,62741,62749,62769,62789,62794,62811,62820,62824,62829,62845,62853,62857,62862,62879,62884,62909,62913,62917,62922,62927,62935,62943,62947],{"__ignoreMap":22},[115,61480,61481,61483,61485,61487],{"class":117,"line":118},[115,61482,51287],{"class":125},[115,61484,51291],{"class":51290},[115,61486,51294],{"class":1963},[115,61488,51297],{"class":125},[115,61490,61491,61493,61495,61497,61499,61501],{"class":117,"line":37},[115,61492,1035],{"class":125},[115,61494,50625],{"class":51290},[115,61496,51306],{"class":1963},[115,61498,171],{"class":125},[115,61500,51311],{"class":230},[115,61502,51297],{"class":125},[115,61504,61505],{"class":117,"line":1180},[115,61506,2400],{"emptyLinePlaceholder":42},[115,61508,61509,61511,61513],{"class":117,"line":1195},[115,61510,1035],{"class":125},[115,61512,51324],{"class":51290},[115,61514,51297],{"class":125},[115,61516,61517,61519,61521,61523,61525,61527],{"class":117,"line":1201},[115,61518,52134],{"class":125},[115,61520,51334],{"class":51290},[115,61522,51337],{"class":1963},[115,61524,171],{"class":125},[115,61526,51342],{"class":230},[115,61528,51297],{"class":125},[115,61530,61531,61533,61535,61537,61539,61541,61543,61545,61547],{"class":117,"line":1215},[115,61532,52134],{"class":125},[115,61534,51334],{"class":51290},[115,61536,51353],{"class":1963},[115,61538,171],{"class":125},[115,61540,51358],{"class":230},[115,61542,51361],{"class":1963},[115,61544,171],{"class":125},[115,61546,51366],{"class":230},[115,61548,51297],{"class":125},[115,61550,61551,61553,61555,61557,61559,61561,61563,61565,61567],{"class":117,"line":1221},[115,61552,52134],{"class":125},[115,61554,51334],{"class":51290},[115,61556,14921],{"class":1963},[115,61558,171],{"class":125},[115,61560,51381],{"class":230},[115,61562,51361],{"class":1963},[115,61564,171],{"class":125},[115,61566,51388],{"class":230},[115,61568,51297],{"class":125},[115,61570,61571,61573,61575,61578,61580],{"class":117,"line":1312},[115,61572,52134],{"class":125},[115,61574,51397],{"class":51290},[115,61576,61577],{"class":125},">评论回车发布\u003C\u002F",[115,61579,51397],{"class":51290},[115,61581,51297],{"class":125},[115,61583,61584,61586,61588],{"class":117,"line":1318},[115,61585,52134],{"class":125},[115,61587,5127],{"class":51290},[115,61589,51297],{"class":125},[115,61591,61592,61595],{"class":117,"line":1330},[115,61593,61594],{"class":1963},"    .wrapper",[115,61596,15573],{"class":125},[115,61598,61599,61602,61604,61606,61608],{"class":117,"line":1612},[115,61600,61601],{"class":174},"      min-width",[115,61603,51427],{"class":125},[115,61605,3987],{"class":174},[115,61607,51482],{"class":121},[115,61609,1291],{"class":125},[115,61611,61612,61615,61617,61620,61622],{"class":117,"line":1617},[115,61613,61614],{"class":174},"      max-width",[115,61616,51427],{"class":125},[115,61618,61619],{"class":174},"800",[115,61621,51482],{"class":121},[115,61623,1291],{"class":125},[115,61625,61626,61628,61630,61632],{"class":117,"line":1623},[115,61627,54999],{"class":174},[115,61629,51427],{"class":125},[115,61631,51467],{"class":174},[115,61633,1291],{"class":125},[115,61635,61636,61638,61640,61642],{"class":117,"line":1628},[115,61637,55010],{"class":174},[115,61639,51427],{"class":125},[115,61641,51570],{"class":174},[115,61643,1291],{"class":125},[115,61645,61646],{"class":117,"line":1642},[115,61647,2187],{"class":125},[115,61649,61650],{"class":117,"line":1647},[115,61651,2400],{"emptyLinePlaceholder":42},[115,61653,61654,61657],{"class":117,"line":1653},[115,61655,61656],{"class":1963},"    .avatar",[115,61658,15573],{"class":125},[115,61660,61661,61663,61665,61667,61669],{"class":117,"line":1674},[115,61662,54761],{"class":174},[115,61664,51427],{"class":125},[115,61666,732],{"class":174},[115,61668,51482],{"class":121},[115,61670,1291],{"class":125},[115,61672,61673,61675,61677,61679,61681],{"class":117,"line":1679},[115,61674,54775],{"class":174},[115,61676,51427],{"class":125},[115,61678,732],{"class":174},[115,61680,51482],{"class":121},[115,61682,1291],{"class":125},[115,61684,61685,61687,61689,61691,61693],{"class":117,"line":1693},[115,61686,55124],{"class":174},[115,61688,51427],{"class":125},[115,61690,781],{"class":174},[115,61692,453],{"class":121},[115,61694,1291],{"class":125},[115,61696,61697,61700,61702,61705],{"class":117,"line":1698},[115,61698,61699],{"class":174},"      overflow",[115,61701,51427],{"class":125},[115,61703,61704],{"class":174},"hidden",[115,61706,1291],{"class":125},[115,61708,61709,61712,61714,61717,61719,61722,61724,61727,61729,61731,61734],{"class":117,"line":1727},[115,61710,61711],{"class":174},"      background",[115,61713,51427],{"class":125},[115,61715,61716],{"class":174},"url",[115,61718,126],{"class":125},[115,61720,61721],{"class":5217},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[115,61723,13715],{"class":125},[115,61725,61726],{"class":174},"no-repeat",[115,61728,17145],{"class":174},[115,61730,24979],{"class":125},[115,61732,61733],{"class":174},"cover",[115,61735,1291],{"class":125},[115,61737,61738,61741,61743,61745,61747],{"class":117,"line":1732},[115,61739,61740],{"class":174},"      margin-right",[115,61742,51427],{"class":125},[115,61744,825],{"class":174},[115,61746,51482],{"class":121},[115,61748,1291],{"class":125},[115,61750,61751],{"class":117,"line":1749},[115,61752,2187],{"class":125},[115,61754,61755],{"class":117,"line":1754},[115,61756,2400],{"emptyLinePlaceholder":42},[115,61758,61759,61761,61764],{"class":117,"line":1759},[115,61760,61594],{"class":1963},[115,61762,61763],{"class":51290}," textarea",[115,61765,15573],{"class":125},[115,61767,61768,61771,61773,61775],{"class":117,"line":1764},[115,61769,61770],{"class":174},"      outline",[115,61772,51427],{"class":125},[115,61774,54727],{"class":174},[115,61776,1291],{"class":125},[115,61778,61779,61782,61784,61787],{"class":117,"line":1778},[115,61780,61781],{"class":174},"      border-color",[115,61783,51427],{"class":125},[115,61785,61786],{"class":174},"transparent",[115,61788,1291],{"class":125},[115,61790,61791,61794,61796,61798],{"class":117,"line":1783},[115,61792,61793],{"class":174},"      resize",[115,61795,51427],{"class":125},[115,61797,54727],{"class":174},[115,61799,1291],{"class":125},[115,61801,61802,61804,61806,61809],{"class":117,"line":2577},[115,61803,61711],{"class":174},[115,61805,51427],{"class":125},[115,61807,61808],{"class":174},"#f5f5f5",[115,61810,1291],{"class":125},[115,61812,61813,61815,61817,61819,61821],{"class":117,"line":2591},[115,61814,55124],{"class":174},[115,61816,51427],{"class":125},[115,61818,418],{"class":174},[115,61820,51482],{"class":121},[115,61822,1291],{"class":125},[115,61824,61825,61828,61830,61832],{"class":117,"line":2599},[115,61826,61827],{"class":174},"      flex",[115,61829,51427],{"class":125},[115,61831,343],{"class":174},[115,61833,1291],{"class":125},[115,61835,61836,61838,61840,61842,61844],{"class":117,"line":2604},[115,61837,54685],{"class":174},[115,61839,51427],{"class":125},[115,61841,571],{"class":174},[115,61843,51482],{"class":121},[115,61845,1291],{"class":125},[115,61847,61848,61851,61853,61855,61858,61860],{"class":117,"line":2610},[115,61849,61850],{"class":174},"      transition",[115,61852,51427],{"class":125},[115,61854,28122],{"class":174},[115,61856,61857],{"class":174}," 0.5",[115,61859,820],{"class":121},[115,61861,1291],{"class":125},[115,61863,61864,61866,61868,61870,61872],{"class":117,"line":2616},[115,61865,54775],{"class":174},[115,61867,51427],{"class":125},[115,61869,1076],{"class":174},[115,61871,51482],{"class":121},[115,61873,1291],{"class":125},[115,61875,61876],{"class":117,"line":2621},[115,61877,2187],{"class":125},[115,61879,61880],{"class":117,"line":7949},[115,61881,2400],{"emptyLinePlaceholder":42},[115,61883,61884,61886,61888,61891],{"class":117,"line":7973},[115,61885,61594],{"class":1963},[115,61887,61763],{"class":51290},[115,61889,61890],{"class":1963},":focus",[115,61892,15573],{"class":125},[115,61894,61895,61897,61899,61902],{"class":117,"line":7978},[115,61896,61781],{"class":174},[115,61898,51427],{"class":125},[115,61900,61901],{"class":174},"#e4e4e4",[115,61903,1291],{"class":125},[115,61905,61906,61908,61910,61912],{"class":117,"line":7984},[115,61907,61711],{"class":174},[115,61909,51427],{"class":125},[115,61911,60832],{"class":174},[115,61913,1291],{"class":125},[115,61915,61916,61918,61920,61922,61924],{"class":117,"line":8011},[115,61917,54775],{"class":174},[115,61919,51427],{"class":125},[115,61921,781],{"class":174},[115,61923,51482],{"class":121},[115,61925,1291],{"class":125},[115,61927,61928],{"class":117,"line":8016},[115,61929,2187],{"class":125},[115,61931,61932],{"class":117,"line":8022},[115,61933,2400],{"emptyLinePlaceholder":42},[115,61935,61936,61938,61940],{"class":117,"line":8034},[115,61937,61594],{"class":1963},[115,61939,57457],{"class":51290},[115,61941,15573],{"class":125},[115,61943,61944,61946,61948,61951],{"class":117,"line":8046},[115,61945,61711],{"class":174},[115,61947,51427],{"class":125},[115,61949,61950],{"class":174},"#00aeec",[115,61952,1291],{"class":125},[115,61954,61955,61957,61959,61961],{"class":117,"line":8058},[115,61956,57406],{"class":174},[115,61958,51427],{"class":125},[115,61960,60832],{"class":174},[115,61962,1291],{"class":125},[115,61964,61965,61968,61970,61972],{"class":117,"line":9717},[115,61966,61967],{"class":174},"      border",[115,61969,51427],{"class":125},[115,61971,54727],{"class":174},[115,61973,1291],{"class":125},[115,61975,61976,61978,61980,61982,61984],{"class":117,"line":9742},[115,61977,55124],{"class":174},[115,61979,51427],{"class":125},[115,61981,418],{"class":174},[115,61983,51482],{"class":121},[115,61985,1291],{"class":125},[115,61987,61988,61991,61993,61995,61997],{"class":117,"line":9765},[115,61989,61990],{"class":174},"      margin-left",[115,61992,51427],{"class":125},[115,61994,571],{"class":174},[115,61996,51482],{"class":121},[115,61998,1291],{"class":125},[115,62000,62001,62003,62005,62007,62009],{"class":117,"line":9789},[115,62002,54761],{"class":174},[115,62004,51427],{"class":125},[115,62006,481],{"class":174},[115,62008,51482],{"class":121},[115,62010,1291],{"class":125},[115,62012,62013,62016,62018,62021],{"class":117,"line":9794},[115,62014,62015],{"class":174},"      cursor",[115,62017,51427],{"class":125},[115,62019,62020],{"class":174},"pointer",[115,62022,1291],{"class":125},[115,62024,62025],{"class":117,"line":9799},[115,62026,2187],{"class":125},[115,62028,62029],{"class":117,"line":9804},[115,62030,2400],{"emptyLinePlaceholder":42},[115,62032,62033,62035,62038],{"class":117,"line":9813},[115,62034,61594],{"class":1963},[115,62036,62037],{"class":1963}," .total",[115,62039,15573],{"class":125},[115,62041,62042,62044,62046,62048,62050],{"class":117,"line":9818},[115,62043,61740],{"class":174},[115,62045,51427],{"class":125},[115,62047,737],{"class":174},[115,62049,51482],{"class":121},[115,62051,1291],{"class":125},[115,62053,62054,62056,62058,62061],{"class":117,"line":9824},[115,62055,57406],{"class":174},[115,62057,51427],{"class":125},[115,62059,62060],{"class":174},"#999",[115,62062,1291],{"class":125},[115,62064,62065,62068,62070,62072,62074],{"class":117,"line":9845},[115,62066,62067],{"class":174},"      margin-top",[115,62069,51427],{"class":125},[115,62071,444],{"class":174},[115,62073,51482],{"class":121},[115,62075,1291],{"class":125},[115,62077,62078,62081,62083,62085],{"class":117,"line":9851},[115,62079,62080],{"class":174},"      opacity",[115,62082,51427],{"class":125},[115,62084,317],{"class":174},[115,62086,1291],{"class":125},[115,62088,62089,62091,62093,62095,62097,62099],{"class":117,"line":9865},[115,62090,61850],{"class":174},[115,62092,51427],{"class":125},[115,62094,28122],{"class":174},[115,62096,61857],{"class":174},[115,62098,820],{"class":121},[115,62100,1291],{"class":125},[115,62102,62103],{"class":117,"line":9871},[115,62104,2187],{"class":125},[115,62106,62107],{"class":117,"line":9898},[115,62108,2400],{"emptyLinePlaceholder":42},[115,62110,62111,62114],{"class":117,"line":9907},[115,62112,62113],{"class":1963},"    .list",[115,62115,15573],{"class":125},[115,62117,62118,62120,62122,62124,62126],{"class":117,"line":9913},[115,62119,61601],{"class":174},[115,62121,51427],{"class":125},[115,62123,3987],{"class":174},[115,62125,51482],{"class":121},[115,62127,1291],{"class":125},[115,62129,62130,62132,62134,62136,62138],{"class":117,"line":9921},[115,62131,61614],{"class":174},[115,62133,51427],{"class":125},[115,62135,61619],{"class":174},[115,62137,51482],{"class":121},[115,62139,1291],{"class":125},[115,62141,62142,62144,62146,62148],{"class":117,"line":9926},[115,62143,54999],{"class":174},[115,62145,51427],{"class":125},[115,62147,51467],{"class":174},[115,62149,1291],{"class":125},[115,62151,62152],{"class":117,"line":16605},[115,62153,2187],{"class":125},[115,62155,62156],{"class":117,"line":16611},[115,62157,2400],{"emptyLinePlaceholder":42},[115,62159,62160,62162,62165],{"class":117,"line":16634},[115,62161,62113],{"class":1963},[115,62163,62164],{"class":1963}," .item",[115,62166,15573],{"class":125},[115,62168,62169,62171,62173,62175,62177],{"class":117,"line":16640},[115,62170,54761],{"class":174},[115,62172,51427],{"class":125},[115,62174,436],{"class":174},[115,62176,453],{"class":121},[115,62178,1291],{"class":125},[115,62180,62181,62183,62185,62187],{"class":117,"line":16663},[115,62182,54999],{"class":174},[115,62184,51427],{"class":125},[115,62186,51467],{"class":174},[115,62188,1291],{"class":125},[115,62190,62191],{"class":117,"line":16677},[115,62192,2187],{"class":125},[115,62194,62195],{"class":117,"line":16697},[115,62196,2400],{"emptyLinePlaceholder":42},[115,62198,62199,62201,62203,62206],{"class":117,"line":16703},[115,62200,62113],{"class":1963},[115,62202,62164],{"class":1963},[115,62204,62205],{"class":1963}," .info",[115,62207,15573],{"class":125},[115,62209,62210,62212,62214,62216],{"class":117,"line":16714},[115,62211,61827],{"class":174},[115,62213,51427],{"class":125},[115,62215,343],{"class":174},[115,62217,1291],{"class":125},[115,62219,62220,62223,62225,62227,62229,62232,62235],{"class":117,"line":16737},[115,62221,62222],{"class":174},"      border-bottom",[115,62224,51427],{"class":125},[115,62226,343],{"class":174},[115,62228,51482],{"class":121},[115,62230,62231],{"class":174}," dashed",[115,62233,62234],{"class":174}," #e4e4e4",[115,62236,1291],{"class":125},[115,62238,62239,62242,62244,62246,62248],{"class":117,"line":16759},[115,62240,62241],{"class":174},"      padding-bottom",[115,62243,51427],{"class":125},[115,62245,571],{"class":174},[115,62247,51482],{"class":121},[115,62249,1291],{"class":125},[115,62251,62252],{"class":117,"line":16764},[115,62253,2187],{"class":125},[115,62255,62256],{"class":117,"line":16770},[115,62257,2400],{"emptyLinePlaceholder":42},[115,62259,62260,62262,62264,62266],{"class":117,"line":16784},[115,62261,62113],{"class":1963},[115,62263,62164],{"class":1963},[115,62265,6826],{"class":51290},[115,62267,15573],{"class":125},[115,62269,62270,62272,62274,62276],{"class":117,"line":16797},[115,62271,54696],{"class":174},[115,62273,51427],{"class":125},[115,62275,317],{"class":174},[115,62277,1291],{"class":125},[115,62279,62280],{"class":117,"line":16802},[115,62281,2187],{"class":125},[115,62283,62284],{"class":117,"line":16816},[115,62285,2400],{"emptyLinePlaceholder":42},[115,62287,62288,62290,62292,62295],{"class":117,"line":16821},[115,62289,62113],{"class":1963},[115,62291,62164],{"class":1963},[115,62293,62294],{"class":1963}," .name",[115,62296,15573],{"class":125},[115,62298,62299,62301,62303,62306],{"class":117,"line":16827},[115,62300,57406],{"class":174},[115,62302,51427],{"class":125},[115,62304,62305],{"class":174},"#FB7299",[115,62307,1291],{"class":125},[115,62309,62310,62312,62314,62316,62318],{"class":117,"line":16832},[115,62311,54912],{"class":174},[115,62313,51427],{"class":125},[115,62315,674],{"class":174},[115,62317,51482],{"class":121},[115,62319,1291],{"class":125},[115,62321,62322,62325,62327,62330],{"class":117,"line":16846},[115,62323,62324],{"class":174},"      font-weight",[115,62326,51427],{"class":125},[115,62328,62329],{"class":174},"bold",[115,62331,1291],{"class":125},[115,62333,62334],{"class":117,"line":16851},[115,62335,2187],{"class":125},[115,62337,62338],{"class":117,"line":16856},[115,62339,2400],{"emptyLinePlaceholder":42},[115,62341,62342,62344,62346,62349],{"class":117,"line":16870},[115,62343,62113],{"class":1963},[115,62345,62164],{"class":1963},[115,62347,62348],{"class":1963}," .text",[115,62350,15573],{"class":125},[115,62352,62353,62355,62357,62360],{"class":117,"line":16882},[115,62354,57406],{"class":174},[115,62356,51427],{"class":125},[115,62358,62359],{"class":174},"#333",[115,62361,1291],{"class":125},[115,62363,62364,62366,62368,62370,62372,62374],{"class":117,"line":16887},[115,62365,54685],{"class":174},[115,62367,51427],{"class":125},[115,62369,571],{"class":174},[115,62371,51482],{"class":121},[115,62373,4093],{"class":174},[115,62375,1291],{"class":125},[115,62377,62378],{"class":117,"line":16900},[115,62379,2187],{"class":125},[115,62381,62382],{"class":117,"line":16905},[115,62383,2400],{"emptyLinePlaceholder":42},[115,62385,62386,62388,62390,62393],{"class":117,"line":16910},[115,62387,62113],{"class":1963},[115,62389,62164],{"class":1963},[115,62391,62392],{"class":1963}," .time",[115,62394,15573],{"class":125},[115,62396,62397,62399,62401,62403],{"class":117,"line":16915},[115,62398,57406],{"class":174},[115,62400,51427],{"class":125},[115,62402,62060],{"class":174},[115,62404,1291],{"class":125},[115,62406,62407,62409,62411,62413,62415],{"class":117,"line":16928},[115,62408,54912],{"class":174},[115,62410,51427],{"class":125},[115,62412,623],{"class":174},[115,62414,51482],{"class":121},[115,62416,1291],{"class":125},[115,62418,62419],{"class":117,"line":16933},[115,62420,2187],{"class":125},[115,62422,62423,62425,62427],{"class":117,"line":32634},[115,62424,52407],{"class":125},[115,62426,5127],{"class":51290},[115,62428,51297],{"class":125},[115,62430,62431,62433,62435],{"class":117,"line":32640},[115,62432,51775],{"class":125},[115,62434,51324],{"class":51290},[115,62436,51297],{"class":125},[115,62438,62439],{"class":117,"line":32646},[115,62440,2400],{"emptyLinePlaceholder":42},[115,62442,62443,62445,62447],{"class":117,"line":32652},[115,62444,1035],{"class":125},[115,62446,51790],{"class":51290},[115,62448,51297],{"class":125},[115,62450,62451,62453,62455,62457,62459,62462],{"class":117,"line":32658},[115,62452,52134],{"class":125},[115,62454,51601],{"class":51290},[115,62456,53476],{"class":1963},[115,62458,171],{"class":125},[115,62460,62461],{"class":230},"\"wrapper\"",[115,62463,51297],{"class":125},[115,62465,62466,62468,62470,62472,62474,62477,62479,62481],{"class":117,"line":32669},[115,62467,51331],{"class":125},[115,62469,566],{"class":51290},[115,62471,53476],{"class":1963},[115,62473,171],{"class":125},[115,62475,62476],{"class":230},"\"avatar\"",[115,62478,55304],{"class":125},[115,62480,566],{"class":51290},[115,62482,51297],{"class":125},[115,62484,62485,62487,62489,62491,62493,62496,62498,62500,62503,62505,62507,62509,62512,62514,62517,62519,62521],{"class":117,"line":32675},[115,62486,51331],{"class":125},[115,62488,54278],{"class":51290},[115,62490,14960],{"class":1963},[115,62492,171],{"class":125},[115,62494,62495],{"class":230},"\"tx\"",[115,62497,61010],{"class":1963},[115,62499,171],{"class":125},[115,62501,62502],{"class":230},"\"发一条友善的评论\"",[115,62504,54301],{"class":1963},[115,62506,171],{"class":125},[115,62508,3701],{"class":230},[115,62510,62511],{"class":1963}," maxlength",[115,62513,171],{"class":125},[115,62515,62516],{"class":230},"\"200\"",[115,62518,55304],{"class":125},[115,62520,54278],{"class":51290},[115,62522,51297],{"class":125},[115,62524,62525,62527,62529,62532,62534],{"class":117,"line":32695},[115,62526,51331],{"class":125},[115,62528,53877],{"class":51290},[115,62530,62531],{"class":125},">发布\u003C\u002F",[115,62533,53877],{"class":51290},[115,62535,51297],{"class":125},[115,62537,62538,62540,62542],{"class":117,"line":32701},[115,62539,52407],{"class":125},[115,62541,51601],{"class":51290},[115,62543,51297],{"class":125},[115,62545,62546,62548,62550,62552,62554,62556],{"class":117,"line":32712},[115,62547,52134],{"class":125},[115,62549,51601],{"class":51290},[115,62551,53476],{"class":1963},[115,62553,171],{"class":125},[115,62555,62461],{"class":230},[115,62557,51297],{"class":125},[115,62559,62560,62562,62564,62566,62568,62571,62574,62576],{"class":117,"line":32718},[115,62561,51331],{"class":125},[115,62563,115],{"class":51290},[115,62565,53476],{"class":1963},[115,62567,171],{"class":125},[115,62569,62570],{"class":230},"\"total\"",[115,62572,62573],{"class":125},">0\u002F200字\u003C\u002F",[115,62575,115],{"class":51290},[115,62577,51297],{"class":125},[115,62579,62580,62582,62584],{"class":117,"line":32724},[115,62581,52407],{"class":125},[115,62583,51601],{"class":51290},[115,62585,51297],{"class":125},[115,62587,62588,62590,62592,62594,62596,62599],{"class":117,"line":32730},[115,62589,52134],{"class":125},[115,62591,51601],{"class":51290},[115,62593,53476],{"class":1963},[115,62595,171],{"class":125},[115,62597,62598],{"class":230},"\"list\"",[115,62600,51297],{"class":125},[115,62602,62603,62605,62607,62609,62611,62614,62617,62619,62622],{"class":117,"line":32736},[115,62604,51331],{"class":125},[115,62606,51601],{"class":51290},[115,62608,53476],{"class":1963},[115,62610,171],{"class":125},[115,62612,62613],{"class":230},"\"item\"",[115,62615,62616],{"class":1963}," style",[115,62618,171],{"class":125},[115,62620,62621],{"class":230},"\"display: none;\"",[115,62623,51297],{"class":125},[115,62625,62626,62628,62630,62632,62634,62636,62638,62640],{"class":117,"line":32742},[115,62627,55224],{"class":125},[115,62629,566],{"class":51290},[115,62631,53476],{"class":1963},[115,62633,171],{"class":125},[115,62635,62476],{"class":230},[115,62637,55304],{"class":125},[115,62639,566],{"class":51290},[115,62641,51297],{"class":125},[115,62643,62644,62646,62648,62650,62652,62655],{"class":117,"line":32748},[115,62645,55224],{"class":125},[115,62647,51601],{"class":51290},[115,62649,53476],{"class":1963},[115,62651,171],{"class":125},[115,62653,62654],{"class":230},"\"info\"",[115,62656,51297],{"class":125},[115,62658,62659,62661,62663,62665,62667,62670,62673,62675],{"class":117,"line":32754},[115,62660,55292],{"class":125},[115,62662,14],{"class":51290},[115,62664,53476],{"class":1963},[115,62666,171],{"class":125},[115,62668,62669],{"class":230},"\"name\"",[115,62671,62672],{"class":125},">清风徐来\u003C\u002F",[115,62674,14],{"class":51290},[115,62676,51297],{"class":125},[115,62678,62679,62681,62683,62685,62687,62690,62693,62695],{"class":117,"line":32774},[115,62680,55292],{"class":125},[115,62682,14],{"class":51290},[115,62684,53476],{"class":1963},[115,62686,171],{"class":125},[115,62688,62689],{"class":230},"\"text\"",[115,62691,62692],{"class":125},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[115,62694,14],{"class":51290},[115,62696,51297],{"class":125},[115,62698,62699,62701,62703,62705,62707,62710,62713,62715],{"class":117,"line":32780},[115,62700,55292],{"class":125},[115,62702,14],{"class":51290},[115,62704,53476],{"class":1963},[115,62706,171],{"class":125},[115,62708,62709],{"class":230},"\"time\"",[115,62711,62712],{"class":125},">2022-10-10 20:29:21\u003C\u002F",[115,62714,14],{"class":51290},[115,62716,51297],{"class":125},[115,62718,62719,62721,62723],{"class":117,"line":32796},[115,62720,55397],{"class":125},[115,62722,51601],{"class":51290},[115,62724,51297],{"class":125},[115,62726,62727,62729,62731],{"class":117,"line":32802},[115,62728,51766],{"class":125},[115,62730,51601],{"class":51290},[115,62732,51297],{"class":125},[115,62734,62735,62737,62739],{"class":117,"line":32816},[115,62736,52407],{"class":125},[115,62738,51601],{"class":51290},[115,62740,51297],{"class":125},[115,62742,62743,62745,62747],{"class":117,"line":32822},[115,62744,52134],{"class":125},[115,62746,51803],{"class":51290},[115,62748,51297],{"class":125},[115,62750,62751,62753,62756,62758,62760,62762,62764,62767],{"class":117,"line":32837},[115,62752,11222],{"class":121},[115,62754,62755],{"class":174}," tx",[115,62757,13565],{"class":121},[115,62759,54386],{"class":125},[115,62761,54389],{"class":1963},[115,62763,126],{"class":125},[115,62765,62766],{"class":230},"'#tx'",[115,62768,132],{"class":125},[115,62770,62771,62773,62776,62778,62780,62782,62784,62787],{"class":117,"line":32843},[115,62772,11222],{"class":121},[115,62774,62775],{"class":174}," total",[115,62777,13565],{"class":121},[115,62779,54386],{"class":125},[115,62781,54389],{"class":1963},[115,62783,126],{"class":125},[115,62785,62786],{"class":230},"'.total'",[115,62788,132],{"class":125},[115,62790,62791],{"class":117,"line":32852},[115,62792,62793],{"class":184},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[115,62795,62796,62799,62801,62803,62805,62807,62809],{"class":117,"line":32858},[115,62797,62798],{"class":125},"    tx.",[115,62800,57803],{"class":1963},[115,62802,126],{"class":125},[115,62804,61317],{"class":230},[115,62806,12436],{"class":125},[115,62808,54439],{"class":121},[115,62810,54442],{"class":125},[115,62812,62813,62816,62818],{"class":117,"line":32867},[115,62814,62815],{"class":125},"      total.style.opacity ",[115,62817,171],{"class":121},[115,62819,55689],{"class":174},[115,62821,62822],{"class":117,"line":32873},[115,62823,33462],{"class":125},[115,62825,62826],{"class":117,"line":32879},[115,62827,62828],{"class":184},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[115,62830,62831,62833,62835,62837,62839,62841,62843],{"class":117,"line":32888},[115,62832,62798],{"class":125},[115,62834,57803],{"class":1963},[115,62836,126],{"class":125},[115,62838,61378],{"class":230},[115,62840,12436],{"class":125},[115,62842,54439],{"class":121},[115,62844,54442],{"class":125},[115,62846,62847,62849,62851],{"class":117,"line":32894},[115,62848,62815],{"class":125},[115,62850,171],{"class":121},[115,62852,47334],{"class":174},[115,62854,62855],{"class":117,"line":32905},[115,62856,33462],{"class":125},[115,62858,62859],{"class":117,"line":32911},[115,62860,62861],{"class":184},"    \u002F\u002F 3. 检测用户输入\n",[115,62863,62864,62866,62868,62870,62873,62875,62877],{"class":117,"line":32930},[115,62865,62798],{"class":125},[115,62867,57803],{"class":1963},[115,62869,126],{"class":125},[115,62871,62872],{"class":230},"'input'",[115,62874,12436],{"class":125},[115,62876,54439],{"class":121},[115,62878,54442],{"class":125},[115,62880,62881],{"class":117,"line":32936},[115,62882,62883],{"class":184},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[115,62885,62886,62889,62891,62894,62897,62899,62902,62904,62906],{"class":117,"line":32947},[115,62887,62888],{"class":125},"      total.innerHTML ",[115,62890,171],{"class":121},[115,62892,62893],{"class":230}," `${",[115,62895,62896],{"class":125},"tx",[115,62898,683],{"class":230},[115,62900,62901],{"class":125},"value",[115,62903,683],{"class":230},[115,62905,51958],{"class":174},[115,62907,62908],{"class":230},"}\u002F200字`\n",[115,62910,62911],{"class":117,"line":32953},[115,62912,33462],{"class":125},[115,62914,62915],{"class":117,"line":32973},[115,62916,2400],{"emptyLinePlaceholder":42},[115,62918,62919],{"class":117,"line":32989},[115,62920,62921],{"class":184},"    \u002F\u002F const str = 'andy'\n",[115,62923,62924],{"class":117,"line":32995},[115,62925,62926],{"class":184},"    \u002F\u002F console.log(str.length)\n",[115,62928,62929,62931,62933],{"class":117,"line":33009},[115,62930,52407],{"class":125},[115,62932,51803],{"class":51290},[115,62934,51297],{"class":125},[115,62936,62937,62939,62941],{"class":117,"line":33015},[115,62938,51775],{"class":125},[115,62940,51790],{"class":51290},[115,62942,51297],{"class":125},[115,62944,62945],{"class":117,"line":33021},[115,62946,2400],{"emptyLinePlaceholder":42},[115,62948,62949,62951,62953],{"class":117,"line":33032},[115,62950,51775],{"class":125},[115,62952,50625],{"class":51290},[115,62954,51297],{"class":125},[21999,62956,62958],{"id":62957},"_3254-change事件","3.2.5.4 change事件",[14,62960,62961],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62963,62964],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62966,62967],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[106,62969,62971],{"className":50623,"code":62970,"language":50625,"meta":22,"style":22},"\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",[112,62972,62973,62983,62997,63001,63009,63023,63043,63055,63063,63067,63075,63089,63097,63115,63133,63145,63149,63157,63165,63169],{"__ignoreMap":22},[115,62974,62975,62977,62979,62981],{"class":117,"line":118},[115,62976,51287],{"class":125},[115,62978,51291],{"class":51290},[115,62980,51294],{"class":1963},[115,62982,51297],{"class":125},[115,62984,62985,62987,62989,62991,62993,62995],{"class":117,"line":37},[115,62986,1035],{"class":125},[115,62988,50625],{"class":51290},[115,62990,51306],{"class":1963},[115,62992,171],{"class":125},[115,62994,51311],{"class":230},[115,62996,51297],{"class":125},[115,62998,62999],{"class":117,"line":1180},[115,63000,2400],{"emptyLinePlaceholder":42},[115,63002,63003,63005,63007],{"class":117,"line":1195},[115,63004,1035],{"class":125},[115,63006,51324],{"class":51290},[115,63008,51297],{"class":125},[115,63010,63011,63013,63015,63017,63019,63021],{"class":117,"line":1201},[115,63012,52134],{"class":125},[115,63014,51334],{"class":51290},[115,63016,51337],{"class":1963},[115,63018,171],{"class":125},[115,63020,51342],{"class":230},[115,63022,51297],{"class":125},[115,63024,63025,63027,63029,63031,63033,63035,63037,63039,63041],{"class":117,"line":1215},[115,63026,52134],{"class":125},[115,63028,51334],{"class":51290},[115,63030,14921],{"class":1963},[115,63032,171],{"class":125},[115,63034,51381],{"class":230},[115,63036,51361],{"class":1963},[115,63038,171],{"class":125},[115,63040,51388],{"class":230},[115,63042,51297],{"class":125},[115,63044,63045,63047,63049,63051,63053],{"class":117,"line":1221},[115,63046,52134],{"class":125},[115,63048,51397],{"class":51290},[115,63050,51400],{"class":125},[115,63052,51397],{"class":51290},[115,63054,51297],{"class":125},[115,63056,63057,63059,63061],{"class":117,"line":1312},[115,63058,51775],{"class":125},[115,63060,51324],{"class":51290},[115,63062,51297],{"class":125},[115,63064,63065],{"class":117,"line":1318},[115,63066,2400],{"emptyLinePlaceholder":42},[115,63068,63069,63071,63073],{"class":117,"line":1330},[115,63070,1035],{"class":125},[115,63072,51790],{"class":51290},[115,63074,51297],{"class":125},[115,63076,63077,63079,63081,63083,63085,63087],{"class":117,"line":1612},[115,63078,52134],{"class":125},[115,63080,53811],{"class":51290},[115,63082,53814],{"class":1963},[115,63084,171],{"class":125},[115,63086,62689],{"class":230},[115,63088,51297],{"class":125},[115,63090,63091,63093,63095],{"class":117,"line":1617},[115,63092,52134],{"class":125},[115,63094,51803],{"class":51290},[115,63096,51297],{"class":125},[115,63098,63099,63101,63103,63105,63107,63109,63111,63113],{"class":117,"line":1623},[115,63100,11222],{"class":121},[115,63102,60595],{"class":174},[115,63104,13565],{"class":121},[115,63106,54386],{"class":125},[115,63108,54389],{"class":1963},[115,63110,126],{"class":125},[115,63112,62872],{"class":230},[115,63114,132],{"class":125},[115,63116,63117,63120,63122,63124,63127,63129,63131],{"class":117,"line":1628},[115,63118,63119],{"class":125},"    input.",[115,63121,57803],{"class":1963},[115,63123,126],{"class":125},[115,63125,63126],{"class":230},"'change'",[115,63128,12436],{"class":125},[115,63130,54439],{"class":121},[115,63132,54442],{"class":125},[115,63134,63135,63137,63139,63141,63143],{"class":117,"line":1642},[115,63136,58234],{"class":125},[115,63138,58237],{"class":1963},[115,63140,126],{"class":125},[115,63142,718],{"class":174},[115,63144,132],{"class":125},[115,63146,63147],{"class":117,"line":1647},[115,63148,33462],{"class":125},[115,63150,63151,63153,63155],{"class":117,"line":1653},[115,63152,52407],{"class":125},[115,63154,51803],{"class":51290},[115,63156,51297],{"class":125},[115,63158,63159,63161,63163],{"class":117,"line":1674},[115,63160,51775],{"class":125},[115,63162,51790],{"class":51290},[115,63164,51297],{"class":125},[115,63166,63167],{"class":117,"line":1679},[115,63168,2400],{"emptyLinePlaceholder":42},[115,63170,63171,63173,63175],{"class":117,"line":1693},[115,63172,51775],{"class":125},[115,63174,50625],{"class":51290},[115,63176,51297],{"class":125},[14,63178,63179],{},"总结：内容发生改变才回去触发",[86,63181,63183],{"id":63182},"_326-事件对象","3.2.6 事件对象",[21999,63185,63187],{"id":63186},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63189,63190],{},[20,63191],{"alt":22,"src":63192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63194,63195],{},[20,63196],{"alt":22,"src":63197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63199,63200],{},"点击一次，就输出了事件对象，它是个对象",[14,63202,63203],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63205,63206],{},[20,63207],{"alt":22,"src":63208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21999,63210,63212],{"id":63211},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63214,63215],{},[20,63216],{"alt":22,"src":63217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63219,63220],{},"实现按特殊字符才是实现打印输出效果：",[106,63222,63224],{"className":53057,"code":63223,"language":53059,"meta":22,"style":22},"\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",[112,63225,63226,63234,63239,63253,63261,63266,63271,63276,63281,63286,63291,63296,63301,63306,63310,63314,63322],{"__ignoreMap":22},[115,63227,63228,63230,63232],{"class":117,"line":118},[115,63229,1035],{"class":125},[115,63231,51790],{"class":51290},[115,63233,51297],{"class":125},[115,63235,63236],{"class":117,"line":37},[115,63237,63238],{"class":184},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[115,63240,63241,63243,63245,63247,63249,63251],{"class":117,"line":1180},[115,63242,52134],{"class":125},[115,63244,53811],{"class":51290},[115,63246,53814],{"class":1963},[115,63248,171],{"class":125},[115,63250,62689],{"class":230},[115,63252,51297],{"class":125},[115,63254,63255,63257,63259],{"class":117,"line":1195},[115,63256,52134],{"class":125},[115,63258,51803],{"class":51290},[115,63260,51297],{"class":125},[115,63262,63263],{"class":117,"line":1201},[115,63264,63265],{"class":125},"    \u002F\u002F const btn = document.querySelector('button')\n",[115,63267,63268],{"class":117,"line":1215},[115,63269,63270],{"class":125},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[115,63272,63273],{"class":117,"line":1221},[115,63274,63275],{"class":125},"    \u002F\u002F   console.log(e);\n",[115,63277,63278],{"class":117,"line":1312},[115,63279,63280],{"class":125},"    \u002F\u002F })\n",[115,63282,63283],{"class":117,"line":1318},[115,63284,63285],{"class":125},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[115,63287,63288],{"class":117,"line":1330},[115,63289,63290],{"class":125},"    const input = document.querySelector('input')\n",[115,63292,63293],{"class":117,"line":1612},[115,63294,63295],{"class":125},"    input.addEventListener('keyup', function (e) {\n",[115,63297,63298],{"class":117,"line":1617},[115,63299,63300],{"class":125},"      if (e.key === 'Enter') {\n",[115,63302,63303],{"class":117,"line":1623},[115,63304,63305],{"class":125},"        console.log('我按下了回车键')\n",[115,63307,63308],{"class":117,"line":1628},[115,63309,52388],{"class":125},[115,63311,63312],{"class":117,"line":1642},[115,63313,33462],{"class":125},[115,63315,63316,63318,63320],{"class":117,"line":1647},[115,63317,52407],{"class":125},[115,63319,51803],{"class":51290},[115,63321,51297],{"class":125},[115,63323,63324,63326,63328],{"class":117,"line":1653},[115,63325,51775],{"class":125},[115,63327,51790],{"class":51290},[115,63329,51297],{"class":125},[21999,63331,63333],{"id":63332},"_3263-trim方法","3.2.6.3 trim方法",[14,63335,63336],{},[20,63337],{"alt":22,"src":63338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63340,63341],{},[20,63342],{"alt":22,"src":63343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63345,63346],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63348,63349],{},"str.trim()",[86,63351,63353],{"id":63352},"_327-环境对象","3.2.7 环境对象",[14,63355,63356],{},[20,63357],{"alt":22,"src":63358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63360,63361],{},[20,63362],{"alt":22,"src":63363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63365,63366],{},[20,63367],{"alt":22,"src":63368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63370,63371],{},"实际函数调用是window.fn()",[14,63373,63374],{},"普通函数里面this指向的是window",[1132,63376,63377,63380,63383],{},[72,63378,63379],{},"在普通函数下，this指向的是window",[72,63381,63382],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[72,63384,63385],{},"箭头函数没有this",[14,63387,63388],{},"粗略记法就是：谁调用，this就指向谁",[14,63390,63391],{},[20,63392],{"alt":22,"src":63393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63395,63396],{},[20,63397],{"alt":22,"src":63398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63400,63401],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63403,63404],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[106,63406,63408],{"className":53057,"code":63407,"language":53059,"meta":22,"style":22},"\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",[112,63409,63410,63418,63430,63438,63443,63448,63453,63458,63462,63470],{"__ignoreMap":22},[115,63411,63412,63414,63416],{"class":117,"line":118},[115,63413,1035],{"class":125},[115,63415,51790],{"class":51290},[115,63417,51297],{"class":125},[115,63419,63420,63422,63424,63426,63428],{"class":117,"line":37},[115,63421,52134],{"class":125},[115,63423,53877],{"class":51290},[115,63425,53883],{"class":125},[115,63427,53877],{"class":51290},[115,63429,51297],{"class":125},[115,63431,63432,63434,63436],{"class":117,"line":1180},[115,63433,52134],{"class":125},[115,63435,51803],{"class":51290},[115,63437,51297],{"class":125},[115,63439,63440],{"class":117,"line":1195},[115,63441,63442],{"class":125},"    const button = document.querySelector('button')\n",[115,63444,63445],{"class":117,"line":1201},[115,63446,63447],{"class":125},"    button.addEventListener('click', function () {\n",[115,63449,63450],{"class":117,"line":1215},[115,63451,63452],{"class":125},"      \u002F\u002F console.log(this);\n",[115,63454,63455],{"class":117,"line":1221},[115,63456,63457],{"class":125},"      this.style.color = 'pink'\n",[115,63459,63460],{"class":117,"line":1312},[115,63461,33462],{"class":125},[115,63463,63464,63466,63468],{"class":117,"line":1318},[115,63465,52407],{"class":125},[115,63467,51803],{"class":51290},[115,63469,51297],{"class":125},[115,63471,63472,63474,63476],{"class":117,"line":1330},[115,63473,51775],{"class":125},[115,63475,51790],{"class":51290},[115,63477,51297],{"class":125},[86,63479,63481],{"id":63480},"_328-回调函数","3.2.8 回调函数",[14,63483,63484],{},[20,63485],{"alt":22,"src":63486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63488,63489],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63491,11333],{},[1132,63493,63494,63497,63500],{},[72,63495,63496],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[72,63498,63499],{},"回调函数本质还是函数，只不过把它当成参数使用",[72,63501,63502],{},"使用匿名函数做为回调函数比较常见",[86,63504,63506],{"id":63505},"_329-tab栏切换","3.2.9 tab栏切换",[14,63508,63509],{},[20,63510],{"alt":22,"src":63511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[106,63513,63515],{"className":50623,"code":63514,"language":50625,"meta":22,"style":22},"\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",[112,63516,63517,63527,63541,63545,63553,63567,63587,63607,63620,63628,63634,63644,63654,63658,63662,63669,63682,63695,63707,63723,63727,63731,63738,63750,63762,63774,63784,63794,63798,63802,63811,63823,63834,63846,63850,63854,63862,63872,63882,63892,63896,63900,63910,63924,63936,63940,63944,63956,63967,63984,63994,63998,64002,64017,64028,64038,64042,64046,64053,64068,64072,64076,64084,64094,64098,64102,64111,64121,64125,64133,64141,64145,64153,64168,64183,64196,64204,64238,64265,64292,64319,64346,64354,64362,64377,64414,64449,64484,64519,64554,64562,64570,64578,64583,64588,64608,64613,64642,64647,64652,64670,64675,64680,64685,64707,64712,64728,64732,64737,64742,64763,64768,64797,64801,64806,64810,64818,64826,64830],{"__ignoreMap":22},[115,63518,63519,63521,63523,63525],{"class":117,"line":118},[115,63520,51287],{"class":125},[115,63522,51291],{"class":51290},[115,63524,51294],{"class":1963},[115,63526,51297],{"class":125},[115,63528,63529,63531,63533,63535,63537,63539],{"class":117,"line":37},[115,63530,1035],{"class":125},[115,63532,50625],{"class":51290},[115,63534,51306],{"class":1963},[115,63536,171],{"class":125},[115,63538,51311],{"class":230},[115,63540,51297],{"class":125},[115,63542,63543],{"class":117,"line":1180},[115,63544,2400],{"emptyLinePlaceholder":42},[115,63546,63547,63549,63551],{"class":117,"line":1195},[115,63548,1035],{"class":125},[115,63550,51324],{"class":51290},[115,63552,51297],{"class":125},[115,63554,63555,63557,63559,63561,63563,63565],{"class":117,"line":1201},[115,63556,52134],{"class":125},[115,63558,51334],{"class":51290},[115,63560,51337],{"class":1963},[115,63562,171],{"class":125},[115,63564,51342],{"class":230},[115,63566,59117],{"class":125},[115,63568,63569,63571,63573,63575,63577,63579,63581,63583,63585],{"class":117,"line":1215},[115,63570,52134],{"class":125},[115,63572,51334],{"class":51290},[115,63574,51353],{"class":1963},[115,63576,171],{"class":125},[115,63578,51358],{"class":230},[115,63580,51361],{"class":1963},[115,63582,171],{"class":125},[115,63584,51366],{"class":230},[115,63586,59117],{"class":125},[115,63588,63589,63591,63593,63595,63597,63599,63601,63603,63605],{"class":117,"line":1221},[115,63590,52134],{"class":125},[115,63592,51334],{"class":51290},[115,63594,14921],{"class":1963},[115,63596,171],{"class":125},[115,63598,51381],{"class":230},[115,63600,51361],{"class":1963},[115,63602,171],{"class":125},[115,63604,51388],{"class":230},[115,63606,59117],{"class":125},[115,63608,63609,63611,63613,63616,63618],{"class":117,"line":1312},[115,63610,52134],{"class":125},[115,63612,51397],{"class":51290},[115,63614,63615],{"class":125},">tab栏切换\u003C\u002F",[115,63617,51397],{"class":51290},[115,63619,51297],{"class":125},[115,63621,63622,63624,63626],{"class":117,"line":1318},[115,63623,52134],{"class":125},[115,63625,5127],{"class":51290},[115,63627,51297],{"class":125},[115,63629,63630,63632],{"class":117,"line":1330},[115,63631,6404],{"class":51290},[115,63633,15573],{"class":125},[115,63635,63636,63638,63640,63642],{"class":117,"line":1612},[115,63637,54696],{"class":174},[115,63639,51427],{"class":125},[115,63641,317],{"class":174},[115,63643,1291],{"class":125},[115,63645,63646,63648,63650,63652],{"class":117,"line":1617},[115,63647,54685],{"class":174},[115,63649,51427],{"class":125},[115,63651,317],{"class":174},[115,63653,1291],{"class":125},[115,63655,63656],{"class":117,"line":1623},[115,63657,2187],{"class":125},[115,63659,63660],{"class":117,"line":1628},[115,63661,2400],{"emptyLinePlaceholder":42},[115,63663,63664,63667],{"class":117,"line":1642},[115,63665,63666],{"class":1963},"    .tab",[115,63668,15573],{"class":125},[115,63670,63671,63673,63675,63678,63680],{"class":117,"line":1647},[115,63672,54761],{"class":174},[115,63674,51427],{"class":125},[115,63676,63677],{"class":174},"590",[115,63679,51482],{"class":121},[115,63681,1291],{"class":125},[115,63683,63684,63686,63688,63691,63693],{"class":117,"line":1653},[115,63685,54775],{"class":174},[115,63687,51427],{"class":125},[115,63689,63690],{"class":174},"340",[115,63692,51482],{"class":121},[115,63694,1291],{"class":125},[115,63696,63697,63699,63701,63703,63705],{"class":117,"line":1674},[115,63698,54696],{"class":174},[115,63700,51427],{"class":125},[115,63702,825],{"class":174},[115,63704,51482],{"class":121},[115,63706,1291],{"class":125},[115,63708,63709,63711,63713,63715,63717,63719,63721],{"class":117,"line":1679},[115,63710,61967],{"class":174},[115,63712,51427],{"class":125},[115,63714,343],{"class":174},[115,63716,51482],{"class":121},[115,63718,51511],{"class":174},[115,63720,62234],{"class":174},[115,63722,1291],{"class":125},[115,63724,63725],{"class":117,"line":1693},[115,63726,2187],{"class":125},[115,63728,63729],{"class":117,"line":1698},[115,63730,2400],{"emptyLinePlaceholder":42},[115,63732,63733,63736],{"class":117,"line":1727},[115,63734,63735],{"class":1963},"    .tab-nav",[115,63737,15573],{"class":125},[115,63739,63740,63742,63744,63746,63748],{"class":117,"line":1732},[115,63741,54761],{"class":174},[115,63743,51427],{"class":125},[115,63745,436],{"class":174},[115,63747,453],{"class":121},[115,63749,1291],{"class":125},[115,63751,63752,63754,63756,63758,63760],{"class":117,"line":1749},[115,63753,54775],{"class":174},[115,63755,51427],{"class":125},[115,63757,1032],{"class":174},[115,63759,51482],{"class":121},[115,63761,1291],{"class":125},[115,63763,63764,63766,63768,63770,63772],{"class":117,"line":1754},[115,63765,57349],{"class":174},[115,63767,51427],{"class":125},[115,63769,1032],{"class":174},[115,63771,51482],{"class":121},[115,63773,1291],{"class":125},[115,63775,63776,63778,63780,63782],{"class":117,"line":1759},[115,63777,54999],{"class":174},[115,63779,51427],{"class":125},[115,63781,51467],{"class":174},[115,63783,1291],{"class":125},[115,63785,63786,63788,63790,63792],{"class":117,"line":1764},[115,63787,55010],{"class":174},[115,63789,51427],{"class":125},[115,63791,51658],{"class":174},[115,63793,1291],{"class":125},[115,63795,63796],{"class":117,"line":1778},[115,63797,2187],{"class":125},[115,63799,63800],{"class":117,"line":1783},[115,63801,2400],{"emptyLinePlaceholder":42},[115,63803,63804,63806,63809],{"class":117,"line":2577},[115,63805,63735],{"class":1963},[115,63807,63808],{"class":51290}," h3",[115,63810,15573],{"class":125},[115,63812,63813,63815,63817,63819,63821],{"class":117,"line":2591},[115,63814,54912],{"class":174},[115,63816,51427],{"class":125},[115,63818,925],{"class":174},[115,63820,51482],{"class":121},[115,63822,1291],{"class":125},[115,63824,63825,63827,63829,63832],{"class":117,"line":2599},[115,63826,62324],{"class":174},[115,63828,51427],{"class":125},[115,63830,63831],{"class":174},"normal",[115,63833,1291],{"class":125},[115,63835,63836,63838,63840,63842,63844],{"class":117,"line":2604},[115,63837,61990],{"class":174},[115,63839,51427],{"class":125},[115,63841,825],{"class":174},[115,63843,51482],{"class":121},[115,63845,1291],{"class":125},[115,63847,63848],{"class":117,"line":2610},[115,63849,2187],{"class":125},[115,63851,63852],{"class":117,"line":2616},[115,63853,2400],{"emptyLinePlaceholder":42},[115,63855,63856,63858,63860],{"class":117,"line":2621},[115,63857,63735],{"class":1963},[115,63859,61282],{"class":51290},[115,63861,15573],{"class":125},[115,63863,63864,63866,63868,63870],{"class":117,"line":7949},[115,63865,54722],{"class":174},[115,63867,51427],{"class":125},[115,63869,54727],{"class":174},[115,63871,1291],{"class":125},[115,63873,63874,63876,63878,63880],{"class":117,"line":7973},[115,63875,54999],{"class":174},[115,63877,51427],{"class":125},[115,63879,51467],{"class":174},[115,63881,1291],{"class":125},[115,63883,63884,63886,63888,63890],{"class":117,"line":7978},[115,63885,55010],{"class":174},[115,63887,51427],{"class":125},[115,63889,51570],{"class":174},[115,63891,1291],{"class":125},[115,63893,63894],{"class":117,"line":7984},[115,63895,2187],{"class":125},[115,63897,63898],{"class":117,"line":8011},[115,63899,2400],{"emptyLinePlaceholder":42},[115,63901,63902,63904,63906,63908],{"class":117,"line":8016},[115,63903,63735],{"class":1963},[115,63905,61282],{"class":51290},[115,63907,55065],{"class":51290},[115,63909,15573],{"class":125},[115,63911,63912,63914,63916,63918,63920,63922],{"class":117,"line":8022},[115,63913,54696],{"class":174},[115,63915,51427],{"class":125},[115,63917,317],{"class":174},[115,63919,8951],{"class":174},[115,63921,51482],{"class":121},[115,63923,1291],{"class":125},[115,63925,63926,63928,63930,63932,63934],{"class":117,"line":8034},[115,63927,54912],{"class":174},[115,63929,51427],{"class":125},[115,63931,674],{"class":174},[115,63933,51482],{"class":121},[115,63935,1291],{"class":125},[115,63937,63938],{"class":117,"line":8046},[115,63939,2187],{"class":125},[115,63941,63942],{"class":117,"line":8058},[115,63943,2400],{"emptyLinePlaceholder":42},[115,63945,63946,63948,63950,63952,63954],{"class":117,"line":9717},[115,63947,63735],{"class":1963},[115,63949,61282],{"class":51290},[115,63951,55065],{"class":51290},[115,63953,1399],{"class":51290},[115,63955,15573],{"class":125},[115,63957,63958,63961,63963,63965],{"class":117,"line":9742},[115,63959,63960],{"class":174},"      text-decoration",[115,63962,51427],{"class":125},[115,63964,54727],{"class":174},[115,63966,1291],{"class":125},[115,63968,63969,63971,63973,63975,63977,63979,63982],{"class":117,"line":9765},[115,63970,62222],{"class":174},[115,63972,51427],{"class":125},[115,63974,203],{"class":174},[115,63976,51482],{"class":121},[115,63978,51511],{"class":174},[115,63980,63981],{"class":174}," transparent",[115,63983,1291],{"class":125},[115,63985,63986,63988,63990,63992],{"class":117,"line":9789},[115,63987,57406],{"class":174},[115,63989,51427],{"class":125},[115,63991,62359],{"class":174},[115,63993,1291],{"class":125},[115,63995,63996],{"class":117,"line":9794},[115,63997,2187],{"class":125},[115,63999,64000],{"class":117,"line":9799},[115,64001,2400],{"emptyLinePlaceholder":42},[115,64003,64004,64006,64008,64010,64012,64015],{"class":117,"line":9804},[115,64005,63735],{"class":1963},[115,64007,61282],{"class":51290},[115,64009,55065],{"class":51290},[115,64011,1399],{"class":51290},[115,64013,64014],{"class":1963},".active",[115,64016,15573],{"class":125},[115,64018,64019,64021,64023,64026],{"class":117,"line":9813},[115,64020,61781],{"class":174},[115,64022,51427],{"class":125},[115,64024,64025],{"class":174},"#e1251b",[115,64027,1291],{"class":125},[115,64029,64030,64032,64034,64036],{"class":117,"line":9818},[115,64031,57406],{"class":174},[115,64033,51427],{"class":125},[115,64035,64025],{"class":174},[115,64037,1291],{"class":125},[115,64039,64040],{"class":117,"line":9824},[115,64041,2187],{"class":125},[115,64043,64044],{"class":117,"line":9845},[115,64045,2400],{"emptyLinePlaceholder":42},[115,64047,64048,64051],{"class":117,"line":9851},[115,64049,64050],{"class":1963},"    .tab-content",[115,64052,15573],{"class":125},[115,64054,64055,64057,64059,64061,64064,64066],{"class":117,"line":9865},[115,64056,54685],{"class":174},[115,64058,51427],{"class":125},[115,64060,317],{"class":174},[115,64062,64063],{"class":174}," 16",[115,64065,51482],{"class":121},[115,64067,1291],{"class":125},[115,64069,64070],{"class":117,"line":9871},[115,64071,2187],{"class":125},[115,64073,64074],{"class":117,"line":9898},[115,64075,2400],{"emptyLinePlaceholder":42},[115,64077,64078,64080,64082],{"class":117,"line":9907},[115,64079,64050],{"class":1963},[115,64081,62164],{"class":1963},[115,64083,15573],{"class":125},[115,64085,64086,64088,64090,64092],{"class":117,"line":9913},[115,64087,54999],{"class":174},[115,64089,51427],{"class":125},[115,64091,54727],{"class":174},[115,64093,1291],{"class":125},[115,64095,64096],{"class":117,"line":9921},[115,64097,2187],{"class":125},[115,64099,64100],{"class":117,"line":9926},[115,64101,2400],{"emptyLinePlaceholder":42},[115,64103,64104,64106,64109],{"class":117,"line":16605},[115,64105,64050],{"class":1963},[115,64107,64108],{"class":1963}," .item.active",[115,64110,15573],{"class":125},[115,64112,64113,64115,64117,64119],{"class":117,"line":16611},[115,64114,54999],{"class":174},[115,64116,51427],{"class":125},[115,64118,60859],{"class":174},[115,64120,1291],{"class":125},[115,64122,64123],{"class":117,"line":16634},[115,64124,2187],{"class":125},[115,64126,64127,64129,64131],{"class":117,"line":16640},[115,64128,52407],{"class":125},[115,64130,5127],{"class":51290},[115,64132,51297],{"class":125},[115,64134,64135,64137,64139],{"class":117,"line":16663},[115,64136,51775],{"class":125},[115,64138,51324],{"class":51290},[115,64140,51297],{"class":125},[115,64142,64143],{"class":117,"line":16677},[115,64144,2400],{"emptyLinePlaceholder":42},[115,64146,64147,64149,64151],{"class":117,"line":16697},[115,64148,1035],{"class":125},[115,64150,51790],{"class":51290},[115,64152,51297],{"class":125},[115,64154,64155,64157,64159,64161,64163,64166],{"class":117,"line":16703},[115,64156,52134],{"class":125},[115,64158,51601],{"class":51290},[115,64160,53476],{"class":1963},[115,64162,171],{"class":125},[115,64164,64165],{"class":230},"\"tab\"",[115,64167,51297],{"class":125},[115,64169,64170,64172,64174,64176,64178,64181],{"class":117,"line":16714},[115,64171,51331],{"class":125},[115,64173,51601],{"class":51290},[115,64175,53476],{"class":1963},[115,64177,171],{"class":125},[115,64179,64180],{"class":230},"\"tab-nav\"",[115,64182,51297],{"class":125},[115,64184,64185,64187,64189,64192,64194],{"class":117,"line":16737},[115,64186,55224],{"class":125},[115,64188,86],{"class":51290},[115,64190,64191],{"class":125},">每日特价\u003C\u002F",[115,64193,86],{"class":51290},[115,64195,51297],{"class":125},[115,64197,64198,64200,64202],{"class":117,"line":16759},[115,64199,55224],{"class":125},[115,64201,1132],{"class":51290},[115,64203,51297],{"class":125},[115,64205,64206,64208,64210,64212,64214,64216,64218,64220,64222,64224,64227,64230,64232,64234,64236],{"class":117,"line":16764},[115,64207,55292],{"class":125},[115,64209,72],{"class":51290},[115,64211,61042],{"class":125},[115,64213,27],{"class":51290},[115,64215,53476],{"class":1963},[115,64217,171],{"class":125},[115,64219,59696],{"class":230},[115,64221,61047],{"class":1963},[115,64223,171],{"class":125},[115,64225,64226],{"class":230},"\"javascript:;\"",[115,64228,64229],{"class":125},">精选\u003C\u002F",[115,64231,27],{"class":51290},[115,64233,55304],{"class":125},[115,64235,72],{"class":51290},[115,64237,51297],{"class":125},[115,64239,64240,64242,64244,64246,64248,64250,64252,64254,64257,64259,64261,64263],{"class":117,"line":16770},[115,64241,55292],{"class":125},[115,64243,72],{"class":51290},[115,64245,61042],{"class":125},[115,64247,27],{"class":51290},[115,64249,61047],{"class":1963},[115,64251,171],{"class":125},[115,64253,64226],{"class":230},[115,64255,64256],{"class":125},">美食\u003C\u002F",[115,64258,27],{"class":51290},[115,64260,55304],{"class":125},[115,64262,72],{"class":51290},[115,64264,51297],{"class":125},[115,64266,64267,64269,64271,64273,64275,64277,64279,64281,64284,64286,64288,64290],{"class":117,"line":16784},[115,64268,55292],{"class":125},[115,64270,72],{"class":51290},[115,64272,61042],{"class":125},[115,64274,27],{"class":51290},[115,64276,61047],{"class":1963},[115,64278,171],{"class":125},[115,64280,64226],{"class":230},[115,64282,64283],{"class":125},">百货\u003C\u002F",[115,64285,27],{"class":51290},[115,64287,55304],{"class":125},[115,64289,72],{"class":51290},[115,64291,51297],{"class":125},[115,64293,64294,64296,64298,64300,64302,64304,64306,64308,64311,64313,64315,64317],{"class":117,"line":16797},[115,64295,55292],{"class":125},[115,64297,72],{"class":51290},[115,64299,61042],{"class":125},[115,64301,27],{"class":51290},[115,64303,61047],{"class":1963},[115,64305,171],{"class":125},[115,64307,64226],{"class":230},[115,64309,64310],{"class":125},">个护\u003C\u002F",[115,64312,27],{"class":51290},[115,64314,55304],{"class":125},[115,64316,72],{"class":51290},[115,64318,51297],{"class":125},[115,64320,64321,64323,64325,64327,64329,64331,64333,64335,64338,64340,64342,64344],{"class":117,"line":16802},[115,64322,55292],{"class":125},[115,64324,72],{"class":51290},[115,64326,61042],{"class":125},[115,64328,27],{"class":51290},[115,64330,61047],{"class":1963},[115,64332,171],{"class":125},[115,64334,64226],{"class":230},[115,64336,64337],{"class":125},">预告\u003C\u002F",[115,64339,27],{"class":51290},[115,64341,55304],{"class":125},[115,64343,72],{"class":51290},[115,64345,51297],{"class":125},[115,64347,64348,64350,64352],{"class":117,"line":16816},[115,64349,55397],{"class":125},[115,64351,1132],{"class":51290},[115,64353,51297],{"class":125},[115,64355,64356,64358,64360],{"class":117,"line":16821},[115,64357,51766],{"class":125},[115,64359,51601],{"class":51290},[115,64361,51297],{"class":125},[115,64363,64364,64366,64368,64370,64372,64375],{"class":117,"line":16827},[115,64365,51331],{"class":125},[115,64367,51601],{"class":51290},[115,64369,53476],{"class":1963},[115,64371,171],{"class":125},[115,64373,64374],{"class":230},"\"tab-content\"",[115,64376,51297],{"class":125},[115,64378,64379,64381,64383,64385,64387,64390,64392,64394,64396,64398,64401,64403,64405,64407,64410,64412],{"class":117,"line":16832},[115,64380,55224],{"class":125},[115,64382,51601],{"class":51290},[115,64384,53476],{"class":1963},[115,64386,171],{"class":125},[115,64388,64389],{"class":230},"\"item active\"",[115,64391,61042],{"class":125},[115,64393,20],{"class":51290},[115,64395,55229],{"class":1963},[115,64397,171],{"class":125},[115,64399,64400],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[115,64402,55237],{"class":1963},[115,64404,171],{"class":125},[115,64406,7653],{"class":230},[115,64408,64409],{"class":125}," \u002F>\u003C\u002F",[115,64411,51601],{"class":51290},[115,64413,51297],{"class":125},[115,64415,64416,64418,64420,64422,64424,64426,64428,64430,64432,64434,64437,64439,64441,64443,64445,64447],{"class":117,"line":16846},[115,64417,55224],{"class":125},[115,64419,51601],{"class":51290},[115,64421,53476],{"class":1963},[115,64423,171],{"class":125},[115,64425,62613],{"class":230},[115,64427,61042],{"class":125},[115,64429,20],{"class":51290},[115,64431,55229],{"class":1963},[115,64433,171],{"class":125},[115,64435,64436],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[115,64438,55237],{"class":1963},[115,64440,171],{"class":125},[115,64442,7653],{"class":230},[115,64444,64409],{"class":125},[115,64446,51601],{"class":51290},[115,64448,51297],{"class":125},[115,64450,64451,64453,64455,64457,64459,64461,64463,64465,64467,64469,64472,64474,64476,64478,64480,64482],{"class":117,"line":16851},[115,64452,55224],{"class":125},[115,64454,51601],{"class":51290},[115,64456,53476],{"class":1963},[115,64458,171],{"class":125},[115,64460,62613],{"class":230},[115,64462,61042],{"class":125},[115,64464,20],{"class":51290},[115,64466,55229],{"class":1963},[115,64468,171],{"class":125},[115,64470,64471],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[115,64473,55237],{"class":1963},[115,64475,171],{"class":125},[115,64477,7653],{"class":230},[115,64479,64409],{"class":125},[115,64481,51601],{"class":51290},[115,64483,51297],{"class":125},[115,64485,64486,64488,64490,64492,64494,64496,64498,64500,64502,64504,64507,64509,64511,64513,64515,64517],{"class":117,"line":16856},[115,64487,55224],{"class":125},[115,64489,51601],{"class":51290},[115,64491,53476],{"class":1963},[115,64493,171],{"class":125},[115,64495,62613],{"class":230},[115,64497,61042],{"class":125},[115,64499,20],{"class":51290},[115,64501,55229],{"class":1963},[115,64503,171],{"class":125},[115,64505,64506],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[115,64508,55237],{"class":1963},[115,64510,171],{"class":125},[115,64512,7653],{"class":230},[115,64514,64409],{"class":125},[115,64516,51601],{"class":51290},[115,64518,51297],{"class":125},[115,64520,64521,64523,64525,64527,64529,64531,64533,64535,64537,64539,64542,64544,64546,64548,64550,64552],{"class":117,"line":16870},[115,64522,55224],{"class":125},[115,64524,51601],{"class":51290},[115,64526,53476],{"class":1963},[115,64528,171],{"class":125},[115,64530,62613],{"class":230},[115,64532,61042],{"class":125},[115,64534,20],{"class":51290},[115,64536,55229],{"class":1963},[115,64538,171],{"class":125},[115,64540,64541],{"class":230},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[115,64543,55237],{"class":1963},[115,64545,171],{"class":125},[115,64547,7653],{"class":230},[115,64549,64409],{"class":125},[115,64551,51601],{"class":51290},[115,64553,51297],{"class":125},[115,64555,64556,64558,64560],{"class":117,"line":16882},[115,64557,51766],{"class":125},[115,64559,51601],{"class":51290},[115,64561,51297],{"class":125},[115,64563,64564,64566,64568],{"class":117,"line":16887},[115,64565,52407],{"class":125},[115,64567,51601],{"class":51290},[115,64569,51297],{"class":125},[115,64571,64572,64574,64576],{"class":117,"line":16900},[115,64573,52134],{"class":125},[115,64575,51803],{"class":51290},[115,64577,51297],{"class":125},[115,64579,64580],{"class":117,"line":16905},[115,64581,64582],{"class":184},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[115,64584,64585],{"class":117,"line":16910},[115,64586,64587],{"class":184},"    \u002F\u002F 1.1 获取 a 元素 \n",[115,64589,64590,64592,64595,64597,64599,64601,64603,64606],{"class":117,"line":16915},[115,64591,11222],{"class":121},[115,64593,64594],{"class":174}," as",[115,64596,13565],{"class":121},[115,64598,54386],{"class":125},[115,64600,55671],{"class":1963},[115,64602,126],{"class":125},[115,64604,64605],{"class":230},"'.tab-nav a'",[115,64607,132],{"class":125},[115,64609,64610],{"class":117,"line":16928},[115,64611,64612],{"class":184},"    \u002F\u002F console.log(as) \n",[115,64614,64615,64617,64619,64621,64623,64625,64627,64629,64631,64634,64636,64638,64640],{"class":117,"line":16933},[115,64616,3201],{"class":121},[115,64618,1658],{"class":125},[115,64620,51837],{"class":121},[115,64622,9439],{"class":125},[115,64624,171],{"class":121},[115,64626,4093],{"class":174},[115,64628,9446],{"class":125},[115,64630,1035],{"class":121},[115,64632,64633],{"class":125}," as.",[115,64635,51958],{"class":174},[115,64637,3214],{"class":125},[115,64639,2292],{"class":121},[115,64641,12443],{"class":125},[115,64643,64644],{"class":117,"line":32634},[115,64645,64646],{"class":184},"      \u002F\u002F console.log(as[i])\n",[115,64648,64649],{"class":117,"line":32640},[115,64650,64651],{"class":184},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[115,64653,64654,64657,64659,64661,64664,64666,64668],{"class":117,"line":32646},[115,64655,64656],{"class":125},"      as[i].",[115,64658,57803],{"class":1963},[115,64660,126],{"class":125},[115,64662,64663],{"class":230},"'mouseenter'",[115,64665,12436],{"class":125},[115,64667,54439],{"class":121},[115,64669,54442],{"class":125},[115,64671,64672],{"class":117,"line":32652},[115,64673,64674],{"class":184},"        \u002F\u002F console.log('鼠标经过')\n",[115,64676,64677],{"class":117,"line":32658},[115,64678,64679],{"class":184},"        \u002F\u002F 排他思想  \n",[115,64681,64682],{"class":117,"line":32669},[115,64683,64684],{"class":184},"        \u002F\u002F 干掉别人 移除类active\n",[115,64686,64687,64689,64691,64693,64696,64698,64700,64702,64705],{"class":117,"line":32675},[115,64688,51915],{"class":125},[115,64690,54389],{"class":1963},[115,64692,126],{"class":125},[115,64694,64695],{"class":230},"'.tab-nav .active'",[115,64697,56993],{"class":125},[115,64699,56996],{"class":1963},[115,64701,126],{"class":125},[115,64703,64704],{"class":230},"'active'",[115,64706,132],{"class":125},[115,64708,64709],{"class":117,"line":32695},[115,64710,64711],{"class":184},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[115,64713,64714,64717,64720,64722,64724,64726],{"class":117,"line":32701},[115,64715,64716],{"class":174},"        this",[115,64718,64719],{"class":125},".classList.",[115,64721,5335],{"class":1963},[115,64723,126],{"class":125},[115,64725,64704],{"class":230},[115,64727,132],{"class":125},[115,64729,64730],{"class":117,"line":32712},[115,64731,2400],{"emptyLinePlaceholder":42},[115,64733,64734],{"class":117,"line":32718},[115,64735,64736],{"class":184},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[115,64738,64739],{"class":117,"line":32724},[115,64740,64741],{"class":184},"        \u002F\u002F 干掉别人\n",[115,64743,64744,64746,64748,64750,64753,64755,64757,64759,64761],{"class":117,"line":32730},[115,64745,51915],{"class":125},[115,64747,54389],{"class":1963},[115,64749,126],{"class":125},[115,64751,64752],{"class":230},"'.tab-content .active'",[115,64754,56993],{"class":125},[115,64756,56996],{"class":1963},[115,64758,126],{"class":125},[115,64760,64704],{"class":230},[115,64762,132],{"class":125},[115,64764,64765],{"class":117,"line":32736},[115,64766,64767],{"class":184},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[115,64769,64770,64772,64774,64776,64779,64781,64783,64785,64787,64789,64791,64793,64795],{"class":117,"line":32742},[115,64771,51915],{"class":125},[115,64773,54389],{"class":1963},[115,64775,126],{"class":125},[115,64777,64778],{"class":230},"`.tab-content .item:nth-child(${",[115,64780,566],{"class":125},[115,64782,45567],{"class":121},[115,64784,25119],{"class":174},[115,64786,57022],{"class":230},[115,64788,56993],{"class":125},[115,64790,5335],{"class":1963},[115,64792,126],{"class":125},[115,64794,64704],{"class":230},[115,64796,132],{"class":125},[115,64798,64799],{"class":117,"line":32748},[115,64800,2400],{"emptyLinePlaceholder":42},[115,64802,64803],{"class":117,"line":32754},[115,64804,64805],{"class":125},"      })\n",[115,64807,64808],{"class":117,"line":32774},[115,64809,2187],{"class":125},[115,64811,64812,64814,64816],{"class":117,"line":32780},[115,64813,52407],{"class":125},[115,64815,51803],{"class":51290},[115,64817,51297],{"class":125},[115,64819,64820,64822,64824],{"class":117,"line":32796},[115,64821,51775],{"class":125},[115,64823,51790],{"class":51290},[115,64825,51297],{"class":125},[115,64827,64828],{"class":117,"line":32802},[115,64829,2400],{"emptyLinePlaceholder":42},[115,64831,64832,64834,64836],{"class":117,"line":32816},[115,64833,51775],{"class":125},[115,64835,50625],{"class":51290},[115,64837,51297],{"class":125},[14,64839,64840],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64842,64843],{},"在监听事件中，this指向的就是他的调用者",[14,64845,64846],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64848,53710],{},[14,64850,64851],{},"(function () {",[14,64853,64854],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64856,64857],{},"list.addEventListener('click', function (e) {",[14,64859,64860],{},"if (e.target.tagName === 'A') {",[14,64862,64863],{},"\u002F\u002F 排他思想",[14,64865,64866],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64868,64869],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64871,64872],{},"\u002F\u002F console.log(old);",[14,64874,64875],{},"\u002F\u002F 判断",[14,64877,64878],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64880,64881],{},"if (old) old.classList.remove('active')",[14,64883,64884],{},"e.target.classList.add('active')",[14,64886,1071],{},[14,64888,52454],{},[14,64890,64891],{},"})();",[86,64893,64895],{"id":64894},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[106,64897,64899],{"className":50623,"code":64898,"language":50625,"meta":22,"style":22},"\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",[112,64900,64901,64911,64915,64923,64927,64941,64955,64967,64975,64981,64991,65001,65005,65009,65016,65028,65039,65056,65069,65083,65093,65097,65101,65108,65119,65137,65147,65159,65163,65167,65174,65191,65202,65214,65218,65222,65229,65241,65245,65253,65261,65265,65273,65281,65289,65304,65348,65356,65369,65382,65395,65403,65411,65419,65447,65455,65467,65480,65493,65501,65509,65517,65543,65551,65564,65576,65589,65597,65605,65613,65639,65647,65660,65672,65685,65693,65701,65709,65714,65734,65739,65759,65764,65781,65786,65794,65799,65828,65841,65845,65849,65854,65858,65886,65891,65908,65913,65918,65923,65928,65954,65958,65962,65970,65978,65982],{"__ignoreMap":22},[115,64902,64903,64905,64907,64909],{"class":117,"line":118},[115,64904,51287],{"class":125},[115,64906,51291],{"class":51290},[115,64908,51294],{"class":1963},[115,64910,51297],{"class":125},[115,64912,64913],{"class":117,"line":37},[115,64914,2400],{"emptyLinePlaceholder":42},[115,64916,64917,64919,64921],{"class":117,"line":1180},[115,64918,1035],{"class":125},[115,64920,50625],{"class":51290},[115,64922,51297],{"class":125},[115,64924,64925],{"class":117,"line":1195},[115,64926,2400],{"emptyLinePlaceholder":42},[115,64928,64929,64931,64933,64935,64937,64939],{"class":117,"line":1201},[115,64930,1035],{"class":125},[115,64932,51324],{"class":51290},[115,64934,51306],{"class":1963},[115,64936,171],{"class":125},[115,64938,51311],{"class":230},[115,64940,51297],{"class":125},[115,64942,64943,64945,64947,64949,64951,64953],{"class":117,"line":1215},[115,64944,52134],{"class":125},[115,64946,51334],{"class":51290},[115,64948,51337],{"class":1963},[115,64950,171],{"class":125},[115,64952,51342],{"class":230},[115,64954,51297],{"class":125},[115,64956,64957,64959,64961,64963,64965],{"class":117,"line":1221},[115,64958,52134],{"class":125},[115,64960,51397],{"class":51290},[115,64962,55304],{"class":125},[115,64964,51397],{"class":51290},[115,64966,51297],{"class":125},[115,64968,64969,64971,64973],{"class":117,"line":1312},[115,64970,52134],{"class":125},[115,64972,5127],{"class":51290},[115,64974,51297],{"class":125},[115,64976,64977,64979],{"class":117,"line":1318},[115,64978,6404],{"class":51290},[115,64980,15573],{"class":125},[115,64982,64983,64985,64987,64989],{"class":117,"line":1330},[115,64984,54696],{"class":174},[115,64986,51427],{"class":125},[115,64988,317],{"class":174},[115,64990,1291],{"class":125},[115,64992,64993,64995,64997,64999],{"class":117,"line":1612},[115,64994,54685],{"class":174},[115,64996,51427],{"class":125},[115,64998,317],{"class":174},[115,65000,1291],{"class":125},[115,65002,65003],{"class":117,"line":1617},[115,65004,2187],{"class":125},[115,65006,65007],{"class":117,"line":1623},[115,65008,2400],{"emptyLinePlaceholder":42},[115,65010,65011,65014],{"class":117,"line":1628},[115,65012,65013],{"class":51290},"    table",[115,65015,15573],{"class":125},[115,65017,65018,65021,65023,65026],{"class":117,"line":1642},[115,65019,65020],{"class":174},"      border-collapse",[115,65022,51427],{"class":125},[115,65024,65025],{"class":174},"collapse",[115,65027,1291],{"class":125},[115,65029,65030,65033,65035,65037],{"class":117,"line":1647},[115,65031,65032],{"class":174},"      border-spacing",[115,65034,51427],{"class":125},[115,65036,317],{"class":174},[115,65038,1291],{"class":125},[115,65040,65041,65043,65045,65047,65049,65051,65054],{"class":117,"line":1653},[115,65042,61967],{"class":174},[115,65044,51427],{"class":125},[115,65046,343],{"class":174},[115,65048,51482],{"class":121},[115,65050,51511],{"class":174},[115,65052,65053],{"class":174}," #c0c0c0",[115,65055,1291],{"class":125},[115,65057,65058,65060,65062,65065,65067],{"class":117,"line":1674},[115,65059,54761],{"class":174},[115,65061,51427],{"class":125},[115,65063,65064],{"class":174},"500",[115,65066,51482],{"class":121},[115,65068,1291],{"class":125},[115,65070,65071,65073,65075,65077,65079,65081],{"class":117,"line":1679},[115,65072,54696],{"class":174},[115,65074,51427],{"class":125},[115,65076,436],{"class":174},[115,65078,51482],{"class":121},[115,65080,51546],{"class":174},[115,65082,1291],{"class":125},[115,65084,65085,65087,65089,65091],{"class":117,"line":1693},[115,65086,57276],{"class":174},[115,65088,51427],{"class":125},[115,65090,51582],{"class":174},[115,65092,1291],{"class":125},[115,65094,65095],{"class":117,"line":1698},[115,65096,2187],{"class":125},[115,65098,65099],{"class":117,"line":1727},[115,65100,2400],{"emptyLinePlaceholder":42},[115,65102,65103,65106],{"class":117,"line":1732},[115,65104,65105],{"class":51290},"    th",[115,65107,15573],{"class":125},[115,65109,65110,65112,65114,65117],{"class":117,"line":1749},[115,65111,54874],{"class":174},[115,65113,51427],{"class":125},[115,65115,65116],{"class":174},"#09c",[115,65118,1291],{"class":125},[115,65120,65121,65124,65126,65128,65130,65132,65135],{"class":117,"line":1754},[115,65122,65123],{"class":174},"      font",[115,65125,51427],{"class":125},[115,65127,62329],{"class":174},[115,65129,64063],{"class":174},[115,65131,51482],{"class":121},[115,65133,65134],{"class":230}," \"微软雅黑\"",[115,65136,1291],{"class":125},[115,65138,65139,65141,65143,65145],{"class":117,"line":1759},[115,65140,57406],{"class":174},[115,65142,51427],{"class":125},[115,65144,60832],{"class":174},[115,65146,1291],{"class":125},[115,65148,65149,65151,65153,65155,65157],{"class":117,"line":1764},[115,65150,54775],{"class":174},[115,65152,51427],{"class":125},[115,65154,925],{"class":174},[115,65156,51482],{"class":121},[115,65158,1291],{"class":125},[115,65160,65161],{"class":117,"line":1778},[115,65162,2187],{"class":125},[115,65164,65165],{"class":117,"line":1783},[115,65166,2400],{"emptyLinePlaceholder":42},[115,65168,65169,65172],{"class":117,"line":2577},[115,65170,65171],{"class":51290},"    td",[115,65173,15573],{"class":125},[115,65175,65176,65178,65180,65182,65184,65186,65189],{"class":117,"line":2591},[115,65177,61967],{"class":174},[115,65179,51427],{"class":125},[115,65181,343],{"class":174},[115,65183,51482],{"class":121},[115,65185,51511],{"class":174},[115,65187,65188],{"class":174}," #d0d0d0",[115,65190,1291],{"class":125},[115,65192,65193,65195,65197,65200],{"class":117,"line":2599},[115,65194,57406],{"class":174},[115,65196,51427],{"class":125},[115,65198,65199],{"class":174},"#404060",[115,65201,1291],{"class":125},[115,65203,65204,65206,65208,65210,65212],{"class":117,"line":2604},[115,65205,54685],{"class":174},[115,65207,51427],{"class":125},[115,65209,571],{"class":174},[115,65211,51482],{"class":121},[115,65213,1291],{"class":125},[115,65215,65216],{"class":117,"line":2610},[115,65217,2187],{"class":125},[115,65219,65220],{"class":117,"line":2616},[115,65221,2400],{"emptyLinePlaceholder":42},[115,65223,65224,65227],{"class":117,"line":2621},[115,65225,65226],{"class":1963},"    .allCheck",[115,65228,15573],{"class":125},[115,65230,65231,65233,65235,65237,65239],{"class":117,"line":7949},[115,65232,54761],{"class":174},[115,65234,51427],{"class":125},[115,65236,737],{"class":174},[115,65238,51482],{"class":121},[115,65240,1291],{"class":125},[115,65242,65243],{"class":117,"line":7973},[115,65244,2187],{"class":125},[115,65246,65247,65249,65251],{"class":117,"line":7978},[115,65248,52407],{"class":125},[115,65250,5127],{"class":51290},[115,65252,51297],{"class":125},[115,65254,65255,65257,65259],{"class":117,"line":7984},[115,65256,51775],{"class":125},[115,65258,51324],{"class":51290},[115,65260,51297],{"class":125},[115,65262,65263],{"class":117,"line":8011},[115,65264,2400],{"emptyLinePlaceholder":42},[115,65266,65267,65269,65271],{"class":117,"line":8016},[115,65268,1035],{"class":125},[115,65270,51790],{"class":51290},[115,65272,51297],{"class":125},[115,65274,65275,65277,65279],{"class":117,"line":8022},[115,65276,52134],{"class":125},[115,65278,263],{"class":51290},[115,65280,51297],{"class":125},[115,65282,65283,65285,65287],{"class":117,"line":8034},[115,65284,51331],{"class":125},[115,65286,269],{"class":51290},[115,65288,51297],{"class":125},[115,65290,65291,65293,65295,65297,65299,65302],{"class":117,"line":8046},[115,65292,55224],{"class":125},[115,65294,272],{"class":51290},[115,65296,53476],{"class":1963},[115,65298,171],{"class":125},[115,65300,65301],{"class":230},"\"allCheck\"",[115,65303,51297],{"class":125},[115,65305,65306,65308,65310,65312,65314,65316,65318,65320,65322,65324,65326,65329,65332,65334,65336,65338,65341,65344,65346],{"class":117,"line":8058},[115,65307,55292],{"class":125},[115,65309,53811],{"class":51290},[115,65311,53814],{"class":1963},[115,65313,171],{"class":125},[115,65315,53819],{"class":230},[115,65317,14921],{"class":1963},[115,65319,171],{"class":125},[115,65321,7653],{"class":230},[115,65323,14960],{"class":1963},[115,65325,171],{"class":125},[115,65327,65328],{"class":230},"\"checkAll\"",[115,65330,65331],{"class":125},"> \u003C",[115,65333,115],{"class":51290},[115,65335,53476],{"class":1963},[115,65337,171],{"class":125},[115,65339,65340],{"class":230},"\"all\"",[115,65342,65343],{"class":125},">全选\u003C\u002F",[115,65345,115],{"class":51290},[115,65347,51297],{"class":125},[115,65349,65350,65352,65354],{"class":117,"line":9717},[115,65351,55397],{"class":125},[115,65353,272],{"class":51290},[115,65355,51297],{"class":125},[115,65357,65358,65360,65362,65365,65367],{"class":117,"line":9742},[115,65359,55224],{"class":125},[115,65361,272],{"class":51290},[115,65363,65364],{"class":125},">商品\u003C\u002F",[115,65366,272],{"class":51290},[115,65368,51297],{"class":125},[115,65370,65371,65373,65375,65378,65380],{"class":117,"line":9765},[115,65372,55224],{"class":125},[115,65374,272],{"class":51290},[115,65376,65377],{"class":125},">商家\u003C\u002F",[115,65379,272],{"class":51290},[115,65381,51297],{"class":125},[115,65383,65384,65386,65388,65391,65393],{"class":117,"line":9789},[115,65385,55224],{"class":125},[115,65387,272],{"class":51290},[115,65389,65390],{"class":125},">价格\u003C\u002F",[115,65392,272],{"class":51290},[115,65394,51297],{"class":125},[115,65396,65397,65399,65401],{"class":117,"line":9794},[115,65398,51766],{"class":125},[115,65400,269],{"class":51290},[115,65402,51297],{"class":125},[115,65404,65405,65407,65409],{"class":117,"line":9799},[115,65406,51331],{"class":125},[115,65408,269],{"class":51290},[115,65410,51297],{"class":125},[115,65412,65413,65415,65417],{"class":117,"line":9804},[115,65414,55224],{"class":125},[115,65416,315],{"class":51290},[115,65418,51297],{"class":125},[115,65420,65421,65423,65425,65427,65429,65431,65433,65435,65438,65440,65442,65445],{"class":117,"line":9813},[115,65422,55292],{"class":125},[115,65424,53811],{"class":51290},[115,65426,53814],{"class":1963},[115,65428,171],{"class":125},[115,65430,53819],{"class":230},[115,65432,14921],{"class":1963},[115,65434,171],{"class":125},[115,65436,65437],{"class":230},"\"check\"",[115,65439,53476],{"class":1963},[115,65441,171],{"class":125},[115,65443,65444],{"class":230},"\"ck\"",[115,65446,51297],{"class":125},[115,65448,65449,65451,65453],{"class":117,"line":9818},[115,65450,55397],{"class":125},[115,65452,315],{"class":51290},[115,65454,51297],{"class":125},[115,65456,65457,65459,65461,65463,65465],{"class":117,"line":9824},[115,65458,55224],{"class":125},[115,65460,315],{"class":51290},[115,65462,61163],{"class":125},[115,65464,315],{"class":51290},[115,65466,51297],{"class":125},[115,65468,65469,65471,65473,65476,65478],{"class":117,"line":9845},[115,65470,55224],{"class":125},[115,65472,315],{"class":51290},[115,65474,65475],{"class":125},">小米\u003C\u002F",[115,65477,315],{"class":51290},[115,65479,51297],{"class":125},[115,65481,65482,65484,65486,65489,65491],{"class":117,"line":9851},[115,65483,55224],{"class":125},[115,65485,315],{"class":51290},[115,65487,65488],{"class":125},">￥1999\u003C\u002F",[115,65490,315],{"class":51290},[115,65492,51297],{"class":125},[115,65494,65495,65497,65499],{"class":117,"line":9865},[115,65496,51766],{"class":125},[115,65498,269],{"class":51290},[115,65500,51297],{"class":125},[115,65502,65503,65505,65507],{"class":117,"line":9871},[115,65504,51331],{"class":125},[115,65506,269],{"class":51290},[115,65508,51297],{"class":125},[115,65510,65511,65513,65515],{"class":117,"line":9898},[115,65512,55224],{"class":125},[115,65514,315],{"class":51290},[115,65516,51297],{"class":125},[115,65518,65519,65521,65523,65525,65527,65529,65531,65533,65535,65537,65539,65541],{"class":117,"line":9907},[115,65520,55292],{"class":125},[115,65522,53811],{"class":51290},[115,65524,53814],{"class":1963},[115,65526,171],{"class":125},[115,65528,53819],{"class":230},[115,65530,14921],{"class":1963},[115,65532,171],{"class":125},[115,65534,65437],{"class":230},[115,65536,53476],{"class":1963},[115,65538,171],{"class":125},[115,65540,65444],{"class":230},[115,65542,51297],{"class":125},[115,65544,65545,65547,65549],{"class":117,"line":9913},[115,65546,55397],{"class":125},[115,65548,315],{"class":51290},[115,65550,51297],{"class":125},[115,65552,65553,65555,65557,65560,65562],{"class":117,"line":9921},[115,65554,55224],{"class":125},[115,65556,315],{"class":51290},[115,65558,65559],{"class":125},">小米净水器\u003C\u002F",[115,65561,315],{"class":51290},[115,65563,51297],{"class":125},[115,65565,65566,65568,65570,65572,65574],{"class":117,"line":9926},[115,65567,55224],{"class":125},[115,65569,315],{"class":51290},[115,65571,65475],{"class":125},[115,65573,315],{"class":51290},[115,65575,51297],{"class":125},[115,65577,65578,65580,65582,65585,65587],{"class":117,"line":16605},[115,65579,55224],{"class":125},[115,65581,315],{"class":51290},[115,65583,65584],{"class":125},">￥4999\u003C\u002F",[115,65586,315],{"class":51290},[115,65588,51297],{"class":125},[115,65590,65591,65593,65595],{"class":117,"line":16611},[115,65592,51766],{"class":125},[115,65594,269],{"class":51290},[115,65596,51297],{"class":125},[115,65598,65599,65601,65603],{"class":117,"line":16634},[115,65600,51331],{"class":125},[115,65602,269],{"class":51290},[115,65604,51297],{"class":125},[115,65606,65607,65609,65611],{"class":117,"line":16640},[115,65608,55224],{"class":125},[115,65610,315],{"class":51290},[115,65612,51297],{"class":125},[115,65614,65615,65617,65619,65621,65623,65625,65627,65629,65631,65633,65635,65637],{"class":117,"line":16663},[115,65616,55292],{"class":125},[115,65618,53811],{"class":51290},[115,65620,53814],{"class":1963},[115,65622,171],{"class":125},[115,65624,53819],{"class":230},[115,65626,14921],{"class":1963},[115,65628,171],{"class":125},[115,65630,65437],{"class":230},[115,65632,53476],{"class":1963},[115,65634,171],{"class":125},[115,65636,65444],{"class":230},[115,65638,51297],{"class":125},[115,65640,65641,65643,65645],{"class":117,"line":16677},[115,65642,55397],{"class":125},[115,65644,315],{"class":51290},[115,65646,51297],{"class":125},[115,65648,65649,65651,65653,65656,65658],{"class":117,"line":16697},[115,65650,55224],{"class":125},[115,65652,315],{"class":51290},[115,65654,65655],{"class":125},">小米电视\u003C\u002F",[115,65657,315],{"class":51290},[115,65659,51297],{"class":125},[115,65661,65662,65664,65666,65668,65670],{"class":117,"line":16703},[115,65663,55224],{"class":125},[115,65665,315],{"class":51290},[115,65667,65475],{"class":125},[115,65669,315],{"class":51290},[115,65671,51297],{"class":125},[115,65673,65674,65676,65678,65681,65683],{"class":117,"line":16714},[115,65675,55224],{"class":125},[115,65677,315],{"class":51290},[115,65679,65680],{"class":125},">￥5999\u003C\u002F",[115,65682,315],{"class":51290},[115,65684,51297],{"class":125},[115,65686,65687,65689,65691],{"class":117,"line":16737},[115,65688,51766],{"class":125},[115,65690,269],{"class":51290},[115,65692,51297],{"class":125},[115,65694,65695,65697,65699],{"class":117,"line":16759},[115,65696,52407],{"class":125},[115,65698,263],{"class":51290},[115,65700,51297],{"class":125},[115,65702,65703,65705,65707],{"class":117,"line":16764},[115,65704,52134],{"class":125},[115,65706,51803],{"class":51290},[115,65708,51297],{"class":125},[115,65710,65711],{"class":117,"line":16770},[115,65712,65713],{"class":184},"    \u002F\u002F 1. 获取大复选框\n",[115,65715,65716,65718,65721,65723,65725,65727,65729,65732],{"class":117,"line":16784},[115,65717,11222],{"class":121},[115,65719,65720],{"class":174}," checkAll",[115,65722,13565],{"class":121},[115,65724,54386],{"class":125},[115,65726,54389],{"class":1963},[115,65728,126],{"class":125},[115,65730,65731],{"class":230},"'#checkAll'",[115,65733,132],{"class":125},[115,65735,65736],{"class":117,"line":16797},[115,65737,65738],{"class":184},"    \u002F\u002F 2. 获取所有的小复选框\n",[115,65740,65741,65743,65746,65748,65750,65752,65754,65757],{"class":117,"line":16802},[115,65742,11222],{"class":121},[115,65744,65745],{"class":174}," cks",[115,65747,13565],{"class":121},[115,65749,54386],{"class":125},[115,65751,55671],{"class":1963},[115,65753,126],{"class":125},[115,65755,65756],{"class":230},"'.ck'",[115,65758,132],{"class":125},[115,65760,65761],{"class":117,"line":16816},[115,65762,65763],{"class":184},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[115,65765,65766,65769,65771,65773,65775,65777,65779],{"class":117,"line":16821},[115,65767,65768],{"class":125},"    checkAll.",[115,65770,57803],{"class":1963},[115,65772,126],{"class":125},[115,65774,57808],{"class":230},[115,65776,12436],{"class":125},[115,65778,54439],{"class":121},[115,65780,54442],{"class":125},[115,65782,65783],{"class":117,"line":16827},[115,65784,65785],{"class":184},"      \u002F\u002F 得到当前大复选框的选中状态\n",[115,65787,65788,65791],{"class":117,"line":16832},[115,65789,65790],{"class":184},"      \u002F\u002F console.log(checkAll.checked)",[115,65792,65793],{"class":184},"  \u002F\u002F 得到 是 true 或者是 false\n",[115,65795,65796],{"class":117,"line":16846},[115,65797,65798],{"class":184},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[115,65800,65801,65803,65805,65807,65809,65811,65813,65815,65817,65820,65822,65824,65826],{"class":117,"line":16851},[115,65802,52274],{"class":121},[115,65804,1658],{"class":125},[115,65806,51837],{"class":121},[115,65808,9439],{"class":125},[115,65810,171],{"class":121},[115,65812,4093],{"class":174},[115,65814,9446],{"class":125},[115,65816,1035],{"class":121},[115,65818,65819],{"class":125}," cks.",[115,65821,51958],{"class":174},[115,65823,3214],{"class":125},[115,65825,2292],{"class":121},[115,65827,12443],{"class":125},[115,65829,65830,65833,65835,65838],{"class":117,"line":16856},[115,65831,65832],{"class":125},"        cks[i].checked ",[115,65834,171],{"class":121},[115,65836,65837],{"class":174}," this",[115,65839,65840],{"class":125},".checked\n",[115,65842,65843],{"class":117,"line":16870},[115,65844,52388],{"class":125},[115,65846,65847],{"class":117,"line":16882},[115,65848,33462],{"class":125},[115,65850,65851],{"class":117,"line":16887},[115,65852,65853],{"class":184},"    \u002F\u002F 5. 小复选框控制大复选框\n",[115,65855,65856],{"class":117,"line":16900},[115,65857,2400],{"emptyLinePlaceholder":42},[115,65859,65860,65862,65864,65866,65868,65870,65872,65874,65876,65878,65880,65882,65884],{"class":117,"line":16905},[115,65861,3201],{"class":121},[115,65863,1658],{"class":125},[115,65865,51837],{"class":121},[115,65867,9439],{"class":125},[115,65869,171],{"class":121},[115,65871,4093],{"class":174},[115,65873,9446],{"class":125},[115,65875,1035],{"class":121},[115,65877,65819],{"class":125},[115,65879,51958],{"class":174},[115,65881,3214],{"class":125},[115,65883,2292],{"class":121},[115,65885,12443],{"class":125},[115,65887,65888],{"class":117,"line":16910},[115,65889,65890],{"class":184},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[115,65892,65893,65896,65898,65900,65902,65904,65906],{"class":117,"line":16915},[115,65894,65895],{"class":125},"      cks[i].",[115,65897,57803],{"class":1963},[115,65899,126],{"class":125},[115,65901,57808],{"class":230},[115,65903,12436],{"class":125},[115,65905,54439],{"class":121},[115,65907,54442],{"class":125},[115,65909,65910],{"class":117,"line":16928},[115,65911,65912],{"class":184},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[115,65914,65915],{"class":117,"line":16933},[115,65916,65917],{"class":184},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[115,65919,65920],{"class":117,"line":32634},[115,65921,65922],{"class":184},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[115,65924,65925],{"class":117,"line":32640},[115,65926,65927],{"class":184},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[115,65929,65930,65933,65935,65937,65939,65941,65944,65946,65948,65950,65952],{"class":117,"line":32646},[115,65931,65932],{"class":125},"        checkAll.checked ",[115,65934,171],{"class":121},[115,65936,54386],{"class":125},[115,65938,55671],{"class":1963},[115,65940,126],{"class":125},[115,65942,65943],{"class":230},"'.ck:checked'",[115,65945,30827],{"class":125},[115,65947,51958],{"class":174},[115,65949,57896],{"class":121},[115,65951,65819],{"class":125},[115,65953,55821],{"class":174},[115,65955,65956],{"class":117,"line":32652},[115,65957,64805],{"class":125},[115,65959,65960],{"class":117,"line":32658},[115,65961,2187],{"class":125},[115,65963,65964,65966,65968],{"class":117,"line":32669},[115,65965,52407],{"class":125},[115,65967,51803],{"class":51290},[115,65969,51297],{"class":125},[115,65971,65972,65974,65976],{"class":117,"line":32675},[115,65973,51775],{"class":125},[115,65975,51790],{"class":51290},[115,65977,51297],{"class":125},[115,65979,65980],{"class":117,"line":32695},[115,65981,2400],{"emptyLinePlaceholder":42},[115,65983,65984,65986,65988],{"class":117,"line":32701},[115,65985,51775],{"class":125},[115,65987,50625],{"class":51290},[115,65989,51297],{"class":125},[14,65991,65992],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65994,65995],{},"用好之间比较得到的布尔值！！！",[14,65997,65998,65999,66002,66003,1658,66006,709,66008,66011],{},"在 JS 里访问的时候，",[112,66000,66001],{},"checkbox.checked"," 是一个 ",[275,66004,66005],{},"布尔值",[112,66007,1363],{},[112,66009,66010],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66013,66014,66015,66018,66019],{},"HTML 的 ",[112,66016,66017],{},"checked=\"checked\""," 只是 ",[275,66020,66021,66022,66025],{},"初始值；JS 的 ",[112,66023,66024],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66027,66028],{},"：checked是一个伪类选择器",[14,66030,66031],{},[20,66032],{"alt":22,"src":66033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66035,66036,66039],{},[66037,66038],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66041,66042],{},[20,66043],{"alt":22,"src":66044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[57,66046,66048],{"id":66047},"_33-dom事件进阶","3.3 DOM事件进阶",[86,66050,66052],{"id":66051},"_331-事件流","3.3.1 事件流",[14,66054,66055],{},[20,66056],{"alt":22,"src":66057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21999,66059,66061],{"id":66060},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66063,66064],{},[20,66065],{"alt":22,"src":66066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[106,66068,66070],{"className":50623,"code":66069,"language":50625,"meta":22,"style":22},"\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",[112,66071,66072,66082,66096,66100,66108,66122,66142,66154,66162,66169,66181,66193,66203,66207,66211,66218,66230,66242,66252,66256,66264,66272,66276,66284,66299,66318,66326,66334,66354,66374,66390,66401,66409,66426,66437,66445,66462,66473,66481,66489,66497,66501],{"__ignoreMap":22},[115,66073,66074,66076,66078,66080],{"class":117,"line":118},[115,66075,51287],{"class":125},[115,66077,51291],{"class":51290},[115,66079,51294],{"class":1963},[115,66081,51297],{"class":125},[115,66083,66084,66086,66088,66090,66092,66094],{"class":117,"line":37},[115,66085,1035],{"class":125},[115,66087,50625],{"class":51290},[115,66089,51306],{"class":1963},[115,66091,171],{"class":125},[115,66093,51311],{"class":230},[115,66095,51297],{"class":125},[115,66097,66098],{"class":117,"line":1180},[115,66099,2400],{"emptyLinePlaceholder":42},[115,66101,66102,66104,66106],{"class":117,"line":1195},[115,66103,1035],{"class":125},[115,66105,51324],{"class":51290},[115,66107,51297],{"class":125},[115,66109,66110,66112,66114,66116,66118,66120],{"class":117,"line":1201},[115,66111,52134],{"class":125},[115,66113,51334],{"class":51290},[115,66115,51337],{"class":1963},[115,66117,171],{"class":125},[115,66119,51342],{"class":230},[115,66121,51297],{"class":125},[115,66123,66124,66126,66128,66130,66132,66134,66136,66138,66140],{"class":117,"line":1215},[115,66125,52134],{"class":125},[115,66127,51334],{"class":51290},[115,66129,14921],{"class":1963},[115,66131,171],{"class":125},[115,66133,51381],{"class":230},[115,66135,51361],{"class":1963},[115,66137,171],{"class":125},[115,66139,51388],{"class":230},[115,66141,51297],{"class":125},[115,66143,66144,66146,66148,66150,66152],{"class":117,"line":1221},[115,66145,52134],{"class":125},[115,66147,51397],{"class":51290},[115,66149,51400],{"class":125},[115,66151,51397],{"class":51290},[115,66153,51297],{"class":125},[115,66155,66156,66158,66160],{"class":117,"line":1312},[115,66157,52134],{"class":125},[115,66159,5127],{"class":51290},[115,66161,51297],{"class":125},[115,66163,66164,66167],{"class":117,"line":1318},[115,66165,66166],{"class":1963},"    .father",[115,66168,15573],{"class":125},[115,66170,66171,66173,66175,66177,66179],{"class":117,"line":1330},[115,66172,54761],{"class":174},[115,66174,51427],{"class":125},[115,66176,65064],{"class":174},[115,66178,51482],{"class":121},[115,66180,1291],{"class":125},[115,66182,66183,66185,66187,66189,66191],{"class":117,"line":1612},[115,66184,54775],{"class":174},[115,66186,51427],{"class":125},[115,66188,65064],{"class":174},[115,66190,51482],{"class":121},[115,66192,1291],{"class":125},[115,66194,66195,66197,66199,66201],{"class":117,"line":1617},[115,66196,54874],{"class":174},[115,66198,51427],{"class":125},[115,66200,51635],{"class":174},[115,66202,1291],{"class":125},[115,66204,66205],{"class":117,"line":1623},[115,66206,2187],{"class":125},[115,66208,66209],{"class":117,"line":1628},[115,66210,2400],{"emptyLinePlaceholder":42},[115,66212,66213,66216],{"class":117,"line":1642},[115,66214,66215],{"class":1963},"    .son",[115,66217,15573],{"class":125},[115,66219,66220,66222,66224,66226,66228],{"class":117,"line":1647},[115,66221,54761],{"class":174},[115,66223,51427],{"class":125},[115,66225,1722],{"class":174},[115,66227,51482],{"class":121},[115,66229,1291],{"class":125},[115,66231,66232,66234,66236,66238,66240],{"class":117,"line":1653},[115,66233,54775],{"class":174},[115,66235,51427],{"class":125},[115,66237,1722],{"class":174},[115,66239,51482],{"class":121},[115,66241,1291],{"class":125},[115,66243,66244,66246,66248,66250],{"class":117,"line":1674},[115,66245,54874],{"class":174},[115,66247,51427],{"class":125},[115,66249,54879],{"class":174},[115,66251,1291],{"class":125},[115,66253,66254],{"class":117,"line":1679},[115,66255,2187],{"class":125},[115,66257,66258,66260,66262],{"class":117,"line":1693},[115,66259,52407],{"class":125},[115,66261,5127],{"class":51290},[115,66263,51297],{"class":125},[115,66265,66266,66268,66270],{"class":117,"line":1698},[115,66267,51775],{"class":125},[115,66269,51324],{"class":51290},[115,66271,51297],{"class":125},[115,66273,66274],{"class":117,"line":1727},[115,66275,2400],{"emptyLinePlaceholder":42},[115,66277,66278,66280,66282],{"class":117,"line":1732},[115,66279,1035],{"class":125},[115,66281,51790],{"class":51290},[115,66283,51297],{"class":125},[115,66285,66286,66288,66290,66292,66294,66297],{"class":117,"line":1749},[115,66287,52134],{"class":125},[115,66289,51601],{"class":51290},[115,66291,53476],{"class":1963},[115,66293,171],{"class":125},[115,66295,66296],{"class":230},"\"father\"",[115,66298,51297],{"class":125},[115,66300,66301,66303,66305,66307,66309,66312,66314,66316],{"class":117,"line":1754},[115,66302,51331],{"class":125},[115,66304,51601],{"class":51290},[115,66306,53476],{"class":1963},[115,66308,171],{"class":125},[115,66310,66311],{"class":230},"\"son\"",[115,66313,55304],{"class":125},[115,66315,51601],{"class":51290},[115,66317,51297],{"class":125},[115,66319,66320,66322,66324],{"class":117,"line":1759},[115,66321,52407],{"class":125},[115,66323,51601],{"class":51290},[115,66325,51297],{"class":125},[115,66327,66328,66330,66332],{"class":117,"line":1764},[115,66329,52134],{"class":125},[115,66331,51803],{"class":51290},[115,66333,51297],{"class":125},[115,66335,66336,66338,66341,66343,66345,66347,66349,66352],{"class":117,"line":1778},[115,66337,11222],{"class":121},[115,66339,66340],{"class":174}," fa",[115,66342,13565],{"class":121},[115,66344,54386],{"class":125},[115,66346,54389],{"class":1963},[115,66348,126],{"class":125},[115,66350,66351],{"class":230},"'.father'",[115,66353,132],{"class":125},[115,66355,66356,66358,66361,66363,66365,66367,66369,66372],{"class":117,"line":1783},[115,66357,11222],{"class":121},[115,66359,66360],{"class":174}," son",[115,66362,13565],{"class":121},[115,66364,54386],{"class":125},[115,66366,54389],{"class":1963},[115,66368,126],{"class":125},[115,66370,66371],{"class":230},"'.son'",[115,66373,132],{"class":125},[115,66375,66376,66378,66380,66382,66384,66386,66388],{"class":117,"line":2577},[115,66377,52397],{"class":125},[115,66379,57803],{"class":1963},[115,66381,126],{"class":125},[115,66383,57808],{"class":230},[115,66385,12436],{"class":125},[115,66387,54439],{"class":121},[115,66389,54442],{"class":125},[115,66391,66392,66394,66396,66399],{"class":117,"line":2591},[115,66393,58915],{"class":1963},[115,66395,126],{"class":125},[115,66397,66398],{"class":230},"'woshiu1'",[115,66400,132],{"class":125},[115,66402,66403,66405,66407],{"class":117,"line":2599},[115,66404,54525],{"class":125},[115,66406,1363],{"class":174},[115,66408,132],{"class":125},[115,66410,66411,66414,66416,66418,66420,66422,66424],{"class":117,"line":2604},[115,66412,66413],{"class":125},"    fa.",[115,66415,57803],{"class":1963},[115,66417,126],{"class":125},[115,66419,57808],{"class":230},[115,66421,12436],{"class":125},[115,66423,54439],{"class":121},[115,66425,54442],{"class":125},[115,66427,66428,66430,66432,66435],{"class":117,"line":2610},[115,66429,58915],{"class":1963},[115,66431,126],{"class":125},[115,66433,66434],{"class":230},"'1'",[115,66436,132],{"class":125},[115,66438,66439,66441,66443],{"class":117,"line":2616},[115,66440,54525],{"class":125},[115,66442,1363],{"class":174},[115,66444,132],{"class":125},[115,66446,66447,66450,66452,66454,66456,66458,66460],{"class":117,"line":2621},[115,66448,66449],{"class":125},"    son.",[115,66451,57803],{"class":1963},[115,66453,126],{"class":125},[115,66455,57808],{"class":230},[115,66457,12436],{"class":125},[115,66459,54439],{"class":121},[115,66461,54442],{"class":125},[115,66463,66464,66466,66468,66471],{"class":117,"line":7949},[115,66465,58915],{"class":1963},[115,66467,126],{"class":125},[115,66469,66470],{"class":230},"'2'",[115,66472,132],{"class":125},[115,66474,66475,66477,66479],{"class":117,"line":7973},[115,66476,54525],{"class":125},[115,66478,1363],{"class":174},[115,66480,132],{"class":125},[115,66482,66483,66485,66487],{"class":117,"line":7978},[115,66484,52407],{"class":125},[115,66486,51803],{"class":51290},[115,66488,51297],{"class":125},[115,66490,66491,66493,66495],{"class":117,"line":7984},[115,66492,51775],{"class":125},[115,66494,51790],{"class":51290},[115,66496,51297],{"class":125},[115,66498,66499],{"class":117,"line":8011},[115,66500,2400],{"emptyLinePlaceholder":42},[115,66502,66503,66505,66507],{"class":117,"line":8016},[115,66504,51775],{"class":125},[115,66506,50625],{"class":51290},[115,66508,51297],{"class":125},[14,66510,66511],{},[20,66512],{"alt":22,"src":66513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66515,66516],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21999,66518,66520],{"id":66519},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66522,66523],{},[20,66524],{"alt":22,"src":66525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66527,66528],{},"反着来",[14,66530,66531],{},"注意是同名事件，比如都是‘click’",[21999,66533,66535],{"id":66534},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66537,66538],{},[20,66539],{"alt":22,"src":66540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21999,66542,66544],{"id":66543},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66546,66547],{},[20,66548],{"alt":22,"src":66549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66551,66552],{},[20,66553],{"alt":22,"src":66554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21999,66556,66558],{"id":66557},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[69,66560,66561],{},[72,66562,66563],{},"事件类型的区别",[14,66565,66566],{},[20,66567],{"alt":22,"src":66568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66570,66571],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[69,66573,66574],{"start":37},[72,66575,66576],{},"注册事件的区别",[14,66578,66579],{},[20,66580],{"alt":22,"src":66581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21999,66583,66585],{"id":66584},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66587,66588],{},[20,66589],{"alt":22,"src":66590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66592,66593],{},[20,66594],{"alt":22,"src":66595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[106,66597,66599],{"className":53057,"code":66598,"language":53059,"meta":22,"style":22},"\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",[112,66600,66601,66609,66626,66649,66657,66662,66667,66672,66676,66684,66692],{"__ignoreMap":22},[115,66602,66603,66605,66607],{"class":117,"line":118},[115,66604,1035],{"class":125},[115,66606,51790],{"class":51290},[115,66608,51297],{"class":125},[115,66610,66611,66613,66616,66619,66621,66624],{"class":117,"line":37},[115,66612,52134],{"class":125},[115,66614,66615],{"class":51290},"form",[115,66617,66618],{"class":1963}," action",[115,66620,171],{"class":125},[115,66622,66623],{"class":230},"\"http:\u002F\u002Fwww.itcast.cn\"",[115,66625,51297],{"class":125},[115,66627,66628,66630,66632,66634,66636,66639,66642,66644,66647],{"class":117,"line":1180},[115,66629,51331],{"class":125},[115,66631,53811],{"class":51290},[115,66633,53814],{"class":1963},[115,66635,171],{"class":125},[115,66637,66638],{"class":230},"\"submit\"",[115,66640,66641],{"class":1963}," value",[115,66643,171],{"class":125},[115,66645,66646],{"class":230},"\"免费注册\"",[115,66648,51297],{"class":125},[115,66650,66651,66653,66655],{"class":117,"line":1195},[115,66652,51331],{"class":125},[115,66654,51803],{"class":51290},[115,66656,51297],{"class":125},[115,66658,66659],{"class":117,"line":1201},[115,66660,66661],{"class":125},"      const form = document.querySelector('form')\n",[115,66663,66664],{"class":117,"line":1215},[115,66665,66666],{"class":125},"      form.addEventListener('submit', function (e) {\n",[115,66668,66669],{"class":117,"line":1221},[115,66670,66671],{"class":125},"        e.preventDefault()\n",[115,66673,66674],{"class":117,"line":1312},[115,66675,64805],{"class":125},[115,66677,66678,66680,66682],{"class":117,"line":1318},[115,66679,51766],{"class":125},[115,66681,51803],{"class":51290},[115,66683,51297],{"class":125},[115,66685,66686,66688,66690],{"class":117,"line":1330},[115,66687,52407],{"class":125},[115,66689,66615],{"class":51290},[115,66691,51297],{"class":125},[115,66693,66694,66696,66698],{"class":117,"line":1612},[115,66695,51775],{"class":125},[115,66697,51790],{"class":51290},[115,66699,51297],{"class":125},[14,66701,66702],{},"点击不在跳转！！！",[86,66704,66706],{"id":66705},"_332-事件委托","3.3.2 事件委托",[14,66708,66709],{},[20,66710],{"alt":22,"src":66711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[106,66713,66715],{"className":50623,"code":66714,"language":50625,"meta":22,"style":22},"\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",[112,66716,66717,66727,66741,66745,66753,66767,66787,66799,66807,66811,66819,66827,66839,66851,66863,66875,66887,66900,66908,66916,66921,66940,66961,66966,66971,66976,66981,66990,66994,67004,67008,67013,67018,67032,67042,67046,67050,67058,67066,67070],{"__ignoreMap":22},[115,66718,66719,66721,66723,66725],{"class":117,"line":118},[115,66720,51287],{"class":125},[115,66722,51291],{"class":51290},[115,66724,51294],{"class":1963},[115,66726,51297],{"class":125},[115,66728,66729,66731,66733,66735,66737,66739],{"class":117,"line":37},[115,66730,1035],{"class":125},[115,66732,50625],{"class":51290},[115,66734,51306],{"class":1963},[115,66736,171],{"class":125},[115,66738,51311],{"class":230},[115,66740,51297],{"class":125},[115,66742,66743],{"class":117,"line":1180},[115,66744,2400],{"emptyLinePlaceholder":42},[115,66746,66747,66749,66751],{"class":117,"line":1195},[115,66748,1035],{"class":125},[115,66750,51324],{"class":51290},[115,66752,51297],{"class":125},[115,66754,66755,66757,66759,66761,66763,66765],{"class":117,"line":1201},[115,66756,52134],{"class":125},[115,66758,51334],{"class":51290},[115,66760,51337],{"class":1963},[115,66762,171],{"class":125},[115,66764,51342],{"class":230},[115,66766,51297],{"class":125},[115,66768,66769,66771,66773,66775,66777,66779,66781,66783,66785],{"class":117,"line":1215},[115,66770,52134],{"class":125},[115,66772,51334],{"class":51290},[115,66774,14921],{"class":1963},[115,66776,171],{"class":125},[115,66778,51381],{"class":230},[115,66780,51361],{"class":1963},[115,66782,171],{"class":125},[115,66784,51388],{"class":230},[115,66786,51297],{"class":125},[115,66788,66789,66791,66793,66795,66797],{"class":117,"line":1221},[115,66790,52134],{"class":125},[115,66792,51397],{"class":51290},[115,66794,51400],{"class":125},[115,66796,51397],{"class":51290},[115,66798,51297],{"class":125},[115,66800,66801,66803,66805],{"class":117,"line":1312},[115,66802,51775],{"class":125},[115,66804,51324],{"class":51290},[115,66806,51297],{"class":125},[115,66808,66809],{"class":117,"line":1318},[115,66810,2400],{"emptyLinePlaceholder":42},[115,66812,66813,66815,66817],{"class":117,"line":1330},[115,66814,1035],{"class":125},[115,66816,51790],{"class":51290},[115,66818,51297],{"class":125},[115,66820,66821,66823,66825],{"class":117,"line":1612},[115,66822,52134],{"class":125},[115,66824,1132],{"class":51290},[115,66826,51297],{"class":125},[115,66828,66829,66831,66833,66835,66837],{"class":117,"line":1617},[115,66830,51331],{"class":125},[115,66832,72],{"class":51290},[115,66834,53956],{"class":125},[115,66836,72],{"class":51290},[115,66838,51297],{"class":125},[115,66840,66841,66843,66845,66847,66849],{"class":117,"line":1623},[115,66842,51331],{"class":125},[115,66844,72],{"class":51290},[115,66846,53975],{"class":125},[115,66848,72],{"class":51290},[115,66850,51297],{"class":125},[115,66852,66853,66855,66857,66859,66861],{"class":117,"line":1628},[115,66854,51331],{"class":125},[115,66856,72],{"class":51290},[115,66858,53994],{"class":125},[115,66860,72],{"class":51290},[115,66862,51297],{"class":125},[115,66864,66865,66867,66869,66871,66873],{"class":117,"line":1642},[115,66866,51331],{"class":125},[115,66868,72],{"class":51290},[115,66870,54013],{"class":125},[115,66872,72],{"class":51290},[115,66874,51297],{"class":125},[115,66876,66877,66879,66881,66883,66885],{"class":117,"line":1647},[115,66878,51331],{"class":125},[115,66880,72],{"class":51290},[115,66882,54032],{"class":125},[115,66884,72],{"class":51290},[115,66886,51297],{"class":125},[115,66888,66889,66891,66893,66896,66898],{"class":117,"line":1653},[115,66890,51331],{"class":125},[115,66892,14],{"class":51290},[115,66894,66895],{"class":125},">我不需要变色\u003C\u002F",[115,66897,14],{"class":51290},[115,66899,51297],{"class":125},[115,66901,66902,66904,66906],{"class":117,"line":1674},[115,66903,52407],{"class":125},[115,66905,1132],{"class":51290},[115,66907,51297],{"class":125},[115,66909,66910,66912,66914],{"class":117,"line":1679},[115,66911,52134],{"class":125},[115,66913,51803],{"class":51290},[115,66915,51297],{"class":125},[115,66917,66918],{"class":117,"line":1693},[115,66919,66920],{"class":184},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[115,66922,66923,66925,66927,66929,66931,66933,66935,66938],{"class":117,"line":1698},[115,66924,11222],{"class":121},[115,66926,61282],{"class":174},[115,66928,13565],{"class":121},[115,66930,54386],{"class":125},[115,66932,54389],{"class":1963},[115,66934,126],{"class":125},[115,66936,66937],{"class":230},"'ul'",[115,66939,132],{"class":125},[115,66941,66942,66945,66947,66949,66951,66953,66955,66957,66959],{"class":117,"line":1727},[115,66943,66944],{"class":125},"    ul.",[115,66946,57803],{"class":1963},[115,66948,126],{"class":125},[115,66950,57808],{"class":230},[115,66952,12436],{"class":125},[115,66954,54439],{"class":121},[115,66956,1658],{"class":125},[115,66958,200],{"class":5217},[115,66960,12443],{"class":125},[115,66962,66963],{"class":117,"line":1732},[115,66964,66965],{"class":184},"      \u002F\u002F alert(1)\n",[115,66967,66968],{"class":117,"line":1749},[115,66969,66970],{"class":184},"      \u002F\u002F e.target就是我们点击的对象\n",[115,66972,66973],{"class":117,"line":1754},[115,66974,66975],{"class":184},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[115,66977,66978],{"class":117,"line":1759},[115,66979,66980],{"class":184},"      \u002F\u002F e.target.style.color = 'red'\n",[115,66982,66983,66985,66987],{"class":117,"line":1764},[115,66984,58234],{"class":125},[115,66986,58237],{"class":1963},[115,66988,66989],{"class":125},"(e)\n",[115,66991,66992],{"class":117,"line":1778},[115,66993,2400],{"emptyLinePlaceholder":42},[115,66995,66996,66998,67001],{"class":117,"line":1783},[115,66997,58234],{"class":125},[115,66999,67000],{"class":1963},"dir",[115,67002,67003],{"class":125},"(e.target)\n",[115,67005,67006],{"class":117,"line":2577},[115,67007,2400],{"emptyLinePlaceholder":42},[115,67009,67010],{"class":117,"line":2591},[115,67011,67012],{"class":184},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[115,67014,67015],{"class":117,"line":2599},[115,67016,67017],{"class":184},"      \u002F\u002F 通过tagName来进行判断\n",[115,67019,67020,67022,67025,67027,67030],{"class":117,"line":2604},[115,67021,54470],{"class":121},[115,67023,67024],{"class":125}," (e.target.tagName ",[115,67026,54476],{"class":121},[115,67028,67029],{"class":230}," 'LI'",[115,67031,12443],{"class":125},[115,67033,67034,67037,67039],{"class":117,"line":2610},[115,67035,67036],{"class":125},"        e.target.style.color ",[115,67038,171],{"class":121},[115,67040,67041],{"class":230}," 'red'\n",[115,67043,67044],{"class":117,"line":2616},[115,67045,52388],{"class":125},[115,67047,67048],{"class":117,"line":2621},[115,67049,33462],{"class":125},[115,67051,67052,67054,67056],{"class":117,"line":7949},[115,67053,52407],{"class":125},[115,67055,51803],{"class":51290},[115,67057,51297],{"class":125},[115,67059,67060,67062,67064],{"class":117,"line":7973},[115,67061,51775],{"class":125},[115,67063,51790],{"class":51290},[115,67065,51297],{"class":125},[115,67067,67068],{"class":117,"line":7978},[115,67069,2400],{"emptyLinePlaceholder":42},[115,67071,67072,67074,67076],{"class":117,"line":7984},[115,67073,51775],{"class":125},[115,67075,50625],{"class":51290},[115,67077,51297],{"class":125},[14,67079,67080],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67082,67083],{},"if(e.target.ragName==='P') {}",[14,67085,67086],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67088,67089],{},"通过事件委托的方式实现tab栏切换改造：",[14,67091,67092],{},"一定要记住自定义属性！！！！！！",[14,67094,67095],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67097,67098],{},"id是自定义的属性名",[14,67100,67101],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[106,67103,67105],{"className":50623,"code":67104,"language":50625,"meta":22,"style":22},"\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",[112,67106,67107,67117,67131,67135,67143,67157,67177,67197,67209,67217,67223,67233,67243,67247,67251,67257,67269,67281,67293,67309,67313,67317,67323,67335,67347,67359,67369,67379,67383,67387,67395,67407,67417,67429,67433,67437,67445,67455,67465,67475,67479,67483,67493,67507,67519,67523,67527,67539,67549,67565,67575,67579,67583,67597,67607,67617,67621,67625,67631,67645,67649,67653,67661,67671,67675,67679,67688,67698,67702,67710,67718,67722,67730,67744,67758,67770,67778,67817,67849,67881,67913,67945,67953,67961,67975,68009,68043,68077,68111,68145,68153,68161,68169,68174,68179,68198,68203,68223,68231,68236,68249,68270,68283,68287,68292,68297,68310,68330,68358,68362,68366,68370,68378,68386,68390],{"__ignoreMap":22},[115,67108,67109,67111,67113,67115],{"class":117,"line":118},[115,67110,51287],{"class":125},[115,67112,51291],{"class":51290},[115,67114,51294],{"class":1963},[115,67116,51297],{"class":125},[115,67118,67119,67121,67123,67125,67127,67129],{"class":117,"line":37},[115,67120,1035],{"class":125},[115,67122,50625],{"class":51290},[115,67124,51306],{"class":1963},[115,67126,171],{"class":125},[115,67128,51311],{"class":230},[115,67130,51297],{"class":125},[115,67132,67133],{"class":117,"line":1180},[115,67134,2400],{"emptyLinePlaceholder":42},[115,67136,67137,67139,67141],{"class":117,"line":1195},[115,67138,1035],{"class":125},[115,67140,51324],{"class":51290},[115,67142,51297],{"class":125},[115,67144,67145,67147,67149,67151,67153,67155],{"class":117,"line":1201},[115,67146,52134],{"class":125},[115,67148,51334],{"class":51290},[115,67150,51337],{"class":1963},[115,67152,171],{"class":125},[115,67154,51342],{"class":230},[115,67156,59117],{"class":125},[115,67158,67159,67161,67163,67165,67167,67169,67171,67173,67175],{"class":117,"line":1215},[115,67160,52134],{"class":125},[115,67162,51334],{"class":51290},[115,67164,51353],{"class":1963},[115,67166,171],{"class":125},[115,67168,51358],{"class":230},[115,67170,51361],{"class":1963},[115,67172,171],{"class":125},[115,67174,51366],{"class":230},[115,67176,59117],{"class":125},[115,67178,67179,67181,67183,67185,67187,67189,67191,67193,67195],{"class":117,"line":1221},[115,67180,52134],{"class":125},[115,67182,51334],{"class":51290},[115,67184,14921],{"class":1963},[115,67186,171],{"class":125},[115,67188,51381],{"class":230},[115,67190,51361],{"class":1963},[115,67192,171],{"class":125},[115,67194,51388],{"class":230},[115,67196,59117],{"class":125},[115,67198,67199,67201,67203,67205,67207],{"class":117,"line":1312},[115,67200,52134],{"class":125},[115,67202,51397],{"class":51290},[115,67204,63615],{"class":125},[115,67206,51397],{"class":51290},[115,67208,51297],{"class":125},[115,67210,67211,67213,67215],{"class":117,"line":1318},[115,67212,52134],{"class":125},[115,67214,5127],{"class":51290},[115,67216,51297],{"class":125},[115,67218,67219,67221],{"class":117,"line":1330},[115,67220,6404],{"class":51290},[115,67222,15573],{"class":125},[115,67224,67225,67227,67229,67231],{"class":117,"line":1612},[115,67226,54696],{"class":174},[115,67228,51427],{"class":125},[115,67230,317],{"class":174},[115,67232,1291],{"class":125},[115,67234,67235,67237,67239,67241],{"class":117,"line":1617},[115,67236,54685],{"class":174},[115,67238,51427],{"class":125},[115,67240,317],{"class":174},[115,67242,1291],{"class":125},[115,67244,67245],{"class":117,"line":1623},[115,67246,2187],{"class":125},[115,67248,67249],{"class":117,"line":1628},[115,67250,2400],{"emptyLinePlaceholder":42},[115,67252,67253,67255],{"class":117,"line":1642},[115,67254,63666],{"class":1963},[115,67256,15573],{"class":125},[115,67258,67259,67261,67263,67265,67267],{"class":117,"line":1647},[115,67260,54761],{"class":174},[115,67262,51427],{"class":125},[115,67264,63677],{"class":174},[115,67266,51482],{"class":121},[115,67268,1291],{"class":125},[115,67270,67271,67273,67275,67277,67279],{"class":117,"line":1653},[115,67272,54775],{"class":174},[115,67274,51427],{"class":125},[115,67276,63690],{"class":174},[115,67278,51482],{"class":121},[115,67280,1291],{"class":125},[115,67282,67283,67285,67287,67289,67291],{"class":117,"line":1674},[115,67284,54696],{"class":174},[115,67286,51427],{"class":125},[115,67288,825],{"class":174},[115,67290,51482],{"class":121},[115,67292,1291],{"class":125},[115,67294,67295,67297,67299,67301,67303,67305,67307],{"class":117,"line":1679},[115,67296,61967],{"class":174},[115,67298,51427],{"class":125},[115,67300,343],{"class":174},[115,67302,51482],{"class":121},[115,67304,51511],{"class":174},[115,67306,62234],{"class":174},[115,67308,1291],{"class":125},[115,67310,67311],{"class":117,"line":1693},[115,67312,2187],{"class":125},[115,67314,67315],{"class":117,"line":1698},[115,67316,2400],{"emptyLinePlaceholder":42},[115,67318,67319,67321],{"class":117,"line":1727},[115,67320,63735],{"class":1963},[115,67322,15573],{"class":125},[115,67324,67325,67327,67329,67331,67333],{"class":117,"line":1732},[115,67326,54761],{"class":174},[115,67328,51427],{"class":125},[115,67330,436],{"class":174},[115,67332,453],{"class":121},[115,67334,1291],{"class":125},[115,67336,67337,67339,67341,67343,67345],{"class":117,"line":1749},[115,67338,54775],{"class":174},[115,67340,51427],{"class":125},[115,67342,1032],{"class":174},[115,67344,51482],{"class":121},[115,67346,1291],{"class":125},[115,67348,67349,67351,67353,67355,67357],{"class":117,"line":1754},[115,67350,57349],{"class":174},[115,67352,51427],{"class":125},[115,67354,1032],{"class":174},[115,67356,51482],{"class":121},[115,67358,1291],{"class":125},[115,67360,67361,67363,67365,67367],{"class":117,"line":1759},[115,67362,54999],{"class":174},[115,67364,51427],{"class":125},[115,67366,51467],{"class":174},[115,67368,1291],{"class":125},[115,67370,67371,67373,67375,67377],{"class":117,"line":1764},[115,67372,55010],{"class":174},[115,67374,51427],{"class":125},[115,67376,51658],{"class":174},[115,67378,1291],{"class":125},[115,67380,67381],{"class":117,"line":1778},[115,67382,2187],{"class":125},[115,67384,67385],{"class":117,"line":1783},[115,67386,2400],{"emptyLinePlaceholder":42},[115,67388,67389,67391,67393],{"class":117,"line":2577},[115,67390,63735],{"class":1963},[115,67392,63808],{"class":51290},[115,67394,15573],{"class":125},[115,67396,67397,67399,67401,67403,67405],{"class":117,"line":2591},[115,67398,54912],{"class":174},[115,67400,51427],{"class":125},[115,67402,925],{"class":174},[115,67404,51482],{"class":121},[115,67406,1291],{"class":125},[115,67408,67409,67411,67413,67415],{"class":117,"line":2599},[115,67410,62324],{"class":174},[115,67412,51427],{"class":125},[115,67414,63831],{"class":174},[115,67416,1291],{"class":125},[115,67418,67419,67421,67423,67425,67427],{"class":117,"line":2604},[115,67420,61990],{"class":174},[115,67422,51427],{"class":125},[115,67424,825],{"class":174},[115,67426,51482],{"class":121},[115,67428,1291],{"class":125},[115,67430,67431],{"class":117,"line":2610},[115,67432,2187],{"class":125},[115,67434,67435],{"class":117,"line":2616},[115,67436,2400],{"emptyLinePlaceholder":42},[115,67438,67439,67441,67443],{"class":117,"line":2621},[115,67440,63735],{"class":1963},[115,67442,61282],{"class":51290},[115,67444,15573],{"class":125},[115,67446,67447,67449,67451,67453],{"class":117,"line":7949},[115,67448,54722],{"class":174},[115,67450,51427],{"class":125},[115,67452,54727],{"class":174},[115,67454,1291],{"class":125},[115,67456,67457,67459,67461,67463],{"class":117,"line":7973},[115,67458,54999],{"class":174},[115,67460,51427],{"class":125},[115,67462,51467],{"class":174},[115,67464,1291],{"class":125},[115,67466,67467,67469,67471,67473],{"class":117,"line":7978},[115,67468,55010],{"class":174},[115,67470,51427],{"class":125},[115,67472,51570],{"class":174},[115,67474,1291],{"class":125},[115,67476,67477],{"class":117,"line":7984},[115,67478,2187],{"class":125},[115,67480,67481],{"class":117,"line":8011},[115,67482,2400],{"emptyLinePlaceholder":42},[115,67484,67485,67487,67489,67491],{"class":117,"line":8016},[115,67486,63735],{"class":1963},[115,67488,61282],{"class":51290},[115,67490,55065],{"class":51290},[115,67492,15573],{"class":125},[115,67494,67495,67497,67499,67501,67503,67505],{"class":117,"line":8022},[115,67496,54696],{"class":174},[115,67498,51427],{"class":125},[115,67500,317],{"class":174},[115,67502,8951],{"class":174},[115,67504,51482],{"class":121},[115,67506,1291],{"class":125},[115,67508,67509,67511,67513,67515,67517],{"class":117,"line":8034},[115,67510,54912],{"class":174},[115,67512,51427],{"class":125},[115,67514,674],{"class":174},[115,67516,51482],{"class":121},[115,67518,1291],{"class":125},[115,67520,67521],{"class":117,"line":8046},[115,67522,2187],{"class":125},[115,67524,67525],{"class":117,"line":8058},[115,67526,2400],{"emptyLinePlaceholder":42},[115,67528,67529,67531,67533,67535,67537],{"class":117,"line":9717},[115,67530,63735],{"class":1963},[115,67532,61282],{"class":51290},[115,67534,55065],{"class":51290},[115,67536,1399],{"class":51290},[115,67538,15573],{"class":125},[115,67540,67541,67543,67545,67547],{"class":117,"line":9742},[115,67542,63960],{"class":174},[115,67544,51427],{"class":125},[115,67546,54727],{"class":174},[115,67548,1291],{"class":125},[115,67550,67551,67553,67555,67557,67559,67561,67563],{"class":117,"line":9765},[115,67552,62222],{"class":174},[115,67554,51427],{"class":125},[115,67556,203],{"class":174},[115,67558,51482],{"class":121},[115,67560,51511],{"class":174},[115,67562,63981],{"class":174},[115,67564,1291],{"class":125},[115,67566,67567,67569,67571,67573],{"class":117,"line":9789},[115,67568,57406],{"class":174},[115,67570,51427],{"class":125},[115,67572,62359],{"class":174},[115,67574,1291],{"class":125},[115,67576,67577],{"class":117,"line":9794},[115,67578,2187],{"class":125},[115,67580,67581],{"class":117,"line":9799},[115,67582,2400],{"emptyLinePlaceholder":42},[115,67584,67585,67587,67589,67591,67593,67595],{"class":117,"line":9804},[115,67586,63735],{"class":1963},[115,67588,61282],{"class":51290},[115,67590,55065],{"class":51290},[115,67592,1399],{"class":51290},[115,67594,64014],{"class":1963},[115,67596,15573],{"class":125},[115,67598,67599,67601,67603,67605],{"class":117,"line":9813},[115,67600,61781],{"class":174},[115,67602,51427],{"class":125},[115,67604,64025],{"class":174},[115,67606,1291],{"class":125},[115,67608,67609,67611,67613,67615],{"class":117,"line":9818},[115,67610,57406],{"class":174},[115,67612,51427],{"class":125},[115,67614,64025],{"class":174},[115,67616,1291],{"class":125},[115,67618,67619],{"class":117,"line":9824},[115,67620,2187],{"class":125},[115,67622,67623],{"class":117,"line":9845},[115,67624,2400],{"emptyLinePlaceholder":42},[115,67626,67627,67629],{"class":117,"line":9851},[115,67628,64050],{"class":1963},[115,67630,15573],{"class":125},[115,67632,67633,67635,67637,67639,67641,67643],{"class":117,"line":9865},[115,67634,54685],{"class":174},[115,67636,51427],{"class":125},[115,67638,317],{"class":174},[115,67640,64063],{"class":174},[115,67642,51482],{"class":121},[115,67644,1291],{"class":125},[115,67646,67647],{"class":117,"line":9871},[115,67648,2187],{"class":125},[115,67650,67651],{"class":117,"line":9898},[115,67652,2400],{"emptyLinePlaceholder":42},[115,67654,67655,67657,67659],{"class":117,"line":9907},[115,67656,64050],{"class":1963},[115,67658,62164],{"class":1963},[115,67660,15573],{"class":125},[115,67662,67663,67665,67667,67669],{"class":117,"line":9913},[115,67664,54999],{"class":174},[115,67666,51427],{"class":125},[115,67668,54727],{"class":174},[115,67670,1291],{"class":125},[115,67672,67673],{"class":117,"line":9921},[115,67674,2187],{"class":125},[115,67676,67677],{"class":117,"line":9926},[115,67678,2400],{"emptyLinePlaceholder":42},[115,67680,67681,67683,67686],{"class":117,"line":16605},[115,67682,64050],{"class":1963},[115,67684,67685],{"class":1963}," .active",[115,67687,15573],{"class":125},[115,67689,67690,67692,67694,67696],{"class":117,"line":16611},[115,67691,54999],{"class":174},[115,67693,51427],{"class":125},[115,67695,60859],{"class":174},[115,67697,1291],{"class":125},[115,67699,67700],{"class":117,"line":16634},[115,67701,2187],{"class":125},[115,67703,67704,67706,67708],{"class":117,"line":16640},[115,67705,52407],{"class":125},[115,67707,5127],{"class":51290},[115,67709,51297],{"class":125},[115,67711,67712,67714,67716],{"class":117,"line":16663},[115,67713,51775],{"class":125},[115,67715,51324],{"class":51290},[115,67717,51297],{"class":125},[115,67719,67720],{"class":117,"line":16677},[115,67721,2400],{"emptyLinePlaceholder":42},[115,67723,67724,67726,67728],{"class":117,"line":16697},[115,67725,1035],{"class":125},[115,67727,51790],{"class":51290},[115,67729,51297],{"class":125},[115,67731,67732,67734,67736,67738,67740,67742],{"class":117,"line":16703},[115,67733,52134],{"class":125},[115,67735,51601],{"class":51290},[115,67737,53476],{"class":1963},[115,67739,171],{"class":125},[115,67741,64165],{"class":230},[115,67743,51297],{"class":125},[115,67745,67746,67748,67750,67752,67754,67756],{"class":117,"line":16714},[115,67747,51331],{"class":125},[115,67749,51601],{"class":51290},[115,67751,53476],{"class":1963},[115,67753,171],{"class":125},[115,67755,64180],{"class":230},[115,67757,51297],{"class":125},[115,67759,67760,67762,67764,67766,67768],{"class":117,"line":16737},[115,67761,55224],{"class":125},[115,67763,86],{"class":51290},[115,67765,64191],{"class":125},[115,67767,86],{"class":51290},[115,67769,51297],{"class":125},[115,67771,67772,67774,67776],{"class":117,"line":16759},[115,67773,55224],{"class":125},[115,67775,1132],{"class":51290},[115,67777,51297],{"class":125},[115,67779,67780,67782,67784,67786,67788,67790,67792,67794,67796,67798,67800,67802,67804,67807,67809,67811,67813,67815],{"class":117,"line":16764},[115,67781,55292],{"class":125},[115,67783,72],{"class":51290},[115,67785,61042],{"class":125},[115,67787,27],{"class":51290},[115,67789,53476],{"class":1963},[115,67791,171],{"class":125},[115,67793,59696],{"class":230},[115,67795,61047],{"class":1963},[115,67797,171],{"class":125},[115,67799,64226],{"class":230},[115,67801,53941],{"class":1963},[115,67803,171],{"class":125},[115,67805,67806],{"class":230},"\"0\"",[115,67808,64229],{"class":125},[115,67810,27],{"class":51290},[115,67812,55304],{"class":125},[115,67814,72],{"class":51290},[115,67816,51297],{"class":125},[115,67818,67819,67821,67823,67825,67827,67829,67831,67833,67835,67837,67839,67841,67843,67845,67847],{"class":117,"line":16770},[115,67820,55292],{"class":125},[115,67822,72],{"class":51290},[115,67824,61042],{"class":125},[115,67826,27],{"class":51290},[115,67828,61047],{"class":1963},[115,67830,171],{"class":125},[115,67832,64226],{"class":230},[115,67834,53941],{"class":1963},[115,67836,171],{"class":125},[115,67838,3678],{"class":230},[115,67840,64256],{"class":125},[115,67842,27],{"class":51290},[115,67844,55304],{"class":125},[115,67846,72],{"class":51290},[115,67848,51297],{"class":125},[115,67850,67851,67853,67855,67857,67859,67861,67863,67865,67867,67869,67871,67873,67875,67877,67879],{"class":117,"line":16784},[115,67852,55292],{"class":125},[115,67854,72],{"class":51290},[115,67856,61042],{"class":125},[115,67858,27],{"class":51290},[115,67860,61047],{"class":1963},[115,67862,171],{"class":125},[115,67864,64226],{"class":230},[115,67866,53941],{"class":1963},[115,67868,171],{"class":125},[115,67870,3701],{"class":230},[115,67872,64283],{"class":125},[115,67874,27],{"class":51290},[115,67876,55304],{"class":125},[115,67878,72],{"class":51290},[115,67880,51297],{"class":125},[115,67882,67883,67885,67887,67889,67891,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911],{"class":117,"line":16797},[115,67884,55292],{"class":125},[115,67886,72],{"class":51290},[115,67888,61042],{"class":125},[115,67890,27],{"class":51290},[115,67892,61047],{"class":1963},[115,67894,171],{"class":125},[115,67896,64226],{"class":230},[115,67898,53941],{"class":1963},[115,67900,171],{"class":125},[115,67902,3714],{"class":230},[115,67904,64310],{"class":125},[115,67906,27],{"class":51290},[115,67908,55304],{"class":125},[115,67910,72],{"class":51290},[115,67912,51297],{"class":125},[115,67914,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943],{"class":117,"line":16802},[115,67916,55292],{"class":125},[115,67918,72],{"class":51290},[115,67920,61042],{"class":125},[115,67922,27],{"class":51290},[115,67924,61047],{"class":1963},[115,67926,171],{"class":125},[115,67928,64226],{"class":230},[115,67930,53941],{"class":1963},[115,67932,171],{"class":125},[115,67934,3727],{"class":230},[115,67936,64337],{"class":125},[115,67938,27],{"class":51290},[115,67940,55304],{"class":125},[115,67942,72],{"class":51290},[115,67944,51297],{"class":125},[115,67946,67947,67949,67951],{"class":117,"line":16816},[115,67948,55397],{"class":125},[115,67950,1132],{"class":51290},[115,67952,51297],{"class":125},[115,67954,67955,67957,67959],{"class":117,"line":16821},[115,67956,51766],{"class":125},[115,67958,51601],{"class":51290},[115,67960,51297],{"class":125},[115,67962,67963,67965,67967,67969,67971,67973],{"class":117,"line":16827},[115,67964,51331],{"class":125},[115,67966,51601],{"class":51290},[115,67968,53476],{"class":1963},[115,67970,171],{"class":125},[115,67972,64374],{"class":230},[115,67974,51297],{"class":125},[115,67976,67977,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007],{"class":117,"line":16832},[115,67978,55224],{"class":125},[115,67980,51601],{"class":51290},[115,67982,53476],{"class":1963},[115,67984,171],{"class":125},[115,67986,64389],{"class":230},[115,67988,61042],{"class":125},[115,67990,20],{"class":51290},[115,67992,55229],{"class":1963},[115,67994,171],{"class":125},[115,67996,64400],{"class":230},[115,67998,55237],{"class":1963},[115,68000,171],{"class":125},[115,68002,7653],{"class":230},[115,68004,64409],{"class":125},[115,68006,51601],{"class":51290},[115,68008,51297],{"class":125},[115,68010,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039,68041],{"class":117,"line":16846},[115,68012,55224],{"class":125},[115,68014,51601],{"class":51290},[115,68016,53476],{"class":1963},[115,68018,171],{"class":125},[115,68020,62613],{"class":230},[115,68022,61042],{"class":125},[115,68024,20],{"class":51290},[115,68026,55229],{"class":1963},[115,68028,171],{"class":125},[115,68030,64436],{"class":230},[115,68032,55237],{"class":1963},[115,68034,171],{"class":125},[115,68036,7653],{"class":230},[115,68038,64409],{"class":125},[115,68040,51601],{"class":51290},[115,68042,51297],{"class":125},[115,68044,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075],{"class":117,"line":16851},[115,68046,55224],{"class":125},[115,68048,51601],{"class":51290},[115,68050,53476],{"class":1963},[115,68052,171],{"class":125},[115,68054,62613],{"class":230},[115,68056,61042],{"class":125},[115,68058,20],{"class":51290},[115,68060,55229],{"class":1963},[115,68062,171],{"class":125},[115,68064,64471],{"class":230},[115,68066,55237],{"class":1963},[115,68068,171],{"class":125},[115,68070,7653],{"class":230},[115,68072,64409],{"class":125},[115,68074,51601],{"class":51290},[115,68076,51297],{"class":125},[115,68078,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109],{"class":117,"line":16856},[115,68080,55224],{"class":125},[115,68082,51601],{"class":51290},[115,68084,53476],{"class":1963},[115,68086,171],{"class":125},[115,68088,62613],{"class":230},[115,68090,61042],{"class":125},[115,68092,20],{"class":51290},[115,68094,55229],{"class":1963},[115,68096,171],{"class":125},[115,68098,64506],{"class":230},[115,68100,55237],{"class":1963},[115,68102,171],{"class":125},[115,68104,7653],{"class":230},[115,68106,64409],{"class":125},[115,68108,51601],{"class":51290},[115,68110,51297],{"class":125},[115,68112,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143],{"class":117,"line":16870},[115,68114,55224],{"class":125},[115,68116,51601],{"class":51290},[115,68118,53476],{"class":1963},[115,68120,171],{"class":125},[115,68122,62613],{"class":230},[115,68124,61042],{"class":125},[115,68126,20],{"class":51290},[115,68128,55229],{"class":1963},[115,68130,171],{"class":125},[115,68132,64541],{"class":230},[115,68134,55237],{"class":1963},[115,68136,171],{"class":125},[115,68138,7653],{"class":230},[115,68140,64409],{"class":125},[115,68142,51601],{"class":51290},[115,68144,51297],{"class":125},[115,68146,68147,68149,68151],{"class":117,"line":16882},[115,68148,51766],{"class":125},[115,68150,51601],{"class":51290},[115,68152,51297],{"class":125},[115,68154,68155,68157,68159],{"class":117,"line":16887},[115,68156,52407],{"class":125},[115,68158,51601],{"class":51290},[115,68160,51297],{"class":125},[115,68162,68163,68165,68167],{"class":117,"line":16900},[115,68164,52134],{"class":125},[115,68166,51803],{"class":51290},[115,68168,51297],{"class":125},[115,68170,68171],{"class":117,"line":16905},[115,68172,68173],{"class":184},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[115,68175,68176],{"class":117,"line":16910},[115,68177,68178],{"class":184},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[115,68180,68181,68183,68185,68187,68189,68191,68193,68196],{"class":117,"line":16915},[115,68182,11222],{"class":121},[115,68184,61282],{"class":174},[115,68186,13565],{"class":121},[115,68188,54386],{"class":125},[115,68190,54389],{"class":1963},[115,68192,126],{"class":125},[115,68194,68195],{"class":230},"'.tab-nav ul'",[115,68197,132],{"class":125},[115,68199,68200],{"class":117,"line":16928},[115,68201,68202],{"class":184},"    \u002F\u002F 2.添加事件\n",[115,68204,68205,68207,68209,68211,68213,68215,68217,68219,68221],{"class":117,"line":16933},[115,68206,66944],{"class":125},[115,68208,57803],{"class":1963},[115,68210,126],{"class":125},[115,68212,57808],{"class":230},[115,68214,12436],{"class":125},[115,68216,54439],{"class":121},[115,68218,1658],{"class":125},[115,68220,200],{"class":5217},[115,68222,12443],{"class":125},[115,68224,68225,68227,68229],{"class":117,"line":32634},[115,68226,58234],{"class":125},[115,68228,67000],{"class":1963},[115,68230,67003],{"class":125},[115,68232,68233],{"class":117,"line":32640},[115,68234,68235],{"class":184},"      \u002F\u002Fe.targer是我们点击的对象\n",[115,68237,68238,68240,68242,68244,68247],{"class":117,"line":32646},[115,68239,54470],{"class":121},[115,68241,67024],{"class":125},[115,68243,54476],{"class":121},[115,68245,68246],{"class":230}," 'A'",[115,68248,12443],{"class":125},[115,68250,68251,68253,68255,68257,68260,68262,68264,68266,68268],{"class":117,"line":32652},[115,68252,51915],{"class":125},[115,68254,54389],{"class":1963},[115,68256,126],{"class":125},[115,68258,68259],{"class":230},"'.active'",[115,68261,56993],{"class":125},[115,68263,56996],{"class":1963},[115,68265,126],{"class":125},[115,68267,64704],{"class":230},[115,68269,132],{"class":125},[115,68271,68272,68275,68277,68279,68281],{"class":117,"line":32658},[115,68273,68274],{"class":125},"        e.target.classList.",[115,68276,5335],{"class":1963},[115,68278,126],{"class":125},[115,68280,64704],{"class":230},[115,68282,132],{"class":125},[115,68284,68285],{"class":117,"line":32669},[115,68286,2400],{"emptyLinePlaceholder":42},[115,68288,68289],{"class":117,"line":32675},[115,68290,68291],{"class":184},"        \u002F\u002F 下面大盒子模块\n",[115,68293,68294],{"class":117,"line":32695},[115,68295,68296],{"class":184},"        \u002F\u002F console.log(e.target.dataset.id)\n",[115,68298,68299,68301,68303,68305,68307],{"class":117,"line":32701},[115,68300,61260],{"class":121},[115,68302,3032],{"class":174},[115,68304,13565],{"class":121},[115,68306,45567],{"class":121},[115,68308,68309],{"class":125},"e.target.dataset.id\n",[115,68311,68312,68314,68316,68318,68320,68322,68324,68326,68328],{"class":117,"line":32712},[115,68313,51915],{"class":125},[115,68315,54389],{"class":1963},[115,68317,126],{"class":125},[115,68319,64752],{"class":230},[115,68321,56993],{"class":125},[115,68323,56996],{"class":1963},[115,68325,126],{"class":125},[115,68327,64704],{"class":230},[115,68329,132],{"class":125},[115,68331,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356],{"class":117,"line":32718},[115,68333,51915],{"class":125},[115,68335,54389],{"class":1963},[115,68337,126],{"class":125},[115,68339,64778],{"class":230},[115,68341,566],{"class":125},[115,68343,45567],{"class":121},[115,68345,25119],{"class":174},[115,68347,57022],{"class":230},[115,68349,56993],{"class":125},[115,68351,5335],{"class":1963},[115,68353,126],{"class":125},[115,68355,64704],{"class":230},[115,68357,132],{"class":125},[115,68359,68360],{"class":117,"line":32724},[115,68361,2400],{"emptyLinePlaceholder":42},[115,68363,68364],{"class":117,"line":32730},[115,68365,52388],{"class":125},[115,68367,68368],{"class":117,"line":32736},[115,68369,33462],{"class":125},[115,68371,68372,68374,68376],{"class":117,"line":32742},[115,68373,52407],{"class":125},[115,68375,51803],{"class":51290},[115,68377,51297],{"class":125},[115,68379,68380,68382,68384],{"class":117,"line":32748},[115,68381,51775],{"class":125},[115,68383,51790],{"class":51290},[115,68385,51297],{"class":125},[115,68387,68388],{"class":117,"line":32754},[115,68389,2400],{"emptyLinePlaceholder":42},[115,68391,68392,68394,68396],{"class":117,"line":32774},[115,68393,51775],{"class":125},[115,68395,50625],{"class":51290},[115,68397,51297],{"class":125},[86,68399,68401],{"id":68400},"_333-页面加载事件","3.3.3 页面加载事件",[69,68403,68404],{},[72,68405,68406],{},"load",[14,68408,68409],{},[20,68410],{"alt":22,"src":68411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68413,68414],{},"window代表整个窗口，比document还要大",[14,68416,68417],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68419,68420],{},"img.addEventListener('load', function () {",[14,68422,68423],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68425,52454],{},[69,68427,68428],{"start":37},[72,68429,68430],{},"DOMContentLoaded",[14,68432,68433],{},[20,68434],{"alt":22,"src":68435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68437,68438],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[86,68440,68442],{"id":68441},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68444,68445],{},[20,68446],{"alt":22,"src":68447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68449,68450],{},[20,68451],{"alt":22,"src":68452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68454,68455],{},[20,68456],{"alt":22,"src":68457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68459,68460],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68462,68463],{},"获得的是数字型数据，不带单位",[14,68465,68466],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68468,68469],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68471,68472],{},"它是通过document.documentElement来获取",[14,68474,68475],{},[20,68476],{"alt":22,"src":68477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68479,68480],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[86,68482,68484],{"id":68483},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68486,68487],{},[20,68488],{"alt":22,"src":68489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68491,68492],{},[20,68493],{"alt":22,"src":68494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[86,68496,68498],{"id":68497},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68500,68501],{},[20,68502],{"alt":22,"src":68503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68505,68506],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68508,68509],{},[20,68510],{"alt":22,"src":68511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68513,68514],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68516,68517],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68519,68520],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68522,68523],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68525,68526],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68528,68529],{},[20,68530],{"alt":22,"src":68531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68533,68534],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68536,68537],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68539,68540],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68542,68543],{},"e.pageX-box.getBoundingClientRect()",[86,68545,68547],{"id":68546},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68549,68550],{},[20,68551],{"alt":22,"src":68552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68554,68555],{},"这个是相对于视口来说的，它是个方法，不是属性值",[86,68557,68559],{"id":68558},"_338-总结","3.3.8 总结",[14,68561,68562],{},[20,68563],{"alt":22,"src":68564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68566,68567],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68569,68570],{},"修改盒子的宽高只能通过width和height来实现",[86,68572,68574],{"id":68573},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[106,68576,68578],{"className":50623,"code":68577,"language":50625,"meta":22,"style":22},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[112,68579,68580,68585,68590,68595,68600],{"__ignoreMap":22},[115,68581,68582],{"class":117,"line":118},[115,68583,68584],{"class":125},"\u002F* 页面滑动 *\u002F\n",[115,68586,68587],{"class":117,"line":37},[115,68588,68589],{"class":125},"html {\n",[115,68591,68592],{"class":117,"line":1180},[115,68593,68594],{"class":125},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[115,68596,68597],{"class":117,"line":1195},[115,68598,68599],{"class":125},"  scroll-behavior: smooth;\n",[115,68601,68602],{"class":117,"line":1201},[115,68603,1565],{"class":125},[14,68605,68606],{},"默认是auto",[86,68608,68610],{"id":68609},"_3310-日期对象","3.3.10 日期对象",[21999,68612,68614],{"id":68613},"_33101-实例化","3.3.10.1 实例化",[14,68616,68617],{},[20,68618],{"alt":22,"src":68619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21999,68621,68623],{"id":68622},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68625,68626],{},[20,68627],{"alt":22,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68630,68631],{},"月份+1",[14,68633,68634],{},"老外认为第一天为0，星期天",[14,68636,68637],{},"方法使用的时候必须要跟括号",[14,68639,68640],{},"快速获得日期",[14,68642,68643],{},"\u002F\u002F 得到年月日",[14,68645,68646],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68648,68649],{},"\u002F\u002F 得到当地日期",[14,68651,68652],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68654,68655],{},"\u002F\u002F 得到当地时间",[14,68657,68658],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68660,68661],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68663,68664],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51803,68666,68667],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68669,68670],{},"学会去封装函数！",[21999,68672,68674],{"id":68673},"_33103-时间戳","3.3.10.3 时间戳",[14,68676,68677],{},[20,68678],{"alt":22,"src":68679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68681,68682],{},[20,68683],{"alt":22,"src":68684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68686,68687],{},"三种方法记住一个就可以",[86,68689,68691],{"id":68690},"_3311-节点操作","3.3.11 节点操作",[21999,68693,68695],{"id":68694},"_33111-dom节点","3.3.11.1 DOM节点",[14,68697,68698],{},[20,68699],{"alt":22,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68702,68703],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21999,68705,68707],{"id":68706},"_33112-查找节点","3.3.11.2 查找节点",[14,68709,68710],{},"前边的document.querySelector()是获取的元素",[14,68712,68713],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68715,68716],{},[20,68717],{"alt":22,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[69,68720,68721],{},[72,68722,68723],{},"父节点",[14,68725,68726],{},[20,68727],{"alt":22,"src":68728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[69,68730,68731],{"start":37},[72,68732,68733],{},"子节点",[14,68735,68736],{},[20,68737],{"alt":22,"src":68738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68740,68741],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68743,68744],{},"children获得的是伪数组，是亲儿子",[69,68746,68747],{"start":1180},[72,68748,68749],{},"兄弟节点",[14,68751,68752],{},[20,68753],{"alt":22,"src":68754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21999,68756,68758],{"id":68757},"_33113-增加节点","3.3.11.3 增加节点",[14,68760,68761],{},[20,68762],{"alt":22,"src":68763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68765,68766],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68768,68769],{},[20,68770],{"alt":22,"src":68771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68773,68774],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68776,68777],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68779,68780],{},"例：",[51803,68782,68783],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68785,68786],{},[20,68787],{"alt":22,"src":68788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68790,68791],{},"false只克隆标签，里边的内容不会克隆过来",[106,68793,68795],{"className":50623,"code":68794,"language":50625,"meta":22,"style":22},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[112,68796,68797],{"__ignoreMap":22},[115,68798,68799],{"class":117,"line":118},[115,68800,68794],{"class":125},[21999,68802,68804],{"id":68803},"_33114-删除节点","3.3.11.4 删除节点",[14,68806,68807],{},[20,68808],{"alt":22,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68811,68812],{},"父亲删儿子",[14,68814,68815],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[86,68817,68819],{"id":68818},"_3312-m端事件","3.3.12 M端事件",[14,68821,68822],{},"M端就是移动端",[14,68824,68825],{},[20,68826],{"alt":22,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[86,68829,68831],{"id":68830},"_3313-插件","3.3.13 插件",[14,68833,68834],{},"要熟悉官网！！！",[14,68836,68837],{},[27,68838,68839],{"href":68839,"rel":68840},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[31],[14,68842,68843],{},[27,68844,68845],{"href":68845,"rel":68846},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[31],[86,68848,68850],{"id":68849},"_3314-学生信息表","3.3.14 学生信息表",[69,68852,68853,68856,68859,68862,68865,68868,68871,68874],{},[72,68854,68855],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[72,68857,68858],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[72,68860,68861],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[72,68863,68864],{},"用好表单元素自带的属性，value,name等",[72,68866,68867],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[72,68869,68870],{},"不要忘记事件对象",[72,68872,68873],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[72,68875,68876],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68878,68879],{},"结构：",[106,68881,68883],{"className":50623,"code":68882,"language":50625,"meta":22,"style":22},"\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",[112,68884,68885,68895,68909,68913,68921,68935,68955,68976,68989,69013,69021,69025,69033,69046,69067,69095,69123,69128,69150,69170,69189,69197,69225,69247,69267,69287,69307,69327,69347,69355,69375,69383,69387,69400,69408,69416,69424,69437,69450,69463,69476,69489,69502,69515,69523,69531,69539,69544,69549,69554,69559,69564,69569,69574,69579,69584,69589,69594,69599,69604,69612,69620,69628,69632,69652,69671,69691,69711,69731,69751,69755,69760,69780,69785,69795,69800,69805,69825,69847,69852,69862,69866,69870,69875,69880,69909,69923,69938,69942,69946,69950,69955,69966,69979,69984,69989,69994,69999,70004,70008,70013,70018,70027,70032,70037,70049,70054,70061,70065,70070,70080,70085,70095,70100,70128,70149,70159,70179,70197,70214,70231,70248,70265,70269,70279,70284,70289,70294,70305,70309,70313,70317,70322,70327,70348,70360,70365,70370,70375,70389,70394,70401,70405,70409,70417,70421,70429,70433],{"__ignoreMap":22},[115,68886,68887,68889,68891,68893],{"class":117,"line":118},[115,68888,51287],{"class":125},[115,68890,51291],{"class":51290},[115,68892,51294],{"class":1963},[115,68894,51297],{"class":125},[115,68896,68897,68899,68901,68903,68905,68907],{"class":117,"line":37},[115,68898,1035],{"class":125},[115,68900,50625],{"class":51290},[115,68902,51306],{"class":1963},[115,68904,171],{"class":125},[115,68906,51311],{"class":230},[115,68908,51297],{"class":125},[115,68910,68911],{"class":117,"line":1180},[115,68912,2400],{"emptyLinePlaceholder":42},[115,68914,68915,68917,68919],{"class":117,"line":1195},[115,68916,1035],{"class":125},[115,68918,51324],{"class":51290},[115,68920,51297],{"class":125},[115,68922,68923,68925,68927,68929,68931,68933],{"class":117,"line":1201},[115,68924,52134],{"class":125},[115,68926,51334],{"class":51290},[115,68928,51337],{"class":1963},[115,68930,171],{"class":125},[115,68932,51342],{"class":230},[115,68934,59117],{"class":125},[115,68936,68937,68939,68941,68943,68945,68947,68949,68951,68953],{"class":117,"line":1215},[115,68938,52134],{"class":125},[115,68940,51334],{"class":51290},[115,68942,14921],{"class":1963},[115,68944,171],{"class":125},[115,68946,51381],{"class":230},[115,68948,51361],{"class":1963},[115,68950,171],{"class":125},[115,68952,51388],{"class":230},[115,68954,59117],{"class":125},[115,68956,68957,68959,68961,68963,68965,68967,68969,68971,68974],{"class":117,"line":1221},[115,68958,52134],{"class":125},[115,68960,51334],{"class":51290},[115,68962,51353],{"class":1963},[115,68964,171],{"class":125},[115,68966,51358],{"class":230},[115,68968,51361],{"class":1963},[115,68970,171],{"class":125},[115,68972,68973],{"class":230},"\"ie=edge\"",[115,68975,59117],{"class":125},[115,68977,68978,68980,68982,68985,68987],{"class":117,"line":1312},[115,68979,52134],{"class":125},[115,68981,51397],{"class":51290},[115,68983,68984],{"class":125},">学生信息管理\u003C\u002F",[115,68986,51397],{"class":51290},[115,68988,51297],{"class":125},[115,68990,68991,68993,68996,68999,69001,69004,69006,69008,69011],{"class":117,"line":1318},[115,68992,52134],{"class":125},[115,68994,68995],{"class":51290},"link",[115,68997,68998],{"class":1963}," rel",[115,69000,171],{"class":125},[115,69002,69003],{"class":230},"\"stylesheet\"",[115,69005,61047],{"class":1963},[115,69007,171],{"class":125},[115,69009,69010],{"class":230},"\"css\u002Findex.css\"",[115,69012,59117],{"class":125},[115,69014,69015,69017,69019],{"class":117,"line":1330},[115,69016,51775],{"class":125},[115,69018,51324],{"class":51290},[115,69020,51297],{"class":125},[115,69022,69023],{"class":117,"line":1612},[115,69024,2400],{"emptyLinePlaceholder":42},[115,69026,69027,69029,69031],{"class":117,"line":1617},[115,69028,1035],{"class":125},[115,69030,51790],{"class":51290},[115,69032,51297],{"class":125},[115,69034,69035,69037,69039,69042,69044],{"class":117,"line":1623},[115,69036,52134],{"class":125},[115,69038,10],{"class":51290},[115,69040,69041],{"class":125},">新增学员\u003C\u002F",[115,69043,10],{"class":51290},[115,69045,51297],{"class":125},[115,69047,69048,69050,69052,69054,69056,69058,69061,69063,69065],{"class":117,"line":1628},[115,69049,52134],{"class":125},[115,69051,66615],{"class":51290},[115,69053,53476],{"class":1963},[115,69055,171],{"class":125},[115,69057,62654],{"class":230},[115,69059,69060],{"class":1963}," autocomplete",[115,69062,171],{"class":125},[115,69064,31777],{"class":230},[115,69066,51297],{"class":125},[115,69068,69069,69072,69074,69076,69078,69080,69082,69084,69087,69089,69091,69093],{"class":117,"line":1642},[115,69070,69071],{"class":125},"    姓名：\u003C",[115,69073,53811],{"class":51290},[115,69075,53814],{"class":1963},[115,69077,171],{"class":125},[115,69079,62689],{"class":230},[115,69081,53476],{"class":1963},[115,69083,171],{"class":125},[115,69085,69086],{"class":230},"\"uname\"",[115,69088,14921],{"class":1963},[115,69090,171],{"class":125},[115,69092,69086],{"class":230},[115,69094,59117],{"class":125},[115,69096,69097,69100,69102,69104,69106,69108,69110,69112,69115,69117,69119,69121],{"class":117,"line":1647},[115,69098,69099],{"class":125},"    年龄：\u003C",[115,69101,53811],{"class":51290},[115,69103,53814],{"class":1963},[115,69105,171],{"class":125},[115,69107,62689],{"class":230},[115,69109,53476],{"class":1963},[115,69111,171],{"class":125},[115,69113,69114],{"class":230},"\"age\"",[115,69116,14921],{"class":1963},[115,69118,171],{"class":125},[115,69120,69114],{"class":230},[115,69122,59117],{"class":125},[115,69124,69125],{"class":117,"line":1653},[115,69126,69127],{"class":125},"    性别:\n",[115,69129,69130,69132,69135,69137,69139,69142,69144,69146,69148],{"class":117,"line":1674},[115,69131,51331],{"class":125},[115,69133,69134],{"class":51290},"select",[115,69136,14921],{"class":1963},[115,69138,171],{"class":125},[115,69140,69141],{"class":230},"\"gender\"",[115,69143,53476],{"class":1963},[115,69145,171],{"class":125},[115,69147,69141],{"class":230},[115,69149,51297],{"class":125},[115,69151,69152,69154,69157,69159,69161,69163,69166,69168],{"class":117,"line":1679},[115,69153,55224],{"class":125},[115,69155,69156],{"class":51290},"option",[115,69158,66641],{"class":1963},[115,69160,171],{"class":125},[115,69162,9962],{"class":230},[115,69164,69165],{"class":125},">男\u003C\u002F",[115,69167,69156],{"class":51290},[115,69169,51297],{"class":125},[115,69171,69172,69174,69176,69178,69180,69182,69185,69187],{"class":117,"line":1693},[115,69173,55224],{"class":125},[115,69175,69156],{"class":51290},[115,69177,66641],{"class":1963},[115,69179,171],{"class":125},[115,69181,10031],{"class":230},[115,69183,69184],{"class":125},">女\u003C\u002F",[115,69186,69156],{"class":51290},[115,69188,51297],{"class":125},[115,69190,69191,69193,69195],{"class":117,"line":1698},[115,69192,51766],{"class":125},[115,69194,69134],{"class":51290},[115,69196,51297],{"class":125},[115,69198,69199,69202,69204,69206,69208,69210,69212,69214,69217,69219,69221,69223],{"class":117,"line":1727},[115,69200,69201],{"class":125},"    薪资：\u003C",[115,69203,53811],{"class":51290},[115,69205,53814],{"class":1963},[115,69207,171],{"class":125},[115,69209,62689],{"class":230},[115,69211,53476],{"class":1963},[115,69213,171],{"class":125},[115,69215,69216],{"class":230},"\"salary\"",[115,69218,14921],{"class":1963},[115,69220,171],{"class":125},[115,69222,69216],{"class":230},[115,69224,59117],{"class":125},[115,69226,69227,69230,69232,69234,69236,69239,69241,69243,69245],{"class":117,"line":1732},[115,69228,69229],{"class":125},"    就业城市：\u003C",[115,69231,69134],{"class":51290},[115,69233,14921],{"class":1963},[115,69235,171],{"class":125},[115,69237,69238],{"class":230},"\"city\"",[115,69240,53476],{"class":1963},[115,69242,171],{"class":125},[115,69244,69238],{"class":230},[115,69246,51297],{"class":125},[115,69248,69249,69251,69253,69255,69257,69260,69263,69265],{"class":117,"line":1749},[115,69250,55224],{"class":125},[115,69252,69156],{"class":51290},[115,69254,66641],{"class":1963},[115,69256,171],{"class":125},[115,69258,69259],{"class":230},"\"北京\"",[115,69261,69262],{"class":125},">北京\u003C\u002F",[115,69264,69156],{"class":51290},[115,69266,51297],{"class":125},[115,69268,69269,69271,69273,69275,69277,69280,69283,69285],{"class":117,"line":1754},[115,69270,55224],{"class":125},[115,69272,69156],{"class":51290},[115,69274,66641],{"class":1963},[115,69276,171],{"class":125},[115,69278,69279],{"class":230},"\"上海\"",[115,69281,69282],{"class":125},">上海\u003C\u002F",[115,69284,69156],{"class":51290},[115,69286,51297],{"class":125},[115,69288,69289,69291,69293,69295,69297,69300,69303,69305],{"class":117,"line":1759},[115,69290,55224],{"class":125},[115,69292,69156],{"class":51290},[115,69294,66641],{"class":1963},[115,69296,171],{"class":125},[115,69298,69299],{"class":230},"\"广州\"",[115,69301,69302],{"class":125},">广州\u003C\u002F",[115,69304,69156],{"class":51290},[115,69306,51297],{"class":125},[115,69308,69309,69311,69313,69315,69317,69320,69323,69325],{"class":117,"line":1764},[115,69310,55224],{"class":125},[115,69312,69156],{"class":51290},[115,69314,66641],{"class":1963},[115,69316,171],{"class":125},[115,69318,69319],{"class":230},"\"深圳\"",[115,69321,69322],{"class":125},">深圳\u003C\u002F",[115,69324,69156],{"class":51290},[115,69326,51297],{"class":125},[115,69328,69329,69331,69333,69335,69337,69340,69343,69345],{"class":117,"line":1778},[115,69330,55224],{"class":125},[115,69332,69156],{"class":51290},[115,69334,66641],{"class":1963},[115,69336,171],{"class":125},[115,69338,69339],{"class":230},"\"曹县\"",[115,69341,69342],{"class":125},">曹县\u003C\u002F",[115,69344,69156],{"class":51290},[115,69346,51297],{"class":125},[115,69348,69349,69351,69353],{"class":117,"line":1783},[115,69350,51766],{"class":125},[115,69352,69134],{"class":51290},[115,69354,51297],{"class":125},[115,69356,69357,69359,69361,69363,69365,69368,69371,69373],{"class":117,"line":2577},[115,69358,51331],{"class":125},[115,69360,53877],{"class":51290},[115,69362,53476],{"class":1963},[115,69364,171],{"class":125},[115,69366,69367],{"class":230},"\"add\"",[115,69369,69370],{"class":125},">录入\u003C\u002F",[115,69372,53877],{"class":51290},[115,69374,51297],{"class":125},[115,69376,69377,69379,69381],{"class":117,"line":2591},[115,69378,52407],{"class":125},[115,69380,66615],{"class":51290},[115,69382,51297],{"class":125},[115,69384,69385],{"class":117,"line":2599},[115,69386,2400],{"emptyLinePlaceholder":42},[115,69388,69389,69391,69393,69396,69398],{"class":117,"line":2604},[115,69390,52134],{"class":125},[115,69392,10],{"class":51290},[115,69394,69395],{"class":125},">就业榜\u003C\u002F",[115,69397,10],{"class":51290},[115,69399,51297],{"class":125},[115,69401,69402,69404,69406],{"class":117,"line":2610},[115,69403,52134],{"class":125},[115,69405,263],{"class":51290},[115,69407,51297],{"class":125},[115,69409,69410,69412,69414],{"class":117,"line":2616},[115,69411,51331],{"class":125},[115,69413,266],{"class":51290},[115,69415,51297],{"class":125},[115,69417,69418,69420,69422],{"class":117,"line":2621},[115,69419,55224],{"class":125},[115,69421,269],{"class":51290},[115,69423,51297],{"class":125},[115,69425,69426,69428,69430,69433,69435],{"class":117,"line":7949},[115,69427,55292],{"class":125},[115,69429,272],{"class":51290},[115,69431,69432],{"class":125},">序号\u003C\u002F",[115,69434,272],{"class":51290},[115,69436,51297],{"class":125},[115,69438,69439,69441,69443,69446,69448],{"class":117,"line":7973},[115,69440,55292],{"class":125},[115,69442,272],{"class":51290},[115,69444,69445],{"class":125},">姓名\u003C\u002F",[115,69447,272],{"class":51290},[115,69449,51297],{"class":125},[115,69451,69452,69454,69456,69459,69461],{"class":117,"line":7978},[115,69453,55292],{"class":125},[115,69455,272],{"class":51290},[115,69457,69458],{"class":125},">年龄\u003C\u002F",[115,69460,272],{"class":51290},[115,69462,51297],{"class":125},[115,69464,69465,69467,69469,69472,69474],{"class":117,"line":7984},[115,69466,55292],{"class":125},[115,69468,272],{"class":51290},[115,69470,69471],{"class":125},">性别\u003C\u002F",[115,69473,272],{"class":51290},[115,69475,51297],{"class":125},[115,69477,69478,69480,69482,69485,69487],{"class":117,"line":8011},[115,69479,55292],{"class":125},[115,69481,272],{"class":51290},[115,69483,69484],{"class":125},">薪资\u003C\u002F",[115,69486,272],{"class":51290},[115,69488,51297],{"class":125},[115,69490,69491,69493,69495,69498,69500],{"class":117,"line":8016},[115,69492,55292],{"class":125},[115,69494,272],{"class":51290},[115,69496,69497],{"class":125},">就业城市\u003C\u002F",[115,69499,272],{"class":51290},[115,69501,51297],{"class":125},[115,69503,69504,69506,69508,69511,69513],{"class":117,"line":8022},[115,69505,55292],{"class":125},[115,69507,272],{"class":51290},[115,69509,69510],{"class":125},">操作\u003C\u002F",[115,69512,272],{"class":51290},[115,69514,51297],{"class":125},[115,69516,69517,69519,69521],{"class":117,"line":8034},[115,69518,55397],{"class":125},[115,69520,269],{"class":51290},[115,69522,51297],{"class":125},[115,69524,69525,69527,69529],{"class":117,"line":8046},[115,69526,51766],{"class":125},[115,69528,266],{"class":51290},[115,69530,51297],{"class":125},[115,69532,69533,69535,69537],{"class":117,"line":8058},[115,69534,51331],{"class":125},[115,69536,310],{"class":51290},[115,69538,51297],{"class":125},[115,69540,69541],{"class":117,"line":9717},[115,69542,69543],{"class":184},"      \u003C!-- \n",[115,69545,69546],{"class":117,"line":9742},[115,69547,69548],{"class":184},"        \u003Ctr>\n",[115,69550,69551],{"class":117,"line":9765},[115,69552,69553],{"class":184},"          \u003Ctd>1001\u003C\u002Ftd>\n",[115,69555,69556],{"class":117,"line":9789},[115,69557,69558],{"class":184},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[115,69560,69561],{"class":117,"line":9794},[115,69562,69563],{"class":184},"          \u003Ctd>19\u003C\u002Ftd>\n",[115,69565,69566],{"class":117,"line":9799},[115,69567,69568],{"class":184},"          \u003Ctd>男\u003C\u002Ftd>\n",[115,69570,69571],{"class":117,"line":9804},[115,69572,69573],{"class":184},"          \u003Ctd>15000\u003C\u002Ftd>\n",[115,69575,69576],{"class":117,"line":9813},[115,69577,69578],{"class":184},"          \u003Ctd>上海\u003C\u002Ftd>\n",[115,69580,69581],{"class":117,"line":9818},[115,69582,69583],{"class":184},"          \u003Ctd>\n",[115,69585,69586],{"class":117,"line":9824},[115,69587,69588],{"class":184},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[115,69590,69591],{"class":117,"line":9845},[115,69592,69593],{"class":184},"          \u003C\u002Ftd>\n",[115,69595,69596],{"class":117,"line":9851},[115,69597,69598],{"class":184},"        \u003C\u002Ftr> \n",[115,69600,69601],{"class":117,"line":9865},[115,69602,69603],{"class":184},"        -->\n",[115,69605,69606,69608,69610],{"class":117,"line":9871},[115,69607,51766],{"class":125},[115,69609,310],{"class":51290},[115,69611,51297],{"class":125},[115,69613,69614,69616,69618],{"class":117,"line":9898},[115,69615,52407],{"class":125},[115,69617,263],{"class":51290},[115,69619,51297],{"class":125},[115,69621,69622,69624,69626],{"class":117,"line":9907},[115,69623,52134],{"class":125},[115,69625,51803],{"class":51290},[115,69627,51297],{"class":125},[115,69629,69630],{"class":117,"line":9913},[115,69631,59948],{"class":184},[115,69633,69634,69636,69639,69641,69643,69645,69647,69650],{"class":117,"line":9921},[115,69635,11222],{"class":121},[115,69637,69638],{"class":174}," uname",[115,69640,13565],{"class":121},[115,69642,54386],{"class":125},[115,69644,54389],{"class":1963},[115,69646,126],{"class":125},[115,69648,69649],{"class":230},"'.uname'",[115,69651,132],{"class":125},[115,69653,69654,69656,69658,69660,69662,69664,69666,69669],{"class":117,"line":9926},[115,69655,11222],{"class":121},[115,69657,15690],{"class":174},[115,69659,13565],{"class":121},[115,69661,54386],{"class":125},[115,69663,54389],{"class":1963},[115,69665,126],{"class":125},[115,69667,69668],{"class":230},"'.age'",[115,69670,132],{"class":125},[115,69672,69673,69675,69678,69680,69682,69684,69686,69689],{"class":117,"line":16605},[115,69674,11222],{"class":121},[115,69676,69677],{"class":174}," gender",[115,69679,13565],{"class":121},[115,69681,54386],{"class":125},[115,69683,54389],{"class":1963},[115,69685,126],{"class":125},[115,69687,69688],{"class":230},"'.gender'",[115,69690,132],{"class":125},[115,69692,69693,69695,69698,69700,69702,69704,69706,69709],{"class":117,"line":16611},[115,69694,11222],{"class":121},[115,69696,69697],{"class":174}," salary",[115,69699,13565],{"class":121},[115,69701,54386],{"class":125},[115,69703,54389],{"class":1963},[115,69705,126],{"class":125},[115,69707,69708],{"class":230},"'.salary'",[115,69710,132],{"class":125},[115,69712,69713,69715,69718,69720,69722,69724,69726,69729],{"class":117,"line":16634},[115,69714,11222],{"class":121},[115,69716,69717],{"class":174}," city",[115,69719,13565],{"class":121},[115,69721,54386],{"class":125},[115,69723,54389],{"class":1963},[115,69725,126],{"class":125},[115,69727,69728],{"class":230},"'.city'",[115,69730,132],{"class":125},[115,69732,69733,69735,69738,69740,69742,69744,69746,69749],{"class":117,"line":16640},[115,69734,11222],{"class":121},[115,69736,69737],{"class":174}," tbody",[115,69739,13565],{"class":121},[115,69741,54386],{"class":125},[115,69743,54389],{"class":1963},[115,69745,126],{"class":125},[115,69747,69748],{"class":230},"'tbody'",[115,69750,132],{"class":125},[115,69752,69753],{"class":117,"line":16663},[115,69754,2400],{"emptyLinePlaceholder":42},[115,69756,69757],{"class":117,"line":16677},[115,69758,69759],{"class":184},"    \u002F\u002F 获取所有带有name属性的元素\n",[115,69761,69762,69764,69767,69769,69771,69773,69775,69778],{"class":117,"line":16697},[115,69763,11222],{"class":121},[115,69765,69766],{"class":174}," items",[115,69768,13565],{"class":121},[115,69770,54386],{"class":125},[115,69772,55671],{"class":1963},[115,69774,126],{"class":125},[115,69776,69777],{"class":230},"'[name]'",[115,69779,132],{"class":125},[115,69781,69782],{"class":117,"line":16703},[115,69783,69784],{"class":184},"    \u002F\u002F 声明一个空的数组\n",[115,69786,69787,69789,69791,69793],{"class":117,"line":16714},[115,69788,11222],{"class":121},[115,69790,57685],{"class":174},[115,69792,13565],{"class":121},[115,69794,51828],{"class":125},[115,69796,69797],{"class":117,"line":16737},[115,69798,69799],{"class":184},"    \u002F\u002F 1.录入模块\n",[115,69801,69802],{"class":117,"line":16759},[115,69803,69804],{"class":184},"    \u002F\u002F 1.1这是一个表单提交事件\n",[115,69806,69807,69809,69812,69814,69816,69818,69820,69823],{"class":117,"line":16764},[115,69808,11222],{"class":121},[115,69810,69811],{"class":174}," info",[115,69813,13565],{"class":121},[115,69815,54386],{"class":125},[115,69817,54389],{"class":1963},[115,69819,126],{"class":125},[115,69821,69822],{"class":230},"'.info'",[115,69824,132],{"class":125},[115,69826,69827,69830,69832,69834,69837,69839,69841,69843,69845],{"class":117,"line":16770},[115,69828,69829],{"class":125},"    info.",[115,69831,57803],{"class":1963},[115,69833,126],{"class":125},[115,69835,69836],{"class":230},"'submit'",[115,69838,12436],{"class":125},[115,69840,54439],{"class":121},[115,69842,1658],{"class":125},[115,69844,200],{"class":5217},[115,69846,12443],{"class":125},[115,69848,69849],{"class":117,"line":16784},[115,69850,69851],{"class":184},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[115,69853,69854,69857,69860],{"class":117,"line":16797},[115,69855,69856],{"class":125},"      e.",[115,69858,69859],{"class":1963},"preventDefault",[115,69861,1976],{"class":125},[115,69863,69864],{"class":117,"line":16802},[115,69865,60002],{"class":184},[115,69867,69868],{"class":117,"line":16816},[115,69869,2400],{"emptyLinePlaceholder":42},[115,69871,69872],{"class":117,"line":16821},[115,69873,69874],{"class":184},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[115,69876,69877],{"class":117,"line":16827},[115,69878,69879],{"class":184},"      \u002F\u002F 先遍历循环\n",[115,69881,69882,69884,69886,69888,69890,69892,69894,69896,69898,69901,69903,69905,69907],{"class":117,"line":16832},[115,69883,52274],{"class":121},[115,69885,1658],{"class":125},[115,69887,51837],{"class":121},[115,69889,9439],{"class":125},[115,69891,171],{"class":121},[115,69893,4093],{"class":174},[115,69895,9446],{"class":125},[115,69897,1035],{"class":121},[115,69899,69900],{"class":125}," items.",[115,69902,51958],{"class":174},[115,69904,3214],{"class":125},[115,69906,2292],{"class":121},[115,69908,12443],{"class":125},[115,69910,69911,69913,69916,69918,69921],{"class":117,"line":16846},[115,69912,2497],{"class":121},[115,69914,69915],{"class":125}," (items[i].value ",[115,69917,54476],{"class":121},[115,69919,69920],{"class":230}," ''",[115,69922,12443],{"class":125},[115,69924,69925,69928,69931,69933,69936],{"class":117,"line":16851},[115,69926,69927],{"class":121},"          return",[115,69929,69930],{"class":1963}," alert",[115,69932,126],{"class":125},[115,69934,69935],{"class":230},"'输入内容不能为空'",[115,69937,132],{"class":125},[115,69939,69940],{"class":117,"line":16856},[115,69941,2529],{"class":125},[115,69943,69944],{"class":117,"line":16870},[115,69945,52388],{"class":125},[115,69947,69948],{"class":117,"line":16882},[115,69949,2400],{"emptyLinePlaceholder":42},[115,69951,69952],{"class":117,"line":16887},[115,69953,69954],{"class":184},"      \u002F\u002F 创建新的对象\n",[115,69956,69957,69959,69962,69964],{"class":117,"line":16900},[115,69958,58218],{"class":121},[115,69960,69961],{"class":174}," obj",[115,69963,13565],{"class":121},[115,69965,15573],{"class":125},[115,69967,69968,69971,69973,69975,69977],{"class":117,"line":16905},[115,69969,69970],{"class":125},"        stuID: arr.",[115,69972,51958],{"class":174},[115,69974,45567],{"class":121},[115,69976,25119],{"class":174},[115,69978,31467],{"class":125},[115,69980,69981],{"class":117,"line":16910},[115,69982,69983],{"class":125},"        uname: uname.value,\n",[115,69985,69986],{"class":117,"line":16915},[115,69987,69988],{"class":125},"        age: age.value,\n",[115,69990,69991],{"class":117,"line":16928},[115,69992,69993],{"class":125},"        gender: gender.value,\n",[115,69995,69996],{"class":117,"line":16933},[115,69997,69998],{"class":125},"        salary: salary.value,\n",[115,70000,70001],{"class":117,"line":32634},[115,70002,70003],{"class":125},"        city: city.value\n",[115,70005,70006],{"class":117,"line":32640},[115,70007,52388],{"class":125},[115,70009,70010],{"class":117,"line":32646},[115,70011,70012],{"class":184},"      \u002F\u002F console.log(obj);\n",[115,70014,70015],{"class":117,"line":32652},[115,70016,70017],{"class":184},"      \u002F\u002F 追加到数组里面\n",[115,70019,70020,70022,70024],{"class":117,"line":32658},[115,70021,57997],{"class":125},[115,70023,51874],{"class":1963},[115,70025,70026],{"class":125},"(obj)\n",[115,70028,70029],{"class":117,"line":32669},[115,70030,70031],{"class":184},"      \u002F\u002F console.log(arr);\n",[115,70033,70034],{"class":117,"line":32675},[115,70035,70036],{"class":184},"      \u002F\u002F 清空表单  reset重置表单\n",[115,70038,70039,70042,70044,70047],{"class":117,"line":32695},[115,70040,70041],{"class":174},"      this",[115,70043,683],{"class":125},[115,70045,70046],{"class":1963},"reset",[115,70048,1976],{"class":125},[115,70050,70051],{"class":117,"line":32701},[115,70052,70053],{"class":184},"      \u002F\u002F 调用渲染函数\n",[115,70055,70056,70059],{"class":117,"line":32712},[115,70057,70058],{"class":1963},"      render",[115,70060,1976],{"class":125},[115,70062,70063],{"class":117,"line":32718},[115,70064,33462],{"class":125},[115,70066,70067],{"class":117,"line":32724},[115,70068,70069],{"class":184},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[115,70071,70072,70075,70078],{"class":117,"line":32730},[115,70073,70074],{"class":121},"    function",[115,70076,70077],{"class":1963}," render",[115,70079,10854],{"class":125},[115,70081,70082],{"class":117,"line":32736},[115,70083,70084],{"class":184},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[115,70086,70087,70090,70092],{"class":117,"line":32742},[115,70088,70089],{"class":125},"      tbody.innerHTML ",[115,70091,171],{"class":121},[115,70093,70094],{"class":230}," ''\n",[115,70096,70097],{"class":117,"line":32748},[115,70098,70099],{"class":184},"      \u002F\u002F 遍历数组\n",[115,70101,70102,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126],{"class":117,"line":32754},[115,70103,52274],{"class":121},[115,70105,1658],{"class":125},[115,70107,51837],{"class":121},[115,70109,9439],{"class":125},[115,70111,171],{"class":121},[115,70113,4093],{"class":174},[115,70115,9446],{"class":125},[115,70117,1035],{"class":121},[115,70119,51955],{"class":125},[115,70121,51958],{"class":174},[115,70123,3214],{"class":125},[115,70125,2292],{"class":121},[115,70127,12443],{"class":125},[115,70129,70130,70132,70135,70137,70139,70142,70144,70147],{"class":117,"line":32774},[115,70131,61260],{"class":121},[115,70133,70134],{"class":174}," tr",[115,70136,13565],{"class":121},[115,70138,54386],{"class":125},[115,70140,70141],{"class":1963},"createElement",[115,70143,126],{"class":125},[115,70145,70146],{"class":230},"'tr'",[115,70148,132],{"class":125},[115,70150,70151,70154,70156],{"class":117,"line":32780},[115,70152,70153],{"class":125},"        tr.innerHTML ",[115,70155,171],{"class":121},[115,70157,70158],{"class":230}," `\n",[115,70160,70161,70164,70166,70168,70170,70173,70176],{"class":117,"line":32796},[115,70162,70163],{"class":230},"        \u003Ctd>${",[115,70165,3880],{"class":125},[115,70167,1015],{"class":230},[115,70169,566],{"class":125},[115,70171,70172],{"class":230},"].",[115,70174,70175],{"class":125},"stuID",[115,70177,70178],{"class":230},"}\u003C\u002Ftd>\n",[115,70180,70181,70184,70186,70188,70190,70192,70195],{"class":117,"line":32802},[115,70182,70183],{"class":230},"          \u003Ctd>${",[115,70185,3880],{"class":125},[115,70187,1015],{"class":230},[115,70189,566],{"class":125},[115,70191,70172],{"class":230},[115,70193,70194],{"class":125},"uname",[115,70196,70178],{"class":230},[115,70198,70199,70201,70203,70205,70207,70209,70212],{"class":117,"line":32816},[115,70200,70183],{"class":230},[115,70202,3880],{"class":125},[115,70204,1015],{"class":230},[115,70206,566],{"class":125},[115,70208,70172],{"class":230},[115,70210,70211],{"class":125},"age",[115,70213,70178],{"class":230},[115,70215,70216,70218,70220,70222,70224,70226,70229],{"class":117,"line":32822},[115,70217,70183],{"class":230},[115,70219,3880],{"class":125},[115,70221,1015],{"class":230},[115,70223,566],{"class":125},[115,70225,70172],{"class":230},[115,70227,70228],{"class":125},"gender",[115,70230,70178],{"class":230},[115,70232,70233,70235,70237,70239,70241,70243,70246],{"class":117,"line":32837},[115,70234,70183],{"class":230},[115,70236,3880],{"class":125},[115,70238,1015],{"class":230},[115,70240,566],{"class":125},[115,70242,70172],{"class":230},[115,70244,70245],{"class":125},"salary",[115,70247,70178],{"class":230},[115,70249,70250,70252,70254,70256,70258,70260,70263],{"class":117,"line":32843},[115,70251,70183],{"class":230},[115,70253,3880],{"class":125},[115,70255,1015],{"class":230},[115,70257,566],{"class":125},[115,70259,70172],{"class":230},[115,70261,70262],{"class":125},"city",[115,70264,70178],{"class":230},[115,70266,70267],{"class":117,"line":32852},[115,70268,69583],{"class":230},[115,70270,70271,70274,70276],{"class":117,"line":32858},[115,70272,70273],{"class":230},"            \u003Ca href=\"javascript:\" data-id=${",[115,70275,566],{"class":125},[115,70277,70278],{"class":230},"}>删除\u003C\u002Fa>\n",[115,70280,70281],{"class":117,"line":32867},[115,70282,70283],{"class":230},"          \u003C\u002Ftd> \n",[115,70285,70286],{"class":117,"line":32873},[115,70287,70288],{"class":230},"          `\n",[115,70290,70291],{"class":117,"line":32879},[115,70292,70293],{"class":184},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[115,70295,70296,70299,70302],{"class":117,"line":32888},[115,70297,70298],{"class":125},"        tbody.",[115,70300,70301],{"class":1963},"appendChild",[115,70303,70304],{"class":125},"(tr)\n",[115,70306,70307],{"class":117,"line":32894},[115,70308,52388],{"class":125},[115,70310,70311],{"class":117,"line":32905},[115,70312,2187],{"class":125},[115,70314,70315],{"class":117,"line":32911},[115,70316,2400],{"emptyLinePlaceholder":42},[115,70318,70319],{"class":117,"line":32930},[115,70320,70321],{"class":184},"    \u002F\u002F 3.删除委托\n",[115,70323,70324],{"class":117,"line":32936},[115,70325,70326],{"class":184},"    \u002F\u002F 3.1 事件委托 tbody\n",[115,70328,70329,70332,70334,70336,70338,70340,70342,70344,70346],{"class":117,"line":32947},[115,70330,70331],{"class":125},"    tbody.",[115,70333,57803],{"class":1963},[115,70335,126],{"class":125},[115,70337,57808],{"class":230},[115,70339,12436],{"class":125},[115,70341,54439],{"class":121},[115,70343,1658],{"class":125},[115,70345,200],{"class":5217},[115,70347,12443],{"class":125},[115,70349,70350,70352,70354,70356,70358],{"class":117,"line":32953},[115,70351,54470],{"class":121},[115,70353,67024],{"class":125},[115,70355,54476],{"class":121},[115,70357,68246],{"class":230},[115,70359,12443],{"class":125},[115,70361,70362],{"class":117,"line":32973},[115,70363,70364],{"class":184},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[115,70366,70367],{"class":117,"line":32989},[115,70368,70369],{"class":184},"        \u002F\u002F console.log(e.target.dataset.id);\n",[115,70371,70372],{"class":117,"line":32995},[115,70373,70374],{"class":184},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[115,70376,70377,70380,70382,70385,70387],{"class":117,"line":33009},[115,70378,70379],{"class":125},"        arr.",[115,70381,58000],{"class":1963},[115,70383,70384],{"class":125},"(e.target.dataset.id, ",[115,70386,343],{"class":174},[115,70388,132],{"class":125},[115,70390,70391],{"class":117,"line":33015},[115,70392,70393],{"class":184},"        \u002F\u002F 重新渲染一次\n",[115,70395,70396,70399],{"class":117,"line":33021},[115,70397,70398],{"class":1963},"        render",[115,70400,1976],{"class":125},[115,70402,70403],{"class":117,"line":33032},[115,70404,52388],{"class":125},[115,70406,70407],{"class":117,"line":33038},[115,70408,33462],{"class":125},[115,70410,70411,70413,70415],{"class":117,"line":33044},[115,70412,52407],{"class":125},[115,70414,51803],{"class":51290},[115,70416,51297],{"class":125},[115,70418,70419],{"class":117,"line":33054},[115,70420,2400],{"emptyLinePlaceholder":42},[115,70422,70423,70425,70427],{"class":117,"line":33060},[115,70424,51775],{"class":125},[115,70426,51790],{"class":51290},[115,70428,51297],{"class":125},[115,70430,70431],{"class":117,"line":33071},[115,70432,2400],{"emptyLinePlaceholder":42},[115,70434,70435,70437,70439],{"class":117,"line":33077},[115,70436,51775],{"class":125},[115,70438,50625],{"class":51290},[115,70440,51297],{"class":125},[14,70442,70443],{},"样式：",[106,70445,70449],{"className":70446,"code":70447,"language":70448,"meta":22,"style":22},"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",[112,70450,70451,70456,70466,70475,70479,70483,70488,70498,70503,70507,70512,70522,70527,70536,70540,70544,70549,70554,70564,70574,70579,70583,70588,70597,70607,70612,70622,70632,70636,70641,70649,70653,70658,70663,70668,70676,70685,70689,70694,70703,70707,70712,70721,70725,70730,70739,70748,70756,70760,70765,70774,70784,70793,70803,70809,70818,70828,70838,70842,70847,70856,70864,70874,70882,70891,70900,70910,70918,70922,70927,70936],{"__ignoreMap":22},[115,70452,70453],{"class":117,"line":118},[115,70454,70455],{"class":125},"* {\n",[115,70457,70458,70461,70463],{"class":117,"line":37},[115,70459,70460],{"class":51290},"  margin",[115,70462,51427],{"class":125},[115,70464,70465],{"class":230},"0;\n",[115,70467,70468,70471,70473],{"class":117,"line":1180},[115,70469,70470],{"class":230},"  padding",[115,70472,51427],{"class":125},[115,70474,70465],{"class":230},[115,70476,70477],{"class":117,"line":1195},[115,70478,1565],{"class":125},[115,70480,70481],{"class":117,"line":1201},[115,70482,2400],{"emptyLinePlaceholder":42},[115,70484,70485],{"class":117,"line":1215},[115,70486,70487],{"class":230},"a {\n",[115,70489,70490,70493,70495],{"class":117,"line":1221},[115,70491,70492],{"class":51290},"  text-decoration",[115,70494,51427],{"class":125},[115,70496,70497],{"class":230},"none;\n",[115,70499,70500],{"class":117,"line":1312},[115,70501,70502],{"class":230},"  color:#721c24;\n",[115,70504,70505],{"class":117,"line":1318},[115,70506,1565],{"class":125},[115,70508,70509],{"class":117,"line":1330},[115,70510,70511],{"class":230},"h1 {\n",[115,70513,70514,70517,70519],{"class":117,"line":1612},[115,70515,70516],{"class":51290},"  text-align",[115,70518,51427],{"class":125},[115,70520,70521],{"class":230},"center;\n",[115,70523,70524],{"class":117,"line":1617},[115,70525,70526],{"class":230},"  color:#333;\n",[115,70528,70529,70531,70533],{"class":117,"line":1623},[115,70530,70460],{"class":51290},[115,70532,51427],{"class":125},[115,70534,70535],{"class":230},"20px 0;\n",[115,70537,70538],{"class":117,"line":1628},[115,70539,2674],{"class":125},[115,70541,70542],{"class":117,"line":1642},[115,70543,1565],{"class":125},[115,70545,70546],{"class":117,"line":1647},[115,70547,70548],{"class":230},"table {\n",[115,70550,70551],{"class":117,"line":1653},[115,70552,70553],{"class":230},"  margin:0 auto;\n",[115,70555,70556,70559,70561],{"class":117,"line":1674},[115,70557,70558],{"class":51290},"  width",[115,70560,51427],{"class":125},[115,70562,70563],{"class":230},"800px;\n",[115,70565,70566,70569,70571],{"class":117,"line":1679},[115,70567,70568],{"class":51290},"  border-collapse",[115,70570,51427],{"class":125},[115,70572,70573],{"class":230},"collapse;\n",[115,70575,70576],{"class":117,"line":1693},[115,70577,70578],{"class":230},"  color:#004085;\n",[115,70580,70581],{"class":117,"line":1698},[115,70582,1565],{"class":125},[115,70584,70585],{"class":117,"line":1727},[115,70586,70587],{"class":230},"th {\n",[115,70589,70590,70592,70594],{"class":117,"line":1732},[115,70591,70470],{"class":51290},[115,70593,51427],{"class":125},[115,70595,70596],{"class":230},"10px;\n",[115,70598,70599,70602,70604],{"class":117,"line":1749},[115,70600,70601],{"class":51290},"  background",[115,70603,51427],{"class":125},[115,70605,70606],{"class":184},"#cfe5ff;\n",[115,70608,70609],{"class":117,"line":1754},[115,70610,70611],{"class":125},"  \n",[115,70613,70614,70617,70619],{"class":117,"line":1759},[115,70615,70616],{"class":51290},"  font-size",[115,70618,51427],{"class":125},[115,70620,70621],{"class":230},"20px;\n",[115,70623,70624,70627,70629],{"class":117,"line":1764},[115,70625,70626],{"class":51290},"  font-weight",[115,70628,51427],{"class":125},[115,70630,70631],{"class":230},"400;\n",[115,70633,70634],{"class":117,"line":1778},[115,70635,1565],{"class":125},[115,70637,70638],{"class":117,"line":1783},[115,70639,70640],{"class":230},"td,th {\n",[115,70642,70643,70646],{"class":117,"line":2577},[115,70644,70645],{"class":230},"  border:1px solid",[115,70647,70648],{"class":184}," #b8daff;\n",[115,70650,70651],{"class":117,"line":2591},[115,70652,1565],{"class":125},[115,70654,70655],{"class":117,"line":2599},[115,70656,70657],{"class":230},"td {\n",[115,70659,70660],{"class":117,"line":2604},[115,70661,70662],{"class":230},"  padding:10px;\n",[115,70664,70665],{"class":117,"line":2610},[115,70666,70667],{"class":230},"  color:#666;\n",[115,70669,70670,70672,70674],{"class":117,"line":2616},[115,70671,70516],{"class":51290},[115,70673,51427],{"class":125},[115,70675,70521],{"class":230},[115,70677,70678,70680,70682],{"class":117,"line":2621},[115,70679,70616],{"class":51290},[115,70681,51427],{"class":125},[115,70683,70684],{"class":230},"16px;\n",[115,70686,70687],{"class":117,"line":7949},[115,70688,1565],{"class":125},[115,70690,70691],{"class":117,"line":7973},[115,70692,70693],{"class":230},"tbody tr {\n",[115,70695,70696,70698,70700],{"class":117,"line":7978},[115,70697,70601],{"class":51290},[115,70699,51427],{"class":125},[115,70701,70702],{"class":184},"#fff;\n",[115,70704,70705],{"class":117,"line":7984},[115,70706,1565],{"class":125},[115,70708,70709],{"class":117,"line":8011},[115,70710,70711],{"class":230},"tbody tr:hover {\n",[115,70713,70714,70716,70718],{"class":117,"line":8016},[115,70715,70601],{"class":51290},[115,70717,51427],{"class":125},[115,70719,70720],{"class":184},"#e1ecf8;\n",[115,70722,70723],{"class":117,"line":8022},[115,70724,1565],{"class":125},[115,70726,70727],{"class":117,"line":8034},[115,70728,70729],{"class":230},".info {\n",[115,70731,70732,70734,70736],{"class":117,"line":8046},[115,70733,70558],{"class":51290},[115,70735,51427],{"class":125},[115,70737,70738],{"class":230},"900px;\n",[115,70740,70741,70743,70745],{"class":117,"line":8058},[115,70742,70460],{"class":51290},[115,70744,51427],{"class":125},[115,70746,70747],{"class":230},"50px auto;\n",[115,70749,70750,70752,70754],{"class":117,"line":9717},[115,70751,70516],{"class":51290},[115,70753,51427],{"class":125},[115,70755,70521],{"class":230},[115,70757,70758],{"class":117,"line":9742},[115,70759,1565],{"class":125},[115,70761,70762],{"class":117,"line":9765},[115,70763,70764],{"class":230},".info  input, .info select {\n",[115,70766,70767,70769,70771],{"class":117,"line":9789},[115,70768,70558],{"class":51290},[115,70770,51427],{"class":125},[115,70772,70773],{"class":230},"80px;\n",[115,70775,70776,70779,70781],{"class":117,"line":9794},[115,70777,70778],{"class":51290},"  height",[115,70780,51427],{"class":125},[115,70782,70783],{"class":230},"27px;\n",[115,70785,70786,70789,70791],{"class":117,"line":9799},[115,70787,70788],{"class":51290},"  outline",[115,70790,51427],{"class":125},[115,70792,70497],{"class":230},[115,70794,70795,70798,70800],{"class":117,"line":9804},[115,70796,70797],{"class":51290},"  border-radius",[115,70799,51427],{"class":125},[115,70801,70802],{"class":230},"5px;\n",[115,70804,70805,70807],{"class":117,"line":9813},[115,70806,70645],{"class":230},[115,70808,70648],{"class":184},[115,70810,70811,70814,70816],{"class":117,"line":9818},[115,70812,70813],{"class":51290},"  padding-left",[115,70815,51427],{"class":125},[115,70817,70802],{"class":230},[115,70819,70820,70823,70825],{"class":117,"line":9824},[115,70821,70822],{"class":51290},"  box-sizing",[115,70824,51427],{"class":125},[115,70826,70827],{"class":230},"border-box;\n",[115,70829,70830,70833,70835],{"class":117,"line":9845},[115,70831,70832],{"class":51290},"  margin-right",[115,70834,51427],{"class":125},[115,70836,70837],{"class":230},"15px;\n",[115,70839,70840],{"class":117,"line":9851},[115,70841,1565],{"class":125},[115,70843,70844],{"class":117,"line":9865},[115,70845,70846],{"class":230},".info button {\n",[115,70848,70849,70851,70853],{"class":117,"line":9871},[115,70850,70558],{"class":51290},[115,70852,51427],{"class":125},[115,70854,70855],{"class":230},"60px;\n",[115,70857,70858,70860,70862],{"class":117,"line":9898},[115,70859,70778],{"class":51290},[115,70861,51427],{"class":125},[115,70863,70783],{"class":230},[115,70865,70866,70869,70871],{"class":117,"line":9907},[115,70867,70868],{"class":51290},"  background-color",[115,70870,51427],{"class":125},[115,70872,70873],{"class":184},"#004085;\n",[115,70875,70876,70878,70880],{"class":117,"line":9913},[115,70877,70788],{"class":51290},[115,70879,51427],{"class":125},[115,70881,70497],{"class":230},[115,70883,70884,70887,70889],{"class":117,"line":9921},[115,70885,70886],{"class":51290},"  border",[115,70888,51427],{"class":125},[115,70890,70465],{"class":230},[115,70892,70893,70896,70898],{"class":117,"line":9926},[115,70894,70895],{"class":51290},"  color",[115,70897,51427],{"class":125},[115,70899,70702],{"class":184},[115,70901,70902,70905,70907],{"class":117,"line":16605},[115,70903,70904],{"class":51290},"  cursor",[115,70906,51427],{"class":125},[115,70908,70909],{"class":230},"pointer;\n",[115,70911,70912,70914,70916],{"class":117,"line":16611},[115,70913,70797],{"class":51290},[115,70915,51427],{"class":125},[115,70917,70802],{"class":230},[115,70919,70920],{"class":117,"line":16634},[115,70921,1565],{"class":125},[115,70923,70924],{"class":117,"line":16640},[115,70925,70926],{"class":230},".info .age {\n",[115,70928,70929,70931,70933],{"class":117,"line":16663},[115,70930,70558],{"class":51290},[115,70932,51427],{"class":125},[115,70934,70935],{"class":230},"50px;\n",[115,70937,70938],{"class":117,"line":16677},[115,70939,1565],{"class":125},[14,70941,70942],{},"思路：",[14,70944,70945],{},[20,70946],{"alt":22,"src":70947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70949,70950],{},[20,70951],{"alt":22,"src":70952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70954,70955],{},[20,70956],{"alt":22,"src":70957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[86,70959,70961],{"id":70960},"_3315-重绘回流","3.3.15 重绘回流",[14,70963,70964],{},[20,70965],{"alt":22,"src":70966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70968,70969],{},[20,70970],{"alt":22,"src":70971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70973,70974],{},[20,70975],{"alt":22,"src":70976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[57,70978,70980],{"id":70979},"_34-bom","3.4 BOM",[14,70982,70983],{},[20,70984],{"alt":22,"src":70985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70987,70988],{},"平时写的document省略了window而已，实际上是window.document",[14,70990,70991],{},"函数也是这样，调用的时候实际为window.fn()",[14,70993,70994],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,70996,70997],{},"window大部分情况下可以省略",[86,70999,71001],{"id":71000},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71003,71004],{},"只执行一次",[14,71006,71007],{},[20,71008],{"alt":22,"src":71009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71011,71012],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71014,71015],{},[20,71016],{"alt":22,"src":71017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[86,71019,71021],{"id":71020},"_342-js执行机制","3.4.2 JS执行机制",[14,71023,71024],{},[20,71025],{"alt":22,"src":71026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71028,71029],{},"两个的结果都是1111 3333 2222",[14,71031,71032],{},[20,71033],{"alt":22,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71036,71037],{},[20,71038],{"alt":22,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71041,71042],{},[20,71043],{"alt":22,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71046,71047],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71049,71050],{},"工作流程：",[14,71052,71053],{},[20,71054],{"alt":22,"src":71055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71057,71058],{},[20,71059],{"alt":22,"src":71060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71062,71063],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71065,71066],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[86,71068,71070],{"id":71069},"_343-location对象","3.4.3 location对象",[14,71072,71073],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71075,71076],{},[20,71077],{"alt":22,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71080,71081],{},"href可以跳转页面",[69,71083,71084],{},[72,71085,71086],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71088,71089],{},"search得到提交信息之后网站后边的地址",[14,71091,71092],{},[20,71093],{"alt":22,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71096,71097],{},[20,71098],{"alt":22,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[69,71101,71102],{"start":37},[72,71103,71104],{},"hash:这个获取单页面应用#后边的地址",[14,71106,71107],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71109,71110],{},[20,71111],{"alt":22,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[106,71114,71116],{"className":53057,"code":71115,"language":53059,"meta":22,"style":22},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[112,71117,71118,71138,71158],{"__ignoreMap":22},[115,71119,71120,71122,71124,71126,71128,71131,71134,71136],{"class":117,"line":118},[115,71121,52134],{"class":125},[115,71123,27],{"class":51290},[115,71125,61047],{"class":1963},[115,71127,171],{"class":125},[115,71129,71130],{"class":230},"\"#\u002Fmy\"",[115,71132,71133],{"class":125},">我的\u003C\u002F",[115,71135,27],{"class":51290},[115,71137,51297],{"class":125},[115,71139,71140,71142,71144,71146,71148,71151,71154,71156],{"class":117,"line":37},[115,71141,52134],{"class":125},[115,71143,27],{"class":51290},[115,71145,61047],{"class":1963},[115,71147,171],{"class":125},[115,71149,71150],{"class":230},"\"#\u002Ffriend\"",[115,71152,71153],{"class":125},">关注\u003C\u002F",[115,71155,27],{"class":51290},[115,71157,51297],{"class":125},[115,71159,71160,71162,71164,71166,71168,71171,71174,71176],{"class":117,"line":1180},[115,71161,52134],{"class":125},[115,71163,27],{"class":51290},[115,71165,61047],{"class":1963},[115,71167,171],{"class":125},[115,71169,71170],{"class":230},"\"#\u002Fdownload\"",[115,71172,71173],{"class":125},">下载\u003C\u002F",[115,71175,27],{"class":51290},[115,71177,51297],{"class":125},[14,71179,71180],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[69,71182,71183],{"start":1180},[72,71184,71185,71186,71188,71189,71191],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53706,71187],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53706,71190],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[86,71193,71195],{"id":71194},"_345-navigator对象","3.4.5 navigator对象",[14,71197,71198],{},[20,71199],{"alt":22,"src":71200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[106,71202,71206],{"className":71203,"code":71204,"language":71205,"meta":22,"style":22},"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",[112,71207,71208,71213,71224,71236,71241,71292,71333,71338,71351,71363,71368],{"__ignoreMap":22},[115,71209,71210],{"class":117,"line":118},[115,71211,71212],{"class":184},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[115,71214,71215,71217,71219,71221],{"class":117,"line":37},[115,71216,352],{"class":121},[115,71218,126],{"class":125},[115,71220,54439],{"class":121},[115,71222,71223],{"class":125}," () { \n",[115,71225,71226,71228,71231,71233],{"class":117,"line":1180},[115,71227,6793],{"class":121},[115,71229,71230],{"class":174}," userAgent",[115,71232,13565],{"class":121},[115,71234,71235],{"class":125}," navigator.userAgent \n",[115,71237,71238],{"class":117,"line":1195},[115,71239,71240],{"class":184},"\u002F\u002F 验证是否为Android或iPhone \n",[115,71242,71243,71245,71248,71250,71253,71256,71258,71260,71263,71265,71268,71272,71274,71276,71278,71281,71283,71285,71287,71289],{"class":117,"line":1201},[115,71244,6793],{"class":121},[115,71246,71247],{"class":174}," android",[115,71249,13565],{"class":121},[115,71251,71252],{"class":125}," userAgent.",[115,71254,71255],{"class":1963},"match",[115,71257,126],{"class":125},[115,71259,709],{"class":230},[115,71261,71262],{"class":47978},"(Android);",[115,71264,1111],{"class":121},[115,71266,71267],{"class":174},"[\\s",[115,71269,71271],{"class":71270},"snhLl","\\\u002F",[115,71273,1065],{"class":174},[115,71275,606],{"class":121},[115,71277,126],{"class":47978},[115,71279,71280],{"class":174},"[\\d.]",[115,71282,606],{"class":121},[115,71284,554],{"class":47978},[115,71286,1111],{"class":121},[115,71288,709],{"class":230},[115,71290,71291],{"class":125},") \n",[115,71293,71294,71296,71299,71301,71303,71305,71307,71309,71312,71315,71318,71320,71322,71325,71327,71329,71331],{"class":117,"line":1215},[115,71295,6793],{"class":121},[115,71297,71298],{"class":174}," iphone",[115,71300,13565],{"class":121},[115,71302,71252],{"class":125},[115,71304,71255],{"class":1963},[115,71306,126],{"class":125},[115,71308,709],{"class":230},[115,71310,71311],{"class":47978},"(iPhone",[115,71313,71314],{"class":174},"\\s",[115,71316,71317],{"class":47978},"OS)",[115,71319,71314],{"class":174},[115,71321,126],{"class":47978},[115,71323,71324],{"class":174},"[\\d_]",[115,71326,606],{"class":121},[115,71328,554],{"class":47978},[115,71330,709],{"class":230},[115,71332,71291],{"class":125},[115,71334,71335],{"class":117,"line":1221},[115,71336,71337],{"class":184},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[115,71339,71340,71342,71345,71348],{"class":117,"line":1312},[115,71341,1531],{"class":121},[115,71343,71344],{"class":125}," (android ",[115,71346,71347],{"class":121},"||",[115,71349,71350],{"class":125}," iphone) { \n",[115,71352,71353,71356,71358,71361],{"class":117,"line":1318},[115,71354,71355],{"class":125},"location.href ",[115,71357,171],{"class":121},[115,71359,71360],{"class":230}," 'http:\u002F\u002Fm.itcast.cn'",[115,71362,2674],{"class":125},[115,71364,71365],{"class":117,"line":1330},[115,71366,71367],{"class":125},"} \n",[115,71369,71370],{"class":117,"line":1612},[115,71371,71372],{"class":125},"})()\n",[86,71374,71376],{"id":71375},"_346-histroy对象","3.4.6 histroy对象",[14,71378,71379],{},[20,71380],{"alt":22,"src":71381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71383,71384],{},"浏览器地址的前进与后退!!!",[14,71386,71387],{},"history.back() 等效于 history.go(-1)",[14,71389,71390],{},"history.forward() 等效于 history.go(1)",[57,71392,71394],{"id":71393},"_35-本地存储","3.5 本地存储",[69,71396,71397,71400,71403],{},[72,71398,71399],{},"数据存储在用户浏览器中",[72,71401,71402],{},"设置、读取方便、甚至页面刷新不丢失数据",[72,71404,71405],{},"容量较大，sessionStorage和localStorage约 5M 左右",[86,71407,71409],{"id":71408},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71411,71412],{},"只能存储字符串",[14,71414,71415],{},[20,71416],{"alt":22,"src":71417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71419,71420],{},[20,71421],{"alt":22,"src":71422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71424,71425],{},"键值对要加引号,不然就会当变量来看了",[14,71427,71428],{},"localStorage.setItem('uname', 'pink')",[14,71430,71431],{},"刷新之后信息不再丢失",[14,71433,71434],{},"操作key,value会跟着变",[14,71436,71437],{},"删除只删除键就可以,即名字",[14,71439,71428],{},[14,71441,71442],{},"改:",[14,71444,71445],{},"localStorage.setItem('uname','red')",[14,71447,71448],{},"有这个键就是改,没有这个键就是改",[14,71450,71451],{},[20,71452],{"alt":22,"src":71453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71455,71456],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71458,71459],{},[20,71460],{"alt":22,"src":71461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71463,71464],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[86,71466,71468],{"id":71467},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71470,71471],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71473,71474],{},"特性:",[69,71476,71477,71480,71483,71486],{},[72,71478,71479],{},"生命周期为关闭浏览器窗口",[72,71481,71482],{},"在同一个窗口(页面)下数据可以共享",[72,71484,71485],{},"以键值对的形式存储使用",[72,71487,71488],{},"用法跟localStorage 基本相同",[86,71490,71492],{"id":71491},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71494,71495],{},"本地只能存储字符串,无法直接存储复杂数据类型",[106,71497,71499],{"className":53057,"code":71498,"language":53059,"meta":22,"style":22},"\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",[112,71500,71501,71509,71514,71519,71524,71529,71533,71538,71543],{"__ignoreMap":22},[115,71502,71503,71505,71507],{"class":117,"line":118},[115,71504,1035],{"class":125},[115,71506,51803],{"class":51290},[115,71508,51297],{"class":125},[115,71510,71511],{"class":117,"line":37},[115,71512,71513],{"class":125},"    const obj = {\n",[115,71515,71516],{"class":117,"line":1180},[115,71517,71518],{"class":125},"      uname: 'pink老师',\n",[115,71520,71521],{"class":117,"line":1195},[115,71522,71523],{"class":125},"      age: 18,\n",[115,71525,71526],{"class":117,"line":1201},[115,71527,71528],{"class":125},"      gender: '女'\n",[115,71530,71531],{"class":117,"line":1215},[115,71532,2187],{"class":125},[115,71534,71535],{"class":117,"line":1221},[115,71536,71537],{"class":125},"    \u002F\u002F 存储复杂数据类型\n",[115,71539,71540],{"class":117,"line":1312},[115,71541,71542],{"class":125},"    localStorage.setItem('obj', obj)\n",[115,71544,71545,71547,71549],{"class":117,"line":1318},[115,71546,52407],{"class":125},[115,71548,51803],{"class":51290},[115,71550,51297],{"class":125},[14,71552,71553],{},[20,71554],{"alt":22,"src":71555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71557,71558],{},"如果获取一下数据:",[14,71560,71561],{},"log(localStorage.getItem('obj'))",[14,71563,71564],{},[20,71565],{"alt":22,"src":71566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71568,71569],{},"发现直接存对象是使用不了的!!!",[21999,71571,71573],{"id":71572},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71575,71576],{},[20,71577],{"alt":22,"src":71578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[106,71580,71582],{"className":50623,"code":71581,"language":50625,"meta":22,"style":22},"\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",[112,71583,71584,71592,71602,71612,71621,71629,71633,71637,71663,71682,71690,71694,71699,71704],{"__ignoreMap":22},[115,71585,71586,71588,71590],{"class":117,"line":118},[115,71587,1035],{"class":125},[115,71589,51803],{"class":51290},[115,71591,51297],{"class":125},[115,71593,71594,71596,71598,71600],{"class":117,"line":37},[115,71595,11222],{"class":121},[115,71597,69961],{"class":174},[115,71599,13565],{"class":121},[115,71601,15573],{"class":125},[115,71603,71604,71607,71610],{"class":117,"line":1180},[115,71605,71606],{"class":125},"      uname: ",[115,71608,71609],{"class":230},"'pink老师'",[115,71611,31467],{"class":125},[115,71613,71614,71617,71619],{"class":117,"line":1195},[115,71615,71616],{"class":125},"      age: ",[115,71618,775],{"class":174},[115,71620,31467],{"class":125},[115,71622,71623,71626],{"class":117,"line":1201},[115,71624,71625],{"class":125},"      gender: ",[115,71627,71628],{"class":230},"'女'\n",[115,71630,71631],{"class":117,"line":1215},[115,71632,2187],{"class":125},[115,71634,71635],{"class":117,"line":1221},[115,71636,71537],{"class":184},[115,71638,71639,71642,71645,71647,71650,71652,71655,71657,71660],{"class":117,"line":1312},[115,71640,71641],{"class":125},"  localStorage.",[115,71643,71644],{"class":1963},"setItem",[115,71646,126],{"class":125},[115,71648,71649],{"class":230},"'obj'",[115,71651,12436],{"class":125},[115,71653,71654],{"class":174},"JSON",[115,71656,683],{"class":125},[115,71658,71659],{"class":1963},"stringify",[115,71661,71662],{"class":125},"(obj))\n",[115,71664,71665,71668,71670,71673,71676,71678,71680],{"class":117,"line":1318},[115,71666,71667],{"class":125},"  console.",[115,71669,58237],{"class":1963},[115,71671,71672],{"class":125},"(localStorage.",[115,71674,71675],{"class":1963},"getItem",[115,71677,126],{"class":125},[115,71679,71649],{"class":230},[115,71681,30498],{"class":125},[115,71683,71684,71686,71688],{"class":117,"line":1330},[115,71685,52407],{"class":125},[115,71687,51803],{"class":51290},[115,71689,51297],{"class":125},[115,71691,71692],{"class":117,"line":1612},[115,71693,70611],{"class":125},[115,71695,71696],{"class":117,"line":1617},[115,71697,71698],{"class":125},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[115,71700,71701],{"class":117,"line":1623},[115,71702,71703],{"class":125},"  类型是字符串的\n",[115,71705,71706],{"class":117,"line":1628},[115,71707,71708],{"class":125},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21999,71710,71712],{"id":71711},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71714,71715],{},[20,71716],{"alt":22,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71719,71720],{},[20,71721],{"alt":22,"src":71722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[106,71724,71726],{"className":53057,"code":71725,"language":53059,"meta":22,"style":22},"  \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",[112,71727,71728,71736,71740,71744,71748,71752,71756,71761,71766,71771,71776,71781,71786,71791,71796],{"__ignoreMap":22},[115,71729,71730,71732,71734],{"class":117,"line":118},[115,71731,52134],{"class":125},[115,71733,51803],{"class":51290},[115,71735,51297],{"class":125},[115,71737,71738],{"class":117,"line":37},[115,71739,71513],{"class":125},[115,71741,71742],{"class":117,"line":1180},[115,71743,71518],{"class":125},[115,71745,71746],{"class":117,"line":1195},[115,71747,71523],{"class":125},[115,71749,71750],{"class":117,"line":1201},[115,71751,71528],{"class":125},[115,71753,71754],{"class":117,"line":1215},[115,71755,2187],{"class":125},[115,71757,71758],{"class":117,"line":1221},[115,71759,71760],{"class":125},"    \u002F\u002F 1.存储复杂数据类型\n",[115,71762,71763],{"class":117,"line":1312},[115,71764,71765],{"class":125},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[115,71767,71768],{"class":117,"line":1318},[115,71769,71770],{"class":125},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[115,71772,71773],{"class":117,"line":1330},[115,71774,71775],{"class":125},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[115,71777,71778],{"class":117,"line":1612},[115,71779,71780],{"class":125},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[115,71782,71783],{"class":117,"line":1617},[115,71784,71785],{"class":125},"    \u002F\u002F 取\n",[115,71787,71788],{"class":117,"line":1623},[115,71789,71790],{"class":125},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[115,71792,71793],{"class":117,"line":1628},[115,71794,71795],{"class":125},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[115,71797,71798,71800,71802],{"class":117,"line":1642},[115,71799,52407],{"class":125},[115,71801,51803],{"class":51290},[115,71803,51297],{"class":125},[14,71805,71806],{},[20,71807],{"alt":22,"src":71808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[86,71810,71812],{"id":71811},"_356-数组map方法","3.5.6 数组map方法",[14,71814,71815],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71817,71818],{},[20,71819],{"alt":22,"src":71820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71822,71823],{},[20,71824],{"alt":22,"src":71825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71827,71828,71831],{},[275,71829,71830],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71833,71834],{},"map有返回值，但是forEach没有返回值",[14,71836,71837],{},"map是个方法。用的时候要加 ()",[14,71839,71840],{},"map返回的是一个数组",[86,71842,71844],{"id":71843},"_357-数组中join方法","3.5.7 数组中join方法",[14,71846,71847],{},[20,71848],{"alt":22,"src":71849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71851,71852],{},"类似于python中拼接字符串一样！",[69,71854,71855,71858,71861],{},[72,71856,71857],{},"小括号为空则逗号分开",[72,71859,71860],{},"小括号为空字符串 ''，则元素之间没有分隔符",[72,71862,71863],{},"小括号用啥符号就用进行分割",[86,71865,71867],{"id":71866},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[69,71869,71870,71873,71876,71879,71882],{},[72,71871,71872],{},"记住本地时间获取快速方式：new Date().toDateString()",[72,71874,71875],{},"尽量减少DOM操作，用好map+join的渲染方式",[72,71877,71878],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[72,71880,71881],{},"return可以实现函数的结束",[72,71883,71884],{},"禁止跳转是 preventDefault() 不要忘记",[106,71886,71888],{"className":50623,"code":71887,"language":50625,"meta":22,"style":22},"\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",[112,71889,71890,71900,71914,71918,71926,71940,71960,71972,71980,71986,71996,72006,72010,72014,72020,72030,72042,72046,72050,72057,72069,72083,72093,72097,72101,72108,72115,72122,72134,72146,72156,72168,72172,72176,72183,72190,72202,72214,72224,72236,72266,72270,72274,72281,72293,72305,72329,72339,72349,72353,72357,72365,72376,72388,72400,72412,72429,72441,72453,72457,72461,72468,72480,72492,72504,72515,72533,72546,72558,72582,72593,72597,72601,72609,72619,72623,72627,72633,72645,72656,72666,72670,72674,72680,72702,72706,72710,72716,72722,72734,72744,72756,72786,72799,72816,72820,72824,72835,72857,72867,72871,72875,72888,72898,72910,72922,72934,72946,72956,72966,72976,72987,73000,73004,73012,73020,73024,73032,73045,73065,73098,73131,73164,73190,73208,73226,73234,73260,73278,73296,73314,73332,73350,73358,73366,73384,73392,73421,73429,73437,73445,73458,73470,73482,73494,73506,73518,73531,73543,73551,73559,73567,73572,73577,73581,73585,73589,73593,73597,73601,73606,73611,73616,73621,73629,73637,73645,73650,73655,73660,73665,73670,73675,73680,73685,73690,73695,73700,73705,73710,73715,73719,73724,73729,73739,73748,73752,73757,73766,73782,73824,73864,73903,73968,73976,73980,73985,74003,74011,74016,74021,74051,74057,74062,74075,74087,74099,74111,74123,74135,74147,74151,74161,74165,74170,74175,74179,74188,74192,74197,74202,74221,74226,74246,74250,74255,74259,74264,74282,74300,74318,74337,74356,74375,74380,74386,74407,74413,74422,74428,74434,74440,74467,74480,74485,74495,74501,74507,74513,74519,74524,74530,74536,74542,74548,74581,74586,74591,74596,74601,74607,74613,74619,74630,74635,74641,74648,74662,74668,74692,74697,74702,74708,74714,74735,74741,74754,74760,74766,74772,74778,74783,74789,74795,74801,74819,74833,74839,74847,74853,74875,74880,74885,74890,74895,74900,74909,74918,74923],{"__ignoreMap":22},[115,71891,71892,71894,71896,71898],{"class":117,"line":118},[115,71893,51287],{"class":125},[115,71895,51291],{"class":51290},[115,71897,51294],{"class":1963},[115,71899,51297],{"class":125},[115,71901,71902,71904,71906,71908,71910,71912],{"class":117,"line":37},[115,71903,1035],{"class":125},[115,71905,50625],{"class":51290},[115,71907,51306],{"class":1963},[115,71909,171],{"class":125},[115,71911,51311],{"class":230},[115,71913,51297],{"class":125},[115,71915,71916],{"class":117,"line":1180},[115,71917,2400],{"emptyLinePlaceholder":42},[115,71919,71920,71922,71924],{"class":117,"line":1195},[115,71921,1035],{"class":125},[115,71923,51324],{"class":51290},[115,71925,51297],{"class":125},[115,71927,71928,71930,71932,71934,71936,71938],{"class":117,"line":1201},[115,71929,52134],{"class":125},[115,71931,51334],{"class":51290},[115,71933,51337],{"class":1963},[115,71935,171],{"class":125},[115,71937,51342],{"class":230},[115,71939,51297],{"class":125},[115,71941,71942,71944,71946,71948,71950,71952,71954,71956,71958],{"class":117,"line":1215},[115,71943,52134],{"class":125},[115,71945,51334],{"class":51290},[115,71947,14921],{"class":1963},[115,71949,171],{"class":125},[115,71951,51381],{"class":230},[115,71953,51361],{"class":1963},[115,71955,171],{"class":125},[115,71957,51388],{"class":230},[115,71959,51297],{"class":125},[115,71961,71962,71964,71966,71968,71970],{"class":117,"line":1221},[115,71963,52134],{"class":125},[115,71965,51397],{"class":51290},[115,71967,51400],{"class":125},[115,71969,51397],{"class":51290},[115,71971,51297],{"class":125},[115,71973,71974,71976,71978],{"class":117,"line":1312},[115,71975,52134],{"class":125},[115,71977,5127],{"class":51290},[115,71979,51297],{"class":125},[115,71981,71982,71984],{"class":117,"line":1318},[115,71983,6404],{"class":51290},[115,71985,15573],{"class":125},[115,71987,71988,71990,71992,71994],{"class":117,"line":1330},[115,71989,54685],{"class":174},[115,71991,51427],{"class":125},[115,71993,317],{"class":174},[115,71995,1291],{"class":125},[115,71997,71998,72000,72002,72004],{"class":117,"line":1612},[115,71999,54696],{"class":174},[115,72001,51427],{"class":125},[115,72003,317],{"class":174},[115,72005,1291],{"class":125},[115,72007,72008],{"class":117,"line":1617},[115,72009,2187],{"class":125},[115,72011,72012],{"class":117,"line":1623},[115,72013,2400],{"emptyLinePlaceholder":42},[115,72015,72016,72018],{"class":117,"line":1628},[115,72017,57269],{"class":51290},[115,72019,15573],{"class":125},[115,72021,72022,72024,72026,72028],{"class":117,"line":1642},[115,72023,57276],{"class":174},[115,72025,51427],{"class":125},[115,72027,51582],{"class":174},[115,72029,1291],{"class":125},[115,72031,72032,72034,72036,72038,72040],{"class":117,"line":1647},[115,72033,62067],{"class":174},[115,72035,51427],{"class":125},[115,72037,825],{"class":174},[115,72039,51482],{"class":121},[115,72041,1291],{"class":125},[115,72043,72044],{"class":117,"line":1653},[115,72045,2187],{"class":125},[115,72047,72048],{"class":117,"line":1674},[115,72049,2400],{"emptyLinePlaceholder":42},[115,72051,72052,72055],{"class":117,"line":1679},[115,72053,72054],{"class":1963},"    .info",[115,72056,15573],{"class":125},[115,72058,72059,72061,72063,72065,72067],{"class":117,"line":1693},[115,72060,54761],{"class":174},[115,72062,51427],{"class":125},[115,72064,51479],{"class":174},[115,72066,51482],{"class":121},[115,72068,1291],{"class":125},[115,72070,72071,72073,72075,72077,72079,72081],{"class":117,"line":1698},[115,72072,54696],{"class":174},[115,72074,51427],{"class":125},[115,72076,571],{"class":174},[115,72078,51482],{"class":121},[115,72080,51546],{"class":174},[115,72082,1291],{"class":125},[115,72084,72085,72087,72089,72091],{"class":117,"line":1727},[115,72086,57276],{"class":174},[115,72088,51427],{"class":125},[115,72090,51582],{"class":174},[115,72092,1291],{"class":125},[115,72094,72095],{"class":117,"line":1732},[115,72096,2187],{"class":125},[115,72098,72099],{"class":117,"line":1749},[115,72100,2400],{"emptyLinePlaceholder":42},[115,72102,72103,72106],{"class":117,"line":1754},[115,72104,72105],{"class":1963},"    .uname",[115,72107,31467],{"class":125},[115,72109,72110,72113],{"class":117,"line":1759},[115,72111,72112],{"class":1963},"    .age",[115,72114,31467],{"class":125},[115,72116,72117,72120],{"class":117,"line":1764},[115,72118,72119],{"class":1963},"    .salary",[115,72121,15573],{"class":125},[115,72123,72124,72126,72128,72130,72132],{"class":117,"line":1778},[115,72125,54761],{"class":174},[115,72127,51427],{"class":125},[115,72129,436],{"class":174},[115,72131,51482],{"class":121},[115,72133,1291],{"class":125},[115,72135,72136,72138,72140,72142,72144],{"class":117,"line":1783},[115,72137,54775],{"class":174},[115,72139,51427],{"class":125},[115,72141,825],{"class":174},[115,72143,51482],{"class":121},[115,72145,1291],{"class":125},[115,72147,72148,72150,72152,72154],{"class":117,"line":2577},[115,72149,61770],{"class":174},[115,72151,51427],{"class":125},[115,72153,54727],{"class":174},[115,72155,1291],{"class":125},[115,72157,72158,72160,72162,72164,72166],{"class":117,"line":2591},[115,72159,61740],{"class":174},[115,72161,51427],{"class":125},[115,72163,700],{"class":174},[115,72165,51482],{"class":121},[115,72167,1291],{"class":125},[115,72169,72170],{"class":117,"line":2599},[115,72171,2187],{"class":125},[115,72173,72174],{"class":117,"line":2604},[115,72175,2400],{"emptyLinePlaceholder":42},[115,72177,72178,72181],{"class":117,"line":2610},[115,72179,72180],{"class":1963},"    .gender",[115,72182,31467],{"class":125},[115,72184,72185,72188],{"class":117,"line":2616},[115,72186,72187],{"class":1963},"    .city",[115,72189,15573],{"class":125},[115,72191,72192,72194,72196,72198,72200],{"class":117,"line":2621},[115,72193,54761],{"class":174},[115,72195,51427],{"class":125},[115,72197,436],{"class":174},[115,72199,51482],{"class":121},[115,72201,1291],{"class":125},[115,72203,72204,72206,72208,72210,72212],{"class":117,"line":7949},[115,72205,54775],{"class":174},[115,72207,51427],{"class":125},[115,72209,950],{"class":174},[115,72211,51482],{"class":121},[115,72213,1291],{"class":125},[115,72215,72216,72218,72220,72222],{"class":117,"line":7973},[115,72217,61770],{"class":174},[115,72219,51427],{"class":125},[115,72221,54727],{"class":174},[115,72223,1291],{"class":125},[115,72225,72226,72228,72230,72232,72234],{"class":117,"line":7978},[115,72227,61740],{"class":174},[115,72229,51427],{"class":125},[115,72231,700],{"class":174},[115,72233,51482],{"class":121},[115,72235,1291],{"class":125},[115,72237,72238,72240,72242,72244,72246,72248,72251,72253,72255,72257,72260,72262,72264],{"class":117,"line":7984},[115,72239,61967],{"class":174},[115,72241,51427],{"class":125},[115,72243,343],{"class":174},[115,72245,51482],{"class":121},[115,72247,51511],{"class":174},[115,72249,72250],{"class":174}," rgb",[115,72252,126],{"class":125},[115,72254,1722],{"class":174},[115,72256,12436],{"class":125},[115,72258,72259],{"class":174},"197",[115,72261,12436],{"class":125},[115,72263,72259],{"class":174},[115,72265,2719],{"class":125},[115,72267,72268],{"class":117,"line":8011},[115,72269,2187],{"class":125},[115,72271,72272],{"class":117,"line":8016},[115,72273,2400],{"emptyLinePlaceholder":42},[115,72275,72276,72279],{"class":117,"line":8022},[115,72277,72278],{"class":51290},"    button",[115,72280,15573],{"class":125},[115,72282,72283,72285,72287,72289,72291],{"class":117,"line":8034},[115,72284,54775],{"class":174},[115,72286,51427],{"class":125},[115,72288,950],{"class":174},[115,72290,51482],{"class":121},[115,72292,1291],{"class":125},[115,72294,72295,72297,72299,72301,72303],{"class":117,"line":8046},[115,72296,54761],{"class":174},[115,72298,51427],{"class":125},[115,72300,609],{"class":174},[115,72302,51482],{"class":121},[115,72304,1291],{"class":125},[115,72306,72307,72309,72311,72314,72316,72318,72320,72323,72325,72327],{"class":117,"line":8058},[115,72308,54874],{"class":174},[115,72310,51427],{"class":125},[115,72312,72313],{"class":174},"rgb",[115,72315,126],{"class":125},[115,72317,1094],{"class":174},[115,72319,12436],{"class":125},[115,72321,72322],{"class":174},"187",[115,72324,12436],{"class":125},[115,72326,424],{"class":174},[115,72328,2719],{"class":125},[115,72330,72331,72333,72335,72337],{"class":117,"line":9717},[115,72332,57406],{"class":174},[115,72334,51427],{"class":125},[115,72336,60832],{"class":174},[115,72338,1291],{"class":125},[115,72340,72341,72343,72345,72347],{"class":117,"line":9742},[115,72342,61967],{"class":174},[115,72344,51427],{"class":125},[115,72346,317],{"class":174},[115,72348,1291],{"class":125},[115,72350,72351],{"class":117,"line":9765},[115,72352,2187],{"class":125},[115,72354,72355],{"class":117,"line":9789},[115,72356,2400],{"emptyLinePlaceholder":42},[115,72358,72359,72361,72363],{"class":117,"line":9794},[115,72360,72278],{"class":51290},[115,72362,51678],{"class":51290},[115,72364,15573],{"class":125},[115,72366,72367,72369,72371,72374],{"class":117,"line":9799},[115,72368,54999],{"class":174},[115,72370,51427],{"class":125},[115,72372,72373],{"class":174},"inline-block",[115,72375,1291],{"class":125},[115,72377,72378,72380,72382,72384,72386],{"class":117,"line":9804},[115,72379,54761],{"class":174},[115,72381,51427],{"class":125},[115,72383,571],{"class":174},[115,72385,51482],{"class":121},[115,72387,1291],{"class":125},[115,72389,72390,72392,72394,72396,72398],{"class":117,"line":9813},[115,72391,54775],{"class":174},[115,72393,51427],{"class":125},[115,72395,571],{"class":174},[115,72397,51482],{"class":121},[115,72399,1291],{"class":125},[115,72401,72402,72404,72406,72408,72410],{"class":117,"line":9818},[115,72403,57349],{"class":174},[115,72405,51427],{"class":125},[115,72407,597],{"class":174},[115,72409,51482],{"class":121},[115,72411,1291],{"class":125},[115,72413,72414,72416,72418,72420,72422,72424,72427],{"class":117,"line":9824},[115,72415,61967],{"class":174},[115,72417,51427],{"class":125},[115,72419,343],{"class":174},[115,72421,51482],{"class":121},[115,72423,51511],{"class":174},[115,72425,72426],{"class":174}," #fff",[115,72428,1291],{"class":125},[115,72430,72431,72433,72435,72437,72439],{"class":117,"line":9845},[115,72432,55124],{"class":174},[115,72434,51427],{"class":125},[115,72436,444],{"class":174},[115,72438,51482],{"class":121},[115,72440,1291],{"class":125},[115,72442,72443,72445,72447,72449,72451],{"class":117,"line":9851},[115,72444,61740],{"class":174},[115,72446,51427],{"class":125},[115,72448,343],{"class":174},[115,72450,51482],{"class":121},[115,72452,1291],{"class":125},[115,72454,72455],{"class":117,"line":9865},[115,72456,2187],{"class":125},[115,72458,72459],{"class":117,"line":9871},[115,72460,2400],{"emptyLinePlaceholder":42},[115,72462,72463,72466],{"class":117,"line":9898},[115,72464,72465],{"class":1963},"    .total",[115,72467,15573],{"class":125},[115,72469,72470,72472,72474,72476,72478],{"class":117,"line":9907},[115,72471,54761],{"class":174},[115,72473,51427],{"class":125},[115,72475,61619],{"class":174},[115,72477,51482],{"class":121},[115,72479,1291],{"class":125},[115,72481,72482,72484,72486,72488,72490],{"class":117,"line":9913},[115,72483,54775],{"class":174},[115,72485,51427],{"class":125},[115,72487,526],{"class":174},[115,72489,51482],{"class":121},[115,72491,1291],{"class":125},[115,72493,72494,72496,72498,72500,72502],{"class":117,"line":9921},[115,72495,57349],{"class":174},[115,72497,51427],{"class":125},[115,72499,526],{"class":174},[115,72501,51482],{"class":121},[115,72503,1291],{"class":125},[115,72505,72506,72508,72510,72513],{"class":117,"line":9926},[115,72507,57276],{"class":174},[115,72509,51427],{"class":125},[115,72511,72512],{"class":174},"right",[115,72514,1291],{"class":125},[115,72516,72517,72519,72521,72523,72525,72527,72529,72531],{"class":117,"line":16605},[115,72518,54696],{"class":174},[115,72520,51427],{"class":125},[115,72522,526],{"class":174},[115,72524,51482],{"class":121},[115,72526,51546],{"class":174},[115,72528,2038],{"class":174},[115,72530,51482],{"class":121},[115,72532,1291],{"class":125},[115,72534,72535,72538,72540,72542,72544],{"class":117,"line":16611},[115,72536,72537],{"class":174},"      padding-right",[115,72539,51427],{"class":125},[115,72541,571],{"class":174},[115,72543,51482],{"class":121},[115,72545,1291],{"class":125},[115,72547,72548,72550,72552,72554,72556],{"class":117,"line":16634},[115,72549,54912],{"class":174},[115,72551,51427],{"class":125},[115,72553,648],{"class":174},[115,72555,51482],{"class":121},[115,72557,1291],{"class":125},[115,72559,72560,72562,72564,72566,72568,72571,72573,72576,72578,72580],{"class":117,"line":16640},[115,72561,54874],{"class":174},[115,72563,51427],{"class":125},[115,72565,72313],{"class":174},[115,72567,126],{"class":125},[115,72569,72570],{"class":174},"237",[115,72572,12436],{"class":125},[115,72574,72575],{"class":174},"235",[115,72577,12436],{"class":125},[115,72579,72575],{"class":174},[115,72581,2719],{"class":125},[115,72583,72584,72587,72589,72591],{"class":117,"line":16663},[115,72585,72586],{"class":174},"      box-sizing",[115,72588,51427],{"class":125},[115,72590,60495],{"class":174},[115,72592,1291],{"class":125},[115,72594,72595],{"class":117,"line":16677},[115,72596,2187],{"class":125},[115,72598,72599],{"class":117,"line":16697},[115,72600,2400],{"emptyLinePlaceholder":42},[115,72602,72603,72605,72607],{"class":117,"line":16703},[115,72604,72465],{"class":1963},[115,72606,51678],{"class":51290},[115,72608,15573],{"class":125},[115,72610,72611,72613,72615,72617],{"class":117,"line":16714},[115,72612,57406],{"class":174},[115,72614,51427],{"class":125},[115,72616,57411],{"class":174},[115,72618,1291],{"class":125},[115,72620,72621],{"class":117,"line":16737},[115,72622,2187],{"class":125},[115,72624,72625],{"class":117,"line":16759},[115,72626,2400],{"emptyLinePlaceholder":42},[115,72628,72629,72631],{"class":117,"line":16764},[115,72630,65013],{"class":51290},[115,72632,15573],{"class":125},[115,72634,72635,72637,72639,72641,72643],{"class":117,"line":16770},[115,72636,54761],{"class":174},[115,72638,51427],{"class":125},[115,72640,61619],{"class":174},[115,72642,51482],{"class":121},[115,72644,1291],{"class":125},[115,72646,72647,72649,72651,72654],{"class":117,"line":16784},[115,72648,54696],{"class":174},[115,72650,51427],{"class":125},[115,72652,72653],{"class":174},"auto",[115,72655,1291],{"class":125},[115,72657,72658,72660,72662,72664],{"class":117,"line":16797},[115,72659,65020],{"class":174},[115,72661,51427],{"class":125},[115,72663,65025],{"class":174},[115,72665,1291],{"class":125},[115,72667,72668],{"class":117,"line":16802},[115,72669,2187],{"class":125},[115,72671,72672],{"class":117,"line":16816},[115,72673,2400],{"emptyLinePlaceholder":42},[115,72675,72676,72678],{"class":117,"line":16821},[115,72677,65105],{"class":51290},[115,72679,15573],{"class":125},[115,72681,72682,72684,72686,72688,72690,72692,72694,72696,72698,72700],{"class":117,"line":16827},[115,72683,54874],{"class":174},[115,72685,51427],{"class":125},[115,72687,72313],{"class":174},[115,72689,126],{"class":125},[115,72691,72570],{"class":174},[115,72693,12436],{"class":125},[115,72695,72575],{"class":174},[115,72697,12436],{"class":125},[115,72699,72575],{"class":174},[115,72701,2719],{"class":125},[115,72703,72704],{"class":117,"line":16832},[115,72705,2187],{"class":125},[115,72707,72708],{"class":117,"line":16846},[115,72709,2400],{"emptyLinePlaceholder":42},[115,72711,72712,72714],{"class":117,"line":16851},[115,72713,65105],{"class":51290},[115,72715,31467],{"class":125},[115,72717,72718,72720],{"class":117,"line":16856},[115,72719,65171],{"class":51290},[115,72721,15573],{"class":125},[115,72723,72724,72726,72728,72730,72732],{"class":117,"line":16870},[115,72725,54775],{"class":174},[115,72727,51427],{"class":125},[115,72729,398],{"class":174},[115,72731,51482],{"class":121},[115,72733,1291],{"class":125},[115,72735,72736,72738,72740,72742],{"class":117,"line":16882},[115,72737,57276],{"class":174},[115,72739,51427],{"class":125},[115,72741,23737],{"class":174},[115,72743,1291],{"class":125},[115,72745,72746,72748,72750,72752,72754],{"class":117,"line":16887},[115,72747,54912],{"class":174},[115,72749,51427],{"class":125},[115,72751,674],{"class":174},[115,72753,51482],{"class":121},[115,72755,1291],{"class":125},[115,72757,72758,72760,72762,72764,72766,72768,72770,72772,72775,72777,72780,72782,72784],{"class":117,"line":16900},[115,72759,61967],{"class":174},[115,72761,51427],{"class":125},[115,72763,343],{"class":174},[115,72765,51482],{"class":121},[115,72767,51511],{"class":174},[115,72769,72250],{"class":174},[115,72771,126],{"class":125},[115,72773,72774],{"class":174},"228",[115,72776,12436],{"class":125},[115,72778,72779],{"class":174},"225",[115,72781,12436],{"class":125},[115,72783,72779],{"class":174},[115,72785,2719],{"class":125},[115,72787,72788,72791,72793,72795,72797],{"class":117,"line":16905},[115,72789,72790],{"class":174},"      padding-left",[115,72792,51427],{"class":125},[115,72794,444],{"class":174},[115,72796,51482],{"class":121},[115,72798,1291],{"class":125},[115,72800,72801,72803,72805,72807,72810,72812,72814],{"class":117,"line":16910},[115,72802,61850],{"class":174},[115,72804,51427],{"class":125},[115,72806,28122],{"class":174},[115,72808,72809],{"class":174}," linear",[115,72811,61857],{"class":174},[115,72813,820],{"class":121},[115,72815,1291],{"class":125},[115,72817,72818],{"class":117,"line":16915},[115,72819,2187],{"class":125},[115,72821,72822],{"class":117,"line":16928},[115,72823,2400],{"emptyLinePlaceholder":42},[115,72825,72826,72829,72831,72833],{"class":117,"line":16933},[115,72827,72828],{"class":51290},"    tbody",[115,72830,70134],{"class":51290},[115,72832,60930],{"class":1963},[115,72834,15573],{"class":125},[115,72836,72837,72839,72841,72843,72845,72847,72849,72851,72853,72855],{"class":117,"line":32634},[115,72838,54874],{"class":174},[115,72840,51427],{"class":125},[115,72842,72313],{"class":174},[115,72844,126],{"class":125},[115,72846,72570],{"class":174},[115,72848,12436],{"class":125},[115,72850,72575],{"class":174},[115,72852,12436],{"class":125},[115,72854,72575],{"class":174},[115,72856,2719],{"class":125},[115,72858,72859,72861,72863,72865],{"class":117,"line":32640},[115,72860,62015],{"class":174},[115,72862,51427],{"class":125},[115,72864,62020],{"class":174},[115,72866,1291],{"class":125},[115,72868,72869],{"class":117,"line":32646},[115,72870,2187],{"class":125},[115,72872,72873],{"class":117,"line":32652},[115,72874,2400],{"emptyLinePlaceholder":42},[115,72876,72877,72879,72881,72884,72886],{"class":117,"line":32658},[115,72878,72828],{"class":51290},[115,72880,70134],{"class":51290},[115,72882,72883],{"class":51290}," td",[115,72885,1399],{"class":51290},[115,72887,15573],{"class":125},[115,72889,72890,72892,72894,72896],{"class":117,"line":32669},[115,72891,54999],{"class":174},[115,72893,51427],{"class":125},[115,72895,60859],{"class":174},[115,72897,1291],{"class":125},[115,72899,72900,72902,72904,72906,72908],{"class":117,"line":32675},[115,72901,54761],{"class":174},[115,72903,51427],{"class":125},[115,72905,1032],{"class":174},[115,72907,51482],{"class":121},[115,72909,1291],{"class":125},[115,72911,72912,72914,72916,72918,72920],{"class":117,"line":32695},[115,72913,54775],{"class":174},[115,72915,51427],{"class":125},[115,72917,950],{"class":174},[115,72919,51482],{"class":121},[115,72921,1291],{"class":125},[115,72923,72924,72926,72928,72930,72932],{"class":117,"line":32701},[115,72925,57349],{"class":174},[115,72927,51427],{"class":125},[115,72929,950],{"class":174},[115,72931,51482],{"class":121},[115,72933,1291],{"class":125},[115,72935,72936,72938,72940,72942,72944],{"class":117,"line":32712},[115,72937,62067],{"class":174},[115,72939,51427],{"class":125},[115,72941,203],{"class":174},[115,72943,51482],{"class":121},[115,72945,1291],{"class":125},[115,72947,72948,72950,72952,72954],{"class":117,"line":32718},[115,72949,57406],{"class":174},[115,72951,51427],{"class":125},[115,72953,60832],{"class":174},[115,72955,1291],{"class":125},[115,72957,72958,72960,72962,72964],{"class":117,"line":32724},[115,72959,57276],{"class":174},[115,72961,51427],{"class":125},[115,72963,51582],{"class":174},[115,72965,1291],{"class":125},[115,72967,72968,72970,72972,72974],{"class":117,"line":32730},[115,72969,63960],{"class":174},[115,72971,51427],{"class":125},[115,72973,54727],{"class":174},[115,72975,1291],{"class":125},[115,72977,72978,72980,72982,72985],{"class":117,"line":32736},[115,72979,54874],{"class":174},[115,72981,51427],{"class":125},[115,72983,72984],{"class":174},"orange",[115,72986,1291],{"class":125},[115,72988,72989,72991,72993,72996,72998],{"class":117,"line":32742},[115,72990,55124],{"class":174},[115,72992,51427],{"class":125},[115,72994,72995],{"class":174},"12.5",[115,72997,51482],{"class":121},[115,72999,1291],{"class":125},[115,73001,73002],{"class":117,"line":32748},[115,73003,2187],{"class":125},[115,73005,73006,73008,73010],{"class":117,"line":32754},[115,73007,52407],{"class":125},[115,73009,5127],{"class":51290},[115,73011,51297],{"class":125},[115,73013,73014,73016,73018],{"class":117,"line":32774},[115,73015,51775],{"class":125},[115,73017,51324],{"class":51290},[115,73019,51297],{"class":125},[115,73021,73022],{"class":117,"line":32780},[115,73023,2400],{"emptyLinePlaceholder":42},[115,73025,73026,73028,73030],{"class":117,"line":32796},[115,73027,1035],{"class":125},[115,73029,51790],{"class":51290},[115,73031,51297],{"class":125},[115,73033,73034,73036,73038,73041,73043],{"class":117,"line":32802},[115,73035,52134],{"class":125},[115,73037,57],{"class":51290},[115,73039,73040],{"class":125},">学生就业统计表\u003C\u002F",[115,73042,57],{"class":51290},[115,73044,51297],{"class":125},[115,73046,73047,73049,73051,73053,73055,73057,73059,73061,73063],{"class":117,"line":32816},[115,73048,52134],{"class":125},[115,73050,66615],{"class":51290},[115,73052,53476],{"class":1963},[115,73054,171],{"class":125},[115,73056,62654],{"class":230},[115,73058,69060],{"class":1963},[115,73060,171],{"class":125},[115,73062,31777],{"class":230},[115,73064,51297],{"class":125},[115,73066,73067,73069,73071,73073,73075,73077,73079,73081,73083,73085,73087,73090,73092,73094,73096],{"class":117,"line":32822},[115,73068,51331],{"class":125},[115,73070,53811],{"class":51290},[115,73072,53814],{"class":1963},[115,73074,171],{"class":125},[115,73076,62689],{"class":230},[115,73078,14921],{"class":1963},[115,73080,171],{"class":125},[115,73082,69086],{"class":230},[115,73084,61010],{"class":1963},[115,73086,171],{"class":125},[115,73088,73089],{"class":230},"\"姓名\"",[115,73091,53476],{"class":1963},[115,73093,171],{"class":125},[115,73095,69086],{"class":230},[115,73097,51297],{"class":125},[115,73099,73100,73102,73104,73106,73108,73110,73112,73114,73116,73118,73120,73123,73125,73127,73129],{"class":117,"line":32837},[115,73101,51331],{"class":125},[115,73103,53811],{"class":51290},[115,73105,53814],{"class":1963},[115,73107,171],{"class":125},[115,73109,62689],{"class":230},[115,73111,14921],{"class":1963},[115,73113,171],{"class":125},[115,73115,69114],{"class":230},[115,73117,61010],{"class":1963},[115,73119,171],{"class":125},[115,73121,73122],{"class":230},"\"年龄\"",[115,73124,53476],{"class":1963},[115,73126,171],{"class":125},[115,73128,69114],{"class":230},[115,73130,51297],{"class":125},[115,73132,73133,73135,73137,73139,73141,73143,73145,73147,73149,73151,73153,73156,73158,73160,73162],{"class":117,"line":32843},[115,73134,51331],{"class":125},[115,73136,53811],{"class":51290},[115,73138,53814],{"class":1963},[115,73140,171],{"class":125},[115,73142,62689],{"class":230},[115,73144,14921],{"class":1963},[115,73146,171],{"class":125},[115,73148,69216],{"class":230},[115,73150,61010],{"class":1963},[115,73152,171],{"class":125},[115,73154,73155],{"class":230},"\"薪资\"",[115,73157,53476],{"class":1963},[115,73159,171],{"class":125},[115,73161,69216],{"class":230},[115,73163,51297],{"class":125},[115,73165,73166,73168,73170,73172,73174,73176,73178,73180,73182,73184,73186,73188],{"class":117,"line":32852},[115,73167,51331],{"class":125},[115,73169,69134],{"class":51290},[115,73171,14921],{"class":1963},[115,73173,171],{"class":125},[115,73175,69141],{"class":230},[115,73177,14960],{"class":1963},[115,73179,171],{"class":125},[115,73181,7653],{"class":230},[115,73183,53476],{"class":1963},[115,73185,171],{"class":125},[115,73187,69141],{"class":230},[115,73189,51297],{"class":125},[115,73191,73192,73194,73196,73198,73200,73202,73204,73206],{"class":117,"line":32858},[115,73193,55224],{"class":125},[115,73195,69156],{"class":51290},[115,73197,66641],{"class":1963},[115,73199,171],{"class":125},[115,73201,9962],{"class":230},[115,73203,69165],{"class":125},[115,73205,69156],{"class":51290},[115,73207,51297],{"class":125},[115,73209,73210,73212,73214,73216,73218,73220,73222,73224],{"class":117,"line":32867},[115,73211,55224],{"class":125},[115,73213,69156],{"class":51290},[115,73215,66641],{"class":1963},[115,73217,171],{"class":125},[115,73219,10031],{"class":230},[115,73221,69184],{"class":125},[115,73223,69156],{"class":51290},[115,73225,51297],{"class":125},[115,73227,73228,73230,73232],{"class":117,"line":32873},[115,73229,51766],{"class":125},[115,73231,69134],{"class":51290},[115,73233,51297],{"class":125},[115,73235,73236,73238,73240,73242,73244,73246,73248,73250,73252,73254,73256,73258],{"class":117,"line":32879},[115,73237,51331],{"class":125},[115,73239,69134],{"class":51290},[115,73241,14921],{"class":1963},[115,73243,171],{"class":125},[115,73245,69238],{"class":230},[115,73247,14960],{"class":1963},[115,73249,171],{"class":125},[115,73251,7653],{"class":230},[115,73253,53476],{"class":1963},[115,73255,171],{"class":125},[115,73257,69238],{"class":230},[115,73259,51297],{"class":125},[115,73261,73262,73264,73266,73268,73270,73272,73274,73276],{"class":117,"line":32888},[115,73263,55224],{"class":125},[115,73265,69156],{"class":51290},[115,73267,66641],{"class":1963},[115,73269,171],{"class":125},[115,73271,69259],{"class":230},[115,73273,69262],{"class":125},[115,73275,69156],{"class":51290},[115,73277,51297],{"class":125},[115,73279,73280,73282,73284,73286,73288,73290,73292,73294],{"class":117,"line":32894},[115,73281,55224],{"class":125},[115,73283,69156],{"class":51290},[115,73285,66641],{"class":1963},[115,73287,171],{"class":125},[115,73289,69279],{"class":230},[115,73291,69282],{"class":125},[115,73293,69156],{"class":51290},[115,73295,51297],{"class":125},[115,73297,73298,73300,73302,73304,73306,73308,73310,73312],{"class":117,"line":32905},[115,73299,55224],{"class":125},[115,73301,69156],{"class":51290},[115,73303,66641],{"class":1963},[115,73305,171],{"class":125},[115,73307,69299],{"class":230},[115,73309,69302],{"class":125},[115,73311,69156],{"class":51290},[115,73313,51297],{"class":125},[115,73315,73316,73318,73320,73322,73324,73326,73328,73330],{"class":117,"line":32911},[115,73317,55224],{"class":125},[115,73319,69156],{"class":51290},[115,73321,66641],{"class":1963},[115,73323,171],{"class":125},[115,73325,69319],{"class":230},[115,73327,69322],{"class":125},[115,73329,69156],{"class":51290},[115,73331,51297],{"class":125},[115,73333,73334,73336,73338,73340,73342,73344,73346,73348],{"class":117,"line":32930},[115,73335,55224],{"class":125},[115,73337,69156],{"class":51290},[115,73339,66641],{"class":1963},[115,73341,171],{"class":125},[115,73343,69339],{"class":230},[115,73345,69342],{"class":125},[115,73347,69156],{"class":51290},[115,73349,51297],{"class":125},[115,73351,73352,73354,73356],{"class":117,"line":32936},[115,73353,51766],{"class":125},[115,73355,69134],{"class":51290},[115,73357,51297],{"class":125},[115,73359,73360,73362,73364],{"class":117,"line":32947},[115,73361,51331],{"class":125},[115,73363,53877],{"class":51290},[115,73365,51297],{"class":125},[115,73367,73368,73370,73372,73375,73377,73380,73382],{"class":117,"line":32953},[115,73369,55224],{"class":125},[115,73371,115],{"class":51290},[115,73373,73374],{"class":125},">+\u003C\u002F",[115,73376,115],{"class":51290},[115,73378,73379],{"class":125},">添加\u003C\u002F",[115,73381,53877],{"class":51290},[115,73383,51297],{"class":125},[115,73385,73386,73388,73390],{"class":117,"line":32973},[115,73387,52407],{"class":125},[115,73389,66615],{"class":51290},[115,73391,51297],{"class":125},[115,73393,73394,73396,73398,73400,73402,73404,73407,73409,73412,73414,73417,73419],{"class":117,"line":32989},[115,73395,52134],{"class":125},[115,73397,51601],{"class":51290},[115,73399,53476],{"class":1963},[115,73401,171],{"class":125},[115,73403,62570],{"class":230},[115,73405,73406],{"class":125},">共有数据 \u003C",[115,73408,115],{"class":51290},[115,73410,73411],{"class":125},">0\u003C\u002F",[115,73413,115],{"class":51290},[115,73415,73416],{"class":125},"> 条\u003C\u002F",[115,73418,51601],{"class":51290},[115,73420,51297],{"class":125},[115,73422,73423,73425,73427],{"class":117,"line":32995},[115,73424,52134],{"class":125},[115,73426,263],{"class":51290},[115,73428,51297],{"class":125},[115,73430,73431,73433,73435],{"class":117,"line":33009},[115,73432,51331],{"class":125},[115,73434,266],{"class":51290},[115,73436,51297],{"class":125},[115,73438,73439,73441,73443],{"class":117,"line":33015},[115,73440,55224],{"class":125},[115,73442,269],{"class":51290},[115,73444,51297],{"class":125},[115,73446,73447,73449,73451,73454,73456],{"class":117,"line":33021},[115,73448,55292],{"class":125},[115,73450,272],{"class":51290},[115,73452,73453],{"class":125},">ID\u003C\u002F",[115,73455,272],{"class":51290},[115,73457,51297],{"class":125},[115,73459,73460,73462,73464,73466,73468],{"class":117,"line":33032},[115,73461,55292],{"class":125},[115,73463,272],{"class":51290},[115,73465,69445],{"class":125},[115,73467,272],{"class":51290},[115,73469,51297],{"class":125},[115,73471,73472,73474,73476,73478,73480],{"class":117,"line":33038},[115,73473,55292],{"class":125},[115,73475,272],{"class":51290},[115,73477,69458],{"class":125},[115,73479,272],{"class":51290},[115,73481,51297],{"class":125},[115,73483,73484,73486,73488,73490,73492],{"class":117,"line":33044},[115,73485,55292],{"class":125},[115,73487,272],{"class":51290},[115,73489,69471],{"class":125},[115,73491,272],{"class":51290},[115,73493,51297],{"class":125},[115,73495,73496,73498,73500,73502,73504],{"class":117,"line":33054},[115,73497,55292],{"class":125},[115,73499,272],{"class":51290},[115,73501,69484],{"class":125},[115,73503,272],{"class":51290},[115,73505,51297],{"class":125},[115,73507,73508,73510,73512,73514,73516],{"class":117,"line":33060},[115,73509,55292],{"class":125},[115,73511,272],{"class":51290},[115,73513,69497],{"class":125},[115,73515,272],{"class":51290},[115,73517,51297],{"class":125},[115,73519,73520,73522,73524,73527,73529],{"class":117,"line":33071},[115,73521,55292],{"class":125},[115,73523,272],{"class":51290},[115,73525,73526],{"class":125},">录入时间\u003C\u002F",[115,73528,272],{"class":51290},[115,73530,51297],{"class":125},[115,73532,73533,73535,73537,73539,73541],{"class":117,"line":33077},[115,73534,55292],{"class":125},[115,73536,272],{"class":51290},[115,73538,69510],{"class":125},[115,73540,272],{"class":51290},[115,73542,51297],{"class":125},[115,73544,73545,73547,73549],{"class":117,"line":33087},[115,73546,55397],{"class":125},[115,73548,269],{"class":51290},[115,73550,51297],{"class":125},[115,73552,73553,73555,73557],{"class":117,"line":33092},[115,73554,51766],{"class":125},[115,73556,266],{"class":51290},[115,73558,51297],{"class":125},[115,73560,73561,73563,73565],{"class":117,"line":33098},[115,73562,51331],{"class":125},[115,73564,310],{"class":51290},[115,73566,51297],{"class":125},[115,73568,73569],{"class":117,"line":33147},[115,73570,73571],{"class":184},"      \u003C!-- \u003Ctr>\n",[115,73573,73574],{"class":117,"line":33194},[115,73575,73576],{"class":184},"        \u003Ctd>1\u003C\u002Ftd>\n",[115,73578,73579],{"class":117,"line":33199},[115,73580,73576],{"class":184},[115,73582,73583],{"class":117,"line":33205},[115,73584,73576],{"class":184},[115,73586,73587],{"class":117,"line":33224},[115,73588,73576],{"class":184},[115,73590,73591],{"class":117,"line":33230},[115,73592,73576],{"class":184},[115,73594,73595],{"class":117,"line":33250},[115,73596,73576],{"class":184},[115,73598,73599],{"class":117,"line":33256},[115,73600,73576],{"class":184},[115,73602,73603],{"class":117,"line":33262},[115,73604,73605],{"class":184},"        \u003Ctd>\n",[115,73607,73608],{"class":117,"line":33272},[115,73609,73610],{"class":184},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[115,73612,73613],{"class":117,"line":33277},[115,73614,73615],{"class":184},"        \u003C\u002Ftd>\n",[115,73617,73618],{"class":117,"line":33283},[115,73619,73620],{"class":184},"      \u003C\u002Ftr> -->\n",[115,73622,73623,73625,73627],{"class":117,"line":33299},[115,73624,51766],{"class":125},[115,73626,310],{"class":51290},[115,73628,51297],{"class":125},[115,73630,73631,73633,73635],{"class":117,"line":33344},[115,73632,52407],{"class":125},[115,73634,263],{"class":51290},[115,73636,51297],{"class":125},[115,73638,73639,73641,73643],{"class":117,"line":33350},[115,73640,52134],{"class":125},[115,73642,51803],{"class":51290},[115,73644,51297],{"class":125},[115,73646,73647],{"class":117,"line":33356},[115,73648,73649],{"class":184},"    \u002F\u002F const initData = [{\n",[115,73651,73652],{"class":117,"line":33362},[115,73653,73654],{"class":184},"    \u002F\u002F   unameId: 1,\n",[115,73656,73657],{"class":117,"line":33373},[115,73658,73659],{"class":184},"    \u002F\u002F   uname: '华晨宇',\n",[115,73661,73662],{"class":117,"line":33379},[115,73663,73664],{"class":184},"    \u002F\u002F   age: 22,\n",[115,73666,73667],{"class":117,"line":33385},[115,73668,73669],{"class":184},"    \u002F\u002F   salary: 12000,\n",[115,73671,73672],{"class":117,"line":33391},[115,73673,73674],{"class":184},"    \u002F\u002F   gender: '男',\n",[115,73676,73677],{"class":117,"line":33409},[115,73678,73679],{"class":184},"    \u002F\u002F   city: '北京',\n",[115,73681,73682],{"class":117,"line":33423},[115,73683,73684],{"class":184},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[115,73686,73687],{"class":117,"line":33432},[115,73688,73689],{"class":184},"    \u002F\u002F }]\n",[115,73691,73692],{"class":117,"line":33441},[115,73693,73694],{"class":184},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[115,73696,73697],{"class":117,"line":33450},[115,73698,73699],{"class":184},"    \u002F\u002F 1.渲染业务\n",[115,73701,73702],{"class":117,"line":33459},[115,73703,73704],{"class":184},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[115,73706,73707],{"class":117,"line":33465},[115,73708,73709],{"class":184},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[115,73711,73712],{"class":117,"line":33471},[115,73713,73714],{"class":184},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[115,73716,73717],{"class":117,"line":33479},[115,73718,2400],{"emptyLinePlaceholder":42},[115,73720,73721],{"class":117,"line":33484},[115,73722,73723],{"class":184},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[115,73725,73726],{"class":117,"line":33490},[115,73727,73728],{"class":184},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[115,73730,73731,73733,73735,73737],{"class":117,"line":33501},[115,73732,11222],{"class":121},[115,73734,57685],{"class":174},[115,73736,13565],{"class":121},[115,73738,51828],{"class":125},[115,73740,73741,73744,73746],{"class":117,"line":33507},[115,73742,73743],{"class":125},"    console.",[115,73745,58237],{"class":1963},[115,73747,52402],{"class":125},[115,73749,73750],{"class":117,"line":33527},[115,73751,2400],{"emptyLinePlaceholder":42},[115,73753,73754],{"class":117,"line":33533},[115,73755,73756],{"class":184},"    \u002F\u002F 时间函数\n",[115,73758,73759,73761,73764],{"class":117,"line":33539},[115,73760,70074],{"class":121},[115,73762,73763],{"class":1963}," getTime",[115,73765,10854],{"class":125},[115,73767,73768,73770,73773,73775,73777,73780],{"class":117,"line":33545},[115,73769,58218],{"class":121},[115,73771,73772],{"class":174}," date",[115,73774,13565],{"class":121},[115,73776,11579],{"class":121},[115,73778,73779],{"class":1963}," Date",[115,73781,1976],{"class":125},[115,73783,73784,73786,73788,73790,73793,73796,73798,73800,73802,73805,73808,73810,73812,73814,73816,73818,73820,73822],{"class":117,"line":33562},[115,73785,58218],{"class":121},[115,73787,16092],{"class":174},[115,73789,13565],{"class":121},[115,73791,73792],{"class":125}," date.",[115,73794,73795],{"class":1963},"getHours",[115,73797,13051],{"class":125},[115,73799,1035],{"class":121},[115,73801,2038],{"class":174},[115,73803,73804],{"class":121}," ?",[115,73806,73807],{"class":230}," '0'",[115,73809,45567],{"class":121},[115,73811,73792],{"class":125},[115,73813,73795],{"class":1963},[115,73815,13051],{"class":125},[115,73817,984],{"class":121},[115,73819,73792],{"class":125},[115,73821,73795],{"class":1963},[115,73823,1976],{"class":125},[115,73825,73826,73828,73831,73833,73835,73838,73840,73842,73844,73846,73848,73850,73852,73854,73856,73858,73860,73862],{"class":117,"line":33568},[115,73827,58218],{"class":121},[115,73829,73830],{"class":174}," m",[115,73832,13565],{"class":121},[115,73834,73792],{"class":125},[115,73836,73837],{"class":1963},"getMinutes",[115,73839,13051],{"class":125},[115,73841,1035],{"class":121},[115,73843,2038],{"class":174},[115,73845,73804],{"class":121},[115,73847,73807],{"class":230},[115,73849,45567],{"class":121},[115,73851,73792],{"class":125},[115,73853,73837],{"class":1963},[115,73855,13051],{"class":125},[115,73857,984],{"class":121},[115,73859,73792],{"class":125},[115,73861,73837],{"class":1963},[115,73863,1976],{"class":125},[115,73865,73866,73868,73870,73872,73874,73877,73879,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899,73901],{"class":117,"line":33574},[115,73867,58218],{"class":121},[115,73869,8429],{"class":174},[115,73871,13565],{"class":121},[115,73873,73792],{"class":125},[115,73875,73876],{"class":1963},"getSeconds",[115,73878,13051],{"class":125},[115,73880,1035],{"class":121},[115,73882,2038],{"class":174},[115,73884,73804],{"class":121},[115,73886,73807],{"class":230},[115,73888,45567],{"class":121},[115,73890,73792],{"class":125},[115,73892,73876],{"class":1963},[115,73894,13051],{"class":125},[115,73896,984],{"class":121},[115,73898,73792],{"class":125},[115,73900,73876],{"class":1963},[115,73902,1976],{"class":125},[115,73904,73905,73907,73910,73912,73914,73917,73919,73922,73924,73927,73929,73931,73934,73936,73938,73940,73942,73944,73946,73949,73951,73954,73956,73959,73961,73963,73965],{"class":117,"line":33580},[115,73906,58218],{"class":121},[115,73908,73909],{"class":174}," str",[115,73911,13565],{"class":121},[115,73913,62893],{"class":230},[115,73915,73916],{"class":125},"date",[115,73918,683],{"class":230},[115,73920,73921],{"class":1963},"getFullYear",[115,73923,2427],{"class":230},[115,73925,73926],{"class":230},"}\u002F${",[115,73928,73916],{"class":125},[115,73930,683],{"class":230},[115,73932,73933],{"class":1963},"getMonth",[115,73935,13051],{"class":230},[115,73937,606],{"class":121},[115,73939,25119],{"class":174},[115,73941,73926],{"class":230},[115,73943,73916],{"class":125},[115,73945,683],{"class":230},[115,73947,73948],{"class":1963},"getDate",[115,73950,2427],{"class":230},[115,73952,73953],{"class":230},"} ${",[115,73955,540],{"class":125},[115,73957,73958],{"class":230},"}:${",[115,73960,669],{"class":125},[115,73962,73958],{"class":230},[115,73964,820],{"class":125},[115,73966,73967],{"class":230},"}`\n",[115,73969,73970,73973],{"class":117,"line":33586},[115,73971,73972],{"class":121},"      return",[115,73974,73975],{"class":125}," str\n",[115,73977,73978],{"class":117,"line":33592},[115,73979,2187],{"class":125},[115,73981,73982],{"class":117,"line":33619},[115,73983,73984],{"class":184},"    \u002F\u002F 渲染函数\n",[115,73986,73987,73989,73991,73993,73995,73997,73999,74001],{"class":117,"line":33643},[115,73988,11222],{"class":121},[115,73990,69737],{"class":174},[115,73992,13565],{"class":121},[115,73994,54386],{"class":125},[115,73996,54389],{"class":1963},[115,73998,126],{"class":125},[115,74000,69748],{"class":230},[115,74002,132],{"class":125},[115,74004,74005,74007,74009],{"class":117,"line":33649},[115,74006,70074],{"class":121},[115,74008,70077],{"class":1963},[115,74010,10854],{"class":125},[115,74012,74013],{"class":117,"line":33655},[115,74014,74015],{"class":184},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[115,74017,74018],{"class":117,"line":33661},[115,74019,74020],{"class":184},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[115,74022,74023,74025,74028,74030,74032,74035,74037,74039,74041,74044,74046,74049],{"class":117,"line":33672},[115,74024,58218],{"class":121},[115,74026,74027],{"class":174}," trArr",[115,74029,13565],{"class":121},[115,74031,51955],{"class":125},[115,74033,74034],{"class":1963},"map",[115,74036,126],{"class":125},[115,74038,54439],{"class":121},[115,74040,1658],{"class":125},[115,74042,74043],{"class":5217},"ele",[115,74045,12436],{"class":125},[115,74047,74048],{"class":5217},"index",[115,74050,12443],{"class":125},[115,74052,74053,74055],{"class":117,"line":33683},[115,74054,14753],{"class":121},[115,74056,70158],{"class":230},[115,74058,74059],{"class":117,"line":33689},[115,74060,74061],{"class":230},"      \u003Ctr>\n",[115,74063,74064,74066,74068,74070,74073],{"class":117,"line":33706},[115,74065,70163],{"class":230},[115,74067,74043],{"class":125},[115,74069,683],{"class":230},[115,74071,74072],{"class":125},"unameId",[115,74074,70178],{"class":230},[115,74076,74077,74079,74081,74083,74085],{"class":117,"line":33729},[115,74078,70163],{"class":230},[115,74080,74043],{"class":125},[115,74082,683],{"class":230},[115,74084,70194],{"class":125},[115,74086,70178],{"class":230},[115,74088,74089,74091,74093,74095,74097],{"class":117,"line":33752},[115,74090,70163],{"class":230},[115,74092,74043],{"class":125},[115,74094,683],{"class":230},[115,74096,70211],{"class":125},[115,74098,70178],{"class":230},[115,74100,74101,74103,74105,74107,74109],{"class":117,"line":33758},[115,74102,70163],{"class":230},[115,74104,74043],{"class":125},[115,74106,683],{"class":230},[115,74108,70228],{"class":125},[115,74110,70178],{"class":230},[115,74112,74113,74115,74117,74119,74121],{"class":117,"line":33763},[115,74114,70163],{"class":230},[115,74116,74043],{"class":125},[115,74118,683],{"class":230},[115,74120,70245],{"class":125},[115,74122,70178],{"class":230},[115,74124,74125,74127,74129,74131,74133],{"class":117,"line":33772},[115,74126,70163],{"class":230},[115,74128,74043],{"class":125},[115,74130,683],{"class":230},[115,74132,70262],{"class":125},[115,74134,70178],{"class":230},[115,74136,74137,74139,74141,74143,74145],{"class":117,"line":33782},[115,74138,70163],{"class":230},[115,74140,74043],{"class":125},[115,74142,683],{"class":230},[115,74144,2387],{"class":125},[115,74146,70178],{"class":230},[115,74148,74149],{"class":117,"line":33788},[115,74150,73605],{"class":230},[115,74152,74153,74156,74158],{"class":117,"line":33793},[115,74154,74155],{"class":230},"          \u003Ca href=\"#\" data-id=\"${",[115,74157,74048],{"class":125},[115,74159,74160],{"class":230},"}\">删除\u003C\u002Fa>\n",[115,74162,74163],{"class":117,"line":33799},[115,74164,73615],{"class":230},[115,74166,74167],{"class":117,"line":33812},[115,74168,74169],{"class":230},"      \u003C\u002Ftr>\n",[115,74171,74172],{"class":117,"line":33818},[115,74173,74174],{"class":230},"  `\n",[115,74176,74177],{"class":117,"line":33829},[115,74178,64805],{"class":125},[115,74180,74181,74183,74185],{"class":117,"line":33840},[115,74182,58234],{"class":125},[115,74184,58237],{"class":1963},[115,74186,74187],{"class":125},"(trArr)\n",[115,74189,74190],{"class":117,"line":33859},[115,74191,2400],{"emptyLinePlaceholder":42},[115,74193,74194],{"class":117,"line":49519},[115,74195,74196],{"class":184},"      \u002F\u002F (2) 把数组转换为字符串join\n",[115,74198,74199],{"class":117,"line":49524},[115,74200,74201],{"class":184},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[115,74203,74204,74206,74208,74211,74214,74216,74219],{"class":117,"line":49533},[115,74205,70089],{"class":125},[115,74207,171],{"class":121},[115,74209,74210],{"class":125}," trArr.",[115,74212,74213],{"class":1963},"join",[115,74215,126],{"class":125},[115,74217,74218],{"class":230},"''",[115,74220,132],{"class":125},[115,74222,74223],{"class":117,"line":49542},[115,74224,74225],{"class":184},"      \u002F\u002F 显示共有几条\n",[115,74227,74228,74230,74232,74234,74237,74240,74242,74244],{"class":117,"line":49547},[115,74229,55761],{"class":125},[115,74231,54389],{"class":1963},[115,74233,126],{"class":125},[115,74235,74236],{"class":230},"'.total span'",[115,74238,74239],{"class":125},").innerHTML ",[115,74241,171],{"class":121},[115,74243,51955],{"class":125},[115,74245,55821],{"class":174},[115,74247,74248],{"class":117,"line":49552},[115,74249,2187],{"class":125},[115,74251,74252],{"class":117,"line":49557},[115,74253,74254],{"class":184},"    \u002F\u002F render()\n",[115,74256,74257],{"class":117,"line":49570},[115,74258,2400],{"emptyLinePlaceholder":42},[115,74260,74261],{"class":117,"line":49575},[115,74262,74263],{"class":184},"    \u002F\u002F 获取DOM对象\n",[115,74265,74266,74268,74270,74272,74274,74276,74278,74280],{"class":117,"line":49584},[115,74267,11222],{"class":121},[115,74269,69811],{"class":174},[115,74271,13565],{"class":121},[115,74273,54386],{"class":125},[115,74275,54389],{"class":1963},[115,74277,126],{"class":125},[115,74279,69822],{"class":230},[115,74281,132],{"class":125},[115,74283,74284,74286,74288,74290,74292,74294,74296,74298],{"class":117,"line":49593},[115,74285,11222],{"class":121},[115,74287,69638],{"class":174},[115,74289,13565],{"class":121},[115,74291,54386],{"class":125},[115,74293,54389],{"class":1963},[115,74295,126],{"class":125},[115,74297,69649],{"class":230},[115,74299,132],{"class":125},[115,74301,74302,74304,74306,74308,74310,74312,74314,74316],{"class":117,"line":49610},[115,74303,11222],{"class":121},[115,74305,15690],{"class":174},[115,74307,13565],{"class":121},[115,74309,54386],{"class":125},[115,74311,54389],{"class":1963},[115,74313,126],{"class":125},[115,74315,69668],{"class":230},[115,74317,132],{"class":125},[115,74319,74321,74323,74325,74327,74329,74331,74333,74335],{"class":117,"line":74320},231,[115,74322,11222],{"class":121},[115,74324,69697],{"class":174},[115,74326,13565],{"class":121},[115,74328,54386],{"class":125},[115,74330,54389],{"class":1963},[115,74332,126],{"class":125},[115,74334,69708],{"class":230},[115,74336,132],{"class":125},[115,74338,74340,74342,74344,74346,74348,74350,74352,74354],{"class":117,"line":74339},232,[115,74341,11222],{"class":121},[115,74343,69677],{"class":174},[115,74345,13565],{"class":121},[115,74347,54386],{"class":125},[115,74349,54389],{"class":1963},[115,74351,126],{"class":125},[115,74353,69688],{"class":230},[115,74355,132],{"class":125},[115,74357,74359,74361,74363,74365,74367,74369,74371,74373],{"class":117,"line":74358},233,[115,74360,11222],{"class":121},[115,74362,69717],{"class":174},[115,74364,13565],{"class":121},[115,74366,54386],{"class":125},[115,74368,54389],{"class":1963},[115,74370,126],{"class":125},[115,74372,69728],{"class":230},[115,74374,132],{"class":125},[115,74376,74378],{"class":117,"line":74377},234,[115,74379,2400],{"emptyLinePlaceholder":42},[115,74381,74383],{"class":117,"line":74382},235,[115,74384,74385],{"class":184},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[115,74387,74389,74391,74393,74395,74397,74399,74401,74403,74405],{"class":117,"line":74388},236,[115,74390,69829],{"class":125},[115,74392,57803],{"class":1963},[115,74394,126],{"class":125},[115,74396,69836],{"class":230},[115,74398,12436],{"class":125},[115,74400,54439],{"class":121},[115,74402,1658],{"class":125},[115,74404,200],{"class":5217},[115,74406,12443],{"class":125},[115,74408,74410],{"class":117,"line":74409},237,[115,74411,74412],{"class":184},"      \u002F\u002F 禁止浏览器跳转\n",[115,74414,74416,74418,74420],{"class":117,"line":74415},238,[115,74417,69856],{"class":125},[115,74419,69859],{"class":1963},[115,74421,1976],{"class":125},[115,74423,74425],{"class":117,"line":74424},239,[115,74426,74427],{"class":184},"      \u002F\u002F 非空判断\n",[115,74429,74431],{"class":117,"line":74430},240,[115,74432,74433],{"class":184},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[115,74435,74437],{"class":117,"line":74436},241,[115,74438,74439],{"class":184},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[115,74441,74443,74445,74447,74449,74452,74454,74457,74460,74462,74464],{"class":117,"line":74442},242,[115,74444,54470],{"class":121},[115,74446,1658],{"class":125},[115,74448,352],{"class":121},[115,74450,74451],{"class":125},"uname.value ",[115,74453,71347],{"class":121},[115,74455,74456],{"class":121}," !",[115,74458,74459],{"class":125},"age.value ",[115,74461,71347],{"class":121},[115,74463,74456],{"class":121},[115,74465,74466],{"class":125},"salary.value) {\n",[115,74468,74470,74472,74474,74476,74478],{"class":117,"line":74469},243,[115,74471,14753],{"class":121},[115,74473,69930],{"class":1963},[115,74475,126],{"class":125},[115,74477,69935],{"class":230},[115,74479,132],{"class":125},[115,74481,74483],{"class":117,"line":74482},244,[115,74484,52388],{"class":125},[115,74486,74488,74490,74492],{"class":117,"line":74487},245,[115,74489,57997],{"class":125},[115,74491,51874],{"class":1963},[115,74493,74494],{"class":125},"({\n",[115,74496,74498],{"class":117,"line":74497},246,[115,74499,74500],{"class":184},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[115,74502,74504],{"class":117,"line":74503},247,[115,74505,74506],{"class":184},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[115,74508,74510],{"class":117,"line":74509},248,[115,74511,74512],{"class":184},"        \u002F\u002F 对象的序号应为数组长度+1\n",[115,74514,74516],{"class":117,"line":74515},249,[115,74517,74518],{"class":184},"        \u002F\u002F unameId: arr.length + 1,\n",[115,74520,74522],{"class":117,"line":74521},250,[115,74523,2400],{"emptyLinePlaceholder":42},[115,74525,74527],{"class":117,"line":74526},251,[115,74528,74529],{"class":184},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[115,74531,74533],{"class":117,"line":74532},252,[115,74534,74535],{"class":184},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[115,74537,74539],{"class":117,"line":74538},253,[115,74540,74541],{"class":184},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[115,74543,74545],{"class":117,"line":74544},254,[115,74546,74547],{"class":184},"        \u002F\u002F 0当假看\n",[115,74549,74551,74554,74556,74558,74561,74563,74565,74567,74570,74572,74574,74577,74579],{"class":117,"line":74550},255,[115,74552,74553],{"class":125},"        unameId: arr.",[115,74555,51958],{"class":174},[115,74557,73804],{"class":121},[115,74559,74560],{"class":125}," arr[arr.",[115,74562,51958],{"class":174},[115,74564,52261],{"class":121},[115,74566,25119],{"class":174},[115,74568,74569],{"class":125},"].unameId ",[115,74571,606],{"class":121},[115,74573,25119],{"class":174},[115,74575,74576],{"class":121}," :",[115,74578,25119],{"class":174},[115,74580,31467],{"class":125},[115,74582,74584],{"class":117,"line":74583},256,[115,74585,69983],{"class":125},[115,74587,74589],{"class":117,"line":74588},257,[115,74590,69988],{"class":125},[115,74592,74594],{"class":117,"line":74593},258,[115,74595,69998],{"class":125},[115,74597,74599],{"class":117,"line":74598},259,[115,74600,69993],{"class":125},[115,74602,74604],{"class":117,"line":74603},260,[115,74605,74606],{"class":125},"        city: city.value,\n",[115,74608,74610],{"class":117,"line":74609},261,[115,74611,74612],{"class":184},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[115,74614,74616],{"class":117,"line":74615},262,[115,74617,74618],{"class":184},"        \u002F\u002F time: new Date().toDateString()\n",[115,74620,74622,74625,74628],{"class":117,"line":74621},263,[115,74623,74624],{"class":125},"        time: ",[115,74626,74627],{"class":1963},"getTime",[115,74629,1976],{"class":125},[115,74631,74633],{"class":117,"line":74632},264,[115,74634,64805],{"class":125},[115,74636,74638],{"class":117,"line":74637},265,[115,74639,74640],{"class":184},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[115,74642,74644,74646],{"class":117,"line":74643},266,[115,74645,70058],{"class":1963},[115,74647,1976],{"class":125},[115,74649,74651,74653,74655,74657,74659],{"class":117,"line":74650},267,[115,74652,70041],{"class":174},[115,74654,683],{"class":125},[115,74656,70046],{"class":1963},[115,74658,13051],{"class":125},[115,74660,74661],{"class":184},"\u002F\u002F重置表单\n",[115,74663,74665],{"class":117,"line":74664},268,[115,74666,74667],{"class":184},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[115,74669,74671,74674,74676,74678,74681,74683,74685,74687,74689],{"class":117,"line":74670},269,[115,74672,74673],{"class":125},"      localStorage.",[115,74675,71644],{"class":1963},[115,74677,126],{"class":125},[115,74679,74680],{"class":230},"'data'",[115,74682,12436],{"class":125},[115,74684,71654],{"class":174},[115,74686,683],{"class":125},[115,74688,71659],{"class":1963},[115,74690,74691],{"class":125},"(arr))\n",[115,74693,74695],{"class":117,"line":74694},270,[115,74696,33462],{"class":125},[115,74698,74700],{"class":117,"line":74699},271,[115,74701,2400],{"emptyLinePlaceholder":42},[115,74703,74705],{"class":117,"line":74704},272,[115,74706,74707],{"class":184},"    \u002F\u002F 3.删除业务\n",[115,74709,74711],{"class":117,"line":74710},273,[115,74712,74713],{"class":184},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[115,74715,74717,74719,74721,74723,74725,74727,74729,74731,74733],{"class":117,"line":74716},274,[115,74718,70331],{"class":125},[115,74720,57803],{"class":1963},[115,74722,126],{"class":125},[115,74724,57808],{"class":230},[115,74726,12436],{"class":125},[115,74728,54439],{"class":121},[115,74730,1658],{"class":125},[115,74732,200],{"class":5217},[115,74734,12443],{"class":125},[115,74736,74738],{"class":117,"line":74737},275,[115,74739,74740],{"class":184},"      \u002F\u002F 判断是否点击的是删除按钮\n",[115,74742,74744,74746,74748,74750,74752],{"class":117,"line":74743},276,[115,74745,54470],{"class":121},[115,74747,67024],{"class":125},[115,74749,54476],{"class":121},[115,74751,68246],{"class":230},[115,74753,12443],{"class":125},[115,74755,74757],{"class":117,"line":74756},277,[115,74758,74759],{"class":184},"        \u002F\u002F alert(1)\n",[115,74761,74763],{"class":117,"line":74762},278,[115,74764,74765],{"class":184},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[115,74767,74769],{"class":117,"line":74768},279,[115,74770,74771],{"class":184},"        \u002F\u002F console.log(e.target)\n",[115,74773,74775],{"class":117,"line":74774},280,[115,74776,74777],{"class":184},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[115,74779,74781],{"class":117,"line":74780},281,[115,74782,2400],{"emptyLinePlaceholder":42},[115,74784,74786],{"class":117,"line":74785},282,[115,74787,74788],{"class":184},"        \u002F\u002F 确认框，确然是否真的要删除\n",[115,74790,74792],{"class":117,"line":74791},283,[115,74793,74794],{"class":184},"        \u002F\u002F confirm()为确认框\n",[115,74796,74798],{"class":117,"line":74797},284,[115,74799,74800],{"class":184},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[115,74802,74804,74806,74808,74811,74813,74816],{"class":117,"line":74803},285,[115,74805,2497],{"class":121},[115,74807,1658],{"class":125},[115,74809,74810],{"class":1963},"confirm",[115,74812,126],{"class":125},[115,74814,74815],{"class":230},"'您确定要删除这条数据吗？'",[115,74817,74818],{"class":125},")) {\n",[115,74820,74822,74825,74827,74829,74831],{"class":117,"line":74821},286,[115,74823,74824],{"class":125},"          arr.",[115,74826,58000],{"class":1963},[115,74828,70384],{"class":125},[115,74830,343],{"class":174},[115,74832,132],{"class":125},[115,74834,74836],{"class":117,"line":74835},287,[115,74837,74838],{"class":184},"          \u002F\u002F 3.4 重新渲染页面\n",[115,74840,74842,74845],{"class":117,"line":74841},288,[115,74843,74844],{"class":1963},"          render",[115,74846,1976],{"class":125},[115,74848,74850],{"class":117,"line":74849},289,[115,74851,74852],{"class":184},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[115,74854,74856,74859,74861,74863,74865,74867,74869,74871,74873],{"class":117,"line":74855},290,[115,74857,74858],{"class":125},"          localStorage.",[115,74860,71644],{"class":1963},[115,74862,126],{"class":125},[115,74864,74680],{"class":230},[115,74866,12436],{"class":125},[115,74868,71654],{"class":174},[115,74870,683],{"class":125},[115,74872,71659],{"class":1963},[115,74874,74691],{"class":125},[115,74876,74878],{"class":117,"line":74877},291,[115,74879,2529],{"class":125},[115,74881,74883],{"class":117,"line":74882},292,[115,74884,52388],{"class":125},[115,74886,74888],{"class":117,"line":74887},293,[115,74889,2400],{"emptyLinePlaceholder":42},[115,74891,74893],{"class":117,"line":74892},294,[115,74894,33462],{"class":125},[115,74896,74898],{"class":117,"line":74897},295,[115,74899,2400],{"emptyLinePlaceholder":42},[115,74901,74903,74905,74907],{"class":117,"line":74902},296,[115,74904,52407],{"class":125},[115,74906,51803],{"class":51290},[115,74908,51297],{"class":125},[115,74910,74912,74914,74916],{"class":117,"line":74911},297,[115,74913,51775],{"class":125},[115,74915,51790],{"class":51290},[115,74917,51297],{"class":125},[115,74919,74921],{"class":117,"line":74920},298,[115,74922,2400],{"emptyLinePlaceholder":42},[115,74924,74926,74928,74930],{"class":117,"line":74925},299,[115,74927,51775],{"class":125},[115,74929,50625],{"class":51290},[115,74931,51297],{"class":125},[57,74933,74935],{"id":74934},"_36-正则表达式","3.6 正则表达式",[14,74937,74938],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74940,74941],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74943,74944],{},"正则表达式的作用：",[1132,74946,74947,74954,74960],{},[72,74948,74949,74950,74953],{},"表单验证（ ",[275,74951,74952],{},"匹配"," ）",[72,74955,74956,74957,74953],{},"过滤敏感词（ ",[275,74958,74959],{},"替换",[72,74961,74962,74963,74953],{},"字符串中提取我们想要的部分（ ",[275,74964,74965],{},"提取",[86,74967,74969],{"id":74968},"_361-语法","3.6.1 语法",[14,74971,74972],{},"正则表达式使用步骤：",[69,74974,74975,74978],{},[72,74976,74977],{},"定义规则",[72,74979,74980],{},"查找是否匹配",[14,74982,74983],{},"正则表达式里边不需要写引号",[14,74985,74986],{},[20,74987],{"alt":22,"src":74988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74990,74991],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74993,74994],{},"reg.test(str)",[14,74996,74997],{},[20,74998],{"alt":22,"src":74999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75001,75002],{},[20,75003],{"alt":22,"src":75004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[86,75006,75008],{"id":75007},"_362-元字符","3.6.2 元字符",[69,75010,75011,75014,75017,75020,75027],{},[72,75012,75013],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[72,75015,75016],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[72,75018,75019],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[72,75021,75022,75023],{},"正则验证工具：",[27,75024,75025],{"href":75025,"rel":75026},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[31],[72,75028,75029],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21999,75031,75033],{"id":75032},"_3621-边界符","3.6.2.1 边界符",[14,75035,75036],{},[20,75037],{"alt":22,"src":75038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75040,75041],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75043,75044],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75046,75047],{},"只匹配一次",[14,75049,75050],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21999,75052,75054],{"id":75053},"_3622-量词","3.6.2.2 量词",[14,75056,75057],{},[20,75058],{"alt":22,"src":75059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75061,75062],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21999,75064,75066],{"id":75065},"_3623-元字符","3.6.2.3 元字符",[14,75068,75069],{},[20,75070],{"alt":22,"src":75071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75073,75074],{},"匹配的是a或b或c []只选一个",[14,75076,75077],{},[20,75078],{"alt":22,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75081,75082],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75084,75085],{},[20,75086],{"alt":22,"src":75087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75089,75090],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75092,75093],{},[20,75094],{"alt":22,"src":75095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[106,75097,75099],{"className":50623,"code":75098,"language":50625,"meta":22,"style":22},"\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",[112,75100,75101,75111,75125,75129,75137,75151,75171,75183,75191,75195,75203,75211,75216,75247,75274,75302,75306,75311,75339,75370,75375,75380,75411,75443,75475,75479,75484,75515,75545,75575,75579,75584,75615,75646,75676,75706,75710,75715,75748,75752,75757,75788,75819,75823,75828,75859,75889,75920,75924,75929,75961,75992,76023,76050,76081,76113,76146,76177,76208,76240,76271,76279,76287,76291],{"__ignoreMap":22},[115,75102,75103,75105,75107,75109],{"class":117,"line":118},[115,75104,51287],{"class":125},[115,75106,51291],{"class":51290},[115,75108,51294],{"class":1963},[115,75110,51297],{"class":125},[115,75112,75113,75115,75117,75119,75121,75123],{"class":117,"line":37},[115,75114,1035],{"class":125},[115,75116,50625],{"class":51290},[115,75118,51306],{"class":1963},[115,75120,171],{"class":125},[115,75122,51311],{"class":230},[115,75124,51297],{"class":125},[115,75126,75127],{"class":117,"line":1180},[115,75128,2400],{"emptyLinePlaceholder":42},[115,75130,75131,75133,75135],{"class":117,"line":1195},[115,75132,1035],{"class":125},[115,75134,51324],{"class":51290},[115,75136,51297],{"class":125},[115,75138,75139,75141,75143,75145,75147,75149],{"class":117,"line":1201},[115,75140,52134],{"class":125},[115,75142,51334],{"class":51290},[115,75144,51337],{"class":1963},[115,75146,171],{"class":125},[115,75148,51342],{"class":230},[115,75150,51297],{"class":125},[115,75152,75153,75155,75157,75159,75161,75163,75165,75167,75169],{"class":117,"line":1215},[115,75154,52134],{"class":125},[115,75156,51334],{"class":51290},[115,75158,14921],{"class":1963},[115,75160,171],{"class":125},[115,75162,51381],{"class":230},[115,75164,51361],{"class":1963},[115,75166,171],{"class":125},[115,75168,51388],{"class":230},[115,75170,51297],{"class":125},[115,75172,75173,75175,75177,75179,75181],{"class":117,"line":1221},[115,75174,52134],{"class":125},[115,75176,51397],{"class":51290},[115,75178,51400],{"class":125},[115,75180,51397],{"class":51290},[115,75182,51297],{"class":125},[115,75184,75185,75187,75189],{"class":117,"line":1312},[115,75186,51775],{"class":125},[115,75188,51324],{"class":51290},[115,75190,51297],{"class":125},[115,75192,75193],{"class":117,"line":1318},[115,75194,2400],{"emptyLinePlaceholder":42},[115,75196,75197,75199,75201],{"class":117,"line":1330},[115,75198,1035],{"class":125},[115,75200,51790],{"class":51290},[115,75202,51297],{"class":125},[115,75204,75205,75207,75209],{"class":117,"line":1612},[115,75206,52134],{"class":125},[115,75208,51803],{"class":51290},[115,75210,51297],{"class":125},[115,75212,75213],{"class":117,"line":1617},[115,75214,75215],{"class":184},"    \u002F\u002F 元字符中\n",[115,75217,75218,75220,75222,75224,75226,75229,75231,75233,75236,75238,75241,75244],{"class":117,"line":1623},[115,75219,73743],{"class":125},[115,75221,58237],{"class":1963},[115,75223,126],{"class":125},[115,75225,709],{"class":230},[115,75227,75228],{"class":47978},"哈",[115,75230,709],{"class":230},[115,75232,683],{"class":125},[115,75234,75235],{"class":1963},"test",[115,75237,126],{"class":125},[115,75239,75240],{"class":230},"'哈'",[115,75242,75243],{"class":125},"))  ",[115,75245,75246],{"class":184},"\u002F\u002Ftrue\n",[115,75248,75249,75251,75253,75255,75257,75259,75261,75263,75265,75267,75270,75272],{"class":117,"line":1628},[115,75250,73743],{"class":125},[115,75252,58237],{"class":1963},[115,75254,126],{"class":125},[115,75256,709],{"class":230},[115,75258,75228],{"class":47978},[115,75260,709],{"class":230},[115,75262,683],{"class":125},[115,75264,75235],{"class":1963},[115,75266,126],{"class":125},[115,75268,75269],{"class":230},"'哈哈'",[115,75271,75243],{"class":125},[115,75273,75246],{"class":184},[115,75275,75276,75278,75280,75282,75284,75286,75288,75290,75292,75294,75297,75300],{"class":117,"line":1642},[115,75277,73743],{"class":125},[115,75279,58237],{"class":1963},[115,75281,126],{"class":125},[115,75283,709],{"class":230},[115,75285,75228],{"class":47978},[115,75287,709],{"class":230},[115,75289,683],{"class":125},[115,75291,75235],{"class":1963},[115,75293,126],{"class":125},[115,75295,75296],{"class":230},"'二哈'",[115,75298,75299],{"class":125},"))   ",[115,75301,75246],{"class":184},[115,75303,75304],{"class":117,"line":1647},[115,75305,2400],{"emptyLinePlaceholder":42},[115,75307,75308],{"class":117,"line":1653},[115,75309,75310],{"class":184},"    \u002F\u002F 1.边界符\n",[115,75312,75313,75315,75317,75319,75321,75323,75325,75327,75329,75331,75333,75335,75337],{"class":117,"line":1674},[115,75314,73743],{"class":125},[115,75316,58237],{"class":1963},[115,75318,126],{"class":125},[115,75320,709],{"class":230},[115,75322,1091],{"class":121},[115,75324,75228],{"class":47978},[115,75326,709],{"class":230},[115,75328,683],{"class":125},[115,75330,75235],{"class":1963},[115,75332,126],{"class":125},[115,75334,75240],{"class":230},[115,75336,75243],{"class":125},[115,75338,75246],{"class":184},[115,75340,75341,75343,75345,75347,75349,75351,75353,75355,75357,75359,75361,75363,75365,75367],{"class":117,"line":1679},[115,75342,73743],{"class":125},[115,75344,58237],{"class":1963},[115,75346,126],{"class":125},[115,75348,709],{"class":230},[115,75350,1091],{"class":121},[115,75352,75228],{"class":47978},[115,75354,427],{"class":121},[115,75356,709],{"class":230},[115,75358,683],{"class":125},[115,75360,75235],{"class":1963},[115,75362,126],{"class":125},[115,75364,75269],{"class":230},[115,75366,75243],{"class":125},[115,75368,75369],{"class":184},"\u002F\u002Ffalse\n",[115,75371,75372],{"class":117,"line":1693},[115,75373,75374],{"class":184},"    \u002F\u002F 2.量词\n",[115,75376,75377],{"class":117,"line":1698},[115,75378,75379],{"class":184},"    \u002F\u002F 量词 * 类似于 >= 0\n",[115,75381,75382,75384,75386,75388,75390,75392,75394,75397,75399,75401,75403,75405,75407,75409],{"class":117,"line":1727},[115,75383,73743],{"class":125},[115,75385,58237],{"class":1963},[115,75387,126],{"class":125},[115,75389,709],{"class":230},[115,75391,1091],{"class":121},[115,75393,75228],{"class":47978},[115,75395,75396],{"class":121},"*$",[115,75398,709],{"class":230},[115,75400,683],{"class":125},[115,75402,75235],{"class":1963},[115,75404,126],{"class":125},[115,75406,75269],{"class":230},[115,75408,75243],{"class":125},[115,75410,75246],{"class":184},[115,75412,75413,75415,75417,75419,75421,75423,75425,75427,75429,75431,75433,75435,75438,75440],{"class":117,"line":1732},[115,75414,73743],{"class":125},[115,75416,58237],{"class":1963},[115,75418,126],{"class":125},[115,75420,709],{"class":230},[115,75422,1091],{"class":121},[115,75424,75228],{"class":47978},[115,75426,75396],{"class":121},[115,75428,709],{"class":230},[115,75430,683],{"class":125},[115,75432,75235],{"class":1963},[115,75434,126],{"class":125},[115,75436,75437],{"class":230},"'二哈好傻'",[115,75439,75243],{"class":125},[115,75441,75442],{"class":184},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[115,75444,75445,75447,75449,75451,75453,75455,75457,75459,75461,75463,75465,75467,75470,75472],{"class":117,"line":1749},[115,75446,73743],{"class":125},[115,75448,58237],{"class":1963},[115,75450,126],{"class":125},[115,75452,709],{"class":230},[115,75454,1091],{"class":121},[115,75456,75228],{"class":47978},[115,75458,75396],{"class":121},[115,75460,709],{"class":230},[115,75462,683],{"class":125},[115,75464,75235],{"class":1963},[115,75466,126],{"class":125},[115,75468,75469],{"class":230},"'哈好哈'",[115,75471,75299],{"class":125},[115,75473,75474],{"class":184},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[115,75476,75477],{"class":117,"line":1754},[115,75478,2400],{"emptyLinePlaceholder":42},[115,75480,75481],{"class":117,"line":1759},[115,75482,75483],{"class":184},"    \u002F\u002F +类似于>=1\n",[115,75485,75486,75488,75490,75492,75494,75496,75498,75501,75503,75505,75507,75509,75511,75513],{"class":117,"line":1764},[115,75487,73743],{"class":125},[115,75489,58237],{"class":1963},[115,75491,126],{"class":125},[115,75493,709],{"class":230},[115,75495,1091],{"class":121},[115,75497,75228],{"class":47978},[115,75499,75500],{"class":121},"+$",[115,75502,709],{"class":230},[115,75504,683],{"class":125},[115,75506,75235],{"class":1963},[115,75508,126],{"class":125},[115,75510,75269],{"class":230},[115,75512,75243],{"class":125},[115,75514,75246],{"class":184},[115,75516,75517,75519,75521,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543],{"class":117,"line":1778},[115,75518,73743],{"class":125},[115,75520,58237],{"class":1963},[115,75522,126],{"class":125},[115,75524,709],{"class":230},[115,75526,1091],{"class":121},[115,75528,75228],{"class":47978},[115,75530,75500],{"class":121},[115,75532,709],{"class":230},[115,75534,683],{"class":125},[115,75536,75235],{"class":1963},[115,75538,126],{"class":125},[115,75540,75437],{"class":230},[115,75542,75243],{"class":125},[115,75544,75442],{"class":184},[115,75546,75547,75549,75551,75553,75555,75557,75559,75561,75563,75565,75567,75569,75571,75573],{"class":117,"line":1783},[115,75548,73743],{"class":125},[115,75550,58237],{"class":1963},[115,75552,126],{"class":125},[115,75554,709],{"class":230},[115,75556,1091],{"class":121},[115,75558,75228],{"class":47978},[115,75560,75500],{"class":121},[115,75562,709],{"class":230},[115,75564,683],{"class":125},[115,75566,75235],{"class":1963},[115,75568,126],{"class":125},[115,75570,75469],{"class":230},[115,75572,75299],{"class":125},[115,75574,75369],{"class":184},[115,75576,75577],{"class":117,"line":2577},[115,75578,2400],{"emptyLinePlaceholder":42},[115,75580,75581],{"class":117,"line":2591},[115,75582,75583],{"class":184},"    \u002F\u002F ?类似于0次或一次\n",[115,75585,75586,75588,75590,75592,75594,75596,75599,75601,75603,75605,75607,75609,75611,75613],{"class":117,"line":2599},[115,75587,73743],{"class":125},[115,75589,58237],{"class":1963},[115,75591,126],{"class":125},[115,75593,709],{"class":230},[115,75595,1091],{"class":121},[115,75597,75598],{"class":47978},"哈？",[115,75600,427],{"class":121},[115,75602,709],{"class":230},[115,75604,683],{"class":125},[115,75606,75235],{"class":1963},[115,75608,126],{"class":125},[115,75610,74218],{"class":230},[115,75612,75299],{"class":125},[115,75614,75246],{"class":184},[115,75616,75617,75619,75621,75623,75625,75627,75629,75632,75634,75636,75638,75640,75642,75644],{"class":117,"line":2604},[115,75618,73743],{"class":125},[115,75620,58237],{"class":1963},[115,75622,126],{"class":125},[115,75624,709],{"class":230},[115,75626,1091],{"class":121},[115,75628,75228],{"class":47978},[115,75630,75631],{"class":121},"?$",[115,75633,709],{"class":230},[115,75635,683],{"class":125},[115,75637,75235],{"class":1963},[115,75639,126],{"class":125},[115,75641,75269],{"class":230},[115,75643,75243],{"class":125},[115,75645,75369],{"class":184},[115,75647,75648,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674],{"class":117,"line":2610},[115,75649,73743],{"class":125},[115,75651,58237],{"class":1963},[115,75653,126],{"class":125},[115,75655,709],{"class":230},[115,75657,1091],{"class":121},[115,75659,75228],{"class":47978},[115,75661,75631],{"class":121},[115,75663,709],{"class":230},[115,75665,683],{"class":125},[115,75667,75235],{"class":1963},[115,75669,126],{"class":125},[115,75671,75437],{"class":230},[115,75673,75243],{"class":125},[115,75675,75442],{"class":184},[115,75677,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696,75698,75700,75702,75704],{"class":117,"line":2616},[115,75679,73743],{"class":125},[115,75681,58237],{"class":1963},[115,75683,126],{"class":125},[115,75685,709],{"class":230},[115,75687,1091],{"class":121},[115,75689,75228],{"class":47978},[115,75691,75631],{"class":121},[115,75693,709],{"class":230},[115,75695,683],{"class":125},[115,75697,75235],{"class":1963},[115,75699,126],{"class":125},[115,75701,75469],{"class":230},[115,75703,75243],{"class":125},[115,75705,75369],{"class":184},[115,75707,75708],{"class":117,"line":2621},[115,75709,2400],{"emptyLinePlaceholder":42},[115,75711,75712],{"class":117,"line":7949},[115,75713,75714],{"class":184},"    \u002F\u002F {n}写几，就必须出现几次\n",[115,75716,75717,75719,75721,75723,75725,75727,75729,75732,75734,75736,75738,75740,75743,75746],{"class":117,"line":7973},[115,75718,73743],{"class":125},[115,75720,58237],{"class":1963},[115,75722,126],{"class":125},[115,75724,709],{"class":230},[115,75726,1091],{"class":121},[115,75728,75228],{"class":47978},[115,75730,75731],{"class":121},"{4}$",[115,75733,709],{"class":230},[115,75735,683],{"class":125},[115,75737,75235],{"class":1963},[115,75739,126],{"class":125},[115,75741,75742],{"class":230},"'哈哈哈哈'",[115,75744,75745],{"class":125},")) ",[115,75747,75246],{"class":184},[115,75749,75750],{"class":117,"line":7978},[115,75751,2400],{"emptyLinePlaceholder":42},[115,75753,75754],{"class":117,"line":7984},[115,75755,75756],{"class":184},"    \u002F\u002F {n,}大于等于n次\n",[115,75758,75759,75761,75763,75765,75767,75769,75771,75774,75776,75778,75780,75782,75784,75786],{"class":117,"line":8011},[115,75760,73743],{"class":125},[115,75762,58237],{"class":1963},[115,75764,126],{"class":125},[115,75766,709],{"class":230},[115,75768,1091],{"class":121},[115,75770,75228],{"class":47978},[115,75772,75773],{"class":121},"{4,}$",[115,75775,709],{"class":230},[115,75777,683],{"class":125},[115,75779,75235],{"class":1963},[115,75781,126],{"class":125},[115,75783,75742],{"class":230},[115,75785,75745],{"class":125},[115,75787,75246],{"class":184},[115,75789,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75815,75817],{"class":117,"line":8016},[115,75791,73743],{"class":125},[115,75793,58237],{"class":1963},[115,75795,126],{"class":125},[115,75797,709],{"class":230},[115,75799,1091],{"class":121},[115,75801,75228],{"class":47978},[115,75803,75773],{"class":121},[115,75805,709],{"class":230},[115,75807,683],{"class":125},[115,75809,75235],{"class":1963},[115,75811,126],{"class":125},[115,75813,75814],{"class":230},"'哈哈哈哈哈'",[115,75816,75745],{"class":125},[115,75818,75246],{"class":184},[115,75820,75821],{"class":117,"line":8022},[115,75822,2400],{"emptyLinePlaceholder":42},[115,75824,75825],{"class":117,"line":8034},[115,75826,75827],{"class":184},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[115,75829,75830,75832,75834,75836,75838,75840,75842,75845,75847,75849,75851,75853,75855,75857],{"class":117,"line":8046},[115,75831,73743],{"class":125},[115,75833,58237],{"class":1963},[115,75835,126],{"class":125},[115,75837,709],{"class":230},[115,75839,1091],{"class":121},[115,75841,75228],{"class":47978},[115,75843,75844],{"class":121},"{4,6}$",[115,75846,709],{"class":230},[115,75848,683],{"class":125},[115,75850,75235],{"class":1963},[115,75852,126],{"class":125},[115,75854,75742],{"class":230},[115,75856,75745],{"class":125},[115,75858,75246],{"class":184},[115,75860,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879,75881,75883,75885,75887],{"class":117,"line":8058},[115,75862,73743],{"class":125},[115,75864,58237],{"class":1963},[115,75866,126],{"class":125},[115,75868,709],{"class":230},[115,75870,1091],{"class":121},[115,75872,75228],{"class":47978},[115,75874,75844],{"class":121},[115,75876,709],{"class":230},[115,75878,683],{"class":125},[115,75880,75235],{"class":1963},[115,75882,126],{"class":125},[115,75884,75814],{"class":230},[115,75886,75745],{"class":125},[115,75888,75246],{"class":184},[115,75890,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75911,75913,75916,75918],{"class":117,"line":9717},[115,75892,73743],{"class":125},[115,75894,58237],{"class":1963},[115,75896,126],{"class":125},[115,75898,709],{"class":230},[115,75900,1091],{"class":121},[115,75902,75228],{"class":47978},[115,75904,75844],{"class":121},[115,75906,709],{"class":230},[115,75908,683],{"class":125},[115,75910,75235],{"class":1963},[115,75912,126],{"class":125},[115,75914,75915],{"class":230},"'哈哈哈哈哈哈哈'",[115,75917,75745],{"class":125},[115,75919,75369],{"class":184},[115,75921,75922],{"class":117,"line":9742},[115,75923,2400],{"emptyLinePlaceholder":42},[115,75925,75926],{"class":117,"line":9765},[115,75927,75928],{"class":184},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[115,75930,75931,75933,75935,75937,75939,75941,75944,75946,75948,75950,75952,75954,75957,75959],{"class":117,"line":9789},[115,75932,73743],{"class":125},[115,75934,58237],{"class":1963},[115,75936,126],{"class":125},[115,75938,709],{"class":230},[115,75940,1091],{"class":121},[115,75942,75943],{"class":174},"[abc]",[115,75945,427],{"class":121},[115,75947,709],{"class":230},[115,75949,683],{"class":125},[115,75951,75235],{"class":1963},[115,75953,126],{"class":125},[115,75955,75956],{"class":230},"'a'",[115,75958,75243],{"class":125},[115,75960,75246],{"class":184},[115,75962,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983,75985,75988,75990],{"class":117,"line":9794},[115,75964,73743],{"class":125},[115,75966,58237],{"class":1963},[115,75968,126],{"class":125},[115,75970,709],{"class":230},[115,75972,1091],{"class":121},[115,75974,75943],{"class":174},[115,75976,427],{"class":121},[115,75978,709],{"class":230},[115,75980,683],{"class":125},[115,75982,75235],{"class":1963},[115,75984,126],{"class":125},[115,75986,75987],{"class":230},"'b'",[115,75989,75243],{"class":125},[115,75991,75246],{"class":184},[115,75993,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76014,76016,76019,76021],{"class":117,"line":9799},[115,75995,73743],{"class":125},[115,75997,58237],{"class":1963},[115,75999,126],{"class":125},[115,76001,709],{"class":230},[115,76003,1091],{"class":121},[115,76005,75943],{"class":174},[115,76007,427],{"class":121},[115,76009,709],{"class":230},[115,76011,683],{"class":125},[115,76013,75235],{"class":1963},[115,76015,126],{"class":125},[115,76017,76018],{"class":230},"'c'",[115,76020,75243],{"class":125},[115,76022,75246],{"class":184},[115,76024,76025,76027,76029,76031,76033,76035,76037,76039,76041,76043,76046,76048],{"class":117,"line":9804},[115,76026,73743],{"class":125},[115,76028,58237],{"class":1963},[115,76030,126],{"class":125},[115,76032,709],{"class":230},[115,76034,75943],{"class":174},[115,76036,709],{"class":230},[115,76038,683],{"class":125},[115,76040,75235],{"class":1963},[115,76042,126],{"class":125},[115,76044,76045],{"class":230},"'ab'",[115,76047,75243],{"class":125},[115,76049,75246],{"class":184},[115,76051,76052,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078],{"class":117,"line":9813},[115,76053,73743],{"class":125},[115,76055,58237],{"class":1963},[115,76057,126],{"class":125},[115,76059,709],{"class":230},[115,76061,1091],{"class":121},[115,76063,75943],{"class":174},[115,76065,427],{"class":121},[115,76067,709],{"class":230},[115,76069,683],{"class":125},[115,76071,75235],{"class":1963},[115,76073,126],{"class":125},[115,76075,76045],{"class":230},[115,76077,75243],{"class":125},[115,76079,76080],{"class":184},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[115,76082,76083,76085,76087,76089,76091,76093,76095,76098,76100,76102,76104,76106,76108,76110],{"class":117,"line":9818},[115,76084,73743],{"class":125},[115,76086,58237],{"class":1963},[115,76088,126],{"class":125},[115,76090,709],{"class":230},[115,76092,1091],{"class":121},[115,76094,75943],{"class":174},[115,76096,76097],{"class":121},"{2}$",[115,76099,709],{"class":230},[115,76101,683],{"class":125},[115,76103,75235],{"class":1963},[115,76105,126],{"class":125},[115,76107,76045],{"class":230},[115,76109,75243],{"class":125},[115,76111,76112],{"class":184},"\u002F\u002Ftrue   可以选两个\n",[115,76114,76115,76117,76119,76121,76123,76125,76128,76130,76132,76134,76136,76138,76141,76143],{"class":117,"line":9824},[115,76116,73743],{"class":125},[115,76118,58237],{"class":1963},[115,76120,126],{"class":125},[115,76122,709],{"class":230},[115,76124,1091],{"class":121},[115,76126,76127],{"class":174},"[a-z]",[115,76129,427],{"class":121},[115,76131,709],{"class":230},[115,76133,683],{"class":125},[115,76135,75235],{"class":1963},[115,76137,126],{"class":125},[115,76139,76140],{"class":230},"'p'",[115,76142,75299],{"class":125},[115,76144,76145],{"class":184},"\u002F\u002Ftrue   依然只能选一个\n",[115,76147,76148,76150,76152,76154,76156,76158,76161,76163,76165,76167,76169,76171,76173,76175],{"class":117,"line":9845},[115,76149,73743],{"class":125},[115,76151,58237],{"class":1963},[115,76153,126],{"class":125},[115,76155,709],{"class":230},[115,76157,1091],{"class":121},[115,76159,76160],{"class":174},"[A-Z]",[115,76162,427],{"class":121},[115,76164,709],{"class":230},[115,76166,683],{"class":125},[115,76168,75235],{"class":1963},[115,76170,126],{"class":125},[115,76172,76140],{"class":230},[115,76174,75299],{"class":125},[115,76176,75369],{"class":184},[115,76178,76179,76181,76183,76185,76187,76189,76191,76193,76195,76197,76199,76201,76204,76206],{"class":117,"line":9851},[115,76180,73743],{"class":125},[115,76182,58237],{"class":1963},[115,76184,126],{"class":125},[115,76186,709],{"class":230},[115,76188,1091],{"class":121},[115,76190,76160],{"class":174},[115,76192,427],{"class":121},[115,76194,709],{"class":230},[115,76196,683],{"class":125},[115,76198,75235],{"class":1963},[115,76200,126],{"class":125},[115,76202,76203],{"class":230},"'P'",[115,76205,75299],{"class":125},[115,76207,75246],{"class":184},[115,76209,76210,76212,76214,76216,76218,76220,76223,76225,76227,76229,76231,76233,76236,76238],{"class":117,"line":9865},[115,76211,73743],{"class":125},[115,76213,58237],{"class":1963},[115,76215,126],{"class":125},[115,76217,709],{"class":230},[115,76219,1091],{"class":121},[115,76221,76222],{"class":174},"[0-9]",[115,76224,427],{"class":121},[115,76226,709],{"class":230},[115,76228,683],{"class":125},[115,76230,75235],{"class":1963},[115,76232,126],{"class":125},[115,76234,76235],{"class":230},"'0'",[115,76237,75299],{"class":125},[115,76239,75246],{"class":184},[115,76241,76242,76244,76246,76248,76250,76252,76255,76257,76259,76261,76263,76265,76267,76269],{"class":117,"line":9871},[115,76243,73743],{"class":125},[115,76245,58237],{"class":1963},[115,76247,126],{"class":125},[115,76249,709],{"class":230},[115,76251,1091],{"class":121},[115,76253,76254],{"class":174},"[a-zA-Z0-9]",[115,76256,427],{"class":121},[115,76258,709],{"class":230},[115,76260,683],{"class":125},[115,76262,75235],{"class":1963},[115,76264,126],{"class":125},[115,76266,76140],{"class":230},[115,76268,75243],{"class":125},[115,76270,75246],{"class":184},[115,76272,76273,76275,76277],{"class":117,"line":9898},[115,76274,52407],{"class":125},[115,76276,51803],{"class":51290},[115,76278,51297],{"class":125},[115,76280,76281,76283,76285],{"class":117,"line":9907},[115,76282,51775],{"class":125},[115,76284,51790],{"class":51290},[115,76286,51297],{"class":125},[115,76288,76289],{"class":117,"line":9913},[115,76290,2400],{"emptyLinePlaceholder":42},[115,76292,76293,76295,76297],{"class":117,"line":9921},[115,76294,51775],{"class":125},[115,76296,50625],{"class":51290},[115,76298,51297],{"class":125},[21999,76300,76302],{"id":76301},"_3624-修饰符","3.6.2.4 修饰符",[14,76304,76305],{},[20,76306],{"alt":22,"src":76307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76309,76310],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76312,76313],{},[20,76314],{"alt":22,"src":76315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[106,76317,76319],{"className":50623,"code":76318,"language":50625,"meta":22,"style":22},"\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",[112,76320,76321,76331,76345,76353,76367,76387,76399,76407,76415,76423,76455,76486,76491,76523,76534,76567,76576,76584,76592],{"__ignoreMap":22},[115,76322,76323,76325,76327,76329],{"class":117,"line":118},[115,76324,51287],{"class":125},[115,76326,51291],{"class":51290},[115,76328,51294],{"class":1963},[115,76330,51297],{"class":125},[115,76332,76333,76335,76337,76339,76341,76343],{"class":117,"line":37},[115,76334,1035],{"class":125},[115,76336,50625],{"class":51290},[115,76338,51306],{"class":1963},[115,76340,171],{"class":125},[115,76342,51311],{"class":230},[115,76344,51297],{"class":125},[115,76346,76347,76349,76351],{"class":117,"line":1180},[115,76348,1035],{"class":125},[115,76350,51324],{"class":51290},[115,76352,51297],{"class":125},[115,76354,76355,76357,76359,76361,76363,76365],{"class":117,"line":1195},[115,76356,52134],{"class":125},[115,76358,51334],{"class":51290},[115,76360,51337],{"class":1963},[115,76362,171],{"class":125},[115,76364,51342],{"class":230},[115,76366,51297],{"class":125},[115,76368,76369,76371,76373,76375,76377,76379,76381,76383,76385],{"class":117,"line":1201},[115,76370,52134],{"class":125},[115,76372,51334],{"class":51290},[115,76374,14921],{"class":1963},[115,76376,171],{"class":125},[115,76378,51381],{"class":230},[115,76380,51361],{"class":1963},[115,76382,171],{"class":125},[115,76384,51388],{"class":230},[115,76386,51297],{"class":125},[115,76388,76389,76391,76393,76395,76397],{"class":117,"line":1215},[115,76390,52134],{"class":125},[115,76392,51397],{"class":51290},[115,76394,51400],{"class":125},[115,76396,51397],{"class":51290},[115,76398,51297],{"class":125},[115,76400,76401,76403,76405],{"class":117,"line":1221},[115,76402,51775],{"class":125},[115,76404,51324],{"class":51290},[115,76406,51297],{"class":125},[115,76408,76409,76411,76413],{"class":117,"line":1312},[115,76410,1035],{"class":125},[115,76412,51790],{"class":51290},[115,76414,51297],{"class":125},[115,76416,76417,76419,76421],{"class":117,"line":1318},[115,76418,52134],{"class":125},[115,76420,51803],{"class":51290},[115,76422,51297],{"class":125},[115,76424,76425,76427,76429,76431,76433,76435,76438,76440,76442,76444,76446,76448,76451,76453],{"class":117,"line":1330},[115,76426,73743],{"class":125},[115,76428,58237],{"class":1963},[115,76430,126],{"class":125},[115,76432,709],{"class":230},[115,76434,1091],{"class":121},[115,76436,76437],{"class":47978},"java",[115,76439,427],{"class":121},[115,76441,709],{"class":230},[115,76443,683],{"class":125},[115,76445,75235],{"class":1963},[115,76447,126],{"class":125},[115,76449,76450],{"class":230},"'java'",[115,76452,75745],{"class":125},[115,76454,75246],{"class":184},[115,76456,76457,76459,76461,76463,76465,76467,76469,76471,76473,76475,76477,76479,76482,76484],{"class":117,"line":1612},[115,76458,73743],{"class":125},[115,76460,58237],{"class":1963},[115,76462,126],{"class":125},[115,76464,709],{"class":230},[115,76466,1091],{"class":121},[115,76468,76437],{"class":47978},[115,76470,427],{"class":121},[115,76472,709],{"class":230},[115,76474,683],{"class":125},[115,76476,75235],{"class":1963},[115,76478,126],{"class":125},[115,76480,76481],{"class":230},"'Java'",[115,76483,75745],{"class":125},[115,76485,75369],{"class":184},[115,76487,76488],{"class":117,"line":1617},[115,76489,76490],{"class":184},"    \u002F\u002F 不区分大小写、\n",[115,76492,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515,76517,76519,76521],{"class":117,"line":1623},[115,76494,73743],{"class":125},[115,76496,58237],{"class":1963},[115,76498,126],{"class":125},[115,76500,709],{"class":230},[115,76502,1091],{"class":121},[115,76504,76437],{"class":47978},[115,76506,427],{"class":121},[115,76508,709],{"class":230},[115,76510,566],{"class":121},[115,76512,683],{"class":125},[115,76514,75235],{"class":1963},[115,76516,126],{"class":125},[115,76518,76481],{"class":230},[115,76520,75745],{"class":125},[115,76522,75246],{"class":184},[115,76524,76525,76527,76529,76531],{"class":117,"line":1628},[115,76526,11222],{"class":121},[115,76528,73909],{"class":174},[115,76530,13565],{"class":121},[115,76532,76533],{"class":230}," 'java是一门编程语言，学完java工资很高'\n",[115,76535,76536,76538,76541,76543,76546,76549,76551,76553,76555,76557,76560,76562,76565],{"class":117,"line":1642},[115,76537,11222],{"class":121},[115,76539,76540],{"class":174}," result",[115,76542,13565],{"class":121},[115,76544,76545],{"class":125}," str.",[115,76547,76548],{"class":1963},"replace",[115,76550,126],{"class":125},[115,76552,709],{"class":230},[115,76554,76437],{"class":47978},[115,76556,709],{"class":230},[115,76558,76559],{"class":121},"ig",[115,76561,12436],{"class":125},[115,76563,76564],{"class":230},"'前端'",[115,76566,132],{"class":125},[115,76568,76569,76571,76573],{"class":117,"line":1647},[115,76570,73743],{"class":125},[115,76572,58237],{"class":1963},[115,76574,76575],{"class":125},"(result)\n",[115,76577,76578,76580,76582],{"class":117,"line":1653},[115,76579,52407],{"class":125},[115,76581,51803],{"class":51290},[115,76583,51297],{"class":125},[115,76585,76586,76588,76590],{"class":117,"line":1674},[115,76587,51775],{"class":125},[115,76589,51790],{"class":51290},[115,76591,51297],{"class":125},[115,76593,76594,76596,76598],{"class":117,"line":1679},[115,76595,51775],{"class":125},[115,76597,50625],{"class":51290},[115,76599,51297],{"class":125},[5127,76601,76602],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":22,"searchDepth":37,"depth":37,"links":76604},[76605,76615,76627,76644,76651,76659],{"id":53350,"depth":37,"text":53351,"children":76606},[76607,76608,76609,76610,76611,76612,76613,76614],{"id":53354,"depth":1180,"text":53355},{"id":53387,"depth":1180,"text":53388},{"id":53426,"depth":1180,"text":53427},{"id":53584,"depth":1180,"text":53585},{"id":53632,"depth":1180,"text":53633},{"id":53769,"depth":1180,"text":53770},{"id":54091,"depth":1180,"text":54092},{"id":57079,"depth":1180,"text":57080},{"id":57107,"depth":37,"text":57108,"children":76616},[76617,76618,76619,76620,76621,76622,76623,76624,76625,76626],{"id":57111,"depth":1180,"text":57112},{"id":57134,"depth":1180,"text":57135},{"id":58049,"depth":1180,"text":58050},{"id":58739,"depth":1180,"text":58740},{"id":59021,"depth":1180,"text":59022},{"id":63182,"depth":1180,"text":63183},{"id":63352,"depth":1180,"text":63353},{"id":63480,"depth":1180,"text":63481},{"id":63505,"depth":1180,"text":63506},{"id":64894,"depth":1180,"text":64895},{"id":66047,"depth":37,"text":66048,"children":76628},[76629,76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643],{"id":66051,"depth":1180,"text":66052},{"id":66705,"depth":1180,"text":66706},{"id":68400,"depth":1180,"text":68401},{"id":68441,"depth":1180,"text":68442},{"id":68483,"depth":1180,"text":68484},{"id":68497,"depth":1180,"text":68498},{"id":68546,"depth":1180,"text":68547},{"id":68558,"depth":1180,"text":68559},{"id":68573,"depth":1180,"text":68574},{"id":68609,"depth":1180,"text":68610},{"id":68690,"depth":1180,"text":68691},{"id":68818,"depth":1180,"text":68819},{"id":68830,"depth":1180,"text":68831},{"id":68849,"depth":1180,"text":68850},{"id":70960,"depth":1180,"text":70961},{"id":70979,"depth":37,"text":70980,"children":76645},[76646,76647,76648,76649,76650],{"id":71000,"depth":1180,"text":71001},{"id":71020,"depth":1180,"text":71021},{"id":71069,"depth":1180,"text":71070},{"id":71194,"depth":1180,"text":71195},{"id":71375,"depth":1180,"text":71376},{"id":71393,"depth":37,"text":71394,"children":76652},[76653,76654,76655,76656,76657,76658],{"id":71408,"depth":1180,"text":71409},{"id":71467,"depth":1180,"text":71468},{"id":71491,"depth":1180,"text":71492},{"id":71811,"depth":1180,"text":71812},{"id":71843,"depth":1180,"text":71844},{"id":71866,"depth":1180,"text":71867},{"id":74934,"depth":37,"text":74935,"children":76660},[76661,76662],{"id":74968,"depth":1180,"text":74969},{"id":75007,"depth":1180,"text":75008},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53322,"description":39},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76669,"title":76670,"body":76671,"description":39,"extension":40,"meta":92808,"navigation":42,"path":92809,"seo":92810,"stem":92811,"__hash__":92812},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76672,"toc":92744},[76673,76676,76679,76683,76687,76692,76697,76708,76712,76717,76720,76724,76727,76732,76736,76740,76743,76748,76751,76755,76758,76766,76769,76773,76778,76783,76786,76790,76795,76800,76803,76807,76812,76815,76820,76823,76828,76831,76836,76841,76844,76847,76851,76856,76861,76864,76868,76872,76875,76878,76881,76885,76889,76894,76899,76902,76906,76911,76916,76919,76922,76925,76928,76931,76934,76937,76940,76943,76948,76952,76957,76962,76965,76968,76971,76974,76977,76980,76983,76986,76990,76994,76997,77000,77003,77008,77010,77013,77016,77019,77022,77025,77028,77031,77034,77037,77040,77043,77046,77049,77054,77059,77064,77067,77071,77074,77079,77083,77085,77096,77101,77202,77205,77208,77211,77214,77217,77220,77223,77226,77228,77231,77234,77237,77240,77243,77245,77248,77251,77254,77257,77260,77263,77265,77268,77270,77272,77275,77279,77283,77286,77289,77292,77295,77298,77301,77304,77307,77310,77315,77435,77438,77441,77446,77449,77452,77455,77458,77463,77466,77469,77472,77475,77480,77483,77583,77648,77722,77726,77729,77732,77736,77739,77753,77782,77785,77788,77791,77794,77797,77800,77803,77805,77808,77811,77814,77817,77821,77826,77830,77835,77910,77913,78096,78099,78102,78105,78108,78111,78113,78116,78119,78122,78125,78128,78131,78133,78137,78140,78145,78148,78151,78154,78157,78159,78164,78167,78170,78173,78176,78178,78183,78186,78189,78191,78193,78196,78200,78203,78206,78211,78214,78217,78220,78270,78275,78279,78284,78287,78356,78359,78368,78372,78377,78380,78383,78391,78394,78411,80213,80217,80221,80226,80229,80233,80239,80245,80397,80402,80407,80410,80413,80416,80419,80422,80425,80428,80431,80434,80437,80440,80443,80448,80452,80455,80466,80470,80475,80478,80481,80484,80487,80490,80492,80495,80498,80501,80504,80506,80523,80526,80530,80533,80538,80543,80546,80549,80553,80556,80559,80568,80571,80575,80578,80583,80588,80655,80659,80662,80665,80670,80675,80761,80766,80770,80773,80776,80791,80794,80799,80803,80808,80917,80920,80931,81081,81085,81090,81199,81203,81208,81213,81218,81221,81228,81248,81284,81448,81453,81456,81461,81468,81471,81474,81477,81536,81592,81648,81652,81657,81972,81975,81979,81982,81987,82096,82101,82105,82110,82114,82185,82189,82191,82194,82197,82235,82511,82515,82532,82598,82632,82636,82639,82644,82673,82680,82689,82694,82709,82714,82723,82726,82863,82867,82929,82933,82938,83183,83187,83192,83195,83198,83201,83204,83208,83213,84794,84798,84802,84808,84811,84816,84820,84823,84828,84831,84842,84846,84851,84855,84860,84865,84868,84873,84877,84881,84884,84889,84894,84897,84900,84903,85025,85030,85132,85135,85138,85142,85147,85319,85324,85328,85331,85336,85402,85407,85410,85541,85544,85549,85552,85555,85646,85651,85654,85657,85660,85663,85668,85673,85676,85681,85686,85691,85695,85698,85701,85706,85711,85716,85721,85775,85778,85781,85786,85789,85792,85797,85802,85807,85811,85816,85830,85835,85838,85843,85847,85852,85857,85862,85867,85872,85877,85882,85887,85890,85894,85899,85902,85905,85908,85913,85918,85921,85924,85928,85931,85934,85939,85944,85949,85954,85957,85962,85967,86028,86033,86036,86041,87282,87287,87291,87295,87300,87303,87308,87313,87316,87321,87323,87328,87332,87335,87338,87349,87353,87358,87363,87418,87423,87428,87433,87644,87649,87653,87658,87661,87663,87666,87669,88116,88121,88128,88134,88137,88140,88404,88409,88413,88678,88683,88687,88692,88697,88702,88707,89038,89041,89046,89051,89054,89058,89062,89067,89072,89077,89082,89087,89092,89096,89099,89104,89109,89112,89186,89191,89196,89201,89203,89206,89576,89581,89586,89591,89594,89597,89699,89704,89709,89812,89816,89821,89825,89829,89834,89839,89842,89847,89850,89853,90246,90251,90254,90257,90260,90263,90783,90787,90792,90797,90802,90805,90810,90813,90816,91198,91203,91205,91207,91210,91213,91725,91729,91790,91793,91796,91799,91803,91806,91811,91816,92741],[10,76674,76670],{"id":76675},"_4js进阶",[14,76677,76678],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[57,76680,76682],{"id":76681},"_41-作用域","4.1 作用域",[86,76684,76686],{"id":76685},"_411-局部作用域","4.1.1 局部作用域",[14,76688,76689],{},[20,76690],{"alt":22,"src":76691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76693,76694],{},[20,76695],{"alt":22,"src":76696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1132,76698,76699,76702,76705],{},[72,76700,76701],{},"函数作用域在函数内部",[72,76703,76704],{},"块级作用域在{}",[72,76706,76707],{},"对象的那个{}不是作用域，不是块作用域",[86,76709,76711],{"id":76710},"_412-全局作用域","4.1.2 全局作用域",[14,76713,76714],{},[20,76715],{"alt":22,"src":76716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76718,76719],{},"window.a=10不要这样写",[86,76721,76723],{"id":76722},"_413-作用域链","4.1.3 作用域链",[14,76725,76726],{},"变量查找机制",[14,76728,76729],{},[20,76730],{"alt":22,"src":76731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[57,76733,76735],{"id":76734},"_42-垃圾回收机制","4.2 垃圾回收机制",[86,76737,76739],{"id":76738},"_421-大体介绍","4.2.1 大体介绍",[14,76741,76742],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76744,76745],{},[20,76746],{"alt":22,"src":76747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76749,76750],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[86,76752,76754],{"id":76753},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76756,76757],{},"堆栈空间分配区别：",[69,76759,76760,76763],{},[72,76761,76762],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[72,76764,76765],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76767,76768],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21999,76770,76772],{"id":76771},"_4221-引用计数","4.2.2.1 引用计数",[14,76774,76775],{},[20,76776],{"alt":22,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76779,76780],{},[20,76781],{"alt":22,"src":76782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76784,76785],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21999,76787,76789],{"id":76788},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76791,76792],{},[20,76793],{"alt":22,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76796,76797],{},[20,76798],{"alt":22,"src":76799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76801,76802],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[57,76804,76806],{"id":76805},"_43-闭包","4.3 闭包",[14,76808,76809],{},[20,76810],{"alt":22,"src":76811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76813,76814],{},"闭包：内层函数+外层函数的变量",[14,76816,76817],{},[20,76818],{"alt":22,"src":76819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76821,76822],{},"closure就是闭包",[14,76824,76825],{},[20,76826],{"alt":22,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76829,76830],{},"内层函数必须包含外层函数的变量才是闭包",[14,76832,76833],{},[20,76834],{"alt":22,"src":76835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76837,76838],{},[20,76839],{"alt":22,"src":76840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76842,76843],{},"闭包可能会引起内存泄漏",[14,76845,76846],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[57,76848,76850],{"id":76849},"_44-变量提升","4.4 变量提升",[14,76852,76853],{},[20,76854],{"alt":22,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76857,76858],{},[20,76859],{"alt":22,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76862,76863],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[57,76865,76867],{"id":76866},"_45-函数进阶","4.5 函数进阶",[86,76869,76871],{"id":76870},"_451-函数提升","4.5.1 函数提升",[14,76873,76874],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76876,76877],{},"只提升函数声明，不提升函数调用",[51803,76879,76880],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[86,76882,76884],{"id":76883},"_452-函数参数","4.5.2 函数参数",[21999,76886,76888],{"id":76887},"_4521-动态参数","4.5.2.1 动态参数",[14,76890,76891],{},[20,76892],{"alt":22,"src":76893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76895,76896],{},[20,76897],{"alt":22,"src":76898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76900,76901],{},"箭头函数里边没有arguments",[21999,76903,76905],{"id":76904},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76907,76908],{},[20,76909],{"alt":22,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76912,76913],{},[20,76914],{"alt":22,"src":76915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76917,76918],{},"剩余参数使用的时候不需要写...",[14,76920,76921],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76923,76924],{},"  function getSum(a,b,...arr) {",[14,76926,76927],{},"  console.log(11)",[14,76929,76930],{},"  }",[14,76932,76933],{},"  getSum(1,2,3,4)",[14,76935,76936],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76938,76939],{},"  getSum(1,2)",[14,76941,76942],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76944,76945],{},[20,76946],{"alt":22,"src":76947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21999,76949,76951],{"id":76950},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76953,76954],{},[20,76955],{"alt":22,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76958,76959],{},[20,76960],{"alt":22,"src":76961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76963,76964],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76966,76967],{},"展开运算符可以用于数组之间的合并：",[14,76969,76970],{},"const arr1 = [1, 2, 3]",[14,76972,76973],{},"const arr2 = [3, 4, 5]",[14,76975,76976],{},"const arr = [...arr1, ...arr2]",[14,76978,76979],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76981,76982],{},"剩余参数：函数参数使用，得到真数组",[14,76984,76985],{},"展开运算符：数组中使用，数组展开",[86,76987,76989],{"id":76988},"_453-箭头函数","4.5.3 箭头函数",[21999,76991,76993],{"id":76992},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76995,76996],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,76998,76999],{},"它不是万能的！！！",[14,77001,77002],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77004,77005],{},[20,77006],{"alt":22,"src":77007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77009,155],{},[14,77011,77012],{},"① 只有一个形参的时候，可以省略小括号：",[14,77014,77015],{},"const fn=x=>{console.log(x)}",[14,77017,77018],{},"② 只有一行代码时可以省略大括号：",[14,77020,77021],{},"const fn=x=>console.log(11)",[14,77023,77024],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77026,77027],{},"const fn=x=>x+x",[14,77029,77030],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77032,77033],{},"⑤ 阻止表单默认提交：",[14,77035,77036],{},"const form = document.querySelector('form')",[14,77038,77039],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77041,77042],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77044,77045],{},"const fn=uname=>({uname:uname})",[14,77047,77048],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77050,77051],{},[20,77052],{"alt":22,"src":77053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77055,77056],{},[20,77057],{"alt":22,"src":77058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77060,77061],{},[20,77062],{"alt":22,"src":77063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77065,77066],{},"一定不要忘记用()，有()就理解为自带return",[21999,77068,77070],{"id":77069},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77072,77073],{},"箭头函数是没有动态参数的arguments",[14,77075,77076],{},[20,77077],{"alt":22,"src":77078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21999,77080,77082],{"id":77081},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77084,11333],{},[69,77086,77087,77090,77093],{},[72,77088,77089],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[72,77091,77092],{},"事件回调函数使用箭头函数时，this 为全局的 window",[72,77094,77095],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77097,77098],{},[20,77099],{"alt":22,"src":77100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[106,77102,77104],{"className":53057,"code":77103,"language":53059,"meta":22,"style":22},"  \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",[112,77105,77106,77114,77119,77124,77129,77134,77139,77143,77148,77152,77156,77161,77166,77171,77175,77179,77184,77189,77194],{"__ignoreMap":22},[115,77107,77108,77110,77112],{"class":117,"line":118},[115,77109,52134],{"class":125},[115,77111,51803],{"class":51290},[115,77113,51297],{"class":125},[115,77115,77116],{"class":117,"line":37},[115,77117,77118],{"class":125},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[115,77120,77121],{"class":117,"line":1180},[115,77122,77123],{"class":125},"    console.log(this) \u002F\u002F指向window\n",[115,77125,77126],{"class":117,"line":1195},[115,77127,77128],{"class":125},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[115,77130,77131],{"class":117,"line":1201},[115,77132,77133],{"class":125},"    function fn() {\n",[115,77135,77136],{"class":117,"line":1215},[115,77137,77138],{"class":125},"      console.log(this)  \u002F\u002F指向window\n",[115,77140,77141],{"class":117,"line":1221},[115,77142,2187],{"class":125},[115,77144,77145],{"class":117,"line":1312},[115,77146,77147],{"class":125},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[115,77149,77150],{"class":117,"line":1318},[115,77151,2400],{"emptyLinePlaceholder":42},[115,77153,77154],{"class":117,"line":1330},[115,77155,71513],{"class":125},[115,77157,77158],{"class":117,"line":1612},[115,77159,77160],{"class":125},"      name: 'andy',\n",[115,77162,77163],{"class":117,"line":1617},[115,77164,77165],{"class":125},"      sayHai: function () {\n",[115,77167,77168],{"class":117,"line":1623},[115,77169,77170],{"class":125},"        console.log(this)\n",[115,77172,77173],{"class":117,"line":1628},[115,77174,52388],{"class":125},[115,77176,77177],{"class":117,"line":1642},[115,77178,2187],{"class":125},[115,77180,77181],{"class":117,"line":1647},[115,77182,77183],{"class":125},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[115,77185,77186],{"class":117,"line":1653},[115,77187,77188],{"class":125},"    \u002F\u002F 2.箭头函数的this\n",[115,77190,77191],{"class":117,"line":1674},[115,77192,77193],{"class":125},"    const fn = () => console.log(this)\n",[115,77195,77196,77198,77200],{"class":117,"line":1679},[115,77197,52407],{"class":125},[115,77199,51803],{"class":51290},[115,77201,51297],{"class":125},[14,77203,77204],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77206,77207],{},"const fn = () => console.log(this)",[14,77209,77210],{},"fn() \u002F\u002F指向window",[14,77212,77213],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77215,77216],{},"①",[14,77218,77219],{},"const obj = {",[14,77221,77222],{},"uname: 'pink老师',",[14,77224,77225],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77227,1071],{},[14,77229,77230],{},"调用对象里边的函数",[14,77232,77233],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77235,77236],{},"obj.sayHai()",[14,77238,77239],{},"②",[14,77241,77242],{},"const obj1 = {",[14,77244,77222],{},[14,77246,77247],{},"sayHai: function () {",[14,77249,77250],{},"let i = 10",[14,77252,77253],{},"const count = () => {",[14,77255,77256],{},"console.log(this)",[14,77258,77259],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77261,77262],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77264,1071],{},[14,77266,77267],{},"count()",[14,77269,1071],{},[14,77271,1071],{},[14,77273,77274],{},"obj1.sayHai()",[57,77276,77278],{"id":77277},"_46-解构赋值","4.6 解构赋值",[86,77280,77282],{"id":77281},"_461-数组解构","4.6.1 数组解构",[14,77284,77285],{},"以前要是使用数组中的值的话：",[14,77287,77288],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77290,77291],{},"const arr=[100,60,80]",[14,77293,77294],{},"const max=arr[0]",[14,77296,77297],{},"const min=arr[1]",[14,77299,77300],{},"const avg=arr[2]",[14,77302,77303],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77305,77306],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77308,77309],{},"这个写法就类似于上边的那种用很多const的方法",[14,77311,77312],{},[20,77313],{"alt":22,"src":77314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[106,77316,77318],{"className":50623,"code":77317,"language":50625,"meta":22,"style":22},"①变量之间交换值:\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",[112,77319,77320,77325,77330,77335,77340,77345,77349,77353,77358,77362,77367,77372,77376,77381,77386,77397,77407,77412,77417,77422,77426,77430],{"__ignoreMap":22},[115,77321,77322],{"class":117,"line":118},[115,77323,77324],{"class":125},"①变量之间交换值:\n",[115,77326,77327],{"class":117,"line":37},[115,77328,77329],{"class":125},"let a=1\n",[115,77331,77332],{"class":117,"line":1180},[115,77333,77334],{"class":125},"let b=2;\n",[115,77336,77337],{"class":117,"line":1195},[115,77338,77339],{"class":125},"必须加这行代码，不然就会报错\n",[115,77341,77342],{"class":117,"line":1201},[115,77343,77344],{"class":125},"[b,a]=[a,b]\n",[115,77346,77347],{"class":117,"line":1215},[115,77348,2400],{"emptyLinePlaceholder":42},[115,77350,77351],{"class":117,"line":1221},[115,77352,2400],{"emptyLinePlaceholder":42},[115,77354,77355],{"class":117,"line":1312},[115,77356,77357],{"class":125},"可以写成下面的方式：\n",[115,77359,77360],{"class":117,"line":1318},[115,77361,77329],{"class":125},[115,77363,77364],{"class":117,"line":1330},[115,77365,77366],{"class":125},"let b=2\n",[115,77368,77369],{"class":117,"line":1612},[115,77370,77371],{"class":125},";[b,a]=[a,b]\n",[115,77373,77374],{"class":117,"line":1617},[115,77375,2400],{"emptyLinePlaceholder":42},[115,77377,77378],{"class":117,"line":1623},[115,77379,77380],{"class":125},"②排序\n",[115,77382,77383],{"class":117,"line":1628},[115,77384,77385],{"class":125},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[115,77387,77388,77391,77394],{"class":117,"line":1642},[115,77389,77390],{"class":125},"for (let i = 0; i ",[115,77392,1035],{"class":77393},"s7hpK",[115,77395,77396],{"class":125}," arr1.length; i++) {\n",[115,77398,77399,77402,77404],{"class":117,"line":1647},[115,77400,77401],{"class":125},"   for (let j = 0; j ",[115,77403,1035],{"class":77393},[115,77405,77406],{"class":125}," arr1.length - 1; j++) {\n",[115,77408,77409],{"class":117,"line":1653},[115,77410,77411],{"class":125},"      if (arr1[j] > arr1[j + 1]) {\n",[115,77413,77414],{"class":117,"line":1674},[115,77415,77416],{"class":125},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[115,77418,77419],{"class":117,"line":1679},[115,77420,77421],{"class":125},"       }\n",[115,77423,77424],{"class":117,"line":1693},[115,77425,4309],{"class":125},[115,77427,77428],{"class":117,"line":1698},[115,77429,1565],{"class":125},[115,77431,77432],{"class":117,"line":1727},[115,77433,77434],{"class":125},"console.log(arr1)\n",[14,77436,77437],{},"数组解构的细节：",[14,77439,77440],{},"①变量多，单元值少",[14,77442,77443],{},[20,77444],{"alt":22,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77447,77448],{},"防止出现undefined的方法：",[14,77450,77451],{},"const [a=0,b=0] =[1]",[14,77453,77454],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77456,77457],{},"②变量少，单元值多",[14,77459,77460],{},[20,77461],{"alt":22,"src":77462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77464,77465],{},"此时可以使用剩余参数来接收多余的值",[14,77467,77468],{},"const [a,b,...c]=[1,2,3,4]",[14,77470,77471],{},"console.log(c) 输出[3,4]",[14,77473,77474],{},"③可以按需导入，忽略某些返回值",[14,77476,77477],{},[20,77478],{"alt":22,"src":77479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77481,77482],{},"④支持多维数组的结构",[106,77484,77488],{"className":77485,"code":77486,"language":77487,"meta":22,"style":22},"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",[112,77489,77490,77518,77534,77549,77564],{"__ignoreMap":22},[115,77491,77492,77494,77496,77498,77500,77502,77504,77506,77509,77511,77513,77515],{"class":117,"line":118},[115,77493,6793],{"class":121},[115,77495,51823],{"class":125},[115,77497,171],{"class":121},[115,77499,52216],{"class":125},[115,77501,343],{"class":174},[115,77503,12436],{"class":125},[115,77505,203],{"class":174},[115,77507,77508],{"class":125},", [",[115,77510,197],{"class":174},[115,77512,12436],{"class":125},[115,77514,418],{"class":174},[115,77516,77517],{"class":125},"]]\n",[115,77519,77520,77523,77525,77527,77529,77531],{"class":117,"line":37},[115,77521,77522],{"class":125},"console.",[115,77524,58237],{"class":1963},[115,77526,3851],{"class":125},[115,77528,317],{"class":174},[115,77530,4216],{"class":125},[115,77532,77533],{"class":184},"  \u002F\u002F1\n",[115,77535,77536,77538,77540,77542,77544,77546],{"class":117,"line":1180},[115,77537,77522],{"class":125},[115,77539,58237],{"class":1963},[115,77541,3851],{"class":125},[115,77543,343],{"class":174},[115,77545,4216],{"class":125},[115,77547,77548],{"class":184},"  \u002F\u002F2\n",[115,77550,77551,77553,77555,77557,77559,77561],{"class":117,"line":1195},[115,77552,77522],{"class":125},[115,77554,58237],{"class":1963},[115,77556,3851],{"class":125},[115,77558,203],{"class":174},[115,77560,4216],{"class":125},[115,77562,77563],{"class":184},"  \u002F\u002F[3,4]\n",[115,77565,77566,77568,77570,77572,77574,77576,77578,77580],{"class":117,"line":1201},[115,77567,77522],{"class":125},[115,77569,58237],{"class":1963},[115,77571,3851],{"class":125},[115,77573,203],{"class":174},[115,77575,4901],{"class":125},[115,77577,317],{"class":174},[115,77579,4216],{"class":125},[115,77581,77582],{"class":184},"  \u002F\u002F3\n",[106,77584,77586],{"className":77485,"code":77585,"language":77487,"meta":22,"style":22},"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",[112,77587,77588,77615,77626,77637],{"__ignoreMap":22},[115,77589,77590,77592,77595,77597,77599,77601,77603,77605,77607,77609,77611,77613],{"class":117,"line":118},[115,77591,6793],{"class":121},[115,77593,77594],{"class":125}," [a, b, c] ",[115,77596,171],{"class":121},[115,77598,52216],{"class":125},[115,77600,343],{"class":174},[115,77602,12436],{"class":125},[115,77604,203],{"class":174},[115,77606,77508],{"class":125},[115,77608,197],{"class":174},[115,77610,12436],{"class":125},[115,77612,418],{"class":174},[115,77614,77517],{"class":125},[115,77616,77617,77619,77621,77624],{"class":117,"line":37},[115,77618,77522],{"class":125},[115,77620,58237],{"class":1963},[115,77622,77623],{"class":125},"(a)",[115,77625,77533],{"class":184},[115,77627,77628,77630,77632,77635],{"class":117,"line":1180},[115,77629,77522],{"class":125},[115,77631,58237],{"class":1963},[115,77633,77634],{"class":125},"(b)",[115,77636,77548],{"class":184},[115,77638,77639,77641,77643,77646],{"class":117,"line":1195},[115,77640,77522],{"class":125},[115,77642,58237],{"class":1963},[115,77644,77645],{"class":125},"(c)",[115,77647,77563],{"class":184},[106,77649,77651],{"className":77485,"code":77650,"language":77487,"meta":22,"style":22},"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",[112,77652,77653,77680,77690,77700,77710],{"__ignoreMap":22},[115,77654,77655,77657,77660,77662,77664,77666,77668,77670,77672,77674,77676,77678],{"class":117,"line":118},[115,77656,6793],{"class":121},[115,77658,77659],{"class":125}," [a, b, [c, d]] ",[115,77661,171],{"class":121},[115,77663,52216],{"class":125},[115,77665,343],{"class":174},[115,77667,12436],{"class":125},[115,77669,203],{"class":174},[115,77671,77508],{"class":125},[115,77673,197],{"class":174},[115,77675,12436],{"class":125},[115,77677,418],{"class":174},[115,77679,77517],{"class":125},[115,77681,77682,77684,77686,77688],{"class":117,"line":37},[115,77683,77522],{"class":125},[115,77685,58237],{"class":1963},[115,77687,77623],{"class":125},[115,77689,77533],{"class":184},[115,77691,77692,77694,77696,77698],{"class":117,"line":1180},[115,77693,77522],{"class":125},[115,77695,58237],{"class":1963},[115,77697,77634],{"class":125},[115,77699,77548],{"class":184},[115,77701,77702,77704,77706,77708],{"class":117,"line":1195},[115,77703,77522],{"class":125},[115,77705,58237],{"class":1963},[115,77707,77645],{"class":125},[115,77709,77582],{"class":184},[115,77711,77712,77714,77716,77719],{"class":117,"line":1201},[115,77713,77522],{"class":125},[115,77715,58237],{"class":1963},[115,77717,77718],{"class":125},"(d)",[115,77720,77721],{"class":184},"  \u002F\u002F4\n",[86,77723,77725],{"id":77724},"_462-对象解构","4.6.2 对象解构",[14,77727,77728],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77730,77731],{},"用的非常非常多！！！！！！",[21999,77733,77735],{"id":77734},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77737,77738],{},"基本语法：",[69,77740,77741,77744,77747,77750],{},[72,77742,77743],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[72,77745,77746],{},"对象属性的值将被赋值给与属性名相同的变量",[72,77748,77749],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[72,77751,77752],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[106,77754,77756],{"className":50623,"code":77755,"language":50625,"meta":22,"style":22},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[112,77757,77758,77763,77768,77773,77777],{"__ignoreMap":22},[115,77759,77760],{"class":117,"line":118},[115,77761,77762],{"class":125},"const obj = {\n",[115,77764,77765],{"class":117,"line":37},[115,77766,77767],{"class":125},"   uname: 'pink老师',\n",[115,77769,77770],{"class":117,"line":1180},[115,77771,77772],{"class":125},"   age: 18,\n",[115,77774,77775],{"class":117,"line":1195},[115,77776,1565],{"class":125},[115,77778,77779],{"class":117,"line":1201},[115,77780,77781],{"class":125},"const { uname, age } = obj\n",[14,77783,77784],{},"上方代码这样写等价于：",[14,77786,77787],{},"const uname等价于obj.uname",[14,77789,77790],{},"变量名可以重新改名：",[14,77792,77793],{},"const uname='red老师'",[14,77795,77796],{},"const user={",[14,77798,77799],{},"  uname:'pink老师',",[14,77801,77802],{},"  age:18",[14,77804,1071],{},[14,77806,77807],{},"const {uname,age}=user",[14,77809,77810],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77812,77813],{},"const {旧变量名：新变量名}=对象",[14,77815,77816],{},"const {uname:username,age}=user",[21999,77818,77820],{"id":77819},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77822,77823],{},[20,77824],{"alt":22,"src":77825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21999,77827,77829],{"id":77828},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77831,77832],{},[20,77833],{"alt":22,"src":77834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[106,77836,77838],{"className":53057,"code":77837,"language":53059,"meta":22,"style":22},"  \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",[112,77839,77840,77848,77853,77858,77863,77868,77873,77878,77883,77888,77892,77897,77902],{"__ignoreMap":22},[115,77841,77842,77844,77846],{"class":117,"line":118},[115,77843,52134],{"class":125},[115,77845,51803],{"class":51290},[115,77847,51297],{"class":125},[115,77849,77850],{"class":117,"line":37},[115,77851,77852],{"class":125},"    const pig = {\n",[115,77854,77855],{"class":117,"line":1180},[115,77856,77857],{"class":125},"      name: '佩奇',\n",[115,77859,77860],{"class":117,"line":1195},[115,77861,77862],{"class":125},"      family: {\n",[115,77864,77865],{"class":117,"line":1201},[115,77866,77867],{"class":125},"        mother: '猪妈妈',\n",[115,77869,77870],{"class":117,"line":1215},[115,77871,77872],{"class":125},"        father: '猪爸爸',\n",[115,77874,77875],{"class":117,"line":1221},[115,77876,77877],{"class":125},"        sister: '乔治'\n",[115,77879,77880],{"class":117,"line":1312},[115,77881,77882],{"class":125},"      },\n",[115,77884,77885],{"class":117,"line":1318},[115,77886,77887],{"class":125},"      age: 6\n",[115,77889,77890],{"class":117,"line":1330},[115,77891,2187],{"class":125},[115,77893,77894],{"class":117,"line":1612},[115,77895,77896],{"class":125},"    \u002F\u002F 多级对象解构\n",[115,77898,77899],{"class":117,"line":1617},[115,77900,77901],{"class":125},"    const { name, family: { mother, father, sister }, age } = pig\n",[115,77903,77904,77906,77908],{"class":117,"line":1623},[115,77905,52407],{"class":125},[115,77907,51803],{"class":51290},[115,77909,51297],{"class":125},[14,77911,77912],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[106,77914,77917],{"className":77915,"code":77916,"language":76437,"meta":22,"style":22},"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",[112,77918,77919,77924,77935,77947,77959,77968,77972,77983,77995,78005,78010,78014,78024,78035,78044,78048,78052,78063,78074,78083,78087,78092],{"__ignoreMap":22},[115,77920,77921],{"class":117,"line":118},[115,77922,77923],{"class":184},"    \u002F\u002F 这是后台传递过来的数据\n",[115,77925,77926,77928,77931,77933],{"class":117,"line":37},[115,77927,11222],{"class":121},[115,77929,77930],{"class":125}," msg ",[115,77932,171],{"class":121},[115,77934,15573],{"class":125},[115,77936,77937,77940,77942,77945],{"class":117,"line":1180},[115,77938,77939],{"class":230},"      \"code\"",[115,77941,984],{"class":121},[115,77943,77944],{"class":174}," 200",[115,77946,31467],{"class":125},[115,77948,77949,77952,77954,77957],{"class":117,"line":1195},[115,77950,77951],{"class":230},"      \"msg\"",[115,77953,984],{"class":121},[115,77955,77956],{"class":230}," \"获取新闻列表成功\"",[115,77958,31467],{"class":125},[115,77960,77961,77964,77966],{"class":117,"line":1201},[115,77962,77963],{"class":230},"      \"data\"",[115,77965,984],{"class":121},[115,77967,55437],{"class":125},[115,77969,77970],{"class":117,"line":1215},[115,77971,2510],{"class":125},[115,77973,77974,77977,77979,77981],{"class":117,"line":1221},[115,77975,77976],{"class":230},"          \"id\"",[115,77978,984],{"class":121},[115,77980,25119],{"class":174},[115,77982,31467],{"class":125},[115,77984,77985,77988,77990,77993],{"class":117,"line":1312},[115,77986,77987],{"class":230},"          \"title\"",[115,77989,984],{"class":121},[115,77991,77992],{"class":230}," \"5G商用自己，三大运用商收入下降\"",[115,77994,31467],{"class":125},[115,77996,77997,78000,78002],{"class":117,"line":1318},[115,77998,77999],{"class":230},"          \"count\"",[115,78001,984],{"class":121},[115,78003,78004],{"class":174}," 58\n",[115,78006,78007],{"class":117,"line":1330},[115,78008,78009],{"class":125},"        },\n",[115,78011,78012],{"class":117,"line":1612},[115,78013,2510],{"class":125},[115,78015,78016,78018,78020,78022],{"class":117,"line":1617},[115,78017,77976],{"class":230},[115,78019,984],{"class":121},[115,78021,14756],{"class":174},[115,78023,31467],{"class":125},[115,78025,78026,78028,78030,78033],{"class":117,"line":1623},[115,78027,77987],{"class":230},[115,78029,984],{"class":121},[115,78031,78032],{"class":230}," \"国际媒体头条速览\"",[115,78034,31467],{"class":125},[115,78036,78037,78039,78041],{"class":117,"line":1628},[115,78038,77999],{"class":230},[115,78040,984],{"class":121},[115,78042,78043],{"class":174}," 56\n",[115,78045,78046],{"class":117,"line":1642},[115,78047,78009],{"class":125},[115,78049,78050],{"class":117,"line":1647},[115,78051,2510],{"class":125},[115,78053,78054,78056,78058,78061],{"class":117,"line":1653},[115,78055,77976],{"class":230},[115,78057,984],{"class":121},[115,78059,78060],{"class":174}," 3",[115,78062,31467],{"class":125},[115,78064,78065,78067,78069,78072],{"class":117,"line":1674},[115,78066,77987],{"class":230},[115,78068,984],{"class":121},[115,78070,78071],{"class":230}," \"乌克兰和俄罗斯持续冲突\"",[115,78073,31467],{"class":125},[115,78075,78076,78078,78080],{"class":117,"line":1679},[115,78077,77999],{"class":230},[115,78079,984],{"class":121},[115,78081,78082],{"class":174}," 1669\n",[115,78084,78085],{"class":117,"line":1693},[115,78086,78009],{"class":125},[115,78088,78089],{"class":117,"line":1698},[115,78090,78091],{"class":125},"      ]\n",[115,78093,78094],{"class":117,"line":1727},[115,78095,2187],{"class":125},[14,78097,78098],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78100,78101],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78103,78104],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78106,78107],{},"function({data}) {",[14,78109,78110],{},"console.log(data)",[14,78112,1071],{},[14,78114,78115],{},"render(msg)",[14,78117,78118],{},"实参传递给形参的时候解构了",[14,78120,78121],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78123,78124],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78126,78127],{},"function render({data:mydata}) {",[14,78129,78130],{},"  console.log(data)",[14,78132,1071],{},[86,78134,78136],{"id":78135},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78138,78139],{},"有两种情况：一个是数组结构，一个是立即执行函数",[69,78141,78142],{},[72,78143,78144],{},"如果对一个数组进行遍历，有两种方式：",[14,78146,78147],{},"①法1",[14,78149,78150],{},"const arr=[1,2,3]",[14,78152,78153],{},"arr.map(function(item,index) {",[14,78155,78156],{},"  console.log(item)",[14,78158,52454],{},[14,78160,78161],{},[20,78162],{"alt":22,"src":78163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78165,78166],{},"②法2",[14,78168,78169],{},"const str='pink'",[14,78171,78172],{},"[1,2,3].map(function(item,index) {",[14,78174,78175],{},"console.log(item)",[14,78177,52454],{},[14,78179,78180],{},[20,78181],{"alt":22,"src":78182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78184,78185],{},"此时会报错",[14,78187,78188],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78190,78175],{},[14,78192,52454],{},[14,78194,78195],{},"内部会当成这样处理，所以我们用分号进行隔开",[57,78197,78199],{"id":78198},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78201,78202],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78204,78205],{},"可以理解为加强版的for循环",[14,78207,78208],{},[20,78209],{"alt":22,"src":78210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78212,78213],{},"里边不写return，不返回数组，只遍历不返回",[14,78215,78216],{},"map是返回数组",[14,78218,78219],{},"forEach主要用于遍历数组对象",[106,78221,78223],{"className":53057,"code":78222,"language":53059,"meta":22,"style":22},"  \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",[112,78224,78225,78233,78238,78243,78248,78253,78257,78262],{"__ignoreMap":22},[115,78226,78227,78229,78231],{"class":117,"line":118},[115,78228,52134],{"class":125},[115,78230,51803],{"class":51290},[115,78232,51297],{"class":125},[115,78234,78235],{"class":117,"line":37},[115,78236,78237],{"class":125},"    const arr = ['red', 'green', 'pink']\n",[115,78239,78240],{"class":117,"line":1180},[115,78241,78242],{"class":125},"    const result = arr.forEach(function (item, index) {\n",[115,78244,78245],{"class":117,"line":1195},[115,78246,78247],{"class":125},"      console.log(item)\n",[115,78249,78250],{"class":117,"line":1201},[115,78251,78252],{"class":125},"      console.log(index)\n",[115,78254,78255],{"class":117,"line":1215},[115,78256,33462],{"class":125},[115,78258,78259],{"class":117,"line":1221},[115,78260,78261],{"class":125},"    console.log(result)\n",[115,78263,78264,78266,78268],{"class":117,"line":1312},[115,78265,52407],{"class":125},[115,78267,51803],{"class":51290},[115,78269,51297],{"class":125},[14,78271,78272],{},[20,78273],{"alt":22,"src":78274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[57,78276,78278],{"id":78277},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78280,78281],{},[20,78282],{"alt":22,"src":78283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78285,78286],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[106,78288,78290],{"className":53057,"code":78289,"language":53059,"meta":22,"style":22},"\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",[112,78291,78292,78300,78308,78313,78318,78322,78326,78331,78335,78340,78348],{"__ignoreMap":22},[115,78293,78294,78296,78298],{"class":117,"line":118},[115,78295,1035],{"class":125},[115,78297,51790],{"class":51290},[115,78299,51297],{"class":125},[115,78301,78302,78304,78306],{"class":117,"line":37},[115,78303,52134],{"class":125},[115,78305,51803],{"class":51290},[115,78307,51297],{"class":125},[115,78309,78310],{"class":117,"line":1180},[115,78311,78312],{"class":125},"    const arr = [10, 20, 30]\n",[115,78314,78315],{"class":117,"line":1195},[115,78316,78317],{"class":125},"    const newArr = arr.filter(function (item, index) {\n",[115,78319,78320],{"class":117,"line":1201},[115,78321,78247],{"class":125},[115,78323,78324],{"class":117,"line":1215},[115,78325,78252],{"class":125},[115,78327,78328],{"class":117,"line":1221},[115,78329,78330],{"class":125},"      return item >= 20\n",[115,78332,78333],{"class":117,"line":1312},[115,78334,33462],{"class":125},[115,78336,78337],{"class":117,"line":1318},[115,78338,78339],{"class":125},"    console.log(newArr)\n",[115,78341,78342,78344,78346],{"class":117,"line":1330},[115,78343,52407],{"class":125},[115,78345,51803],{"class":51290},[115,78347,51297],{"class":125},[115,78349,78350,78352,78354],{"class":117,"line":1612},[115,78351,51775],{"class":125},[115,78353,51790],{"class":51290},[115,78355,51297],{"class":125},[14,78357,78358],{},"这个也可以写成箭头函数：",[106,78360,78362],{"className":50623,"code":78361,"language":50625,"meta":22,"style":22},"const newArr = arr.filter(item => item >= 20)\n",[112,78363,78364],{"__ignoreMap":22},[115,78365,78366],{"class":117,"line":118},[115,78367,78361],{"class":125},[57,78369,78371],{"id":78370},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78373,78374],{},[20,78375],{"alt":22,"src":78376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78378,78379],{},"步骤：",[14,78381,78382],{},"①：渲染页面模块",[1132,78384,78385,78388],{},[72,78386,78387],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[72,78389,78390],{},"用forEach+字符串的形式",[14,78392,78393],{},"②：点击不同需求，显示不同页面内容",[1132,78395,78396,78399,78402,78405,78408],{},[72,78397,78398],{},"点击采取事件委托方式 .filter",[72,78400,78401],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[72,78403,78404],{},"筛选条件是根据点击的 data-index 来判断",[72,78406,78407],{},"可以使用对象解构，把事件对象解构",[72,78409,78410],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[106,78412,78414],{"className":50623,"code":78413,"language":50625,"meta":22,"style":22},"\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",[112,78415,78416,78426,78440,78444,78452,78466,78486,78498,78506,78512,78522,78532,78542,78546,78550,78556,78569,78581,78591,78603,78607,78611,78618,78631,78643,78660,78678,78691,78695,78699,78711,78721,78725,78729,78736,78777,78804,78814,78818,78822,78830,78842,78846,78850,78858,78870,78882,78893,78897,78901,78910,78922,78933,78937,78941,78950,78962,78974,78978,78982,78989,78999,79011,79023,79038,79042,79046,79054,79070,79080,79090,79100,79112,79116,79120,79130,79141,79151,79155,79163,79171,79175,79183,79198,79224,79249,79274,79293,79301,79315,79320,79325,79330,79335,79340,79348,79356,79361,79372,79377,79387,79397,79407,79417,79421,79425,79434,79443,79452,79461,79465,79469,79478,79487,79496,79505,79509,79513,79522,79531,79540,79549,79553,79557,79566,79575,79584,79593,79597,79601,79610,79619,79628,79637,79641,79645,79654,79663,79672,79681,79685,79689,79698,79707,79715,79724,79728,79732,79736,79741,79753,79758,79770,79774,79791,79819,79828,79833,79843,79853,79862,79867,79872,79876,79881,79898,79902,79907,79915,79920,79947,79952,79972,79977,79989,79994,79999,80004,80015,80029,80066,80084,80117,80134,80158,80162,80167,80173,80177,80181,80185,80193,80201,80205],{"__ignoreMap":22},[115,78417,78418,78420,78422,78424],{"class":117,"line":118},[115,78419,51287],{"class":125},[115,78421,51291],{"class":51290},[115,78423,51294],{"class":1963},[115,78425,51297],{"class":125},[115,78427,78428,78430,78432,78434,78436,78438],{"class":117,"line":37},[115,78429,1035],{"class":125},[115,78431,50625],{"class":51290},[115,78433,51306],{"class":1963},[115,78435,171],{"class":125},[115,78437,51311],{"class":230},[115,78439,51297],{"class":125},[115,78441,78442],{"class":117,"line":1180},[115,78443,2400],{"emptyLinePlaceholder":42},[115,78445,78446,78448,78450],{"class":117,"line":1195},[115,78447,1035],{"class":125},[115,78449,51324],{"class":51290},[115,78451,51297],{"class":125},[115,78453,78454,78456,78458,78460,78462,78464],{"class":117,"line":1201},[115,78455,52134],{"class":125},[115,78457,51334],{"class":51290},[115,78459,51337],{"class":1963},[115,78461,171],{"class":125},[115,78463,51342],{"class":230},[115,78465,51297],{"class":125},[115,78467,78468,78470,78472,78474,78476,78478,78480,78482,78484],{"class":117,"line":1215},[115,78469,52134],{"class":125},[115,78471,51334],{"class":51290},[115,78473,14921],{"class":1963},[115,78475,171],{"class":125},[115,78477,51381],{"class":230},[115,78479,51361],{"class":1963},[115,78481,171],{"class":125},[115,78483,51388],{"class":230},[115,78485,51297],{"class":125},[115,78487,78488,78490,78492,78494,78496],{"class":117,"line":1221},[115,78489,52134],{"class":125},[115,78491,51397],{"class":51290},[115,78493,51400],{"class":125},[115,78495,51397],{"class":51290},[115,78497,51297],{"class":125},[115,78499,78500,78502,78504],{"class":117,"line":1312},[115,78501,52134],{"class":125},[115,78503,5127],{"class":51290},[115,78505,51297],{"class":125},[115,78507,78508,78510],{"class":117,"line":1318},[115,78509,6404],{"class":51290},[115,78511,15573],{"class":125},[115,78513,78514,78516,78518,78520],{"class":117,"line":1330},[115,78515,54685],{"class":174},[115,78517,51427],{"class":125},[115,78519,317],{"class":174},[115,78521,1291],{"class":125},[115,78523,78524,78526,78528,78530],{"class":117,"line":1612},[115,78525,54696],{"class":174},[115,78527,51427],{"class":125},[115,78529,317],{"class":174},[115,78531,1291],{"class":125},[115,78533,78534,78536,78538,78540],{"class":117,"line":1617},[115,78535,72586],{"class":174},[115,78537,51427],{"class":125},[115,78539,60495],{"class":174},[115,78541,1291],{"class":125},[115,78543,78544],{"class":117,"line":1623},[115,78545,2187],{"class":125},[115,78547,78548],{"class":117,"line":1628},[115,78549,2400],{"emptyLinePlaceholder":42},[115,78551,78552,78554],{"class":117,"line":1642},[115,78553,62113],{"class":1963},[115,78555,15573],{"class":125},[115,78557,78558,78560,78562,78565,78567],{"class":117,"line":1647},[115,78559,54761],{"class":174},[115,78561,51427],{"class":125},[115,78563,78564],{"class":174},"990",[115,78566,51482],{"class":121},[115,78568,1291],{"class":125},[115,78570,78571,78573,78575,78577,78579],{"class":117,"line":1653},[115,78572,54696],{"class":174},[115,78574,51427],{"class":125},[115,78576,317],{"class":174},[115,78578,51546],{"class":174},[115,78580,1291],{"class":125},[115,78582,78583,78585,78587,78589],{"class":117,"line":1674},[115,78584,54999],{"class":174},[115,78586,51427],{"class":125},[115,78588,51467],{"class":174},[115,78590,1291],{"class":125},[115,78592,78593,78596,78598,78601],{"class":117,"line":1679},[115,78594,78595],{"class":174},"      flex-wrap",[115,78597,51427],{"class":125},[115,78599,78600],{"class":174},"wrap",[115,78602,1291],{"class":125},[115,78604,78605],{"class":117,"line":1693},[115,78606,2187],{"class":125},[115,78608,78609],{"class":117,"line":1698},[115,78610,2400],{"emptyLinePlaceholder":42},[115,78612,78613,78616],{"class":117,"line":1727},[115,78614,78615],{"class":1963},"    .item",[115,78617,15573],{"class":125},[115,78619,78620,78622,78624,78627,78629],{"class":117,"line":1732},[115,78621,54761],{"class":174},[115,78623,51427],{"class":125},[115,78625,78626],{"class":174},"240",[115,78628,51482],{"class":121},[115,78630,1291],{"class":125},[115,78632,78633,78635,78637,78639,78641],{"class":117,"line":1749},[115,78634,61990],{"class":174},[115,78636,51427],{"class":125},[115,78638,571],{"class":174},[115,78640,51482],{"class":121},[115,78642,1291],{"class":125},[115,78644,78645,78647,78649,78651,78653,78656,78658],{"class":117,"line":1754},[115,78646,54685],{"class":174},[115,78648,51427],{"class":125},[115,78650,825],{"class":174},[115,78652,51482],{"class":121},[115,78654,78655],{"class":174}," 30",[115,78657,51482],{"class":121},[115,78659,1291],{"class":125},[115,78661,78662,78664,78666,78668,78671,78674,78676],{"class":117,"line":1759},[115,78663,61850],{"class":174},[115,78665,51427],{"class":125},[115,78667,28122],{"class":174},[115,78669,78670],{"class":174}," ease",[115,78672,78673],{"class":174}," .5",[115,78675,820],{"class":121},[115,78677,1291],{"class":125},[115,78679,78680,78683,78685,78687,78689],{"class":117,"line":1764},[115,78681,78682],{"class":174},"      margin-bottom",[115,78684,51427],{"class":125},[115,78686,825],{"class":174},[115,78688,51482],{"class":121},[115,78690,1291],{"class":125},[115,78692,78693],{"class":117,"line":1778},[115,78694,2187],{"class":125},[115,78696,78697],{"class":117,"line":1783},[115,78698,2400],{"emptyLinePlaceholder":42},[115,78700,78701,78704,78706,78709],{"class":117,"line":2577},[115,78702,78703],{"class":1963},"    .item:nth-child",[115,78705,126],{"class":125},[115,78707,78708],{"class":174},"4n",[115,78710,12443],{"class":125},[115,78712,78713,78715,78717,78719],{"class":117,"line":2591},[115,78714,61990],{"class":174},[115,78716,51427],{"class":125},[115,78718,317],{"class":174},[115,78720,1291],{"class":125},[115,78722,78723],{"class":117,"line":2599},[115,78724,2187],{"class":125},[115,78726,78727],{"class":117,"line":2604},[115,78728,2400],{"emptyLinePlaceholder":42},[115,78730,78731,78734],{"class":117,"line":2610},[115,78732,78733],{"class":1963},"    .item:hover",[115,78735,15573],{"class":125},[115,78737,78738,78741,78743,78745,78747,78749,78751,78753,78755,78758,78760,78762,78764,78766,78768,78770,78772,78775],{"class":117,"line":2616},[115,78739,78740],{"class":174},"      box-shadow",[115,78742,51427],{"class":125},[115,78744,317],{"class":174},[115,78746,51482],{"class":121},[115,78748,4093],{"class":174},[115,78750,51482],{"class":121},[115,78752,2148],{"class":174},[115,78754,51482],{"class":121},[115,78756,78757],{"class":174}," rgba",[115,78759,126],{"class":125},[115,78761,317],{"class":174},[115,78763,12436],{"class":125},[115,78765,317],{"class":174},[115,78767,12436],{"class":125},[115,78769,317],{"class":174},[115,78771,12436],{"class":125},[115,78773,78774],{"class":174},".2",[115,78776,2719],{"class":125},[115,78778,78779,78782,78784,78787,78789,78791,78793,78796,78798,78800,78802],{"class":117,"line":2621},[115,78780,78781],{"class":174},"      transform",[115,78783,51427],{"class":125},[115,78785,78786],{"class":174},"translate3d",[115,78788,126],{"class":125},[115,78790,317],{"class":174},[115,78792,12436],{"class":125},[115,78794,78795],{"class":174},"-4",[115,78797,51482],{"class":121},[115,78799,12436],{"class":125},[115,78801,317],{"class":174},[115,78803,2719],{"class":125},[115,78805,78806,78808,78810,78812],{"class":117,"line":7949},[115,78807,62015],{"class":174},[115,78809,51427],{"class":125},[115,78811,62020],{"class":174},[115,78813,1291],{"class":125},[115,78815,78816],{"class":117,"line":7973},[115,78817,2187],{"class":125},[115,78819,78820],{"class":117,"line":7978},[115,78821,2400],{"emptyLinePlaceholder":42},[115,78823,78824,78826,78828],{"class":117,"line":7984},[115,78825,78615],{"class":1963},[115,78827,55605],{"class":51290},[115,78829,15573],{"class":125},[115,78831,78832,78834,78836,78838,78840],{"class":117,"line":8011},[115,78833,54761],{"class":174},[115,78835,51427],{"class":125},[115,78837,436],{"class":174},[115,78839,453],{"class":121},[115,78841,1291],{"class":125},[115,78843,78844],{"class":117,"line":8016},[115,78845,2187],{"class":125},[115,78847,78848],{"class":117,"line":8022},[115,78849,2400],{"emptyLinePlaceholder":42},[115,78851,78852,78854,78856],{"class":117,"line":8034},[115,78853,78615],{"class":1963},[115,78855,62294],{"class":1963},[115,78857,15573],{"class":125},[115,78859,78860,78862,78864,78866,78868],{"class":117,"line":8046},[115,78861,54912],{"class":174},[115,78863,51427],{"class":125},[115,78865,775],{"class":174},[115,78867,51482],{"class":121},[115,78869,1291],{"class":125},[115,78871,78872,78874,78876,78878,78880],{"class":117,"line":8058},[115,78873,78682],{"class":174},[115,78875,51427],{"class":125},[115,78877,571],{"class":174},[115,78879,51482],{"class":121},[115,78881,1291],{"class":125},[115,78883,78884,78886,78888,78891],{"class":117,"line":9717},[115,78885,57406],{"class":174},[115,78887,51427],{"class":125},[115,78889,78890],{"class":174},"#666",[115,78892,1291],{"class":125},[115,78894,78895],{"class":117,"line":9742},[115,78896,2187],{"class":125},[115,78898,78899],{"class":117,"line":9765},[115,78900,2400],{"emptyLinePlaceholder":42},[115,78902,78903,78905,78908],{"class":117,"line":9789},[115,78904,78615],{"class":1963},[115,78906,78907],{"class":1963}," .price",[115,78909,15573],{"class":125},[115,78911,78912,78914,78916,78918,78920],{"class":117,"line":9794},[115,78913,54912],{"class":174},[115,78915,51427],{"class":125},[115,78917,875],{"class":174},[115,78919,51482],{"class":121},[115,78921,1291],{"class":125},[115,78923,78924,78926,78928,78931],{"class":117,"line":9799},[115,78925,57406],{"class":174},[115,78927,51427],{"class":125},[115,78929,78930],{"class":174},"firebrick",[115,78932,1291],{"class":125},[115,78934,78935],{"class":117,"line":9804},[115,78936,2187],{"class":125},[115,78938,78939],{"class":117,"line":9813},[115,78940,2400],{"emptyLinePlaceholder":42},[115,78942,78943,78945,78948],{"class":117,"line":9818},[115,78944,78615],{"class":1963},[115,78946,78947],{"class":1963}," .price::before",[115,78949,15573],{"class":125},[115,78951,78952,78955,78957,78960],{"class":117,"line":9824},[115,78953,78954],{"class":174},"      content",[115,78956,51427],{"class":125},[115,78958,78959],{"class":230},"'￥'",[115,78961,1291],{"class":125},[115,78963,78964,78966,78968,78970,78972],{"class":117,"line":9845},[115,78965,54912],{"class":174},[115,78967,51427],{"class":125},[115,78969,674],{"class":174},[115,78971,51482],{"class":121},[115,78973,1291],{"class":125},[115,78975,78976],{"class":117,"line":9851},[115,78977,2187],{"class":125},[115,78979,78980],{"class":117,"line":9865},[115,78981,2400],{"emptyLinePlaceholder":42},[115,78983,78984,78987],{"class":117,"line":9871},[115,78985,78986],{"class":1963},"    .filter",[115,78988,15573],{"class":125},[115,78990,78991,78993,78995,78997],{"class":117,"line":9898},[115,78992,54999],{"class":174},[115,78994,51427],{"class":125},[115,78996,51467],{"class":174},[115,78998,1291],{"class":125},[115,79000,79001,79003,79005,79007,79009],{"class":117,"line":9907},[115,79002,54761],{"class":174},[115,79004,51427],{"class":125},[115,79006,78564],{"class":174},[115,79008,51482],{"class":121},[115,79010,1291],{"class":125},[115,79012,79013,79015,79017,79019,79021],{"class":117,"line":9913},[115,79014,54696],{"class":174},[115,79016,51427],{"class":125},[115,79018,317],{"class":174},[115,79020,51546],{"class":174},[115,79022,1291],{"class":125},[115,79024,79025,79027,79029,79031,79033,79035],{"class":117,"line":9921},[115,79026,54685],{"class":174},[115,79028,51427],{"class":125},[115,79030,781],{"class":174},[115,79032,51482],{"class":121},[115,79034,78655],{"class":174},[115,79036,79037],{"class":121},"px\n",[115,79039,79040],{"class":117,"line":9926},[115,79041,2187],{"class":125},[115,79043,79044],{"class":117,"line":16605},[115,79045,2400],{"emptyLinePlaceholder":42},[115,79047,79048,79050,79052],{"class":117,"line":16611},[115,79049,78986],{"class":1963},[115,79051,1399],{"class":51290},[115,79053,15573],{"class":125},[115,79055,79056,79058,79060,79062,79064,79066,79068],{"class":117,"line":16634},[115,79057,54685],{"class":174},[115,79059,51427],{"class":125},[115,79061,571],{"class":174},[115,79063,51482],{"class":121},[115,79065,8951],{"class":174},[115,79067,51482],{"class":121},[115,79069,1291],{"class":125},[115,79071,79072,79074,79076,79078],{"class":117,"line":16640},[115,79073,61711],{"class":174},[115,79075,51427],{"class":125},[115,79077,61808],{"class":174},[115,79079,1291],{"class":125},[115,79081,79082,79084,79086,79088],{"class":117,"line":16663},[115,79083,57406],{"class":174},[115,79085,51427],{"class":125},[115,79087,78890],{"class":174},[115,79089,1291],{"class":125},[115,79091,79092,79094,79096,79098],{"class":117,"line":16677},[115,79093,63960],{"class":174},[115,79095,51427],{"class":125},[115,79097,54727],{"class":174},[115,79099,1291],{"class":125},[115,79101,79102,79104,79106,79108,79110],{"class":117,"line":16697},[115,79103,61740],{"class":174},[115,79105,51427],{"class":125},[115,79107,825],{"class":174},[115,79109,51482],{"class":121},[115,79111,1291],{"class":125},[115,79113,79114],{"class":117,"line":16703},[115,79115,2187],{"class":125},[115,79117,79118],{"class":117,"line":16714},[115,79119,2400],{"emptyLinePlaceholder":42},[115,79121,79122,79124,79126,79128],{"class":117,"line":16737},[115,79123,78986],{"class":1963},[115,79125,1399],{"class":51290},[115,79127,61890],{"class":1963},[115,79129,15573],{"class":125},[115,79131,79132,79134,79136,79139],{"class":117,"line":16759},[115,79133,54874],{"class":174},[115,79135,51427],{"class":125},[115,79137,79138],{"class":174},"#05943c",[115,79140,1291],{"class":125},[115,79142,79143,79145,79147,79149],{"class":117,"line":16764},[115,79144,57406],{"class":174},[115,79146,51427],{"class":125},[115,79148,60832],{"class":174},[115,79150,1291],{"class":125},[115,79152,79153],{"class":117,"line":16770},[115,79154,2187],{"class":125},[115,79156,79157,79159,79161],{"class":117,"line":16784},[115,79158,52407],{"class":125},[115,79160,5127],{"class":51290},[115,79162,51297],{"class":125},[115,79164,79165,79167,79169],{"class":117,"line":16797},[115,79166,51775],{"class":125},[115,79168,51324],{"class":51290},[115,79170,51297],{"class":125},[115,79172,79173],{"class":117,"line":16802},[115,79174,2400],{"emptyLinePlaceholder":42},[115,79176,79177,79179,79181],{"class":117,"line":16816},[115,79178,1035],{"class":125},[115,79180,51790],{"class":51290},[115,79182,51297],{"class":125},[115,79184,79185,79187,79189,79191,79193,79196],{"class":117,"line":16821},[115,79186,52134],{"class":125},[115,79188,51601],{"class":51290},[115,79190,53476],{"class":1963},[115,79192,171],{"class":125},[115,79194,79195],{"class":230},"\"filter\"",[115,79197,51297],{"class":125},[115,79199,79200,79202,79204,79206,79208,79210,79213,79215,79217,79220,79222],{"class":117,"line":16827},[115,79201,51331],{"class":125},[115,79203,27],{"class":51290},[115,79205,61047],{"class":1963},[115,79207,171],{"class":125},[115,79209,61052],{"class":230},[115,79211,79212],{"class":1963}," data-index",[115,79214,171],{"class":125},[115,79216,3678],{"class":230},[115,79218,79219],{"class":125},">0-100元\u003C\u002F",[115,79221,27],{"class":51290},[115,79223,51297],{"class":125},[115,79225,79226,79228,79230,79232,79234,79236,79238,79240,79242,79245,79247],{"class":117,"line":16832},[115,79227,51331],{"class":125},[115,79229,27],{"class":51290},[115,79231,61047],{"class":1963},[115,79233,171],{"class":125},[115,79235,61052],{"class":230},[115,79237,79212],{"class":1963},[115,79239,171],{"class":125},[115,79241,3701],{"class":230},[115,79243,79244],{"class":125},">100-300元\u003C\u002F",[115,79246,27],{"class":51290},[115,79248,51297],{"class":125},[115,79250,79251,79253,79255,79257,79259,79261,79263,79265,79267,79270,79272],{"class":117,"line":16846},[115,79252,51331],{"class":125},[115,79254,27],{"class":51290},[115,79256,61047],{"class":1963},[115,79258,171],{"class":125},[115,79260,61052],{"class":230},[115,79262,79212],{"class":1963},[115,79264,171],{"class":125},[115,79266,3714],{"class":230},[115,79268,79269],{"class":125},">300元以上\u003C\u002F",[115,79271,27],{"class":51290},[115,79273,51297],{"class":125},[115,79275,79276,79278,79280,79282,79284,79286,79289,79291],{"class":117,"line":16851},[115,79277,51331],{"class":125},[115,79279,27],{"class":51290},[115,79281,61047],{"class":1963},[115,79283,171],{"class":125},[115,79285,61052],{"class":230},[115,79287,79288],{"class":125},">全部区间\u003C\u002F",[115,79290,27],{"class":51290},[115,79292,51297],{"class":125},[115,79294,79295,79297,79299],{"class":117,"line":16856},[115,79296,52407],{"class":125},[115,79298,51601],{"class":51290},[115,79300,51297],{"class":125},[115,79302,79303,79305,79307,79309,79311,79313],{"class":117,"line":16870},[115,79304,52134],{"class":125},[115,79306,51601],{"class":51290},[115,79308,53476],{"class":1963},[115,79310,171],{"class":125},[115,79312,62598],{"class":230},[115,79314,51297],{"class":125},[115,79316,79317],{"class":117,"line":16882},[115,79318,79319],{"class":184},"    \u003C!-- \u003Cdiv class=\"item\">\n",[115,79321,79322],{"class":117,"line":16887},[115,79323,79324],{"class":184},"      \u003Cimg src=\"\" alt=\"\">\n",[115,79326,79327],{"class":117,"line":16900},[115,79328,79329],{"class":184},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[115,79331,79332],{"class":117,"line":16905},[115,79333,79334],{"class":184},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[115,79336,79337],{"class":117,"line":16910},[115,79338,79339],{"class":184},"    \u003C\u002Fdiv> -->\n",[115,79341,79342,79344,79346],{"class":117,"line":16915},[115,79343,52407],{"class":125},[115,79345,51601],{"class":51290},[115,79347,51297],{"class":125},[115,79349,79350,79352,79354],{"class":117,"line":16928},[115,79351,52134],{"class":125},[115,79353,51803],{"class":51290},[115,79355,51297],{"class":125},[115,79357,79358],{"class":117,"line":16933},[115,79359,79360],{"class":184},"    \u002F\u002F 2. 初始化数据\n",[115,79362,79363,79365,79368,79370],{"class":117,"line":32634},[115,79364,11222],{"class":121},[115,79366,79367],{"class":174}," goodsList",[115,79369,13565],{"class":121},[115,79371,55437],{"class":125},[115,79373,79374],{"class":117,"line":32640},[115,79375,79376],{"class":125},"      {\n",[115,79378,79379,79382,79385],{"class":117,"line":32646},[115,79380,79381],{"class":125},"        id: ",[115,79383,79384],{"class":230},"'4001172'",[115,79386,31467],{"class":125},[115,79388,79389,79392,79395],{"class":117,"line":32652},[115,79390,79391],{"class":125},"        name: ",[115,79393,79394],{"class":230},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[115,79396,31467],{"class":125},[115,79398,79399,79402,79405],{"class":117,"line":32658},[115,79400,79401],{"class":125},"        price: ",[115,79403,79404],{"class":230},"'289.00'",[115,79406,31467],{"class":125},[115,79408,79409,79412,79415],{"class":117,"line":32669},[115,79410,79411],{"class":125},"        picture: ",[115,79413,79414],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[115,79416,31467],{"class":125},[115,79418,79419],{"class":117,"line":32675},[115,79420,77882],{"class":125},[115,79422,79423],{"class":117,"line":32695},[115,79424,79376],{"class":125},[115,79426,79427,79429,79432],{"class":117,"line":32701},[115,79428,79381],{"class":125},[115,79430,79431],{"class":230},"'4001594'",[115,79433,31467],{"class":125},[115,79435,79436,79438,79441],{"class":117,"line":32712},[115,79437,79391],{"class":125},[115,79439,79440],{"class":230},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[115,79442,31467],{"class":125},[115,79444,79445,79447,79450],{"class":117,"line":32718},[115,79446,79401],{"class":125},[115,79448,79449],{"class":230},"'288.00'",[115,79451,31467],{"class":125},[115,79453,79454,79456,79459],{"class":117,"line":32724},[115,79455,79411],{"class":125},[115,79457,79458],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[115,79460,31467],{"class":125},[115,79462,79463],{"class":117,"line":32730},[115,79464,77882],{"class":125},[115,79466,79467],{"class":117,"line":32736},[115,79468,79376],{"class":125},[115,79470,79471,79473,79476],{"class":117,"line":32742},[115,79472,79381],{"class":125},[115,79474,79475],{"class":230},"'4001009'",[115,79477,31467],{"class":125},[115,79479,79480,79482,79485],{"class":117,"line":32748},[115,79481,79391],{"class":125},[115,79483,79484],{"class":230},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[115,79486,31467],{"class":125},[115,79488,79489,79491,79494],{"class":117,"line":32754},[115,79490,79401],{"class":125},[115,79492,79493],{"class":230},"'109.00'",[115,79495,31467],{"class":125},[115,79497,79498,79500,79503],{"class":117,"line":32774},[115,79499,79411],{"class":125},[115,79501,79502],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[115,79504,31467],{"class":125},[115,79506,79507],{"class":117,"line":32780},[115,79508,77882],{"class":125},[115,79510,79511],{"class":117,"line":32796},[115,79512,79376],{"class":125},[115,79514,79515,79517,79520],{"class":117,"line":32802},[115,79516,79381],{"class":125},[115,79518,79519],{"class":230},"'4001874'",[115,79521,31467],{"class":125},[115,79523,79524,79526,79529],{"class":117,"line":32816},[115,79525,79391],{"class":125},[115,79527,79528],{"class":230},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[115,79530,31467],{"class":125},[115,79532,79533,79535,79538],{"class":117,"line":32822},[115,79534,79401],{"class":125},[115,79536,79537],{"class":230},"'488.00'",[115,79539,31467],{"class":125},[115,79541,79542,79544,79547],{"class":117,"line":32837},[115,79543,79411],{"class":125},[115,79545,79546],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[115,79548,31467],{"class":125},[115,79550,79551],{"class":117,"line":32843},[115,79552,77882],{"class":125},[115,79554,79555],{"class":117,"line":32852},[115,79556,79376],{"class":125},[115,79558,79559,79561,79564],{"class":117,"line":32858},[115,79560,79381],{"class":125},[115,79562,79563],{"class":230},"'4001649'",[115,79565,31467],{"class":125},[115,79567,79568,79570,79573],{"class":117,"line":32867},[115,79569,79391],{"class":125},[115,79571,79572],{"class":230},"'大师监制龙泉青瓷茶叶罐'",[115,79574,31467],{"class":125},[115,79576,79577,79579,79582],{"class":117,"line":32873},[115,79578,79401],{"class":125},[115,79580,79581],{"class":230},"'139.00'",[115,79583,31467],{"class":125},[115,79585,79586,79588,79591],{"class":117,"line":32879},[115,79587,79411],{"class":125},[115,79589,79590],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[115,79592,31467],{"class":125},[115,79594,79595],{"class":117,"line":32888},[115,79596,77882],{"class":125},[115,79598,79599],{"class":117,"line":32894},[115,79600,79376],{"class":125},[115,79602,79603,79605,79608],{"class":117,"line":32905},[115,79604,79381],{"class":125},[115,79606,79607],{"class":230},"'3997185'",[115,79609,31467],{"class":125},[115,79611,79612,79614,79617],{"class":117,"line":32911},[115,79613,79391],{"class":125},[115,79615,79616],{"class":230},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[115,79618,31467],{"class":125},[115,79620,79621,79623,79626],{"class":117,"line":32930},[115,79622,79401],{"class":125},[115,79624,79625],{"class":230},"'108.00'",[115,79627,31467],{"class":125},[115,79629,79630,79632,79635],{"class":117,"line":32936},[115,79631,79411],{"class":125},[115,79633,79634],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[115,79636,31467],{"class":125},[115,79638,79639],{"class":117,"line":32947},[115,79640,77882],{"class":125},[115,79642,79643],{"class":117,"line":32953},[115,79644,79376],{"class":125},[115,79646,79647,79649,79652],{"class":117,"line":32973},[115,79648,79381],{"class":125},[115,79650,79651],{"class":230},"'3997403'",[115,79653,31467],{"class":125},[115,79655,79656,79658,79661],{"class":117,"line":32989},[115,79657,79391],{"class":125},[115,79659,79660],{"class":230},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[115,79662,31467],{"class":125},[115,79664,79665,79667,79670],{"class":117,"line":32995},[115,79666,79401],{"class":125},[115,79668,79669],{"class":230},"'100.00'",[115,79671,31467],{"class":125},[115,79673,79674,79676,79679],{"class":117,"line":33009},[115,79675,79411],{"class":125},[115,79677,79678],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[115,79680,31467],{"class":125},[115,79682,79683],{"class":117,"line":33015},[115,79684,77882],{"class":125},[115,79686,79687],{"class":117,"line":33021},[115,79688,79376],{"class":125},[115,79690,79691,79693,79696],{"class":117,"line":33032},[115,79692,79381],{"class":125},[115,79694,79695],{"class":230},"'3998274'",[115,79697,31467],{"class":125},[115,79699,79700,79702,79705],{"class":117,"line":33038},[115,79701,79391],{"class":125},[115,79703,79704],{"class":230},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[115,79706,31467],{"class":125},[115,79708,79709,79711,79713],{"class":117,"line":33044},[115,79710,79401],{"class":125},[115,79712,79581],{"class":230},[115,79714,31467],{"class":125},[115,79716,79717,79719,79722],{"class":117,"line":33054},[115,79718,79411],{"class":125},[115,79720,79721],{"class":230},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[115,79723,31467],{"class":125},[115,79725,79726],{"class":117,"line":33060},[115,79727,77882],{"class":125},[115,79729,79730],{"class":117,"line":33071},[115,79731,53099],{"class":125},[115,79733,79734],{"class":117,"line":33077},[115,79735,2400],{"emptyLinePlaceholder":42},[115,79737,79738],{"class":117,"line":33087},[115,79739,79740],{"class":184},"    \u002F\u002F 1.渲染函数\n",[115,79742,79743,79745,79747,79749,79751],{"class":117,"line":33092},[115,79744,70074],{"class":121},[115,79746,70077],{"class":1963},[115,79748,126],{"class":125},[115,79750,3880],{"class":5217},[115,79752,12443],{"class":125},[115,79754,79755],{"class":117,"line":33098},[115,79756,79757],{"class":184},"      \u002F\u002F 声明空字符串\n",[115,79759,79760,79763,79766,79768],{"class":117,"line":33147},[115,79761,79762],{"class":121},"      let",[115,79764,79765],{"class":125}," str ",[115,79767,171],{"class":121},[115,79769,70094],{"class":230},[115,79771,79772],{"class":117,"line":33194},[115,79773,70099],{"class":184},[115,79775,79776,79778,79781,79783,79786,79789],{"class":117,"line":33199},[115,79777,57997],{"class":125},[115,79779,79780],{"class":1963},"forEach",[115,79782,126],{"class":125},[115,79784,79785],{"class":5217},"item",[115,79787,79788],{"class":121}," =>",[115,79790,15573],{"class":125},[115,79792,79793,79795,79798,79801,79803,79806,79808,79811,79814,79816],{"class":117,"line":33205},[115,79794,61260],{"class":121},[115,79796,79797],{"class":125}," { ",[115,79799,79800],{"class":174},"name",[115,79802,12436],{"class":125},[115,79804,79805],{"class":174},"price",[115,79807,12436],{"class":125},[115,79809,79810],{"class":174},"picture",[115,79812,79813],{"class":125}," } ",[115,79815,171],{"class":121},[115,79817,79818],{"class":125}," item\n",[115,79820,79821,79824,79826],{"class":117,"line":33224},[115,79822,79823],{"class":125},"        str ",[115,79825,9478],{"class":121},[115,79827,70158],{"class":230},[115,79829,79830],{"class":117,"line":33230},[115,79831,79832],{"class":230},"          \u003Cdiv class=\"item\">\n",[115,79834,79835,79838,79840],{"class":117,"line":33250},[115,79836,79837],{"class":230},"            \u003Cimg src=\"${",[115,79839,79810],{"class":125},[115,79841,79842],{"class":230},"}\" alt=\"\">\n",[115,79844,79845,79848,79850],{"class":117,"line":33256},[115,79846,79847],{"class":230},"            \u003Cp class=\"name\">${",[115,79849,79800],{"class":125},[115,79851,79852],{"class":230},"}\u003C\u002Fp>\n",[115,79854,79855,79858,79860],{"class":117,"line":33262},[115,79856,79857],{"class":230},"            \u003Cp class=\"price\">${",[115,79859,79805],{"class":125},[115,79861,79852],{"class":230},[115,79863,79864],{"class":117,"line":33272},[115,79865,79866],{"class":230},"          \u003C\u002Fdiv>\n",[115,79868,79869],{"class":117,"line":33277},[115,79870,79871],{"class":230},"        `\n",[115,79873,79874],{"class":117,"line":33283},[115,79875,64805],{"class":125},[115,79877,79878],{"class":117,"line":33299},[115,79879,79880],{"class":184},"      \u002F\u002F 追加给List\n",[115,79882,79883,79885,79887,79889,79892,79894,79896],{"class":117,"line":33344},[115,79884,55761],{"class":125},[115,79886,54389],{"class":1963},[115,79888,126],{"class":125},[115,79890,79891],{"class":230},"'.list'",[115,79893,74239],{"class":125},[115,79895,171],{"class":121},[115,79897,73975],{"class":125},[115,79899,79900],{"class":117,"line":33350},[115,79901,2187],{"class":125},[115,79903,79904],{"class":117,"line":33356},[115,79905,79906],{"class":184},"    \u002F\u002F 页面一打开就需要渲染\n",[115,79908,79909,79912],{"class":117,"line":33362},[115,79910,79911],{"class":1963},"    render",[115,79913,79914],{"class":125},"(goodsList)\n",[115,79916,79917],{"class":117,"line":33373},[115,79918,79919],{"class":184},"    \u002F\u002F 2.过滤筛选\n",[115,79921,79922,79924,79926,79928,79931,79933,79935,79937,79939,79941,79943,79945],{"class":117,"line":33379},[115,79923,52397],{"class":125},[115,79925,54389],{"class":1963},[115,79927,126],{"class":125},[115,79929,79930],{"class":230},"'.filter'",[115,79932,30827],{"class":125},[115,79934,57803],{"class":1963},[115,79936,126],{"class":125},[115,79938,57808],{"class":230},[115,79940,12436],{"class":125},[115,79942,200],{"class":5217},[115,79944,79788],{"class":121},[115,79946,15573],{"class":125},[115,79948,79949],{"class":117,"line":33385},[115,79950,79951],{"class":184},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[115,79953,79954,79956,79958,79961,79963,79965,79967,79969],{"class":117,"line":33391},[115,79955,58218],{"class":121},[115,79957,79797],{"class":125},[115,79959,79960],{"class":174},"tagName",[115,79962,12436],{"class":125},[115,79964,31538],{"class":174},[115,79966,79813],{"class":125},[115,79968,171],{"class":121},[115,79970,79971],{"class":125}," e.target\n",[115,79973,79974],{"class":117,"line":33409},[115,79975,79976],{"class":184},"      \u002F\u002F 判断\n",[115,79978,79979,79981,79983,79985,79987],{"class":117,"line":33423},[115,79980,54470],{"class":121},[115,79982,67024],{"class":125},[115,79984,54476],{"class":121},[115,79986,68246],{"class":230},[115,79988,12443],{"class":125},[115,79990,79991],{"class":117,"line":33432},[115,79992,79993],{"class":184},"        \u002F\u002F console.log(11)\n",[115,79995,79996],{"class":117,"line":33441},[115,79997,79998],{"class":184},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[115,80000,80001],{"class":117,"line":33450},[115,80002,80003],{"class":184},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[115,80005,80006,80008,80010,80012],{"class":117,"line":33459},[115,80007,51820],{"class":121},[115,80009,51823],{"class":125},[115,80011,171],{"class":121},[115,80013,80014],{"class":125}," goodsList\n",[115,80016,80017,80019,80022,80024,80027],{"class":117,"line":33465},[115,80018,2497],{"class":121},[115,80020,80021],{"class":125}," (dataset.index ",[115,80023,54476],{"class":121},[115,80025,80026],{"class":230}," '1'",[115,80028,12443],{"class":125},[115,80030,80031,80034,80036,80039,80042,80044,80046,80048,80051,80053,80055,80058,80060,80062,80064],{"class":117,"line":33471},[115,80032,80033],{"class":125},"          arr ",[115,80035,171],{"class":121},[115,80037,80038],{"class":125}," goodsList.",[115,80040,80041],{"class":1963},"filter",[115,80043,126],{"class":125},[115,80045,79785],{"class":5217},[115,80047,79788],{"class":121},[115,80049,80050],{"class":125}," item.price ",[115,80052,1710],{"class":121},[115,80054,4093],{"class":174},[115,80056,80057],{"class":121}," &&",[115,80059,80050],{"class":125},[115,80061,1588],{"class":121},[115,80063,5755],{"class":174},[115,80065,132],{"class":125},[115,80067,80068,80071,80073,80075,80077,80079,80082],{"class":117,"line":33479},[115,80069,80070],{"class":125},"        } ",[115,80072,1701],{"class":121},[115,80074,1704],{"class":121},[115,80076,80021],{"class":125},[115,80078,54476],{"class":121},[115,80080,80081],{"class":230}," '2'",[115,80083,12443],{"class":125},[115,80085,80086,80088,80090,80092,80094,80096,80098,80100,80102,80104,80106,80108,80110,80112,80115],{"class":117,"line":33484},[115,80087,80033],{"class":125},[115,80089,171],{"class":121},[115,80091,80038],{"class":125},[115,80093,80041],{"class":1963},[115,80095,126],{"class":125},[115,80097,79785],{"class":5217},[115,80099,79788],{"class":121},[115,80101,80050],{"class":125},[115,80103,1710],{"class":121},[115,80105,5755],{"class":174},[115,80107,80057],{"class":121},[115,80109,80050],{"class":125},[115,80111,1588],{"class":121},[115,80113,80114],{"class":174}," 300",[115,80116,132],{"class":125},[115,80118,80119,80121,80123,80125,80127,80129,80132],{"class":117,"line":33490},[115,80120,80070],{"class":125},[115,80122,1701],{"class":121},[115,80124,1704],{"class":121},[115,80126,80021],{"class":125},[115,80128,54476],{"class":121},[115,80130,80131],{"class":230}," '3'",[115,80133,12443],{"class":125},[115,80135,80136,80138,80140,80142,80144,80146,80148,80150,80152,80154,80156],{"class":117,"line":33501},[115,80137,80033],{"class":125},[115,80139,171],{"class":121},[115,80141,80038],{"class":125},[115,80143,80041],{"class":1963},[115,80145,126],{"class":125},[115,80147,79785],{"class":5217},[115,80149,79788],{"class":121},[115,80151,80050],{"class":125},[115,80153,1710],{"class":121},[115,80155,80114],{"class":174},[115,80157,132],{"class":125},[115,80159,80160],{"class":117,"line":33507},[115,80161,2529],{"class":125},[115,80163,80164],{"class":117,"line":33527},[115,80165,80166],{"class":184},"        \u002F\u002F 渲染函数\n",[115,80168,80169,80171],{"class":117,"line":33533},[115,80170,70398],{"class":1963},[115,80172,52402],{"class":125},[115,80174,80175],{"class":117,"line":33539},[115,80176,52388],{"class":125},[115,80178,80179],{"class":117,"line":33545},[115,80180,2400],{"emptyLinePlaceholder":42},[115,80182,80183],{"class":117,"line":33562},[115,80184,33462],{"class":125},[115,80186,80187,80189,80191],{"class":117,"line":33568},[115,80188,52407],{"class":125},[115,80190,51803],{"class":51290},[115,80192,51297],{"class":125},[115,80194,80195,80197,80199],{"class":117,"line":33574},[115,80196,51775],{"class":125},[115,80198,51790],{"class":51290},[115,80200,51297],{"class":125},[115,80202,80203],{"class":117,"line":33580},[115,80204,2400],{"emptyLinePlaceholder":42},[115,80206,80207,80209,80211],{"class":117,"line":33586},[115,80208,51775],{"class":125},[115,80210,50625],{"class":51290},[115,80212,51297],{"class":125},[57,80214,80216],{"id":80215},"_410-深入了解对象","4.10 深入了解对象",[86,80218,80220],{"id":80219},"_4101-创建对象","4.10.1 创建对象",[14,80222,80223],{},[20,80224],{"alt":22,"src":80225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80227,80228],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[86,80230,80232],{"id":80231},"_4102-构造函数","4.10.2 构造函数",[14,80234,80235,80238],{},[275,80236,80237],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80240,80241,80244],{},[275,80242,80243],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[106,80246,80248],{"className":50623,"code":80247,"language":50625,"meta":22,"style":22},"\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",[112,80249,80250,80258,80263,80284,80297,80309,80321,80325,80330,80357,80362,80389],{"__ignoreMap":22},[115,80251,80252,80254,80256],{"class":117,"line":118},[115,80253,1035],{"class":125},[115,80255,51803],{"class":51290},[115,80257,51297],{"class":125},[115,80259,80260],{"class":117,"line":37},[115,80261,80262],{"class":184},"\u002F\u002F例：\n",[115,80264,80265,80267,80270,80272,80274,80276,80278,80280,80282],{"class":117,"line":1180},[115,80266,54439],{"class":121},[115,80268,80269],{"class":1963}," Pig",[115,80271,126],{"class":125},[115,80273,79800],{"class":5217},[115,80275,503],{"class":125},[115,80277,70211],{"class":5217},[115,80279,503],{"class":125},[115,80281,70228],{"class":5217},[115,80283,12443],{"class":125},[115,80285,80286,80289,80292,80294],{"class":117,"line":1195},[115,80287,80288],{"class":174},"    this",[115,80290,80291],{"class":125},".name",[115,80293,171],{"class":121},[115,80295,80296],{"class":125},"name\n",[115,80298,80299,80301,80304,80306],{"class":117,"line":1201},[115,80300,80288],{"class":174},[115,80302,80303],{"class":125},".age",[115,80305,171],{"class":121},[115,80307,80308],{"class":125},"age\n",[115,80310,80311,80313,80316,80318],{"class":117,"line":1215},[115,80312,80288],{"class":174},[115,80314,80315],{"class":125},".gender",[115,80317,171],{"class":121},[115,80319,80320],{"class":125},"gender    \n",[115,80322,80323],{"class":117,"line":1221},[115,80324,1565],{"class":125},[115,80326,80327],{"class":117,"line":1312},[115,80328,80329],{"class":184},"\u002F\u002F创建佩奇对象\n",[115,80331,80332,80334,80337,80339,80341,80343,80346,80348,80350,80352,80355],{"class":117,"line":1318},[115,80333,6793],{"class":121},[115,80335,80336],{"class":174}," Peppa",[115,80338,11718],{"class":121},[115,80340,80269],{"class":1963},[115,80342,126],{"class":125},[115,80344,80345],{"class":230},"'佩奇'",[115,80347,503],{"class":125},[115,80349,469],{"class":174},[115,80351,503],{"class":125},[115,80353,80354],{"class":230},"'女'",[115,80356,132],{"class":125},[115,80358,80359],{"class":117,"line":1330},[115,80360,80361],{"class":184},"\u002F\u002F创建乔治对象\n",[115,80363,80364,80366,80369,80371,80373,80375,80378,80380,80382,80384,80387],{"class":117,"line":1612},[115,80365,6793],{"class":121},[115,80367,80368],{"class":174}," George",[115,80370,11718],{"class":121},[115,80372,80269],{"class":1963},[115,80374,126],{"class":125},[115,80376,80377],{"class":230},"'乔治'",[115,80379,503],{"class":125},[115,80381,197],{"class":174},[115,80383,503],{"class":125},[115,80385,80386],{"class":230},"'男'",[115,80388,132],{"class":125},[115,80390,80391,80393,80395],{"class":117,"line":1617},[115,80392,51775],{"class":125},[115,80394,51803],{"class":51290},[115,80396,51297],{"class":125},[14,80398,80399],{},[20,80400],{"alt":22,"src":80401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80403,80404],{},[20,80405],{"alt":22,"src":80406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80408,80409],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80411,80412],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80414,80415],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80417,80418],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80420,80421],{},"这里用等号是因为：对象.属性=值",[14,80423,80424],{},"①利用对象字面量创建对象",[14,80426,80427],{},"const o={",[14,80429,80430],{},"name:'pink'",[14,80432,80433],{},"} ②利用new Object创建对象",[14,80435,80436],{},"const o=new Object({name:'pink'})",[14,80438,80439],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80441,80442],{},"构造函数创建对象的执行过程：",[14,80444,80445],{},[20,80446],{"alt":22,"src":80447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[86,80449,80451],{"id":80450},"_4103-实例成员","4.10.3 实例成员",[14,80453,80454],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[69,80456,80457,80460,80463],{},[72,80458,80459],{},"实例对象的属性和方法即为实例成员",[72,80461,80462],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[72,80464,80465],{},"构造函数创建的实例对象彼此独立互不影响",[86,80467,80469],{"id":80468},"_4104-静态成员","4.10.4 静态成员",[14,80471,80472],{},[20,80473],{"alt":22,"src":80474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80476,80477],{},"静态成员有Date.now() Math.PI Math.random()",[14,80479,80480],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80482,80483],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80485,80486],{},"function Pig(name) n {",[14,80488,80489],{},"this.name=name",[14,80491,1071],{},[14,80493,80494],{},"Pig.eyes=2",[14,80496,80497],{},"Pig.sayHai=function () { console.log(this) }",[14,80499,80500],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80502,80503],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80505,11333],{},[69,80507,80508,80511,80514,80517,80520],{},[72,80509,80510],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[72,80512,80513],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[72,80515,80516],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[72,80518,80519],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[72,80521,80522],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80524,80525],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[86,80527,80529],{"id":80528},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80531,80532],{},"内置构造函数包含：",[14,80534,80535],{},[20,80536],{"alt":22,"src":80537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80539,80540],{},[20,80541],{"alt":22,"src":80542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80544,80545],{},"这些基本数据类型，js对他们进行了包装",[51803,80547,80548],{},"\n\n\u002F\u002F const str = 'pink'\n\nconsole.log(str.length)\n\nconst num = 12\n\n\u002F\u002F toFixed()是保留几位小数\n\nconsole.log(num.toFixed(2))\n\n\u002F\u002F 虽然写了const str='pink'\n\n\u002F\u002F 但是内部是按照下面的形式进行执行的：\n\n\u002F\u002Fjs底层完成的，把简单数据类型包装为了复杂数据类型，就是把他转化为了对象，就可以直接使用它的属性和方法了，下面这行代码是不需要自己写的\n\nconst str = String('pink')\n\n",[21999,80550,80552],{"id":80551},"_41051-object","4.10.5.1 Object",[14,80554,80555],{},"Object 是内置的构造函数，用于创建普通对象",[14,80557,80558],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[106,80560,80562],{"className":50623,"code":80561,"language":50625,"meta":22,"style":22},"const user=new Object({name:'小明',age:15})\n",[112,80563,80564],{"__ignoreMap":22},[115,80565,80566],{"class":117,"line":118},[115,80567,80561],{"class":125},[14,80569,80570],{},"三个常用的静态方法：",[22911,80572,80574],{"id":80573},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80576,80577],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80579,80580],{},[20,80581],{"alt":22,"src":80582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80584,80585],{},[20,80586],{"alt":22,"src":80587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[106,80589,80591],{"className":53057,"code":80590,"language":53059,"meta":22,"style":22},"\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",[112,80592,80593,80601,80609,80614,80619,80624,80629,80634,80639,80647],{"__ignoreMap":22},[115,80594,80595,80597,80599],{"class":117,"line":118},[115,80596,1035],{"class":125},[115,80598,51790],{"class":51290},[115,80600,51297],{"class":125},[115,80602,80603,80605,80607],{"class":117,"line":37},[115,80604,52134],{"class":125},[115,80606,51803],{"class":51290},[115,80608,51297],{"class":125},[115,80610,80611],{"class":117,"line":1180},[115,80612,80613],{"class":125},"    const o = { name: 'pink', age: 6 }\n",[115,80615,80616],{"class":117,"line":1195},[115,80617,80618],{"class":125},"    \u002F\u002F 获得所有属性名\n",[115,80620,80621],{"class":117,"line":1201},[115,80622,80623],{"class":125},"    const arr = Object.keys(o)\n",[115,80625,80626],{"class":117,"line":1215},[115,80627,80628],{"class":125},"    console.log(arr)\n",[115,80630,80631],{"class":117,"line":1221},[115,80632,80633],{"class":125},"    \u002F\u002F 获得所有属性值\n",[115,80635,80636],{"class":117,"line":1312},[115,80637,80638],{"class":125},"    console.log(Object.values(o))\n",[115,80640,80641,80643,80645],{"class":117,"line":1318},[115,80642,52407],{"class":125},[115,80644,51803],{"class":51290},[115,80646,51297],{"class":125},[115,80648,80649,80651,80653],{"class":117,"line":1330},[115,80650,51775],{"class":125},[115,80652,51790],{"class":51290},[115,80654,51297],{"class":125},[22911,80656,80658],{"id":80657},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80660,80661],{},"Object.assign(oo,o)",[14,80663,80664],{},"后的东西添加给前 是追加",[14,80666,80667],{},[20,80668],{"alt":22,"src":80669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80671,80672],{},[20,80673],{"alt":22,"src":80674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[106,80676,80678],{"className":53057,"code":80677,"language":53059,"meta":22,"style":22},"\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",[112,80679,80680,80688,80696,80700,80704,80708,80712,80716,80720,80725,80730,80735,80740,80745,80753],{"__ignoreMap":22},[115,80681,80682,80684,80686],{"class":117,"line":118},[115,80683,1035],{"class":125},[115,80685,51790],{"class":51290},[115,80687,51297],{"class":125},[115,80689,80690,80692,80694],{"class":117,"line":37},[115,80691,52134],{"class":125},[115,80693,51803],{"class":51290},[115,80695,51297],{"class":125},[115,80697,80698],{"class":117,"line":1180},[115,80699,80613],{"class":125},[115,80701,80702],{"class":117,"line":1195},[115,80703,80618],{"class":125},[115,80705,80706],{"class":117,"line":1201},[115,80707,80623],{"class":125},[115,80709,80710],{"class":117,"line":1215},[115,80711,80628],{"class":125},[115,80713,80714],{"class":117,"line":1221},[115,80715,80633],{"class":125},[115,80717,80718],{"class":117,"line":1312},[115,80719,80638],{"class":125},[115,80721,80722],{"class":117,"line":1318},[115,80723,80724],{"class":125},"    const oo = {}\n",[115,80726,80727],{"class":117,"line":1330},[115,80728,80729],{"class":125},"    Object.assign(oo, o)\n",[115,80731,80732],{"class":117,"line":1612},[115,80733,80734],{"class":125},"    console.log(oo)\n",[115,80736,80737],{"class":117,"line":1617},[115,80738,80739],{"class":125},"    Object.assign(o, { gender: '女' })\n",[115,80741,80742],{"class":117,"line":1623},[115,80743,80744],{"class":125},"    console.log(o)\n",[115,80746,80747,80749,80751],{"class":117,"line":1628},[115,80748,52407],{"class":125},[115,80750,51803],{"class":51290},[115,80752,51297],{"class":125},[115,80754,80755,80757,80759],{"class":117,"line":1642},[115,80756,51775],{"class":125},[115,80758,51790],{"class":51290},[115,80760,51297],{"class":125},[14,80762,80763],{},[20,80764],{"alt":22,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21999,80767,80769],{"id":80768},"_41052-array","4.10.5.2 Array",[14,80771,80772],{},"Array 是内置的构造函数，用于创建数组",[14,80774,80775],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[106,80777,80779],{"className":50623,"code":80778,"language":50625,"meta":22,"style":22},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[112,80780,80781,80786],{"__ignoreMap":22},[115,80782,80783],{"class":117,"line":118},[115,80784,80785],{"class":125},"const arr=new Array(3,5)\n",[115,80787,80788],{"class":117,"line":37},[115,80789,80790],{"class":125},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80792,80793],{},"Array的实例方法，这个方法是实例成员",[14,80795,80796],{},[20,80797],{"alt":22,"src":80798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22911,80800,80802],{"id":80801},"_410521-reduce","4.10.5.2.1 reduce",[14,80804,80805],{},[20,80806],{"alt":22,"src":80807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[106,80809,80811],{"className":53057,"code":80810,"language":53059,"meta":22,"style":22},"\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",[112,80812,80813,80821,80829,80834,80839,80844,80849,80853,80858,80863,80868,80872,80877,80882,80886,80891,80896,80901,80909],{"__ignoreMap":22},[115,80814,80815,80817,80819],{"class":117,"line":118},[115,80816,1035],{"class":125},[115,80818,51790],{"class":51290},[115,80820,51297],{"class":125},[115,80822,80823,80825,80827],{"class":117,"line":37},[115,80824,52134],{"class":125},[115,80826,51803],{"class":51290},[115,80828,51297],{"class":125},[115,80830,80831],{"class":117,"line":1180},[115,80832,80833],{"class":125},"    const arr = [1, 5, 8]\n",[115,80835,80836],{"class":117,"line":1195},[115,80837,80838],{"class":125},"    \u002F\u002F 1.没有初始值\n",[115,80840,80841],{"class":117,"line":1201},[115,80842,80843],{"class":125},"    const total = arr.reduce(function (prev, current) {\n",[115,80845,80846],{"class":117,"line":1215},[115,80847,80848],{"class":125},"      return prev + current\n",[115,80850,80851],{"class":117,"line":1221},[115,80852,33462],{"class":125},[115,80854,80855],{"class":117,"line":1312},[115,80856,80857],{"class":125},"    console.log(total)   \u002F\u002F14\n",[115,80859,80860],{"class":117,"line":1318},[115,80861,80862],{"class":125},"    \u002F\u002F 2.有初始值\n",[115,80864,80865],{"class":117,"line":1330},[115,80866,80867],{"class":125},"    const total1 = arr.reduce(function (prev, current) {\n",[115,80869,80870],{"class":117,"line":1612},[115,80871,80848],{"class":125},[115,80873,80874],{"class":117,"line":1617},[115,80875,80876],{"class":125},"    }, 10)\n",[115,80878,80879],{"class":117,"line":1623},[115,80880,80881],{"class":125},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[115,80883,80884],{"class":117,"line":1628},[115,80885,2400],{"emptyLinePlaceholder":42},[115,80887,80888],{"class":117,"line":1642},[115,80889,80890],{"class":125},"    \u002F\u002F 3.箭头函数写法\n",[115,80892,80893],{"class":117,"line":1647},[115,80894,80895],{"class":125},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[115,80897,80898],{"class":117,"line":1653},[115,80899,80900],{"class":125},"    console.log(total2)   \u002F\u002F24\n",[115,80902,80903,80905,80907],{"class":117,"line":1674},[115,80904,52407],{"class":125},[115,80906,51803],{"class":51290},[115,80908,51297],{"class":125},[115,80910,80911,80913,80915],{"class":117,"line":1679},[115,80912,51775],{"class":125},[115,80914,51790],{"class":51290},[115,80916,51297],{"class":125},[14,80918,80919],{},"执行过程：",[69,80921,80922,80925,80928],{},[72,80923,80924],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[72,80926,80927],{},"每一次循环，把返回值给作为下一次循环的上一次值",[72,80929,80930],{},"如果有起始值，则起始值作为上一次值",[106,80932,80934],{"className":53057,"code":80933,"language":53059,"meta":22,"style":22},"\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",[112,80935,80936,80944,80952,80956,80960,80964,80968,80972,80976,80981,80986,80991,80996,81001,81005,81009,81013,81017,81021,81025,81030,81034,81039,81043,81048,81053,81057,81061,81065,81073],{"__ignoreMap":22},[115,80937,80938,80940,80942],{"class":117,"line":118},[115,80939,1035],{"class":125},[115,80941,51790],{"class":51290},[115,80943,51297],{"class":125},[115,80945,80946,80948,80950],{"class":117,"line":37},[115,80947,52134],{"class":125},[115,80949,51803],{"class":51290},[115,80951,51297],{"class":125},[115,80953,80954],{"class":117,"line":1180},[115,80955,80833],{"class":125},[115,80957,80958],{"class":117,"line":1195},[115,80959,80838],{"class":125},[115,80961,80962],{"class":117,"line":1201},[115,80963,80843],{"class":125},[115,80965,80966],{"class":117,"line":1215},[115,80967,80848],{"class":125},[115,80969,80970],{"class":117,"line":1221},[115,80971,33462],{"class":125},[115,80973,80974],{"class":117,"line":1312},[115,80975,80857],{"class":125},[115,80977,80978],{"class":117,"line":1318},[115,80979,80980],{"class":125},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[115,80982,80983],{"class":117,"line":1330},[115,80984,80985],{"class":125},"    \u002F\u002F     1              5                    6\n",[115,80987,80988],{"class":117,"line":1612},[115,80989,80990],{"class":125},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[115,80992,80993],{"class":117,"line":1617},[115,80994,80995],{"class":125},"    \u002F\u002F     6              8                    14\n",[115,80997,80998],{"class":117,"line":1623},[115,80999,81000],{"class":125},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[115,81002,81003],{"class":117,"line":1628},[115,81004,80862],{"class":125},[115,81006,81007],{"class":117,"line":1642},[115,81008,80867],{"class":125},[115,81010,81011],{"class":117,"line":1647},[115,81012,80848],{"class":125},[115,81014,81015],{"class":117,"line":1653},[115,81016,80876],{"class":125},[115,81018,81019],{"class":117,"line":1674},[115,81020,80881],{"class":125},[115,81022,81023],{"class":117,"line":1679},[115,81024,80980],{"class":125},[115,81026,81027],{"class":117,"line":1693},[115,81028,81029],{"class":125},"    \u002F\u002F     10             1                     11\n",[115,81031,81032],{"class":117,"line":1698},[115,81033,80990],{"class":125},[115,81035,81036],{"class":117,"line":1727},[115,81037,81038],{"class":125},"    \u002F\u002F     11             5                    16\n",[115,81040,81041],{"class":117,"line":1732},[115,81042,80990],{"class":125},[115,81044,81045],{"class":117,"line":1749},[115,81046,81047],{"class":125},"    \u002F\u002F     16             8                    24\n",[115,81049,81050],{"class":117,"line":1754},[115,81051,81052],{"class":125},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[115,81054,81055],{"class":117,"line":1759},[115,81056,80890],{"class":125},[115,81058,81059],{"class":117,"line":1764},[115,81060,80895],{"class":125},[115,81062,81063],{"class":117,"line":1778},[115,81064,80900],{"class":125},[115,81066,81067,81069,81071],{"class":117,"line":1783},[115,81068,52407],{"class":125},[115,81070,51803],{"class":51290},[115,81072,51297],{"class":125},[115,81074,81075,81077,81079],{"class":117,"line":2577},[115,81076,51775],{"class":125},[115,81078,51790],{"class":51290},[115,81080,51297],{"class":125},[22911,81082,81084],{"id":81083},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81086,81087],{},[20,81088],{"alt":22,"src":81089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[106,81091,81093],{"className":53057,"code":81092,"language":53059,"meta":22,"style":22},"\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",[112,81094,81095,81103,81111,81116,81121,81126,81131,81135,81140,81145,81150,81155,81160,81165,81169,81174,81178,81183,81191],{"__ignoreMap":22},[115,81096,81097,81099,81101],{"class":117,"line":118},[115,81098,1035],{"class":125},[115,81100,51790],{"class":51290},[115,81102,51297],{"class":125},[115,81104,81105,81107,81109],{"class":117,"line":37},[115,81106,52134],{"class":125},[115,81108,51803],{"class":51290},[115,81110,51297],{"class":125},[115,81112,81113],{"class":117,"line":1180},[115,81114,81115],{"class":125},"    const arr = [\n",[115,81117,81118],{"class":117,"line":1195},[115,81119,81120],{"class":125},"      { name: '张三', salary: 10000 },\n",[115,81122,81123],{"class":117,"line":1201},[115,81124,81125],{"class":125},"      { name: '李四', salary: 10000 },\n",[115,81127,81128],{"class":117,"line":1215},[115,81129,81130],{"class":125},"      { name: '王五', salary: 10000 }\n",[115,81132,81133],{"class":117,"line":1221},[115,81134,53099],{"class":125},[115,81136,81137],{"class":117,"line":1312},[115,81138,81139],{"class":125},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[115,81141,81142],{"class":117,"line":1318},[115,81143,81144],{"class":125},"    \u002F\u002F prev是累计值\n",[115,81146,81147],{"class":117,"line":1330},[115,81148,81149],{"class":125},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[115,81151,81152],{"class":117,"line":1612},[115,81153,81154],{"class":125},"    console.log(total)\n",[115,81156,81157],{"class":117,"line":1617},[115,81158,81159],{"class":125},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[115,81161,81162],{"class":117,"line":1623},[115,81163,81164],{"class":125},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[115,81166,81167],{"class":117,"line":1628},[115,81168,81159],{"class":125},[115,81170,81171],{"class":117,"line":1642},[115,81172,81173],{"class":125},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[115,81175,81176],{"class":117,"line":1647},[115,81177,81159],{"class":125},[115,81179,81180],{"class":117,"line":1653},[115,81181,81182],{"class":125},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[115,81184,81185,81187,81189],{"class":117,"line":1674},[115,81186,52407],{"class":125},[115,81188,51803],{"class":51290},[115,81190,51297],{"class":125},[115,81192,81193,81195,81197],{"class":117,"line":1679},[115,81194,51775],{"class":125},[115,81196,51790],{"class":51290},[115,81198,51297],{"class":125},[22911,81200,81202],{"id":81201},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81204,81205],{},[20,81206],{"alt":22,"src":81207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81209,81210],{},[20,81211],{"alt":22,"src":81212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[69,81214,81215],{},[72,81216,81217],{},"find()",[14,81219,81220],{},"循环查找，找到第一个就ok",[14,81222,81223],{},[27,81224,81227],{"href":81225,"rel":81226},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[31],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[106,81229,81231],{"className":50623,"code":81230,"language":50625,"meta":22,"style":22},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[112,81232,81233,81238,81243],{"__ignoreMap":22},[115,81234,81235],{"class":117,"line":118},[115,81236,81237],{"class":125},"const array1 = [5, 12, 8, 130, 44]\n",[115,81239,81240],{"class":117,"line":37},[115,81241,81242],{"class":125},"const found = array1.find((element) => element > 10)\n",[115,81244,81245],{"class":117,"line":1180},[115,81246,81247],{"class":125},"console.log(found)  \u002F\u002F12\n",[14,81249,81250,81252,81253,81258,81259,81262,81263,81265,81266,81271,81272,81274,81275,81277,81278,81280,81281],{},[112,81251,81217],{}," 方法是一个",[27,81254,81257],{"href":81255,"rel":81256},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArray#%E8%BF%AD%E4%BB%A3%E6%96%B9%E6%B3%95",[31],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[112,81260,81261],{},"callbackFn"," 函数，直到 ",[112,81264,81261],{}," 返回一个",[27,81267,81270],{"href":81268,"rel":81269},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[31],"真值","。然后 ",[112,81273,81217],{}," 返回该元素并停止迭代数组。如果 ",[112,81276,81261],{}," 从未返回真值，则 ",[112,81279,81217],{}," 返回 ",[112,81282,81283],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[106,81285,81287],{"className":53057,"code":81286,"language":53059,"meta":22,"style":22},"\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",[112,81288,81289,81297,81305,81310,81315,81320,81324,81329,81334,81338,81343,81348,81352,81356,81361,81366,81370,81374,81379,81384,81389,81394,81399,81403,81408,81413,81418,81423,81427,81432,81440],{"__ignoreMap":22},[115,81290,81291,81293,81295],{"class":117,"line":118},[115,81292,1035],{"class":125},[115,81294,51790],{"class":51290},[115,81296,51297],{"class":125},[115,81298,81299,81301,81303],{"class":117,"line":37},[115,81300,52134],{"class":125},[115,81302,51803],{"class":51290},[115,81304,51297],{"class":125},[115,81306,81307],{"class":117,"line":1180},[115,81308,81309],{"class":125},"    const arr = ['red', 'blue', 'green']\n",[115,81311,81312],{"class":117,"line":1195},[115,81313,81314],{"class":125},"    const found = arr.find(item => item === 'pink')\n",[115,81316,81317],{"class":117,"line":1201},[115,81318,81319],{"class":125},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[115,81321,81322],{"class":117,"line":1215},[115,81323,2400],{"emptyLinePlaceholder":42},[115,81325,81326],{"class":117,"line":1221},[115,81327,81328],{"class":125},"    \u002F\u002F 使用场景，用于查找数据\n",[115,81330,81331],{"class":117,"line":1312},[115,81332,81333],{"class":125},"    const arr1 = [\n",[115,81335,81336],{"class":117,"line":1318},[115,81337,79376],{"class":125},[115,81339,81340],{"class":117,"line":1330},[115,81341,81342],{"class":125},"        name: '小米',\n",[115,81344,81345],{"class":117,"line":1612},[115,81346,81347],{"class":125},"        price: 1999\n",[115,81349,81350],{"class":117,"line":1617},[115,81351,77882],{"class":125},[115,81353,81354],{"class":117,"line":1623},[115,81355,79376],{"class":125},[115,81357,81358],{"class":117,"line":1628},[115,81359,81360],{"class":125},"        name: '华为',\n",[115,81362,81363],{"class":117,"line":1642},[115,81364,81365],{"class":125},"        price: 3999\n",[115,81367,81368],{"class":117,"line":1647},[115,81369,52388],{"class":125},[115,81371,81372],{"class":117,"line":1653},[115,81373,53099],{"class":125},[115,81375,81376],{"class":117,"line":1674},[115,81377,81378],{"class":125},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[115,81380,81381],{"class":117,"line":1679},[115,81382,81383],{"class":125},"    \u002F\u002F const found1 = arr1.find(item => {\n",[115,81385,81386],{"class":117,"line":1693},[115,81387,81388],{"class":125},"    \u002F\u002F   if (item.name === '小米') {\n",[115,81390,81391],{"class":117,"line":1698},[115,81392,81393],{"class":125},"    \u002F\u002F     return item\n",[115,81395,81396],{"class":117,"line":1727},[115,81397,81398],{"class":125},"    \u002F\u002F   }\n",[115,81400,81401],{"class":117,"line":1732},[115,81402,63280],{"class":125},[115,81404,81405],{"class":117,"line":1749},[115,81406,81407],{"class":125},"    \u002F\u002F 另一种写法\n",[115,81409,81410],{"class":117,"line":1754},[115,81411,81412],{"class":125},"    const found1 = arr1.find(item => {\n",[115,81414,81415],{"class":117,"line":1759},[115,81416,81417],{"class":125},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[115,81419,81420],{"class":117,"line":1764},[115,81421,81422],{"class":125},"      return item.name = '小米'\n",[115,81424,81425],{"class":117,"line":1778},[115,81426,33462],{"class":125},[115,81428,81429],{"class":117,"line":1783},[115,81430,81431],{"class":125},"    console.log(found1)\n",[115,81433,81434,81436,81438],{"class":117,"line":2577},[115,81435,52407],{"class":125},[115,81437,51803],{"class":51290},[115,81439,51297],{"class":125},[115,81441,81442,81444,81446],{"class":117,"line":2591},[115,81443,51775],{"class":125},[115,81445,51790],{"class":51290},[115,81447,51297],{"class":125},[14,81449,81450],{},[20,81451],{"alt":22,"src":81452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81454,81455],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[69,81457,81458],{"start":37},[72,81459,81460],{},"every()返回的是布尔值",[14,81462,81463],{},[27,81464,81467],{"href":81465,"rel":81466},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[31],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81469,81470],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81472,81473],{},"some是只有有一个就没问题",[14,81475,81476],{},"every是必须全是才行",[106,81478,81482],{"className":81479,"code":81480,"language":81481,"meta":22,"style":22},"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",[112,81483,81484,81500,81514,81518,81527],{"__ignoreMap":22},[115,81485,81486,81488,81491,81493,81495,81498],{"class":117,"line":118},[115,81487,54439],{"class":121},[115,81489,81490],{"class":125}," isBigEnough(element, ",[115,81492,74048],{"class":121},[115,81494,12436],{"class":125},[115,81496,81497],{"class":121},"array",[115,81499,12443],{"class":125},[115,81501,81502,81505,81508,81510,81512],{"class":117,"line":37},[115,81503,81504],{"class":121},"  return",[115,81506,81507],{"class":125}," element ",[115,81509,1710],{"class":121},[115,81511,2038],{"class":174},[115,81513,1291],{"class":125},[115,81515,81516],{"class":117,"line":1180},[115,81517,1565],{"class":125},[115,81519,81520,81523,81525],{"class":117,"line":1195},[115,81521,81522],{"class":125},"[12, 5, 8, 130, 44].every(isBigEnough); ",[115,81524,33330],{"class":121},[115,81526,54506],{"class":125},[115,81528,81529,81532,81534],{"class":117,"line":1201},[115,81530,81531],{"class":125},"[12, 54, 18, 130, 44].every(isBigEnough); ",[115,81533,33330],{"class":121},[115,81535,57930],{"class":125},[106,81537,81539],{"className":53057,"code":81538,"language":53059,"meta":22,"style":22},"\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",[112,81540,81541,81549,81557,81562,81566,81571,81576,81584],{"__ignoreMap":22},[115,81542,81543,81545,81547],{"class":117,"line":118},[115,81544,1035],{"class":125},[115,81546,51790],{"class":51290},[115,81548,51297],{"class":125},[115,81550,81551,81553,81555],{"class":117,"line":37},[115,81552,52134],{"class":125},[115,81554,51803],{"class":51290},[115,81556,51297],{"class":125},[115,81558,81559],{"class":117,"line":1180},[115,81560,81561],{"class":125},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[115,81563,81564],{"class":117,"line":1195},[115,81565,78312],{"class":125},[115,81567,81568],{"class":117,"line":1201},[115,81569,81570],{"class":125},"    const flag = arr.every(item => item >= 10)\n",[115,81572,81573],{"class":117,"line":1215},[115,81574,81575],{"class":125},"    console.log(flag)    \u002F\u002Ftrue\n",[115,81577,81578,81580,81582],{"class":117,"line":1221},[115,81579,52407],{"class":125},[115,81581,51803],{"class":51290},[115,81583,51297],{"class":125},[115,81585,81586,81588,81590],{"class":117,"line":1312},[115,81587,51775],{"class":125},[115,81589,51790],{"class":51290},[115,81591,51297],{"class":125},[106,81593,81595],{"className":53057,"code":81594,"language":53059,"meta":22,"style":22},"\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",[112,81596,81597,81605,81613,81617,81622,81627,81632,81640],{"__ignoreMap":22},[115,81598,81599,81601,81603],{"class":117,"line":118},[115,81600,1035],{"class":125},[115,81602,51790],{"class":51290},[115,81604,51297],{"class":125},[115,81606,81607,81609,81611],{"class":117,"line":37},[115,81608,52134],{"class":125},[115,81610,51803],{"class":51290},[115,81612,51297],{"class":125},[115,81614,81615],{"class":117,"line":1180},[115,81616,81561],{"class":125},[115,81618,81619],{"class":117,"line":1195},[115,81620,81621],{"class":125},"    const arr = [10, 0, 5]\n",[115,81623,81624],{"class":117,"line":1201},[115,81625,81626],{"class":125},"    const flag = arr.some(item => item >= 10)\n",[115,81628,81629],{"class":117,"line":1215},[115,81630,81631],{"class":125},"    console.log(flag)   \u002F\u002Ftrue\n",[115,81633,81634,81636,81638],{"class":117,"line":1221},[115,81635,52407],{"class":125},[115,81637,51803],{"class":51290},[115,81639,51297],{"class":125},[115,81641,81642,81644,81646],{"class":117,"line":1312},[115,81643,51775],{"class":125},[115,81645,51790],{"class":51290},[115,81647,51297],{"class":125},[22911,81649,81651],{"id":81650},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81653,81654],{},[20,81655],{"alt":22,"src":81656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[106,81658,81660],{"className":50623,"code":81659,"language":50625,"meta":22,"style":22},"\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",[112,81661,81662,81672,81686,81690,81698,81712,81732,81744,81752,81759,81771,81783,81795,81807,81817,81827,81831,81839,81847,81851,81859,81871,81879,81901,81906,81911,81944,81952,81960,81964],{"__ignoreMap":22},[115,81663,81664,81666,81668,81670],{"class":117,"line":118},[115,81665,51287],{"class":125},[115,81667,51291],{"class":51290},[115,81669,51294],{"class":1963},[115,81671,51297],{"class":125},[115,81673,81674,81676,81678,81680,81682,81684],{"class":117,"line":37},[115,81675,1035],{"class":125},[115,81677,50625],{"class":51290},[115,81679,51306],{"class":1963},[115,81681,171],{"class":125},[115,81683,51311],{"class":230},[115,81685,51297],{"class":125},[115,81687,81688],{"class":117,"line":1180},[115,81689,2400],{"emptyLinePlaceholder":42},[115,81691,81692,81694,81696],{"class":117,"line":1195},[115,81693,1035],{"class":125},[115,81695,51324],{"class":51290},[115,81697,51297],{"class":125},[115,81699,81700,81702,81704,81706,81708,81710],{"class":117,"line":1201},[115,81701,52134],{"class":125},[115,81703,51334],{"class":51290},[115,81705,51337],{"class":1963},[115,81707,171],{"class":125},[115,81709,51342],{"class":230},[115,81711,51297],{"class":125},[115,81713,81714,81716,81718,81720,81722,81724,81726,81728,81730],{"class":117,"line":1215},[115,81715,52134],{"class":125},[115,81717,51334],{"class":51290},[115,81719,14921],{"class":1963},[115,81721,171],{"class":125},[115,81723,51381],{"class":230},[115,81725,51361],{"class":1963},[115,81727,171],{"class":125},[115,81729,51388],{"class":230},[115,81731,51297],{"class":125},[115,81733,81734,81736,81738,81740,81742],{"class":117,"line":1221},[115,81735,52134],{"class":125},[115,81737,51397],{"class":51290},[115,81739,51400],{"class":125},[115,81741,51397],{"class":51290},[115,81743,51297],{"class":125},[115,81745,81746,81748,81750],{"class":117,"line":1312},[115,81747,52134],{"class":125},[115,81749,5127],{"class":51290},[115,81751,51297],{"class":125},[115,81753,81754,81757],{"class":117,"line":1318},[115,81755,81756],{"class":51290},"    div",[115,81758,15573],{"class":125},[115,81760,81761,81763,81765,81767,81769],{"class":117,"line":1330},[115,81762,54761],{"class":174},[115,81764,51427],{"class":125},[115,81766,1722],{"class":174},[115,81768,51482],{"class":121},[115,81770,1291],{"class":125},[115,81772,81773,81775,81777,81779,81781],{"class":117,"line":1612},[115,81774,54775],{"class":174},[115,81776,51427],{"class":125},[115,81778,526],{"class":174},[115,81780,51482],{"class":121},[115,81782,1291],{"class":125},[115,81784,81785,81787,81789,81791,81793],{"class":117,"line":1617},[115,81786,57349],{"class":174},[115,81788,51427],{"class":125},[115,81790,526],{"class":174},[115,81792,51482],{"class":121},[115,81794,1291],{"class":125},[115,81796,81797,81799,81801,81803,81805],{"class":117,"line":1623},[115,81798,65123],{"class":174},[115,81800,51427],{"class":125},[115,81802,623],{"class":174},[115,81804,51482],{"class":121},[115,81806,1291],{"class":125},[115,81808,81809,81811,81813,81815],{"class":117,"line":1628},[115,81810,57276],{"class":174},[115,81812,51427],{"class":125},[115,81814,51582],{"class":174},[115,81816,1291],{"class":125},[115,81818,81819,81821,81823,81825],{"class":117,"line":1642},[115,81820,54874],{"class":174},[115,81822,51427],{"class":125},[115,81824,51635],{"class":174},[115,81826,1291],{"class":125},[115,81828,81829],{"class":117,"line":1647},[115,81830,2187],{"class":125},[115,81832,81833,81835,81837],{"class":117,"line":1653},[115,81834,52407],{"class":125},[115,81836,5127],{"class":51290},[115,81838,51297],{"class":125},[115,81840,81841,81843,81845],{"class":117,"line":1674},[115,81842,51775],{"class":125},[115,81844,51324],{"class":51290},[115,81846,51297],{"class":125},[115,81848,81849],{"class":117,"line":1679},[115,81850,2400],{"emptyLinePlaceholder":42},[115,81852,81853,81855,81857],{"class":117,"line":1693},[115,81854,1035],{"class":125},[115,81856,51790],{"class":51290},[115,81858,51297],{"class":125},[115,81860,81861,81863,81865,81867,81869],{"class":117,"line":1698},[115,81862,52134],{"class":125},[115,81864,51601],{"class":51290},[115,81866,55304],{"class":125},[115,81868,51601],{"class":51290},[115,81870,51297],{"class":125},[115,81872,81873,81875,81877],{"class":117,"line":1727},[115,81874,52134],{"class":125},[115,81876,51803],{"class":51290},[115,81878,51297],{"class":125},[115,81880,81881,81883,81886,81888,81891,81894,81896,81899],{"class":117,"line":1732},[115,81882,11222],{"class":121},[115,81884,81885],{"class":174}," spec",[115,81887,13565],{"class":121},[115,81889,81890],{"class":125}," { size: ",[115,81892,81893],{"class":230},"'40cm*40cm'",[115,81895,55454],{"class":125},[115,81897,81898],{"class":230},"'黑色'",[115,81900,55594],{"class":125},[115,81902,81903],{"class":117,"line":1749},[115,81904,81905],{"class":184},"    \u002F\u002F const arr = Object.values(spec)\n",[115,81907,81908],{"class":117,"line":1754},[115,81909,81910],{"class":184},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[115,81912,81913,81915,81917,81919,81922,81924,81926,81929,81932,81935,81937,81939,81942],{"class":117,"line":1759},[115,81914,52397],{"class":125},[115,81916,54389],{"class":1963},[115,81918,126],{"class":125},[115,81920,81921],{"class":230},"'div'",[115,81923,74239],{"class":125},[115,81925,171],{"class":121},[115,81927,81928],{"class":125}," Object.",[115,81930,81931],{"class":1963},"values",[115,81933,81934],{"class":125},"(spec).",[115,81936,74213],{"class":1963},[115,81938,126],{"class":125},[115,81940,81941],{"class":230},"'\u002F'",[115,81943,132],{"class":125},[115,81945,81946,81948,81950],{"class":117,"line":1764},[115,81947,52407],{"class":125},[115,81949,51803],{"class":51290},[115,81951,51297],{"class":125},[115,81953,81954,81956,81958],{"class":117,"line":1778},[115,81955,51775],{"class":125},[115,81957,51790],{"class":51290},[115,81959,51297],{"class":125},[115,81961,81962],{"class":117,"line":1783},[115,81963,2400],{"emptyLinePlaceholder":42},[115,81965,81966,81968,81970],{"class":117,"line":2577},[115,81967,51775],{"class":125},[115,81969,50625],{"class":51290},[115,81971,51297],{"class":125},[14,81973,81974],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22911,81976,81978],{"id":81977},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81980,81981],{},"静态方法，将伪数组转换为真数组",[14,81983,81984],{},[20,81985],{"alt":22,"src":81986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[106,81988,81990],{"className":53057,"code":81989,"language":53059,"meta":22,"style":22},"\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",[112,81991,81992,82000,82008,82020,82032,82044,82052,82060,82065,82070,82075,82080,82088],{"__ignoreMap":22},[115,81993,81994,81996,81998],{"class":117,"line":118},[115,81995,1035],{"class":125},[115,81997,51790],{"class":51290},[115,81999,51297],{"class":125},[115,82001,82002,82004,82006],{"class":117,"line":37},[115,82003,52134],{"class":125},[115,82005,1132],{"class":51290},[115,82007,51297],{"class":125},[115,82009,82010,82012,82014,82016,82018],{"class":117,"line":1180},[115,82011,51331],{"class":125},[115,82013,72],{"class":51290},[115,82015,55304],{"class":125},[115,82017,72],{"class":51290},[115,82019,51297],{"class":125},[115,82021,82022,82024,82026,82028,82030],{"class":117,"line":1195},[115,82023,51331],{"class":125},[115,82025,72],{"class":51290},[115,82027,55304],{"class":125},[115,82029,72],{"class":51290},[115,82031,51297],{"class":125},[115,82033,82034,82036,82038,82040,82042],{"class":117,"line":1201},[115,82035,51331],{"class":125},[115,82037,72],{"class":51290},[115,82039,55304],{"class":125},[115,82041,72],{"class":51290},[115,82043,51297],{"class":125},[115,82045,82046,82048,82050],{"class":117,"line":1215},[115,82047,52407],{"class":125},[115,82049,1132],{"class":51290},[115,82051,51297],{"class":125},[115,82053,82054,82056,82058],{"class":117,"line":1221},[115,82055,52134],{"class":125},[115,82057,51803],{"class":51290},[115,82059,51297],{"class":125},[115,82061,82062],{"class":117,"line":1312},[115,82063,82064],{"class":125},"    const lis = document.querySelectorAll('li')\n",[115,82066,82067],{"class":117,"line":1318},[115,82068,82069],{"class":125},"    const liss = Array.from(lis)\n",[115,82071,82072],{"class":117,"line":1330},[115,82073,82074],{"class":125},"    liss.pop()\n",[115,82076,82077],{"class":117,"line":1612},[115,82078,82079],{"class":125},"    console.log(liss)\n",[115,82081,82082,82084,82086],{"class":117,"line":1617},[115,82083,52407],{"class":125},[115,82085,51803],{"class":51290},[115,82087,51297],{"class":125},[115,82089,82090,82092,82094],{"class":117,"line":1623},[115,82091,51775],{"class":125},[115,82093,51790],{"class":51290},[115,82095,51297],{"class":125},[14,82097,82098],{},[20,82099],{"alt":22,"src":82100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21999,82102,82104],{"id":82103},"_41053-string","4.10.5.3 String",[14,82106,82107],{},[20,82108],{"alt":22,"src":82109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22911,82111,82113],{"id":82112},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[106,82115,82117],{"className":53057,"code":82116,"language":53059,"meta":22,"style":22},"\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",[112,82118,82119,82127,82135,82140,82145,82150,82154,82159,82164,82169,82177],{"__ignoreMap":22},[115,82120,82121,82123,82125],{"class":117,"line":118},[115,82122,1035],{"class":125},[115,82124,51790],{"class":51290},[115,82126,51297],{"class":125},[115,82128,82129,82131,82133],{"class":117,"line":37},[115,82130,52134],{"class":125},[115,82132,51803],{"class":51290},[115,82134,51297],{"class":125},[115,82136,82137],{"class":117,"line":1180},[115,82138,82139],{"class":125},"    \u002F\u002F 把字符串转化为数组\n",[115,82141,82142],{"class":117,"line":1195},[115,82143,82144],{"class":125},"    const str = 'pink,red'\n",[115,82146,82147],{"class":117,"line":1201},[115,82148,82149],{"class":125},"    const arr = str.split(',')\n",[115,82151,82152],{"class":117,"line":1215},[115,82153,80628],{"class":125},[115,82155,82156],{"class":117,"line":1221},[115,82157,82158],{"class":125},"    const str1 = '2025-8-25'\n",[115,82160,82161],{"class":117,"line":1312},[115,82162,82163],{"class":125},"    const arr1 = str1.split('-')\n",[115,82165,82166],{"class":117,"line":1318},[115,82167,82168],{"class":125},"    console.log(arr1)\n",[115,82170,82171,82173,82175],{"class":117,"line":1330},[115,82172,52407],{"class":125},[115,82174,51803],{"class":51290},[115,82176,51297],{"class":125},[115,82178,82179,82181,82183],{"class":117,"line":1612},[115,82180,51775],{"class":125},[115,82182,51790],{"class":51290},[115,82184,51297],{"class":125},[22911,82186,82188],{"id":82187},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82190,5182],{},[14,82192,82193],{},"substring(indexStart)",[14,82195,82196],{},"substring(indexStart, indexEnd)",[1132,82198,82199,82210,82222,82232],{},[72,82200,82201,82202,82205,82206,82209],{},"如果省略了 ",[112,82203,82204],{},"indexEnd","，则 ",[112,82207,82208],{},"substring()"," 提取字符直到字符串的末尾",[72,82211,82212,82213,82216,82217,82205,82219,82221],{},"如果 ",[112,82214,82215],{},"indexStart"," 等于 ",[112,82218,82204],{},[112,82220,82208],{}," 返回一个空字符串",[72,82223,82212,82224,82226,82227,82205,82229,82231],{},[112,82225,82215],{}," 大于 ",[112,82228,82204],{},[112,82230,82208],{}," 的效果就像交换了这两个参数一样",[72,82233,82234],{},"结束的索引号不包含想要截取的部分",[106,82236,82238],{"className":81479,"code":82237,"language":81481,"meta":22,"style":22},"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",[112,82239,82240,82252,82256,82290,82320,82324,82355,82359,82386,82416,82446,82450,82481],{"__ignoreMap":22},[115,82241,82242,82245,82247,82250],{"class":117,"line":118},[115,82243,82244],{"class":125},"const anyString ",[115,82246,171],{"class":121},[115,82248,82249],{"class":230}," \"Mozilla\"",[115,82251,1291],{"class":125},[115,82253,82254],{"class":117,"line":37},[115,82255,2400],{"emptyLinePlaceholder":42},[115,82257,82258,82261,82263,82265,82267,82270,82272,82275,82277,82279,82281,82283,82285,82287],{"class":117,"line":1180},[115,82259,82260],{"class":174},"console",[115,82262,683],{"class":125},[115,82264,58237],{"class":174},[115,82266,126],{"class":125},[115,82268,82269],{"class":174},"anyString",[115,82271,683],{"class":125},[115,82273,82274],{"class":174},"substring",[115,82276,126],{"class":125},[115,82278,317],{"class":174},[115,82280,12436],{"class":125},[115,82282,343],{"class":174},[115,82284,75243],{"class":125},[115,82286,33330],{"class":121},[115,82288,82289],{"class":230}," 'M'\n",[115,82291,82292,82294,82296,82298,82300,82302,82304,82306,82308,82310,82312,82314,82316,82318],{"class":117,"line":1195},[115,82293,82260],{"class":174},[115,82295,683],{"class":125},[115,82297,58237],{"class":174},[115,82299,126],{"class":125},[115,82301,82269],{"class":174},[115,82303,683],{"class":125},[115,82305,82274],{"class":174},[115,82307,126],{"class":125},[115,82309,343],{"class":174},[115,82311,12436],{"class":125},[115,82313,317],{"class":174},[115,82315,75243],{"class":125},[115,82317,33330],{"class":121},[115,82319,82289],{"class":230},[115,82321,82322],{"class":117,"line":1201},[115,82323,2400],{"emptyLinePlaceholder":42},[115,82325,82326,82328,82330,82332,82334,82336,82338,82340,82342,82344,82346,82348,82350,82352],{"class":117,"line":1215},[115,82327,82260],{"class":174},[115,82329,683],{"class":125},[115,82331,58237],{"class":174},[115,82333,126],{"class":125},[115,82335,82269],{"class":174},[115,82337,683],{"class":125},[115,82339,82274],{"class":174},[115,82341,126],{"class":125},[115,82343,317],{"class":174},[115,82345,12436],{"class":125},[115,82347,469],{"class":174},[115,82349,75243],{"class":125},[115,82351,33330],{"class":121},[115,82353,82354],{"class":230}," 'Mozill'\n",[115,82356,82357],{"class":117,"line":1221},[115,82358,2400],{"emptyLinePlaceholder":42},[115,82360,82361,82363,82365,82367,82369,82371,82373,82375,82377,82379,82381,82383],{"class":117,"line":1312},[115,82362,82260],{"class":174},[115,82364,683],{"class":125},[115,82366,58237],{"class":174},[115,82368,126],{"class":125},[115,82370,82269],{"class":174},[115,82372,683],{"class":125},[115,82374,82274],{"class":174},[115,82376,126],{"class":125},[115,82378,418],{"class":174},[115,82380,75243],{"class":125},[115,82382,33330],{"class":121},[115,82384,82385],{"class":230}," 'lla'\n",[115,82387,82388,82390,82392,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414],{"class":117,"line":1318},[115,82389,82260],{"class":174},[115,82391,683],{"class":125},[115,82393,58237],{"class":174},[115,82395,126],{"class":125},[115,82397,82269],{"class":174},[115,82399,683],{"class":125},[115,82401,82274],{"class":174},[115,82403,126],{"class":125},[115,82405,418],{"class":174},[115,82407,12436],{"class":125},[115,82409,494],{"class":174},[115,82411,75299],{"class":125},[115,82413,33330],{"class":121},[115,82415,82385],{"class":230},[115,82417,82418,82420,82422,82424,82426,82428,82430,82432,82434,82436,82438,82440,82442,82444],{"class":117,"line":1330},[115,82419,82260],{"class":174},[115,82421,683],{"class":125},[115,82423,58237],{"class":174},[115,82425,126],{"class":125},[115,82427,82269],{"class":174},[115,82429,683],{"class":125},[115,82431,82274],{"class":174},[115,82433,126],{"class":125},[115,82435,494],{"class":174},[115,82437,12436],{"class":125},[115,82439,418],{"class":174},[115,82441,75243],{"class":125},[115,82443,33330],{"class":121},[115,82445,82385],{"class":230},[115,82447,82448],{"class":117,"line":1612},[115,82449,2400],{"emptyLinePlaceholder":42},[115,82451,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478],{"class":117,"line":1617},[115,82453,82260],{"class":174},[115,82455,683],{"class":125},[115,82457,58237],{"class":174},[115,82459,126],{"class":125},[115,82461,82269],{"class":174},[115,82463,683],{"class":125},[115,82465,82274],{"class":174},[115,82467,126],{"class":125},[115,82469,317],{"class":174},[115,82471,12436],{"class":125},[115,82473,494],{"class":174},[115,82475,75243],{"class":125},[115,82477,33330],{"class":121},[115,82479,82480],{"class":230}," 'Mozilla'\n",[115,82482,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505,82507,82509],{"class":117,"line":1623},[115,82484,82260],{"class":174},[115,82486,683],{"class":125},[115,82488,58237],{"class":174},[115,82490,126],{"class":125},[115,82492,82269],{"class":174},[115,82494,683],{"class":125},[115,82496,82274],{"class":174},[115,82498,126],{"class":125},[115,82500,317],{"class":174},[115,82502,12436],{"class":125},[115,82504,571],{"class":174},[115,82506,75243],{"class":125},[115,82508,33330],{"class":121},[115,82510,82480],{"class":230},[22911,82512,82514],{"id":82513},"_410533-startswith","4.10.5.3.3 startsWith",[14,82516,82517,82520,82521,82526,82527,82529,82530],{},[112,82518,82519],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[275,82522,82523],{},[112,82524,82525],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[112,82528,1363],{}," 或 ",[112,82531,66010],{},[106,82533,82535],{"className":77485,"code":82534,"language":77487,"meta":22,"style":22},"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",[112,82536,82537,82549,82568,82573,82593],{"__ignoreMap":22},[115,82538,82539,82541,82544,82546],{"class":117,"line":118},[115,82540,6793],{"class":121},[115,82542,82543],{"class":125}," str1 ",[115,82545,171],{"class":121},[115,82547,82548],{"class":230}," \"Saturday night plans\"\n",[115,82550,82551,82553,82555,82558,82561,82563,82566],{"class":117,"line":37},[115,82552,77522],{"class":125},[115,82554,58237],{"class":1963},[115,82556,82557],{"class":125},"(str1.",[115,82559,82560],{"class":1963},"startsWith",[115,82562,126],{"class":125},[115,82564,82565],{"class":230},"\"Sat\"",[115,82567,30498],{"class":125},[115,82569,82570],{"class":117,"line":1180},[115,82571,82572],{"class":184},"\u002F\u002F Expected output: true\n",[115,82574,82575,82577,82579,82581,82583,82585,82587,82589,82591],{"class":117,"line":1195},[115,82576,77522],{"class":125},[115,82578,58237],{"class":1963},[115,82580,82557],{"class":125},[115,82582,82560],{"class":1963},[115,82584,126],{"class":125},[115,82586,82565],{"class":230},[115,82588,12436],{"class":125},[115,82590,197],{"class":174},[115,82592,30498],{"class":125},[115,82594,82595],{"class":117,"line":1201},[115,82596,82597],{"class":184},"\u002F\u002F Expected output: false\n",[106,82599,82601],{"className":50623,"code":82600,"language":50625,"meta":22,"style":22},"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",[112,82602,82603,82608,82613,82617,82622,82627],{"__ignoreMap":22},[115,82604,82605],{"class":117,"line":118},[115,82606,82607],{"class":125},"startsWith(searchString)\n",[115,82609,82610],{"class":117,"line":37},[115,82611,82612],{"class":125},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[115,82614,82615],{"class":117,"line":1180},[115,82616,2400],{"emptyLinePlaceholder":42},[115,82618,82619],{"class":117,"line":1195},[115,82620,82621],{"class":125},"const str3 = 'pink老师上课中'\n",[115,82623,82624],{"class":117,"line":1201},[115,82625,82626],{"class":125},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[115,82628,82629],{"class":117,"line":1215},[115,82630,82631],{"class":125},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22911,82633,82635],{"id":82634},"_410534-includes","4.10.5.3.4 includes",[14,82637,82638],{},"includes(searchString) includes(searchString, position)",[69,82640,82641],{},[72,82642,82643],{},"searchString:",[14,82645,82646,82647,82649,82650,82655,82656,82661,82662,21501,82665,82668,82669,82672],{},"一个要在 ",[112,82648,1300],{}," 中查找的字符串。",[27,82651,82654],{"href":82652,"rel":82653},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FRegExp#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86",[31],"不能是正则表达式","。所有非正则表达式的值都会被",[27,82657,82660],{"href":82658,"rel":82659},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2",[31],"强制转换为字符串","，因此如果该参数被省略或传入 ",[112,82663,82664],{},"undefined",[112,82666,82667],{},"includes()"," 方法会在字符串中搜索 ",[112,82670,82671],{},"\"undefined\"","，这通常不是你想要的",[69,82674,82675],{"start":37},[72,82676,82677,984],{},[112,82678,82679],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82681,82682,82683,82686,82687],{},"在字符串中开始搜索 ",[112,82684,82685],{},"searchString"," 的位置。默认值为 ",[112,82688,317],{},[69,82690,82691],{"start":1180},[72,82692,82693],{},"返回值：",[14,82695,82696,82697,82699,82700,82704,82705],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[112,82698,82685],{}," 为空字符串的情况），则返回 ",[275,82701,82702],{},[112,82703,1363],{}," ，否则返回 ",[275,82706,82707],{},[112,82708,66010],{},[69,82710,82711],{"start":1195},[72,82712,82713],{},"异常：",[14,82715,82212,82716,13796,82718,82722],{},[112,82717,82685],{},[27,82719,82721],{"href":82652,"rel":82720},[31],"是一个正则表达式","，则会抛出",[14,82724,82725],{},"只要是有就是true，不需要非得以谁开头结尾",[106,82727,82729],{"className":77485,"code":82728,"language":77487,"meta":22,"style":22},"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",[112,82730,82731,82742,82765,82784,82804,82826,82845],{"__ignoreMap":22},[115,82732,82733,82735,82737,82739],{"class":117,"line":118},[115,82734,6793],{"class":121},[115,82736,79765],{"class":125},[115,82738,171],{"class":121},[115,82740,82741],{"class":230}," \"To be, or not to be, that is the question.\"\n",[115,82743,82744,82746,82748,82751,82754,82756,82759,82762],{"class":117,"line":37},[115,82745,77522],{"class":125},[115,82747,58237],{"class":1963},[115,82749,82750],{"class":125},"(str.",[115,82752,82753],{"class":1963},"includes",[115,82755,126],{"class":125},[115,82757,82758],{"class":230},"\"To be\"",[115,82760,82761],{"class":125},"))",[115,82763,82764],{"class":184},"  \u002F\u002F true\n",[115,82766,82767,82769,82771,82773,82775,82777,82780,82782],{"class":117,"line":1180},[115,82768,77522],{"class":125},[115,82770,58237],{"class":1963},[115,82772,82750],{"class":125},[115,82774,82753],{"class":1963},[115,82776,126],{"class":125},[115,82778,82779],{"class":230},"\"question\"",[115,82781,82761],{"class":125},[115,82783,82764],{"class":184},[115,82785,82786,82788,82790,82792,82794,82796,82799,82801],{"class":117,"line":1195},[115,82787,77522],{"class":125},[115,82789,58237],{"class":1963},[115,82791,82750],{"class":125},[115,82793,82753],{"class":1963},[115,82795,126],{"class":125},[115,82797,82798],{"class":230},"\"nonexistent\"",[115,82800,82761],{"class":125},[115,82802,82803],{"class":184},"  \u002F\u002F false\n",[115,82805,82806,82808,82810,82812,82814,82816,82818,82820,82822,82824],{"class":117,"line":1201},[115,82807,77522],{"class":125},[115,82809,58237],{"class":1963},[115,82811,82750],{"class":125},[115,82813,82753],{"class":1963},[115,82815,126],{"class":125},[115,82817,82758],{"class":230},[115,82819,12436],{"class":125},[115,82821,343],{"class":174},[115,82823,82761],{"class":125},[115,82825,82803],{"class":184},[115,82827,82828,82830,82832,82834,82836,82838,82841,82843],{"class":117,"line":1215},[115,82829,77522],{"class":125},[115,82831,58237],{"class":1963},[115,82833,82750],{"class":125},[115,82835,82753],{"class":1963},[115,82837,126],{"class":125},[115,82839,82840],{"class":230},"\"TO BE\"",[115,82842,82761],{"class":125},[115,82844,82803],{"class":184},[115,82846,82847,82849,82851,82853,82855,82857,82859,82861],{"class":117,"line":1221},[115,82848,77522],{"class":125},[115,82850,58237],{"class":1963},[115,82852,82750],{"class":125},[115,82854,82753],{"class":1963},[115,82856,126],{"class":125},[115,82858,7653],{"class":230},[115,82860,82761],{"class":125},[115,82862,82764],{"class":184},[22911,82864,82866],{"id":82865},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[106,82868,82870],{"className":53057,"code":82869,"language":53059,"meta":22,"style":22},"\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",[112,82871,82872,82880,82888,82893,82898,82903,82908,82913,82921],{"__ignoreMap":22},[115,82873,82874,82876,82878],{"class":117,"line":118},[115,82875,1035],{"class":125},[115,82877,51790],{"class":51290},[115,82879,51297],{"class":125},[115,82881,82882,82884,82886],{"class":117,"line":37},[115,82883,52134],{"class":125},[115,82885,51803],{"class":51290},[115,82887,51297],{"class":125},[115,82889,82890],{"class":117,"line":1180},[115,82891,82892],{"class":125},"    const num = 10\n",[115,82894,82895],{"class":117,"line":1195},[115,82896,82897],{"class":125},"    \u002F\u002F 强制转换\n",[115,82899,82900],{"class":117,"line":1201},[115,82901,82902],{"class":125},"    console.log(String(num))\n",[115,82904,82905],{"class":117,"line":1215},[115,82906,82907],{"class":125},"    \u002F\u002F toString()方法转换\n",[115,82909,82910],{"class":117,"line":1221},[115,82911,82912],{"class":125},"    console.log(num.toString())\n",[115,82914,82915,82917,82919],{"class":117,"line":1312},[115,82916,52407],{"class":125},[115,82918,51803],{"class":51290},[115,82920,51297],{"class":125},[115,82922,82923,82925,82927],{"class":117,"line":1318},[115,82924,51775],{"class":125},[115,82926,51790],{"class":51290},[115,82928,51297],{"class":125},[22911,82930,82932],{"id":82931},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82934,82935],{},[20,82936],{"alt":22,"src":82937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[106,82939,82941],{"className":50623,"code":82940,"language":50625,"meta":22,"style":22},"\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",[112,82942,82943,82953,82967,82971,82979,82993,83013,83025,83033,83037,83045,83057,83065,83077,83082,83087,83092,83139,83155,83163,83171,83175],{"__ignoreMap":22},[115,82944,82945,82947,82949,82951],{"class":117,"line":118},[115,82946,51287],{"class":125},[115,82948,51291],{"class":51290},[115,82950,51294],{"class":1963},[115,82952,51297],{"class":125},[115,82954,82955,82957,82959,82961,82963,82965],{"class":117,"line":37},[115,82956,1035],{"class":125},[115,82958,50625],{"class":51290},[115,82960,51306],{"class":1963},[115,82962,171],{"class":125},[115,82964,51311],{"class":230},[115,82966,51297],{"class":125},[115,82968,82969],{"class":117,"line":1180},[115,82970,2400],{"emptyLinePlaceholder":42},[115,82972,82973,82975,82977],{"class":117,"line":1195},[115,82974,1035],{"class":125},[115,82976,51324],{"class":51290},[115,82978,51297],{"class":125},[115,82980,82981,82983,82985,82987,82989,82991],{"class":117,"line":1201},[115,82982,52134],{"class":125},[115,82984,51334],{"class":51290},[115,82986,51337],{"class":1963},[115,82988,171],{"class":125},[115,82990,51342],{"class":230},[115,82992,51297],{"class":125},[115,82994,82995,82997,82999,83001,83003,83005,83007,83009,83011],{"class":117,"line":1215},[115,82996,52134],{"class":125},[115,82998,51334],{"class":51290},[115,83000,14921],{"class":1963},[115,83002,171],{"class":125},[115,83004,51381],{"class":230},[115,83006,51361],{"class":1963},[115,83008,171],{"class":125},[115,83010,51388],{"class":230},[115,83012,51297],{"class":125},[115,83014,83015,83017,83019,83021,83023],{"class":117,"line":1221},[115,83016,52134],{"class":125},[115,83018,51397],{"class":51290},[115,83020,51400],{"class":125},[115,83022,51397],{"class":51290},[115,83024,51297],{"class":125},[115,83026,83027,83029,83031],{"class":117,"line":1312},[115,83028,51775],{"class":125},[115,83030,51324],{"class":51290},[115,83032,51297],{"class":125},[115,83034,83035],{"class":117,"line":1318},[115,83036,2400],{"emptyLinePlaceholder":42},[115,83038,83039,83041,83043],{"class":117,"line":1330},[115,83040,1035],{"class":125},[115,83042,51790],{"class":51290},[115,83044,51297],{"class":125},[115,83046,83047,83049,83051,83053,83055],{"class":117,"line":1612},[115,83048,52134],{"class":125},[115,83050,51601],{"class":51290},[115,83052,55304],{"class":125},[115,83054,51601],{"class":51290},[115,83056,51297],{"class":125},[115,83058,83059,83061,83063],{"class":117,"line":1617},[115,83060,52134],{"class":125},[115,83062,51803],{"class":51290},[115,83064,51297],{"class":125},[115,83066,83067,83069,83072,83074],{"class":117,"line":1623},[115,83068,11222],{"class":121},[115,83070,83071],{"class":174}," gift",[115,83073,13565],{"class":121},[115,83075,83076],{"class":230}," '50g的茶叶，清洗球'\n",[115,83078,83079],{"class":117,"line":1628},[115,83080,83081],{"class":184},"    \u002F\u002F 1.把字符串拆分为数组\n",[115,83083,83084],{"class":117,"line":1642},[115,83085,83086],{"class":184},"    \u002F\u002F console.log(gift.split(','))\n",[115,83088,83089],{"class":117,"line":1647},[115,83090,83091],{"class":184},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[115,83093,83094,83096,83098,83100,83103,83106,83108,83111,83113,83115,83117,83119,83121,83124,83126,83129,83131,83133,83135,83137],{"class":117,"line":1653},[115,83095,11222],{"class":121},[115,83097,73909],{"class":174},[115,83099,13565],{"class":121},[115,83101,83102],{"class":125}," gift.",[115,83104,83105],{"class":1963},"split",[115,83107,126],{"class":125},[115,83109,83110],{"class":230},"'，'",[115,83112,30827],{"class":125},[115,83114,74034],{"class":1963},[115,83116,126],{"class":125},[115,83118,79785],{"class":5217},[115,83120,79788],{"class":121},[115,83122,83123],{"class":230}," `\u003Cspan>【赠品】${",[115,83125,79785],{"class":125},[115,83127,83128],{"class":230},"}\u003C\u002Fspan>\u003Cbr>`",[115,83130,30827],{"class":125},[115,83132,74213],{"class":1963},[115,83134,126],{"class":125},[115,83136,74218],{"class":230},[115,83138,132],{"class":125},[115,83140,83141,83143,83145,83147,83149,83151,83153],{"class":117,"line":1674},[115,83142,52397],{"class":125},[115,83144,54389],{"class":1963},[115,83146,126],{"class":125},[115,83148,81921],{"class":230},[115,83150,74239],{"class":125},[115,83152,171],{"class":121},[115,83154,73975],{"class":125},[115,83156,83157,83159,83161],{"class":117,"line":1679},[115,83158,52407],{"class":125},[115,83160,51803],{"class":51290},[115,83162,51297],{"class":125},[115,83164,83165,83167,83169],{"class":117,"line":1693},[115,83166,51775],{"class":125},[115,83168,51790],{"class":51290},[115,83170,51297],{"class":125},[115,83172,83173],{"class":117,"line":1698},[115,83174,2400],{"emptyLinePlaceholder":42},[115,83176,83177,83179,83181],{"class":117,"line":1727},[115,83178,51775],{"class":125},[115,83180,50625],{"class":51290},[115,83182,51297],{"class":125},[21999,83184,83186],{"id":83185},"_41054-number","4.10.5.4 Number",[14,83188,83189],{},[20,83190],{"alt":22,"src":83191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83193,83194],{},"整数也可以进行toFixed来保留小数",[14,83196,83197],{},"比如：",[14,83199,83200],{},"const price=10",[14,83202,83203],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21999,83205,83207],{"id":83206},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83209,83210],{},[20,83211],{"alt":22,"src":83212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[106,83214,83216],{"className":50623,"code":83215,"language":50625,"meta":22,"style":22},"\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",[112,83217,83218,83228,83242,83246,83254,83268,83288,83300,83308,83314,83324,83334,83344,83348,83352,83358,83370,83384,83388,83392,83398,83410,83426,83436,83452,83456,83460,83466,83476,83486,83490,83494,83502,83514,83526,83538,83542,83546,83554,83566,83570,83574,83585,83595,83607,83619,83629,83633,83637,83645,83654,83666,83676,83686,83690,83694,83702,83711,83718,83728,83740,83744,83748,83757,83767,83778,83790,83802,83806,83810,83819,83829,83840,83844,83848,83854,83866,83878,83888,83898,83916,83928,83932,83936,83945,83957,83967,83977,83989,83993,84001,84009,84013,84021,84035,84043,84057,84085,84093,84101,84111,84115,84123,84131,84140,84148,84157,84167,84171,84175,84183,84191,84200,84208,84216,84229,84233,84237,84245,84253,84262,84270,84278,84293,84297,84301,84309,84317,84326,84334,84342,84356,84364,84368,84372,84377,84403,84408,84445,84450,84473,84478,84532,84537,84573,84577,84583,84588,84597,84611,84620,84639,84648,84658,84663,84668,84681,84686,84740,84766,84774,84782,84786],{"__ignoreMap":22},[115,83219,83220,83222,83224,83226],{"class":117,"line":118},[115,83221,51287],{"class":125},[115,83223,51291],{"class":51290},[115,83225,51294],{"class":1963},[115,83227,51297],{"class":125},[115,83229,83230,83232,83234,83236,83238,83240],{"class":117,"line":37},[115,83231,1035],{"class":125},[115,83233,50625],{"class":51290},[115,83235,51306],{"class":1963},[115,83237,171],{"class":125},[115,83239,51311],{"class":230},[115,83241,51297],{"class":125},[115,83243,83244],{"class":117,"line":1180},[115,83245,2400],{"emptyLinePlaceholder":42},[115,83247,83248,83250,83252],{"class":117,"line":1195},[115,83249,1035],{"class":125},[115,83251,51324],{"class":51290},[115,83253,51297],{"class":125},[115,83255,83256,83258,83260,83262,83264,83266],{"class":117,"line":1201},[115,83257,52134],{"class":125},[115,83259,51334],{"class":51290},[115,83261,51337],{"class":1963},[115,83263,171],{"class":125},[115,83265,51342],{"class":230},[115,83267,51297],{"class":125},[115,83269,83270,83272,83274,83276,83278,83280,83282,83284,83286],{"class":117,"line":1215},[115,83271,52134],{"class":125},[115,83273,51334],{"class":51290},[115,83275,14921],{"class":1963},[115,83277,171],{"class":125},[115,83279,51381],{"class":230},[115,83281,51361],{"class":1963},[115,83283,171],{"class":125},[115,83285,51388],{"class":230},[115,83287,51297],{"class":125},[115,83289,83290,83292,83294,83296,83298],{"class":117,"line":1221},[115,83291,52134],{"class":125},[115,83293,51397],{"class":51290},[115,83295,51400],{"class":125},[115,83297,51397],{"class":51290},[115,83299,51297],{"class":125},[115,83301,83302,83304,83306],{"class":117,"line":1312},[115,83303,52134],{"class":125},[115,83305,5127],{"class":51290},[115,83307,51297],{"class":125},[115,83309,83310,83312],{"class":117,"line":1318},[115,83311,6404],{"class":51290},[115,83313,15573],{"class":125},[115,83315,83316,83318,83320,83322],{"class":117,"line":1330},[115,83317,54685],{"class":174},[115,83319,51427],{"class":125},[115,83321,317],{"class":174},[115,83323,1291],{"class":125},[115,83325,83326,83328,83330,83332],{"class":117,"line":1612},[115,83327,54696],{"class":174},[115,83329,51427],{"class":125},[115,83331,317],{"class":174},[115,83333,1291],{"class":125},[115,83335,83336,83338,83340,83342],{"class":117,"line":1617},[115,83337,72586],{"class":174},[115,83339,51427],{"class":125},[115,83341,60495],{"class":174},[115,83343,1291],{"class":125},[115,83345,83346],{"class":117,"line":1623},[115,83347,2187],{"class":125},[115,83349,83350],{"class":117,"line":1628},[115,83351,2400],{"emptyLinePlaceholder":42},[115,83353,83354,83356],{"class":117,"line":1642},[115,83355,62113],{"class":1963},[115,83357,15573],{"class":125},[115,83359,83360,83362,83364,83366,83368],{"class":117,"line":1647},[115,83361,54761],{"class":174},[115,83363,51427],{"class":125},[115,83365,78564],{"class":174},[115,83367,51482],{"class":121},[115,83369,1291],{"class":125},[115,83371,83372,83374,83376,83378,83380,83382],{"class":117,"line":1653},[115,83373,54696],{"class":174},[115,83375,51427],{"class":125},[115,83377,436],{"class":174},[115,83379,51482],{"class":121},[115,83381,51546],{"class":174},[115,83383,1291],{"class":125},[115,83385,83386],{"class":117,"line":1674},[115,83387,2187],{"class":125},[115,83389,83390],{"class":117,"line":1679},[115,83391,2400],{"emptyLinePlaceholder":42},[115,83393,83394,83396],{"class":117,"line":1693},[115,83395,78615],{"class":1963},[115,83397,15573],{"class":125},[115,83399,83400,83402,83404,83406,83408],{"class":117,"line":1698},[115,83401,54685],{"class":174},[115,83403,51427],{"class":125},[115,83405,700],{"class":174},[115,83407,51482],{"class":121},[115,83409,1291],{"class":125},[115,83411,83412,83414,83416,83418,83420,83422,83424],{"class":117,"line":1727},[115,83413,61850],{"class":174},[115,83415,51427],{"class":125},[115,83417,28122],{"class":174},[115,83419,78670],{"class":174},[115,83421,78673],{"class":174},[115,83423,820],{"class":121},[115,83425,1291],{"class":125},[115,83427,83428,83430,83432,83434],{"class":117,"line":1732},[115,83429,54999],{"class":174},[115,83431,51427],{"class":125},[115,83433,51467],{"class":174},[115,83435,1291],{"class":125},[115,83437,83438,83440,83442,83444,83446,83448,83450],{"class":117,"line":1749},[115,83439,61967],{"class":174},[115,83441,51427],{"class":125},[115,83443,343],{"class":174},[115,83445,51482],{"class":121},[115,83447,51511],{"class":174},[115,83449,62234],{"class":174},[115,83451,1291],{"class":125},[115,83453,83454],{"class":117,"line":1754},[115,83455,2187],{"class":125},[115,83457,83458],{"class":117,"line":1759},[115,83459,2400],{"emptyLinePlaceholder":42},[115,83461,83462,83464],{"class":117,"line":1764},[115,83463,78733],{"class":1963},[115,83465,15573],{"class":125},[115,83467,83468,83470,83472,83474],{"class":117,"line":1778},[115,83469,62015],{"class":174},[115,83471,51427],{"class":125},[115,83473,62020],{"class":174},[115,83475,1291],{"class":125},[115,83477,83478,83480,83482,83484],{"class":117,"line":1783},[115,83479,54874],{"class":174},[115,83481,51427],{"class":125},[115,83483,61808],{"class":174},[115,83485,1291],{"class":125},[115,83487,83488],{"class":117,"line":2577},[115,83489,2187],{"class":125},[115,83491,83492],{"class":117,"line":2591},[115,83493,2400],{"emptyLinePlaceholder":42},[115,83495,83496,83498,83500],{"class":117,"line":2599},[115,83497,78615],{"class":1963},[115,83499,55605],{"class":51290},[115,83501,15573],{"class":125},[115,83503,83504,83506,83508,83510,83512],{"class":117,"line":2604},[115,83505,54761],{"class":174},[115,83507,51427],{"class":125},[115,83509,737],{"class":174},[115,83511,51482],{"class":121},[115,83513,1291],{"class":125},[115,83515,83516,83518,83520,83522,83524],{"class":117,"line":2610},[115,83517,54775],{"class":174},[115,83519,51427],{"class":125},[115,83521,737],{"class":174},[115,83523,51482],{"class":121},[115,83525,1291],{"class":125},[115,83527,83528,83530,83532,83534,83536],{"class":117,"line":2616},[115,83529,61740],{"class":174},[115,83531,51427],{"class":125},[115,83533,444],{"class":174},[115,83535,51482],{"class":121},[115,83537,1291],{"class":125},[115,83539,83540],{"class":117,"line":2621},[115,83541,2187],{"class":125},[115,83543,83544],{"class":117,"line":7949},[115,83545,2400],{"emptyLinePlaceholder":42},[115,83547,83548,83550,83552],{"class":117,"line":7973},[115,83549,78615],{"class":1963},[115,83551,62294],{"class":1963},[115,83553,15573],{"class":125},[115,83555,83556,83558,83560,83562,83564],{"class":117,"line":7978},[115,83557,54761],{"class":174},[115,83559,51427],{"class":125},[115,83561,1722],{"class":174},[115,83563,51482],{"class":121},[115,83565,1291],{"class":125},[115,83567,83568],{"class":117,"line":7984},[115,83569,2187],{"class":125},[115,83571,83572],{"class":117,"line":8011},[115,83573,2400],{"emptyLinePlaceholder":42},[115,83575,83576,83578,83580,83583],{"class":117,"line":8016},[115,83577,78615],{"class":1963},[115,83579,62294],{"class":1963},[115,83581,83582],{"class":1963}," .tag",[115,83584,15573],{"class":125},[115,83586,83587,83589,83591,83593],{"class":117,"line":8022},[115,83588,54999],{"class":174},[115,83590,51427],{"class":125},[115,83592,60859],{"class":174},[115,83594,1291],{"class":125},[115,83596,83597,83599,83601,83603,83605],{"class":117,"line":8034},[115,83598,54685],{"class":174},[115,83600,51427],{"class":125},[115,83602,203],{"class":174},[115,83604,51482],{"class":121},[115,83606,1291],{"class":125},[115,83608,83609,83611,83613,83615,83617],{"class":117,"line":8046},[115,83610,54912],{"class":174},[115,83612,51427],{"class":125},[115,83614,623],{"class":174},[115,83616,51482],{"class":121},[115,83618,1291],{"class":125},[115,83620,83621,83623,83625,83627],{"class":117,"line":8058},[115,83622,57406],{"class":174},[115,83624,51427],{"class":125},[115,83626,62060],{"class":174},[115,83628,1291],{"class":125},[115,83630,83631],{"class":117,"line":9717},[115,83632,2187],{"class":125},[115,83634,83635],{"class":117,"line":9742},[115,83636,2400],{"emptyLinePlaceholder":42},[115,83638,83639,83641,83643],{"class":117,"line":9765},[115,83640,78615],{"class":1963},[115,83642,78907],{"class":1963},[115,83644,31467],{"class":125},[115,83646,83647,83649,83652],{"class":117,"line":9789},[115,83648,78615],{"class":1963},[115,83650,83651],{"class":1963}," .sub-total",[115,83653,15573],{"class":125},[115,83655,83656,83658,83660,83662,83664],{"class":117,"line":9794},[115,83657,54912],{"class":174},[115,83659,51427],{"class":125},[115,83661,775],{"class":174},[115,83663,51482],{"class":121},[115,83665,1291],{"class":125},[115,83667,83668,83670,83672,83674],{"class":117,"line":9799},[115,83669,57406],{"class":174},[115,83671,51427],{"class":125},[115,83673,78930],{"class":174},[115,83675,1291],{"class":125},[115,83677,83678,83680,83682,83684],{"class":117,"line":9804},[115,83679,61827],{"class":174},[115,83681,51427],{"class":125},[115,83683,343],{"class":174},[115,83685,1291],{"class":125},[115,83687,83688],{"class":117,"line":9813},[115,83689,2187],{"class":125},[115,83691,83692],{"class":117,"line":9818},[115,83693,2400],{"emptyLinePlaceholder":42},[115,83695,83696,83698,83700],{"class":117,"line":9824},[115,83697,78615],{"class":1963},[115,83699,78947],{"class":1963},[115,83701,31467],{"class":125},[115,83703,83704,83706,83709],{"class":117,"line":9845},[115,83705,78615],{"class":1963},[115,83707,83708],{"class":1963}," .sub-total::before",[115,83710,31467],{"class":125},[115,83712,83713,83716],{"class":117,"line":9851},[115,83714,83715],{"class":1963},"    .amount::before",[115,83717,15573],{"class":125},[115,83719,83720,83722,83724,83726],{"class":117,"line":9865},[115,83721,78954],{"class":174},[115,83723,51427],{"class":125},[115,83725,78959],{"class":230},[115,83727,1291],{"class":125},[115,83729,83730,83732,83734,83736,83738],{"class":117,"line":9871},[115,83731,54912],{"class":174},[115,83733,51427],{"class":125},[115,83735,623],{"class":174},[115,83737,51482],{"class":121},[115,83739,1291],{"class":125},[115,83741,83742],{"class":117,"line":9898},[115,83743,2187],{"class":125},[115,83745,83746],{"class":117,"line":9907},[115,83747,2400],{"emptyLinePlaceholder":42},[115,83749,83750,83752,83755],{"class":117,"line":9913},[115,83751,78615],{"class":1963},[115,83753,83754],{"class":1963}," .spec",[115,83756,15573],{"class":125},[115,83758,83759,83761,83763,83765],{"class":117,"line":9921},[115,83760,61827],{"class":174},[115,83762,51427],{"class":125},[115,83764,203],{"class":174},[115,83766,1291],{"class":125},[115,83768,83769,83771,83773,83776],{"class":117,"line":9926},[115,83770,57406],{"class":174},[115,83772,51427],{"class":125},[115,83774,83775],{"class":174},"#888",[115,83777,1291],{"class":125},[115,83779,83780,83782,83784,83786,83788],{"class":117,"line":16605},[115,83781,54912],{"class":174},[115,83783,51427],{"class":125},[115,83785,674],{"class":174},[115,83787,51482],{"class":121},[115,83789,1291],{"class":125},[115,83791,83792,83794,83796,83798,83800],{"class":117,"line":16611},[115,83793,61990],{"class":174},[115,83795,51427],{"class":125},[115,83797,825],{"class":174},[115,83799,51482],{"class":121},[115,83801,1291],{"class":125},[115,83803,83804],{"class":117,"line":16634},[115,83805,2187],{"class":125},[115,83807,83808],{"class":117,"line":16640},[115,83809,2400],{"emptyLinePlaceholder":42},[115,83811,83812,83814,83817],{"class":117,"line":16663},[115,83813,78615],{"class":1963},[115,83815,83816],{"class":1963}," .count",[115,83818,15573],{"class":125},[115,83820,83821,83823,83825,83827],{"class":117,"line":16677},[115,83822,61827],{"class":174},[115,83824,51427],{"class":125},[115,83826,343],{"class":174},[115,83828,1291],{"class":125},[115,83830,83831,83833,83835,83838],{"class":117,"line":16697},[115,83832,57406],{"class":174},[115,83834,51427],{"class":125},[115,83836,83837],{"class":174},"#aaa",[115,83839,1291],{"class":125},[115,83841,83842],{"class":117,"line":16703},[115,83843,2187],{"class":125},[115,83845,83846],{"class":117,"line":16714},[115,83847,2400],{"emptyLinePlaceholder":42},[115,83849,83850,83852],{"class":117,"line":16737},[115,83851,72465],{"class":1963},[115,83853,15573],{"class":125},[115,83855,83856,83858,83860,83862,83864],{"class":117,"line":16759},[115,83857,54761],{"class":174},[115,83859,51427],{"class":125},[115,83861,78564],{"class":174},[115,83863,51482],{"class":121},[115,83865,1291],{"class":125},[115,83867,83868,83870,83872,83874,83876],{"class":117,"line":16764},[115,83869,54696],{"class":174},[115,83871,51427],{"class":125},[115,83873,317],{"class":174},[115,83875,51546],{"class":174},[115,83877,1291],{"class":125},[115,83879,83880,83882,83884,83886],{"class":117,"line":16770},[115,83881,54999],{"class":174},[115,83883,51427],{"class":125},[115,83885,51467],{"class":174},[115,83887,1291],{"class":125},[115,83889,83890,83892,83894,83896],{"class":117,"line":16784},[115,83891,55010],{"class":174},[115,83893,51427],{"class":125},[115,83895,51570],{"class":174},[115,83897,1291],{"class":125},[115,83899,83900,83903,83905,83907,83909,83911,83914],{"class":117,"line":16797},[115,83901,83902],{"class":174},"      border-top",[115,83904,51427],{"class":125},[115,83906,343],{"class":174},[115,83908,51482],{"class":121},[115,83910,51511],{"class":174},[115,83912,83913],{"class":174}," #4e4e4e",[115,83915,1291],{"class":125},[115,83917,83918,83920,83922,83924,83926],{"class":117,"line":16802},[115,83919,54685],{"class":174},[115,83921,51427],{"class":125},[115,83923,825],{"class":174},[115,83925,51482],{"class":121},[115,83927,1291],{"class":125},[115,83929,83930],{"class":117,"line":16816},[115,83931,2187],{"class":125},[115,83933,83934],{"class":117,"line":16821},[115,83935,2400],{"emptyLinePlaceholder":42},[115,83937,83938,83940,83943],{"class":117,"line":16827},[115,83939,72465],{"class":1963},[115,83941,83942],{"class":1963}," .amount",[115,83944,15573],{"class":125},[115,83946,83947,83949,83951,83953,83955],{"class":117,"line":16832},[115,83948,54912],{"class":174},[115,83950,51427],{"class":125},[115,83952,775],{"class":174},[115,83954,51482],{"class":121},[115,83956,1291],{"class":125},[115,83958,83959,83961,83963,83965],{"class":117,"line":16846},[115,83960,57406],{"class":174},[115,83962,51427],{"class":125},[115,83964,78930],{"class":174},[115,83966,1291],{"class":125},[115,83968,83969,83971,83973,83975],{"class":117,"line":16851},[115,83970,62324],{"class":174},[115,83972,51427],{"class":125},[115,83974,51479],{"class":174},[115,83976,1291],{"class":125},[115,83978,83979,83981,83983,83985,83987],{"class":117,"line":16856},[115,83980,61740],{"class":174},[115,83982,51427],{"class":125},[115,83984,781],{"class":174},[115,83986,51482],{"class":121},[115,83988,1291],{"class":125},[115,83990,83991],{"class":117,"line":16870},[115,83992,2187],{"class":125},[115,83994,83995,83997,83999],{"class":117,"line":16882},[115,83996,52407],{"class":125},[115,83998,5127],{"class":51290},[115,84000,51297],{"class":125},[115,84002,84003,84005,84007],{"class":117,"line":16887},[115,84004,51775],{"class":125},[115,84006,51324],{"class":51290},[115,84008,51297],{"class":125},[115,84010,84011],{"class":117,"line":16900},[115,84012,2400],{"emptyLinePlaceholder":42},[115,84014,84015,84017,84019],{"class":117,"line":16905},[115,84016,1035],{"class":125},[115,84018,51790],{"class":51290},[115,84020,51297],{"class":125},[115,84022,84023,84025,84027,84029,84031,84033],{"class":117,"line":16910},[115,84024,52134],{"class":125},[115,84026,51601],{"class":51290},[115,84028,53476],{"class":1963},[115,84030,171],{"class":125},[115,84032,62598],{"class":230},[115,84034,51297],{"class":125},[115,84036,84037,84039,84041],{"class":117,"line":16915},[115,84038,52407],{"class":125},[115,84040,51601],{"class":51290},[115,84042,51297],{"class":125},[115,84044,84045,84047,84049,84051,84053,84055],{"class":117,"line":16928},[115,84046,52134],{"class":125},[115,84048,51601],{"class":51290},[115,84050,53476],{"class":1963},[115,84052,171],{"class":125},[115,84054,62570],{"class":230},[115,84056,51297],{"class":125},[115,84058,84059,84061,84063,84066,84068,84070,84072,84075,84077,84079,84081,84083],{"class":117,"line":16933},[115,84060,51331],{"class":125},[115,84062,51601],{"class":51290},[115,84064,84065],{"class":125},">合计：\u003C",[115,84067,115],{"class":51290},[115,84069,53476],{"class":1963},[115,84071,171],{"class":125},[115,84073,84074],{"class":230},"\"amount\"",[115,84076,55304],{"class":125},[115,84078,115],{"class":51290},[115,84080,55304],{"class":125},[115,84082,51601],{"class":51290},[115,84084,51297],{"class":125},[115,84086,84087,84089,84091],{"class":117,"line":32634},[115,84088,52407],{"class":125},[115,84090,51601],{"class":51290},[115,84092,51297],{"class":125},[115,84094,84095,84097,84099],{"class":117,"line":32640},[115,84096,52134],{"class":125},[115,84098,51803],{"class":51290},[115,84100,51297],{"class":125},[115,84102,84103,84105,84107,84109],{"class":117,"line":32646},[115,84104,11222],{"class":121},[115,84106,79367],{"class":174},[115,84108,13565],{"class":121},[115,84110,55437],{"class":125},[115,84112,84113],{"class":117,"line":32652},[115,84114,79376],{"class":125},[115,84116,84117,84119,84121],{"class":117,"line":32658},[115,84118,79381],{"class":125},[115,84120,79384],{"class":230},[115,84122,31467],{"class":125},[115,84124,84125,84127,84129],{"class":117,"line":32669},[115,84126,79391],{"class":125},[115,84128,79394],{"class":230},[115,84130,31467],{"class":125},[115,84132,84133,84135,84138],{"class":117,"line":32675},[115,84134,79401],{"class":125},[115,84136,84137],{"class":174},"289.9",[115,84139,31467],{"class":125},[115,84141,84142,84144,84146],{"class":117,"line":32695},[115,84143,79411],{"class":125},[115,84145,79414],{"class":230},[115,84147,31467],{"class":125},[115,84149,84150,84153,84155],{"class":117,"line":32701},[115,84151,84152],{"class":125},"        count: ",[115,84154,203],{"class":174},[115,84156,31467],{"class":125},[115,84158,84159,84162,84165],{"class":117,"line":32712},[115,84160,84161],{"class":125},"        spec: { color: ",[115,84163,84164],{"class":230},"'白色'",[115,84166,55594],{"class":125},[115,84168,84169],{"class":117,"line":32718},[115,84170,77882],{"class":125},[115,84172,84173],{"class":117,"line":32724},[115,84174,79376],{"class":125},[115,84176,84177,84179,84181],{"class":117,"line":32730},[115,84178,79381],{"class":125},[115,84180,79475],{"class":230},[115,84182,31467],{"class":125},[115,84184,84185,84187,84189],{"class":117,"line":32736},[115,84186,79391],{"class":125},[115,84188,79484],{"class":230},[115,84190,31467],{"class":125},[115,84192,84193,84195,84198],{"class":117,"line":32742},[115,84194,79401],{"class":125},[115,84196,84197],{"class":174},"109.8",[115,84199,31467],{"class":125},[115,84201,84202,84204,84206],{"class":117,"line":32748},[115,84203,79411],{"class":125},[115,84205,79502],{"class":230},[115,84207,31467],{"class":125},[115,84209,84210,84212,84214],{"class":117,"line":32754},[115,84211,84152],{"class":125},[115,84213,197],{"class":174},[115,84215,31467],{"class":125},[115,84217,84218,84221,84223,84225,84227],{"class":117,"line":32774},[115,84219,84220],{"class":125},"        spec: { size: ",[115,84222,81893],{"class":230},[115,84224,55454],{"class":125},[115,84226,81898],{"class":230},[115,84228,55594],{"class":125},[115,84230,84231],{"class":117,"line":32780},[115,84232,77882],{"class":125},[115,84234,84235],{"class":117,"line":32796},[115,84236,79376],{"class":125},[115,84238,84239,84241,84243],{"class":117,"line":32802},[115,84240,79381],{"class":125},[115,84242,79519],{"class":230},[115,84244,31467],{"class":125},[115,84246,84247,84249,84251],{"class":117,"line":32816},[115,84248,79391],{"class":125},[115,84250,79528],{"class":230},[115,84252,31467],{"class":125},[115,84254,84255,84257,84260],{"class":117,"line":32822},[115,84256,79401],{"class":125},[115,84258,84259],{"class":174},"488",[115,84261,31467],{"class":125},[115,84263,84264,84266,84268],{"class":117,"line":32837},[115,84265,79411],{"class":125},[115,84267,79546],{"class":230},[115,84269,31467],{"class":125},[115,84271,84272,84274,84276],{"class":117,"line":32843},[115,84273,84152],{"class":125},[115,84275,343],{"class":174},[115,84277,31467],{"class":125},[115,84279,84280,84282,84285,84288,84291],{"class":117,"line":32852},[115,84281,84161],{"class":125},[115,84283,84284],{"class":230},"'青色'",[115,84286,84287],{"class":125},", sum: ",[115,84289,84290],{"class":230},"'一大四小'",[115,84292,55594],{"class":125},[115,84294,84295],{"class":117,"line":32858},[115,84296,77882],{"class":125},[115,84298,84299],{"class":117,"line":32867},[115,84300,79376],{"class":125},[115,84302,84303,84305,84307],{"class":117,"line":32873},[115,84304,79381],{"class":125},[115,84306,79563],{"class":230},[115,84308,31467],{"class":125},[115,84310,84311,84313,84315],{"class":117,"line":32879},[115,84312,79391],{"class":125},[115,84314,79572],{"class":230},[115,84316,31467],{"class":125},[115,84318,84319,84321,84324],{"class":117,"line":32888},[115,84320,79401],{"class":125},[115,84322,84323],{"class":174},"139",[115,84325,31467],{"class":125},[115,84327,84328,84330,84332],{"class":117,"line":32894},[115,84329,79411],{"class":125},[115,84331,79590],{"class":230},[115,84333,31467],{"class":125},[115,84335,84336,84338,84340],{"class":117,"line":32905},[115,84337,84152],{"class":125},[115,84339,343],{"class":174},[115,84341,31467],{"class":125},[115,84343,84344,84346,84349,84351,84354],{"class":117,"line":32911},[115,84345,84220],{"class":125},[115,84347,84348],{"class":230},"'小号'",[115,84350,55454],{"class":125},[115,84352,84353],{"class":230},"'紫色'",[115,84355,55460],{"class":125},[115,84357,84358,84361],{"class":117,"line":32930},[115,84359,84360],{"class":125},"        gift: ",[115,84362,84363],{"class":230},"'50g茶叶,清洗球'\n",[115,84365,84366],{"class":117,"line":32936},[115,84367,52388],{"class":125},[115,84369,84370],{"class":117,"line":32947},[115,84371,53099],{"class":125},[115,84373,84374],{"class":117,"line":32953},[115,84375,84376],{"class":184},"    \u002F\u002F  1.根据数据渲染页面\n",[115,84378,84379,84381,84383,84385,84387,84389,84391,84393,84395,84397,84399,84401],{"class":117,"line":32973},[115,84380,52397],{"class":125},[115,84382,54389],{"class":1963},[115,84384,126],{"class":125},[115,84386,79891],{"class":230},[115,84388,74239],{"class":125},[115,84390,171],{"class":121},[115,84392,80038],{"class":125},[115,84394,74034],{"class":1963},[115,84396,126],{"class":125},[115,84398,79785],{"class":5217},[115,84400,79788],{"class":121},[115,84402,15573],{"class":125},[115,84404,84405],{"class":117,"line":32989},[115,84406,84407],{"class":184},"      \u002F\u002F 对象解构\n",[115,84409,84410,84412,84414,84416,84418,84420,84422,84425,84427,84429,84431,84434,84436,84439,84441,84443],{"class":117,"line":32995},[115,84411,58218],{"class":121},[115,84413,79797],{"class":125},[115,84415,79810],{"class":174},[115,84417,12436],{"class":125},[115,84419,79800],{"class":174},[115,84421,12436],{"class":125},[115,84423,84424],{"class":174},"count",[115,84426,12436],{"class":125},[115,84428,79805],{"class":174},[115,84430,12436],{"class":125},[115,84432,84433],{"class":174},"spec",[115,84435,12436],{"class":125},[115,84437,84438],{"class":174},"gift",[115,84440,79813],{"class":125},[115,84442,171],{"class":121},[115,84444,79818],{"class":125},[115,84446,84447],{"class":117,"line":33009},[115,84448,84449],{"class":184},"      \u002F\u002F 规格文字模块处理\n",[115,84451,84452,84454,84457,84459,84461,84463,84465,84467,84469,84471],{"class":117,"line":33015},[115,84453,58218],{"class":121},[115,84455,84456],{"class":174}," text",[115,84458,13565],{"class":121},[115,84460,81928],{"class":125},[115,84462,81931],{"class":1963},[115,84464,81934],{"class":125},[115,84466,74213],{"class":1963},[115,84468,126],{"class":125},[115,84470,81941],{"class":230},[115,84472,132],{"class":125},[115,84474,84475],{"class":117,"line":33021},[115,84476,84477],{"class":184},"      \u002F\u002F 处理赠品模块\n",[115,84479,84480,84482,84484,84486,84489,84491,84493,84495,84497,84500,84502,84504,84506,84508,84510,84513,84515,84518,84520,84522,84524,84526,84528,84530],{"class":117,"line":33032},[115,84481,58218],{"class":121},[115,84483,73909],{"class":174},[115,84485,13565],{"class":121},[115,84487,84488],{"class":125}," gift ",[115,84490,1111],{"class":121},[115,84492,83102],{"class":125},[115,84494,83105],{"class":1963},[115,84496,126],{"class":125},[115,84498,84499],{"class":230},"','",[115,84501,30827],{"class":125},[115,84503,74034],{"class":1963},[115,84505,126],{"class":125},[115,84507,79785],{"class":5217},[115,84509,79788],{"class":121},[115,84511,84512],{"class":230}," `\u003Cspan class=\"tag\">【赠品】${",[115,84514,79785],{"class":125},[115,84516,84517],{"class":230},"}\u003C\u002Fspan>`",[115,84519,30827],{"class":125},[115,84521,74213],{"class":1963},[115,84523,126],{"class":125},[115,84525,74218],{"class":230},[115,84527,13715],{"class":125},[115,84529,984],{"class":121},[115,84531,70094],{"class":230},[115,84533,84534],{"class":117,"line":33038},[115,84535,84536],{"class":184},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[115,84538,84539,84541,84544,84546,84549,84551,84553,84555,84558,84560,84562,84564,84567,84569,84571],{"class":117,"line":33044},[115,84540,58218],{"class":121},[115,84542,84543],{"class":174}," subtotal",[115,84545,13565],{"class":121},[115,84547,84548],{"class":125}," ((price ",[115,84550,580],{"class":121},[115,84552,5755],{"class":174},[115,84554,6519],{"class":121},[115,84556,84557],{"class":125}," count) ",[115,84559,709],{"class":121},[115,84561,5755],{"class":174},[115,84563,30827],{"class":125},[115,84565,84566],{"class":1963},"toFixed",[115,84568,126],{"class":125},[115,84570,203],{"class":174},[115,84572,132],{"class":125},[115,84574,84575],{"class":117,"line":33054},[115,84576,2400],{"emptyLinePlaceholder":42},[115,84578,84579,84581],{"class":117,"line":33060},[115,84580,73972],{"class":121},[115,84582,70158],{"class":230},[115,84584,84585],{"class":117,"line":33071},[115,84586,84587],{"class":230},"        \u003Cdiv class=\"item\">\n",[115,84589,84590,84593,84595],{"class":117,"line":33077},[115,84591,84592],{"class":230},"          \u003Cimg src=\"${",[115,84594,79810],{"class":125},[115,84596,79842],{"class":230},[115,84598,84599,84602,84604,84607,84609],{"class":117,"line":33087},[115,84600,84601],{"class":230},"          \u003Cp class=\"name\">${",[115,84603,79800],{"class":125},[115,84605,84606],{"class":230},"}${",[115,84608,1300],{"class":125},[115,84610,79852],{"class":230},[115,84612,84613,84616,84618],{"class":117,"line":33092},[115,84614,84615],{"class":230},"          \u003Cp class=\"spec\">${",[115,84617,5188],{"class":125},[115,84619,79852],{"class":230},[115,84621,84622,84625,84627,84629,84631,84633,84635,84637],{"class":117,"line":33098},[115,84623,84624],{"class":230},"          \u003Cp class=\"price\">${",[115,84626,79805],{"class":125},[115,84628,683],{"class":230},[115,84630,84566],{"class":1963},[115,84632,126],{"class":230},[115,84634,203],{"class":174},[115,84636,554],{"class":230},[115,84638,79852],{"class":230},[115,84640,84641,84644,84646],{"class":117,"line":33147},[115,84642,84643],{"class":230},"          \u003Cp class=\"count\">x${",[115,84645,84424],{"class":125},[115,84647,79852],{"class":230},[115,84649,84650,84653,84656],{"class":117,"line":33194},[115,84651,84652],{"class":230},"          \u003Cp class=\"sub-total\">${",[115,84654,84655],{"class":125},"subtotal",[115,84657,79852],{"class":230},[115,84659,84660],{"class":117,"line":33199},[115,84661,84662],{"class":230},"        \u003C\u002Fdiv> \n",[115,84664,84665],{"class":117,"line":33205},[115,84666,84667],{"class":230},"             `\n",[115,84669,84670,84673,84675,84677,84679],{"class":117,"line":33224},[115,84671,84672],{"class":125},"    }).",[115,84674,74213],{"class":1963},[115,84676,126],{"class":125},[115,84678,74218],{"class":230},[115,84680,132],{"class":125},[115,84682,84683],{"class":117,"line":33230},[115,84684,84685],{"class":184},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[115,84687,84688,84690,84692,84694,84696,84699,84701,84704,84706,84708,84710,84713,84716,84718,84721,84723,84725,84727,84730,84732,84734,84736,84738],{"class":117,"line":33250},[115,84689,11222],{"class":121},[115,84691,62775],{"class":174},[115,84693,13565],{"class":121},[115,84695,80038],{"class":125},[115,84697,84698],{"class":1963},"reduce",[115,84700,2376],{"class":125},[115,84702,84703],{"class":5217},"prev",[115,84705,12436],{"class":125},[115,84707,79785],{"class":5217},[115,84709,13715],{"class":125},[115,84711,84712],{"class":121},"=>",[115,84714,84715],{"class":125}," prev ",[115,84717,606],{"class":121},[115,84719,84720],{"class":125}," (item.price ",[115,84722,580],{"class":121},[115,84724,5755],{"class":174},[115,84726,6519],{"class":121},[115,84728,84729],{"class":125}," item.count) ",[115,84731,709],{"class":121},[115,84733,5755],{"class":174},[115,84735,12436],{"class":125},[115,84737,317],{"class":174},[115,84739,132],{"class":125},[115,84741,84742,84744,84746,84748,84751,84753,84755,84758,84760,84762,84764],{"class":117,"line":33256},[115,84743,52397],{"class":125},[115,84745,54389],{"class":1963},[115,84747,126],{"class":125},[115,84749,84750],{"class":230},"'.amount'",[115,84752,74239],{"class":125},[115,84754,171],{"class":121},[115,84756,84757],{"class":125}," total.",[115,84759,84566],{"class":1963},[115,84761,126],{"class":125},[115,84763,203],{"class":174},[115,84765,132],{"class":125},[115,84767,84768,84770,84772],{"class":117,"line":33262},[115,84769,52407],{"class":125},[115,84771,51803],{"class":51290},[115,84773,51297],{"class":125},[115,84775,84776,84778,84780],{"class":117,"line":33272},[115,84777,51775],{"class":125},[115,84779,51790],{"class":51290},[115,84781,51297],{"class":125},[115,84783,84784],{"class":117,"line":33277},[115,84785,2400],{"emptyLinePlaceholder":42},[115,84787,84788,84790,84792],{"class":117,"line":33283},[115,84789,51775],{"class":125},[115,84791,50625],{"class":51290},[115,84793,51297],{"class":125},[57,84795,84797],{"id":84796},"_411-编程思想","4.11 编程思想",[86,84799,84801],{"id":84800},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84803,84804,84807],{},[275,84805,84806],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84809,84810],{},"调用就可以了",[14,84812,84813],{},[20,84814],{"alt":22,"src":84815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[86,84817,84819],{"id":84818},"_4112-面向对象","4.11.2 面向对象",[14,84821,84822],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84824,84825],{},[20,84826],{"alt":22,"src":84827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84829,84830],{},"面向对象的特性：",[1132,84832,84833,84836,84839],{},[72,84834,84835],{},"封装性",[72,84837,84838],{},"继承性",[72,84840,84841],{},"多态性",[86,84843,84845],{"id":84844},"_4113-两者比较","4.11.3 两者比较",[14,84847,84848],{},[20,84849],{"alt":22,"src":84850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[57,84852,84854],{"id":84853},"_412-构造函数回顾","4.12 构造函数回顾",[14,84856,84857],{},[20,84858],{"alt":22,"src":84859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84861,84862],{},[20,84863],{"alt":22,"src":84864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84866,84867],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84869,84870],{},[20,84871],{"alt":22,"src":84872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[57,84874,84876],{"id":84875},"_413-原型","4.13 原型",[86,84878,84880],{"id":84879},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84882,84883],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84885,84886],{},[20,84887],{"alt":22,"src":84888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84890,84891],{},[20,84892],{"alt":22,"src":84893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84895,84896],{},"原型是构造函数的属性，它也是一个对象",[14,84898,84899],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84901,84902],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[106,84904,84906],{"className":53057,"code":84905,"language":53059,"meta":22,"style":22},"\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",[112,84907,84908,84916,84921,84929,84934,84939,84944,84949,84954,84958,84962,84966,84971,84976,84980,84985,84990,84995,85000,85005,85009,85017],{"__ignoreMap":22},[115,84909,84910,84912,84914],{"class":117,"line":118},[115,84911,1035],{"class":125},[115,84913,51790],{"class":51290},[115,84915,51297],{"class":125},[115,84917,84918],{"class":117,"line":37},[115,84919,84920],{"class":184},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[115,84922,84923,84925,84927],{"class":117,"line":1180},[115,84924,52134],{"class":125},[115,84926,51803],{"class":51290},[115,84928,51297],{"class":125},[115,84930,84931],{"class":117,"line":1195},[115,84932,84933],{"class":125},"    function Star(uname, age) {\n",[115,84935,84936],{"class":117,"line":1201},[115,84937,84938],{"class":125},"      this.uname = uname,\n",[115,84940,84941],{"class":117,"line":1215},[115,84942,84943],{"class":125},"        this.age = age\n",[115,84945,84946],{"class":117,"line":1221},[115,84947,84948],{"class":125},"      \u002F\u002F this.sing = function () {\n",[115,84950,84951],{"class":117,"line":1312},[115,84952,84953],{"class":125},"      \u002F\u002F   console.log('唱歌')\n",[115,84955,84956],{"class":117,"line":1318},[115,84957,2400],{"emptyLinePlaceholder":42},[115,84959,84960],{"class":117,"line":1330},[115,84961,60027],{"class":125},[115,84963,84964],{"class":117,"line":1612},[115,84965,2187],{"class":125},[115,84967,84968],{"class":117,"line":1617},[115,84969,84970],{"class":125},"    Star.prototype.sing = function () {\n",[115,84972,84973],{"class":117,"line":1623},[115,84974,84975],{"class":125},"      console.log('唱歌')\n",[115,84977,84978],{"class":117,"line":1628},[115,84979,2187],{"class":125},[115,84981,84982],{"class":117,"line":1642},[115,84983,84984],{"class":125},"    \u002F\u002F console.dir(Star.prototype)\n",[115,84986,84987],{"class":117,"line":1647},[115,84988,84989],{"class":125},"    const pink = new Star('pink', 18)\n",[115,84991,84992],{"class":117,"line":1653},[115,84993,84994],{"class":125},"    const red = new Star('red', 20)\n",[115,84996,84997],{"class":117,"line":1674},[115,84998,84999],{"class":125},"    pink.sing()\n",[115,85001,85002],{"class":117,"line":1679},[115,85003,85004],{"class":125},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[115,85006,85007],{"class":117,"line":1693},[115,85008,2400],{"emptyLinePlaceholder":42},[115,85010,85011,85013,85015],{"class":117,"line":1698},[115,85012,52407],{"class":125},[115,85014,51803],{"class":51290},[115,85016,51297],{"class":125},[115,85018,85019,85021,85023],{"class":117,"line":1727},[115,85020,51775],{"class":125},[115,85022,51790],{"class":51290},[115,85024,51297],{"class":125},[14,85026,85027],{},[20,85028],{"alt":22,"src":85029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[106,85031,85033],{"className":53057,"code":85032,"language":53059,"meta":22,"style":22},"\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",[112,85034,85035,85043,85051,85056,85061,85066,85071,85075,85080,85085,85090,85094,85099,85103,85107,85112,85116,85124],{"__ignoreMap":22},[115,85036,85037,85039,85041],{"class":117,"line":118},[115,85038,1035],{"class":125},[115,85040,51790],{"class":51290},[115,85042,51297],{"class":125},[115,85044,85045,85047,85049],{"class":117,"line":37},[115,85046,52134],{"class":125},[115,85048,51803],{"class":51290},[115,85050,51297],{"class":125},[115,85052,85053],{"class":117,"line":1180},[115,85054,85055],{"class":125},"    let that\n",[115,85057,85058],{"class":117,"line":1195},[115,85059,85060],{"class":125},"    function Star(uname) {\n",[115,85062,85063],{"class":117,"line":1201},[115,85064,85065],{"class":125},"      this.uname = uname\n",[115,85067,85068],{"class":117,"line":1215},[115,85069,85070],{"class":125},"      that = this\n",[115,85072,85073],{"class":117,"line":1221},[115,85074,2187],{"class":125},[115,85076,85077],{"class":117,"line":1312},[115,85078,85079],{"class":125},"    \u002F\u002F 实例对象是 ldh\n",[115,85081,85082],{"class":117,"line":1318},[115,85083,85084],{"class":125},"    const ldh = new Star('刘德华')\n",[115,85086,85087],{"class":117,"line":1330},[115,85088,85089],{"class":125},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[115,85091,85092],{"class":117,"line":1612},[115,85093,2400],{"emptyLinePlaceholder":42},[115,85095,85096],{"class":117,"line":1617},[115,85097,85098],{"class":125},"    Star.sing = function () {\n",[115,85100,85101],{"class":117,"line":1623},[115,85102,84975],{"class":125},[115,85104,85105],{"class":117,"line":1628},[115,85106,2187],{"class":125},[115,85108,85109],{"class":117,"line":1642},[115,85110,85111],{"class":125},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[115,85113,85114],{"class":117,"line":1647},[115,85115,2400],{"emptyLinePlaceholder":42},[115,85117,85118,85120,85122],{"class":117,"line":1653},[115,85119,52407],{"class":125},[115,85121,51803],{"class":51290},[115,85123,51297],{"class":125},[115,85125,85126,85128,85130],{"class":117,"line":1674},[115,85127,51775],{"class":125},[115,85129,51790],{"class":51290},[115,85131,51297],{"class":125},[14,85133,85134],{},"构造函数的this指向的是实例对象；",[14,85136,85137],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[86,85139,85141],{"id":85140},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85143,85144],{},[20,85145],{"alt":22,"src":85146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[106,85148,85150],{"className":53057,"code":85149,"language":53059,"meta":22,"style":22},"\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",[112,85151,85152,85160,85168,85173,85178,85183,85188,85193,85198,85203,85208,85213,85218,85222,85227,85232,85237,85242,85246,85251,85256,85261,85266,85270,85275,85280,85285,85290,85294,85299,85303,85311],{"__ignoreMap":22},[115,85153,85154,85156,85158],{"class":117,"line":118},[115,85155,1035],{"class":125},[115,85157,51790],{"class":51290},[115,85159,51297],{"class":125},[115,85161,85162,85164,85166],{"class":117,"line":37},[115,85163,52134],{"class":125},[115,85165,51803],{"class":51290},[115,85167,51297],{"class":125},[115,85169,85170],{"class":117,"line":1180},[115,85171,85172],{"class":125},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[115,85174,85175],{"class":117,"line":1195},[115,85176,85177],{"class":125},"    const arr = [1, 2, 3]\n",[115,85179,85180],{"class":117,"line":1201},[115,85181,85182],{"class":125},"    \u002F\u002F 自己定义数组的扩展方法\n",[115,85184,85185],{"class":117,"line":1215},[115,85186,85187],{"class":125},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[115,85189,85190],{"class":117,"line":1221},[115,85191,85192],{"class":125},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[115,85194,85195],{"class":117,"line":1312},[115,85196,85197],{"class":125},"    \u002F\u002F ①.最大值\n",[115,85199,85200],{"class":117,"line":1318},[115,85201,85202],{"class":125},"    Array.prototype.max = function () {\n",[115,85204,85205],{"class":117,"line":1330},[115,85206,85207],{"class":125},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[115,85209,85210],{"class":117,"line":1612},[115,85211,85212],{"class":125},"      return Math.max(...this)\n",[115,85214,85215],{"class":117,"line":1617},[115,85216,85217],{"class":125},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[115,85219,85220],{"class":117,"line":1623},[115,85221,2187],{"class":125},[115,85223,85224],{"class":117,"line":1628},[115,85225,85226],{"class":125},"    console.log(arr.max())\n",[115,85228,85229],{"class":117,"line":1642},[115,85230,85231],{"class":125},"    \u002F\u002F ②最小值\n",[115,85233,85234],{"class":117,"line":1647},[115,85235,85236],{"class":125},"    Array.prototype.min = function () {\n",[115,85238,85239],{"class":117,"line":1653},[115,85240,85241],{"class":125},"      return Math.min(...this)\n",[115,85243,85244],{"class":117,"line":1674},[115,85245,2187],{"class":125},[115,85247,85248],{"class":117,"line":1679},[115,85249,85250],{"class":125},"    console.log(arr.min())\n",[115,85252,85253],{"class":117,"line":1693},[115,85254,85255],{"class":125},"    \u002F\u002F③求和\n",[115,85257,85258],{"class":117,"line":1698},[115,85259,85260],{"class":125},"    Array.prototype.sum = function () {\n",[115,85262,85263],{"class":117,"line":1727},[115,85264,85265],{"class":125},"      return this.reduce((prev, current) => prev + current, 0)\n",[115,85267,85268],{"class":117,"line":1732},[115,85269,2187],{"class":125},[115,85271,85272],{"class":117,"line":1749},[115,85273,85274],{"class":125},"    console.log(arr.sum())\n",[115,85276,85277],{"class":117,"line":1754},[115,85278,85279],{"class":125},"    \u002F\u002F ③排序\n",[115,85281,85282],{"class":117,"line":1759},[115,85283,85284],{"class":125},"    Array.prototype.rever = function () {\n",[115,85286,85287],{"class":117,"line":1764},[115,85288,85289],{"class":125},"      return this.reverse()\n",[115,85291,85292],{"class":117,"line":1778},[115,85293,2187],{"class":125},[115,85295,85296],{"class":117,"line":1783},[115,85297,85298],{"class":125},"    console.log(arr.rever())\n",[115,85300,85301],{"class":117,"line":2577},[115,85302,2400],{"emptyLinePlaceholder":42},[115,85304,85305,85307,85309],{"class":117,"line":2591},[115,85306,52407],{"class":125},[115,85308,51803],{"class":51290},[115,85310,51297],{"class":125},[115,85312,85313,85315,85317],{"class":117,"line":2599},[115,85314,51775],{"class":125},[115,85316,51790],{"class":51290},[115,85318,51297],{"class":125},[14,85320,85321],{},[20,85322],{"alt":22,"src":85323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[86,85325,85327],{"id":85326},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85329,85330],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85332,85333],{},[20,85334],{"alt":22,"src":85335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[106,85337,85339],{"className":53057,"code":85338,"language":53059,"meta":22,"style":22},"\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",[112,85340,85341,85349,85357,85362,85367,85371,85376,85381,85386,85394],{"__ignoreMap":22},[115,85342,85343,85345,85347],{"class":117,"line":118},[115,85344,1035],{"class":125},[115,85346,51790],{"class":51290},[115,85348,51297],{"class":125},[115,85350,85351,85353,85355],{"class":117,"line":37},[115,85352,52134],{"class":125},[115,85354,51803],{"class":51290},[115,85356,51297],{"class":125},[115,85358,85359],{"class":117,"line":1180},[115,85360,85361],{"class":125},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[115,85363,85364],{"class":117,"line":1195},[115,85365,85366],{"class":125},"    function Star() {\n",[115,85368,85369],{"class":117,"line":1201},[115,85370,2187],{"class":125},[115,85372,85373],{"class":117,"line":1215},[115,85374,85375],{"class":125},"    const ldh = new Star()\n",[115,85377,85378],{"class":117,"line":1221},[115,85379,85380],{"class":125},"    console.log(Star.prototype)\n",[115,85382,85383],{"class":117,"line":1312},[115,85384,85385],{"class":125},"    console.log(Star.prototype.constructor === Star)\n",[115,85387,85388,85390,85392],{"class":117,"line":1318},[115,85389,52407],{"class":125},[115,85391,51803],{"class":51290},[115,85393,51297],{"class":125},[115,85395,85396,85398,85400],{"class":117,"line":1330},[115,85397,51775],{"class":125},[115,85399,51790],{"class":51290},[115,85401,51297],{"class":125},[14,85403,85404],{},[20,85405],{"alt":22,"src":85406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85408,85409],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[106,85411,85413],{"className":53057,"code":85412,"language":53059,"meta":22,"style":22},"  \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",[112,85414,85415,85423,85427,85431,85435,85440,85445,85450,85454,85459,85464,85469,85474,85479,85484,85488,85492,85497,85502,85507,85511,85516,85521,85525,85529,85533],{"__ignoreMap":22},[115,85416,85417,85419,85421],{"class":117,"line":118},[115,85418,52134],{"class":125},[115,85420,51803],{"class":51290},[115,85422,51297],{"class":125},[115,85424,85425],{"class":117,"line":37},[115,85426,85361],{"class":125},[115,85428,85429],{"class":117,"line":1180},[115,85430,85366],{"class":125},[115,85432,85433],{"class":117,"line":1195},[115,85434,2187],{"class":125},[115,85436,85437],{"class":117,"line":1201},[115,85438,85439],{"class":125},"    \u002F\u002F const ldh = new Star()\n",[115,85441,85442],{"class":117,"line":1215},[115,85443,85444],{"class":125},"    \u002F\u002F console.log(Star.prototype)\n",[115,85446,85447],{"class":117,"line":1221},[115,85448,85449],{"class":125},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[115,85451,85452],{"class":117,"line":1312},[115,85453,2400],{"emptyLinePlaceholder":42},[115,85455,85456],{"class":117,"line":1318},[115,85457,85458],{"class":125},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[115,85460,85461],{"class":117,"line":1330},[115,85462,85463],{"class":125},"    \u002F\u002F Star.prototype.sing = function () {\n",[115,85465,85466],{"class":117,"line":1612},[115,85467,85468],{"class":125},"    \u002F\u002F   console.log('唱歌')\n",[115,85470,85471],{"class":117,"line":1617},[115,85472,85473],{"class":125},"    \u002F\u002F }\n",[115,85475,85476],{"class":117,"line":1623},[115,85477,85478],{"class":125},"    \u002F\u002F Star.prototype.dance = function () {\n",[115,85480,85481],{"class":117,"line":1628},[115,85482,85483],{"class":125},"    \u002F\u002F   console.log('跳舞')\n",[115,85485,85486],{"class":117,"line":1642},[115,85487,85473],{"class":125},[115,85489,85490],{"class":117,"line":1647},[115,85491,85380],{"class":125},[115,85493,85494],{"class":117,"line":1653},[115,85495,85496],{"class":125},"    Star.prototype = {\n",[115,85498,85499],{"class":117,"line":1674},[115,85500,85501],{"class":125},"      sing: function () {\n",[115,85503,85504],{"class":117,"line":1679},[115,85505,85506],{"class":125},"        console.log('唱歌')\n",[115,85508,85509],{"class":117,"line":1693},[115,85510,77882],{"class":125},[115,85512,85513],{"class":117,"line":1698},[115,85514,85515],{"class":125},"      dance: function () {\n",[115,85517,85518],{"class":117,"line":1727},[115,85519,85520],{"class":125},"        console.log('跳舞')\n",[115,85522,85523],{"class":117,"line":1732},[115,85524,52388],{"class":125},[115,85526,85527],{"class":117,"line":1749},[115,85528,2187],{"class":125},[115,85530,85531],{"class":117,"line":1754},[115,85532,85380],{"class":125},[115,85534,85535,85537,85539],{"class":117,"line":1759},[115,85536,52407],{"class":125},[115,85538,51803],{"class":51290},[115,85540,51297],{"class":125},[14,85542,85543],{},"进行输出结果后会发现：",[14,85545,85546],{},[20,85547],{"alt":22,"src":85548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85550,85551],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85553,85554],{},"所以，要重新指回创造这个原型对象的构造函数",[106,85556,85558],{"className":71203,"code":85557,"language":71205,"meta":22,"style":22},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[112,85559,85560,85574,85579,85584,85595,85608,85613,85624,85638,85642],{"__ignoreMap":22},[115,85561,85562,85565,85567,85570,85572],{"class":117,"line":118},[115,85563,85564],{"class":174},"Star",[115,85566,683],{"class":125},[115,85568,85569],{"class":174},"prototype",[115,85571,13565],{"class":121},[115,85573,15573],{"class":125},[115,85575,85576],{"class":117,"line":37},[115,85577,85578],{"class":184},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[115,85580,85581],{"class":117,"line":1180},[115,85582,85583],{"class":125},"  constructor: Star,\n",[115,85585,85586,85589,85591,85593],{"class":117,"line":1195},[115,85587,85588],{"class":1963},"  sing",[115,85590,51427],{"class":125},[115,85592,54439],{"class":121},[115,85594,54442],{"class":125},[115,85596,85597,85599,85601,85603,85606],{"class":117,"line":1201},[115,85598,73743],{"class":125},[115,85600,58237],{"class":1963},[115,85602,126],{"class":125},[115,85604,85605],{"class":230},"'唱歌'",[115,85607,132],{"class":125},[115,85609,85610],{"class":117,"line":1215},[115,85611,85612],{"class":125},"   },\n",[115,85614,85615,85618,85620,85622],{"class":117,"line":1221},[115,85616,85617],{"class":1963},"   dance",[115,85619,51427],{"class":125},[115,85621,54439],{"class":121},[115,85623,54442],{"class":125},[115,85625,85626,85629,85631,85633,85636],{"class":117,"line":1312},[115,85627,85628],{"class":125},"     console.",[115,85630,58237],{"class":1963},[115,85632,126],{"class":125},[115,85634,85635],{"class":230},"'跳舞'",[115,85637,132],{"class":125},[115,85639,85640],{"class":117,"line":1318},[115,85641,4309],{"class":125},[115,85643,85644],{"class":117,"line":1330},[115,85645,1565],{"class":125},[14,85647,85648],{},[20,85649],{"alt":22,"src":85650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85652,85653],{},"总结1：",[14,85655,85656],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85658,85659],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85661,85662],{},"constructor指的是他的来源",[14,85664,85665],{},[20,85666],{"alt":22,"src":85667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85669,85670],{},[20,85671],{"alt":22,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85674,85675],{},"总结2：",[14,85677,85678],{},[20,85679],{"alt":22,"src":85680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85682,85683],{},[20,85684],{"alt":22,"src":85685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85687,85688],{},[20,85689],{"alt":22,"src":85690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[86,85692,85694],{"id":85693},"_4134-对象原型","4.13.4 对象原型",[14,85696,85697],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85699,85700],{},"对象原型就是__proto__这个属性",[14,85702,85703],{},[20,85704],{"alt":22,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85707,85708],{},[20,85709],{"alt":22,"src":85710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85712,85713],{},[20,85714],{"alt":22,"src":85715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85717,85718],{},[20,85719],{"alt":22,"src":85720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[106,85722,85724],{"className":53057,"code":85723,"language":53059,"meta":22,"style":22},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[112,85725,85726,85734,85742,85746,85750,85754,85759,85767],{"__ignoreMap":22},[115,85727,85728,85730,85732],{"class":117,"line":118},[115,85729,1035],{"class":125},[115,85731,51790],{"class":51290},[115,85733,51297],{"class":125},[115,85735,85736,85738,85740],{"class":117,"line":37},[115,85737,52134],{"class":125},[115,85739,51803],{"class":51290},[115,85741,51297],{"class":125},[115,85743,85744],{"class":117,"line":1180},[115,85745,85366],{"class":125},[115,85747,85748],{"class":117,"line":1195},[115,85749,2187],{"class":125},[115,85751,85752],{"class":117,"line":1201},[115,85753,85375],{"class":125},[115,85755,85756],{"class":117,"line":1215},[115,85757,85758],{"class":125},"    console.log(ldh)\n",[115,85760,85761,85763,85765],{"class":117,"line":1221},[115,85762,52407],{"class":125},[115,85764,51803],{"class":51290},[115,85766,51297],{"class":125},[115,85768,85769,85771,85773],{"class":117,"line":1312},[115,85770,51775],{"class":125},[115,85772,51790],{"class":51290},[115,85774,51297],{"class":125},[14,85776,85777],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85779,85780],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85782,85783],{},[20,85784],{"alt":22,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85787,85788],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85790,85791],{},"对象原型指向原型对象",[14,85793,85794],{},[20,85795],{"alt":22,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85798,85799],{},[20,85800],{"alt":22,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85803,85804],{},[20,85805],{"alt":22,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[86,85808,85810],{"id":85809},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85812,85813],{},[20,85814],{"alt":22,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[69,85817,85818,85821,85824,85827],{},[72,85819,85820],{},"构造函数通过new的形式实例化得到实例对象",[72,85822,85823],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[72,85825,85826],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[72,85828,85829],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85831,85832],{},[20,85833],{"alt":22,"src":85834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85836,85837],{},"题目梳理：",[14,85839,85840],{},[20,85841],{"alt":22,"src":85842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[86,85844,85846],{"id":85845},"_4136-原型继承","4.13.6 原型继承",[14,85848,85849],{},[20,85850],{"alt":22,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85853,85854],{},[20,85855],{"alt":22,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85858,85859],{},[20,85860],{"alt":22,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85863,85864],{},[20,85865],{"alt":22,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85868,85869],{},[20,85870],{"alt":22,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85873,85874],{},[20,85875],{"alt":22,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85878,85879],{},[20,85880],{"alt":22,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85883,85884],{},[20,85885],{"alt":22,"src":85886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85888,85889],{},"回顾：构造函数每次new得到对象都是不同的",[86,85891,85893],{"id":85892},"_4137-原型链","4.13.7 原型链",[14,85895,85896],{},[20,85897],{"alt":22,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85900,85901],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85903,85904],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85906,85907],{},"大哥是Object",[14,85909,85910],{},[20,85911],{"alt":22,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85914,85915],{},[20,85916],{"alt":22,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85919,85920],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85922,85923],{},"万物皆对象",[86,85925,85927],{"id":85926},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85929,85930],{},"模态框",[14,85932,85933],{},"以后遇见这个效果直接使用这个就行",[14,85935,85936],{},[20,85937],{"alt":22,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85940,85941],{},[20,85942],{"alt":22,"src":85943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85945,85946],{},[20,85947],{"alt":22,"src":85948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85950,85951],{},[20,85952],{"alt":22,"src":85953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85955,85956],{},"补充知识点：",[69,85958,85959],{},[72,85960,85961],{},"append()",[14,85963,85964],{},[20,85965],{"alt":22,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[106,85968,85970],{"className":50623,"code":85969,"language":50625,"meta":22,"style":22},"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",[112,85971,85972,85977,85982,85987,85991,85995,85999,86004,86009,86014,86018],{"__ignoreMap":22},[115,85973,85974],{"class":117,"line":118},[115,85975,85976],{"class":125},"append(param1)\n",[115,85978,85979],{"class":117,"line":37},[115,85980,85981],{"class":125},"append(param1, param2)\n",[115,85983,85984],{"class":117,"line":1180},[115,85985,85986],{"class":125},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[115,85988,85989],{"class":117,"line":1195},[115,85990,2400],{"emptyLinePlaceholder":42},[115,85992,85993],{"class":117,"line":1201},[115,85994,2400],{"emptyLinePlaceholder":42},[115,85996,85997],{"class":117,"line":1215},[115,85998,2400],{"emptyLinePlaceholder":42},[115,86000,86001],{"class":117,"line":1221},[115,86002,86003],{"class":125},"let div = document.createElement(\"div\");\n",[115,86005,86006],{"class":117,"line":1312},[115,86007,86008],{"class":125},"let p = document.createElement(\"p\");\n",[115,86010,86011],{"class":117,"line":1318},[115,86012,86013],{"class":125},"div.append(p);\n",[115,86015,86016],{"class":117,"line":1330},[115,86017,2400],{"emptyLinePlaceholder":42},[115,86019,86020,86023,86025],{"class":117,"line":1612},[115,86021,86022],{"class":125},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[115,86024,14],{"class":51290},[115,86026,86027],{"class":125},"> ]\n",[69,86029,86030],{"start":37},[72,86031,86032],{},"remove()",[14,86034,86035],{},"自己删自己",[14,86037,86038],{},[20,86039],{"alt":22,"src":86040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[106,86042,86044],{"className":50623,"code":86043,"language":50625,"meta":22,"style":22},"\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",[112,86045,86046,86056,86070,86074,86082,86096,86116,86128,86136,86143,86155,86168,86203,86215,86226,86238,86250,86262,86289,86299,86303,86307,86316,86328,86342,86352,86364,86368,86372,86382,86393,86403,86413,86426,86439,86449,86453,86457,86466,86476,86488,86492,86496,86505,86515,86525,86537,86541,86545,86555,86571,86582,86592,86602,86614,86626,86638,86642,86646,86659,86670,86674,86682,86690,86694,86702,86722,86742,86750,86755,86781,86786,86791,86810,86815,86827,86832,86843,86853,86863,86868,86873,86877,86882,86887,86892,86912,86917,86937,86942,86956,86961,86966,86971,86987,86991,86996,87025,87030,87035,87040,87051,87055,87059,87063,87068,87093,87098,87123,87128,87137,87141,87146,87171,87175,87200,87204,87213,87217,87222,87240,87250,87254,87262,87270,87274],{"__ignoreMap":22},[115,86047,86048,86050,86052,86054],{"class":117,"line":118},[115,86049,51287],{"class":125},[115,86051,51291],{"class":51290},[115,86053,51294],{"class":1963},[115,86055,51297],{"class":125},[115,86057,86058,86060,86062,86064,86066,86068],{"class":117,"line":37},[115,86059,1035],{"class":125},[115,86061,50625],{"class":51290},[115,86063,51306],{"class":1963},[115,86065,171],{"class":125},[115,86067,51311],{"class":230},[115,86069,51297],{"class":125},[115,86071,86072],{"class":117,"line":1180},[115,86073,2400],{"emptyLinePlaceholder":42},[115,86075,86076,86078,86080],{"class":117,"line":1195},[115,86077,1035],{"class":125},[115,86079,51324],{"class":51290},[115,86081,51297],{"class":125},[115,86083,86084,86086,86088,86090,86092,86094],{"class":117,"line":1201},[115,86085,52134],{"class":125},[115,86087,51334],{"class":51290},[115,86089,51337],{"class":1963},[115,86091,171],{"class":125},[115,86093,51342],{"class":230},[115,86095,51297],{"class":125},[115,86097,86098,86100,86102,86104,86106,86108,86110,86112,86114],{"class":117,"line":1215},[115,86099,52134],{"class":125},[115,86101,51334],{"class":51290},[115,86103,14921],{"class":1963},[115,86105,171],{"class":125},[115,86107,51381],{"class":230},[115,86109,51361],{"class":1963},[115,86111,171],{"class":125},[115,86113,51388],{"class":230},[115,86115,51297],{"class":125},[115,86117,86118,86120,86122,86124,86126],{"class":117,"line":1221},[115,86119,52134],{"class":125},[115,86121,51397],{"class":51290},[115,86123,51400],{"class":125},[115,86125,51397],{"class":51290},[115,86127,51297],{"class":125},[115,86129,86130,86132,86134],{"class":117,"line":1312},[115,86131,52134],{"class":125},[115,86133,5127],{"class":51290},[115,86135,51297],{"class":125},[115,86137,86138,86141],{"class":117,"line":1318},[115,86139,86140],{"class":1963},"    .modal",[115,86142,15573],{"class":125},[115,86144,86145,86147,86149,86151,86153],{"class":117,"line":1330},[115,86146,54761],{"class":174},[115,86148,51427],{"class":125},[115,86150,3973],{"class":174},[115,86152,51482],{"class":121},[115,86154,1291],{"class":125},[115,86156,86157,86160,86162,86164,86166],{"class":117,"line":1612},[115,86158,86159],{"class":174},"      min-height",[115,86161,51427],{"class":125},[115,86163,436],{"class":174},[115,86165,51482],{"class":121},[115,86167,1291],{"class":125},[115,86169,86170,86172,86174,86176,86178,86180,86182,86184,86186,86188,86190,86192,86194,86196,86198,86201],{"class":117,"line":1617},[115,86171,78740],{"class":174},[115,86173,51427],{"class":125},[115,86175,317],{"class":174},[115,86177,4093],{"class":174},[115,86179,2038],{"class":174},[115,86181,51482],{"class":121},[115,86183,78757],{"class":174},[115,86185,126],{"class":125},[115,86187,317],{"class":174},[115,86189,12436],{"class":125},[115,86191,317],{"class":174},[115,86193,12436],{"class":125},[115,86195,317],{"class":174},[115,86197,12436],{"class":125},[115,86199,86200],{"class":174},"0.1",[115,86202,2719],{"class":125},[115,86204,86205,86207,86209,86211,86213],{"class":117,"line":1623},[115,86206,55124],{"class":174},[115,86208,51427],{"class":125},[115,86210,418],{"class":174},[115,86212,51482],{"class":121},[115,86214,1291],{"class":125},[115,86216,86217,86219,86221,86224],{"class":117,"line":1628},[115,86218,54749],{"class":174},[115,86220,51427],{"class":125},[115,86222,86223],{"class":174},"fixed",[115,86225,1291],{"class":125},[115,86227,86228,86231,86233,86236],{"class":117,"line":1642},[115,86229,86230],{"class":174},"      z-index",[115,86232,51427],{"class":125},[115,86234,86235],{"class":174},"999",[115,86237,1291],{"class":125},[115,86239,86240,86242,86244,86246,86248],{"class":117,"line":1647},[115,86241,54828],{"class":174},[115,86243,51427],{"class":125},[115,86245,781],{"class":174},[115,86247,453],{"class":121},[115,86249,1291],{"class":125},[115,86251,86252,86254,86256,86258,86260],{"class":117,"line":1653},[115,86253,54937],{"class":174},[115,86255,51427],{"class":125},[115,86257,781],{"class":174},[115,86259,453],{"class":121},[115,86261,1291],{"class":125},[115,86263,86264,86266,86268,86270,86272,86275,86277,86279,86281,86283,86285,86287],{"class":117,"line":1674},[115,86265,78781],{"class":174},[115,86267,51427],{"class":125},[115,86269,78786],{"class":174},[115,86271,126],{"class":125},[115,86273,86274],{"class":174},"-50",[115,86276,453],{"class":121},[115,86278,12436],{"class":125},[115,86280,86274],{"class":174},[115,86282,453],{"class":121},[115,86284,12436],{"class":125},[115,86286,317],{"class":174},[115,86288,2719],{"class":125},[115,86290,86291,86293,86295,86297],{"class":117,"line":1679},[115,86292,54874],{"class":174},[115,86294,51427],{"class":125},[115,86296,60832],{"class":174},[115,86298,1291],{"class":125},[115,86300,86301],{"class":117,"line":1693},[115,86302,2187],{"class":125},[115,86304,86305],{"class":117,"line":1698},[115,86306,2400],{"emptyLinePlaceholder":42},[115,86308,86309,86311,86314],{"class":117,"line":1727},[115,86310,86140],{"class":1963},[115,86312,86313],{"class":1963}," .header",[115,86315,15573],{"class":125},[115,86317,86318,86320,86322,86324,86326],{"class":117,"line":1732},[115,86319,57349],{"class":174},[115,86321,51427],{"class":125},[115,86323,526],{"class":174},[115,86325,51482],{"class":121},[115,86327,1291],{"class":125},[115,86329,86330,86332,86334,86336,86338,86340],{"class":117,"line":1749},[115,86331,54685],{"class":174},[115,86333,51427],{"class":125},[115,86335,317],{"class":174},[115,86337,2038],{"class":174},[115,86339,51482],{"class":121},[115,86341,1291],{"class":125},[115,86343,86344,86346,86348,86350],{"class":117,"line":1754},[115,86345,54749],{"class":174},[115,86347,51427],{"class":125},[115,86349,54754],{"class":174},[115,86351,1291],{"class":125},[115,86353,86354,86356,86358,86360,86362],{"class":117,"line":1759},[115,86355,54912],{"class":174},[115,86357,51427],{"class":125},[115,86359,825],{"class":174},[115,86361,51482],{"class":121},[115,86363,1291],{"class":125},[115,86365,86366],{"class":117,"line":1764},[115,86367,2187],{"class":125},[115,86369,86370],{"class":117,"line":1778},[115,86371,2400],{"emptyLinePlaceholder":42},[115,86373,86374,86376,86378,86380],{"class":117,"line":1783},[115,86375,86140],{"class":1963},[115,86377,86313],{"class":1963},[115,86379,3032],{"class":51290},[115,86381,15573],{"class":125},[115,86383,86384,86387,86389,86391],{"class":117,"line":2577},[115,86385,86386],{"class":174},"      font-style",[115,86388,51427],{"class":125},[115,86390,63831],{"class":174},[115,86392,1291],{"class":125},[115,86394,86395,86397,86399,86401],{"class":117,"line":2591},[115,86396,57406],{"class":174},[115,86398,51427],{"class":125},[115,86400,62060],{"class":174},[115,86402,1291],{"class":125},[115,86404,86405,86407,86409,86411],{"class":117,"line":2599},[115,86406,54749],{"class":174},[115,86408,51427],{"class":125},[115,86410,54821],{"class":174},[115,86412,1291],{"class":125},[115,86414,86415,86418,86420,86422,86424],{"class":117,"line":2604},[115,86416,86417],{"class":174},"      right",[115,86419,51427],{"class":125},[115,86421,700],{"class":174},[115,86423,51482],{"class":121},[115,86425,1291],{"class":125},[115,86427,86428,86430,86432,86435,86437],{"class":117,"line":2610},[115,86429,54937],{"class":174},[115,86431,51427],{"class":125},[115,86433,86434],{"class":174},"-2",[115,86436,51482],{"class":121},[115,86438,1291],{"class":125},[115,86440,86441,86443,86445,86447],{"class":117,"line":2616},[115,86442,62015],{"class":174},[115,86444,51427],{"class":125},[115,86446,62020],{"class":174},[115,86448,1291],{"class":125},[115,86450,86451],{"class":117,"line":2621},[115,86452,2187],{"class":125},[115,86454,86455],{"class":117,"line":7949},[115,86456,2400],{"emptyLinePlaceholder":42},[115,86458,86459,86461,86464],{"class":117,"line":7973},[115,86460,86140],{"class":1963},[115,86462,86463],{"class":1963}," .body",[115,86465,15573],{"class":125},[115,86467,86468,86470,86472,86474],{"class":117,"line":7978},[115,86469,57276],{"class":174},[115,86471,51427],{"class":125},[115,86473,51582],{"class":174},[115,86475,1291],{"class":125},[115,86477,86478,86480,86482,86484,86486],{"class":117,"line":7984},[115,86479,54685],{"class":174},[115,86481,51427],{"class":125},[115,86483,571],{"class":174},[115,86485,51482],{"class":121},[115,86487,1291],{"class":125},[115,86489,86490],{"class":117,"line":8011},[115,86491,2187],{"class":125},[115,86493,86494],{"class":117,"line":8016},[115,86495,2400],{"emptyLinePlaceholder":42},[115,86497,86498,86500,86503],{"class":117,"line":8022},[115,86499,86140],{"class":1963},[115,86501,86502],{"class":1963}," .footer",[115,86504,15573],{"class":125},[115,86506,86507,86509,86511,86513],{"class":117,"line":8034},[115,86508,54999],{"class":174},[115,86510,51427],{"class":125},[115,86512,51467],{"class":174},[115,86514,1291],{"class":125},[115,86516,86517,86519,86521,86523],{"class":117,"line":8046},[115,86518,55010],{"class":174},[115,86520,51427],{"class":125},[115,86522,51570],{"class":174},[115,86524,1291],{"class":125},[115,86526,86527,86529,86531,86533,86535],{"class":117,"line":8058},[115,86528,54685],{"class":174},[115,86530,51427],{"class":125},[115,86532,571],{"class":174},[115,86534,51482],{"class":121},[115,86536,1291],{"class":125},[115,86538,86539],{"class":117,"line":9717},[115,86540,2187],{"class":125},[115,86542,86543],{"class":117,"line":9742},[115,86544,2400],{"emptyLinePlaceholder":42},[115,86546,86547,86549,86551,86553],{"class":117,"line":9765},[115,86548,86140],{"class":1963},[115,86550,86502],{"class":1963},[115,86552,1399],{"class":51290},[115,86554,15573],{"class":125},[115,86556,86557,86559,86561,86563,86565,86567,86569],{"class":117,"line":9789},[115,86558,54685],{"class":174},[115,86560,51427],{"class":125},[115,86562,197],{"class":174},[115,86564,51482],{"class":121},[115,86566,2083],{"class":174},[115,86568,51482],{"class":121},[115,86570,1291],{"class":125},[115,86572,86573,86575,86577,86580],{"class":117,"line":9794},[115,86574,61711],{"class":174},[115,86576,51427],{"class":125},[115,86578,86579],{"class":174},"#ccc",[115,86581,1291],{"class":125},[115,86583,86584,86586,86588,86590],{"class":117,"line":9799},[115,86585,63960],{"class":174},[115,86587,51427],{"class":125},[115,86589,54727],{"class":174},[115,86591,1291],{"class":125},[115,86593,86594,86596,86598,86600],{"class":117,"line":9804},[115,86595,57406],{"class":174},[115,86597,51427],{"class":125},[115,86599,60832],{"class":174},[115,86601,1291],{"class":125},[115,86603,86604,86606,86608,86610,86612],{"class":117,"line":9813},[115,86605,55124],{"class":174},[115,86607,51427],{"class":125},[115,86609,203],{"class":174},[115,86611,51482],{"class":121},[115,86613,1291],{"class":125},[115,86615,86616,86618,86620,86622,86624],{"class":117,"line":9818},[115,86617,61740],{"class":174},[115,86619,51427],{"class":125},[115,86621,571],{"class":174},[115,86623,51482],{"class":121},[115,86625,1291],{"class":125},[115,86627,86628,86630,86632,86634,86636],{"class":117,"line":9824},[115,86629,54912],{"class":174},[115,86631,51427],{"class":125},[115,86633,674],{"class":174},[115,86635,51482],{"class":121},[115,86637,1291],{"class":125},[115,86639,86640],{"class":117,"line":9845},[115,86641,2187],{"class":125},[115,86643,86644],{"class":117,"line":9851},[115,86645,2400],{"emptyLinePlaceholder":42},[115,86647,86648,86650,86652,86654,86657],{"class":117,"line":9865},[115,86649,86140],{"class":1963},[115,86651,86502],{"class":1963},[115,86653,1399],{"class":51290},[115,86655,86656],{"class":1963},".submit",[115,86658,15573],{"class":125},[115,86660,86661,86663,86665,86668],{"class":117,"line":9871},[115,86662,54874],{"class":174},[115,86664,51427],{"class":125},[115,86666,86667],{"class":174},"#369",[115,86669,1291],{"class":125},[115,86671,86672],{"class":117,"line":9898},[115,86673,2187],{"class":125},[115,86675,86676,86678,86680],{"class":117,"line":9907},[115,86677,52407],{"class":125},[115,86679,5127],{"class":51290},[115,86681,51297],{"class":125},[115,86683,86684,86686,86688],{"class":117,"line":9913},[115,86685,51775],{"class":125},[115,86687,51324],{"class":51290},[115,86689,51297],{"class":125},[115,86691,86692],{"class":117,"line":9921},[115,86693,2400],{"emptyLinePlaceholder":42},[115,86695,86696,86698,86700],{"class":117,"line":9926},[115,86697,1035],{"class":125},[115,86699,51790],{"class":51290},[115,86701,51297],{"class":125},[115,86703,86704,86706,86708,86710,86712,86715,86718,86720],{"class":117,"line":16605},[115,86705,52134],{"class":125},[115,86707,53877],{"class":51290},[115,86709,14960],{"class":1963},[115,86711,171],{"class":125},[115,86713,86714],{"class":230},"\"delete\"",[115,86716,86717],{"class":125},">删除\u003C\u002F",[115,86719,53877],{"class":51290},[115,86721,51297],{"class":125},[115,86723,86724,86726,86728,86730,86732,86735,86738,86740],{"class":117,"line":16611},[115,86725,52134],{"class":125},[115,86727,53877],{"class":51290},[115,86729,14960],{"class":1963},[115,86731,171],{"class":125},[115,86733,86734],{"class":230},"\"login\"",[115,86736,86737],{"class":125},">登录\u003C\u002F",[115,86739,53877],{"class":51290},[115,86741,51297],{"class":125},[115,86743,86744,86746,86748],{"class":117,"line":16634},[115,86745,52134],{"class":125},[115,86747,51803],{"class":51290},[115,86749,51297],{"class":125},[115,86751,86752],{"class":117,"line":16640},[115,86753,86754],{"class":184},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[115,86756,86757,86759,86762,86764,86766,86768,86770,86772,86775,86777,86779],{"class":117,"line":16663},[115,86758,70074],{"class":121},[115,86760,86761],{"class":1963}," Modal",[115,86763,126],{"class":125},[115,86765,51397],{"class":5217},[115,86767,13565],{"class":121},[115,86769,69920],{"class":230},[115,86771,12436],{"class":125},[115,86773,86774],{"class":5217},"message",[115,86776,13565],{"class":121},[115,86778,69920],{"class":230},[115,86780,12443],{"class":125},[115,86782,86783],{"class":117,"line":16677},[115,86784,86785],{"class":184},"      \u002F\u002F 创建Model 模态框盒子\n",[115,86787,86788],{"class":117,"line":16697},[115,86789,86790],{"class":184},"      \u002F\u002F 1.1 创建div标签\n",[115,86792,86793,86795,86798,86800,86802,86804,86806,86808],{"class":117,"line":16703},[115,86794,70041],{"class":174},[115,86796,86797],{"class":125},".modalBox ",[115,86799,171],{"class":121},[115,86801,54386],{"class":125},[115,86803,70141],{"class":1963},[115,86805,126],{"class":125},[115,86807,81921],{"class":230},[115,86809,132],{"class":125},[115,86811,86812],{"class":117,"line":16714},[115,86813,86814],{"class":184},"      \u002F\u002F 1.2 给div 添加类名为model\n",[115,86816,86817,86819,86822,86824],{"class":117,"line":16737},[115,86818,70041],{"class":174},[115,86820,86821],{"class":125},".modalBox.className ",[115,86823,171],{"class":121},[115,86825,86826],{"class":230}," 'modal'\n",[115,86828,86829],{"class":117,"line":16759},[115,86830,86831],{"class":184},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[115,86833,86834,86836,86839,86841],{"class":117,"line":16764},[115,86835,70041],{"class":174},[115,86837,86838],{"class":125},".modalBox.innerHTML ",[115,86840,171],{"class":121},[115,86842,70158],{"class":230},[115,86844,86845,86848,86850],{"class":117,"line":16770},[115,86846,86847],{"class":230},"        \u003Cdiv class=\"header\">${",[115,86849,51397],{"class":125},[115,86851,86852],{"class":230},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[115,86854,86855,86858,86860],{"class":117,"line":16784},[115,86856,86857],{"class":230},"        \u003Cdiv class=\"body\">${",[115,86859,86774],{"class":125},[115,86861,86862],{"class":230},"}\u003C\u002Fdiv>\n",[115,86864,86865],{"class":117,"line":16797},[115,86866,86867],{"class":230},"      `\n",[115,86869,86870],{"class":117,"line":16802},[115,86871,86872],{"class":184},"      \u002F\u002F console.log(this.modalBox)\n",[115,86874,86875],{"class":117,"line":16816},[115,86876,2187],{"class":125},[115,86878,86879],{"class":117,"line":16821},[115,86880,86881],{"class":184},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[115,86883,86884],{"class":117,"line":16827},[115,86885,86886],{"class":184},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[115,86888,86889],{"class":117,"line":16832},[115,86890,86891],{"class":184},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[115,86893,86894,86897,86899,86901,86903,86906,86908,86910],{"class":117,"line":16846},[115,86895,86896],{"class":174},"    Modal",[115,86898,683],{"class":125},[115,86900,85569],{"class":174},[115,86902,683],{"class":125},[115,86904,86905],{"class":1963},"open",[115,86907,13565],{"class":121},[115,86909,58908],{"class":121},[115,86911,54442],{"class":125},[115,86913,86914],{"class":117,"line":16851},[115,86915,86916],{"class":184},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[115,86918,86919,86921,86924,86926,86928,86930,86932,86935],{"class":117,"line":16856},[115,86920,58218],{"class":121},[115,86922,86923],{"class":174}," box",[115,86925,13565],{"class":121},[115,86927,54386],{"class":125},[115,86929,54389],{"class":1963},[115,86931,126],{"class":125},[115,86933,86934],{"class":230},"'.modal'",[115,86936,132],{"class":125},[115,86938,86939],{"class":117,"line":16870},[115,86940,86941],{"class":184},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[115,86943,86944,86947,86949,86952,86954],{"class":117,"line":16882},[115,86945,86946],{"class":125},"      box ",[115,86948,1715],{"class":121},[115,86950,86951],{"class":125}," box.",[115,86953,56996],{"class":1963},[115,86955,1976],{"class":125},[115,86957,86958],{"class":117,"line":16887},[115,86959,86960],{"class":184},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[115,86962,86963],{"class":117,"line":16900},[115,86964,86965],{"class":184},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[115,86967,86968],{"class":117,"line":16905},[115,86969,86970],{"class":184},"      \u002F\u002F append可以增加对象\n",[115,86972,86973,86976,86979,86981,86984],{"class":117,"line":16910},[115,86974,86975],{"class":125},"      document.body.",[115,86977,86978],{"class":1963},"append",[115,86980,126],{"class":125},[115,86982,86983],{"class":174},"this",[115,86985,86986],{"class":125},".modalBox)\n",[115,86988,86989],{"class":117,"line":16915},[115,86990,2400],{"emptyLinePlaceholder":42},[115,86992,86993],{"class":117,"line":16928},[115,86994,86995],{"class":184},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[115,86997,86998,87000,87003,87005,87007,87010,87012,87014,87016,87018,87021,87023],{"class":117,"line":16933},[115,86999,70041],{"class":174},[115,87001,87002],{"class":125},".modalBox.",[115,87004,54389],{"class":1963},[115,87006,126],{"class":125},[115,87008,87009],{"class":230},"'i'",[115,87011,30827],{"class":125},[115,87013,57803],{"class":1963},[115,87015,126],{"class":125},[115,87017,57808],{"class":230},[115,87019,87020],{"class":125},", () ",[115,87022,84712],{"class":121},[115,87024,15573],{"class":125},[115,87026,87027],{"class":117,"line":32634},[115,87028,87029],{"class":184},"        \u002F\u002F 这个地方需要用到箭头函数\n",[115,87031,87032],{"class":117,"line":32640},[115,87033,87034],{"class":184},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[115,87036,87037],{"class":117,"line":32646},[115,87038,87039],{"class":184},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[115,87041,87042,87044,87046,87049],{"class":117,"line":32652},[115,87043,64716],{"class":174},[115,87045,683],{"class":125},[115,87047,87048],{"class":1963},"close",[115,87050,1976],{"class":125},[115,87052,87053],{"class":117,"line":32658},[115,87054,64805],{"class":125},[115,87056,87057],{"class":117,"line":32669},[115,87058,2187],{"class":125},[115,87060,87061],{"class":117,"line":32675},[115,87062,2400],{"emptyLinePlaceholder":42},[115,87064,87065],{"class":117,"line":32695},[115,87066,87067],{"class":184},"    \u002F\u002F 测试一下 点击 删除按钮\n",[115,87069,87070,87072,87074,87076,87079,87081,87083,87085,87087,87089,87091],{"class":117,"line":32701},[115,87071,52397],{"class":125},[115,87073,54389],{"class":1963},[115,87075,126],{"class":125},[115,87077,87078],{"class":230},"'#delete'",[115,87080,30827],{"class":125},[115,87082,57803],{"class":1963},[115,87084,126],{"class":125},[115,87086,57808],{"class":230},[115,87088,87020],{"class":125},[115,87090,84712],{"class":121},[115,87092,15573],{"class":125},[115,87094,87095],{"class":117,"line":32712},[115,87096,87097],{"class":184},"      \u002F\u002F 先调用Model构造函数\n",[115,87099,87100,87102,87105,87107,87109,87111,87113,87116,87118,87121],{"class":117,"line":32718},[115,87101,58218],{"class":121},[115,87103,87104],{"class":174}," del",[115,87106,13565],{"class":121},[115,87108,11579],{"class":121},[115,87110,86761],{"class":1963},[115,87112,126],{"class":125},[115,87114,87115],{"class":230},"'温馨的提示'",[115,87117,12436],{"class":125},[115,87119,87120],{"class":230},"'您没有删除权限操作'",[115,87122,132],{"class":125},[115,87124,87125],{"class":117,"line":32724},[115,87126,87127],{"class":184},"      \u002F\u002F 实例对象调用open方法\n",[115,87129,87130,87133,87135],{"class":117,"line":32730},[115,87131,87132],{"class":125},"      del.",[115,87134,86905],{"class":1963},[115,87136,1976],{"class":125},[115,87138,87139],{"class":117,"line":32736},[115,87140,33462],{"class":125},[115,87142,87143],{"class":117,"line":32742},[115,87144,87145],{"class":184},"    \u002F\u002F 测试一下 点击 登录按钮\n",[115,87147,87148,87150,87152,87154,87157,87159,87161,87163,87165,87167,87169],{"class":117,"line":32748},[115,87149,52397],{"class":125},[115,87151,54389],{"class":1963},[115,87153,126],{"class":125},[115,87155,87156],{"class":230},"'#login'",[115,87158,30827],{"class":125},[115,87160,57803],{"class":1963},[115,87162,126],{"class":125},[115,87164,57808],{"class":230},[115,87166,87020],{"class":125},[115,87168,84712],{"class":121},[115,87170,15573],{"class":125},[115,87172,87173],{"class":117,"line":32754},[115,87174,87097],{"class":184},[115,87176,87177,87179,87182,87184,87186,87188,87190,87193,87195,87198],{"class":117,"line":32774},[115,87178,58218],{"class":121},[115,87180,87181],{"class":174}," log",[115,87183,13565],{"class":121},[115,87185,11579],{"class":121},[115,87187,86761],{"class":1963},[115,87189,126],{"class":125},[115,87191,87192],{"class":230},"'友情提示'",[115,87194,12436],{"class":125},[115,87196,87197],{"class":230},"'您还没有登录呢'",[115,87199,132],{"class":125},[115,87201,87202],{"class":117,"line":32780},[115,87203,87127],{"class":184},[115,87205,87206,87209,87211],{"class":117,"line":32796},[115,87207,87208],{"class":125},"      log.",[115,87210,86905],{"class":1963},[115,87212,1976],{"class":125},[115,87214,87215],{"class":117,"line":32802},[115,87216,33462],{"class":125},[115,87218,87219],{"class":117,"line":32816},[115,87220,87221],{"class":184},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[115,87223,87224,87226,87228,87230,87232,87234,87236,87238],{"class":117,"line":32822},[115,87225,86896],{"class":174},[115,87227,683],{"class":125},[115,87229,85569],{"class":174},[115,87231,683],{"class":125},[115,87233,87048],{"class":1963},[115,87235,13565],{"class":121},[115,87237,58908],{"class":121},[115,87239,54442],{"class":125},[115,87241,87242,87244,87246,87248],{"class":117,"line":32837},[115,87243,70041],{"class":174},[115,87245,87002],{"class":125},[115,87247,56996],{"class":1963},[115,87249,1976],{"class":125},[115,87251,87252],{"class":117,"line":32843},[115,87253,2187],{"class":125},[115,87255,87256,87258,87260],{"class":117,"line":32852},[115,87257,52407],{"class":125},[115,87259,51803],{"class":51290},[115,87261,51297],{"class":125},[115,87263,87264,87266,87268],{"class":117,"line":32858},[115,87265,51775],{"class":125},[115,87267,51790],{"class":51290},[115,87269,51297],{"class":125},[115,87271,87272],{"class":117,"line":32867},[115,87273,2400],{"emptyLinePlaceholder":42},[115,87275,87276,87278,87280],{"class":117,"line":32873},[115,87277,51775],{"class":125},[115,87279,50625],{"class":51290},[115,87281,51297],{"class":125},[14,87283,87284],{},[20,87285],{"alt":22,"src":87286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[57,87288,87290],{"id":87289},"_414-深浅拷贝","4.14 深浅拷贝",[86,87292,87294],{"id":87293},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87296,87297],{},[20,87298],{"alt":22,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87301,87302],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87304,87305],{},[20,87306],{"alt":22,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87309,87310],{},[20,87311],{"alt":22,"src":87312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87314,87315],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87317,87318],{},[20,87319],{"alt":22,"src":87320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87322,11333],{},[14,87324,87325],{},[20,87326],{"alt":22,"src":87327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[86,87329,87331],{"id":87330},"_4142-深拷贝","4.14.2 深拷贝",[14,87333,87334],{},"深拷贝：拷贝的是对象，不是地址",[14,87336,87337],{},"常用的三种方法：",[69,87339,87340,87343,87346],{},[72,87341,87342],{},"通过递归实现深拷贝",[72,87344,87345],{},"lodash\u002FcloneDeep",[72,87347,87348],{},"通过JSON.stringify()实现",[21999,87350,87352],{"id":87351},"_41421-递归函数","4.14.2.1 递归函数",[14,87354,87355],{},[20,87356],{"alt":22,"src":87357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[69,87359,87360],{},[72,87361,87362],{},"死递归占溢出：",[106,87364,87366],{"className":53057,"code":87365,"language":53059,"meta":22,"style":22},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[112,87367,87368,87376,87384,87388,87393,87397,87402,87410],{"__ignoreMap":22},[115,87369,87370,87372,87374],{"class":117,"line":118},[115,87371,1035],{"class":125},[115,87373,51790],{"class":51290},[115,87375,51297],{"class":125},[115,87377,87378,87380,87382],{"class":117,"line":37},[115,87379,52134],{"class":125},[115,87381,51803],{"class":51290},[115,87383,51297],{"class":125},[115,87385,87386],{"class":117,"line":1180},[115,87387,77133],{"class":125},[115,87389,87390],{"class":117,"line":1195},[115,87391,87392],{"class":125},"      fn()\n",[115,87394,87395],{"class":117,"line":1201},[115,87396,2187],{"class":125},[115,87398,87399],{"class":117,"line":1215},[115,87400,87401],{"class":125},"    fn()\n",[115,87403,87404,87406,87408],{"class":117,"line":1221},[115,87405,52407],{"class":125},[115,87407,51803],{"class":51290},[115,87409,51297],{"class":125},[115,87411,87412,87414,87416],{"class":117,"line":1312},[115,87413,51775],{"class":125},[115,87415,51790],{"class":51290},[115,87417,51297],{"class":125},[69,87419,87420],{"start":37},[72,87421,87422],{},"递归函数要加判断条件：",[14,87424,87425],{},[20,87426],{"alt":22,"src":87427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[69,87429,87430],{"start":1180},[72,87431,87432],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[106,87434,87436],{"className":50623,"code":87435,"language":50625,"meta":22,"style":22},"\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",[112,87437,87438,87448,87462,87466,87474,87488,87508,87520,87528,87532,87540,87552,87560,87568,87593,87605,87609,87616,87624,87632,87636],{"__ignoreMap":22},[115,87439,87440,87442,87444,87446],{"class":117,"line":118},[115,87441,51287],{"class":125},[115,87443,51291],{"class":51290},[115,87445,51294],{"class":1963},[115,87447,51297],{"class":125},[115,87449,87450,87452,87454,87456,87458,87460],{"class":117,"line":37},[115,87451,1035],{"class":125},[115,87453,50625],{"class":51290},[115,87455,51306],{"class":1963},[115,87457,171],{"class":125},[115,87459,51311],{"class":230},[115,87461,51297],{"class":125},[115,87463,87464],{"class":117,"line":1180},[115,87465,2400],{"emptyLinePlaceholder":42},[115,87467,87468,87470,87472],{"class":117,"line":1195},[115,87469,1035],{"class":125},[115,87471,51324],{"class":51290},[115,87473,51297],{"class":125},[115,87475,87476,87478,87480,87482,87484,87486],{"class":117,"line":1201},[115,87477,52134],{"class":125},[115,87479,51334],{"class":51290},[115,87481,51337],{"class":1963},[115,87483,171],{"class":125},[115,87485,51342],{"class":230},[115,87487,51297],{"class":125},[115,87489,87490,87492,87494,87496,87498,87500,87502,87504,87506],{"class":117,"line":1215},[115,87491,52134],{"class":125},[115,87493,51334],{"class":51290},[115,87495,14921],{"class":1963},[115,87497,171],{"class":125},[115,87499,51381],{"class":230},[115,87501,51361],{"class":1963},[115,87503,171],{"class":125},[115,87505,51388],{"class":230},[115,87507,51297],{"class":125},[115,87509,87510,87512,87514,87516,87518],{"class":117,"line":1221},[115,87511,52134],{"class":125},[115,87513,51397],{"class":51290},[115,87515,51400],{"class":125},[115,87517,51397],{"class":51290},[115,87519,51297],{"class":125},[115,87521,87522,87524,87526],{"class":117,"line":1312},[115,87523,51775],{"class":125},[115,87525,51324],{"class":51290},[115,87527,51297],{"class":125},[115,87529,87530],{"class":117,"line":1318},[115,87531,2400],{"emptyLinePlaceholder":42},[115,87533,87534,87536,87538],{"class":117,"line":1330},[115,87535,1035],{"class":125},[115,87537,51790],{"class":51290},[115,87539,51297],{"class":125},[115,87541,87542,87544,87546,87548,87550],{"class":117,"line":1612},[115,87543,52134],{"class":125},[115,87545,51601],{"class":51290},[115,87547,55304],{"class":125},[115,87549,51601],{"class":51290},[115,87551,51297],{"class":125},[115,87553,87554,87556,87558],{"class":117,"line":1617},[115,87555,52134],{"class":125},[115,87557,51803],{"class":51290},[115,87559,51297],{"class":125},[115,87561,87562,87564,87566],{"class":117,"line":1623},[115,87563,70074],{"class":121},[115,87565,73763],{"class":1963},[115,87567,10854],{"class":125},[115,87569,87570,87572,87574,87576,87578,87580,87582,87584,87586,87588,87591],{"class":117,"line":1628},[115,87571,55761],{"class":125},[115,87573,54389],{"class":1963},[115,87575,126],{"class":125},[115,87577,81921],{"class":230},[115,87579,74239],{"class":125},[115,87581,171],{"class":121},[115,87583,11579],{"class":121},[115,87585,73779],{"class":1963},[115,87587,17262],{"class":125},[115,87589,87590],{"class":1963},"toLocaleString",[115,87592,1976],{"class":125},[115,87594,87595,87598,87601,87603],{"class":117,"line":1642},[115,87596,87597],{"class":1963},"      setTimeout",[115,87599,87600],{"class":125},"(getTime, ",[115,87602,6411],{"class":174},[115,87604,132],{"class":125},[115,87606,87607],{"class":117,"line":1647},[115,87608,2187],{"class":125},[115,87610,87611,87614],{"class":117,"line":1653},[115,87612,87613],{"class":1963},"    getTime",[115,87615,1976],{"class":125},[115,87617,87618,87620,87622],{"class":117,"line":1674},[115,87619,52407],{"class":125},[115,87621,51803],{"class":51290},[115,87623,51297],{"class":125},[115,87625,87626,87628,87630],{"class":117,"line":1679},[115,87627,51775],{"class":125},[115,87629,51790],{"class":51290},[115,87631,51297],{"class":125},[115,87633,87634],{"class":117,"line":1693},[115,87635,2400],{"emptyLinePlaceholder":42},[115,87637,87638,87640,87642],{"class":117,"line":1698},[115,87639,51775],{"class":125},[115,87641,50625],{"class":51290},[115,87643,51297],{"class":125},[14,87645,87646],{},[20,87647],{"alt":22,"src":87648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[69,87650,87651],{"start":1195},[72,87652,87342],{},[14,87654,87655],{},[20,87656],{"alt":22,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87659,87660],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87662,39190],{},[14,87664,87665],{},"这个是简易版的递归函数深拷贝",[14,87667,87668],{},"一定要注意先数组再对象，因为万物皆可对象",[106,87670,87672],{"className":50623,"code":87671,"language":50625,"meta":22,"style":22},"\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",[112,87673,87674,87684,87698,87702,87710,87724,87744,87756,87764,87768,87776,87784,87794,87803,87811,87827,87831,87839,87843,87847,87859,87864,87883,87899,87904,87909,87914,87929,87934,87939,87948,87956,87973,87981,87987,87995,88000,88005,88014,88018,88022,88026,88037,88046,88056,88070,88080,88088,88096,88104,88108],{"__ignoreMap":22},[115,87675,87676,87678,87680,87682],{"class":117,"line":118},[115,87677,51287],{"class":125},[115,87679,51291],{"class":51290},[115,87681,51294],{"class":1963},[115,87683,51297],{"class":125},[115,87685,87686,87688,87690,87692,87694,87696],{"class":117,"line":37},[115,87687,1035],{"class":125},[115,87689,50625],{"class":51290},[115,87691,51306],{"class":1963},[115,87693,171],{"class":125},[115,87695,51311],{"class":230},[115,87697,51297],{"class":125},[115,87699,87700],{"class":117,"line":1180},[115,87701,2400],{"emptyLinePlaceholder":42},[115,87703,87704,87706,87708],{"class":117,"line":1195},[115,87705,1035],{"class":125},[115,87707,51324],{"class":51290},[115,87709,51297],{"class":125},[115,87711,87712,87714,87716,87718,87720,87722],{"class":117,"line":1201},[115,87713,52134],{"class":125},[115,87715,51334],{"class":51290},[115,87717,51337],{"class":1963},[115,87719,171],{"class":125},[115,87721,51342],{"class":230},[115,87723,51297],{"class":125},[115,87725,87726,87728,87730,87732,87734,87736,87738,87740,87742],{"class":117,"line":1215},[115,87727,52134],{"class":125},[115,87729,51334],{"class":51290},[115,87731,14921],{"class":1963},[115,87733,171],{"class":125},[115,87735,51381],{"class":230},[115,87737,51361],{"class":1963},[115,87739,171],{"class":125},[115,87741,51388],{"class":230},[115,87743,51297],{"class":125},[115,87745,87746,87748,87750,87752,87754],{"class":117,"line":1221},[115,87747,52134],{"class":125},[115,87749,51397],{"class":51290},[115,87751,51400],{"class":125},[115,87753,51397],{"class":51290},[115,87755,51297],{"class":125},[115,87757,87758,87760,87762],{"class":117,"line":1312},[115,87759,51775],{"class":125},[115,87761,51324],{"class":51290},[115,87763,51297],{"class":125},[115,87765,87766],{"class":117,"line":1318},[115,87767,2400],{"emptyLinePlaceholder":42},[115,87769,87770,87772,87774],{"class":117,"line":1330},[115,87771,1035],{"class":125},[115,87773,51790],{"class":51290},[115,87775,51297],{"class":125},[115,87777,87778,87780,87782],{"class":117,"line":1612},[115,87779,52134],{"class":125},[115,87781,51803],{"class":51290},[115,87783,51297],{"class":125},[115,87785,87786,87788,87790,87792],{"class":117,"line":1617},[115,87787,11222],{"class":121},[115,87789,69961],{"class":174},[115,87791,13565],{"class":121},[115,87793,15573],{"class":125},[115,87795,87796,87798,87801],{"class":117,"line":1623},[115,87797,71606],{"class":125},[115,87799,87800],{"class":230},"'pink'",[115,87802,31467],{"class":125},[115,87804,87805,87807,87809],{"class":117,"line":1628},[115,87806,71616],{"class":125},[115,87808,775],{"class":174},[115,87810,31467],{"class":125},[115,87812,87813,87816,87819,87821,87824],{"class":117,"line":1642},[115,87814,87815],{"class":125},"      hobby: [",[115,87817,87818],{"class":230},"'乒乓球'",[115,87820,12436],{"class":125},[115,87822,87823],{"class":230},"'足球'",[115,87825,87826],{"class":125},"],\n",[115,87828,87829],{"class":117,"line":1647},[115,87830,77862],{"class":125},[115,87832,87833,87836],{"class":117,"line":1653},[115,87834,87835],{"class":125},"        baby: ",[115,87837,87838],{"class":230},"'小pink'\n",[115,87840,87841],{"class":117,"line":1674},[115,87842,52388],{"class":125},[115,87844,87845],{"class":117,"line":1679},[115,87846,2187],{"class":125},[115,87848,87849,87851,87854,87856],{"class":117,"line":1693},[115,87850,11222],{"class":121},[115,87852,87853],{"class":174}," o",[115,87855,13565],{"class":121},[115,87857,87858],{"class":125}," {}\n",[115,87860,87861],{"class":117,"line":1698},[115,87862,87863],{"class":184},"    \u002F\u002F 拷贝函数\n",[115,87865,87866,87868,87871,87873,87876,87878,87881],{"class":117,"line":1727},[115,87867,70074],{"class":121},[115,87869,87870],{"class":1963}," deepCopy",[115,87872,126],{"class":125},[115,87874,87875],{"class":5217},"newObj",[115,87877,12436],{"class":125},[115,87879,87880],{"class":5217},"oldObj",[115,87882,12443],{"class":125},[115,87884,87885,87887,87889,87891,87894,87896],{"class":117,"line":1732},[115,87886,52274],{"class":121},[115,87888,1658],{"class":125},[115,87890,51837],{"class":121},[115,87892,87893],{"class":125}," k ",[115,87895,26044],{"class":121},[115,87897,87898],{"class":125}," oldObj) {\n",[115,87900,87901],{"class":117,"line":1749},[115,87902,87903],{"class":184},"        \u002F\u002F 处理数组的问题\n",[115,87905,87906],{"class":117,"line":1754},[115,87907,87908],{"class":184},"        \u002F\u002F 判断是否属于数组\n",[115,87910,87911],{"class":117,"line":1759},[115,87912,87913],{"class":184},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[115,87915,87916,87918,87921,87924,87927],{"class":117,"line":1764},[115,87917,2497],{"class":121},[115,87919,87920],{"class":125}," (oldObj[k] ",[115,87922,87923],{"class":121},"instanceof",[115,87925,87926],{"class":1963}," Array",[115,87928,12443],{"class":125},[115,87930,87931],{"class":117,"line":1778},[115,87932,87933],{"class":184},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[115,87935,87936],{"class":117,"line":1783},[115,87937,87938],{"class":184},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[115,87940,87941,87944,87946],{"class":117,"line":2577},[115,87942,87943],{"class":125},"          newObj[k] ",[115,87945,171],{"class":121},[115,87947,51828],{"class":125},[115,87949,87950,87953],{"class":117,"line":2591},[115,87951,87952],{"class":1963},"          deepCopy",[115,87954,87955],{"class":125},"(newObj[k], oldObj[k])\n",[115,87957,87958,87960,87962,87964,87966,87968,87971],{"class":117,"line":2599},[115,87959,80070],{"class":125},[115,87961,1701],{"class":121},[115,87963,1704],{"class":121},[115,87965,87920],{"class":125},[115,87967,87923],{"class":121},[115,87969,87970],{"class":1963}," Object",[115,87972,12443],{"class":125},[115,87974,87975,87977,87979],{"class":117,"line":2604},[115,87976,87943],{"class":125},[115,87978,171],{"class":121},[115,87980,87858],{"class":125},[115,87982,87983,87985],{"class":117,"line":2610},[115,87984,87952],{"class":1963},[115,87986,87955],{"class":125},[115,87988,87989,87991,87993],{"class":117,"line":2616},[115,87990,80070],{"class":125},[115,87992,1701],{"class":121},[115,87994,15573],{"class":125},[115,87996,87997],{"class":117,"line":2621},[115,87998,87999],{"class":184},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[115,88001,88002],{"class":117,"line":7949},[115,88003,88004],{"class":184},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[115,88006,88007,88009,88011],{"class":117,"line":7973},[115,88008,87943],{"class":125},[115,88010,171],{"class":121},[115,88012,88013],{"class":125}," oldObj[k]\n",[115,88015,88016],{"class":117,"line":7978},[115,88017,2529],{"class":125},[115,88019,88020],{"class":117,"line":7984},[115,88021,52388],{"class":125},[115,88023,88024],{"class":117,"line":8011},[115,88025,2187],{"class":125},[115,88027,88028,88031,88034],{"class":117,"line":8016},[115,88029,88030],{"class":1963},"    deepCopy",[115,88032,88033],{"class":125},"(o, obj) ",[115,88035,88036],{"class":184},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[115,88038,88039,88041,88043],{"class":117,"line":8022},[115,88040,73743],{"class":125},[115,88042,58237],{"class":1963},[115,88044,88045],{"class":125},"(o)\n",[115,88047,88048,88051,88053],{"class":117,"line":8034},[115,88049,88050],{"class":125},"    o.age ",[115,88052,171],{"class":121},[115,88054,88055],{"class":174}," 20\n",[115,88057,88058,88061,88063,88065,88067],{"class":117,"line":8046},[115,88059,88060],{"class":125},"    o.hobby[",[115,88062,317],{"class":174},[115,88064,4443],{"class":125},[115,88066,171],{"class":121},[115,88068,88069],{"class":230}," '篮球'\n",[115,88071,88072,88075,88077],{"class":117,"line":8058},[115,88073,88074],{"class":125},"    o.family ",[115,88076,171],{"class":121},[115,88078,88079],{"class":230}," '老pink'\n",[115,88081,88082,88084,88086],{"class":117,"line":9717},[115,88083,73743],{"class":125},[115,88085,58237],{"class":1963},[115,88087,70026],{"class":125},[115,88089,88090,88092,88094],{"class":117,"line":9742},[115,88091,52407],{"class":125},[115,88093,51803],{"class":51290},[115,88095,51297],{"class":125},[115,88097,88098,88100,88102],{"class":117,"line":9765},[115,88099,51775],{"class":125},[115,88101,51790],{"class":51290},[115,88103,51297],{"class":125},[115,88105,88106],{"class":117,"line":9789},[115,88107,2400],{"emptyLinePlaceholder":42},[115,88109,88110,88112,88114],{"class":117,"line":9794},[115,88111,51775],{"class":125},[115,88113,50625],{"class":51290},[115,88115,51297],{"class":125},[14,88117,88118],{},[20,88119],{"alt":22,"src":88120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21999,88122,88124,88125],{"id":88123},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[275,88126,88127],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88129,88130],{},[27,88131,88132],{"href":88132,"rel":88133},"https:\u002F\u002Fwww.lodashjs.com\u002F",[31],[14,88135,88136],{},"lodash里边的方法都要加上一个下划线_",[14,88138,88139],{},"_.cloneDeep()",[106,88141,88143],{"className":50623,"code":88142,"language":50625,"meta":22,"style":22},"\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",[112,88144,88145,88155,88169,88173,88181,88195,88215,88227,88235,88239,88247,88252,88271,88279,88289,88297,88305,88317,88321,88327,88331,88335,88351,88359,88368,88376,88384,88392,88396],{"__ignoreMap":22},[115,88146,88147,88149,88151,88153],{"class":117,"line":118},[115,88148,51287],{"class":125},[115,88150,51291],{"class":51290},[115,88152,51294],{"class":1963},[115,88154,51297],{"class":125},[115,88156,88157,88159,88161,88163,88165,88167],{"class":117,"line":37},[115,88158,1035],{"class":125},[115,88160,50625],{"class":51290},[115,88162,51306],{"class":1963},[115,88164,171],{"class":125},[115,88166,51311],{"class":230},[115,88168,51297],{"class":125},[115,88170,88171],{"class":117,"line":1180},[115,88172,2400],{"emptyLinePlaceholder":42},[115,88174,88175,88177,88179],{"class":117,"line":1195},[115,88176,1035],{"class":125},[115,88178,51324],{"class":51290},[115,88180,51297],{"class":125},[115,88182,88183,88185,88187,88189,88191,88193],{"class":117,"line":1201},[115,88184,52134],{"class":125},[115,88186,51334],{"class":51290},[115,88188,51337],{"class":1963},[115,88190,171],{"class":125},[115,88192,51342],{"class":230},[115,88194,51297],{"class":125},[115,88196,88197,88199,88201,88203,88205,88207,88209,88211,88213],{"class":117,"line":1215},[115,88198,52134],{"class":125},[115,88200,51334],{"class":51290},[115,88202,14921],{"class":1963},[115,88204,171],{"class":125},[115,88206,51381],{"class":230},[115,88208,51361],{"class":1963},[115,88210,171],{"class":125},[115,88212,51388],{"class":230},[115,88214,51297],{"class":125},[115,88216,88217,88219,88221,88223,88225],{"class":117,"line":1221},[115,88218,52134],{"class":125},[115,88220,51397],{"class":51290},[115,88222,51400],{"class":125},[115,88224,51397],{"class":51290},[115,88226,51297],{"class":125},[115,88228,88229,88231,88233],{"class":117,"line":1312},[115,88230,51775],{"class":125},[115,88232,51324],{"class":51290},[115,88234,51297],{"class":125},[115,88236,88237],{"class":117,"line":1318},[115,88238,2400],{"emptyLinePlaceholder":42},[115,88240,88241,88243,88245],{"class":117,"line":1330},[115,88242,1035],{"class":125},[115,88244,51790],{"class":51290},[115,88246,51297],{"class":125},[115,88248,88249],{"class":117,"line":1612},[115,88250,88251],{"class":184},"  \u003C!-- 先引用这个库 -->\n",[115,88253,88254,88256,88258,88260,88262,88265,88267,88269],{"class":117,"line":1617},[115,88255,52134],{"class":125},[115,88257,51803],{"class":51290},[115,88259,55229],{"class":1963},[115,88261,171],{"class":125},[115,88263,88264],{"class":230},"\"lodash.min.js\"",[115,88266,55304],{"class":125},[115,88268,51803],{"class":51290},[115,88270,51297],{"class":125},[115,88272,88273,88275,88277],{"class":117,"line":1623},[115,88274,52134],{"class":125},[115,88276,51803],{"class":51290},[115,88278,51297],{"class":125},[115,88280,88281,88283,88285,88287],{"class":117,"line":1628},[115,88282,11222],{"class":121},[115,88284,69961],{"class":174},[115,88286,13565],{"class":121},[115,88288,15573],{"class":125},[115,88290,88291,88293,88295],{"class":117,"line":1642},[115,88292,71606],{"class":125},[115,88294,87800],{"class":230},[115,88296,31467],{"class":125},[115,88298,88299,88301,88303],{"class":117,"line":1647},[115,88300,71616],{"class":125},[115,88302,775],{"class":174},[115,88304,31467],{"class":125},[115,88306,88307,88309,88311,88313,88315],{"class":117,"line":1653},[115,88308,87815],{"class":125},[115,88310,87818],{"class":230},[115,88312,12436],{"class":125},[115,88314,87823],{"class":230},[115,88316,87826],{"class":125},[115,88318,88319],{"class":117,"line":1674},[115,88320,77862],{"class":125},[115,88322,88323,88325],{"class":117,"line":1679},[115,88324,87835],{"class":125},[115,88326,87838],{"class":230},[115,88328,88329],{"class":117,"line":1693},[115,88330,52388],{"class":125},[115,88332,88333],{"class":117,"line":1698},[115,88334,2187],{"class":125},[115,88336,88337,88339,88341,88343,88346,88349],{"class":117,"line":1727},[115,88338,11222],{"class":121},[115,88340,87853],{"class":174},[115,88342,13565],{"class":121},[115,88344,88345],{"class":125}," _.",[115,88347,88348],{"class":1963},"cloneDeep",[115,88350,70026],{"class":125},[115,88352,88353,88355,88357],{"class":117,"line":1732},[115,88354,73743],{"class":125},[115,88356,58237],{"class":1963},[115,88358,88045],{"class":125},[115,88360,88361,88364,88366],{"class":117,"line":1749},[115,88362,88363],{"class":125},"    o.family.baby ",[115,88365,171],{"class":121},[115,88367,88079],{"class":230},[115,88369,88370,88372,88374],{"class":117,"line":1754},[115,88371,73743],{"class":125},[115,88373,58237],{"class":1963},[115,88375,70026],{"class":125},[115,88377,88378,88380,88382],{"class":117,"line":1759},[115,88379,52407],{"class":125},[115,88381,51803],{"class":51290},[115,88383,51297],{"class":125},[115,88385,88386,88388,88390],{"class":117,"line":1764},[115,88387,51775],{"class":125},[115,88389,51790],{"class":51290},[115,88391,51297],{"class":125},[115,88393,88394],{"class":117,"line":1778},[115,88395,2400],{"emptyLinePlaceholder":42},[115,88397,88398,88400,88402],{"class":117,"line":1783},[115,88399,51775],{"class":125},[115,88401,50625],{"class":51290},[115,88403,51297],{"class":125},[14,88405,88406],{},[20,88407],{"alt":22,"src":88408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21999,88410,88412],{"id":88411},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[106,88414,88416],{"className":50623,"code":88415,"language":50625,"meta":22,"style":22},"\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",[112,88417,88418,88428,88442,88446,88454,88468,88488,88500,88508,88512,88520,88528,88538,88546,88554,88566,88570,88576,88580,88584,88589,88594,88599,88625,88633,88642,88650,88658,88666,88670],{"__ignoreMap":22},[115,88419,88420,88422,88424,88426],{"class":117,"line":118},[115,88421,51287],{"class":125},[115,88423,51291],{"class":51290},[115,88425,51294],{"class":1963},[115,88427,51297],{"class":125},[115,88429,88430,88432,88434,88436,88438,88440],{"class":117,"line":37},[115,88431,1035],{"class":125},[115,88433,50625],{"class":51290},[115,88435,51306],{"class":1963},[115,88437,171],{"class":125},[115,88439,51311],{"class":230},[115,88441,51297],{"class":125},[115,88443,88444],{"class":117,"line":1180},[115,88445,2400],{"emptyLinePlaceholder":42},[115,88447,88448,88450,88452],{"class":117,"line":1195},[115,88449,1035],{"class":125},[115,88451,51324],{"class":51290},[115,88453,51297],{"class":125},[115,88455,88456,88458,88460,88462,88464,88466],{"class":117,"line":1201},[115,88457,52134],{"class":125},[115,88459,51334],{"class":51290},[115,88461,51337],{"class":1963},[115,88463,171],{"class":125},[115,88465,51342],{"class":230},[115,88467,51297],{"class":125},[115,88469,88470,88472,88474,88476,88478,88480,88482,88484,88486],{"class":117,"line":1215},[115,88471,52134],{"class":125},[115,88473,51334],{"class":51290},[115,88475,14921],{"class":1963},[115,88477,171],{"class":125},[115,88479,51381],{"class":230},[115,88481,51361],{"class":1963},[115,88483,171],{"class":125},[115,88485,51388],{"class":230},[115,88487,51297],{"class":125},[115,88489,88490,88492,88494,88496,88498],{"class":117,"line":1221},[115,88491,52134],{"class":125},[115,88493,51397],{"class":51290},[115,88495,51400],{"class":125},[115,88497,51397],{"class":51290},[115,88499,51297],{"class":125},[115,88501,88502,88504,88506],{"class":117,"line":1312},[115,88503,51775],{"class":125},[115,88505,51324],{"class":51290},[115,88507,51297],{"class":125},[115,88509,88510],{"class":117,"line":1318},[115,88511,2400],{"emptyLinePlaceholder":42},[115,88513,88514,88516,88518],{"class":117,"line":1330},[115,88515,1035],{"class":125},[115,88517,51790],{"class":51290},[115,88519,51297],{"class":125},[115,88521,88522,88524,88526],{"class":117,"line":1612},[115,88523,52134],{"class":125},[115,88525,51803],{"class":51290},[115,88527,51297],{"class":125},[115,88529,88530,88532,88534,88536],{"class":117,"line":1617},[115,88531,11222],{"class":121},[115,88533,69961],{"class":174},[115,88535,13565],{"class":121},[115,88537,15573],{"class":125},[115,88539,88540,88542,88544],{"class":117,"line":1623},[115,88541,71606],{"class":125},[115,88543,87800],{"class":230},[115,88545,31467],{"class":125},[115,88547,88548,88550,88552],{"class":117,"line":1628},[115,88549,71616],{"class":125},[115,88551,775],{"class":174},[115,88553,31467],{"class":125},[115,88555,88556,88558,88560,88562,88564],{"class":117,"line":1642},[115,88557,87815],{"class":125},[115,88559,87818],{"class":230},[115,88561,12436],{"class":125},[115,88563,87823],{"class":230},[115,88565,87826],{"class":125},[115,88567,88568],{"class":117,"line":1647},[115,88569,77862],{"class":125},[115,88571,88572,88574],{"class":117,"line":1653},[115,88573,87835],{"class":125},[115,88575,87838],{"class":230},[115,88577,88578],{"class":117,"line":1674},[115,88579,52388],{"class":125},[115,88581,88582],{"class":117,"line":1679},[115,88583,2187],{"class":125},[115,88585,88586],{"class":117,"line":1693},[115,88587,88588],{"class":184},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[115,88590,88591],{"class":117,"line":1698},[115,88592,88593],{"class":184},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[115,88595,88596],{"class":117,"line":1727},[115,88597,88598],{"class":184},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[115,88600,88601,88603,88605,88607,88610,88612,88615,88617,88619,88621,88623],{"class":117,"line":1732},[115,88602,11222],{"class":121},[115,88604,87853],{"class":174},[115,88606,13565],{"class":121},[115,88608,88609],{"class":174}," JSON",[115,88611,683],{"class":125},[115,88613,88614],{"class":1963},"parse",[115,88616,126],{"class":125},[115,88618,71654],{"class":174},[115,88620,683],{"class":125},[115,88622,71659],{"class":1963},[115,88624,71662],{"class":125},[115,88626,88627,88629,88631],{"class":117,"line":1749},[115,88628,73743],{"class":125},[115,88630,58237],{"class":1963},[115,88632,88045],{"class":125},[115,88634,88635,88637,88639],{"class":117,"line":1754},[115,88636,88363],{"class":125},[115,88638,171],{"class":121},[115,88640,88641],{"class":230}," '123'\n",[115,88643,88644,88646,88648],{"class":117,"line":1759},[115,88645,73743],{"class":125},[115,88647,58237],{"class":1963},[115,88649,70026],{"class":125},[115,88651,88652,88654,88656],{"class":117,"line":1764},[115,88653,52407],{"class":125},[115,88655,51803],{"class":51290},[115,88657,51297],{"class":125},[115,88659,88660,88662,88664],{"class":117,"line":1778},[115,88661,51775],{"class":125},[115,88663,51790],{"class":51290},[115,88665,51297],{"class":125},[115,88667,88668],{"class":117,"line":1783},[115,88669,2400],{"emptyLinePlaceholder":42},[115,88671,88672,88674,88676],{"class":117,"line":2577},[115,88673,51775],{"class":125},[115,88675,50625],{"class":51290},[115,88677,51297],{"class":125},[14,88679,88680],{},[20,88681],{"alt":22,"src":88682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[57,88684,88686],{"id":88685},"_415-异常处理","4.15 异常处理",[69,88688,88689],{},[72,88690,88691],{},"throw抛异常",[14,88693,88694],{},[20,88695],{"alt":22,"src":88696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[69,88698,88699],{"start":37},[72,88700,88701],{},"try\u002Fcatch 捕获错误信息",[14,88703,88704],{},[20,88705],{"alt":22,"src":88706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[106,88708,88710],{"className":50623,"code":88709,"language":50625,"meta":22,"style":22},"\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",[112,88711,88712,88722,88736,88740,88748,88762,88782,88794,88802,88806,88814,88826,88834,88843,88850,88855,88874,88883,88894,88899,88909,88914,88919,88924,88941,88945,88950,88957,88969,88973,88985,88989,88993,88998,89003,89010,89018,89026,89030],{"__ignoreMap":22},[115,88713,88714,88716,88718,88720],{"class":117,"line":118},[115,88715,51287],{"class":125},[115,88717,51291],{"class":51290},[115,88719,51294],{"class":1963},[115,88721,51297],{"class":125},[115,88723,88724,88726,88728,88730,88732,88734],{"class":117,"line":37},[115,88725,1035],{"class":125},[115,88727,50625],{"class":51290},[115,88729,51306],{"class":1963},[115,88731,171],{"class":125},[115,88733,51311],{"class":230},[115,88735,51297],{"class":125},[115,88737,88738],{"class":117,"line":1180},[115,88739,2400],{"emptyLinePlaceholder":42},[115,88741,88742,88744,88746],{"class":117,"line":1195},[115,88743,1035],{"class":125},[115,88745,51324],{"class":51290},[115,88747,51297],{"class":125},[115,88749,88750,88752,88754,88756,88758,88760],{"class":117,"line":1201},[115,88751,52134],{"class":125},[115,88753,51334],{"class":51290},[115,88755,51337],{"class":1963},[115,88757,171],{"class":125},[115,88759,51342],{"class":230},[115,88761,51297],{"class":125},[115,88763,88764,88766,88768,88770,88772,88774,88776,88778,88780],{"class":117,"line":1215},[115,88765,52134],{"class":125},[115,88767,51334],{"class":51290},[115,88769,14921],{"class":1963},[115,88771,171],{"class":125},[115,88773,51381],{"class":230},[115,88775,51361],{"class":1963},[115,88777,171],{"class":125},[115,88779,51388],{"class":230},[115,88781,51297],{"class":125},[115,88783,88784,88786,88788,88790,88792],{"class":117,"line":1221},[115,88785,52134],{"class":125},[115,88787,51397],{"class":51290},[115,88789,51400],{"class":125},[115,88791,51397],{"class":51290},[115,88793,51297],{"class":125},[115,88795,88796,88798,88800],{"class":117,"line":1312},[115,88797,51775],{"class":125},[115,88799,51324],{"class":51290},[115,88801,51297],{"class":125},[115,88803,88804],{"class":117,"line":1318},[115,88805,2400],{"emptyLinePlaceholder":42},[115,88807,88808,88810,88812],{"class":117,"line":1330},[115,88809,1035],{"class":125},[115,88811,51790],{"class":51290},[115,88813,51297],{"class":125},[115,88815,88816,88818,88820,88822,88824],{"class":117,"line":1612},[115,88817,52134],{"class":125},[115,88819,14],{"class":51290},[115,88821,53484],{"class":125},[115,88823,14],{"class":51290},[115,88825,51297],{"class":125},[115,88827,88828,88830,88832],{"class":117,"line":1617},[115,88829,52134],{"class":125},[115,88831,51803],{"class":51290},[115,88833,51297],{"class":125},[115,88835,88836,88838,88841],{"class":117,"line":1623},[115,88837,70074],{"class":121},[115,88839,88840],{"class":1963}," fn",[115,88842,10854],{"class":125},[115,88844,88845,88848],{"class":117,"line":1628},[115,88846,88847],{"class":121},"      try",[115,88849,15573],{"class":125},[115,88851,88852],{"class":117,"line":1642},[115,88853,88854],{"class":184},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[115,88856,88857,88859,88861,88863,88865,88867,88869,88872],{"class":117,"line":1647},[115,88858,61260],{"class":121},[115,88860,6826],{"class":174},[115,88862,13565],{"class":121},[115,88864,54386],{"class":125},[115,88866,54389],{"class":1963},[115,88868,126],{"class":125},[115,88870,88871],{"class":230},"'.p'",[115,88873,132],{"class":125},[115,88875,88876,88879,88881],{"class":117,"line":1653},[115,88877,88878],{"class":125},"        p.style.color ",[115,88880,171],{"class":121},[115,88882,67041],{"class":230},[115,88884,88885,88888,88891],{"class":117,"line":1674},[115,88886,88887],{"class":125},"      } ",[115,88889,88890],{"class":121},"catch",[115,88892,88893],{"class":125}," (err) {\n",[115,88895,88896],{"class":117,"line":1679},[115,88897,88898],{"class":184},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[115,88900,88901,88904,88906],{"class":117,"line":1693},[115,88902,88903],{"class":125},"        console.",[115,88905,58237],{"class":1963},[115,88907,88908],{"class":125},"(err.message)\n",[115,88910,88911],{"class":117,"line":1698},[115,88912,88913],{"class":184},"        \u002F\u002F 想要中断程序，需要加return\n",[115,88915,88916],{"class":117,"line":1727},[115,88917,88918],{"class":184},"        \u002F\u002F return\n",[115,88920,88921],{"class":117,"line":1732},[115,88922,88923],{"class":184},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[115,88925,88926,88929,88931,88934,88936,88939],{"class":117,"line":1749},[115,88927,88928],{"class":121},"        throw",[115,88930,11579],{"class":121},[115,88932,88933],{"class":1963}," Error",[115,88935,126],{"class":125},[115,88937,88938],{"class":230},"'你看看，选择器错误了吧'",[115,88940,132],{"class":125},[115,88942,88943],{"class":117,"line":1754},[115,88944,52388],{"class":125},[115,88946,88947],{"class":117,"line":1759},[115,88948,88949],{"class":184},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[115,88951,88952,88955],{"class":117,"line":1764},[115,88953,88954],{"class":121},"      finally",[115,88956,15573],{"class":125},[115,88958,88959,88962,88964,88967],{"class":117,"line":1778},[115,88960,88961],{"class":1963},"        alert",[115,88963,126],{"class":125},[115,88965,88966],{"class":230},"'弹出对话框'",[115,88968,132],{"class":125},[115,88970,88971],{"class":117,"line":1783},[115,88972,52388],{"class":125},[115,88974,88975,88977,88979,88981,88983],{"class":117,"line":2577},[115,88976,58234],{"class":125},[115,88978,58237],{"class":1963},[115,88980,126],{"class":125},[115,88982,597],{"class":174},[115,88984,132],{"class":125},[115,88986,88987],{"class":117,"line":2591},[115,88988,2400],{"emptyLinePlaceholder":42},[115,88990,88991],{"class":117,"line":2599},[115,88992,2187],{"class":125},[115,88994,88995],{"class":117,"line":2604},[115,88996,88997],{"class":184},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[115,88999,89000],{"class":117,"line":2610},[115,89001,89002],{"class":184},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[115,89004,89005,89008],{"class":117,"line":2616},[115,89006,89007],{"class":1963},"    fn",[115,89009,1976],{"class":125},[115,89011,89012,89014,89016],{"class":117,"line":2621},[115,89013,52407],{"class":125},[115,89015,51803],{"class":51290},[115,89017,51297],{"class":125},[115,89019,89020,89022,89024],{"class":117,"line":7949},[115,89021,51775],{"class":125},[115,89023,51790],{"class":51290},[115,89025,51297],{"class":125},[115,89027,89028],{"class":117,"line":7973},[115,89029,2400],{"emptyLinePlaceholder":42},[115,89031,89032,89034,89036],{"class":117,"line":7978},[115,89033,51775],{"class":125},[115,89035,50625],{"class":51290},[115,89037,51297],{"class":125},[14,89039,89040],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[69,89042,89043],{"start":1180},[72,89044,89045],{},"debugger",[14,89047,89048],{},[20,89049],{"alt":22,"src":89050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89052,89053],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[57,89055,89057],{"id":89056},"_416-处理this","4.16 处理this",[86,89059,89061],{"id":89060},"_4161-this的指向","4.16.1 this的指向",[69,89063,89064],{},[72,89065,89066],{},"普通函数的this",[14,89068,89069],{},[20,89070],{"alt":22,"src":89071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[69,89073,89074],{"start":37},[72,89075,89076],{},"箭头函数的this",[14,89078,89079],{},[20,89080],{"alt":22,"src":89081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89083,89084],{},[20,89085],{"alt":22,"src":89086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89088,89089],{},[20,89090],{"alt":22,"src":89091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[86,89093,89095],{"id":89094},"_4162-this的改变","4.16.2 this的改变",[14,89097,89098],{},"call() apply() bind()",[69,89100,89101],{},[72,89102,89103],{},"call()",[14,89105,89106],{},[20,89107],{"alt":22,"src":89108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89110,89111],{},"两个作用：①调用函数；②改变this指向",[106,89113,89115],{"className":53057,"code":89114,"language":53059,"meta":22,"style":22},"\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",[112,89116,89117,89125,89133,89137,89142,89146,89151,89156,89161,89165,89170,89178],{"__ignoreMap":22},[115,89118,89119,89121,89123],{"class":117,"line":118},[115,89120,1035],{"class":125},[115,89122,51790],{"class":51290},[115,89124,51297],{"class":125},[115,89126,89127,89129,89131],{"class":117,"line":37},[115,89128,52134],{"class":125},[115,89130,51803],{"class":51290},[115,89132,51297],{"class":125},[115,89134,89135],{"class":117,"line":1180},[115,89136,71513],{"class":125},[115,89138,89139],{"class":117,"line":1195},[115,89140,89141],{"class":125},"      uname: 'pink'\n",[115,89143,89144],{"class":117,"line":1201},[115,89145,2187],{"class":125},[115,89147,89148],{"class":117,"line":1215},[115,89149,89150],{"class":125},"    function fn(x, y) {\n",[115,89152,89153],{"class":117,"line":1221},[115,89154,89155],{"class":125},"      console.log(this)  \u002F\u002Fwindow\n",[115,89157,89158],{"class":117,"line":1312},[115,89159,89160],{"class":125},"      console.log(x + y)\n",[115,89162,89163],{"class":117,"line":1318},[115,89164,2187],{"class":125},[115,89166,89167],{"class":117,"line":1330},[115,89168,89169],{"class":125},"    fn.call(obj, 1, 2)\n",[115,89171,89172,89174,89176],{"class":117,"line":1612},[115,89173,52407],{"class":125},[115,89175,51803],{"class":51290},[115,89177,51297],{"class":125},[115,89179,89180,89182,89184],{"class":117,"line":1617},[115,89181,51775],{"class":125},[115,89183,51790],{"class":51290},[115,89185,51297],{"class":125},[14,89187,89188],{},[20,89189],{"alt":22,"src":89190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[69,89192,89193],{"start":37},[72,89194,89195],{},"apply()",[14,89197,89198],{},[20,89199],{"alt":22,"src":89200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89202,89111],{},[14,89204,89205],{},"call传递的是普通参数，而apply必须传递的是数组",[106,89207,89209],{"className":50623,"code":89208,"language":50625,"meta":22,"style":22},"\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",[112,89210,89211,89221,89235,89239,89247,89261,89281,89293,89301,89305,89313,89321,89331,89338,89342,89347,89363,89375,89389,89393,89398,89417,89422,89426,89431,89436,89444,89449,89471,89476,89492,89508,89520,89524,89529,89548,89556,89564,89568],{"__ignoreMap":22},[115,89212,89213,89215,89217,89219],{"class":117,"line":118},[115,89214,51287],{"class":125},[115,89216,51291],{"class":51290},[115,89218,51294],{"class":1963},[115,89220,51297],{"class":125},[115,89222,89223,89225,89227,89229,89231,89233],{"class":117,"line":37},[115,89224,1035],{"class":125},[115,89226,50625],{"class":51290},[115,89228,51306],{"class":1963},[115,89230,171],{"class":125},[115,89232,51311],{"class":230},[115,89234,51297],{"class":125},[115,89236,89237],{"class":117,"line":1180},[115,89238,2400],{"emptyLinePlaceholder":42},[115,89240,89241,89243,89245],{"class":117,"line":1195},[115,89242,1035],{"class":125},[115,89244,51324],{"class":51290},[115,89246,51297],{"class":125},[115,89248,89249,89251,89253,89255,89257,89259],{"class":117,"line":1201},[115,89250,52134],{"class":125},[115,89252,51334],{"class":51290},[115,89254,51337],{"class":1963},[115,89256,171],{"class":125},[115,89258,51342],{"class":230},[115,89260,51297],{"class":125},[115,89262,89263,89265,89267,89269,89271,89273,89275,89277,89279],{"class":117,"line":1215},[115,89264,52134],{"class":125},[115,89266,51334],{"class":51290},[115,89268,14921],{"class":1963},[115,89270,171],{"class":125},[115,89272,51381],{"class":230},[115,89274,51361],{"class":1963},[115,89276,171],{"class":125},[115,89278,51388],{"class":230},[115,89280,51297],{"class":125},[115,89282,89283,89285,89287,89289,89291],{"class":117,"line":1221},[115,89284,52134],{"class":125},[115,89286,51397],{"class":51290},[115,89288,51400],{"class":125},[115,89290,51397],{"class":51290},[115,89292,51297],{"class":125},[115,89294,89295,89297,89299],{"class":117,"line":1312},[115,89296,51775],{"class":125},[115,89298,51324],{"class":51290},[115,89300,51297],{"class":125},[115,89302,89303],{"class":117,"line":1318},[115,89304,2400],{"emptyLinePlaceholder":42},[115,89306,89307,89309,89311],{"class":117,"line":1330},[115,89308,1035],{"class":125},[115,89310,51790],{"class":51290},[115,89312,51297],{"class":125},[115,89314,89315,89317,89319],{"class":117,"line":1612},[115,89316,52134],{"class":125},[115,89318,51803],{"class":51290},[115,89320,51297],{"class":125},[115,89322,89323,89325,89327,89329],{"class":117,"line":1617},[115,89324,11222],{"class":121},[115,89326,69961],{"class":174},[115,89328,13565],{"class":121},[115,89330,15573],{"class":125},[115,89332,89333,89335],{"class":117,"line":1623},[115,89334,71616],{"class":125},[115,89336,89337],{"class":174},"18\n",[115,89339,89340],{"class":117,"line":1628},[115,89341,2187],{"class":125},[115,89343,89344],{"class":117,"line":1642},[115,89345,89346],{"class":184},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[115,89348,89349,89351,89353,89355,89357,89359,89361],{"class":117,"line":1647},[115,89350,70074],{"class":121},[115,89352,88840],{"class":1963},[115,89354,126],{"class":125},[115,89356,945],{"class":5217},[115,89358,12436],{"class":125},[115,89360,970],{"class":5217},[115,89362,12443],{"class":125},[115,89364,89365,89367,89369,89371,89373],{"class":117,"line":1653},[115,89366,58234],{"class":125},[115,89368,58237],{"class":1963},[115,89370,126],{"class":125},[115,89372,86983],{"class":174},[115,89374,132],{"class":125},[115,89376,89377,89379,89381,89384,89386],{"class":117,"line":1674},[115,89378,58234],{"class":125},[115,89380,58237],{"class":1963},[115,89382,89383],{"class":125},"(x ",[115,89385,606],{"class":121},[115,89387,89388],{"class":125}," y)\n",[115,89390,89391],{"class":117,"line":1679},[115,89392,2187],{"class":125},[115,89394,89395],{"class":117,"line":1693},[115,89396,89397],{"class":184},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[115,89399,89400,89403,89406,89409,89411,89413,89415],{"class":117,"line":1698},[115,89401,89402],{"class":125},"    fn.",[115,89404,89405],{"class":1963},"apply",[115,89407,89408],{"class":125},"(obj, [",[115,89410,343],{"class":174},[115,89412,12436],{"class":125},[115,89414,203],{"class":174},[115,89416,4657],{"class":125},[115,89418,89419],{"class":117,"line":1727},[115,89420,89421],{"class":184},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[115,89423,89424],{"class":117,"line":1732},[115,89425,2400],{"emptyLinePlaceholder":42},[115,89427,89428],{"class":117,"line":1749},[115,89429,89430],{"class":184},"    \u002F\u002F 使用场景：求数组最大值\n",[115,89432,89433],{"class":117,"line":1754},[115,89434,89435],{"class":184},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[115,89437,89438,89441],{"class":117,"line":1759},[115,89439,89440],{"class":184},"    \u002F\u002F console.log(max)",[115,89442,89443],{"class":184},"   \u002F\u002F3\n",[115,89445,89446],{"class":117,"line":1764},[115,89447,89448],{"class":184},"    \u002F\u002F 指向空或者Math都是可以的\n",[115,89450,89451,89453,89455,89457,89459,89461,89463,89465,89467,89469],{"class":117,"line":1778},[115,89452,11222],{"class":121},[115,89454,57685],{"class":174},[115,89456,13565],{"class":121},[115,89458,52216],{"class":125},[115,89460,436],{"class":174},[115,89462,12436],{"class":125},[115,89464,629],{"class":174},[115,89466,12436],{"class":125},[115,89468,660],{"class":174},[115,89470,33247],{"class":125},[115,89472,89473],{"class":117,"line":1783},[115,89474,89475],{"class":184},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[115,89477,89478,89480,89482,89484,89487,89489],{"class":117,"line":2577},[115,89479,11222],{"class":121},[115,89481,5952],{"class":174},[115,89483,13565],{"class":121},[115,89485,89486],{"class":125}," Math.max.",[115,89488,89405],{"class":1963},[115,89490,89491],{"class":125},"(Math, arr)\n",[115,89493,89494,89496,89499,89501,89504,89506],{"class":117,"line":2591},[115,89495,11222],{"class":121},[115,89497,89498],{"class":174}," min",[115,89500,13565],{"class":121},[115,89502,89503],{"class":125}," Math.min.",[115,89505,89405],{"class":1963},[115,89507,89491],{"class":125},[115,89509,89510,89512,89514,89517],{"class":117,"line":2599},[115,89511,73743],{"class":125},[115,89513,58237],{"class":1963},[115,89515,89516],{"class":125},"(max, min)     ",[115,89518,89519],{"class":184},"\u002F\u002F100,4\n",[115,89521,89522],{"class":117,"line":2604},[115,89523,2400],{"emptyLinePlaceholder":42},[115,89525,89526],{"class":117,"line":2610},[115,89527,89528],{"class":184},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[115,89530,89531,89533,89535,89538,89540,89542,89545],{"class":117,"line":2616},[115,89532,73743],{"class":125},[115,89534,58237],{"class":1963},[115,89536,89537],{"class":125},"(Max.",[115,89539,6016],{"class":1963},[115,89541,126],{"class":125},[115,89543,89544],{"class":121},"...",[115,89546,89547],{"class":125},"arr))\n",[115,89549,89550,89552,89554],{"class":117,"line":2621},[115,89551,52407],{"class":125},[115,89553,51803],{"class":51290},[115,89555,51297],{"class":125},[115,89557,89558,89560,89562],{"class":117,"line":7949},[115,89559,51775],{"class":125},[115,89561,51790],{"class":51290},[115,89563,51297],{"class":125},[115,89565,89566],{"class":117,"line":7973},[115,89567,2400],{"emptyLinePlaceholder":42},[115,89569,89570,89572,89574],{"class":117,"line":7978},[115,89571,51775],{"class":125},[115,89573,50625],{"class":51290},[115,89575,51297],{"class":125},[14,89577,89578],{},[20,89579],{"alt":22,"src":89580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[69,89582,89583],{"start":1180},[72,89584,89585],{},"bind()",[14,89587,89588],{},[20,89589],{"alt":22,"src":89590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89592,89593],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89595,89596],{},"bind的语法跟call很相似",[106,89598,89600],{"className":53057,"code":89599,"language":53059,"meta":22,"style":22},"\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",[112,89601,89602,89610,89618,89622,89627,89631,89635,89640,89644,89649,89654,89659,89664,89669,89674,89679,89683,89691],{"__ignoreMap":22},[115,89603,89604,89606,89608],{"class":117,"line":118},[115,89605,1035],{"class":125},[115,89607,51790],{"class":51290},[115,89609,51297],{"class":125},[115,89611,89612,89614,89616],{"class":117,"line":37},[115,89613,52134],{"class":125},[115,89615,51803],{"class":51290},[115,89617,51297],{"class":125},[115,89619,89620],{"class":117,"line":1180},[115,89621,71513],{"class":125},[115,89623,89624],{"class":117,"line":1195},[115,89625,89626],{"class":125},"      age: 18\n",[115,89628,89629],{"class":117,"line":1201},[115,89630,2187],{"class":125},[115,89632,89633],{"class":117,"line":1215},[115,89634,77133],{"class":125},[115,89636,89637],{"class":117,"line":1221},[115,89638,89639],{"class":125},"      console.log(this)\n",[115,89641,89642],{"class":117,"line":1312},[115,89643,2187],{"class":125},[115,89645,89646],{"class":117,"line":1318},[115,89647,89648],{"class":125},"    \u002F\u002F 1.bind 不会调用函数\n",[115,89650,89651],{"class":117,"line":1330},[115,89652,89653],{"class":125},"    \u002F\u002F 2.bind能改变this的指向\n",[115,89655,89656],{"class":117,"line":1612},[115,89657,89658],{"class":125},"    fn.bind()\n",[115,89660,89661],{"class":117,"line":1617},[115,89662,89663],{"class":125},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[115,89665,89666],{"class":117,"line":1623},[115,89667,89668],{"class":125},"    const fun = fn.bind(obj)\n",[115,89670,89671],{"class":117,"line":1628},[115,89672,89673],{"class":125},"    \u002F\u002F console.log(fun)\n",[115,89675,89676],{"class":117,"line":1642},[115,89677,89678],{"class":125},"    \u002F\u002F 调用,查看this的指向\n",[115,89680,89681],{"class":117,"line":1647},[115,89682,52641],{"class":125},[115,89684,89685,89687,89689],{"class":117,"line":1653},[115,89686,52407],{"class":125},[115,89688,51803],{"class":51290},[115,89690,51297],{"class":125},[115,89692,89693,89695,89697],{"class":117,"line":1674},[115,89694,51775],{"class":125},[115,89696,51790],{"class":51290},[115,89698,51297],{"class":125},[14,89700,89701],{},[20,89702],{"alt":22,"src":89703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[69,89705,89706],{"start":1195},[72,89707,89708],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[106,89710,89712],{"className":53057,"code":89711,"language":53059,"meta":22,"style":22},"\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",[112,89713,89714,89722,89735,89743,89748,89752,89757,89762,89767,89772,89777,89782,89787,89792,89796,89804],{"__ignoreMap":22},[115,89715,89716,89718,89720],{"class":117,"line":118},[115,89717,1035],{"class":125},[115,89719,51790],{"class":51290},[115,89721,51297],{"class":125},[115,89723,89724,89726,89728,89731,89733],{"class":117,"line":37},[115,89725,52134],{"class":125},[115,89727,53877],{"class":51290},[115,89729,89730],{"class":125},">禁用\u003C\u002F",[115,89732,53877],{"class":51290},[115,89734,51297],{"class":125},[115,89736,89737,89739,89741],{"class":117,"line":1180},[115,89738,52134],{"class":125},[115,89740,51803],{"class":51290},[115,89742,51297],{"class":125},[115,89744,89745],{"class":117,"line":1195},[115,89746,89747],{"class":125},"    const btn = document.querySelector('button')\n",[115,89749,89750],{"class":117,"line":1201},[115,89751,59006],{"class":125},[115,89753,89754],{"class":117,"line":1215},[115,89755,89756],{"class":125},"      this.disabled = true\n",[115,89758,89759],{"class":117,"line":1221},[115,89760,89761],{"class":125},"      \u002F\u002F 定时器是window进行调用的\n",[115,89763,89764],{"class":117,"line":1312},[115,89765,89766],{"class":125},"      setTimeout(function () {\n",[115,89768,89769],{"class":117,"line":1318},[115,89770,89771],{"class":125},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[115,89773,89774],{"class":117,"line":1330},[115,89775,89776],{"class":125},"        this.disabled = false\n",[115,89778,89779],{"class":117,"line":1612},[115,89780,89781],{"class":125},"      }.bind(this), 2000)\n",[115,89783,89784],{"class":117,"line":1617},[115,89785,89786],{"class":125},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[115,89788,89789],{"class":117,"line":1623},[115,89790,89791],{"class":125},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[115,89793,89794],{"class":117,"line":1628},[115,89795,33462],{"class":125},[115,89797,89798,89800,89802],{"class":117,"line":1642},[115,89799,52407],{"class":125},[115,89801,51803],{"class":51290},[115,89803,51297],{"class":125},[115,89805,89806,89808,89810],{"class":117,"line":1647},[115,89807,51775],{"class":125},[115,89809,51790],{"class":51290},[115,89811,51297],{"class":125},[69,89813,89814],{"start":1201},[72,89815,21954],{},[14,89817,89818],{},[20,89819],{"alt":22,"src":89820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[57,89822,89824],{"id":89823},"_417-性能优化","4.17 性能优化",[86,89826,89828],{"id":89827},"_4171-防抖","4.17.1 防抖",[14,89830,89831],{},[20,89832],{"alt":22,"src":89833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89835,89836],{},[275,89837,89838],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89840,89841],{},"防抖实现方式：",[1132,89843,89844],{},[72,89845,89846],{},"lodash 提供了防抖处理",[14,89848,89849],{},"_.debounce(func,[wait=0],[options={}])",[14,89851,89852],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[106,89854,89856],{"className":50623,"code":89855,"language":50625,"meta":22,"style":22},"\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",[112,89857,89858,89868,89882,89886,89894,89908,89928,89940,89948,89954,89964,89976,89988,89999,90011,90021,90031,90044,90048,90056,90064,90068,90076,90094,90112,90120,90139,90149,90158,90169,90174,90178,90183,90188,90193,90218,90226,90234,90238],{"__ignoreMap":22},[115,89859,89860,89862,89864,89866],{"class":117,"line":118},[115,89861,51287],{"class":125},[115,89863,51291],{"class":51290},[115,89865,51294],{"class":1963},[115,89867,51297],{"class":125},[115,89869,89870,89872,89874,89876,89878,89880],{"class":117,"line":37},[115,89871,1035],{"class":125},[115,89873,50625],{"class":51290},[115,89875,51306],{"class":1963},[115,89877,171],{"class":125},[115,89879,51311],{"class":230},[115,89881,51297],{"class":125},[115,89883,89884],{"class":117,"line":1180},[115,89885,2400],{"emptyLinePlaceholder":42},[115,89887,89888,89890,89892],{"class":117,"line":1195},[115,89889,1035],{"class":125},[115,89891,51324],{"class":51290},[115,89893,51297],{"class":125},[115,89895,89896,89898,89900,89902,89904,89906],{"class":117,"line":1201},[115,89897,52134],{"class":125},[115,89899,51334],{"class":51290},[115,89901,51337],{"class":1963},[115,89903,171],{"class":125},[115,89905,51342],{"class":230},[115,89907,51297],{"class":125},[115,89909,89910,89912,89914,89916,89918,89920,89922,89924,89926],{"class":117,"line":1215},[115,89911,52134],{"class":125},[115,89913,51334],{"class":51290},[115,89915,14921],{"class":1963},[115,89917,171],{"class":125},[115,89919,51381],{"class":230},[115,89921,51361],{"class":1963},[115,89923,171],{"class":125},[115,89925,51388],{"class":230},[115,89927,51297],{"class":125},[115,89929,89930,89932,89934,89936,89938],{"class":117,"line":1221},[115,89931,52134],{"class":125},[115,89933,51397],{"class":51290},[115,89935,51400],{"class":125},[115,89937,51397],{"class":51290},[115,89939,51297],{"class":125},[115,89941,89942,89944,89946],{"class":117,"line":1312},[115,89943,52134],{"class":125},[115,89945,5127],{"class":51290},[115,89947,51297],{"class":125},[115,89949,89950,89952],{"class":117,"line":1318},[115,89951,54742],{"class":1963},[115,89953,15573],{"class":125},[115,89955,89956,89958,89960,89962],{"class":117,"line":1330},[115,89957,72586],{"class":174},[115,89959,51427],{"class":125},[115,89961,60495],{"class":174},[115,89963,1291],{"class":125},[115,89965,89966,89968,89970,89972,89974],{"class":117,"line":1612},[115,89967,54761],{"class":174},[115,89969,51427],{"class":125},[115,89971,1722],{"class":174},[115,89973,51482],{"class":121},[115,89975,1291],{"class":125},[115,89977,89978,89980,89982,89984,89986],{"class":117,"line":1617},[115,89979,54775],{"class":174},[115,89981,51427],{"class":125},[115,89983,1722],{"class":174},[115,89985,51482],{"class":121},[115,89987,1291],{"class":125},[115,89989,89990,89992,89994,89997],{"class":117,"line":1623},[115,89991,54874],{"class":174},[115,89993,51427],{"class":125},[115,89995,89996],{"class":174},"gray",[115,89998,1291],{"class":125},[115,90000,90001,90003,90005,90007,90009],{"class":117,"line":1628},[115,90002,54912],{"class":174},[115,90004,51427],{"class":125},[115,90006,950],{"class":174},[115,90008,51482],{"class":121},[115,90010,1291],{"class":125},[115,90012,90013,90015,90017,90019],{"class":117,"line":1642},[115,90014,57406],{"class":174},[115,90016,51427],{"class":125},[115,90018,60832],{"class":174},[115,90020,1291],{"class":125},[115,90022,90023,90025,90027,90029],{"class":117,"line":1647},[115,90024,57276],{"class":174},[115,90026,51427],{"class":125},[115,90028,51582],{"class":174},[115,90030,1291],{"class":125},[115,90032,90033,90036,90038,90040,90042],{"class":117,"line":1653},[115,90034,90035],{"class":174},"      padding-top",[115,90037,51427],{"class":125},[115,90039,444],{"class":174},[115,90041,51482],{"class":121},[115,90043,1291],{"class":125},[115,90045,90046],{"class":117,"line":1674},[115,90047,2187],{"class":125},[115,90049,90050,90052,90054],{"class":117,"line":1679},[115,90051,52407],{"class":125},[115,90053,5127],{"class":51290},[115,90055,51297],{"class":125},[115,90057,90058,90060,90062],{"class":117,"line":1693},[115,90059,51775],{"class":125},[115,90061,51324],{"class":51290},[115,90063,51297],{"class":125},[115,90065,90066],{"class":117,"line":1698},[115,90067,2400],{"emptyLinePlaceholder":42},[115,90069,90070,90072,90074],{"class":117,"line":1727},[115,90071,1035],{"class":125},[115,90073,51790],{"class":51290},[115,90075,51297],{"class":125},[115,90077,90078,90080,90082,90084,90086,90088,90090,90092],{"class":117,"line":1732},[115,90079,52134],{"class":125},[115,90081,51601],{"class":51290},[115,90083,53476],{"class":1963},[115,90085,171],{"class":125},[115,90087,53481],{"class":230},[115,90089,55304],{"class":125},[115,90091,51601],{"class":51290},[115,90093,51297],{"class":125},[115,90095,90096,90098,90100,90102,90104,90106,90108,90110],{"class":117,"line":1749},[115,90097,52134],{"class":125},[115,90099,51803],{"class":51290},[115,90101,55229],{"class":1963},[115,90103,171],{"class":125},[115,90105,88264],{"class":230},[115,90107,55304],{"class":125},[115,90109,51803],{"class":51290},[115,90111,51297],{"class":125},[115,90113,90114,90116,90118],{"class":117,"line":1754},[115,90115,52134],{"class":125},[115,90117,51803],{"class":51290},[115,90119,51297],{"class":125},[115,90121,90122,90124,90126,90128,90130,90132,90134,90137],{"class":117,"line":1759},[115,90123,11222],{"class":121},[115,90125,86923],{"class":174},[115,90127,13565],{"class":121},[115,90129,54386],{"class":125},[115,90131,54389],{"class":1963},[115,90133,126],{"class":125},[115,90135,90136],{"class":230},"'.box'",[115,90138,132],{"class":125},[115,90140,90141,90143,90145,90147],{"class":117,"line":1764},[115,90142,52209],{"class":121},[115,90144,9439],{"class":125},[115,90146,171],{"class":121},[115,90148,47334],{"class":174},[115,90150,90151,90153,90156],{"class":117,"line":1778},[115,90152,70074],{"class":121},[115,90154,90155],{"class":1963}," mouseMove",[115,90157,10854],{"class":125},[115,90159,90160,90163,90165,90167],{"class":117,"line":1783},[115,90161,90162],{"class":125},"      box.innerHTML ",[115,90164,171],{"class":121},[115,90166,3032],{"class":125},[115,90168,2702],{"class":121},[115,90170,90171],{"class":117,"line":2577},[115,90172,90173],{"class":184},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[115,90175,90176],{"class":117,"line":2591},[115,90177,2187],{"class":125},[115,90179,90180],{"class":117,"line":2599},[115,90181,90182],{"class":184},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[115,90184,90185],{"class":117,"line":2604},[115,90186,90187],{"class":184},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[115,90189,90190],{"class":117,"line":2610},[115,90191,90192],{"class":184},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[115,90194,90195,90198,90200,90202,90205,90208,90211,90214,90216],{"class":117,"line":2616},[115,90196,90197],{"class":125},"    box.",[115,90199,57803],{"class":1963},[115,90201,126],{"class":125},[115,90203,90204],{"class":230},"'mousemove'",[115,90206,90207],{"class":125},", _.",[115,90209,90210],{"class":1963},"debounce",[115,90212,90213],{"class":125},"(mouseMove, ",[115,90215,65064],{"class":174},[115,90217,30498],{"class":125},[115,90219,90220,90222,90224],{"class":117,"line":2621},[115,90221,52407],{"class":125},[115,90223,51803],{"class":51290},[115,90225,51297],{"class":125},[115,90227,90228,90230,90232],{"class":117,"line":7949},[115,90229,51775],{"class":125},[115,90231,51790],{"class":51290},[115,90233,51297],{"class":125},[115,90235,90236],{"class":117,"line":7973},[115,90237,2400],{"emptyLinePlaceholder":42},[115,90239,90240,90242,90244],{"class":117,"line":7978},[115,90241,51775],{"class":125},[115,90243,50625],{"class":51290},[115,90245,51297],{"class":125},[1132,90247,90248],{},[72,90249,90250],{},"手写一个防抖函数来处理",[14,90252,90253],{},"防抖的核心就是利用定时器来实现的：",[14,90255,90256],{},"①声明一个定时器变量",[14,90258,90259],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90261,90262],{},"③如果没有定时器则开启定时器，记得存到变量里面",[106,90264,90266],{"className":50623,"code":90265,"language":50625,"meta":22,"style":22},"\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",[112,90267,90268,90278,90292,90296,90304,90318,90338,90350,90358,90364,90374,90386,90398,90408,90420,90430,90440,90452,90456,90464,90472,90476,90484,90502,90520,90528,90546,90556,90564,90574,90578,90582,90586,90591,90596,90601,90606,90611,90616,90634,90641,90646,90654,90659,90672,90688,90698,90703,90707,90711,90731,90735,90740,90745,90750,90755,90763,90771,90775],{"__ignoreMap":22},[115,90269,90270,90272,90274,90276],{"class":117,"line":118},[115,90271,51287],{"class":125},[115,90273,51291],{"class":51290},[115,90275,51294],{"class":1963},[115,90277,51297],{"class":125},[115,90279,90280,90282,90284,90286,90288,90290],{"class":117,"line":37},[115,90281,1035],{"class":125},[115,90283,50625],{"class":51290},[115,90285,51306],{"class":1963},[115,90287,171],{"class":125},[115,90289,51311],{"class":230},[115,90291,51297],{"class":125},[115,90293,90294],{"class":117,"line":1180},[115,90295,2400],{"emptyLinePlaceholder":42},[115,90297,90298,90300,90302],{"class":117,"line":1195},[115,90299,1035],{"class":125},[115,90301,51324],{"class":51290},[115,90303,51297],{"class":125},[115,90305,90306,90308,90310,90312,90314,90316],{"class":117,"line":1201},[115,90307,52134],{"class":125},[115,90309,51334],{"class":51290},[115,90311,51337],{"class":1963},[115,90313,171],{"class":125},[115,90315,51342],{"class":230},[115,90317,51297],{"class":125},[115,90319,90320,90322,90324,90326,90328,90330,90332,90334,90336],{"class":117,"line":1215},[115,90321,52134],{"class":125},[115,90323,51334],{"class":51290},[115,90325,14921],{"class":1963},[115,90327,171],{"class":125},[115,90329,51381],{"class":230},[115,90331,51361],{"class":1963},[115,90333,171],{"class":125},[115,90335,51388],{"class":230},[115,90337,51297],{"class":125},[115,90339,90340,90342,90344,90346,90348],{"class":117,"line":1221},[115,90341,52134],{"class":125},[115,90343,51397],{"class":51290},[115,90345,51400],{"class":125},[115,90347,51397],{"class":51290},[115,90349,51297],{"class":125},[115,90351,90352,90354,90356],{"class":117,"line":1312},[115,90353,52134],{"class":125},[115,90355,5127],{"class":51290},[115,90357,51297],{"class":125},[115,90359,90360,90362],{"class":117,"line":1318},[115,90361,54742],{"class":1963},[115,90363,15573],{"class":125},[115,90365,90366,90368,90370,90372],{"class":117,"line":1330},[115,90367,72586],{"class":174},[115,90369,51427],{"class":125},[115,90371,60495],{"class":174},[115,90373,1291],{"class":125},[115,90375,90376,90378,90380,90382,90384],{"class":117,"line":1612},[115,90377,54761],{"class":174},[115,90379,51427],{"class":125},[115,90381,1722],{"class":174},[115,90383,51482],{"class":121},[115,90385,1291],{"class":125},[115,90387,90388,90390,90392,90394,90396],{"class":117,"line":1617},[115,90389,54775],{"class":174},[115,90391,51427],{"class":125},[115,90393,1722],{"class":174},[115,90395,51482],{"class":121},[115,90397,1291],{"class":125},[115,90399,90400,90402,90404,90406],{"class":117,"line":1623},[115,90401,54874],{"class":174},[115,90403,51427],{"class":125},[115,90405,89996],{"class":174},[115,90407,1291],{"class":125},[115,90409,90410,90412,90414,90416,90418],{"class":117,"line":1628},[115,90411,54912],{"class":174},[115,90413,51427],{"class":125},[115,90415,950],{"class":174},[115,90417,51482],{"class":121},[115,90419,1291],{"class":125},[115,90421,90422,90424,90426,90428],{"class":117,"line":1642},[115,90423,57406],{"class":174},[115,90425,51427],{"class":125},[115,90427,60832],{"class":174},[115,90429,1291],{"class":125},[115,90431,90432,90434,90436,90438],{"class":117,"line":1647},[115,90433,57276],{"class":174},[115,90435,51427],{"class":125},[115,90437,51582],{"class":174},[115,90439,1291],{"class":125},[115,90441,90442,90444,90446,90448,90450],{"class":117,"line":1653},[115,90443,90035],{"class":174},[115,90445,51427],{"class":125},[115,90447,444],{"class":174},[115,90449,51482],{"class":121},[115,90451,1291],{"class":125},[115,90453,90454],{"class":117,"line":1674},[115,90455,2187],{"class":125},[115,90457,90458,90460,90462],{"class":117,"line":1679},[115,90459,52407],{"class":125},[115,90461,5127],{"class":51290},[115,90463,51297],{"class":125},[115,90465,90466,90468,90470],{"class":117,"line":1693},[115,90467,51775],{"class":125},[115,90469,51324],{"class":51290},[115,90471,51297],{"class":125},[115,90473,90474],{"class":117,"line":1698},[115,90475,2400],{"emptyLinePlaceholder":42},[115,90477,90478,90480,90482],{"class":117,"line":1727},[115,90479,1035],{"class":125},[115,90481,51790],{"class":51290},[115,90483,51297],{"class":125},[115,90485,90486,90488,90490,90492,90494,90496,90498,90500],{"class":117,"line":1732},[115,90487,52134],{"class":125},[115,90489,51601],{"class":51290},[115,90491,53476],{"class":1963},[115,90493,171],{"class":125},[115,90495,53481],{"class":230},[115,90497,55304],{"class":125},[115,90499,51601],{"class":51290},[115,90501,51297],{"class":125},[115,90503,90504,90506,90508,90510,90512,90514,90516,90518],{"class":117,"line":1749},[115,90505,52134],{"class":125},[115,90507,51803],{"class":51290},[115,90509,55229],{"class":1963},[115,90511,171],{"class":125},[115,90513,88264],{"class":230},[115,90515,55304],{"class":125},[115,90517,51803],{"class":51290},[115,90519,51297],{"class":125},[115,90521,90522,90524,90526],{"class":117,"line":1754},[115,90523,52134],{"class":125},[115,90525,51803],{"class":51290},[115,90527,51297],{"class":125},[115,90529,90530,90532,90534,90536,90538,90540,90542,90544],{"class":117,"line":1759},[115,90531,11222],{"class":121},[115,90533,86923],{"class":174},[115,90535,13565],{"class":121},[115,90537,54386],{"class":125},[115,90539,54389],{"class":1963},[115,90541,126],{"class":125},[115,90543,90136],{"class":230},[115,90545,132],{"class":125},[115,90547,90548,90550,90552,90554],{"class":117,"line":1764},[115,90549,52209],{"class":121},[115,90551,9439],{"class":125},[115,90553,171],{"class":121},[115,90555,47334],{"class":174},[115,90557,90558,90560,90562],{"class":117,"line":1778},[115,90559,70074],{"class":121},[115,90561,90155],{"class":1963},[115,90563,10854],{"class":125},[115,90565,90566,90568,90570,90572],{"class":117,"line":1783},[115,90567,90162],{"class":125},[115,90569,171],{"class":121},[115,90571,3032],{"class":125},[115,90573,2702],{"class":121},[115,90575,90576],{"class":117,"line":2577},[115,90577,90173],{"class":184},[115,90579,90580],{"class":117,"line":2591},[115,90581,2187],{"class":125},[115,90583,90584],{"class":117,"line":2599},[115,90585,90182],{"class":184},[115,90587,90588],{"class":117,"line":2604},[115,90589,90590],{"class":184},"    \u002F\u002F 手写防抖函数\n",[115,90592,90593],{"class":117,"line":2610},[115,90594,90595],{"class":184},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[115,90597,90598],{"class":117,"line":2616},[115,90599,90600],{"class":184},"    \u002F\u002F 1.声明定时器变量\n",[115,90602,90603],{"class":117,"line":2621},[115,90604,90605],{"class":184},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[115,90607,90608],{"class":117,"line":7949},[115,90609,90610],{"class":184},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[115,90612,90613],{"class":117,"line":7973},[115,90614,90615],{"class":184},"    \u002F\u002F 4.定时器里面写函数调用\n",[115,90617,90618,90620,90623,90625,90628,90630,90632],{"class":117,"line":7978},[115,90619,70074],{"class":121},[115,90621,90622],{"class":1963}," debounce",[115,90624,126],{"class":125},[115,90626,90627],{"class":5217},"fn",[115,90629,12436],{"class":125},[115,90631,845],{"class":5217},[115,90633,12443],{"class":125},[115,90635,90636,90638],{"class":117,"line":7984},[115,90637,79762],{"class":121},[115,90639,90640],{"class":125}," timer\n",[115,90642,90643],{"class":117,"line":8011},[115,90644,90645],{"class":184},"      \u002F\u002F return 返回一个匿名函数\n",[115,90647,90648,90650,90652],{"class":117,"line":8016},[115,90649,73972],{"class":121},[115,90651,58908],{"class":121},[115,90653,54442],{"class":125},[115,90655,90656],{"class":117,"line":8022},[115,90657,90658],{"class":184},"        \u002F\u002F 这里边写第二三四步\n",[115,90660,90661,90663,90666,90669],{"class":117,"line":8034},[115,90662,2497],{"class":121},[115,90664,90665],{"class":125}," (timer) ",[115,90667,90668],{"class":1963},"clearTimeout",[115,90670,90671],{"class":125},"(timer)\n",[115,90673,90674,90677,90679,90682,90684,90686],{"class":117,"line":8046},[115,90675,90676],{"class":125},"        timer ",[115,90678,171],{"class":121},[115,90680,90681],{"class":1963}," setTimeout",[115,90683,126],{"class":125},[115,90685,54439],{"class":121},[115,90687,54442],{"class":125},[115,90689,90690,90693,90695],{"class":117,"line":8058},[115,90691,90692],{"class":1963},"          fn",[115,90694,13051],{"class":125},[115,90696,90697],{"class":184},"\u002F\u002F加小括号调用fn }, t)\n",[115,90699,90700],{"class":117,"line":9717},[115,90701,90702],{"class":125},"        }, t)\n",[115,90704,90705],{"class":117,"line":9742},[115,90706,52388],{"class":125},[115,90708,90709],{"class":117,"line":9765},[115,90710,2187],{"class":125},[115,90712,90713,90715,90717,90719,90721,90723,90725,90727,90729],{"class":117,"line":9789},[115,90714,90197],{"class":125},[115,90716,57803],{"class":1963},[115,90718,126],{"class":125},[115,90720,90204],{"class":230},[115,90722,12436],{"class":125},[115,90724,90210],{"class":1963},[115,90726,90213],{"class":125},[115,90728,65064],{"class":174},[115,90730,30498],{"class":125},[115,90732,90733],{"class":117,"line":9794},[115,90734,2400],{"emptyLinePlaceholder":42},[115,90736,90737],{"class":117,"line":9799},[115,90738,90739],{"class":184},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[115,90741,90742],{"class":117,"line":9804},[115,90743,90744],{"class":184},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[115,90746,90747],{"class":117,"line":9813},[115,90748,90749],{"class":184},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[115,90751,90752],{"class":117,"line":9818},[115,90753,90754],{"class":184},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[115,90756,90757,90759,90761],{"class":117,"line":9824},[115,90758,52407],{"class":125},[115,90760,51803],{"class":51290},[115,90762,51297],{"class":125},[115,90764,90765,90767,90769],{"class":117,"line":9845},[115,90766,51775],{"class":125},[115,90768,51790],{"class":51290},[115,90770,51297],{"class":125},[115,90772,90773],{"class":117,"line":9851},[115,90774,2400],{"emptyLinePlaceholder":42},[115,90776,90777,90779,90781],{"class":117,"line":9865},[115,90778,51775],{"class":125},[115,90780,50625],{"class":51290},[115,90782,51297],{"class":125},[86,90784,90786],{"id":90785},"_4172-节流","4.17.2 节流",[14,90788,90789],{},[20,90790],{"alt":22,"src":90791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90793,90794],{},[20,90795],{"alt":22,"src":90796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90798,90799],{},[275,90800,90801],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90803,90804],{},"实现方式：",[1132,90806,90807],{},[72,90808,90809],{},"lodash 提供的节流函数来处理",[14,90811,90812],{},"_.throttle(func,[wait=0],[options=])",[14,90814,90815],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[106,90817,90819],{"className":50623,"code":90818,"language":50625,"meta":22,"style":22},"\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",[112,90820,90821,90831,90845,90849,90857,90871,90891,90903,90911,90917,90927,90939,90951,90961,90973,90983,90993,91005,91009,91017,91025,91029,91037,91055,91073,91081,91099,91109,91117,91127,91131,91135,91139,91144,91149,91170,91178,91186,91190],{"__ignoreMap":22},[115,90822,90823,90825,90827,90829],{"class":117,"line":118},[115,90824,51287],{"class":125},[115,90826,51291],{"class":51290},[115,90828,51294],{"class":1963},[115,90830,51297],{"class":125},[115,90832,90833,90835,90837,90839,90841,90843],{"class":117,"line":37},[115,90834,1035],{"class":125},[115,90836,50625],{"class":51290},[115,90838,51306],{"class":1963},[115,90840,171],{"class":125},[115,90842,51311],{"class":230},[115,90844,51297],{"class":125},[115,90846,90847],{"class":117,"line":1180},[115,90848,2400],{"emptyLinePlaceholder":42},[115,90850,90851,90853,90855],{"class":117,"line":1195},[115,90852,1035],{"class":125},[115,90854,51324],{"class":51290},[115,90856,51297],{"class":125},[115,90858,90859,90861,90863,90865,90867,90869],{"class":117,"line":1201},[115,90860,52134],{"class":125},[115,90862,51334],{"class":51290},[115,90864,51337],{"class":1963},[115,90866,171],{"class":125},[115,90868,51342],{"class":230},[115,90870,51297],{"class":125},[115,90872,90873,90875,90877,90879,90881,90883,90885,90887,90889],{"class":117,"line":1215},[115,90874,52134],{"class":125},[115,90876,51334],{"class":51290},[115,90878,14921],{"class":1963},[115,90880,171],{"class":125},[115,90882,51381],{"class":230},[115,90884,51361],{"class":1963},[115,90886,171],{"class":125},[115,90888,51388],{"class":230},[115,90890,51297],{"class":125},[115,90892,90893,90895,90897,90899,90901],{"class":117,"line":1221},[115,90894,52134],{"class":125},[115,90896,51397],{"class":51290},[115,90898,51400],{"class":125},[115,90900,51397],{"class":51290},[115,90902,51297],{"class":125},[115,90904,90905,90907,90909],{"class":117,"line":1312},[115,90906,52134],{"class":125},[115,90908,5127],{"class":51290},[115,90910,51297],{"class":125},[115,90912,90913,90915],{"class":117,"line":1318},[115,90914,54742],{"class":1963},[115,90916,15573],{"class":125},[115,90918,90919,90921,90923,90925],{"class":117,"line":1330},[115,90920,72586],{"class":174},[115,90922,51427],{"class":125},[115,90924,60495],{"class":174},[115,90926,1291],{"class":125},[115,90928,90929,90931,90933,90935,90937],{"class":117,"line":1612},[115,90930,54761],{"class":174},[115,90932,51427],{"class":125},[115,90934,1722],{"class":174},[115,90936,51482],{"class":121},[115,90938,1291],{"class":125},[115,90940,90941,90943,90945,90947,90949],{"class":117,"line":1617},[115,90942,54775],{"class":174},[115,90944,51427],{"class":125},[115,90946,1722],{"class":174},[115,90948,51482],{"class":121},[115,90950,1291],{"class":125},[115,90952,90953,90955,90957,90959],{"class":117,"line":1623},[115,90954,54874],{"class":174},[115,90956,51427],{"class":125},[115,90958,89996],{"class":174},[115,90960,1291],{"class":125},[115,90962,90963,90965,90967,90969,90971],{"class":117,"line":1628},[115,90964,54912],{"class":174},[115,90966,51427],{"class":125},[115,90968,950],{"class":174},[115,90970,51482],{"class":121},[115,90972,1291],{"class":125},[115,90974,90975,90977,90979,90981],{"class":117,"line":1642},[115,90976,57406],{"class":174},[115,90978,51427],{"class":125},[115,90980,60832],{"class":174},[115,90982,1291],{"class":125},[115,90984,90985,90987,90989,90991],{"class":117,"line":1647},[115,90986,57276],{"class":174},[115,90988,51427],{"class":125},[115,90990,51582],{"class":174},[115,90992,1291],{"class":125},[115,90994,90995,90997,90999,91001,91003],{"class":117,"line":1653},[115,90996,90035],{"class":174},[115,90998,51427],{"class":125},[115,91000,444],{"class":174},[115,91002,51482],{"class":121},[115,91004,1291],{"class":125},[115,91006,91007],{"class":117,"line":1674},[115,91008,2187],{"class":125},[115,91010,91011,91013,91015],{"class":117,"line":1679},[115,91012,52407],{"class":125},[115,91014,5127],{"class":51290},[115,91016,51297],{"class":125},[115,91018,91019,91021,91023],{"class":117,"line":1693},[115,91020,51775],{"class":125},[115,91022,51324],{"class":51290},[115,91024,51297],{"class":125},[115,91026,91027],{"class":117,"line":1698},[115,91028,2400],{"emptyLinePlaceholder":42},[115,91030,91031,91033,91035],{"class":117,"line":1727},[115,91032,1035],{"class":125},[115,91034,51790],{"class":51290},[115,91036,51297],{"class":125},[115,91038,91039,91041,91043,91045,91047,91049,91051,91053],{"class":117,"line":1732},[115,91040,52134],{"class":125},[115,91042,51601],{"class":51290},[115,91044,53476],{"class":1963},[115,91046,171],{"class":125},[115,91048,53481],{"class":230},[115,91050,55304],{"class":125},[115,91052,51601],{"class":51290},[115,91054,51297],{"class":125},[115,91056,91057,91059,91061,91063,91065,91067,91069,91071],{"class":117,"line":1749},[115,91058,52134],{"class":125},[115,91060,51803],{"class":51290},[115,91062,55229],{"class":1963},[115,91064,171],{"class":125},[115,91066,88264],{"class":230},[115,91068,55304],{"class":125},[115,91070,51803],{"class":51290},[115,91072,51297],{"class":125},[115,91074,91075,91077,91079],{"class":117,"line":1754},[115,91076,52134],{"class":125},[115,91078,51803],{"class":51290},[115,91080,51297],{"class":125},[115,91082,91083,91085,91087,91089,91091,91093,91095,91097],{"class":117,"line":1759},[115,91084,11222],{"class":121},[115,91086,86923],{"class":174},[115,91088,13565],{"class":121},[115,91090,54386],{"class":125},[115,91092,54389],{"class":1963},[115,91094,126],{"class":125},[115,91096,90136],{"class":230},[115,91098,132],{"class":125},[115,91100,91101,91103,91105,91107],{"class":117,"line":1764},[115,91102,52209],{"class":121},[115,91104,9439],{"class":125},[115,91106,171],{"class":121},[115,91108,47334],{"class":174},[115,91110,91111,91113,91115],{"class":117,"line":1778},[115,91112,70074],{"class":121},[115,91114,90155],{"class":1963},[115,91116,10854],{"class":125},[115,91118,91119,91121,91123,91125],{"class":117,"line":1783},[115,91120,90162],{"class":125},[115,91122,171],{"class":121},[115,91124,3032],{"class":125},[115,91126,2702],{"class":121},[115,91128,91129],{"class":117,"line":2577},[115,91130,90173],{"class":184},[115,91132,91133],{"class":117,"line":2591},[115,91134,2187],{"class":125},[115,91136,91137],{"class":117,"line":2599},[115,91138,90182],{"class":184},[115,91140,91141],{"class":117,"line":2604},[115,91142,91143],{"class":184},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[115,91145,91146],{"class":117,"line":2610},[115,91147,91148],{"class":184},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[115,91150,91151,91153,91155,91157,91159,91161,91164,91166,91168],{"class":117,"line":2616},[115,91152,90197],{"class":125},[115,91154,57803],{"class":1963},[115,91156,126],{"class":125},[115,91158,90204],{"class":230},[115,91160,90207],{"class":125},[115,91162,91163],{"class":1963},"throttle",[115,91165,90213],{"class":125},[115,91167,65064],{"class":174},[115,91169,30498],{"class":125},[115,91171,91172,91174,91176],{"class":117,"line":2621},[115,91173,52407],{"class":125},[115,91175,51803],{"class":51290},[115,91177,51297],{"class":125},[115,91179,91180,91182,91184],{"class":117,"line":7949},[115,91181,51775],{"class":125},[115,91183,51790],{"class":51290},[115,91185,51297],{"class":125},[115,91187,91188],{"class":117,"line":7973},[115,91189,2400],{"emptyLinePlaceholder":42},[115,91191,91192,91194,91196],{"class":117,"line":7978},[115,91193,51775],{"class":125},[115,91195,50625],{"class":51290},[115,91197,51297],{"class":125},[1132,91199,91200],{},[72,91201,91202],{},"手写一个节流函数来处理",[14,91204,70942],{},[14,91206,90256],{},[14,91208,91209],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91211,91212],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[106,91214,91216],{"className":50623,"code":91215,"language":50625,"meta":22,"style":22},"\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",[112,91217,91218,91228,91242,91246,91254,91268,91288,91300,91308,91314,91324,91336,91348,91358,91370,91380,91390,91402,91406,91414,91422,91426,91434,91452,91470,91478,91496,91506,91514,91524,91528,91532,91536,91541,91546,91551,91556,91561,91566,91583,91589,91597,91608,91623,91630,91635,91640,91650,91655,91660,91665,91669,91673,91677,91697,91705,91713,91717],{"__ignoreMap":22},[115,91219,91220,91222,91224,91226],{"class":117,"line":118},[115,91221,51287],{"class":125},[115,91223,51291],{"class":51290},[115,91225,51294],{"class":1963},[115,91227,51297],{"class":125},[115,91229,91230,91232,91234,91236,91238,91240],{"class":117,"line":37},[115,91231,1035],{"class":125},[115,91233,50625],{"class":51290},[115,91235,51306],{"class":1963},[115,91237,171],{"class":125},[115,91239,51311],{"class":230},[115,91241,51297],{"class":125},[115,91243,91244],{"class":117,"line":1180},[115,91245,2400],{"emptyLinePlaceholder":42},[115,91247,91248,91250,91252],{"class":117,"line":1195},[115,91249,1035],{"class":125},[115,91251,51324],{"class":51290},[115,91253,51297],{"class":125},[115,91255,91256,91258,91260,91262,91264,91266],{"class":117,"line":1201},[115,91257,52134],{"class":125},[115,91259,51334],{"class":51290},[115,91261,51337],{"class":1963},[115,91263,171],{"class":125},[115,91265,51342],{"class":230},[115,91267,51297],{"class":125},[115,91269,91270,91272,91274,91276,91278,91280,91282,91284,91286],{"class":117,"line":1215},[115,91271,52134],{"class":125},[115,91273,51334],{"class":51290},[115,91275,14921],{"class":1963},[115,91277,171],{"class":125},[115,91279,51381],{"class":230},[115,91281,51361],{"class":1963},[115,91283,171],{"class":125},[115,91285,51388],{"class":230},[115,91287,51297],{"class":125},[115,91289,91290,91292,91294,91296,91298],{"class":117,"line":1221},[115,91291,52134],{"class":125},[115,91293,51397],{"class":51290},[115,91295,51400],{"class":125},[115,91297,51397],{"class":51290},[115,91299,51297],{"class":125},[115,91301,91302,91304,91306],{"class":117,"line":1312},[115,91303,52134],{"class":125},[115,91305,5127],{"class":51290},[115,91307,51297],{"class":125},[115,91309,91310,91312],{"class":117,"line":1318},[115,91311,54742],{"class":1963},[115,91313,15573],{"class":125},[115,91315,91316,91318,91320,91322],{"class":117,"line":1330},[115,91317,72586],{"class":174},[115,91319,51427],{"class":125},[115,91321,60495],{"class":174},[115,91323,1291],{"class":125},[115,91325,91326,91328,91330,91332,91334],{"class":117,"line":1612},[115,91327,54761],{"class":174},[115,91329,51427],{"class":125},[115,91331,1722],{"class":174},[115,91333,51482],{"class":121},[115,91335,1291],{"class":125},[115,91337,91338,91340,91342,91344,91346],{"class":117,"line":1617},[115,91339,54775],{"class":174},[115,91341,51427],{"class":125},[115,91343,1722],{"class":174},[115,91345,51482],{"class":121},[115,91347,1291],{"class":125},[115,91349,91350,91352,91354,91356],{"class":117,"line":1623},[115,91351,54874],{"class":174},[115,91353,51427],{"class":125},[115,91355,89996],{"class":174},[115,91357,1291],{"class":125},[115,91359,91360,91362,91364,91366,91368],{"class":117,"line":1628},[115,91361,54912],{"class":174},[115,91363,51427],{"class":125},[115,91365,950],{"class":174},[115,91367,51482],{"class":121},[115,91369,1291],{"class":125},[115,91371,91372,91374,91376,91378],{"class":117,"line":1642},[115,91373,57406],{"class":174},[115,91375,51427],{"class":125},[115,91377,60832],{"class":174},[115,91379,1291],{"class":125},[115,91381,91382,91384,91386,91388],{"class":117,"line":1647},[115,91383,57276],{"class":174},[115,91385,51427],{"class":125},[115,91387,51582],{"class":174},[115,91389,1291],{"class":125},[115,91391,91392,91394,91396,91398,91400],{"class":117,"line":1653},[115,91393,90035],{"class":174},[115,91395,51427],{"class":125},[115,91397,444],{"class":174},[115,91399,51482],{"class":121},[115,91401,1291],{"class":125},[115,91403,91404],{"class":117,"line":1674},[115,91405,2187],{"class":125},[115,91407,91408,91410,91412],{"class":117,"line":1679},[115,91409,52407],{"class":125},[115,91411,5127],{"class":51290},[115,91413,51297],{"class":125},[115,91415,91416,91418,91420],{"class":117,"line":1693},[115,91417,51775],{"class":125},[115,91419,51324],{"class":51290},[115,91421,51297],{"class":125},[115,91423,91424],{"class":117,"line":1698},[115,91425,2400],{"emptyLinePlaceholder":42},[115,91427,91428,91430,91432],{"class":117,"line":1727},[115,91429,1035],{"class":125},[115,91431,51790],{"class":51290},[115,91433,51297],{"class":125},[115,91435,91436,91438,91440,91442,91444,91446,91448,91450],{"class":117,"line":1732},[115,91437,52134],{"class":125},[115,91439,51601],{"class":51290},[115,91441,53476],{"class":1963},[115,91443,171],{"class":125},[115,91445,53481],{"class":230},[115,91447,55304],{"class":125},[115,91449,51601],{"class":51290},[115,91451,51297],{"class":125},[115,91453,91454,91456,91458,91460,91462,91464,91466,91468],{"class":117,"line":1749},[115,91455,52134],{"class":125},[115,91457,51803],{"class":51290},[115,91459,55229],{"class":1963},[115,91461,171],{"class":125},[115,91463,88264],{"class":230},[115,91465,55304],{"class":125},[115,91467,51803],{"class":51290},[115,91469,51297],{"class":125},[115,91471,91472,91474,91476],{"class":117,"line":1754},[115,91473,52134],{"class":125},[115,91475,51803],{"class":51290},[115,91477,51297],{"class":125},[115,91479,91480,91482,91484,91486,91488,91490,91492,91494],{"class":117,"line":1759},[115,91481,11222],{"class":121},[115,91483,86923],{"class":174},[115,91485,13565],{"class":121},[115,91487,54386],{"class":125},[115,91489,54389],{"class":1963},[115,91491,126],{"class":125},[115,91493,90136],{"class":230},[115,91495,132],{"class":125},[115,91497,91498,91500,91502,91504],{"class":117,"line":1764},[115,91499,52209],{"class":121},[115,91501,9439],{"class":125},[115,91503,171],{"class":121},[115,91505,47334],{"class":174},[115,91507,91508,91510,91512],{"class":117,"line":1778},[115,91509,70074],{"class":121},[115,91511,90155],{"class":1963},[115,91513,10854],{"class":125},[115,91515,91516,91518,91520,91522],{"class":117,"line":1783},[115,91517,90162],{"class":125},[115,91519,171],{"class":121},[115,91521,3032],{"class":125},[115,91523,2702],{"class":121},[115,91525,91526],{"class":117,"line":2577},[115,91527,90173],{"class":184},[115,91529,91530],{"class":117,"line":2591},[115,91531,2187],{"class":125},[115,91533,91534],{"class":117,"line":2599},[115,91535,90182],{"class":184},[115,91537,91538],{"class":117,"line":2604},[115,91539,91540],{"class":184},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[115,91542,91543],{"class":117,"line":2610},[115,91544,91545],{"class":184},"    \u002F\u002F 1.声明一个定时器变量\n",[115,91547,91548],{"class":117,"line":2616},[115,91549,91550],{"class":184},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[115,91552,91553],{"class":117,"line":2621},[115,91554,91555],{"class":184},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[115,91557,91558],{"class":117,"line":7949},[115,91559,91560],{"class":184},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[115,91562,91563],{"class":117,"line":7973},[115,91564,91565],{"class":184},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[115,91567,91568,91570,91573,91575,91577,91579,91581],{"class":117,"line":7978},[115,91569,70074],{"class":121},[115,91571,91572],{"class":1963}," throttle",[115,91574,126],{"class":125},[115,91576,90627],{"class":5217},[115,91578,12436],{"class":125},[115,91580,845],{"class":5217},[115,91582,12443],{"class":125},[115,91584,91585,91587],{"class":117,"line":7984},[115,91586,79762],{"class":121},[115,91588,90640],{"class":125},[115,91590,91591,91593,91595],{"class":117,"line":8011},[115,91592,73972],{"class":121},[115,91594,58908],{"class":121},[115,91596,54442],{"class":125},[115,91598,91599,91601,91603,91605],{"class":117,"line":8016},[115,91600,2497],{"class":121},[115,91602,1658],{"class":125},[115,91604,352],{"class":121},[115,91606,91607],{"class":125},"timer) {\n",[115,91609,91610,91613,91615,91617,91619,91621],{"class":117,"line":8022},[115,91611,91612],{"class":125},"          timer ",[115,91614,171],{"class":121},[115,91616,90681],{"class":1963},[115,91618,126],{"class":125},[115,91620,54439],{"class":121},[115,91622,54442],{"class":125},[115,91624,91625,91628],{"class":117,"line":8034},[115,91626,91627],{"class":1963},"            fn",[115,91629,1976],{"class":125},[115,91631,91632],{"class":117,"line":8046},[115,91633,91634],{"class":184},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[115,91636,91637],{"class":117,"line":8058},[115,91638,91639],{"class":184},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[115,91641,91642,91645,91647],{"class":117,"line":9717},[115,91643,91644],{"class":125},"            timer ",[115,91646,171],{"class":121},[115,91648,91649],{"class":174}," null\n",[115,91651,91652],{"class":117,"line":9742},[115,91653,91654],{"class":184},"            \u002F\u002F 不能用clearTimeout(timer)\n",[115,91656,91657],{"class":117,"line":9765},[115,91658,91659],{"class":184},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[115,91661,91662],{"class":117,"line":9789},[115,91663,91664],{"class":125},"          }, t)\n",[115,91666,91667],{"class":117,"line":9794},[115,91668,2529],{"class":125},[115,91670,91671],{"class":117,"line":9799},[115,91672,52388],{"class":125},[115,91674,91675],{"class":117,"line":9804},[115,91676,2187],{"class":125},[115,91678,91679,91681,91683,91685,91687,91689,91691,91693,91695],{"class":117,"line":9813},[115,91680,90197],{"class":125},[115,91682,57803],{"class":1963},[115,91684,126],{"class":125},[115,91686,90204],{"class":230},[115,91688,12436],{"class":125},[115,91690,91163],{"class":1963},[115,91692,90213],{"class":125},[115,91694,65064],{"class":174},[115,91696,30498],{"class":125},[115,91698,91699,91701,91703],{"class":117,"line":9818},[115,91700,52407],{"class":125},[115,91702,51803],{"class":51290},[115,91704,51297],{"class":125},[115,91706,91707,91709,91711],{"class":117,"line":9824},[115,91708,51775],{"class":125},[115,91710,51790],{"class":51290},[115,91712,51297],{"class":125},[115,91714,91715],{"class":117,"line":9845},[115,91716,2400],{"emptyLinePlaceholder":42},[115,91718,91719,91721,91723],{"class":117,"line":9851},[115,91720,51775],{"class":125},[115,91722,50625],{"class":51290},[115,91724,51297],{"class":125},[86,91726,91728],{"id":91727},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[106,91730,91732],{"className":53057,"code":91731,"language":53059,"meta":22,"style":22},"\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",[112,91733,91734,91742,91750,91755,91760,91765,91770,91774,91782],{"__ignoreMap":22},[115,91735,91736,91738,91740],{"class":117,"line":118},[115,91737,1035],{"class":125},[115,91739,51790],{"class":51290},[115,91741,51297],{"class":125},[115,91743,91744,91746,91748],{"class":117,"line":37},[115,91745,52134],{"class":125},[115,91747,51803],{"class":51290},[115,91749,51297],{"class":125},[115,91751,91752],{"class":117,"line":1180},[115,91753,91754],{"class":125},"    let timer = null\n",[115,91756,91757],{"class":117,"line":1195},[115,91758,91759],{"class":125},"    timer = setTimeout(() => {\n",[115,91761,91762],{"class":117,"line":1201},[115,91763,91764],{"class":125},"      clearTimeout(timer)\n",[115,91766,91767],{"class":117,"line":1215},[115,91768,91769],{"class":125},"      console.log(timer)\n",[115,91771,91772],{"class":117,"line":1221},[115,91773,60215],{"class":125},[115,91775,91776,91778,91780],{"class":117,"line":1312},[115,91777,52407],{"class":125},[115,91779,51803],{"class":51290},[115,91781,51297],{"class":125},[115,91783,91784,91786,91788],{"class":117,"line":1318},[115,91785,51775],{"class":125},[115,91787,51790],{"class":51290},[115,91789,51297],{"class":125},[14,91791,91792],{},"输出为1",[14,91794,91795],{},"在开启的定时器里边写清除定时器",[14,91797,91798],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[86,91800,91802],{"id":91801},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91804,91805],{},"页面打开，可以记录上一次的视频播放位置",[14,91807,91808],{},[20,91809],{"alt":22,"src":91810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91812,91813],{},[20,91814],{"alt":22,"src":91815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[106,91817,91819],{"className":50623,"code":91818,"language":50625,"meta":22,"style":22},"\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",[112,91820,91821,91831,91845,91849,91857,91871,91891,91911,91933,91946,91954,91960,91970,91980,91990,91994,91998,92005,92018,92030,92034,92038,92048,92060,92074,92078,92082,92089,92099,92112,92124,92134,92144,92160,92172,92176,92180,92188,92198,92210,92220,92230,92240,92244,92248,92258,92269,92273,92281,92289,92293,92301,92316,92331,92346,92367,92375,92383,92398,92420,92428,92443,92469,92495,92521,92529,92537,92556,92564,92569,92588,92593,92611,92616,92621,92629,92634,92648,92656,92661,92678,92682,92687,92709,92713,92721,92729,92733],{"__ignoreMap":22},[115,91822,91823,91825,91827,91829],{"class":117,"line":118},[115,91824,51287],{"class":125},[115,91826,51291],{"class":51290},[115,91828,51294],{"class":1963},[115,91830,51297],{"class":125},[115,91832,91833,91835,91837,91839,91841,91843],{"class":117,"line":37},[115,91834,1035],{"class":125},[115,91836,50625],{"class":51290},[115,91838,51306],{"class":1963},[115,91840,171],{"class":125},[115,91842,51311],{"class":230},[115,91844,51297],{"class":125},[115,91846,91847],{"class":117,"line":1180},[115,91848,2400],{"emptyLinePlaceholder":42},[115,91850,91851,91853,91855],{"class":117,"line":1195},[115,91852,1035],{"class":125},[115,91854,51324],{"class":51290},[115,91856,51297],{"class":125},[115,91858,91859,91861,91863,91865,91867,91869],{"class":117,"line":1201},[115,91860,52134],{"class":125},[115,91862,51334],{"class":51290},[115,91864,51337],{"class":1963},[115,91866,171],{"class":125},[115,91868,51342],{"class":230},[115,91870,59117],{"class":125},[115,91872,91873,91875,91877,91879,91881,91883,91885,91887,91889],{"class":117,"line":1215},[115,91874,52134],{"class":125},[115,91876,51334],{"class":51290},[115,91878,51353],{"class":1963},[115,91880,171],{"class":125},[115,91882,51358],{"class":230},[115,91884,51361],{"class":1963},[115,91886,171],{"class":125},[115,91888,51366],{"class":230},[115,91890,59117],{"class":125},[115,91892,91893,91895,91897,91899,91901,91903,91905,91907,91909],{"class":117,"line":1221},[115,91894,52134],{"class":125},[115,91896,51334],{"class":51290},[115,91898,14921],{"class":1963},[115,91900,171],{"class":125},[115,91902,51381],{"class":230},[115,91904,51361],{"class":1963},[115,91906,171],{"class":125},[115,91908,51388],{"class":230},[115,91910,59117],{"class":125},[115,91912,91913,91915,91917,91919,91921,91924,91926,91928,91931],{"class":117,"line":1312},[115,91914,52134],{"class":125},[115,91916,51334],{"class":51290},[115,91918,14921],{"class":1963},[115,91920,171],{"class":125},[115,91922,91923],{"class":230},"\"referrer\"",[115,91925,51361],{"class":1963},[115,91927,171],{"class":125},[115,91929,91930],{"class":230},"\"never\"",[115,91932,59117],{"class":125},[115,91934,91935,91937,91939,91942,91944],{"class":117,"line":1318},[115,91936,52134],{"class":125},[115,91938,51397],{"class":51290},[115,91940,91941],{"class":125},">综合案例\u003C\u002F",[115,91943,51397],{"class":51290},[115,91945,51297],{"class":125},[115,91947,91948,91950,91952],{"class":117,"line":1330},[115,91949,52134],{"class":125},[115,91951,5127],{"class":51290},[115,91953,51297],{"class":125},[115,91955,91956,91958],{"class":117,"line":1612},[115,91957,6404],{"class":51290},[115,91959,15573],{"class":125},[115,91961,91962,91964,91966,91968],{"class":117,"line":1617},[115,91963,54685],{"class":174},[115,91965,51427],{"class":125},[115,91967,317],{"class":174},[115,91969,1291],{"class":125},[115,91971,91972,91974,91976,91978],{"class":117,"line":1623},[115,91973,54696],{"class":174},[115,91975,51427],{"class":125},[115,91977,317],{"class":174},[115,91979,1291],{"class":125},[115,91981,91982,91984,91986,91988],{"class":117,"line":1628},[115,91983,72586],{"class":174},[115,91985,51427],{"class":125},[115,91987,60495],{"class":174},[115,91989,1291],{"class":125},[115,91991,91992],{"class":117,"line":1642},[115,91993,2187],{"class":125},[115,91995,91996],{"class":117,"line":1647},[115,91997,2400],{"emptyLinePlaceholder":42},[115,91999,92000,92003],{"class":117,"line":1653},[115,92001,92002],{"class":1963},"    .container",[115,92004,15573],{"class":125},[115,92006,92007,92009,92011,92014,92016],{"class":117,"line":1674},[115,92008,54761],{"class":174},[115,92010,51427],{"class":125},[115,92012,92013],{"class":174},"1200",[115,92015,51482],{"class":121},[115,92017,1291],{"class":125},[115,92019,92020,92022,92024,92026,92028],{"class":117,"line":1679},[115,92021,54696],{"class":174},[115,92023,51427],{"class":125},[115,92025,317],{"class":174},[115,92027,51546],{"class":174},[115,92029,1291],{"class":125},[115,92031,92032],{"class":117,"line":1693},[115,92033,2187],{"class":125},[115,92035,92036],{"class":117,"line":1698},[115,92037,2400],{"emptyLinePlaceholder":42},[115,92039,92040,92043,92046],{"class":117,"line":1727},[115,92041,92042],{"class":1963},"    .video",[115,92044,92045],{"class":51290}," video",[115,92047,15573],{"class":125},[115,92049,92050,92052,92054,92056,92058],{"class":117,"line":1732},[115,92051,54761],{"class":174},[115,92053,51427],{"class":125},[115,92055,436],{"class":174},[115,92057,453],{"class":121},[115,92059,1291],{"class":125},[115,92061,92062,92064,92066,92068,92070,92072],{"class":117,"line":1749},[115,92063,54685],{"class":174},[115,92065,51427],{"class":125},[115,92067,825],{"class":174},[115,92069,51482],{"class":121},[115,92071,4093],{"class":174},[115,92073,1291],{"class":125},[115,92075,92076],{"class":117,"line":1754},[115,92077,2187],{"class":125},[115,92079,92080],{"class":117,"line":1759},[115,92081,2400],{"emptyLinePlaceholder":42},[115,92083,92084,92087],{"class":117,"line":1764},[115,92085,92086],{"class":1963},"    .elevator",[115,92088,15573],{"class":125},[115,92090,92091,92093,92095,92097],{"class":117,"line":1778},[115,92092,54749],{"class":174},[115,92094,51427],{"class":125},[115,92096,86223],{"class":174},[115,92098,1291],{"class":125},[115,92100,92101,92103,92105,92108,92110],{"class":117,"line":1783},[115,92102,54937],{"class":174},[115,92104,51427],{"class":125},[115,92106,92107],{"class":174},"280",[115,92109,51482],{"class":121},[115,92111,1291],{"class":125},[115,92113,92114,92116,92118,92120,92122],{"class":117,"line":2577},[115,92115,86417],{"class":174},[115,92117,51427],{"class":125},[115,92119,825],{"class":174},[115,92121,51482],{"class":121},[115,92123,1291],{"class":125},[115,92125,92126,92128,92130,92132],{"class":117,"line":2591},[115,92127,86230],{"class":174},[115,92129,51427],{"class":125},[115,92131,86235],{"class":174},[115,92133,1291],{"class":125},[115,92135,92136,92138,92140,92142],{"class":117,"line":2599},[115,92137,61711],{"class":174},[115,92139,51427],{"class":125},[115,92141,60832],{"class":174},[115,92143,1291],{"class":125},[115,92145,92146,92148,92150,92152,92154,92156,92158],{"class":117,"line":2604},[115,92147,61967],{"class":174},[115,92149,51427],{"class":125},[115,92151,343],{"class":174},[115,92153,51482],{"class":121},[115,92155,51511],{"class":174},[115,92157,62234],{"class":174},[115,92159,1291],{"class":125},[115,92161,92162,92164,92166,92168,92170],{"class":117,"line":2610},[115,92163,54761],{"class":174},[115,92165,51427],{"class":125},[115,92167,1032],{"class":174},[115,92169,51482],{"class":121},[115,92171,1291],{"class":125},[115,92173,92174],{"class":117,"line":2616},[115,92175,2187],{"class":125},[115,92177,92178],{"class":117,"line":2621},[115,92179,2400],{"emptyLinePlaceholder":42},[115,92181,92182,92184,92186],{"class":117,"line":7949},[115,92183,92086],{"class":1963},[115,92185,1399],{"class":51290},[115,92187,15573],{"class":125},[115,92189,92190,92192,92194,92196],{"class":117,"line":7973},[115,92191,54999],{"class":174},[115,92193,51427],{"class":125},[115,92195,60859],{"class":174},[115,92197,1291],{"class":125},[115,92199,92200,92202,92204,92206,92208],{"class":117,"line":7978},[115,92201,54685],{"class":174},[115,92203,51427],{"class":125},[115,92205,571],{"class":174},[115,92207,51482],{"class":121},[115,92209,1291],{"class":125},[115,92211,92212,92214,92216,92218],{"class":117,"line":7984},[115,92213,63960],{"class":174},[115,92215,51427],{"class":125},[115,92217,54727],{"class":174},[115,92219,1291],{"class":125},[115,92221,92222,92224,92226,92228],{"class":117,"line":8011},[115,92223,57276],{"class":174},[115,92225,51427],{"class":125},[115,92227,51582],{"class":174},[115,92229,1291],{"class":125},[115,92231,92232,92234,92236,92238],{"class":117,"line":8016},[115,92233,57406],{"class":174},[115,92235,51427],{"class":125},[115,92237,62060],{"class":174},[115,92239,1291],{"class":125},[115,92241,92242],{"class":117,"line":8022},[115,92243,2187],{"class":125},[115,92245,92246],{"class":117,"line":8034},[115,92247,2400],{"emptyLinePlaceholder":42},[115,92249,92250,92252,92254,92256],{"class":117,"line":8046},[115,92251,92086],{"class":1963},[115,92253,1399],{"class":51290},[115,92255,64014],{"class":1963},[115,92257,15573],{"class":125},[115,92259,92260,92262,92264,92267],{"class":117,"line":8058},[115,92261,57406],{"class":174},[115,92263,51427],{"class":125},[115,92265,92266],{"class":174},"#1286ff",[115,92268,1291],{"class":125},[115,92270,92271],{"class":117,"line":9717},[115,92272,2187],{"class":125},[115,92274,92275,92277,92279],{"class":117,"line":9742},[115,92276,52407],{"class":125},[115,92278,5127],{"class":51290},[115,92280,51297],{"class":125},[115,92282,92283,92285,92287],{"class":117,"line":9765},[115,92284,51775],{"class":125},[115,92286,51324],{"class":51290},[115,92288,51297],{"class":125},[115,92290,92291],{"class":117,"line":9789},[115,92292,2400],{"emptyLinePlaceholder":42},[115,92294,92295,92297,92299],{"class":117,"line":9794},[115,92296,1035],{"class":125},[115,92298,51790],{"class":51290},[115,92300,51297],{"class":125},[115,92302,92303,92305,92307,92309,92311,92314],{"class":117,"line":9799},[115,92304,52134],{"class":125},[115,92306,51601],{"class":51290},[115,92308,53476],{"class":1963},[115,92310,171],{"class":125},[115,92312,92313],{"class":230},"\"container\"",[115,92315,51297],{"class":125},[115,92317,92318,92320,92322,92324,92326,92329],{"class":117,"line":9804},[115,92319,51331],{"class":125},[115,92321,51601],{"class":51290},[115,92323,53476],{"class":1963},[115,92325,171],{"class":125},[115,92327,92328],{"class":230},"\"header\"",[115,92330,51297],{"class":125},[115,92332,92333,92335,92337,92339,92341,92344],{"class":117,"line":9813},[115,92334,55224],{"class":125},[115,92336,27],{"class":51290},[115,92338,61047],{"class":1963},[115,92340,171],{"class":125},[115,92342,92343],{"class":230},"\"http:\u002F\u002Fpip.itcast.cn\"",[115,92345,51297],{"class":125},[115,92347,92348,92350,92352,92354,92356,92359,92361,92363,92365],{"class":117,"line":9818},[115,92349,55292],{"class":125},[115,92351,20],{"class":51290},[115,92353,55229],{"class":1963},[115,92355,171],{"class":125},[115,92357,92358],{"class":230},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[115,92360,55237],{"class":1963},[115,92362,171],{"class":125},[115,92364,7653],{"class":230},[115,92366,59117],{"class":125},[115,92368,92369,92371,92373],{"class":117,"line":9824},[115,92370,55397],{"class":125},[115,92372,27],{"class":51290},[115,92374,51297],{"class":125},[115,92376,92377,92379,92381],{"class":117,"line":9845},[115,92378,51766],{"class":125},[115,92380,51601],{"class":51290},[115,92382,51297],{"class":125},[115,92384,92385,92387,92389,92391,92393,92396],{"class":117,"line":9851},[115,92386,51331],{"class":125},[115,92388,51601],{"class":51290},[115,92390,53476],{"class":1963},[115,92392,171],{"class":125},[115,92394,92395],{"class":230},"\"video\"",[115,92397,51297],{"class":125},[115,92399,92400,92402,92404,92406,92408,92411,92414,92416,92418],{"class":117,"line":9865},[115,92401,55224],{"class":125},[115,92403,28184],{"class":51290},[115,92405,55229],{"class":1963},[115,92407,171],{"class":125},[115,92409,92410],{"class":230},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[115,92412,92413],{"class":1963}," controls",[115,92415,55304],{"class":125},[115,92417,28184],{"class":51290},[115,92419,51297],{"class":125},[115,92421,92422,92424,92426],{"class":117,"line":9871},[115,92423,51766],{"class":125},[115,92425,51601],{"class":51290},[115,92427,51297],{"class":125},[115,92429,92430,92432,92434,92436,92438,92441],{"class":117,"line":9898},[115,92431,51331],{"class":125},[115,92433,51601],{"class":51290},[115,92435,53476],{"class":1963},[115,92437,171],{"class":125},[115,92439,92440],{"class":230},"\"elevator\"",[115,92442,51297],{"class":125},[115,92444,92445,92447,92449,92451,92453,92455,92458,92460,92462,92465,92467],{"class":117,"line":9907},[115,92446,55224],{"class":125},[115,92448,27],{"class":51290},[115,92450,61047],{"class":1963},[115,92452,171],{"class":125},[115,92454,64226],{"class":230},[115,92456,92457],{"class":1963}," data-ref",[115,92459,171],{"class":125},[115,92461,92395],{"class":230},[115,92463,92464],{"class":125},">视频介绍\u003C\u002F",[115,92466,27],{"class":51290},[115,92468,51297],{"class":125},[115,92470,92471,92473,92475,92477,92479,92481,92483,92485,92488,92491,92493],{"class":117,"line":9913},[115,92472,55224],{"class":125},[115,92474,27],{"class":51290},[115,92476,61047],{"class":1963},[115,92478,171],{"class":125},[115,92480,64226],{"class":230},[115,92482,92457],{"class":1963},[115,92484,171],{"class":125},[115,92486,92487],{"class":230},"\"intro\"",[115,92489,92490],{"class":125},">课程简介\u003C\u002F",[115,92492,27],{"class":51290},[115,92494,51297],{"class":125},[115,92496,92497,92499,92501,92503,92505,92507,92509,92511,92514,92517,92519],{"class":117,"line":9921},[115,92498,55224],{"class":125},[115,92500,27],{"class":51290},[115,92502,61047],{"class":1963},[115,92504,171],{"class":125},[115,92506,64226],{"class":230},[115,92508,92457],{"class":1963},[115,92510,171],{"class":125},[115,92512,92513],{"class":230},"\"outline\"",[115,92515,92516],{"class":125},">评论列表\u003C\u002F",[115,92518,27],{"class":51290},[115,92520,51297],{"class":125},[115,92522,92523,92525,92527],{"class":117,"line":9926},[115,92524,51766],{"class":125},[115,92526,51601],{"class":51290},[115,92528,51297],{"class":125},[115,92530,92531,92533,92535],{"class":117,"line":16605},[115,92532,52407],{"class":125},[115,92534,51601],{"class":51290},[115,92536,51297],{"class":125},[115,92538,92539,92541,92543,92545,92547,92550,92552,92554],{"class":117,"line":16611},[115,92540,52134],{"class":125},[115,92542,51803],{"class":51290},[115,92544,55229],{"class":1963},[115,92546,171],{"class":125},[115,92548,92549],{"class":230},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[115,92551,55304],{"class":125},[115,92553,51803],{"class":51290},[115,92555,51297],{"class":125},[115,92557,92558,92560,92562],{"class":117,"line":16634},[115,92559,52134],{"class":125},[115,92561,51803],{"class":51290},[115,92563,51297],{"class":125},[115,92565,92566],{"class":117,"line":16640},[115,92567,92568],{"class":184},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[115,92570,92571,92573,92575,92577,92579,92581,92583,92586],{"class":117,"line":16663},[115,92572,11222],{"class":121},[115,92574,92045],{"class":174},[115,92576,13565],{"class":121},[115,92578,54386],{"class":125},[115,92580,54389],{"class":1963},[115,92582,126],{"class":125},[115,92584,92585],{"class":230},"'video'",[115,92587,132],{"class":125},[115,92589,92590],{"class":117,"line":16677},[115,92591,92592],{"class":184},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[115,92594,92595,92598,92600,92602,92604,92607,92609],{"class":117,"line":16697},[115,92596,92597],{"class":125},"    video.ontimeupdate ",[115,92599,171],{"class":121},[115,92601,88345],{"class":125},[115,92603,91163],{"class":1963},[115,92605,92606],{"class":125},"(() ",[115,92608,84712],{"class":121},[115,92610,15573],{"class":125},[115,92612,92613],{"class":117,"line":16703},[115,92614,92615],{"class":184},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[115,92617,92618],{"class":117,"line":16714},[115,92619,92620],{"class":184},"      \u002F\u002F 控制台输出当前的时间\n",[115,92622,92623,92626],{"class":117,"line":16737},[115,92624,92625],{"class":184},"      \u002F\u002F console.log(video.currentTime)",[115,92627,92628],{"class":184},"  \u002F\u002F获得当前的视频时间\n",[115,92630,92631],{"class":117,"line":16759},[115,92632,92633],{"class":184},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[115,92635,92636,92638,92640,92642,92645],{"class":117,"line":16764},[115,92637,74673],{"class":125},[115,92639,71644],{"class":1963},[115,92641,126],{"class":125},[115,92643,92644],{"class":230},"'currentTime'",[115,92646,92647],{"class":125},", video.currentTime)\n",[115,92649,92650,92652,92654],{"class":117,"line":16770},[115,92651,54525],{"class":125},[115,92653,6411],{"class":174},[115,92655,132],{"class":125},[115,92657,92658],{"class":117,"line":16784},[115,92659,92660],{"class":184},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[115,92662,92663,92666,92669,92671,92674,92676],{"class":117,"line":16797},[115,92664,92665],{"class":125},"    video.",[115,92667,92668],{"class":1963},"onloadeddata",[115,92670,13565],{"class":121},[115,92672,92673],{"class":125}," () ",[115,92675,84712],{"class":121},[115,92677,15573],{"class":125},[115,92679,92680],{"class":117,"line":16802},[115,92681,60002],{"class":184},[115,92683,92684],{"class":117,"line":16816},[115,92685,92686],{"class":184},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[115,92688,92689,92692,92694,92697,92699,92701,92703,92705,92707],{"class":117,"line":16821},[115,92690,92691],{"class":125},"      video.currentTime ",[115,92693,171],{"class":121},[115,92695,92696],{"class":125}," localStorage.",[115,92698,71675],{"class":1963},[115,92700,126],{"class":125},[115,92702,92644],{"class":230},[115,92704,13715],{"class":125},[115,92706,71347],{"class":121},[115,92708,47334],{"class":174},[115,92710,92711],{"class":117,"line":16827},[115,92712,2187],{"class":125},[115,92714,92715,92717,92719],{"class":117,"line":16832},[115,92716,52407],{"class":125},[115,92718,51803],{"class":51290},[115,92720,51297],{"class":125},[115,92722,92723,92725,92727],{"class":117,"line":16846},[115,92724,51775],{"class":125},[115,92726,51790],{"class":51290},[115,92728,51297],{"class":125},[115,92730,92731],{"class":117,"line":16851},[115,92732,2400],{"emptyLinePlaceholder":42},[115,92734,92735,92737,92739],{"class":117,"line":16856},[115,92736,51775],{"class":125},[115,92738,50625],{"class":51290},[115,92740,51297],{"class":125},[5127,92742,92743],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":92745},[92746,92751,92755,92756,92757,92762,92767,92768,92769,92770,92777,92782,92783,92793,92797,92798,92802],{"id":76681,"depth":37,"text":76682,"children":92747},[92748,92749,92750],{"id":76685,"depth":1180,"text":76686},{"id":76710,"depth":1180,"text":76711},{"id":76722,"depth":1180,"text":76723},{"id":76734,"depth":37,"text":76735,"children":92752},[92753,92754],{"id":76738,"depth":1180,"text":76739},{"id":76753,"depth":1180,"text":76754},{"id":76805,"depth":37,"text":76806},{"id":76849,"depth":37,"text":76850},{"id":76866,"depth":37,"text":76867,"children":92758},[92759,92760,92761],{"id":76870,"depth":1180,"text":76871},{"id":76883,"depth":1180,"text":76884},{"id":76988,"depth":1180,"text":76989},{"id":77277,"depth":37,"text":77278,"children":92763},[92764,92765,92766],{"id":77281,"depth":1180,"text":77282},{"id":77724,"depth":1180,"text":77725},{"id":78135,"depth":1180,"text":78136},{"id":78198,"depth":37,"text":78199},{"id":78277,"depth":37,"text":78278},{"id":78370,"depth":37,"text":78371},{"id":80215,"depth":37,"text":80216,"children":92771},[92772,92773,92774,92775,92776],{"id":80219,"depth":1180,"text":80220},{"id":80231,"depth":1180,"text":80232},{"id":80450,"depth":1180,"text":80451},{"id":80468,"depth":1180,"text":80469},{"id":80528,"depth":1180,"text":80529},{"id":84796,"depth":37,"text":84797,"children":92778},[92779,92780,92781],{"id":84800,"depth":1180,"text":84801},{"id":84818,"depth":1180,"text":84819},{"id":84844,"depth":1180,"text":84845},{"id":84853,"depth":37,"text":84854},{"id":84875,"depth":37,"text":84876,"children":92784},[92785,92786,92787,92788,92789,92790,92791,92792],{"id":84879,"depth":1180,"text":84880},{"id":85140,"depth":1180,"text":85141},{"id":85326,"depth":1180,"text":85327},{"id":85693,"depth":1180,"text":85694},{"id":85809,"depth":1180,"text":85810},{"id":85845,"depth":1180,"text":85846},{"id":85892,"depth":1180,"text":85893},{"id":85926,"depth":1180,"text":85927},{"id":87289,"depth":37,"text":87290,"children":92794},[92795,92796],{"id":87293,"depth":1180,"text":87294},{"id":87330,"depth":1180,"text":87331},{"id":88685,"depth":37,"text":88686},{"id":89056,"depth":37,"text":89057,"children":92799},[92800,92801],{"id":89060,"depth":1180,"text":89061},{"id":89094,"depth":1180,"text":89095},{"id":89823,"depth":37,"text":89824,"children":92803},[92804,92805,92806,92807],{"id":89827,"depth":1180,"text":89828},{"id":90785,"depth":1180,"text":90786},{"id":91727,"depth":1180,"text":91728},{"id":91801,"depth":1180,"text":91802},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76670,"description":39},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92814,"title":92815,"body":92816,"description":92827,"extension":40,"meta":92828,"navigation":42,"path":92830,"seo":92831,"stem":92832,"__hash__":92833},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92817,"toc":92825},[92818],[14,92819,92820,92821],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[27,92822,92823],{"href":92823,"rel":92824},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[31],{"title":22,"searchDepth":37,"depth":37,"links":92826},[],"三件套第三套学习",{"category":92829},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92815,"description":92827},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92835,"title":92836,"body":92837,"description":39,"extension":40,"meta":92942,"navigation":42,"path":92943,"seo":92944,"stem":92945,"__hash__":92946},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92838,"toc":92937},[92839,92846,92849,92852,92855,92859,92868,92871,92874,92878,92887,92890,92894,92897,92917,92920,92934],[14,92840,92841],{},[27,92842,92845],{"href":92843,"rel":92844},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[31],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92847,92836],{"id":92848},"_1安装",[14,92850,92851],{},"numpy是科学计算基础库,底层是C语言",[14,92853,92854],{},"三种方式：",[57,92856,92858],{"id":92857},"_11-通过pip安装","1.1 通过pip安装",[106,92860,92862],{"className":30379,"code":92861,"language":30381,"meta":22,"style":22},"pip install numpy\n",[112,92863,92864],{"__ignoreMap":22},[115,92865,92866],{"class":117,"line":118},[115,92867,92861],{"class":125},[14,92869,92870],{},"首选方式，自动处理依赖项",[14,92872,92873],{},"在提示系统命令符中使用cmd",[57,92875,92877],{"id":92876},"_12-通过anaconda安装","1.2 通过Anaconda安装",[106,92879,92881],{"className":30379,"code":92880,"language":30381,"meta":22,"style":22},"conda install numpy\n",[112,92882,92883],{"__ignoreMap":22},[115,92884,92885],{"class":117,"line":118},[115,92886,92880],{"class":125},[14,92888,92889],{},"自动解决环境依赖",[57,92891,92893],{"id":92892},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92895,92896],{},"对于Debian\u002FUbuntu",[106,92898,92900],{"className":30379,"code":92899,"language":30381,"meta":22,"style":22},"sudo apt-get install python3-numpy\n",[112,92901,92902],{"__ignoreMap":22},[115,92903,92904,92907,92909,92912,92914],{"class":117,"line":118},[115,92905,92906],{"class":125},"sudo apt",[115,92908,657],{"class":121},[115,92910,92911],{"class":125},"get install python3",[115,92913,657],{"class":121},[115,92915,92916],{"class":125},"numpy\n",[14,92918,92919],{},"对于Fedora:",[106,92921,92923],{"className":30379,"code":92922,"language":30381,"meta":22,"style":22},"sudo dnf install python3-numpy\n",[112,92924,92925],{"__ignoreMap":22},[115,92926,92927,92930,92932],{"class":117,"line":118},[115,92928,92929],{"class":125},"sudo dnf install python3",[115,92931,657],{"class":121},[115,92933,92916],{"class":125},[5127,92935,92936],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":22,"searchDepth":37,"depth":37,"links":92938},[92939,92940,92941],{"id":92857,"depth":37,"text":92858},{"id":92876,"depth":37,"text":92877},{"id":92892,"depth":37,"text":92893},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92836,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92948,"title":92949,"body":92950,"description":39,"extension":40,"meta":93063,"navigation":42,"path":93064,"seo":93065,"stem":93066,"__hash__":93067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92951,"toc":93061},[92952,92955,92958,92961,92964,92967,92970,92973,92976,92979,93055,93058],[10,92953,92949],{"id":92954},"_10算数函数",[14,92956,92957],{},"加减乘除运算跟python基础语法没区别",[14,92959,92960],{},"除了python那种方法外还可以使用函数",[14,92962,92963],{},"加：np.add(a,b)",[14,92965,92966],{},"减：np.subtract(a,b)",[14,92968,92969],{},"乘：np.multiply(a,b)",[14,92971,92972],{},"除：np.divide(a,b) == a\u002Fb",[14,92974,92975],{},"取余：np.mod(a,b) == a%b",[14,92977,92978],{},"必须会的用法：",[106,92980,92982],{"className":30379,"code":92981,"language":30381,"meta":22,"style":22},"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",[112,92983,92984,93006,93027,93037,93050],{"__ignoreMap":22},[115,92985,92986,92988,92990,92993,92995,92998,93000,93002,93004],{"class":117,"line":118},[115,92987,27],{"class":125},[115,92989,171],{"class":121},[115,92991,92992],{"class":125},"np.arange(",[115,92994,545],{"class":174},[115,92996,92997],{"class":125},").reshape(",[115,92999,197],{"class":174},[115,93001,503],{"class":125},[115,93003,197],{"class":174},[115,93005,132],{"class":125},[115,93007,93008,93010,93012,93015,93017,93019,93021,93023,93025],{"class":117,"line":37},[115,93009,388],{"class":125},[115,93011,171],{"class":121},[115,93013,93014],{"class":125},"np.array([",[115,93016,571],{"class":174},[115,93018,503],{"class":125},[115,93020,571],{"class":174},[115,93022,503],{"class":125},[115,93024,571],{"class":174},[115,93026,4657],{"class":125},[115,93028,93029,93032,93034],{"class":117,"line":1180},[115,93030,93031],{"class":125},"result",[115,93033,171],{"class":121},[115,93035,93036],{"class":125},"np.empty_like(a)\n",[115,93038,93039,93042,93045,93047],{"class":117,"line":1195},[115,93040,93041],{"class":125},"np.add(a,b,",[115,93043,93044],{"class":5217},"out",[115,93046,171],{"class":121},[115,93048,93049],{"class":125},"result)\n",[115,93051,93052],{"class":117,"line":1201},[115,93053,93054],{"class":125},"result\n",[14,93056,93057],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5127,93059,93060],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":93062},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92949,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93069,"title":93070,"body":93071,"description":39,"extension":40,"meta":93833,"navigation":42,"path":93834,"seo":93835,"stem":93836,"__hash__":93837},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93072,"toc":93820},[93073,93076,93079,93082,93086,93125,93129,93173,93233,93237,93240,93279,93282,93327,93331,93367,93371,93440,93444,93508,93512,93515,93518,93521,93524,93560,93564,93604,93608,93680,93683,93687,93750,93754,93817],[10,93074,93070],{"id":93075},"_11统计函数",[14,93077,93078],{},"sum max min mean",[14,93080,93081],{},"这些有axis参数，可以指定方向",[57,93083,93085],{"id":93084},"_111-sum求和函数","11.1 sum()求和函数",[106,93087,93089],{"className":30379,"code":93088,"language":30381,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[112,93090,93091,93096,93117],{"__ignoreMap":22},[115,93092,93093],{"class":117,"line":118},[115,93094,93095],{"class":184},"#创建一维数组\n",[115,93097,93098,93100,93102,93105,93107,93109,93111,93113,93115],{"class":117,"line":37},[115,93099,27],{"class":125},[115,93101,171],{"class":121},[115,93103,93104],{"class":125},"np.random.randint(",[115,93106,343],{"class":174},[115,93108,503],{"class":125},[115,93110,436],{"class":174},[115,93112,503],{"class":125},[115,93114,825],{"class":174},[115,93116,132],{"class":125},[115,93118,93119,93122],{"class":117,"line":1180},[115,93120,93121],{"class":125},"np.sum(a)",[115,93123,93124],{"class":184},"#求和\n",[57,93126,93128],{"id":93127},"_112-max求最大值函数","11.2 max()求最大值函数",[106,93130,93132],{"className":30379,"code":93131,"language":30381,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[112,93133,93134,93138,93158,93163,93168],{"__ignoreMap":22},[115,93135,93136],{"class":117,"line":118},[115,93137,93095],{"class":184},[115,93139,93140,93142,93144,93146,93148,93150,93152,93154,93156],{"class":117,"line":37},[115,93141,27],{"class":125},[115,93143,171],{"class":121},[115,93145,93104],{"class":125},[115,93147,343],{"class":174},[115,93149,503],{"class":125},[115,93151,436],{"class":174},[115,93153,503],{"class":125},[115,93155,825],{"class":174},[115,93157,132],{"class":125},[115,93159,93160],{"class":117,"line":1180},[115,93161,93162],{"class":125},"np.max(a)\n",[115,93164,93165],{"class":117,"line":1195},[115,93166,93167],{"class":184},"#最大索引(求最大元素的索引)arg\n",[115,93169,93170],{"class":117,"line":1201},[115,93171,93172],{"class":125},"np.argmax(a)\n",[106,93174,93176],{"className":30379,"code":93175,"language":30381,"meta":22,"style":22},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[112,93177,93178,93199,93219,93223],{"__ignoreMap":22},[115,93179,93180,93182,93184,93187,93189,93191,93193,93195,93197],{"class":117,"line":118},[115,93181,10920],{"class":125},[115,93183,171],{"class":121},[115,93185,93186],{"class":125}," np.array([",[115,93188,343],{"class":174},[115,93190,12436],{"class":125},[115,93192,444],{"class":174},[115,93194,12436],{"class":125},[115,93196,197],{"class":174},[115,93198,4657],{"class":125},[115,93200,93201,93203,93205,93207,93209,93211,93213,93215,93217],{"class":117,"line":37},[115,93202,10946],{"class":125},[115,93204,171],{"class":121},[115,93206,93186],{"class":125},[115,93208,197],{"class":174},[115,93210,12436],{"class":125},[115,93212,203],{"class":174},[115,93214,12436],{"class":125},[115,93216,418],{"class":174},[115,93218,4657],{"class":125},[115,93220,93221],{"class":117,"line":1180},[115,93222,2400],{"emptyLinePlaceholder":42},[115,93224,93225,93227,93230],{"class":117,"line":1195},[115,93226,30416],{"class":174},[115,93228,93229],{"class":125},"(np.maximum(a, b))   ",[115,93231,93232],{"class":184},"# [3 5 4]，每个位置上取较大值\n",[57,93234,93236],{"id":93235},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93238,93239],{},"①一维数组：",[106,93241,93243],{"className":30379,"code":93242,"language":30381,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[112,93244,93245,93249,93269,93274],{"__ignoreMap":22},[115,93246,93247],{"class":117,"line":118},[115,93248,93095],{"class":184},[115,93250,93251,93253,93255,93257,93259,93261,93263,93265,93267],{"class":117,"line":37},[115,93252,27],{"class":125},[115,93254,171],{"class":121},[115,93256,93104],{"class":125},[115,93258,343],{"class":174},[115,93260,503],{"class":125},[115,93262,436],{"class":174},[115,93264,503],{"class":125},[115,93266,825],{"class":174},[115,93268,132],{"class":125},[115,93270,93271],{"class":117,"line":1180},[115,93272,93273],{"class":184},"#求平均值\n",[115,93275,93276],{"class":117,"line":1195},[115,93277,93278],{"class":125},"np.mean(a)\n",[14,93280,93281],{},"②二维数组",[106,93283,93285],{"className":30379,"code":93284,"language":30381,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[112,93286,93287,93292,93317,93322],{"__ignoreMap":22},[115,93288,93289],{"class":117,"line":118},[115,93290,93291],{"class":184},"#二维数组\n",[115,93293,93294,93297,93299,93301,93303,93305,93307,93309,93311,93313,93315],{"class":117,"line":37},[115,93295,93296],{"class":125},"aa",[115,93298,171],{"class":121},[115,93300,92992],{"class":125},[115,93302,343],{"class":174},[115,93304,503],{"class":125},[115,93306,648],{"class":174},[115,93308,92997],{"class":125},[115,93310,197],{"class":174},[115,93312,503],{"class":125},[115,93314,418],{"class":174},[115,93316,132],{"class":125},[115,93318,93319],{"class":117,"line":1180},[115,93320,93321],{"class":184},"#对数组中的所有数求平均\n",[115,93323,93324],{"class":117,"line":1195},[115,93325,93326],{"class":125},"np.mean(aa)\n",[57,93328,93330],{"id":93329},"_114-median求中位数函数","11.4 median()求中位数函数",[106,93332,93334],{"className":30379,"code":93333,"language":30381,"meta":22,"style":22},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[112,93335,93336,93341,93357,93362],{"__ignoreMap":22},[115,93337,93338],{"class":117,"line":118},[115,93339,93340],{"class":184},"#求中位数\n",[115,93342,93343,93345,93347,93349,93351,93353,93355],{"class":117,"line":37},[115,93344,388],{"class":125},[115,93346,171],{"class":121},[115,93348,92992],{"class":125},[115,93350,343],{"class":174},[115,93352,503],{"class":125},[115,93354,571],{"class":174},[115,93356,132],{"class":125},[115,93358,93359],{"class":117,"line":1180},[115,93360,93361],{"class":125},"np.median(b)\n",[115,93363,93364],{"class":117,"line":1195},[115,93365,93366],{"class":184},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[57,93368,93370],{"id":93369},"_115-power求幂运算函数","11.5 power()求幂运算函数",[106,93372,93374],{"className":30379,"code":93373,"language":30381,"meta":22,"style":22},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[112,93375,93376,93392,93397,93402,93411,93416,93425],{"__ignoreMap":22},[115,93377,93378,93380,93382,93384,93386,93388,93390],{"class":117,"line":118},[115,93379,388],{"class":125},[115,93381,171],{"class":121},[115,93383,92992],{"class":125},[115,93385,343],{"class":174},[115,93387,503],{"class":125},[115,93389,571],{"class":174},[115,93391,132],{"class":125},[115,93393,93394],{"class":117,"line":37},[115,93395,93396],{"class":184},"#幂运算\n",[115,93398,93399],{"class":117,"line":1180},[115,93400,93401],{"class":184},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[115,93403,93404,93407,93409],{"class":117,"line":1195},[115,93405,93406],{"class":125},"np.power(b,",[115,93408,203],{"class":174},[115,93410,132],{"class":125},[115,93412,93413],{"class":117,"line":1201},[115,93414,93415],{"class":184},"#或者以下代码，将数据存储起来\n",[115,93417,93418,93420,93422],{"class":117,"line":1215},[115,93419,970],{"class":125},[115,93421,171],{"class":121},[115,93423,93424],{"class":125},"np.empty_like(b)\n",[115,93426,93427,93429,93431,93433,93435,93437],{"class":117,"line":1221},[115,93428,93406],{"class":125},[115,93430,203],{"class":174},[115,93432,503],{"class":125},[115,93434,93044],{"class":5217},[115,93436,171],{"class":121},[115,93438,93439],{"class":125},"y)\n",[57,93441,93443],{"id":93442},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[106,93445,93447],{"className":30379,"code":93446,"language":30381,"meta":22,"style":22},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[112,93448,93449,93465,93470,93475,93479,93497],{"__ignoreMap":22},[115,93450,93451,93453,93455,93457,93459,93461,93463],{"class":117,"line":118},[115,93452,388],{"class":125},[115,93454,171],{"class":121},[115,93456,92992],{"class":125},[115,93458,343],{"class":174},[115,93460,503],{"class":125},[115,93462,571],{"class":174},[115,93464,132],{"class":125},[115,93466,93467],{"class":117,"line":37},[115,93468,93469],{"class":184},"#开方\n",[115,93471,93472],{"class":117,"line":1180},[115,93473,93474],{"class":125},"np.sqrt(b)\n",[115,93476,93477],{"class":117,"line":1195},[115,93478,93415],{"class":184},[115,93480,93481,93483,93485,93488,93491,93493,93495],{"class":117,"line":1201},[115,93482,970],{"class":125},[115,93484,171],{"class":121},[115,93486,93487],{"class":125},"np.empty_like(b,",[115,93489,93490],{"class":5217},"dtype",[115,93492,171],{"class":121},[115,93494,165],{"class":174},[115,93496,132],{"class":125},[115,93498,93499,93502,93504,93506],{"class":117,"line":1215},[115,93500,93501],{"class":125},"np.sqrt(b,",[115,93503,93044],{"class":5217},[115,93505,171],{"class":121},[115,93507,93439],{"class":125},[57,93509,93511],{"id":93510},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93513,93514],{},"对数组中的元素累计求和，可指定轴",[14,93516,93517],{},"#累计求和的意思是：",[14,93519,93520],{},"a = np.array([1, 2, 3, 4])",[14,93522,93523],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[106,93525,93527],{"className":30379,"code":93526,"language":30381,"meta":22,"style":22},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[112,93528,93529,93545,93550,93555],{"__ignoreMap":22},[115,93530,93531,93533,93535,93537,93539,93541,93543],{"class":117,"line":118},[115,93532,388],{"class":125},[115,93534,171],{"class":121},[115,93536,92992],{"class":125},[115,93538,343],{"class":174},[115,93540,503],{"class":125},[115,93542,571],{"class":174},[115,93544,132],{"class":125},[115,93546,93547],{"class":117,"line":37},[115,93548,93549],{"class":125},"np.cumsum(b)\n",[115,93551,93552],{"class":117,"line":1180},[115,93553,93554],{"class":184},"#结果：\n",[115,93556,93557],{"class":117,"line":1195},[115,93558,93559],{"class":184},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[57,93561,93563],{"id":93562},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[106,93565,93567],{"className":30379,"code":93566,"language":30381,"meta":22,"style":22},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[112,93568,93569,93585,93590,93595,93599],{"__ignoreMap":22},[115,93570,93571,93573,93575,93577,93579,93581,93583],{"class":117,"line":118},[115,93572,388],{"class":125},[115,93574,171],{"class":121},[115,93576,92992],{"class":125},[115,93578,343],{"class":174},[115,93580,503],{"class":125},[115,93582,571],{"class":174},[115,93584,132],{"class":125},[115,93586,93587],{"class":117,"line":37},[115,93588,93589],{"class":184},"#对数组中的元素累计求积，可指定轴\n",[115,93591,93592],{"class":117,"line":1180},[115,93593,93594],{"class":125},"np.cumprod(b)\n",[115,93596,93597],{"class":117,"line":1195},[115,93598,93554],{"class":184},[115,93600,93601],{"class":117,"line":1201},[115,93602,93603],{"class":184},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[57,93605,93607],{"id":93606},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[106,93609,93611],{"className":30379,"code":93610,"language":30381,"meta":22,"style":22},"#删除数组中的重复数据，并对数据进行排序\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",[112,93612,93613,93618,93666,93671,93675],{"__ignoreMap":22},[115,93614,93615],{"class":117,"line":118},[115,93616,93617],{"class":184},"#删除数组中的重复数据，并对数据进行排序\n",[115,93619,93620,93622,93624,93626,93628,93630,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650,93652,93654,93656,93658,93660,93662,93664],{"class":117,"line":37},[115,93621,27],{"class":125},[115,93623,171],{"class":121},[115,93625,93014],{"class":125},[115,93627,343],{"class":174},[115,93629,503],{"class":125},[115,93631,203],{"class":174},[115,93633,503],{"class":125},[115,93635,197],{"class":174},[115,93637,503],{"class":125},[115,93639,623],{"class":174},[115,93641,503],{"class":125},[115,93643,197],{"class":174},[115,93645,503],{"class":125},[115,93647,571],{"class":174},[115,93649,503],{"class":125},[115,93651,323],{"class":174},[115,93653,503],{"class":125},[115,93655,317],{"class":174},[115,93657,503],{"class":125},[115,93659,900],{"class":174},[115,93661,503],{"class":125},[115,93663,418],{"class":174},[115,93665,4657],{"class":125},[115,93667,93668],{"class":117,"line":1180},[115,93669,93670],{"class":125},"np.unique(a)\n",[115,93672,93673],{"class":117,"line":1195},[115,93674,93554],{"class":184},[115,93676,93677],{"class":117,"line":1201},[115,93678,93679],{"class":184},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93681,93682],{},"升序形式排序",[57,93684,93686],{"id":93685},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[106,93688,93690],{"className":30379,"code":93689,"language":30381,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[112,93691,93692,93740,93745],{"__ignoreMap":22},[115,93693,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738],{"class":117,"line":118},[115,93695,27],{"class":125},[115,93697,171],{"class":121},[115,93699,93014],{"class":125},[115,93701,343],{"class":174},[115,93703,503],{"class":125},[115,93705,203],{"class":174},[115,93707,503],{"class":125},[115,93709,197],{"class":174},[115,93711,503],{"class":125},[115,93713,623],{"class":174},[115,93715,503],{"class":125},[115,93717,197],{"class":174},[115,93719,503],{"class":125},[115,93721,571],{"class":174},[115,93723,503],{"class":125},[115,93725,323],{"class":174},[115,93727,503],{"class":125},[115,93729,317],{"class":174},[115,93731,503],{"class":125},[115,93733,900],{"class":174},[115,93735,503],{"class":125},[115,93737,418],{"class":174},[115,93739,4657],{"class":125},[115,93741,93742],{"class":117,"line":37},[115,93743,93744],{"class":184},"#返回数组中非零元素的索引\n",[115,93746,93747],{"class":117,"line":1180},[115,93748,93749],{"class":125},"np.nonzero(a)\n",[57,93751,93753],{"id":93752},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[106,93755,93757],{"className":30379,"code":93756,"language":30381,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[112,93758,93759,93807,93812],{"__ignoreMap":22},[115,93760,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805],{"class":117,"line":118},[115,93762,27],{"class":125},[115,93764,171],{"class":121},[115,93766,93014],{"class":125},[115,93768,343],{"class":174},[115,93770,503],{"class":125},[115,93772,203],{"class":174},[115,93774,503],{"class":125},[115,93776,197],{"class":174},[115,93778,503],{"class":125},[115,93780,623],{"class":174},[115,93782,503],{"class":125},[115,93784,197],{"class":174},[115,93786,503],{"class":125},[115,93788,571],{"class":174},[115,93790,503],{"class":125},[115,93792,323],{"class":174},[115,93794,503],{"class":125},[115,93796,317],{"class":174},[115,93798,503],{"class":125},[115,93800,900],{"class":174},[115,93802,503],{"class":125},[115,93804,418],{"class":174},[115,93806,4657],{"class":125},[115,93808,93809],{"class":117,"line":37},[115,93810,93811],{"class":184},"#计算一组数中最大值与最小值的差，可指定轴\n",[115,93813,93814],{"class":117,"line":1180},[115,93815,93816],{"class":125},"np.ptp(a)\n",[5127,93818,93819],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":93821},[93822,93823,93824,93825,93826,93827,93828,93829,93830,93831,93832],{"id":93084,"depth":37,"text":93085},{"id":93127,"depth":37,"text":93128},{"id":93235,"depth":37,"text":93236},{"id":93329,"depth":37,"text":93330},{"id":93369,"depth":37,"text":93370},{"id":93442,"depth":37,"text":93443},{"id":93510,"depth":37,"text":93511},{"id":93562,"depth":37,"text":93563},{"id":93606,"depth":37,"text":93607},{"id":93685,"depth":37,"text":93686},{"id":93752,"depth":37,"text":93753},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93070,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93839,"title":93840,"body":93841,"description":39,"extension":40,"meta":94496,"navigation":42,"path":94497,"seo":94498,"stem":94499,"__hash__":94500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93842,"toc":94484},[93843,93846,93850,93853,94069,94073,94076,94285,94289,94355,94360,94364,94367,94370,94408,94412,94415,94420,94424,94427,94430,94435,94439,94442,94446,94449,94452,94457,94461,94464,94467,94472,94476,94481],[10,93844,93840],{"id":93845},"_12其他常用函数",[57,93847,93849],{"id":93848},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93851,93852],{},"将数组的数据按照行列复制扩展",[106,93854,93856],{"className":30379,"code":93855,"language":30381,"meta":22,"style":22},"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",[112,93857,93858,93874,93883,93887,93892,93897,93910,93914,93919,93924,93929,93933,93938,93962,93974,93978,93982,93987,93992,93997,94002,94006,94019,94023,94027,94032,94037,94042,94047,94052,94056,94060,94065],{"__ignoreMap":22},[115,93859,93860,93862,93864,93866,93868,93870,93872],{"class":117,"line":118},[115,93861,27],{"class":125},[115,93863,171],{"class":121},[115,93865,92992],{"class":125},[115,93867,343],{"class":174},[115,93869,503],{"class":125},[115,93871,444],{"class":174},[115,93873,132],{"class":125},[115,93875,93876,93879,93881],{"class":117,"line":37},[115,93877,93878],{"class":125},"np.tile(a,",[115,93880,203],{"class":174},[115,93882,132],{"class":125},[115,93884,93885],{"class":117,"line":1180},[115,93886,93554],{"class":184},[115,93888,93889],{"class":117,"line":1195},[115,93890,93891],{"class":184},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[115,93893,93894],{"class":117,"line":1201},[115,93895,93896],{"class":184},"#行复制两次，列复制三次\n",[115,93898,93899,93902,93904,93906,93908],{"class":117,"line":1215},[115,93900,93901],{"class":125},"np.tile(a,(",[115,93903,203],{"class":174},[115,93905,503],{"class":125},[115,93907,197],{"class":174},[115,93909,30498],{"class":125},[115,93911,93912],{"class":117,"line":1221},[115,93913,93554],{"class":184},[115,93915,93916],{"class":117,"line":1312},[115,93917,93918],{"class":230},"'''\n",[115,93920,93921],{"class":117,"line":1318},[115,93922,93923],{"class":230},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[115,93925,93926],{"class":117,"line":1330},[115,93927,93928],{"class":230},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[115,93930,93931],{"class":117,"line":1612},[115,93932,93918],{"class":230},[115,93934,93935],{"class":117,"line":1617},[115,93936,93937],{"class":184},"#创建二维数组\n",[115,93939,93940,93942,93944,93946,93948,93950,93952,93954,93956,93958,93960],{"class":117,"line":1623},[115,93941,93296],{"class":125},[115,93943,171],{"class":121},[115,93945,92992],{"class":125},[115,93947,343],{"class":174},[115,93949,503],{"class":125},[115,93951,648],{"class":174},[115,93953,92997],{"class":125},[115,93955,418],{"class":174},[115,93957,503],{"class":125},[115,93959,197],{"class":174},[115,93961,132],{"class":125},[115,93963,93964,93967,93969,93971],{"class":117,"line":1628},[115,93965,93966],{"class":125},"np.tile(aa,",[115,93968,203],{"class":174},[115,93970,554],{"class":125},[115,93972,93973],{"class":184},"#一个数的时候就是行\n",[115,93975,93976],{"class":117,"line":1642},[115,93977,93554],{"class":184},[115,93979,93980],{"class":117,"line":1647},[115,93981,93918],{"class":230},[115,93983,93984],{"class":117,"line":1653},[115,93985,93986],{"class":230},"array([[ 1,  2,  3,  1,  2,  3],\n",[115,93988,93989],{"class":117,"line":1674},[115,93990,93991],{"class":230},"       [ 4,  5,  6,  4,  5,  6],\n",[115,93993,93994],{"class":117,"line":1679},[115,93995,93996],{"class":230},"       [ 7,  8,  9,  7,  8,  9],\n",[115,93998,93999],{"class":117,"line":1693},[115,94000,94001],{"class":230},"       [10, 11, 12, 10, 11, 12]])\n",[115,94003,94004],{"class":117,"line":1698},[115,94005,93918],{"class":230},[115,94007,94008,94011,94013,94015,94017],{"class":117,"line":1727},[115,94009,94010],{"class":125},"np.tile(aa,(",[115,94012,203],{"class":174},[115,94014,503],{"class":125},[115,94016,197],{"class":174},[115,94018,30498],{"class":125},[115,94020,94021],{"class":117,"line":1732},[115,94022,93554],{"class":184},[115,94024,94025],{"class":117,"line":1749},[115,94026,93918],{"class":230},[115,94028,94029],{"class":117,"line":1754},[115,94030,94031],{"class":230},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[115,94033,94034],{"class":117,"line":1759},[115,94035,94036],{"class":230},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[115,94038,94039],{"class":117,"line":1764},[115,94040,94041],{"class":230},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[115,94043,94044],{"class":117,"line":1778},[115,94045,94046],{"class":230},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[115,94048,94049],{"class":117,"line":1783},[115,94050,94051],{"class":230},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[115,94053,94054],{"class":117,"line":2577},[115,94055,94036],{"class":230},[115,94057,94058],{"class":117,"line":2591},[115,94059,94041],{"class":230},[115,94061,94062],{"class":117,"line":2599},[115,94063,94064],{"class":230},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[115,94066,94067],{"class":117,"line":2604},[115,94068,93918],{"class":230},[57,94070,94072],{"id":94071},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94074,94075],{},"repeat()将数组中的每个元素重复若干次",[106,94077,94079],{"className":30379,"code":94078,"language":30381,"meta":22,"style":22},"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",[112,94080,94081,94097,94106,94110,94115,94139,94144,94153,94157,94162,94166,94171,94187,94191,94195,94200,94205,94210,94214,94219,94223,94228,94233,94237,94253,94257,94261,94266,94271,94276,94281],{"__ignoreMap":22},[115,94082,94083,94085,94087,94089,94091,94093,94095],{"class":117,"line":118},[115,94084,27],{"class":125},[115,94086,171],{"class":121},[115,94088,92992],{"class":125},[115,94090,343],{"class":174},[115,94092,503],{"class":125},[115,94094,444],{"class":174},[115,94096,132],{"class":125},[115,94098,94099,94102,94104],{"class":117,"line":37},[115,94100,94101],{"class":125},"np.repeat(a,",[115,94103,197],{"class":174},[115,94105,132],{"class":125},[115,94107,94108],{"class":117,"line":1180},[115,94109,93554],{"class":184},[115,94111,94112],{"class":117,"line":1195},[115,94113,94114],{"class":184},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[115,94116,94117,94119,94121,94123,94125,94127,94129,94131,94133,94135,94137],{"class":117,"line":1201},[115,94118,93296],{"class":125},[115,94120,171],{"class":121},[115,94122,92992],{"class":125},[115,94124,343],{"class":174},[115,94126,503],{"class":125},[115,94128,648],{"class":174},[115,94130,92997],{"class":125},[115,94132,418],{"class":174},[115,94134,503],{"class":125},[115,94136,197],{"class":174},[115,94138,132],{"class":125},[115,94140,94141],{"class":117,"line":1215},[115,94142,94143],{"class":184},"#这个重复之后二维变成一维\n",[115,94145,94146,94149,94151],{"class":117,"line":1221},[115,94147,94148],{"class":125},"np.repeat(aa,",[115,94150,203],{"class":174},[115,94152,132],{"class":125},[115,94154,94155],{"class":117,"line":1312},[115,94156,93918],{"class":230},[115,94158,94159],{"class":117,"line":1318},[115,94160,94161],{"class":230},"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",[115,94163,94164],{"class":117,"line":1330},[115,94165,93918],{"class":230},[115,94167,94168],{"class":117,"line":1612},[115,94169,94170],{"class":184},"#指定axis\n",[115,94172,94173,94175,94177,94179,94181,94183,94185],{"class":117,"line":1617},[115,94174,94148],{"class":125},[115,94176,203],{"class":174},[115,94178,503],{"class":125},[115,94180,47515],{"class":5217},[115,94182,171],{"class":121},[115,94184,317],{"class":174},[115,94186,132],{"class":125},[115,94188,94189],{"class":117,"line":1623},[115,94190,93554],{"class":184},[115,94192,94193],{"class":117,"line":1628},[115,94194,93918],{"class":230},[115,94196,94197],{"class":117,"line":1642},[115,94198,94199],{"class":230},"array([[ 1,  2,  3],\n",[115,94201,94202],{"class":117,"line":1647},[115,94203,94204],{"class":230},"       [ 1,  2,  3],\n",[115,94206,94207],{"class":117,"line":1653},[115,94208,94209],{"class":230},"       [ 4,  5,  6],\n",[115,94211,94212],{"class":117,"line":1674},[115,94213,94209],{"class":230},[115,94215,94216],{"class":117,"line":1679},[115,94217,94218],{"class":230},"       [ 7,  8,  9],\n",[115,94220,94221],{"class":117,"line":1693},[115,94222,94218],{"class":230},[115,94224,94225],{"class":117,"line":1698},[115,94226,94227],{"class":230},"       [10, 11, 12],\n",[115,94229,94230],{"class":117,"line":1727},[115,94231,94232],{"class":230},"       [10, 11, 12]])\n",[115,94234,94235],{"class":117,"line":1732},[115,94236,93918],{"class":230},[115,94238,94239,94241,94243,94245,94247,94249,94251],{"class":117,"line":1749},[115,94240,94148],{"class":125},[115,94242,203],{"class":174},[115,94244,503],{"class":125},[115,94246,47515],{"class":5217},[115,94248,171],{"class":121},[115,94250,343],{"class":174},[115,94252,132],{"class":125},[115,94254,94255],{"class":117,"line":1754},[115,94256,93554],{"class":184},[115,94258,94259],{"class":117,"line":1759},[115,94260,93918],{"class":230},[115,94262,94263],{"class":117,"line":1764},[115,94264,94265],{"class":230},"array([[ 1,  1,  2,  2,  3,  3],\n",[115,94267,94268],{"class":117,"line":1778},[115,94269,94270],{"class":230},"       [ 4,  4,  5,  5,  6,  6],\n",[115,94272,94273],{"class":117,"line":1783},[115,94274,94275],{"class":230},"       [ 7,  7,  8,  8,  9,  9],\n",[115,94277,94278],{"class":117,"line":2577},[115,94279,94280],{"class":230},"       [10, 10, 11, 11, 12, 12]])\n",[115,94282,94283],{"class":117,"line":2591},[115,94284,93918],{"class":230},[57,94286,94288],{"id":94287},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[106,94290,94292],{"className":30379,"code":94291,"language":30381,"meta":22,"style":22},"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",[112,94293,94294,94310,94315,94327,94331,94336,94346,94350],{"__ignoreMap":22},[115,94295,94296,94298,94300,94302,94304,94306,94308],{"class":117,"line":118},[115,94297,27],{"class":125},[115,94299,171],{"class":121},[115,94301,92992],{"class":125},[115,94303,343],{"class":174},[115,94305,503],{"class":125},[115,94307,444],{"class":174},[115,94309,132],{"class":125},[115,94311,94312],{"class":117,"line":37},[115,94313,94314],{"class":184},"#array([，2，3，4])\n",[115,94316,94317,94320,94322,94324],{"class":117,"line":1180},[115,94318,94319],{"class":125},"np.roll(a,",[115,94321,203],{"class":174},[115,94323,554],{"class":125},[115,94325,94326],{"class":184},"#传正数向后调多少位，传负数向前调多少位\n",[115,94328,94329],{"class":117,"line":1195},[115,94330,93554],{"class":184},[115,94332,94333],{"class":117,"line":1201},[115,94334,94335],{"class":184},"#array([3, 4, 1, 2])\n",[115,94337,94338,94340,94342,94344],{"class":117,"line":1215},[115,94339,94319],{"class":125},[115,94341,657],{"class":121},[115,94343,343],{"class":174},[115,94345,132],{"class":125},[115,94347,94348],{"class":117,"line":1221},[115,94349,93554],{"class":184},[115,94351,94352],{"class":117,"line":1312},[115,94353,94354],{"class":184},"#array([2, 3, 4, 1])\n",[14,94356,94357],{},[20,94358],{"alt":22,"src":94359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[57,94361,94363],{"id":94362},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94365,94366],{},"resize()重新调整数组的大小",[14,94368,94369],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[106,94371,94373],{"className":30379,"code":94372,"language":30381,"meta":22,"style":22},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[112,94374,94375,94380,94393],{"__ignoreMap":22},[115,94376,94377],{"class":117,"line":118},[115,94378,94379],{"class":184},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[115,94381,94382,94385,94387,94389,94391],{"class":117,"line":37},[115,94383,94384],{"class":125},"np.resize(aa,(",[115,94386,203],{"class":174},[115,94388,503],{"class":125},[115,94390,469],{"class":174},[115,94392,30498],{"class":125},[115,94394,94395,94397,94399,94401,94403,94405],{"class":117,"line":1180},[115,94396,94384],{"class":125},[115,94398,203],{"class":174},[115,94400,503],{"class":125},[115,94402,545],{"class":174},[115,94404,82761],{"class":125},[115,94406,94407],{"class":184},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[57,94409,94411],{"id":94410},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94413,94414],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94416,94417],{},[20,94418],{"alt":22,"src":94419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[57,94421,94423],{"id":94422},"_126-保存加载文件","12.6 保存加载文件",[14,94425,94426],{},"savetxt():将数据保存到txt文件中",[14,94428,94429],{},"loadtxt():从文件加载数据",[14,94431,94432],{},[20,94433],{"alt":22,"src":94434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[57,94436,94438],{"id":94437},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94440,94441],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[57,94443,94445],{"id":94444},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94447,94448],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94450,94451],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94453,94454],{},[20,94455],{"alt":22,"src":94456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[57,94458,94460],{"id":94459},"_129-where语句","12.9 where语句",[14,94462,94463],{},"np.where(条件,x,y)",[14,94465,94466],{},"如果条件为True,对应值为x,否则对应值为y",[14,94468,94469],{},[20,94470],{"alt":22,"src":94471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[57,94473,94475],{"id":94474},"_1210-dot矩阵","12.10 dot()矩阵",[14,94477,94478],{},[20,94479],{"alt":22,"src":94480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5127,94482,94483],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":94485},[94486,94487,94488,94489,94490,94491,94492,94493,94494,94495],{"id":93848,"depth":37,"text":93849},{"id":94071,"depth":37,"text":94072},{"id":94287,"depth":37,"text":94288},{"id":94362,"depth":37,"text":94363},{"id":94410,"depth":37,"text":94411},{"id":94422,"depth":37,"text":94423},{"id":94437,"depth":37,"text":94438},{"id":94444,"depth":37,"text":94445},{"id":94459,"depth":37,"text":94460},{"id":94474,"depth":37,"text":94475},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93840,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94502,"title":94503,"body":94504,"description":39,"extension":40,"meta":94857,"navigation":42,"path":94858,"seo":94859,"stem":94860,"__hash__":94861},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94505,"toc":94855},[94506,94509,94512,94515,94518,94521,94586,94588,94852],[10,94507,94503],{"id":94508},"_13数组排序",[14,94510,94511],{},"排序主要用到的方法是np.sort和np.argsort",[14,94513,94514],{},"其中np.sort()对数组直接排序",[14,94516,94517],{},"而np.argsort()是返回排序后的原始索引",[14,94519,94520],{},"①一维数组",[106,94522,94524],{"className":30379,"code":94523,"language":30381,"meta":22,"style":22},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[112,94525,94526,94530,94570,94578],{"__ignoreMap":22},[115,94527,94528],{"class":117,"line":118},[115,94529,93095],{"class":184},[115,94531,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558,94560,94562,94564,94566,94568],{"class":117,"line":37},[115,94533,27],{"class":125},[115,94535,171],{"class":121},[115,94537,93014],{"class":125},[115,94539,197],{"class":174},[115,94541,503],{"class":125},[115,94543,623],{"class":174},[115,94545,503],{"class":125},[115,94547,520],{"class":174},[115,94549,503],{"class":125},[115,94551,900],{"class":174},[115,94553,503],{"class":125},[115,94555,404],{"class":174},[115,94557,503],{"class":125},[115,94559,1018],{"class":174},[115,94561,503],{"class":125},[115,94563,469],{"class":174},[115,94565,503],{"class":125},[115,94567,571],{"class":174},[115,94569,4657],{"class":125},[115,94571,94572,94575],{"class":117,"line":1180},[115,94573,94574],{"class":125},"np.sort(a)",[115,94576,94577],{"class":184},"#升序排序\n",[115,94579,94580,94583],{"class":117,"line":1195},[115,94581,94582],{"class":125},"np.argsort(a)",[115,94584,94585],{"class":184},"#按照元素大小来索引排序\n",[14,94587,93281],{},[106,94589,94591],{"className":30379,"code":94590,"language":30381,"meta":22,"style":22},"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",[112,94592,94593,94605,94631,94636,94640,94645,94650,94655,94660,94664,94672,94676,94681,94686,94691,94696,94700,94705,94718,94722,94727,94732,94737,94742,94746,94751,94763,94767,94771,94775,94779,94783,94787,94792,94807,94812,94821,94826,94830,94834,94839,94843,94848],{"__ignoreMap":22},[115,94594,94595,94598,94600,94602],{"class":117,"line":118},[115,94596,94597],{"class":125},"np.random.seed(",[115,94599,317],{"class":174},[115,94601,554],{"class":125},[115,94603,94604],{"class":184},"#保证每次值一样\n",[115,94606,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629],{"class":117,"line":37},[115,94608,93296],{"class":125},[115,94610,171],{"class":121},[115,94612,93104],{"class":125},[115,94614,436],{"class":174},[115,94616,503],{"class":125},[115,94618,31497],{"class":5217},[115,94620,171],{"class":121},[115,94622,126],{"class":125},[115,94624,418],{"class":174},[115,94626,503],{"class":125},[115,94628,469],{"class":174},[115,94630,30498],{"class":125},[115,94632,94633],{"class":117,"line":1180},[115,94634,94635],{"class":184},"#原数组：\n",[115,94637,94638],{"class":117,"line":1195},[115,94639,93918],{"class":230},[115,94641,94642],{"class":117,"line":1201},[115,94643,94644],{"class":230},"array([[44, 47, 64, 67, 67,  9],\n",[115,94646,94647],{"class":117,"line":1215},[115,94648,94649],{"class":230},"       [83, 21, 36, 87, 70, 88],\n",[115,94651,94652],{"class":117,"line":1221},[115,94653,94654],{"class":230},"       [88, 12, 58, 65, 39, 87],\n",[115,94656,94657],{"class":117,"line":1312},[115,94658,94659],{"class":230},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[115,94661,94662],{"class":117,"line":1318},[115,94663,93918],{"class":230},[115,94665,94666,94669],{"class":117,"line":1330},[115,94667,94668],{"class":125},"np.sort(aa)",[115,94670,94671],{"class":184},"#每行进行了排序\n",[115,94673,94674],{"class":117,"line":1612},[115,94675,93918],{"class":230},[115,94677,94678],{"class":117,"line":1617},[115,94679,94680],{"class":230},"array([[ 9, 44, 47, 64, 67, 67],\n",[115,94682,94683],{"class":117,"line":1623},[115,94684,94685],{"class":230},"       [21, 36, 70, 83, 87, 88],\n",[115,94687,94688],{"class":117,"line":1628},[115,94689,94690],{"class":230},"       [12, 39, 58, 65, 87, 88],\n",[115,94692,94693],{"class":117,"line":1642},[115,94694,94695],{"class":230},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[115,94697,94698],{"class":117,"line":1647},[115,94699,93918],{"class":230},[115,94701,94702],{"class":117,"line":1653},[115,94703,94704],{"class":184},"#axis=0时\n",[115,94706,94707,94710,94712,94714,94716],{"class":117,"line":1674},[115,94708,94709],{"class":125},"np.sort(aa,",[115,94711,47515],{"class":5217},[115,94713,171],{"class":121},[115,94715,317],{"class":174},[115,94717,132],{"class":125},[115,94719,94720],{"class":117,"line":1679},[115,94721,93918],{"class":230},[115,94723,94724],{"class":117,"line":1693},[115,94725,94726],{"class":230},"array([[44, 12, 36, 37, 25,  9],\n",[115,94728,94729],{"class":117,"line":1698},[115,94730,94731],{"class":230},"       [46, 21, 58, 65, 39, 77],\n",[115,94733,94734],{"class":117,"line":1727},[115,94735,94736],{"class":230},"       [83, 47, 64, 67, 67, 87],\n",[115,94738,94739],{"class":117,"line":1732},[115,94740,94741],{"class":230},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[115,94743,94744],{"class":117,"line":1749},[115,94745,93918],{"class":230},[115,94747,94748],{"class":117,"line":1754},[115,94749,94750],{"class":184},"#axis=1时,为默认值\n",[115,94752,94753,94755,94757,94759,94761],{"class":117,"line":1759},[115,94754,94709],{"class":125},[115,94756,47515],{"class":5217},[115,94758,171],{"class":121},[115,94760,343],{"class":174},[115,94762,132],{"class":125},[115,94764,94765],{"class":117,"line":1764},[115,94766,93918],{"class":230},[115,94768,94769],{"class":117,"line":1778},[115,94770,94680],{"class":230},[115,94772,94773],{"class":117,"line":1783},[115,94774,94685],{"class":230},[115,94776,94777],{"class":117,"line":2577},[115,94778,94690],{"class":230},[115,94780,94781],{"class":117,"line":2591},[115,94782,94695],{"class":230},[115,94784,94785],{"class":117,"line":2599},[115,94786,93918],{"class":230},[115,94788,94789],{"class":117,"line":2604},[115,94790,94791],{"class":184},"#按最后一列排序\n",[115,94793,94794,94796,94798,94801,94803,94805],{"class":117,"line":2610},[115,94795,388],{"class":125},[115,94797,171],{"class":121},[115,94799,94800],{"class":125},"aa[:,",[115,94802,657],{"class":121},[115,94804,343],{"class":174},[115,94806,33247],{"class":125},[115,94808,94809],{"class":117,"line":2616},[115,94810,94811],{"class":184},"#获取最后一列排好序的索引\n",[115,94813,94814,94816,94818],{"class":117,"line":2621},[115,94815,74048],{"class":125},[115,94817,171],{"class":121},[115,94819,94820],{"class":125},"np.argsort(b)\n",[115,94822,94823],{"class":117,"line":7949},[115,94824,94825],{"class":125},"aa[index]\n",[115,94827,94828],{"class":117,"line":7973},[115,94829,93918],{"class":230},[115,94831,94832],{"class":117,"line":7978},[115,94833,94644],{"class":230},[115,94835,94836],{"class":117,"line":7984},[115,94837,94838],{"class":230},"       [46, 88, 81, 37, 25, 77],\n",[115,94840,94841],{"class":117,"line":8011},[115,94842,94654],{"class":230},[115,94844,94845],{"class":117,"line":8016},[115,94846,94847],{"class":230},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[115,94849,94850],{"class":117,"line":8022},[115,94851,93918],{"class":230},[5127,94853,94854],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":22,"searchDepth":37,"depth":37,"links":94856},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94503,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94863,"title":94864,"body":94865,"description":39,"extension":40,"meta":94895,"navigation":42,"path":94896,"seo":94897,"stem":94898,"__hash__":94899},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94866,"toc":94893},[94867,94870,94873,94876,94879,94882,94885,94888],[10,94868,94864],{"id":94869},"_14广播机制",[14,94871,94872],{},"广播的规则：",[14,94874,94875],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94877,94878],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94880,94881],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94883,94884],{},"3.如果没有维度形状为1，则会引发异常",[14,94886,94887],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94889,94890],{},[20,94891],{"alt":22,"src":94892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":22,"searchDepth":37,"depth":37,"links":94894},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94864,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94901,"title":94902,"body":94903,"description":39,"extension":40,"meta":95001,"navigation":42,"path":95002,"seo":95003,"stem":95004,"__hash__":95005},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94904,"toc":94999},[94905,94908,94911,94996],[10,94906,94902],{"id":94907},"_15比较掩码",[14,94909,94910],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[106,94912,94914],{"className":30379,"code":94913,"language":30381,"meta":22,"style":22},"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",[112,94915,94916,94962,94973,94987,94991],{"__ignoreMap":22},[115,94917,94918,94920,94922,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959],{"class":117,"line":118},[115,94919,27],{"class":125},[115,94921,171],{"class":121},[115,94923,94924],{"class":125},"np.array([[",[115,94926,343],{"class":174},[115,94928,503],{"class":125},[115,94930,203],{"class":174},[115,94932,503],{"class":125},[115,94934,197],{"class":174},[115,94936,48031],{"class":125},[115,94938,597],{"class":174},[115,94940,503],{"class":125},[115,94942,623],{"class":174},[115,94944,503],{"class":125},[115,94946,648],{"class":174},[115,94948,48031],{"class":125},[115,94950,850],{"class":174},[115,94952,503],{"class":125},[115,94954,875],{"class":174},[115,94956,503],{"class":125},[115,94958,900],{"class":174},[115,94960,94961],{"class":125},"]])\n",[115,94963,94964,94966,94968,94970],{"class":117,"line":37},[115,94965,27],{"class":125},[115,94967,1035],{"class":121},[115,94969,825],{"class":174},[115,94971,94972],{"class":184},"#结果是一个由True,False组成的数组\n",[115,94974,94975,94978,94980,94982,94984],{"class":117,"line":1180},[115,94976,94977],{"class":125},"a[a",[115,94979,1035],{"class":121},[115,94981,825],{"class":174},[115,94983,1065],{"class":125},[115,94985,94986],{"class":184},"#小于20的元素会存到这个数组中\n",[115,94988,94989],{"class":117,"line":1195},[115,94990,93554],{"class":184},[115,94992,94993],{"class":117,"line":1201},[115,94994,94995],{"class":184},"#array([ 1,  2,  3, 11, 12, 13])\n",[5127,94997,94998],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":95000},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94902,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95007,"title":95008,"body":95009,"description":39,"extension":40,"meta":95101,"navigation":42,"path":95102,"seo":95103,"stem":95104,"__hash__":95105},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95010,"toc":95099},[95011,95014,95017,95020,95023,95026,95091,95096],[10,95012,95008],{"id":95013},"_16魔法命令time",[14,95015,95016],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95018,95019],{},"%:行模式",[14,95021,95022],{},"%%:单元格模式",[14,95024,95025],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[106,95027,95029],{"className":30379,"code":95028,"language":30381,"meta":22,"style":22},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[112,95030,95031,95036,95043,95048,95057,95070,95074,95082],{"__ignoreMap":22},[115,95032,95033],{"class":117,"line":118},[115,95034,95035],{"class":184},"#程序执行时间\n",[115,95037,95038,95040],{"class":117,"line":37},[115,95039,30393],{"class":121},[115,95041,95042],{"class":125}," time \n",[115,95044,95045],{"class":117,"line":1180},[115,95046,95047],{"class":184},"#获取时间\n",[115,95049,95050,95053,95055],{"class":117,"line":1195},[115,95051,95052],{"class":125},"start",[115,95054,171],{"class":121},[115,95056,32419],{"class":125},[115,95058,95059,95062,95065,95067],{"class":117,"line":1201},[115,95060,95061],{"class":125},"time.sleep(",[115,95063,95064],{"class":174},"0.4",[115,95066,554],{"class":125},[115,95068,95069],{"class":184},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[115,95071,95072],{"class":117,"line":1215},[115,95073,95047],{"class":184},[115,95075,95076,95078,95080],{"class":117,"line":1221},[115,95077,45802],{"class":125},[115,95079,171],{"class":121},[115,95081,32419],{"class":125},[115,95083,95084,95086,95088],{"class":117,"line":1312},[115,95085,45802],{"class":125},[115,95087,657],{"class":121},[115,95089,95090],{"class":125},"start\n",[14,95092,95093],{},[20,95094],{"alt":22,"src":95095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5127,95097,95098],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":95100},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95008,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95107,"title":95108,"body":95109,"description":39,"extension":40,"meta":95144,"navigation":42,"path":95145,"seo":95146,"stem":95147,"__hash__":95148},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95110,"toc":95142},[95111,95114,95117,95120,95123,95126,95129,95132,95137],[10,95112,95108],{"id":95113},"_17魔法命令timeit",[14,95115,95116],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95118,95119],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95121,95122],{},"单元格模式：",[14,95124,95125],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95127,95128],{},"初始化语句执行次数由轮数来决定",[14,95130,95131],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95133,95134],{},[20,95135],{"alt":22,"src":95136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95138,95139],{},[20,95140],{"alt":22,"src":95141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":22,"searchDepth":37,"depth":37,"links":95143},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95108,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95150,"title":95151,"body":95152,"description":39,"extension":40,"meta":95170,"navigation":42,"path":95171,"seo":95172,"stem":95173,"__hash__":95174},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95153,"toc":95168},[95154,95157,95160,95163],[10,95155,95151],{"id":95156},"_18魔法命令writefile和run",[14,95158,95159],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95161,95162],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95164,95165],{},[20,95166],{"alt":22,"src":95167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":22,"searchDepth":37,"depth":37,"links":95169},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95151,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95176,"title":95177,"body":95178,"description":39,"extension":40,"meta":95231,"navigation":42,"path":95232,"seo":95233,"stem":95234,"__hash__":95235},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95179,"toc":95229},[95180,95183,95186,95188,95191,95194,95199,95202,95205,95208,95211,95214,95217,95220,95223,95226],[10,95181,95177],{"id":95182},"_19魔法命令memit",[14,95184,95185],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95187,24600],{},[14,95189,95190],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95192,95193],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95195,95196],{},[20,95197],{"alt":22,"src":95198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95200,95201],{},"补充：",[14,95203,95204],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95206,95207],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95209,95210],{},"解决方法：",[14,95212,95213],{},"1.cmd",[14,95215,95216],{},"2.依次输入以下代码：",[14,95218,95219],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95221,95222],{},"pip install --upgrade ipython",[14,95224,95225],{},"#升级 memory_profiler 和 setuptools",[14,95227,95228],{},"pip install --upgrade memory_profiler setuptools",{"title":22,"searchDepth":37,"depth":37,"links":95230},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95177,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95237,"title":95238,"body":95239,"description":39,"extension":40,"meta":96885,"navigation":42,"path":96886,"seo":96887,"stem":96888,"__hash__":96889},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95240,"toc":96855},[95241,95244,95248,95252,95313,95316,95321,95325,95330,95335,95340,95345,95348,95353,95357,95361,95394,95397,95400,95403,95455,95458,95494,95497,95539,95543,95564,95566,95603,95605,95610,95612,95617,95621,95624,95652,95656,95660,95713,95717,95809,95813,95817,95820,95825,95829,95854,95859,95863,95866,95869,95872,95875,95878,95881,95884,95896,95900,95904,95907,95939,95942,95965,95968,95994,95997,96023,96026,96060,96063,96125,96129,96132,96136,96139,96165,96168,96171,96176,96179,96248,96250,96255,96316,96319,96330,96336,96341,96345,96348,96361,96365,96380,96382,96405,96407,96433,96436,96439,96442,96490,96492,96497,96501,96505,96532,96536,96563,96566,96571,96576,96666,96670,96728,96733,96736,96739,96781,96785,96841,96846,96849,96852],[10,95242,95238],{"id":95243},"_2创建数组",[57,95245,95247],{"id":95246},"_21-array函数创建数组","2.1 array()函数创建数组",[86,95249,95251],{"id":95250},"_221-函数语句","2.2.1 函数语句",[106,95253,95255],{"className":30379,"code":95254,"language":30381,"meta":22,"style":22},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[112,95256,95257],{"__ignoreMap":22},[115,95258,95259,95262,95265,95267,95269,95271,95273,95275,95278,95280,95283,95285,95288,95290,95292,95294,95297,95299,95302,95304,95307,95309,95311],{"class":117,"line":118},[115,95260,95261],{"class":125},"numpy.array(",[115,95263,95264],{"class":174},"object",[115,95266,12436],{"class":125},[115,95268,93490],{"class":5217},[115,95270,13565],{"class":121},[115,95272,38934],{"class":174},[115,95274,12436],{"class":125},[115,95276,95277],{"class":5217},"copy",[115,95279,13565],{"class":121},[115,95281,95282],{"class":174}," True",[115,95284,12436],{"class":125},[115,95286,95287],{"class":5217},"order",[115,95289,13565],{"class":121},[115,95291,38934],{"class":174},[115,95293,12436],{"class":125},[115,95295,95296],{"class":5217},"subok",[115,95298,13565],{"class":121},[115,95300,95301],{"class":174}," False",[115,95303,12436],{"class":125},[115,95305,95306],{"class":5217},"ndmin",[115,95308,13565],{"class":121},[115,95310,4093],{"class":174},[115,95312,132],{"class":125},[14,95314,95315],{},"参数：",[14,95317,95318],{},[20,95319],{"alt":22,"src":95320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[86,95322,95324],{"id":95323},"_222-实例","2.2.2 实例",[14,95326,95327],{},[20,95328],{"alt":22,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95331,95332],{},[20,95333],{"alt":22,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95336,95337],{},[20,95338],{"alt":22,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95341,95342],{},[20,95343],{"alt":22,"src":95344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95346,95347],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95349,95350],{},[20,95351],{"alt":22,"src":95352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[57,95354,95356],{"id":95355},"_22-随机数创建数组","2.2 随机数创建数组",[86,95358,95360],{"id":95359},"_221-random语句","2.2.1 random语句",[106,95362,95364],{"className":30379,"code":95363,"language":30381,"meta":22,"style":22},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[112,95365,95366,95371,95376,95384,95389],{"__ignoreMap":22},[115,95367,95368],{"class":117,"line":118},[115,95369,95370],{"class":184},"#random.random()\n",[115,95372,95373],{"class":117,"line":37},[115,95374,95375],{"class":184},"#确定随机种子,就是每次运行结果是相同的\n",[115,95377,95378,95380,95382],{"class":117,"line":1180},[115,95379,94597],{"class":125},[115,95381,317],{"class":174},[115,95383,132],{"class":125},[115,95385,95386],{"class":117,"line":1195},[115,95387,95388],{"class":125},"np.random.random()\n",[115,95390,95391],{"class":117,"line":1201},[115,95392,95393],{"class":184},"#生成一个随机的数目\n",[14,95395,95396],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95398,95399],{},"可以指定数组形状 size",[14,95401,95402],{},"①生成一维数组",[106,95404,95406],{"className":30379,"code":95405,"language":30381,"meta":22,"style":22},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[112,95407,95408,95413,95426,95431,95447],{"__ignoreMap":22},[115,95409,95410],{"class":117,"line":118},[115,95411,95412],{"class":184},"#random.random(size())\n",[115,95414,95415,95418,95420,95422,95424],{"class":117,"line":37},[115,95416,95417],{"class":125},"np.random.random(",[115,95419,31497],{"class":5217},[115,95421,171],{"class":121},[115,95423,444],{"class":174},[115,95425,132],{"class":125},[115,95427,95428],{"class":117,"line":1180},[115,95429,95430],{"class":184},"#生成一位的五个元素\n",[115,95432,95433,95435,95437,95439,95441,95443,95445],{"class":117,"line":1195},[115,95434,27],{"class":125},[115,95436,171],{"class":121},[115,95438,95417],{"class":125},[115,95440,31497],{"class":5217},[115,95442,171],{"class":121},[115,95444,418],{"class":174},[115,95446,132],{"class":125},[115,95448,95449,95452],{"class":117,"line":1201},[115,95450,95451],{"class":125},"a.shape ",[115,95453,95454],{"class":184},"#输出数组形状\n",[14,95456,95457],{},"②生成二维数组",[106,95459,95461],{"className":30379,"code":95460,"language":30381,"meta":22,"style":22},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[112,95462,95463,95467,95489],{"__ignoreMap":22},[115,95464,95465],{"class":117,"line":118},[115,95466,93291],{"class":184},[115,95468,95469,95471,95473,95475,95477,95479,95481,95483,95485,95487],{"class":117,"line":37},[115,95470,93296],{"class":125},[115,95472,171],{"class":121},[115,95474,95417],{"class":125},[115,95476,31497],{"class":5217},[115,95478,171],{"class":121},[115,95480,126],{"class":125},[115,95482,418],{"class":174},[115,95484,503],{"class":125},[115,95486,444],{"class":174},[115,95488,30498],{"class":125},[115,95490,95491],{"class":117,"line":1180},[115,95492,95493],{"class":184},"#生成四行五列的数组\n",[14,95495,95496],{},"③生成三维数组",[106,95498,95500],{"className":30379,"code":95499,"language":30381,"meta":22,"style":22},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[112,95501,95502,95507,95534],{"__ignoreMap":22},[115,95503,95504],{"class":117,"line":118},[115,95505,95506],{"class":184},"#三维数组\n",[115,95508,95509,95512,95514,95516,95518,95520,95522,95524,95526,95528,95530,95532],{"class":117,"line":37},[115,95510,95511],{"class":125},"aaa",[115,95513,171],{"class":121},[115,95515,95417],{"class":125},[115,95517,31497],{"class":5217},[115,95519,171],{"class":121},[115,95521,126],{"class":125},[115,95523,203],{"class":174},[115,95525,503],{"class":125},[115,95527,197],{"class":174},[115,95529,503],{"class":125},[115,95531,418],{"class":174},[115,95533,30498],{"class":125},[115,95535,95536],{"class":117,"line":1180},[115,95537,95538],{"class":125},"aaa.shape\n",[86,95540,95542],{"id":95541},"_222-randint语句","2.2.2 randint语句",[106,95544,95546],{"className":30379,"code":95545,"language":30381,"meta":22,"style":22},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[112,95547,95548,95553],{"__ignoreMap":22},[115,95549,95550],{"class":117,"line":118},[115,95551,95552],{"class":184},"#生成随机的整数 random.randint(low,high,size)\n",[115,95554,95555,95557,95559,95561],{"class":117,"line":37},[115,95556,93104],{"class":125},[115,95558,444],{"class":174},[115,95560,13715],{"class":125},[115,95562,95563],{"class":184},"#0~5中的随机一个数\n",[14,95565,95402],{},[106,95567,95569],{"className":30379,"code":95568,"language":30381,"meta":22,"style":22},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[112,95570,95571,95576,95598],{"__ignoreMap":22},[115,95572,95573],{"class":117,"line":118},[115,95574,95575],{"class":184},"#一维\n",[115,95577,95578,95580,95582,95584,95586,95588,95590,95592,95594,95596],{"class":117,"line":37},[115,95579,93104],{"class":125},[115,95581,343],{"class":174},[115,95583,503],{"class":125},[115,95585,597],{"class":174},[115,95587,503],{"class":125},[115,95589,31497],{"class":5217},[115,95591,171],{"class":121},[115,95593,126],{"class":125},[115,95595,571],{"class":174},[115,95597,30498],{"class":125},[115,95599,95600],{"class":117,"line":1180},[115,95601,95602],{"class":184},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95604,95457],{},[14,95606,95607],{},[20,95608],{"alt":22,"src":95609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95611,95496],{},[14,95613,95614],{},[20,95615],{"alt":22,"src":95616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[86,95618,95620],{"id":95619},"_222-rand语句","2.2.2 rand语句",[14,95622,95623],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[106,95625,95627],{"className":30379,"code":95626,"language":30381,"meta":22,"style":22},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[112,95628,95629,95642,95647],{"__ignoreMap":22},[115,95630,95631,95634,95636,95638,95640],{"class":117,"line":118},[115,95632,95633],{"class":125},"np.random.rand(",[115,95635,436],{"class":174},[115,95637,503],{"class":125},[115,95639,571],{"class":174},[115,95641,132],{"class":125},[115,95643,95644],{"class":117,"line":37},[115,95645,95646],{"class":184},"#第一个参数100：行数，表示有100个样本\n",[115,95648,95649],{"class":117,"line":1180},[115,95650,95651],{"class":184},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[57,95653,95655],{"id":95654},"_23-arange创建数组","2.3 arange()创建数组",[86,95657,95659],{"id":95658},"_231-函数语句","2.3.1 函数语句",[106,95661,95663],{"className":30379,"code":95662,"language":30381,"meta":22,"style":22},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[112,95664,95665,95679,95684,95689,95694,95699,95704,95709],{"__ignoreMap":22},[115,95666,95667,95670,95672,95674,95677],{"class":117,"line":118},[115,95668,95669],{"class":125},"numpy.arange([start,] stop[, step], ",[115,95671,93490],{"class":5217},[115,95673,171],{"class":121},[115,95675,95676],{"class":174},"None",[115,95678,132],{"class":125},[115,95680,95681],{"class":117,"line":37},[115,95682,95683],{"class":184},"#参数\n",[115,95685,95686],{"class":117,"line":1180},[115,95687,95688],{"class":230},"\"\"\"\n",[115,95690,95691],{"class":117,"line":1195},[115,95692,95693],{"class":230},"start:起始值，可选，默认从 0 开始。\n",[115,95695,95696],{"class":117,"line":1201},[115,95697,95698],{"class":230},"stop:结束值（不包含该值）。\n",[115,95700,95701],{"class":117,"line":1215},[115,95702,95703],{"class":230},"step:步长，可选，默认是 1。可以为浮点数。\n",[115,95705,95706],{"class":117,"line":1221},[115,95707,95708],{"class":230},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[115,95710,95711],{"class":117,"line":1312},[115,95712,95688],{"class":230},[86,95714,95716],{"id":95715},"_232-实例","2.3.2 实例",[106,95718,95720],{"className":30379,"code":95719,"language":30381,"meta":22,"style":22},"#创建一维数组\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",[112,95721,95722,95726,95750,95755,95760,95764,95787,95791,95795,95800,95805],{"__ignoreMap":22},[115,95723,95724],{"class":117,"line":118},[115,95725,93095],{"class":184},[115,95727,95728,95730,95732,95734,95736,95738,95740,95742,95744,95746,95748],{"class":117,"line":37},[115,95729,92992],{"class":125},[115,95731,343],{"class":174},[115,95733,503],{"class":125},[115,95735,850],{"class":174},[115,95737,503],{"class":125},[115,95739,343],{"class":174},[115,95741,503],{"class":125},[115,95743,93490],{"class":5217},[115,95745,171],{"class":121},[115,95747,129],{"class":174},[115,95749,132],{"class":125},[115,95751,95752],{"class":117,"line":1180},[115,95753,95754],{"class":184},"#输出结果：\n",[115,95756,95757],{"class":117,"line":1195},[115,95758,95759],{"class":184},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[115,95761,95762],{"class":117,"line":1201},[115,95763,93937],{"class":184},[115,95765,95766,95769,95771,95773,95775,95778,95780,95782,95784],{"class":117,"line":1215},[115,95767,95768],{"class":125},"np.array([np.arange(",[115,95770,343],{"class":174},[115,95772,503],{"class":125},[115,95774,418],{"class":174},[115,95776,95777],{"class":125},"),np.arange(",[115,95779,418],{"class":174},[115,95781,503],{"class":125},[115,95783,494],{"class":174},[115,95785,95786],{"class":125},")])\n",[115,95788,95789],{"class":117,"line":1221},[115,95790,93554],{"class":184},[115,95792,95793],{"class":117,"line":1312},[115,95794,95688],{"class":230},[115,95796,95797],{"class":117,"line":1318},[115,95798,95799],{"class":230},"array([[1, 2, 3],\n",[115,95801,95802],{"class":117,"line":1330},[115,95803,95804],{"class":230},"       [4, 5, 6]])\n",[115,95806,95807],{"class":117,"line":1612},[115,95808,95688],{"class":230},[57,95810,95812],{"id":95811},"_24-生态分布","2.4 生态分布",[86,95814,95816],{"id":95815},"_241-标准正态分布","2.4.1 标准正态分布",[14,95818,95819],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95821,95822],{},[20,95823],{"alt":22,"src":95824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[86,95826,95828],{"id":95827},"_242-常规正态分布","2.4.2 常规正态分布",[106,95830,95832],{"className":30379,"code":95831,"language":30381,"meta":22,"style":22},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[112,95833,95834,95839,95844,95849],{"__ignoreMap":22},[115,95835,95836],{"class":117,"line":118},[115,95837,95838],{"class":125},"random.normal(loc,scale,size)也可以生成正态分布\n",[115,95840,95841],{"class":117,"line":37},[115,95842,95843],{"class":184},"#loc:期望\n",[115,95845,95846],{"class":117,"line":1180},[115,95847,95848],{"class":184},"#scale:方差\n",[115,95850,95851],{"class":117,"line":1195},[115,95852,95853],{"class":184},"#size:用于确定是几维的数列\n",[14,95855,95856],{},[20,95857],{"alt":22,"src":95858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[57,95860,95862],{"id":95861},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95864,95865],{},"ndim:秩，维度个数",[14,95867,95868],{},"size:数组元素的个数",[14,95870,95871],{},"shape:数组的形状",[14,95873,95874],{},"dtype:数组元素的类型",[14,95876,95877],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95879,95880],{},"他们都是属性，通过数组.属性的形式来确定",[14,95882,95883],{},"如果需要输出多个可以通过以下方式：",[106,95885,95887],{"className":30379,"code":95886,"language":30381,"meta":22,"style":22},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[112,95888,95889],{"__ignoreMap":22},[115,95890,95891,95893],{"class":117,"line":118},[115,95892,30416],{"class":174},[115,95894,95895],{"class":125},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[57,95897,95899],{"id":95898},"_26-其他方式创建数组","2.6 其他方式创建数组",[86,95901,95903],{"id":95902},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95905,95906],{},"①创建一维数组",[106,95908,95910],{"className":30379,"code":95909,"language":30381,"meta":22,"style":22},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[112,95911,95912,95921,95925,95930,95935],{"__ignoreMap":22},[115,95913,95914,95917,95919],{"class":117,"line":118},[115,95915,95916],{"class":125},"np.zeros(",[115,95918,571],{"class":174},[115,95920,132],{"class":125},[115,95922,95923],{"class":117,"line":37},[115,95924,95688],{"class":230},[115,95926,95927],{"class":117,"line":1180},[115,95928,95929],{"class":230},"输出结果：\n",[115,95931,95932],{"class":117,"line":1195},[115,95933,95934],{"class":230},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[115,95936,95937],{"class":117,"line":1201},[115,95938,95688],{"class":230},[14,95940,95941],{},"上方代码等价于：",[106,95943,95945],{"className":30379,"code":95944,"language":30381,"meta":22,"style":22},"np.zeros(shape=(10))#创建10个元素的0数组\n",[112,95946,95947],{"__ignoreMap":22},[115,95948,95949,95951,95954,95956,95958,95960,95962],{"class":117,"line":118},[115,95950,95916],{"class":125},[115,95952,95953],{"class":5217},"shape",[115,95955,171],{"class":121},[115,95957,126],{"class":125},[115,95959,571],{"class":174},[115,95961,82761],{"class":125},[115,95963,95964],{"class":184},"#创建10个元素的0数组\n",[14,95966,95967],{},"也可以指定类型",[106,95969,95971],{"className":30379,"code":95970,"language":30381,"meta":22,"style":22},"#指定类型\nnp.zeros(5,dtype=int)\n",[112,95972,95973,95978],{"__ignoreMap":22},[115,95974,95975],{"class":117,"line":118},[115,95976,95977],{"class":184},"#指定类型\n",[115,95979,95980,95982,95984,95986,95988,95990,95992],{"class":117,"line":37},[115,95981,95916],{"class":125},[115,95983,444],{"class":174},[115,95985,503],{"class":125},[115,95987,93490],{"class":5217},[115,95989,171],{"class":121},[115,95991,129],{"class":174},[115,95993,132],{"class":125},[14,95995,95996],{},"②创建二维数组",[106,95998,96000],{"className":30379,"code":95999,"language":30381,"meta":22,"style":22},"np.zeros((3,4),dtype=int)\n",[112,96001,96002],{"__ignoreMap":22},[115,96003,96004,96007,96009,96011,96013,96015,96017,96019,96021],{"class":117,"line":118},[115,96005,96006],{"class":125},"np.zeros((",[115,96008,197],{"class":174},[115,96010,503],{"class":125},[115,96012,418],{"class":174},[115,96014,42257],{"class":125},[115,96016,93490],{"class":5217},[115,96018,171],{"class":121},[115,96020,129],{"class":174},[115,96022,132],{"class":125},[14,96024,96025],{},"③创建三维数组",[106,96027,96029],{"className":30379,"code":96028,"language":30381,"meta":22,"style":22},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[112,96030,96031,96036],{"__ignoreMap":22},[115,96032,96033],{"class":117,"line":118},[115,96034,96035],{"class":184},"#创建三维数组\n",[115,96037,96038,96040,96042,96044,96046,96048,96050,96052,96054,96056,96058],{"class":117,"line":37},[115,96039,96006],{"class":125},[115,96041,197],{"class":174},[115,96043,503],{"class":125},[115,96045,418],{"class":174},[115,96047,503],{"class":125},[115,96049,444],{"class":174},[115,96051,42257],{"class":125},[115,96053,93490],{"class":5217},[115,96055,171],{"class":121},[115,96057,129],{"class":174},[115,96059,132],{"class":125},[14,96061,96062],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[106,96064,96066],{"className":30379,"code":96065,"language":30381,"meta":22,"style":22},"#使用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",[112,96067,96068,96073,96088,96093,96098,96120],{"__ignoreMap":22},[115,96069,96070],{"class":117,"line":118},[115,96071,96072],{"class":184},"#使用zeros_like将创建的一维数组变成全0的数组\n",[115,96074,96075,96077,96079,96081,96083,96085],{"class":117,"line":37},[115,96076,27],{"class":125},[115,96078,171],{"class":121},[115,96080,92992],{"class":125},[115,96082,418],{"class":174},[115,96084,554],{"class":125},[115,96086,96087],{"class":184},"#这个得到的结果：一维数组0，1，2，3\n",[115,96089,96090],{"class":117,"line":1180},[115,96091,96092],{"class":125},"np.zeros_like(a)\n",[115,96094,96095],{"class":117,"line":1195},[115,96096,96097],{"class":184},"#使用zeros_like将创建的二维数组变成全0的数组\n",[115,96099,96100,96102,96104,96106,96108,96110,96112,96114,96116,96118],{"class":117,"line":1201},[115,96101,93296],{"class":125},[115,96103,171],{"class":121},[115,96105,95417],{"class":125},[115,96107,31497],{"class":5217},[115,96109,171],{"class":121},[115,96111,126],{"class":125},[115,96113,418],{"class":174},[115,96115,503],{"class":125},[115,96117,444],{"class":174},[115,96119,30498],{"class":125},[115,96121,96122],{"class":117,"line":1215},[115,96123,96124],{"class":125},"np.zeros_like(aa)\n",[86,96126,96128],{"id":96127},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96130,96131],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[86,96133,96135],{"id":96134},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96137,96138],{},"①empty()用法",[106,96140,96142],{"className":30379,"code":96141,"language":30381,"meta":22,"style":22},"numpy.empty(shape,dtype=float,order='c')\n",[112,96143,96144],{"__ignoreMap":22},[115,96145,96146,96149,96151,96153,96155,96157,96159,96161,96163],{"class":117,"line":118},[115,96147,96148],{"class":125},"numpy.empty(shape,",[115,96150,93490],{"class":5217},[115,96152,171],{"class":121},[115,96154,165],{"class":174},[115,96156,503],{"class":125},[115,96158,95287],{"class":5217},[115,96160,171],{"class":121},[115,96162,76018],{"class":230},[115,96164,132],{"class":125},[14,96166,96167],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96169,96170],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96172,96173],{},[20,96174],{"alt":22,"src":96175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96177,96178],{},"②empty()用法",[106,96180,96182],{"className":30379,"code":96181,"language":30381,"meta":22,"style":22},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[112,96183,96184,96205,96217,96238,96243],{"__ignoreMap":22},[115,96185,96186,96188,96190,96193,96195,96197,96199,96201,96203],{"class":117,"line":118},[115,96187,970],{"class":125},[115,96189,171],{"class":121},[115,96191,96192],{"class":125},"np.empty(",[115,96194,571],{"class":174},[115,96196,503],{"class":125},[115,96198,93490],{"class":5217},[115,96200,171],{"class":121},[115,96202,129],{"class":174},[115,96204,132],{"class":125},[115,96206,96207,96209,96211,96213,96215],{"class":117,"line":37},[115,96208,945],{"class":125},[115,96210,171],{"class":121},[115,96212,92992],{"class":125},[115,96214,444],{"class":174},[115,96216,132],{"class":125},[115,96218,96219,96222,96224,96227,96229,96231,96234,96236],{"class":117,"line":1180},[115,96220,96221],{"class":125},"np.add(",[115,96223,203],{"class":174},[115,96225,96226],{"class":125},",x,",[115,96228,93044],{"class":5217},[115,96230,171],{"class":121},[115,96232,96233],{"class":125},"y[:",[115,96235,444],{"class":174},[115,96237,4657],{"class":125},[115,96239,96240],{"class":117,"line":1195},[115,96241,96242],{"class":184},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[115,96244,96245],{"class":117,"line":1201},[115,96246,96247],{"class":125},"y\n",[14,96249,11515],{},[14,96251,96252],{},[20,96253],{"alt":22,"src":96254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[106,96256,96258],{"className":30379,"code":96257,"language":30381,"meta":22,"style":22},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[112,96259,96260,96276,96296,96311],{"__ignoreMap":22},[115,96261,96262,96264,96266,96268,96270,96272,96274],{"class":117,"line":118},[115,96263,945],{"class":125},[115,96265,171],{"class":121},[115,96267,92992],{"class":125},[115,96269,343],{"class":174},[115,96271,503],{"class":125},[115,96273,469],{"class":174},[115,96275,132],{"class":125},[115,96277,96278,96280,96282,96284,96286,96288,96290,96292,96294],{"class":117,"line":37},[115,96279,970],{"class":125},[115,96281,171],{"class":121},[115,96283,96192],{"class":125},[115,96285,444],{"class":174},[115,96287,503],{"class":125},[115,96289,93490],{"class":5217},[115,96291,171],{"class":121},[115,96293,129],{"class":174},[115,96295,132],{"class":125},[115,96297,96298,96301,96303,96305,96307,96309],{"class":117,"line":1180},[115,96299,96300],{"class":125},"np.add(x,",[115,96302,203],{"class":174},[115,96304,503],{"class":125},[115,96306,93044],{"class":5217},[115,96308,171],{"class":121},[115,96310,93439],{"class":125},[115,96312,96313],{"class":117,"line":1195},[115,96314,96315],{"class":184},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96317,96318],{},"③empty_like()",[14,96320,96321],{},[275,96322,96323,96324,96329],{},"创建一个",[275,96325,96326],{},[275,96327,96328],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96331,96332,96335],{},[112,96333,96334],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96337,96338],{},[20,96339],{"alt":22,"src":96340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[86,96342,96344],{"id":96343},"_264-用法","2.6.4 ？？用法",[14,96346,96347],{},"当想查看一个函数的参数时，可以通过？？来实现",[106,96349,96351],{"className":30379,"code":96350,"language":30381,"meta":22,"style":22},"np.full??\n",[112,96352,96353],{"__ignoreMap":22},[115,96354,96355,96358],{"class":117,"line":118},[115,96356,96357],{"class":125},"np.full",[115,96359,96360],{"class":77393},"??\n",[86,96362,96364],{"id":96363},"_265-full创建数组","2.6.5 full()创建数组",[106,96366,96368],{"className":30379,"code":96367,"language":30381,"meta":22,"style":22},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[112,96369,96370,96375],{"__ignoreMap":22},[115,96371,96372],{"class":117,"line":118},[115,96373,96374],{"class":125},"full(shape,fill_value)\n",[115,96376,96377],{"class":117,"line":37},[115,96378,96379],{"class":125},"创建全为某个指定值的数组\n",[14,96381,94520],{},[106,96383,96385],{"className":30379,"code":96384,"language":30381,"meta":22,"style":22},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[112,96386,96387,96392],{"__ignoreMap":22},[115,96388,96389],{"class":117,"line":118},[115,96390,96391],{"class":184},"#创建一个一维数组,以20进行填充\n",[115,96393,96394,96397,96399,96401,96403],{"class":117,"line":37},[115,96395,96396],{"class":125},"np.full(",[115,96398,571],{"class":174},[115,96400,503],{"class":125},[115,96402,825],{"class":174},[115,96404,132],{"class":125},[14,96406,93281],{},[106,96408,96410],{"className":30379,"code":96409,"language":30381,"meta":22,"style":22},"#创建二维数组\nnp.full((3,5),11)\n",[112,96411,96412,96416],{"__ignoreMap":22},[115,96413,96414],{"class":117,"line":118},[115,96415,93937],{"class":184},[115,96417,96418,96421,96423,96425,96427,96429,96431],{"class":117,"line":37},[115,96419,96420],{"class":125},"np.full((",[115,96422,197],{"class":174},[115,96424,503],{"class":125},[115,96426,444],{"class":174},[115,96428,42257],{"class":125},[115,96430,597],{"class":174},[115,96432,132],{"class":125},[14,96434,96435],{},"③full_like用法",[14,96437,96438],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96440,96441],{},"这里是指定填充而已",[106,96443,96445],{"className":30379,"code":96444,"language":30381,"meta":22,"style":22},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[112,96446,96447,96452,96476,96481],{"__ignoreMap":22},[115,96448,96449],{"class":117,"line":118},[115,96450,96451],{"class":184},"#创建一个指定形状数组\n",[115,96453,96454,96456,96458,96460,96462,96464,96466,96468,96470,96472,96474],{"class":117,"line":37},[115,96455,27],{"class":125},[115,96457,171],{"class":121},[115,96459,92992],{"class":125},[115,96461,343],{"class":174},[115,96463,503],{"class":125},[115,96465,450],{"class":174},[115,96467,92997],{"class":125},[115,96469,418],{"class":174},[115,96471,503],{"class":125},[115,96473,545],{"class":174},[115,96475,132],{"class":125},[115,96477,96478],{"class":117,"line":1180},[115,96479,96480],{"class":184},"#进行指定填充\n",[115,96482,96483,96486,96488],{"class":117,"line":1195},[115,96484,96485],{"class":125},"np.full_like(a,",[115,96487,571],{"class":174},[115,96489,132],{"class":125},[14,96491,11515],{},[14,96493,96494],{},[20,96495],{"alt":22,"src":96496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[86,96498,96500],{"id":96499},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21999,96502,96504],{"id":96503},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[106,96506,96508],{"className":30379,"code":96507,"language":30381,"meta":22,"style":22},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[112,96509,96510,96527],{"__ignoreMap":22},[115,96511,96512,96515,96517,96519,96521,96523,96525],{"class":117,"line":118},[115,96513,96514],{"class":125},"np.eye(",[115,96516,418],{"class":174},[115,96518,503],{"class":125},[115,96520,93490],{"class":5217},[115,96522,171],{"class":121},[115,96524,129],{"class":174},[115,96526,132],{"class":125},[115,96528,96529],{"class":117,"line":37},[115,96530,96531],{"class":184},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21999,96533,96535],{"id":96534},"_2662-法2identity","2.6.6.2 法2：identity()",[106,96537,96539],{"className":30379,"code":96538,"language":30381,"meta":22,"style":22},"#identity()\nnp.identity(5,dtype=int)\n",[112,96540,96541,96546],{"__ignoreMap":22},[115,96542,96543],{"class":117,"line":118},[115,96544,96545],{"class":184},"#identity()\n",[115,96547,96548,96551,96553,96555,96557,96559,96561],{"class":117,"line":37},[115,96549,96550],{"class":125},"np.identity(",[115,96552,444],{"class":174},[115,96554,503],{"class":125},[115,96556,93490],{"class":5217},[115,96558,171],{"class":121},[115,96560,129],{"class":174},[115,96562,132],{"class":125},[14,96564,96565],{},"两个函数是有区别的",[14,96567,96568],{},[20,96569],{"alt":22,"src":96570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96572,96573],{},[20,96574],{"alt":22,"src":96575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[106,96577,96579],{"className":30379,"code":96578,"language":30381,"meta":22,"style":22},"# 创建一个 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",[112,96580,96581,96586,96598,96603,96608,96613,96618,96622,96627,96647,96651,96656,96661],{"__ignoreMap":22},[115,96582,96583],{"class":117,"line":118},[115,96584,96585],{"class":184},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[115,96587,96588,96590,96592,96594,96596],{"class":117,"line":37},[115,96589,96514],{"class":125},[115,96591,197],{"class":174},[115,96593,12436],{"class":125},[115,96595,418],{"class":174},[115,96597,132],{"class":125},[115,96599,96600],{"class":117,"line":1180},[115,96601,96602],{"class":184},"# 输出:\n",[115,96604,96605],{"class":117,"line":1195},[115,96606,96607],{"class":184},"# [[1. 0. 0. 0.]\n",[115,96609,96610],{"class":117,"line":1201},[115,96611,96612],{"class":184},"#  [0. 1. 0. 0.]\n",[115,96614,96615],{"class":117,"line":1215},[115,96616,96617],{"class":184},"#  [0. 0. 1. 0.]]\n",[115,96619,96620],{"class":117,"line":1221},[115,96621,2400],{"emptyLinePlaceholder":42},[115,96623,96624],{"class":117,"line":1312},[115,96625,96626],{"class":184},"# 对角线向上偏移1\n",[115,96628,96629,96631,96633,96635,96637,96639,96641,96643,96645],{"class":117,"line":1318},[115,96630,96514],{"class":125},[115,96632,197],{"class":174},[115,96634,12436],{"class":125},[115,96636,418],{"class":174},[115,96638,12436],{"class":125},[115,96640,618],{"class":5217},[115,96642,171],{"class":121},[115,96644,343],{"class":174},[115,96646,132],{"class":125},[115,96648,96649],{"class":117,"line":1330},[115,96650,96602],{"class":184},[115,96652,96653],{"class":117,"line":1612},[115,96654,96655],{"class":184},"# [[0. 1. 0. 0.]\n",[115,96657,96658],{"class":117,"line":1617},[115,96659,96660],{"class":184},"#  [0. 0. 1. 0.]\n",[115,96662,96663],{"class":117,"line":1623},[115,96664,96665],{"class":184},"#  [0. 0. 0. 1.]]\n",[86,96667,96669],{"id":96668},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[106,96671,96673],{"className":30379,"code":96672,"language":30381,"meta":22,"style":22},"#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",[112,96674,96675,96680,96684,96689,96694,96699,96704,96709,96714,96719,96724],{"__ignoreMap":22},[115,96676,96677],{"class":117,"line":118},[115,96678,96679],{"class":184},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[115,96681,96682],{"class":117,"line":37},[115,96683,95688],{"class":230},[115,96685,96686],{"class":117,"line":1180},[115,96687,96688],{"class":230},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[115,96690,96691],{"class":117,"line":1195},[115,96692,96693],{"class":230},"参数介绍：\n",[115,96695,96696],{"class":117,"line":1201},[115,96697,96698],{"class":230},"start：序列的起始值\n",[115,96700,96701],{"class":117,"line":1215},[115,96702,96703],{"class":230},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[115,96705,96706],{"class":117,"line":1221},[115,96707,96708],{"class":230},"num：要生长的等步长的样本数量，默认为50\n",[115,96710,96711],{"class":117,"line":1312},[115,96712,96713],{"class":230},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[115,96715,96716],{"class":117,"line":1318},[115,96717,96718],{"class":230},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[115,96720,96721],{"class":117,"line":1330},[115,96722,96723],{"class":230},"dtype：ndarry的数据类型\n",[115,96725,96726],{"class":117,"line":1612},[115,96727,95688],{"class":230},[14,96729,96730],{},[20,96731],{"alt":22,"src":96732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96734,96735],{},"这里num=是可以省略的",[14,96737,96738],{},"也就是下方两行代码结果是一模一样的",[106,96740,96742],{"className":30379,"code":96741,"language":30381,"meta":22,"style":22},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[112,96743,96744,96761],{"__ignoreMap":22},[115,96745,96746,96749,96751,96753,96755,96757,96759],{"class":117,"line":118},[115,96747,96748],{"class":125},"np.linspace(",[115,96750,343],{"class":174},[115,96752,503],{"class":125},[115,96754,444],{"class":174},[115,96756,503],{"class":125},[115,96758,444],{"class":174},[115,96760,132],{"class":125},[115,96762,96763,96765,96767,96769,96771,96773,96775,96777,96779],{"class":117,"line":37},[115,96764,96748],{"class":125},[115,96766,343],{"class":174},[115,96768,503],{"class":125},[115,96770,444],{"class":174},[115,96772,503],{"class":125},[115,96774,1665],{"class":5217},[115,96776,171],{"class":121},[115,96778,444],{"class":174},[115,96780,132],{"class":125},[86,96782,96784],{"id":96783},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[106,96786,96788],{"className":30379,"code":96787,"language":30381,"meta":22,"style":22},"#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",[112,96789,96790,96795,96799,96804,96809,96814,96819,96823,96828,96833,96837],{"__ignoreMap":22},[115,96791,96792],{"class":117,"line":118},[115,96793,96794],{"class":184},"#logspace函数用于创建一个等比数列，格式如下：\n",[115,96796,96797],{"class":117,"line":37},[115,96798,95688],{"class":230},[115,96800,96801],{"class":117,"line":1180},[115,96802,96803],{"class":230},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[115,96805,96806],{"class":117,"line":1195},[115,96807,96808],{"class":230},"参数为：\n",[115,96810,96811],{"class":117,"line":1201},[115,96812,96813],{"class":230},"start:序列的起始位置为：base**start\n",[115,96815,96816],{"class":117,"line":1215},[115,96817,96818],{"class":230},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[115,96820,96821],{"class":117,"line":1221},[115,96822,96708],{"class":230},[115,96824,96825],{"class":117,"line":1312},[115,96826,96827],{"class":230},"endpoint：是否包含 stop 这个值，默认是 True\n",[115,96829,96830],{"class":117,"line":1318},[115,96831,96832],{"class":230},"base：对数的底数，默认是 10（常见对数）\n",[115,96834,96835],{"class":117,"line":1330},[115,96836,96723],{"class":230},[115,96838,96839],{"class":117,"line":1612},[115,96840,95688],{"class":230},[14,96842,96843],{},[20,96844],{"alt":22,"src":96845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96847,96848],{},"logspace()函数中的num参数也是可以不写num=的",[14,96850,96851],{},"endpoint是不可以省略的",[5127,96853,96854],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":22,"searchDepth":37,"depth":37,"links":96856},[96857,96861,96866,96870,96874,96875],{"id":95246,"depth":37,"text":95247,"children":96858},[96859,96860],{"id":95250,"depth":1180,"text":95251},{"id":95323,"depth":1180,"text":95324},{"id":95355,"depth":37,"text":95356,"children":96862},[96863,96864,96865],{"id":95359,"depth":1180,"text":95360},{"id":95541,"depth":1180,"text":95542},{"id":95619,"depth":1180,"text":95620},{"id":95654,"depth":37,"text":95655,"children":96867},[96868,96869],{"id":95658,"depth":1180,"text":95659},{"id":95715,"depth":1180,"text":95716},{"id":95811,"depth":37,"text":95812,"children":96871},[96872,96873],{"id":95815,"depth":1180,"text":95816},{"id":95827,"depth":1180,"text":95828},{"id":95861,"depth":37,"text":95862},{"id":95898,"depth":37,"text":95899,"children":96876},[96877,96878,96879,96880,96881,96882,96883,96884],{"id":95902,"depth":1180,"text":95903},{"id":96127,"depth":1180,"text":96128},{"id":96134,"depth":1180,"text":96135},{"id":96343,"depth":1180,"text":96344},{"id":96363,"depth":1180,"text":96364},{"id":96499,"depth":1180,"text":96500},{"id":96668,"depth":1180,"text":96669},{"id":96783,"depth":1180,"text":96784},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95238,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96891,"title":96892,"body":96893,"description":39,"extension":40,"meta":96986,"navigation":42,"path":96987,"seo":96988,"stem":96989,"__hash__":96990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96894,"toc":96984},[96895,96898,96901,96904,96907,96910,96913,96916,96919,96922,96925,96928,96930,96933,96936,96941,96944,96947,96981],[10,96896,96892],{"id":96897},"_20魔法命令mprun",[14,96899,96900],{},"逐行分析数据内存的使用情况",[14,96902,96903],{},"语法格式：",[14,96905,96906],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96908,96909],{},"分析结果列如下：",[14,96911,96912],{},"Line行号",[14,96914,96915],{},"Mem usage内存使用大小",[14,96917,96918],{},"increment内存增量",[14,96920,96921],{},"Line content代码内容",[14,96923,96924],{},"补充说明：",[14,96926,96927],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96929,95193],{},[14,96931,96932],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96934,96935],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96937,96938],{},[20,96939],{"alt":22,"src":96940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96942,96943],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96945,96946],{},"这时候需要重新加载模块",[106,96948,96950],{"className":30379,"code":96949,"language":30381,"meta":22,"style":22},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[112,96951,96952,96957,96964,96969],{"__ignoreMap":22},[115,96953,96954],{"class":117,"line":118},[115,96955,96956],{"class":184},"#重新加载模块\n",[115,96958,96959,96961],{"class":117,"line":37},[115,96960,30393],{"class":121},[115,96962,96963],{"class":125}," importlib\n",[115,96965,96966],{"class":117,"line":1180},[115,96967,96968],{"class":125},"importlib.reload(mprun_test)\n",[115,96970,96971,96973,96976,96978],{"class":117,"line":1195},[115,96972,453],{"class":121},[115,96974,96975],{"class":125},"mprun ",[115,96977,657],{"class":121},[115,96979,96980],{"class":125},"f mprun_test.fun_test mprun_test.fun_test()\n",[5127,96982,96983],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":96985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96892,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96992,"title":96993,"body":96994,"description":39,"extension":40,"meta":97011,"navigation":42,"path":97012,"seo":97013,"stem":97014,"__hash__":97015},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96995,"toc":97009},[96996,96999,97004],[10,96997,96993],{"id":96998},"_3一维数组的索引和切片",[14,97000,97001],{},[20,97002],{"alt":22,"src":97003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97005,97006],{},[20,97007],{"alt":22,"src":97008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":22,"searchDepth":37,"depth":37,"links":97010},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96993,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97017,"title":97018,"body":97019,"description":39,"extension":40,"meta":97502,"navigation":42,"path":97503,"seo":97504,"stem":97505,"__hash__":97506},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97020,"toc":97500},[97021,97024,97027,97032,97065,97068,97106,97109,97143,97146,97251,97254,97291,97294,97395,97398,97449,97452,97494,97497],[10,97022,97018],{"id":97023},"_4二维数组的索引与切片",[14,97025,97026],{},"①获取指定单个元素",[14,97028,97029],{},[20,97030],{"alt":22,"src":97031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[106,97033,97035],{"className":30379,"code":97034,"language":30381,"meta":22,"style":22},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[112,97036,97037,97042,97047,97052],{"__ignoreMap":22},[115,97038,97039],{"class":117,"line":118},[115,97040,97041],{"class":184},"#获取元素9\n",[115,97043,97044],{"class":117,"line":37},[115,97045,97046],{"class":184},"#先获取所在行，再获取所在列\n",[115,97048,97049],{"class":117,"line":1180},[115,97050,97051],{"class":184},"#数组[行索引号，列索引号]\n",[115,97053,97054,97057,97059,97061,97063],{"class":117,"line":1195},[115,97055,97056],{"class":125},"a[",[115,97058,343],{"class":174},[115,97060,503],{"class":125},[115,97062,203],{"class":174},[115,97064,33247],{"class":125},[14,97066,97067],{},"②获取整行元素",[106,97069,97071],{"className":30379,"code":97070,"language":30381,"meta":22,"style":22},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[112,97072,97073,97078,97083,97091,97096],{"__ignoreMap":22},[115,97074,97075],{"class":117,"line":118},[115,97076,97077],{"class":184},"#获取整行 数组[行索引号]\n",[115,97079,97080],{"class":117,"line":37},[115,97081,97082],{"class":184},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[115,97084,97085,97087,97089],{"class":117,"line":1180},[115,97086,97056],{"class":125},[115,97088,203],{"class":174},[115,97090,33247],{"class":125},[115,97092,97093],{"class":117,"line":1195},[115,97094,97095],{"class":184},"#也可以负索引获取一行\n",[115,97097,97098,97100,97102,97104],{"class":117,"line":1201},[115,97099,97056],{"class":125},[115,97101,657],{"class":121},[115,97103,343],{"class":174},[115,97105,33247],{"class":125},[14,97107,97108],{},"③获取整列元素",[106,97110,97112],{"className":30379,"code":97111,"language":30381,"meta":22,"style":22},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[112,97113,97114,97119,97128,97133],{"__ignoreMap":22},[115,97115,97116],{"class":117,"line":118},[115,97117,97118],{"class":184},"#获取整列 数组名[:,列索引]\n",[115,97120,97121,97124,97126],{"class":117,"line":37},[115,97122,97123],{"class":125},"a[:,",[115,97125,203],{"class":174},[115,97127,33247],{"class":125},[115,97129,97130],{"class":117,"line":1180},[115,97131,97132],{"class":184},"#也可以负索引获取一列\n",[115,97134,97135,97137,97139,97141],{"class":117,"line":1195},[115,97136,97123],{"class":125},[115,97138,657],{"class":121},[115,97140,343],{"class":174},[115,97142,33247],{"class":125},[14,97144,97145],{},"④部分行部分列的元素",[106,97147,97149],{"className":30379,"code":97148,"language":30381,"meta":22,"style":22},"#部分行部分列 数组名[行切片，列切片]\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",[112,97150,97151,97156,97166,97170,97174,97179,97184,97188,97200,97204,97208,97213,97218,97223,97228,97232,97237],{"__ignoreMap":22},[115,97152,97153],{"class":117,"line":118},[115,97154,97155],{"class":184},"#部分行部分列 数组名[行切片，列切片]\n",[115,97157,97158,97161,97163],{"class":117,"line":37},[115,97159,97160],{"class":125},"a[:",[115,97162,203],{"class":174},[115,97164,97165],{"class":125},",:]\n",[115,97167,97168],{"class":117,"line":1180},[115,97169,93554],{"class":184},[115,97171,97172],{"class":117,"line":1195},[115,97173,93918],{"class":230},[115,97175,97176],{"class":117,"line":1201},[115,97177,97178],{"class":230},"array([[ 1,  2,  3,  4,  5,  6],\n",[115,97180,97181],{"class":117,"line":1215},[115,97182,97183],{"class":230},"       [ 7,  8,  9, 10, 11, 12]])\n",[115,97185,97186],{"class":117,"line":1221},[115,97187,93918],{"class":230},[115,97189,97190,97192,97194,97196,97198],{"class":117,"line":1312},[115,97191,97123],{"class":125},[115,97193,343],{"class":174},[115,97195,984],{"class":125},[115,97197,418],{"class":174},[115,97199,33247],{"class":125},[115,97201,97202],{"class":117,"line":1318},[115,97203,93554],{"class":184},[115,97205,97206],{"class":117,"line":1330},[115,97207,93918],{"class":230},[115,97209,97210],{"class":117,"line":1612},[115,97211,97212],{"class":230},"array([[ 2,  3,  4],\n",[115,97214,97215],{"class":117,"line":1617},[115,97216,97217],{"class":230},"       [ 8,  9, 10],\n",[115,97219,97220],{"class":117,"line":1623},[115,97221,97222],{"class":230},"       [14, 15, 16],\n",[115,97224,97225],{"class":117,"line":1628},[115,97226,97227],{"class":230},"       [20, 21, 22]])\n",[115,97229,97230],{"class":117,"line":1642},[115,97231,93918],{"class":230},[115,97233,97234],{"class":117,"line":1647},[115,97235,97236],{"class":184},"#对列行同时进行切片，使用了step参数\n",[115,97238,97239,97242,97244,97247,97249],{"class":117,"line":1653},[115,97240,97241],{"class":125},"a[::",[115,97243,203],{"class":174},[115,97245,97246],{"class":125},",::",[115,97248,203],{"class":174},[115,97250,33247],{"class":125},[14,97252,97253],{},"⑤同时获取两个元素",[106,97255,97257],{"className":30379,"code":97256,"language":30381,"meta":22,"style":22},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[112,97258,97259,97264,97269],{"__ignoreMap":22},[115,97260,97261],{"class":117,"line":118},[115,97262,97263],{"class":184},"#同时获取第三行第二列，第四行第一列\n",[115,97265,97266],{"class":117,"line":37},[115,97267,97268],{"class":184},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[115,97270,97271,97274,97276,97278,97280,97282,97284,97286,97288],{"class":117,"line":1180},[115,97272,97273],{"class":125},"a[(",[115,97275,203],{"class":174},[115,97277,503],{"class":125},[115,97279,197],{"class":174},[115,97281,42248],{"class":125},[115,97283,343],{"class":174},[115,97285,503],{"class":125},[115,97287,317],{"class":174},[115,97289,97290],{"class":125},")]\n",[14,97292,97293],{},"⑥切片，对行进行反向获取",[106,97295,97297],{"className":30379,"code":97296,"language":30381,"meta":22,"style":22},"#切片 对所有行进行反向获取\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",[112,97298,97299,97304,97314,97318,97322,97327,97332,97337,97342,97346,97351,97367,97371,97376,97381,97386,97391],{"__ignoreMap":22},[115,97300,97301],{"class":117,"line":118},[115,97302,97303],{"class":184},"#切片 对所有行进行反向获取\n",[115,97305,97306,97308,97310,97312],{"class":117,"line":37},[115,97307,97241],{"class":125},[115,97309,657],{"class":121},[115,97311,343],{"class":174},[115,97313,33247],{"class":125},[115,97315,97316],{"class":117,"line":1180},[115,97317,93554],{"class":184},[115,97319,97320],{"class":117,"line":1195},[115,97321,93918],{"class":230},[115,97323,97324],{"class":117,"line":1201},[115,97325,97326],{"class":230},"array([[19, 20, 21, 22, 23, 24],\n",[115,97328,97329],{"class":117,"line":1215},[115,97330,97331],{"class":230},"       [13, 14, 15, 16, 17, 18],\n",[115,97333,97334],{"class":117,"line":1221},[115,97335,97336],{"class":230},"       [ 7,  8,  9, 10, 11, 12],\n",[115,97338,97339],{"class":117,"line":1312},[115,97340,97341],{"class":230},"       [ 1,  2,  3,  4,  5,  6]])\n",[115,97343,97344],{"class":117,"line":1318},[115,97345,93918],{"class":230},[115,97347,97348],{"class":117,"line":1330},[115,97349,97350],{"class":184},"#对行列都进行反向切片获取\n",[115,97352,97353,97355,97357,97359,97361,97363,97365],{"class":117,"line":1612},[115,97354,97241],{"class":125},[115,97356,657],{"class":121},[115,97358,343],{"class":174},[115,97360,97246],{"class":125},[115,97362,657],{"class":121},[115,97364,343],{"class":174},[115,97366,33247],{"class":125},[115,97368,97369],{"class":117,"line":1617},[115,97370,93918],{"class":230},[115,97372,97373],{"class":117,"line":1623},[115,97374,97375],{"class":230},"array([[24, 23, 22, 21, 20, 19],\n",[115,97377,97378],{"class":117,"line":1628},[115,97379,97380],{"class":230},"       [18, 17, 16, 15, 14, 13],\n",[115,97382,97383],{"class":117,"line":1642},[115,97384,97385],{"class":230},"       [12, 11, 10,  9,  8,  7],\n",[115,97387,97388],{"class":117,"line":1647},[115,97389,97390],{"class":230},"       [ 6,  5,  4,  3,  2,  1]])\n",[115,97392,97393],{"class":117,"line":1653},[115,97394,93918],{"class":230},[14,97396,97397],{},"⑦修改元素",[106,97399,97401],{"className":30379,"code":97400,"language":30381,"meta":22,"style":22},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[112,97402,97403,97408,97426,97431],{"__ignoreMap":22},[115,97404,97405],{"class":117,"line":118},[115,97406,97407],{"class":184},"#获取前两行和前两列\n",[115,97409,97410,97413,97415,97417,97419,97422,97424],{"class":117,"line":37},[115,97411,97412],{"class":125},"sub_a",[115,97414,171],{"class":121},[115,97416,97160],{"class":125},[115,97418,203],{"class":174},[115,97420,97421],{"class":125},",:",[115,97423,203],{"class":174},[115,97425,33247],{"class":125},[115,97427,97428],{"class":117,"line":1180},[115,97429,97430],{"class":184},"#修改sub_a第一个元素的值\n",[115,97432,97433,97436,97438,97440,97442,97444,97446],{"class":117,"line":1195},[115,97434,97435],{"class":125},"sub_a[",[115,97437,317],{"class":174},[115,97439,503],{"class":125},[115,97441,317],{"class":174},[115,97443,1065],{"class":125},[115,97445,171],{"class":121},[115,97447,97448],{"class":174},"100\n",[14,97450,97451],{},"⑧数组复制copy()",[106,97453,97455],{"className":30379,"code":97454,"language":30381,"meta":22,"style":22},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[112,97456,97457,97462,97472,97477],{"__ignoreMap":22},[115,97458,97459],{"class":117,"line":118},[115,97460,97461],{"class":184},"#数组复制\n",[115,97463,97464,97467,97469],{"class":117,"line":37},[115,97465,97466],{"class":125},"copy_a",[115,97468,171],{"class":121},[115,97470,97471],{"class":125},"np.copy(sub_a)\n",[115,97473,97474],{"class":117,"line":1180},[115,97475,97476],{"class":184},"#修改copy_a后不影响原数组\n",[115,97478,97479,97482,97484,97486,97488,97490,97492],{"class":117,"line":1195},[115,97480,97481],{"class":125},"copy_a[",[115,97483,317],{"class":174},[115,97485,503],{"class":125},[115,97487,317],{"class":174},[115,97489,1065],{"class":125},[115,97491,171],{"class":121},[115,97493,97448],{"class":174},[14,97495,97496],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5127,97498,97499],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":22,"searchDepth":37,"depth":37,"links":97501},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97018,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97508,"title":97509,"body":97510,"description":39,"extension":40,"meta":98002,"navigation":42,"path":98003,"seo":98004,"stem":98005,"__hash__":98006},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97511,"toc":97994},[97512,97515,97519,97522,97525,97578,97581,97606,97609,97628,97648,97651,97667,97671,97717,97721,97763,97767,97770,97773,97776,97779,97782,97844,97904,97908,97911,97968,97972,97977,97986,97991],[10,97513,97509],{"id":97514},"_5改变数组的维度",[57,97516,97518],{"id":97517},"_51-使用reshape","5.1 使用reshape()",[14,97520,97521],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97523,97524],{},"①一维数组转换为二维数组",[106,97526,97528],{"className":30379,"code":97527,"language":30381,"meta":22,"style":22},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[112,97529,97530,97546,97551,97556,97561],{"__ignoreMap":22},[115,97531,97532,97534,97536,97538,97540,97542,97544],{"class":117,"line":118},[115,97533,27],{"class":125},[115,97535,171],{"class":121},[115,97537,92992],{"class":125},[115,97539,343],{"class":174},[115,97541,503],{"class":125},[115,97543,648],{"class":174},[115,97545,132],{"class":125},[115,97547,97548],{"class":117,"line":37},[115,97549,97550],{"class":184},"#将一维数组进行转换\n",[115,97552,97553],{"class":117,"line":1180},[115,97554,97555],{"class":184},"#注意点：元素个数不可以变\n",[115,97557,97558],{"class":117,"line":1195},[115,97559,97560],{"class":184},"#转换维度要保持一致，不一致就异常！！！\n",[115,97562,97563,97565,97567,97570,97572,97574,97576],{"class":117,"line":1201},[115,97564,93296],{"class":125},[115,97566,171],{"class":121},[115,97568,97569],{"class":125},"a.reshape(",[115,97571,203],{"class":174},[115,97573,503],{"class":125},[115,97575,469],{"class":174},[115,97577,132],{"class":125},[14,97579,97580],{},"②一维数组转换为三维数组",[106,97582,97584],{"className":30379,"code":97583,"language":30381,"meta":22,"style":22},"aaa=a.reshape(2,3,2)\n",[112,97585,97586],{"__ignoreMap":22},[115,97587,97588,97590,97592,97594,97596,97598,97600,97602,97604],{"class":117,"line":118},[115,97589,95511],{"class":125},[115,97591,171],{"class":121},[115,97593,97569],{"class":125},[115,97595,203],{"class":174},[115,97597,503],{"class":125},[115,97599,197],{"class":174},[115,97601,503],{"class":125},[115,97603,203],{"class":174},[115,97605,132],{"class":125},[14,97607,97608],{},"③二维数组转化为一维数组",[106,97610,97612],{"className":30379,"code":97611,"language":30381,"meta":22,"style":22},"#知道元素个数：\naa.reshape(12)\n",[112,97613,97614,97619],{"__ignoreMap":22},[115,97615,97616],{"class":117,"line":118},[115,97617,97618],{"class":184},"#知道元素个数：\n",[115,97620,97621,97624,97626],{"class":117,"line":37},[115,97622,97623],{"class":125},"aa.reshape(",[115,97625,623],{"class":174},[115,97627,132],{"class":125},[106,97629,97631],{"className":30379,"code":97630,"language":30381,"meta":22,"style":22},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[112,97632,97633,97638],{"__ignoreMap":22},[115,97634,97635],{"class":117,"line":118},[115,97636,97637],{"class":184},"#不知道元素个数，参数传递-1\n",[115,97639,97640,97642,97644,97646],{"class":117,"line":37},[115,97641,97623],{"class":125},[115,97643,657],{"class":121},[115,97645,343],{"class":174},[115,97647,132],{"class":125},[14,97649,97650],{},"④三维数组转换为一维数组",[106,97652,97654],{"className":30379,"code":97653,"language":30381,"meta":22,"style":22},"aaa.reshape(-1)\n",[112,97655,97656],{"__ignoreMap":22},[115,97657,97658,97661,97663,97665],{"class":117,"line":118},[115,97659,97660],{"class":125},"aaa.reshape(",[115,97662,657],{"class":121},[115,97664,343],{"class":174},[115,97666,132],{"class":125},[57,97668,97670],{"id":97669},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[106,97672,97674],{"className":30379,"code":97673,"language":30381,"meta":22,"style":22},"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",[112,97675,97676,97703,97708,97712],{"__ignoreMap":22},[115,97677,97678,97680,97682,97684,97686,97688,97690,97692,97694,97696,97698,97700],{"class":117,"line":118},[115,97679,93296],{"class":125},[115,97681,171],{"class":121},[115,97683,92992],{"class":125},[115,97685,343],{"class":174},[115,97687,503],{"class":125},[115,97689,648],{"class":174},[115,97691,92997],{"class":125},[115,97693,203],{"class":174},[115,97695,503],{"class":125},[115,97697,469],{"class":174},[115,97699,554],{"class":125},[115,97701,97702],{"class":184},"#转换为2行6列的数组\n",[115,97704,97705],{"class":117,"line":37},[115,97706,97707],{"class":125},"aa.revel()\n",[115,97709,97710],{"class":117,"line":1180},[115,97711,93554],{"class":184},[115,97713,97714],{"class":117,"line":1195},[115,97715,97716],{"class":184},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[57,97718,97720],{"id":97719},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[106,97722,97724],{"className":30379,"code":97723,"language":30381,"meta":22,"style":22},"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",[112,97725,97726,97750,97755,97759],{"__ignoreMap":22},[115,97727,97728,97730,97732,97734,97736,97738,97740,97742,97744,97746,97748],{"class":117,"line":118},[115,97729,93296],{"class":125},[115,97731,171],{"class":121},[115,97733,92992],{"class":125},[115,97735,343],{"class":174},[115,97737,503],{"class":125},[115,97739,648],{"class":174},[115,97741,92997],{"class":125},[115,97743,203],{"class":174},[115,97745,503],{"class":125},[115,97747,469],{"class":174},[115,97749,132],{"class":125},[115,97751,97752],{"class":117,"line":37},[115,97753,97754],{"class":125},"aa.flatten()\n",[115,97756,97757],{"class":117,"line":1180},[115,97758,93554],{"class":184},[115,97760,97761],{"class":117,"line":1195},[115,97762,97716],{"class":184},[57,97764,97766],{"id":97765},"_54-使用resize","5.4 使用resize()",[14,97768,97769],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97771,97772],{},"通过resize方法可以改变数组的维度",[14,97774,97775],{},"#resize修改数组维度",[14,97777,97778],{},"#以元组的形式指定形状",[14,97780,97781],{},"#改变的是原数组",[106,97783,97785],{"className":30379,"code":97784,"language":30381,"meta":22,"style":22},"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",[112,97786,97787,97803,97823,97836,97840],{"__ignoreMap":22},[115,97788,97789,97791,97793,97795,97797,97799,97801],{"class":117,"line":118},[115,97790,27],{"class":125},[115,97792,171],{"class":121},[115,97794,92992],{"class":125},[115,97796,343],{"class":174},[115,97798,503],{"class":125},[115,97800,648],{"class":174},[115,97802,132],{"class":125},[115,97804,97805,97808,97810,97812,97814,97816,97818,97820],{"class":117,"line":37},[115,97806,97807],{"class":125},"a.shape",[115,97809,171],{"class":121},[115,97811,126],{"class":125},[115,97813,203],{"class":174},[115,97815,503],{"class":125},[115,97817,469],{"class":174},[115,97819,554],{"class":125},[115,97821,97822],{"class":184},"#改变了原数组\n",[115,97824,97825,97827,97829,97832,97834],{"class":117,"line":1180},[115,97826,27],{"class":125},[115,97828,171],{"class":121},[115,97830,97831],{"class":125},"resize((",[115,97833,623],{"class":174},[115,97835,30498],{"class":125},[115,97837,97838],{"class":117,"line":1195},[115,97839,93554],{"class":184},[115,97841,97842],{"class":117,"line":1201},[115,97843,97716],{"class":184},[106,97845,97847],{"className":30379,"code":97846,"language":30381,"meta":22,"style":22},"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",[112,97848,97849,97862,97866,97870,97875,97880,97885,97890,97895,97900],{"__ignoreMap":22},[115,97850,97851,97854,97856,97858,97860],{"class":117,"line":118},[115,97852,97853],{"class":125},"a.resize((",[115,97855,469],{"class":174},[115,97857,503],{"class":125},[115,97859,203],{"class":174},[115,97861,30498],{"class":125},[115,97863,97864],{"class":117,"line":37},[115,97865,93554],{"class":184},[115,97867,97868],{"class":117,"line":1180},[115,97869,93918],{"class":230},[115,97871,97872],{"class":117,"line":1195},[115,97873,97874],{"class":230},"array([[ 1,  2],\n",[115,97876,97877],{"class":117,"line":1201},[115,97878,97879],{"class":230},"       [ 3,  4],\n",[115,97881,97882],{"class":117,"line":1215},[115,97883,97884],{"class":230},"       [ 5,  6],\n",[115,97886,97887],{"class":117,"line":1221},[115,97888,97889],{"class":230},"       [ 7,  8],\n",[115,97891,97892],{"class":117,"line":1312},[115,97893,97894],{"class":230},"       [ 9, 10],\n",[115,97896,97897],{"class":117,"line":1318},[115,97898,97899],{"class":230},"       [11, 12]])\n",[115,97901,97902],{"class":117,"line":1330},[115,97903,93918],{"class":230},[57,97905,97907],{"id":97906},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97909,97910],{},"改变了原数组",[106,97912,97914],{"className":30379,"code":97913,"language":30381,"meta":22,"style":22},"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",[112,97915,97916,97932,97948,97952,97956,97960,97964],{"__ignoreMap":22},[115,97917,97918,97920,97922,97924,97926,97928,97930],{"class":117,"line":118},[115,97919,27],{"class":125},[115,97921,171],{"class":121},[115,97923,92992],{"class":125},[115,97925,343],{"class":174},[115,97927,503],{"class":125},[115,97929,648],{"class":174},[115,97931,132],{"class":125},[115,97933,97934,97936,97938,97940,97942,97944,97946],{"class":117,"line":37},[115,97935,97807],{"class":125},[115,97937,171],{"class":121},[115,97939,126],{"class":125},[115,97941,203],{"class":174},[115,97943,503],{"class":125},[115,97945,469],{"class":174},[115,97947,132],{"class":125},[115,97949,97950],{"class":117,"line":1180},[115,97951,93554],{"class":184},[115,97953,97954],{"class":117,"line":1195},[115,97955,93918],{"class":230},[115,97957,97958],{"class":117,"line":1201},[115,97959,97178],{"class":230},[115,97961,97962],{"class":117,"line":1215},[115,97963,97183],{"class":230},[115,97965,97966],{"class":117,"line":1221},[115,97967,93918],{"class":230},[57,97969,97971],{"id":97970},"_56-重要比较","5.6 重要比较：",[14,97973,97974],{},[20,97975],{"alt":22,"src":97976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97978,97979,97980,97982,97983,97985],{},"口诀：NumPy 函数要么用 ",[112,97981,95953],{},"，要么用 ",[112,97984,31497],{},"，创建结构用 shape，造数据用 size",[14,97987,97988],{},[20,97989],{"alt":22,"src":97990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5127,97992,97993],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":22,"searchDepth":37,"depth":37,"links":97995},[97996,97997,97998,97999,98000,98001],{"id":97517,"depth":37,"text":97518},{"id":97669,"depth":37,"text":97670},{"id":97719,"depth":37,"text":97720},{"id":97765,"depth":37,"text":97766},{"id":97906,"depth":37,"text":97907},{"id":97970,"depth":37,"text":97971},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97509,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98008,"title":98009,"body":98010,"description":39,"extension":40,"meta":99082,"navigation":42,"path":99083,"seo":99084,"stem":99085,"__hash__":99086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98011,"toc":99076},[98012,98015,98019,98022,98025,98028,98093,98096,98136,98139,98221,98224,98229,98251,98253,98258,98263,98266,98269,98424,98427,98629,98633,98636,98639,98707,98709,98714,98717,98720,98800,98804,98807,98809,98882,98884,98889,98891,98971,98975,98978,98981,98984,98987,98990,98993,99073],[10,98013,98009],{"id":98014},"_6数组的拼接",[57,98016,98018],{"id":98017},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98020,98021],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98023,98024],{},"函数内部传两个数列构成的数列或者元组",[14,98026,98027],{},"①一维数组的拼接",[106,98029,98031],{"className":30379,"code":98030,"language":30381,"meta":22,"style":22},"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",[112,98032,98033,98053,98073,98078,98083,98088],{"__ignoreMap":22},[115,98034,98035,98037,98039,98041,98043,98045,98047,98049,98051],{"class":117,"line":118},[115,98036,27],{"class":125},[115,98038,171],{"class":121},[115,98040,93014],{"class":125},[115,98042,343],{"class":174},[115,98044,503],{"class":125},[115,98046,203],{"class":174},[115,98048,503],{"class":125},[115,98050,197],{"class":174},[115,98052,4657],{"class":125},[115,98054,98055,98057,98059,98061,98063,98065,98067,98069,98071],{"class":117,"line":37},[115,98056,388],{"class":125},[115,98058,171],{"class":121},[115,98060,93014],{"class":125},[115,98062,418],{"class":174},[115,98064,503],{"class":125},[115,98066,444],{"class":174},[115,98068,503],{"class":125},[115,98070,469],{"class":174},[115,98072,4657],{"class":125},[115,98074,98075],{"class":117,"line":1180},[115,98076,98077],{"class":184},"#调用concatenate进行数组拼接\n",[115,98079,98080],{"class":117,"line":1195},[115,98081,98082],{"class":125},"np.concatenate((a,b))\n",[115,98084,98085],{"class":117,"line":1201},[115,98086,98087],{"class":184},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[115,98089,98090],{"class":117,"line":1215},[115,98091,98092],{"class":184},"#np.concatenate([a,b])\n",[14,98094,98095],{},"②一维多个数组拼接",[106,98097,98099],{"className":30379,"code":98098,"language":30381,"meta":22,"style":22},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[112,98100,98101,98106,98126,98131],{"__ignoreMap":22},[115,98102,98103],{"class":117,"line":118},[115,98104,98105],{"class":184},"#也可以多个数组进行拼接\n",[115,98107,98108,98110,98112,98114,98116,98118,98120,98122,98124],{"class":117,"line":37},[115,98109,413],{"class":125},[115,98111,171],{"class":121},[115,98113,93014],{"class":125},[115,98115,571],{"class":174},[115,98117,503],{"class":125},[115,98119,597],{"class":174},[115,98121,503],{"class":125},[115,98123,648],{"class":174},[115,98125,4657],{"class":125},[115,98127,98128],{"class":117,"line":1180},[115,98129,98130],{"class":125},"c\n",[115,98132,98133],{"class":117,"line":1195},[115,98134,98135],{"class":125},"np.concatenate((a,b,c))\n",[14,98137,98138],{},"③二维数组拼接",[106,98140,98142],{"className":30379,"code":98141,"language":30381,"meta":22,"style":22},"#二维数组使用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",[112,98143,98144,98149,98173,98198,98203,98208],{"__ignoreMap":22},[115,98145,98146],{"class":117,"line":118},[115,98147,98148],{"class":184},"#二维数组使用concatenate进行拼接\n",[115,98150,98151,98153,98155,98157,98159,98161,98163,98165,98167,98169,98171],{"class":117,"line":37},[115,98152,93296],{"class":125},[115,98154,171],{"class":121},[115,98156,92992],{"class":125},[115,98158,343],{"class":174},[115,98160,503],{"class":125},[115,98162,648],{"class":174},[115,98164,92997],{"class":125},[115,98166,197],{"class":174},[115,98168,503],{"class":125},[115,98170,418],{"class":174},[115,98172,132],{"class":125},[115,98174,98175,98178,98180,98182,98184,98186,98188,98190,98192,98194,98196],{"class":117,"line":1180},[115,98176,98177],{"class":125},"bb",[115,98179,171],{"class":121},[115,98181,92992],{"class":125},[115,98183,462],{"class":174},[115,98185,503],{"class":125},[115,98187,767],{"class":174},[115,98189,92997],{"class":125},[115,98191,197],{"class":174},[115,98193,503],{"class":125},[115,98195,418],{"class":174},[115,98197,132],{"class":125},[115,98199,98200],{"class":117,"line":1195},[115,98201,98202],{"class":184},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[115,98204,98205],{"class":117,"line":1201},[115,98206,98207],{"class":184},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[115,98209,98210,98213,98215,98217,98219],{"class":117,"line":1215},[115,98211,98212],{"class":125},"np.concatenate((aa,bb),",[115,98214,47515],{"class":5217},[115,98216,171],{"class":121},[115,98218,317],{"class":174},[115,98220,132],{"class":125},[14,98222,98223],{},"结果：",[14,98225,98226],{},[20,98227],{"alt":22,"src":98228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[106,98230,98232],{"className":30379,"code":98231,"language":30381,"meta":22,"style":22},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[112,98233,98234,98239],{"__ignoreMap":22},[115,98235,98236],{"class":117,"line":118},[115,98237,98238],{"class":184},"#指定axis为1进行拼接\n",[115,98240,98241,98243,98245,98247,98249],{"class":117,"line":37},[115,98242,98212],{"class":125},[115,98244,47515],{"class":5217},[115,98246,171],{"class":121},[115,98248,343],{"class":174},[115,98250,132],{"class":125},[14,98252,98223],{},[14,98254,98255],{},[20,98256],{"alt":22,"src":98257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98259,98260],{},[275,98261,98262],{},"二维数组总结：0竖着方向，1横着方向",[14,98264,98265],{},"④三维数组拼接",[14,98267,98268],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[106,98270,98272],{"className":30379,"code":98271,"language":30381,"meta":22,"style":22},"#两个三行六列\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",[112,98273,98274,98279,98307,98337,98342,98359,98364,98369,98374,98391,98396,98401,98406,98419],{"__ignoreMap":22},[115,98275,98276],{"class":117,"line":118},[115,98277,98278],{"class":184},"#两个三行六列\n",[115,98280,98281,98283,98285,98287,98289,98291,98293,98295,98297,98299,98301,98303,98305],{"class":117,"line":37},[115,98282,95511],{"class":125},[115,98284,171],{"class":121},[115,98286,92992],{"class":125},[115,98288,343],{"class":174},[115,98290,503],{"class":125},[115,98292,450],{"class":174},[115,98294,92997],{"class":125},[115,98296,203],{"class":174},[115,98298,503],{"class":125},[115,98300,197],{"class":174},[115,98302,503],{"class":125},[115,98304,469],{"class":174},[115,98306,132],{"class":125},[115,98308,98309,98312,98314,98316,98318,98320,98323,98325,98327,98329,98331,98333,98335],{"class":117,"line":1180},[115,98310,98311],{"class":125},"bbb",[115,98313,171],{"class":121},[115,98315,92992],{"class":125},[115,98317,462],{"class":174},[115,98319,503],{"class":125},[115,98321,98322],{"class":174},"137",[115,98324,92997],{"class":125},[115,98326,203],{"class":174},[115,98328,503],{"class":125},[115,98330,197],{"class":174},[115,98332,503],{"class":125},[115,98334,469],{"class":174},[115,98336,132],{"class":125},[115,98338,98339],{"class":117,"line":1195},[115,98340,98341],{"class":184},"#axis=0\n",[115,98343,98344,98346,98348,98351,98353,98355,98357],{"class":117,"line":1201},[115,98345,820],{"class":125},[115,98347,171],{"class":121},[115,98349,98350],{"class":125},"np.concatenate((aaa,bbb),",[115,98352,47515],{"class":5217},[115,98354,171],{"class":121},[115,98356,317],{"class":174},[115,98358,132],{"class":125},[115,98360,98361],{"class":117,"line":1215},[115,98362,98363],{"class":125},"s.shape\n",[115,98365,98366],{"class":117,"line":1221},[115,98367,98368],{"class":184},"#输出：(4,3,6)\n",[115,98370,98371],{"class":117,"line":1312},[115,98372,98373],{"class":184},"#axis=1\n",[115,98375,98376,98379,98381,98383,98385,98387,98389],{"class":117,"line":1318},[115,98377,98378],{"class":125},"ss",[115,98380,171],{"class":121},[115,98382,98350],{"class":125},[115,98384,47515],{"class":5217},[115,98386,171],{"class":121},[115,98388,343],{"class":174},[115,98390,132],{"class":125},[115,98392,98393],{"class":117,"line":1330},[115,98394,98395],{"class":125},"ss.shape\n",[115,98397,98398],{"class":117,"line":1612},[115,98399,98400],{"class":184},"#输出：(2,6,6)\n",[115,98402,98403],{"class":117,"line":1617},[115,98404,98405],{"class":184},"#axis=2\n",[115,98407,98408,98410,98412,98414,98416],{"class":117,"line":1623},[115,98409,98350],{"class":125},[115,98411,47515],{"class":5217},[115,98413,171],{"class":121},[115,98415,203],{"class":174},[115,98417,98418],{"class":125},").shape\n",[115,98420,98421],{"class":117,"line":1628},[115,98422,98423],{"class":184},"#输出：（2，3，12）\n",[14,98425,98426],{},"⑤四维数组拼接",[106,98428,98430],{"className":30379,"code":98429,"language":30381,"meta":22,"style":22},"#两个三行六列\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",[112,98431,98432,98436,98464,98492,98517,98543,98547,98560,98565,98569,98581,98586,98590,98602,98607,98612,98624],{"__ignoreMap":22},[115,98433,98434],{"class":117,"line":118},[115,98435,98278],{"class":184},[115,98437,98438,98440,98442,98444,98446,98448,98450,98452,98454,98456,98458,98460,98462],{"class":117,"line":37},[115,98439,95511],{"class":125},[115,98441,171],{"class":121},[115,98443,92992],{"class":125},[115,98445,343],{"class":174},[115,98447,503],{"class":125},[115,98449,450],{"class":174},[115,98451,92997],{"class":125},[115,98453,203],{"class":174},[115,98455,503],{"class":125},[115,98457,197],{"class":174},[115,98459,503],{"class":125},[115,98461,469],{"class":174},[115,98463,132],{"class":125},[115,98465,98466,98468,98470,98472,98474,98476,98478,98480,98482,98484,98486,98488,98490],{"class":117,"line":1180},[115,98467,98311],{"class":125},[115,98469,171],{"class":121},[115,98471,92992],{"class":125},[115,98473,462],{"class":174},[115,98475,503],{"class":125},[115,98477,98322],{"class":174},[115,98479,92997],{"class":125},[115,98481,203],{"class":174},[115,98483,503],{"class":125},[115,98485,197],{"class":174},[115,98487,503],{"class":125},[115,98489,469],{"class":174},[115,98491,132],{"class":125},[115,98493,98494,98497,98499,98501,98503,98505,98507,98509,98511,98513,98515],{"class":117,"line":1195},[115,98495,98496],{"class":125},"aaaa",[115,98498,171],{"class":121},[115,98500,97660],{"class":125},[115,98502,203],{"class":174},[115,98504,503],{"class":125},[115,98506,197],{"class":174},[115,98508,503],{"class":125},[115,98510,197],{"class":174},[115,98512,503],{"class":125},[115,98514,203],{"class":174},[115,98516,132],{"class":125},[115,98518,98519,98522,98524,98527,98529,98531,98533,98535,98537,98539,98541],{"class":117,"line":1201},[115,98520,98521],{"class":125},"bbbb",[115,98523,171],{"class":121},[115,98525,98526],{"class":125},"bbb.reshape(",[115,98528,203],{"class":174},[115,98530,503],{"class":125},[115,98532,197],{"class":174},[115,98534,503],{"class":125},[115,98536,197],{"class":174},[115,98538,503],{"class":125},[115,98540,203],{"class":174},[115,98542,132],{"class":125},[115,98544,98545],{"class":117,"line":1215},[115,98546,98341],{"class":184},[115,98548,98549,98552,98554,98556,98558],{"class":117,"line":1221},[115,98550,98551],{"class":125},"np.concatenate((aaaa,bbbb),",[115,98553,47515],{"class":5217},[115,98555,171],{"class":121},[115,98557,317],{"class":174},[115,98559,98418],{"class":125},[115,98561,98562],{"class":117,"line":1312},[115,98563,98564],{"class":184},"#结果：（4，3，3，2）\n",[115,98566,98567],{"class":117,"line":1318},[115,98568,98373],{"class":184},[115,98570,98571,98573,98575,98577,98579],{"class":117,"line":1330},[115,98572,98551],{"class":125},[115,98574,47515],{"class":5217},[115,98576,171],{"class":121},[115,98578,343],{"class":174},[115,98580,98418],{"class":125},[115,98582,98583],{"class":117,"line":1612},[115,98584,98585],{"class":184},"#结果：（2，6，3，2）\n",[115,98587,98588],{"class":117,"line":1617},[115,98589,98405],{"class":184},[115,98591,98592,98594,98596,98598,98600],{"class":117,"line":1623},[115,98593,98551],{"class":125},[115,98595,47515],{"class":5217},[115,98597,171],{"class":121},[115,98599,203],{"class":174},[115,98601,98418],{"class":125},[115,98603,98604],{"class":117,"line":1628},[115,98605,98606],{"class":184},"#结果：（2，3，6，2）\n",[115,98608,98609],{"class":117,"line":1642},[115,98610,98611],{"class":184},"#axis=3\n",[115,98613,98614,98616,98618,98620,98622],{"class":117,"line":1647},[115,98615,98551],{"class":125},[115,98617,47515],{"class":5217},[115,98619,171],{"class":121},[115,98621,197],{"class":174},[115,98623,98418],{"class":125},[115,98625,98626],{"class":117,"line":1653},[115,98627,98628],{"class":184},"#结果：（2，3，3，4）\n",[57,98630,98632],{"id":98631},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98634,98635],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98637,98638],{},"①二维数组",[106,98640,98642],{"className":30379,"code":98641,"language":30381,"meta":22,"style":22},"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",[112,98643,98644,98668,98692,98697,98702],{"__ignoreMap":22},[115,98645,98646,98648,98650,98652,98654,98656,98658,98660,98662,98664,98666],{"class":117,"line":118},[115,98647,93296],{"class":125},[115,98649,171],{"class":121},[115,98651,92992],{"class":125},[115,98653,343],{"class":174},[115,98655,503],{"class":125},[115,98657,648],{"class":174},[115,98659,92997],{"class":125},[115,98661,197],{"class":174},[115,98663,503],{"class":125},[115,98665,418],{"class":174},[115,98667,132],{"class":125},[115,98669,98670,98672,98674,98676,98678,98680,98682,98684,98686,98688,98690],{"class":117,"line":37},[115,98671,98177],{"class":125},[115,98673,171],{"class":121},[115,98675,92992],{"class":125},[115,98677,462],{"class":174},[115,98679,503],{"class":125},[115,98681,767],{"class":174},[115,98683,92997],{"class":125},[115,98685,197],{"class":174},[115,98687,503],{"class":125},[115,98689,418],{"class":174},[115,98691,132],{"class":125},[115,98693,98694],{"class":117,"line":1180},[115,98695,98696],{"class":125},"np.hstack((aa,bb))\n",[115,98698,98699],{"class":117,"line":1195},[115,98700,98701],{"class":184},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[115,98703,98704],{"class":117,"line":1201},[115,98705,98706],{"class":184},"#np.hstack([aa,bb])\n",[14,98708,98223],{},[14,98710,98711],{},[20,98712],{"alt":22,"src":98713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98715,98716],{},"等效于concatenate()函数中axis=1时的情况",[14,98718,98719],{},"②三维数组",[106,98721,98723],{"className":30379,"code":98722,"language":30381,"meta":22,"style":22},"#两个三行六列\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",[112,98724,98725,98729,98757,98785,98790,98795],{"__ignoreMap":22},[115,98726,98727],{"class":117,"line":118},[115,98728,98278],{"class":184},[115,98730,98731,98733,98735,98737,98739,98741,98743,98745,98747,98749,98751,98753,98755],{"class":117,"line":37},[115,98732,95511],{"class":125},[115,98734,171],{"class":121},[115,98736,92992],{"class":125},[115,98738,343],{"class":174},[115,98740,503],{"class":125},[115,98742,450],{"class":174},[115,98744,92997],{"class":125},[115,98746,203],{"class":174},[115,98748,503],{"class":125},[115,98750,197],{"class":174},[115,98752,503],{"class":125},[115,98754,469],{"class":174},[115,98756,132],{"class":125},[115,98758,98759,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779,98781,98783],{"class":117,"line":1180},[115,98760,98311],{"class":125},[115,98762,171],{"class":121},[115,98764,92992],{"class":125},[115,98766,462],{"class":174},[115,98768,503],{"class":125},[115,98770,98322],{"class":174},[115,98772,92997],{"class":125},[115,98774,203],{"class":174},[115,98776,503],{"class":125},[115,98778,197],{"class":174},[115,98780,503],{"class":125},[115,98782,469],{"class":174},[115,98784,132],{"class":125},[115,98786,98787],{"class":117,"line":1195},[115,98788,98789],{"class":184},"#使用hstack\n",[115,98791,98792],{"class":117,"line":1201},[115,98793,98794],{"class":125},"np.hstack((aaa,bbb)).shape\n",[115,98796,98797],{"class":117,"line":1215},[115,98798,98799],{"class":184},"#输出：（2，6，6）\n",[57,98801,98803],{"id":98802},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98805,98806],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98808,98638],{},[106,98810,98812],{"className":30379,"code":98811,"language":30381,"meta":22,"style":22},"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",[112,98813,98814,98838,98862,98867,98872,98877],{"__ignoreMap":22},[115,98815,98816,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836],{"class":117,"line":118},[115,98817,93296],{"class":125},[115,98819,171],{"class":121},[115,98821,92992],{"class":125},[115,98823,343],{"class":174},[115,98825,503],{"class":125},[115,98827,648],{"class":174},[115,98829,92997],{"class":125},[115,98831,197],{"class":174},[115,98833,503],{"class":125},[115,98835,418],{"class":174},[115,98837,132],{"class":125},[115,98839,98840,98842,98844,98846,98848,98850,98852,98854,98856,98858,98860],{"class":117,"line":37},[115,98841,98177],{"class":125},[115,98843,171],{"class":121},[115,98845,92992],{"class":125},[115,98847,462],{"class":174},[115,98849,503],{"class":125},[115,98851,767],{"class":174},[115,98853,92997],{"class":125},[115,98855,197],{"class":174},[115,98857,503],{"class":125},[115,98859,418],{"class":174},[115,98861,132],{"class":125},[115,98863,98864],{"class":117,"line":1180},[115,98865,98866],{"class":184},"#vstack 垂直方向进行堆叠\n",[115,98868,98869],{"class":117,"line":1195},[115,98870,98871],{"class":125},"np.vstack((aa,bb))\n",[115,98873,98874],{"class":117,"line":1201},[115,98875,98876],{"class":184},"#与hstack传的参数类似，等价于：\n",[115,98878,98879],{"class":117,"line":1215},[115,98880,98881],{"class":125},"np.vstack([aa,bb])\n",[14,98883,98223],{},[14,98885,98886],{},[20,98887],{"alt":22,"src":98888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98890,98719],{},[106,98892,98894],{"className":30379,"code":98893,"language":30381,"meta":22,"style":22},"#两个三行六列\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",[112,98895,98896,98900,98928,98956,98961,98966],{"__ignoreMap":22},[115,98897,98898],{"class":117,"line":118},[115,98899,98278],{"class":184},[115,98901,98902,98904,98906,98908,98910,98912,98914,98916,98918,98920,98922,98924,98926],{"class":117,"line":37},[115,98903,95511],{"class":125},[115,98905,171],{"class":121},[115,98907,92992],{"class":125},[115,98909,343],{"class":174},[115,98911,503],{"class":125},[115,98913,450],{"class":174},[115,98915,92997],{"class":125},[115,98917,203],{"class":174},[115,98919,503],{"class":125},[115,98921,197],{"class":174},[115,98923,503],{"class":125},[115,98925,469],{"class":174},[115,98927,132],{"class":125},[115,98929,98930,98932,98934,98936,98938,98940,98942,98944,98946,98948,98950,98952,98954],{"class":117,"line":1180},[115,98931,98311],{"class":125},[115,98933,171],{"class":121},[115,98935,92992],{"class":125},[115,98937,462],{"class":174},[115,98939,503],{"class":125},[115,98941,98322],{"class":174},[115,98943,92997],{"class":125},[115,98945,203],{"class":174},[115,98947,503],{"class":125},[115,98949,197],{"class":174},[115,98951,503],{"class":125},[115,98953,469],{"class":174},[115,98955,132],{"class":125},[115,98957,98958],{"class":117,"line":1195},[115,98959,98960],{"class":184},"#使用vstack\n",[115,98962,98963],{"class":117,"line":1201},[115,98964,98965],{"class":125},"np.vstack((aaa,bbb)).shape\n",[115,98967,98968],{"class":117,"line":1215},[115,98969,98970],{"class":184},"#输出：（4，3，6）\n",[57,98972,98974],{"id":98973},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98976,98977],{},"该方法是三维数组特有的方法",[14,98979,98980],{},"也就是说",[14,98982,98983],{},"一维数组拼接方法用：concatenate()",[14,98985,98986],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98988,98989],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98991,98992],{},"四维数组及多维数组只能用concatenate进行拼接",[106,98994,98996],{"className":30379,"code":98995,"language":30381,"meta":22,"style":22},"#两个三行六列\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",[112,98997,98998,99002,99030,99058,99063,99068],{"__ignoreMap":22},[115,98999,99000],{"class":117,"line":118},[115,99001,98278],{"class":184},[115,99003,99004,99006,99008,99010,99012,99014,99016,99018,99020,99022,99024,99026,99028],{"class":117,"line":37},[115,99005,95511],{"class":125},[115,99007,171],{"class":121},[115,99009,92992],{"class":125},[115,99011,343],{"class":174},[115,99013,503],{"class":125},[115,99015,450],{"class":174},[115,99017,92997],{"class":125},[115,99019,203],{"class":174},[115,99021,503],{"class":125},[115,99023,197],{"class":174},[115,99025,503],{"class":125},[115,99027,469],{"class":174},[115,99029,132],{"class":125},[115,99031,99032,99034,99036,99038,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":117,"line":1180},[115,99033,98311],{"class":125},[115,99035,171],{"class":121},[115,99037,92992],{"class":125},[115,99039,462],{"class":174},[115,99041,503],{"class":125},[115,99043,98322],{"class":174},[115,99045,92997],{"class":125},[115,99047,203],{"class":174},[115,99049,503],{"class":125},[115,99051,197],{"class":174},[115,99053,503],{"class":125},[115,99055,469],{"class":174},[115,99057,132],{"class":125},[115,99059,99060],{"class":117,"line":1195},[115,99061,99062],{"class":184},"#使用dstack\n",[115,99064,99065],{"class":117,"line":1201},[115,99066,99067],{"class":125},"np.dstack((aaa,bbb)).shape\n",[115,99069,99070],{"class":117,"line":1215},[115,99071,99072],{"class":184},"#结果：（2，3，12）\n",[5127,99074,99075],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":99077},[99078,99079,99080,99081],{"id":98017,"depth":37,"text":98018},{"id":98631,"depth":37,"text":98632},{"id":98802,"depth":37,"text":98803},{"id":98973,"depth":37,"text":98974},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98009,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99088,"title":99089,"body":99090,"description":39,"extension":40,"meta":99365,"navigation":42,"path":99366,"seo":99367,"stem":99368,"__hash__":99369},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99091,"toc":99363},[99092,99095,99098,99192,99195,99198,99201,99204,99207,99210,99213,99216,99360],[10,99093,99089],{"id":99094},"_7数组转置",[14,99096,99097],{},"使用transpose()函数",[106,99099,99101],{"className":30379,"code":99100,"language":30381,"meta":22,"style":22},"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",[112,99102,99103,99113,99137,99142,99147,99152,99157,99165,99169,99173,99178,99183,99188],{"__ignoreMap":22},[115,99104,99105,99107,99109,99111],{"class":117,"line":118},[115,99106,30393],{"class":121},[115,99108,31381],{"class":125},[115,99110,31384],{"class":121},[115,99112,31387],{"class":125},[115,99114,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135],{"class":117,"line":37},[115,99116,27],{"class":125},[115,99118,171],{"class":121},[115,99120,31718],{"class":125},[115,99122,343],{"class":174},[115,99124,503],{"class":125},[115,99126,648],{"class":174},[115,99128,92997],{"class":125},[115,99130,418],{"class":174},[115,99132,503],{"class":125},[115,99134,197],{"class":174},[115,99136,132],{"class":125},[115,99138,99139],{"class":117,"line":1180},[115,99140,99141],{"class":184},"#二维数组转置\n",[115,99143,99144],{"class":117,"line":1195},[115,99145,99146],{"class":184},"#调用transpose()函数\n",[115,99148,99149],{"class":117,"line":1201},[115,99150,99151],{"class":125},"a.transpose()\n",[115,99153,99154],{"class":117,"line":1215},[115,99155,99156],{"class":184},"#对于二维数组也可以采用.T来实现\n",[115,99158,99159,99162],{"class":117,"line":1221},[115,99160,99161],{"class":125},"a.T",[115,99163,99164],{"class":184},"#与上述代码一样\n",[115,99166,99167],{"class":117,"line":1312},[115,99168,93554],{"class":184},[115,99170,99171],{"class":117,"line":1318},[115,99172,93918],{"class":230},[115,99174,99175],{"class":117,"line":1330},[115,99176,99177],{"class":230},"array([[ 1,  4,  7, 10],\n",[115,99179,99180],{"class":117,"line":1612},[115,99181,99182],{"class":230},"       [ 2,  5,  8, 11],\n",[115,99184,99185],{"class":117,"line":1617},[115,99186,99187],{"class":230},"       [ 3,  6,  9, 12]])\n",[115,99189,99190],{"class":117,"line":1623},[115,99191,93918],{"class":230},[14,99193,99194],{},"也可以使用np.transpose()的形式",[14,99196,99197],{},"#多维数组进行转置 np.transpose()",[14,99199,99200],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99202,99203],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99205,99206],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99208,99209],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99211,99212],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99214,99215],{},"四维及以上的数组也是一样的道理",[106,99217,99219],{"className":30379,"code":99218,"language":30381,"meta":22,"style":22},"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",[112,99220,99221,99249,99254,99259,99264,99282,99287,99319,99324,99329,99334,99355],{"__ignoreMap":22},[115,99222,99223,99225,99227,99229,99231,99233,99235,99237,99239,99241,99243,99245,99247],{"class":117,"line":118},[115,99224,945],{"class":125},[115,99226,171],{"class":121},[115,99228,92992],{"class":125},[115,99230,343],{"class":174},[115,99232,503],{"class":125},[115,99234,450],{"class":174},[115,99236,92997],{"class":125},[115,99238,197],{"class":174},[115,99240,503],{"class":125},[115,99242,469],{"class":174},[115,99244,503],{"class":125},[115,99246,203],{"class":174},[115,99248,132],{"class":125},[115,99250,99251],{"class":117,"line":37},[115,99252,99253],{"class":125},"x.shape\n",[115,99255,99256],{"class":117,"line":1180},[115,99257,99258],{"class":184},"#结果：（3,6,2）\n",[115,99260,99261],{"class":117,"line":1195},[115,99262,99263],{"class":184},"#使用np.transpose()进行转置 变为(2,6,3)\n",[115,99265,99266,99269,99271,99273,99275,99277,99279],{"class":117,"line":1201},[115,99267,99268],{"class":125},"np.transpose(x,(",[115,99270,203],{"class":174},[115,99272,503],{"class":125},[115,99274,343],{"class":174},[115,99276,503],{"class":125},[115,99278,317],{"class":174},[115,99280,99281],{"class":125},")).shape\n",[115,99283,99284],{"class":117,"line":1215},[115,99285,99286],{"class":184},"#结果：(2,6,3)\n",[115,99288,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307,99309,99311,99313,99315,99317],{"class":117,"line":1221},[115,99290,98496],{"class":125},[115,99292,171],{"class":121},[115,99294,92992],{"class":125},[115,99296,343],{"class":174},[115,99298,503],{"class":125},[115,99300,450],{"class":174},[115,99302,92997],{"class":125},[115,99304,197],{"class":174},[115,99306,503],{"class":125},[115,99308,203],{"class":174},[115,99310,503],{"class":125},[115,99312,343],{"class":174},[115,99314,503],{"class":125},[115,99316,469],{"class":174},[115,99318,132],{"class":125},[115,99320,99321],{"class":117,"line":1312},[115,99322,99323],{"class":125},"aaaa.shape\n",[115,99325,99326],{"class":117,"line":1318},[115,99327,99328],{"class":184},"#结果：（3，2，1，6）\n",[115,99330,99331],{"class":117,"line":1330},[115,99332,99333],{"class":184},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[115,99335,99336,99339,99341,99343,99345,99347,99349,99351,99353],{"class":117,"line":1612},[115,99337,99338],{"class":125},"np.transpose(aaaa,(",[115,99340,343],{"class":174},[115,99342,503],{"class":125},[115,99344,203],{"class":174},[115,99346,503],{"class":125},[115,99348,317],{"class":174},[115,99350,503],{"class":125},[115,99352,197],{"class":174},[115,99354,99281],{"class":125},[115,99356,99357],{"class":117,"line":1617},[115,99358,99359],{"class":184},"#结果：(2,1,3,6)\n",[5127,99361,99362],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":99364},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99089,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99371,"title":99372,"body":99373,"description":39,"extension":40,"meta":100107,"navigation":42,"path":100108,"seo":100109,"stem":100110,"__hash__":100111},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99374,"toc":100105},[99375,99378,99381,99384,99387,99390,99393,99396,99399,99508,99511,99514,100102],[10,99376,99372],{"id":99377},"_8数组分割",[14,99379,99380],{},"split分割",[14,99382,99383],{},"numpy.split(ary,indics_or_sections,axis)",[14,99385,99386],{},"解释：",[14,99388,99389],{},"ary:被分割的数组",[14,99391,99392],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99394,99395],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99397,99398],{},"①一维数组的分割",[106,99400,99402],{"className":30379,"code":99401,"language":30381,"meta":22,"style":22},"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",[112,99403,99404,99420,99425,99434,99438,99443,99451,99455,99460,99465,99478,99482,99487,99499,99503],{"__ignoreMap":22},[115,99405,99406,99408,99410,99412,99414,99416,99418],{"class":117,"line":118},[115,99407,27],{"class":125},[115,99409,171],{"class":121},[115,99411,92992],{"class":125},[115,99413,343],{"class":174},[115,99415,503],{"class":125},[115,99417,545],{"class":174},[115,99419,132],{"class":125},[115,99421,99422],{"class":117,"line":37},[115,99423,99424],{"class":184},"#如果传入整数，必须能够平分，否则会报错\n",[115,99426,99427,99430,99432],{"class":117,"line":1180},[115,99428,99429],{"class":125},"np.split(a,",[115,99431,203],{"class":174},[115,99433,132],{"class":125},[115,99435,99436],{"class":117,"line":1195},[115,99437,93554],{"class":184},[115,99439,99440],{"class":117,"line":1201},[115,99441,99442],{"class":184},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[115,99444,99445,99447,99449],{"class":117,"line":1215},[115,99446,99429],{"class":125},[115,99448,418],{"class":174},[115,99450,132],{"class":125},[115,99452,99453],{"class":117,"line":1221},[115,99454,93554],{"class":184},[115,99456,99457],{"class":117,"line":1312},[115,99458,99459],{"class":184},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[115,99461,99462],{"class":117,"line":1318},[115,99463,99464],{"class":184},"#传入数组\n",[115,99466,99467,99470,99472,99474,99476],{"class":117,"line":1330},[115,99468,99469],{"class":125},"np.split(a,[",[115,99471,197],{"class":174},[115,99473,503],{"class":125},[115,99475,444],{"class":174},[115,99477,4657],{"class":125},[115,99479,99480],{"class":117,"line":1612},[115,99481,93554],{"class":184},[115,99483,99484],{"class":117,"line":1617},[115,99485,99486],{"class":184},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[115,99488,99489,99491,99493,99495,99497],{"class":117,"line":1623},[115,99490,99469],{"class":125},[115,99492,444],{"class":174},[115,99494,503],{"class":125},[115,99496,494],{"class":174},[115,99498,4657],{"class":125},[115,99500,99501],{"class":117,"line":1628},[115,99502,93554],{"class":184},[115,99504,99505],{"class":117,"line":1642},[115,99506,99507],{"class":184},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99509,99510],{},"②二维数组的分割",[14,99512,99513],{},"使用split()",[106,99515,99517],{"className":30379,"code":99516,"language":30381,"meta":22,"style":22},"#二维数组分割\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",[112,99518,99519,99524,99548,99553,99562,99566,99570,99575,99580,99585,99590,99595,99600,99605,99609,99622,99626,99630,99634,99638,99642,99647,99652,99657,99661,99666,99682,99686,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99775,99780,99784,99788,99808,99812,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99901,99906,99910,99915,99924,99928,99932,99936,99940,99944,99948,99952,99956,99960,99969,99973,99977,99981,99985,99989,99993,99997,100001,100005,100009,100013,100017,100021,100025,100029,100033,100037,100041,100045,100049,100053,100066,100070,100074,100078,100082,100086,100090,100094,100098],{"__ignoreMap":22},[115,99520,99521],{"class":117,"line":118},[115,99522,99523],{"class":184},"#二维数组分割\n",[115,99525,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544,99546],{"class":117,"line":37},[115,99527,93296],{"class":125},[115,99529,171],{"class":121},[115,99531,92992],{"class":125},[115,99533,343],{"class":174},[115,99535,503],{"class":125},[115,99537,450],{"class":174},[115,99539,92997],{"class":125},[115,99541,469],{"class":174},[115,99543,503],{"class":125},[115,99545,469],{"class":174},[115,99547,132],{"class":125},[115,99549,99550],{"class":117,"line":1180},[115,99551,99552],{"class":184},"#默认axis=0  传入整数平均分,按行来的\n",[115,99554,99555,99558,99560],{"class":117,"line":1195},[115,99556,99557],{"class":125},"np.split(aa,",[115,99559,197],{"class":174},[115,99561,132],{"class":125},[115,99563,99564],{"class":117,"line":1201},[115,99565,95754],{"class":184},[115,99567,99568],{"class":117,"line":1215},[115,99569,93918],{"class":230},[115,99571,99572],{"class":117,"line":1221},[115,99573,99574],{"class":230},"[array([[ 1,  2,  3,  4,  5,  6],\n",[115,99576,99577],{"class":117,"line":1312},[115,99578,99579],{"class":230},"        [ 7,  8,  9, 10, 11, 12]]),\n",[115,99581,99582],{"class":117,"line":1318},[115,99583,99584],{"class":230}," array([[13, 14, 15, 16, 17, 18],\n",[115,99586,99587],{"class":117,"line":1330},[115,99588,99589],{"class":230},"        [19, 20, 21, 22, 23, 24]]),\n",[115,99591,99592],{"class":117,"line":1612},[115,99593,99594],{"class":230}," array([[25, 26, 27, 28, 29, 30],\n",[115,99596,99597],{"class":117,"line":1617},[115,99598,99599],{"class":230},"        [31, 32, 33, 34, 35, 36]])]\n",[115,99601,99602],{"class":117,"line":1623},[115,99603,99604],{"class":230}," '''\n",[115,99606,99607],{"class":117,"line":1628},[115,99608,99464],{"class":184},[115,99610,99611,99614,99616,99618,99620],{"class":117,"line":1642},[115,99612,99613],{"class":125},"np.split(aa,[",[115,99615,203],{"class":174},[115,99617,503],{"class":125},[115,99619,444],{"class":174},[115,99621,4657],{"class":125},[115,99623,99624],{"class":117,"line":1647},[115,99625,95754],{"class":184},[115,99627,99628],{"class":117,"line":1653},[115,99629,93918],{"class":230},[115,99631,99632],{"class":117,"line":1674},[115,99633,99574],{"class":230},[115,99635,99636],{"class":117,"line":1679},[115,99637,99579],{"class":230},[115,99639,99640],{"class":117,"line":1693},[115,99641,99584],{"class":230},[115,99643,99644],{"class":117,"line":1698},[115,99645,99646],{"class":230},"        [19, 20, 21, 22, 23, 24],\n",[115,99648,99649],{"class":117,"line":1727},[115,99650,99651],{"class":230},"        [25, 26, 27, 28, 29, 30]]),\n",[115,99653,99654],{"class":117,"line":1732},[115,99655,99656],{"class":230}," array([[31, 32, 33, 34, 35, 36]])]\n",[115,99658,99659],{"class":117,"line":1749},[115,99660,93918],{"class":230},[115,99662,99663],{"class":117,"line":1754},[115,99664,99665],{"class":184},"#axis=1 按照列来分\n",[115,99667,99668,99670,99672,99674,99676,99678,99680],{"class":117,"line":1759},[115,99669,99557],{"class":125},[115,99671,197],{"class":174},[115,99673,503],{"class":125},[115,99675,47515],{"class":5217},[115,99677,171],{"class":121},[115,99679,343],{"class":174},[115,99681,132],{"class":125},[115,99683,99684],{"class":117,"line":1764},[115,99685,95754],{"class":184},[115,99687,99688],{"class":117,"line":1778},[115,99689,93918],{"class":230},[115,99691,99692],{"class":117,"line":1783},[115,99693,99694],{"class":230},"[array([[ 1,  2],\n",[115,99696,99697],{"class":117,"line":2577},[115,99698,99699],{"class":230},"        [ 7,  8],\n",[115,99701,99702],{"class":117,"line":2591},[115,99703,99704],{"class":230},"        [13, 14],\n",[115,99706,99707],{"class":117,"line":2599},[115,99708,99709],{"class":230},"        [19, 20],\n",[115,99711,99712],{"class":117,"line":2604},[115,99713,99714],{"class":230},"        [25, 26],\n",[115,99716,99717],{"class":117,"line":2610},[115,99718,99719],{"class":230},"        [31, 32]]),\n",[115,99721,99722],{"class":117,"line":2616},[115,99723,99724],{"class":230}," array([[ 3,  4],\n",[115,99726,99727],{"class":117,"line":2621},[115,99728,99729],{"class":230},"        [ 9, 10],\n",[115,99731,99732],{"class":117,"line":7949},[115,99733,99734],{"class":230},"        [15, 16],\n",[115,99736,99737],{"class":117,"line":7973},[115,99738,99739],{"class":230},"        [21, 22],\n",[115,99741,99742],{"class":117,"line":7978},[115,99743,99744],{"class":230},"        [27, 28],\n",[115,99746,99747],{"class":117,"line":7984},[115,99748,99749],{"class":230},"        [33, 34]]),\n",[115,99751,99752],{"class":117,"line":8011},[115,99753,99754],{"class":230}," array([[ 5,  6],\n",[115,99756,99757],{"class":117,"line":8016},[115,99758,99759],{"class":230},"        [11, 12],\n",[115,99761,99762],{"class":117,"line":8022},[115,99763,99764],{"class":230},"        [17, 18],\n",[115,99766,99767],{"class":117,"line":8034},[115,99768,99769],{"class":230},"        [23, 24],\n",[115,99771,99772],{"class":117,"line":8046},[115,99773,99774],{"class":230},"        [29, 30],\n",[115,99776,99777],{"class":117,"line":8058},[115,99778,99779],{"class":230},"        [35, 36]])]\n",[115,99781,99782],{"class":117,"line":9717},[115,99783,99604],{"class":230},[115,99785,99786],{"class":117,"line":9742},[115,99787,99464],{"class":184},[115,99789,99790,99792,99794,99796,99798,99800,99802,99804,99806],{"class":117,"line":9765},[115,99791,99613],{"class":125},[115,99793,343],{"class":174},[115,99795,503],{"class":125},[115,99797,203],{"class":174},[115,99799,41610],{"class":125},[115,99801,47515],{"class":5217},[115,99803,171],{"class":121},[115,99805,343],{"class":174},[115,99807,132],{"class":125},[115,99809,99810],{"class":117,"line":9789},[115,99811,93554],{"class":184},[115,99813,99814],{"class":117,"line":9794},[115,99815,93918],{"class":230},[115,99817,99818],{"class":117,"line":9799},[115,99819,99820],{"class":230},"[array([[ 1],\n",[115,99822,99823],{"class":117,"line":9804},[115,99824,99825],{"class":230},"        [ 7],\n",[115,99827,99828],{"class":117,"line":9813},[115,99829,99830],{"class":230},"        [13],\n",[115,99832,99833],{"class":117,"line":9818},[115,99834,99835],{"class":230},"        [19],\n",[115,99837,99838],{"class":117,"line":9824},[115,99839,99840],{"class":230},"        [25],\n",[115,99842,99843],{"class":117,"line":9845},[115,99844,99845],{"class":230},"        [31]]),\n",[115,99847,99848],{"class":117,"line":9851},[115,99849,99850],{"class":230}," array([[ 2],\n",[115,99852,99853],{"class":117,"line":9865},[115,99854,99855],{"class":230},"        [ 8],\n",[115,99857,99858],{"class":117,"line":9871},[115,99859,99860],{"class":230},"        [14],\n",[115,99862,99863],{"class":117,"line":9898},[115,99864,99865],{"class":230},"        [20],\n",[115,99867,99868],{"class":117,"line":9907},[115,99869,99870],{"class":230},"        [26],\n",[115,99872,99873],{"class":117,"line":9913},[115,99874,99875],{"class":230},"        [32]]),\n",[115,99877,99878],{"class":117,"line":9921},[115,99879,99880],{"class":230}," array([[ 3,  4,  5,  6],\n",[115,99882,99883],{"class":117,"line":9926},[115,99884,99885],{"class":230},"        [ 9, 10, 11, 12],\n",[115,99887,99888],{"class":117,"line":16605},[115,99889,99890],{"class":230},"        [15, 16, 17, 18],\n",[115,99892,99893],{"class":117,"line":16611},[115,99894,99895],{"class":230},"        [21, 22, 23, 24],\n",[115,99897,99898],{"class":117,"line":16634},[115,99899,99900],{"class":230},"        [27, 28, 29, 30],\n",[115,99902,99903],{"class":117,"line":16640},[115,99904,99905],{"class":230},"        [33, 34, 35, 36]])]\n",[115,99907,99908],{"class":117,"line":16663},[115,99909,93918],{"class":230},[115,99911,99912],{"class":117,"line":16677},[115,99913,99914],{"class":184},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[115,99916,99917,99920,99922],{"class":117,"line":16697},[115,99918,99919],{"class":125},"np.vsplit(aa,",[115,99921,197],{"class":174},[115,99923,132],{"class":125},[115,99925,99926],{"class":117,"line":16703},[115,99927,93554],{"class":184},[115,99929,99930],{"class":117,"line":16714},[115,99931,93918],{"class":230},[115,99933,99934],{"class":117,"line":16737},[115,99935,99574],{"class":230},[115,99937,99938],{"class":117,"line":16759},[115,99939,99579],{"class":230},[115,99941,99942],{"class":117,"line":16764},[115,99943,99584],{"class":230},[115,99945,99946],{"class":117,"line":16770},[115,99947,99589],{"class":230},[115,99949,99950],{"class":117,"line":16784},[115,99951,99594],{"class":230},[115,99953,99954],{"class":117,"line":16797},[115,99955,99599],{"class":230},[115,99957,99958],{"class":117,"line":16802},[115,99959,93918],{"class":230},[115,99961,99962,99965,99967],{"class":117,"line":16816},[115,99963,99964],{"class":125},"np.hsplit(aa,",[115,99966,197],{"class":174},[115,99968,132],{"class":125},[115,99970,99971],{"class":117,"line":16821},[115,99972,93554],{"class":184},[115,99974,99975],{"class":117,"line":16827},[115,99976,93918],{"class":230},[115,99978,99979],{"class":117,"line":16832},[115,99980,99694],{"class":230},[115,99982,99983],{"class":117,"line":16846},[115,99984,99699],{"class":230},[115,99986,99987],{"class":117,"line":16851},[115,99988,99704],{"class":230},[115,99990,99991],{"class":117,"line":16856},[115,99992,99709],{"class":230},[115,99994,99995],{"class":117,"line":16870},[115,99996,99714],{"class":230},[115,99998,99999],{"class":117,"line":16882},[115,100000,99719],{"class":230},[115,100002,100003],{"class":117,"line":16887},[115,100004,99724],{"class":230},[115,100006,100007],{"class":117,"line":16900},[115,100008,99729],{"class":230},[115,100010,100011],{"class":117,"line":16905},[115,100012,99734],{"class":230},[115,100014,100015],{"class":117,"line":16910},[115,100016,99739],{"class":230},[115,100018,100019],{"class":117,"line":16915},[115,100020,99744],{"class":230},[115,100022,100023],{"class":117,"line":16928},[115,100024,99749],{"class":230},[115,100026,100027],{"class":117,"line":16933},[115,100028,99754],{"class":230},[115,100030,100031],{"class":117,"line":32634},[115,100032,99759],{"class":230},[115,100034,100035],{"class":117,"line":32640},[115,100036,99764],{"class":230},[115,100038,100039],{"class":117,"line":32646},[115,100040,99769],{"class":230},[115,100042,100043],{"class":117,"line":32652},[115,100044,99774],{"class":230},[115,100046,100047],{"class":117,"line":32658},[115,100048,99779],{"class":230},[115,100050,100051],{"class":117,"line":32669},[115,100052,93918],{"class":230},[115,100054,100055,100058,100060,100062,100064],{"class":117,"line":32675},[115,100056,100057],{"class":125},"np.vsplit(aa,[",[115,100059,203],{"class":174},[115,100061,503],{"class":125},[115,100063,444],{"class":174},[115,100065,4657],{"class":125},[115,100067,100068],{"class":117,"line":32695},[115,100069,93554],{"class":184},[115,100071,100072],{"class":117,"line":32701},[115,100073,93918],{"class":230},[115,100075,100076],{"class":117,"line":32712},[115,100077,99574],{"class":230},[115,100079,100080],{"class":117,"line":32718},[115,100081,99579],{"class":230},[115,100083,100084],{"class":117,"line":32724},[115,100085,99584],{"class":230},[115,100087,100088],{"class":117,"line":32730},[115,100089,99646],{"class":230},[115,100091,100092],{"class":117,"line":32736},[115,100093,99651],{"class":230},[115,100095,100096],{"class":117,"line":32742},[115,100097,99656],{"class":230},[115,100099,100100],{"class":117,"line":32748},[115,100101,99604],{"class":230},[5127,100103,100104],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":100106},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99372,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100113,"title":100114,"body":100115,"description":39,"extension":40,"meta":100609,"navigation":42,"path":100610,"seo":100611,"stem":100612,"__hash__":100613},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100116,"toc":100600},[100117,100120,100123,100148,100152,100211,100263,100267,100269,100305,100359,100361,100399,100470,100474,100479,100483,100486,100519,100522,100526,100529,100532,100535,100538,100543,100547,100550,100553,100556,100559,100564,100568,100573,100576,100597],[10,100118,100114],{"id":100119},"_9数学函数",[14,100121,100122],{},"补充回顾：python的列表推导式",[106,100124,100126],{"className":30379,"code":100125,"language":30381,"meta":22,"style":22},"[1\u002Fi for i in a]\n",[112,100127,100128],{"__ignoreMap":22},[115,100129,100130,100132,100134,100136,100139,100141,100143,100145],{"class":117,"line":118},[115,100131,1015],{"class":125},[115,100133,343],{"class":174},[115,100135,709],{"class":121},[115,100137,100138],{"class":125},"i ",[115,100140,3025],{"class":121},[115,100142,9439],{"class":125},[115,100144,26044],{"class":121},[115,100146,100147],{"class":125}," a]\n",[57,100149,100151],{"id":100150},"_91-求倒数","9.1 求倒数",[106,100153,100155],{"className":30379,"code":100154,"language":30381,"meta":22,"style":22},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[112,100156,100157,100162,100190,100202],{"__ignoreMap":22},[115,100158,100159],{"class":117,"line":118},[115,100160,100161],{"class":184},"#数组求倒数\n",[115,100163,100164,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184,100186,100188],{"class":117,"line":37},[115,100165,27],{"class":125},[115,100167,171],{"class":121},[115,100169,1015],{"class":125},[115,100171,343],{"class":174},[115,100173,503],{"class":125},[115,100175,203],{"class":174},[115,100177,503],{"class":125},[115,100179,197],{"class":174},[115,100181,503],{"class":125},[115,100183,418],{"class":174},[115,100185,503],{"class":125},[115,100187,444],{"class":174},[115,100189,33247],{"class":125},[115,100191,100192,100194,100196,100199],{"class":117,"line":1180},[115,100193,388],{"class":125},[115,100195,171],{"class":121},[115,100197,100198],{"class":125},"np.array(a)",[115,100200,100201],{"class":184},"#将列表转换为数组\n",[115,100203,100204,100206,100208],{"class":117,"line":1195},[115,100205,343],{"class":174},[115,100207,709],{"class":121},[115,100209,100210],{"class":125},"b\n",[106,100212,100214],{"className":30379,"code":100213,"language":30381,"meta":22,"style":22},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[112,100215,100216,100244,100253,100258],{"__ignoreMap":22},[115,100217,100218,100220,100222,100224,100226,100228,100230,100232,100234,100236,100238,100240,100242],{"class":117,"line":118},[115,100219,27],{"class":125},[115,100221,171],{"class":121},[115,100223,1015],{"class":125},[115,100225,343],{"class":174},[115,100227,503],{"class":125},[115,100229,203],{"class":174},[115,100231,503],{"class":125},[115,100233,197],{"class":174},[115,100235,503],{"class":125},[115,100237,418],{"class":174},[115,100239,503],{"class":125},[115,100241,444],{"class":174},[115,100243,33247],{"class":125},[115,100245,100246,100248,100250],{"class":117,"line":37},[115,100247,388],{"class":125},[115,100249,171],{"class":121},[115,100251,100252],{"class":125},"np.array(a)\n",[115,100254,100255],{"class":117,"line":1180},[115,100256,100257],{"class":184},"#调用numpy中的函数reciprocal()\n",[115,100259,100260],{"class":117,"line":1195},[115,100261,100262],{"class":125},"np.reciprocal(b)\n",[57,100264,100266],{"id":100265},"_92-求平方","9.2 求平方",[14,100268,94520],{},[106,100270,100272],{"className":30379,"code":100271,"language":30381,"meta":22,"style":22},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[112,100273,100274,100279,100284,100300],{"__ignoreMap":22},[115,100275,100276],{"class":117,"line":118},[115,100277,100278],{"class":184},"#square()，求平方\n",[115,100280,100281],{"class":117,"line":37},[115,100282,100283],{"class":184},"#一维数组\n",[115,100285,100286,100288,100290,100292,100294,100296,100298],{"class":117,"line":1180},[115,100287,27],{"class":125},[115,100289,171],{"class":121},[115,100291,92992],{"class":125},[115,100293,343],{"class":174},[115,100295,503],{"class":125},[115,100297,571],{"class":174},[115,100299,132],{"class":125},[115,100301,100302],{"class":117,"line":1195},[115,100303,100304],{"class":125},"np.square(a)\n",[106,100306,100308],{"className":30379,"code":100307,"language":30381,"meta":22,"style":22},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[112,100309,100310,100315,100320,100341],{"__ignoreMap":22},[115,100311,100312],{"class":117,"line":118},[115,100313,100314],{"class":184},"#或者通过循环遍历的形式来计算\n",[115,100316,100317],{"class":117,"line":37},[115,100318,100319],{"class":184},"#这是一个列表\n",[115,100321,100322,100325,100327,100329,100331,100333,100335,100338],{"class":117,"line":1180},[115,100323,100324],{"class":125},"[i",[115,100326,580],{"class":121},[115,100328,100138],{"class":125},[115,100330,3025],{"class":121},[115,100332,9439],{"class":125},[115,100334,26044],{"class":121},[115,100336,100337],{"class":125}," a]",[115,100339,100340],{"class":184},"#这个求完之后在数列当中\n",[115,100342,100343,100346,100348,100350,100352,100354,100356],{"class":117,"line":1195},[115,100344,100345],{"class":125},"np.array([i",[115,100347,580],{"class":121},[115,100349,100138],{"class":125},[115,100351,3025],{"class":121},[115,100353,9439],{"class":125},[115,100355,26044],{"class":121},[115,100357,100358],{"class":125}," a])\n",[14,100360,93281],{},[106,100362,100364],{"className":30379,"code":100363,"language":30381,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[112,100365,100366,100370,100394],{"__ignoreMap":22},[115,100367,100368],{"class":117,"line":118},[115,100369,93291],{"class":184},[115,100371,100372,100374,100376,100378,100380,100382,100384,100386,100388,100390,100392],{"class":117,"line":37},[115,100373,93296],{"class":125},[115,100375,171],{"class":121},[115,100377,92992],{"class":125},[115,100379,343],{"class":174},[115,100381,503],{"class":125},[115,100383,648],{"class":174},[115,100385,92997],{"class":125},[115,100387,418],{"class":174},[115,100389,503],{"class":125},[115,100391,197],{"class":174},[115,100393,132],{"class":125},[115,100395,100396],{"class":117,"line":1180},[115,100397,100398],{"class":125},"np.square(aa)\n",[106,100400,100402],{"className":30379,"code":100401,"language":30381,"meta":22,"style":22},"#传统的方式\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",[112,100403,100404,100409,100418,100434,100450,100465],{"__ignoreMap":22},[115,100405,100406],{"class":117,"line":118},[115,100407,100408],{"class":184},"#传统的方式\n",[115,100410,100411,100413,100415],{"class":117,"line":37},[115,100412,98177],{"class":125},[115,100414,171],{"class":121},[115,100416,100417],{"class":125},"np.empty_like(aa)\n",[115,100419,100420,100422,100424,100426,100428,100430,100432],{"class":117,"line":1180},[115,100421,3025],{"class":121},[115,100423,9439],{"class":125},[115,100425,26044],{"class":121},[115,100427,32444],{"class":174},[115,100429,126],{"class":125},[115,100431,418],{"class":174},[115,100433,30787],{"class":125},[115,100435,100436,100438,100440,100442,100444,100446,100448],{"class":117,"line":1195},[115,100437,3201],{"class":121},[115,100439,9501],{"class":125},[115,100441,26044],{"class":121},[115,100443,32444],{"class":174},[115,100445,126],{"class":125},[115,100447,197],{"class":174},[115,100449,30787],{"class":125},[115,100451,100452,100455,100457,100460,100462],{"class":117,"line":1201},[115,100453,100454],{"class":125},"        bb[i,j]",[115,100456,171],{"class":121},[115,100458,100459],{"class":125},"aa[i,j]",[115,100461,580],{"class":121},[115,100463,100464],{"class":125},"aa[i,j]\n",[115,100466,100467],{"class":117,"line":1215},[115,100468,100469],{"class":125},"bb\n",[57,100471,100473],{"id":100472},"_93-求各元素的符号","9.3 求各元素的符号",[14,100475,100476],{},[20,100477],{"alt":22,"src":100478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[57,100480,100482],{"id":100481},"_94-modf函数","9.4 modf函数",[14,100484,100485],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[106,100487,100489],{"className":30379,"code":100488,"language":30381,"meta":22,"style":22},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[112,100490,100491,100514],{"__ignoreMap":22},[115,100492,100493,100495,100497,100499,100501,100503,100505,100507,100509,100512],{"class":117,"line":118},[115,100494,27],{"class":125},[115,100496,171],{"class":121},[115,100498,92992],{"class":125},[115,100500,657],{"class":121},[115,100502,571],{"class":174},[115,100504,503],{"class":125},[115,100506,571],{"class":174},[115,100508,503],{"class":125},[115,100510,100511],{"class":174},"0.3",[115,100513,132],{"class":125},[115,100515,100516],{"class":117,"line":37},[115,100517,100518],{"class":125},"np.modf(a)\n",[14,100520,100521],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[57,100523,100525],{"id":100524},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100527,100528],{},"np.cell()",[14,100530,100531],{},"np.floor()",[14,100533,100534],{},"np.rint()",[14,100536,100537],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100539,100540],{},[20,100541],{"alt":22,"src":100542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[57,100544,100546],{"id":100545},"_96-around函数","9.6 around()函数",[14,100548,100549],{},"around()函数也可以实现对数的小数位数进行操作",[14,100551,100552],{},"其中的参数：",[14,100554,100555],{},"1.要传的数组",[14,100557,100558],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100560,100561],{},[20,100562],{"alt":22,"src":100563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[57,100565,100567],{"id":100566},"_97-三角函数","9.7 三角函数",[14,100569,100570],{},[20,100571],{"alt":22,"src":100572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100574,100575],{},"引入图像模块非常重要",[106,100577,100579],{"className":30379,"code":100578,"language":30381,"meta":22,"style":22},"from matplotlib import pyplot as plt\n",[112,100580,100581],{"__ignoreMap":22},[115,100582,100583,100585,100588,100590,100593,100595],{"class":117,"line":118},[115,100584,30738],{"class":121},[115,100586,100587],{"class":125}," matplotlib ",[115,100589,30393],{"class":121},[115,100591,100592],{"class":125}," pyplot ",[115,100594,31384],{"class":121},[115,100596,31438],{"class":125},[5127,100598,100599],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":22,"searchDepth":37,"depth":37,"links":100601},[100602,100603,100604,100605,100606,100607,100608],{"id":100150,"depth":37,"text":100151},{"id":100265,"depth":37,"text":100266},{"id":100472,"depth":37,"text":100473},{"id":100481,"depth":37,"text":100482},{"id":100524,"depth":37,"text":100525},{"id":100545,"depth":37,"text":100546},{"id":100566,"depth":37,"text":100567},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100114,"description":39},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100615,"title":100616,"body":100617,"description":39,"extension":40,"meta":100621,"navigation":42,"path":100622,"seo":100623,"stem":100624,"__hash__":100625},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100618,"toc":100619},[],{"title":22,"searchDepth":37,"depth":37,"links":100620},[],{"category":50421},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100616,"description":39},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100627,"title":100628,"body":100629,"description":22,"extension":40,"meta":102637,"navigation":42,"path":102638,"seo":102639,"stem":102640,"__hash__":102641},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100630,"toc":102613},[100631,100634,100638,100641,100644,100650,100653,100676,100679,100713,100716,100757,100761,100764,100857,100860,100904,100907,100924,100927,100941,100944,100947,100992,100995,101032,101036,101039,101045,101050,101070,101074,101077,101143,101146,101164,101168,101171,101200,101210,101216,101220,101223,101229,101240,101244,101247,101277,101280,101560,101563,101566,101577,101580,101583,101605,101612,101615,101633,101636,101639,101653,101661,101664,101690,101696,101699,101702,101712,101724,101744,101753,101773,101783,101807,101820,101834,101839,101880,101897,101922,101934,101954,101960,102005,102024,102041,102054,102070,102077,102089,102098,102133,102154,102179,102192,102216,102231,102256,102259,102280,102289,102292,102303,102307,102310,102316,102328,102335,102339,102342,102354,102357,102371,102374,102384,102394,102397,102437,102440,102444,102450,102453,102467,102471,102474,102507,102511,102514,102537,102545,102548,102554,102560,102563,102566,102594,102598,102601,102607,102610],[10,100632,100628],{"id":100633},"_1环境安装与第一个-mujoco-程序",[57,100635,100637],{"id":100636},"_1目标说明","1.目标说明",[14,100639,100640],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100642,100643],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[106,100645,100648],{"className":100646,"code":100647,"language":5188,"meta":22},[5186],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[112,100649,100647],{"__ignoreMap":22},[14,100651,100652],{},"需要掌握:",[69,100654,100655,100658,100661,100666,100671],{},[72,100656,100657],{},"Fedora 44 下 MuJoCo 的系统依赖",[72,100659,100660],{},"Python 虚拟环境创建",[72,100662,100663],{},[112,100664,100665],{},"mujoco.MjModel",[72,100667,100668],{},[112,100669,100670],{},"mujoco.MjData",[72,100672,100673],{},[112,100674,100675],{},"mujoco.mj_step(model, data)",[14,100677,100678],{},"MuJoCo 中最重要的两个对象:",[263,100680,100681,100691],{},[266,100682,100683],{},[269,100684,100685,100688],{},[272,100686,100687],{"align":23737},"对象",[272,100689,100690],{"align":23737},"含义",[310,100692,100693,100703],{},[269,100694,100695,100700],{},[315,100696,100697],{"align":23737},[112,100698,100699],{},"MjModel",[315,100701,100702],{"align":23737},"模型结构，来自 XML，基本不随时间变化",[269,100704,100705,100710],{},[315,100706,100707],{"align":23737},[112,100708,100709],{},"MjData",[315,100711,100712],{"align":23737},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100714,100715],{},"可以先用一个类比理解：",[263,100717,100718,100728],{},[266,100719,100720],{},[269,100721,100722,100725],{},[272,100723,100724],{"align":23737},"类比",[272,100726,100727],{"align":23737},"MuJoCo 对象",[310,100729,100730,100739,100748],{},[269,100731,100732,100735],{},[315,100733,100734],{"align":23737},"游戏地图和角色配置",[315,100736,100737],{"align":23737},[112,100738,100699],{},[269,100740,100741,100744],{},[315,100742,100743],{"align":23737},"游戏运行到当前帧的状态",[315,100745,100746],{"align":23737},[112,100747,100709],{},[269,100749,100750,100753],{},[315,100751,100752],{"align":23737},"前进一帧",[315,100754,100755],{"align":23737},[112,100756,100675],{},[57,100758,100760],{"id":100759},"_2环境与依赖安装","2.环境与依赖安装",[14,100762,100763],{},"Fedora 44 系统依赖:",[106,100765,100767],{"className":23823,"code":100766,"language":23825,"meta":22,"style":22},"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",[112,100768,100769,100781,100794,100807,100817,100827,100846],{"__ignoreMap":22},[115,100770,100771,100773,100775,100777,100779],{"class":117,"line":118},[115,100772,24577],{"class":1963},[115,100774,26316],{"class":230},[115,100776,23835],{"class":230},[115,100778,26401],{"class":174},[115,100780,24679],{"class":174},[115,100782,100783,100786,100789,100792],{"class":117,"line":37},[115,100784,100785],{"class":230},"  python3",[115,100787,100788],{"class":230}," python3-pip",[115,100790,100791],{"class":230}," python3-virtualenv",[115,100793,24679],{"class":174},[115,100795,100796,100799,100802,100805],{"class":117,"line":1180},[115,100797,100798],{"class":230},"  mesa-libGL",[115,100800,100801],{"class":230}," mesa-libGLU",[115,100803,100804],{"class":230}," mesa-dri-drivers",[115,100806,24679],{"class":174},[115,100808,100809,100812,100815],{"class":117,"line":1195},[115,100810,100811],{"class":230},"  libglvnd-glx",[115,100813,100814],{"class":230}," libglvnd-opengl",[115,100816,24679],{"class":174},[115,100818,100819,100822,100825],{"class":117,"line":1201},[115,100820,100821],{"class":230},"  glfw",[115,100823,100824],{"class":230}," glfw-devel",[115,100826,24679],{"class":174},[115,100828,100829,100832,100835,100838,100841,100844],{"class":117,"line":1215},[115,100830,100831],{"class":230},"  libX11",[115,100833,100834],{"class":230}," libXcursor",[115,100836,100837],{"class":230}," libXi",[115,100839,100840],{"class":230}," libXinerama",[115,100842,100843],{"class":230}," libXrandr",[115,100845,24679],{"class":174},[115,100847,100848,100851,100854],{"class":117,"line":1221},[115,100849,100850],{"class":230},"  gcc",[115,100852,100853],{"class":230}," gcc-c++",[115,100855,100856],{"class":230}," make\n",[14,100858,100859],{},"创建 Python 环境:",[106,100861,100863],{"className":23823,"code":100862,"language":23825,"meta":22,"style":22},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[112,100864,100865,100879,100887],{"__ignoreMap":22},[115,100866,100867,100870,100873,100876],{"class":117,"line":118},[115,100868,100869],{"class":1963},"python3",[115,100871,100872],{"class":174}," -m",[115,100874,100875],{"class":230}," venv",[115,100877,100878],{"class":230}," .venv\n",[115,100880,100881,100884],{"class":117,"line":37},[115,100882,100883],{"class":174},"source",[115,100885,100886],{"class":230}," .venv\u002Fbin\u002Factivate\n",[115,100888,100889,100891,100893,100896,100898,100901],{"class":117,"line":1180},[115,100890,30381],{"class":1963},[115,100892,100872],{"class":174},[115,100894,100895],{"class":230}," pip",[115,100897,23835],{"class":230},[115,100899,100900],{"class":174}," --upgrade",[115,100902,100903],{"class":230}," pip\n",[14,100905,100906],{},"pip 安装:",[106,100908,100910],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy\n",[112,100911,100912],{"__ignoreMap":22},[115,100913,100914,100916,100918,100921],{"class":117,"line":118},[115,100915,23832],{"class":1963},[115,100917,23835],{"class":230},[115,100919,100920],{"class":230}," \"mujoco>=2.3\"",[115,100922,100923],{"class":230}," numpy\n",[14,100925,100926],{},"安装完成后，先做最小检查：",[106,100928,100930],{"className":23823,"code":100929,"language":23825,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[112,100931,100932],{"__ignoreMap":22},[115,100933,100934,100936,100938],{"class":117,"line":118},[115,100935,30381],{"class":1963},[115,100937,30359],{"class":174},[115,100939,100940],{"class":230}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100942,100943],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100945,100946],{},"conda 安装:",[106,100948,100950],{"className":23823,"code":100949,"language":23825,"meta":22,"style":22},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[112,100951,100952,100972,100982],{"__ignoreMap":22},[115,100953,100954,100956,100958,100960,100963,100966,100969],{"class":117,"line":118},[115,100955,30331],{"class":1963},[115,100957,29177],{"class":230},[115,100959,25116],{"class":174},[115,100961,100962],{"class":230}," mujoco-study",[115,100964,100965],{"class":230}," python=",[115,100967,100968],{"class":174},"3.10",[115,100970,100971],{"class":174}," -y\n",[115,100973,100974,100976,100979],{"class":117,"line":37},[115,100975,30331],{"class":1963},[115,100977,100978],{"class":230}," activate",[115,100980,100981],{"class":230}," mujoco-study\n",[115,100983,100984,100986,100988,100990],{"class":117,"line":1180},[115,100985,23832],{"class":1963},[115,100987,23835],{"class":230},[115,100989,100920],{"class":230},[115,100991,100923],{"class":230},[14,100993,100994],{},"版本冲突说明:",[69,100996,100997,101003,101013,101022],{},[72,100998,100999,101000,28386],{},"不要安装 ",[112,101001,101002],{},"mujoco-py",[72,101004,101005,101006,101008,101009,101012],{},"如果旧项目里同时安装了 ",[112,101007,101002],{}," 和 ",[112,101010,101011],{},"mujoco","，建议新建干净虚拟环境。",[72,101014,101015,101018,101019,28386],{},[112,101016,101017],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[112,101020,101021],{},"~\u002F.mujoco\u002Fmujoco210",[72,101023,101024,101025,82529,101028,101031],{},"离屏渲染可能涉及 OpenGL 后端，",[112,101026,101027],{},"MUJOCO_GL=egl",[112,101029,101030],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[57,101033,101035],{"id":101034},"_3核心概念解释","3.核心概念解释",[14,101037,101038],{},"MuJoCo 的基本执行流程:",[106,101040,101043],{"className":101041,"code":101042,"language":5188,"meta":22},[5186],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[112,101044,101042],{"__ignoreMap":22},[14,101046,101047,101049],{},[112,101048,100699],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101051,101052,101054,101055,338,101058,338,101061,338,101064,338,101067,28386],{},[112,101053,100709],{}," 存放仿真运行时状态，例如 ",[112,101056,101057],{},"data.time",[112,101059,101060],{},"data.qpos",[112,101062,101063],{},"data.qvel",[112,101065,101066],{},"data.ctrl",[112,101068,101069],{},"data.xpos",[86,101071,101073],{"id":101072},"xml-是什么","XML 是什么",[14,101075,101076],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[106,101078,101080],{"className":53057,"code":101079,"language":53059,"meta":22,"style":22},"\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",[112,101081,101082,101104,101135],{"__ignoreMap":22},[115,101083,101084,101086,101088,101090,101092,101094,101097,101099,101102],{"class":117,"line":118},[115,101085,1035],{"class":125},[115,101087,51790],{"class":51290},[115,101089,14921],{"class":1963},[115,101091,171],{"class":125},[115,101093,53481],{"class":230},[115,101095,101096],{"class":1963}," pos",[115,101098,171],{"class":125},[115,101100,101101],{"class":230},"\"0 0 1\"",[115,101103,51297],{"class":125},[115,101105,101106,101108,101111,101113,101115,101118,101120,101122,101124,101127,101129,101132],{"class":117,"line":37},[115,101107,52134],{"class":125},[115,101109,101110],{"class":51290},"geom",[115,101112,14921],{"class":1963},[115,101114,171],{"class":125},[115,101116,101117],{"class":230},"\"box_geom\"",[115,101119,53814],{"class":1963},[115,101121,171],{"class":125},[115,101123,53481],{"class":230},[115,101125,101126],{"class":1963}," size",[115,101128,171],{"class":125},[115,101130,101131],{"class":230},"\"0.1 0.1 0.1\"",[115,101133,101134],{"class":125},"\u002F>\n",[115,101136,101137,101139,101141],{"class":117,"line":1180},[115,101138,51775],{"class":125},[115,101140,51790],{"class":51290},[115,101142,51297],{"class":125},[14,101144,101145],{},"这段意思是：",[69,101147,101148,101154,101161],{},[72,101149,101150,101151,101153],{},"创建一个叫 ",[112,101152,53704],{}," 的刚体。",[72,101155,101156,101157,101160],{},"它初始放在 ",[112,101158,101159],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[72,101162,101163],{},"它里面有一个盒子形状的几何体。",[86,101165,101167],{"id":101166},"timestep-是什么","timestep 是什么",[14,101169,101170],{},"XML 里的：",[106,101172,101174],{"className":53057,"code":101173,"language":53059,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[112,101175,101176],{"__ignoreMap":22},[115,101177,101178,101180,101182,101185,101187,101190,101193,101195,101198],{"class":117,"line":118},[115,101179,1035],{"class":125},[115,101181,69156],{"class":51290},[115,101183,101184],{"class":1963}," timestep",[115,101186,171],{"class":125},[115,101188,101189],{"class":230},"\"0.01\"",[115,101191,101192],{"class":1963}," gravity",[115,101194,171],{"class":125},[115,101196,101197],{"class":230},"\"0 0 -9.81\"",[115,101199,101134],{"class":125},[14,101201,101202,101203,101206,101207,101209],{},"表示每调用一次 ",[112,101204,101205],{},"mj_step","，仿真时间前进 ",[112,101208,38987],{}," 秒。循环 100 次，大约就是 1 秒：",[106,101211,101214],{"className":101212,"code":101213,"language":5188,"meta":22},[5186],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[112,101215,101213],{"__ignoreMap":22},[86,101217,101219],{"id":101218},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101221,101222],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[106,101224,101227],{"className":101225,"code":101226,"language":5188,"meta":22},[5186],"x y z qw qx qy qz\n",[112,101228,101226],{"__ignoreMap":22},[14,101230,101231,101232,101235,101236,101239],{},"表示一个自由刚体的位置和姿态。其中 ",[112,101233,101234],{},"x y z"," 是位置，",[112,101237,101238],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[57,101241,101243],{"id":101242},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101245,101246],{},"新建文件:",[106,101248,101250],{"className":23823,"code":101249,"language":23825,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[112,101251,101252,101262,101269],{"__ignoreMap":22},[115,101253,101254,101257,101259],{"class":117,"line":118},[115,101255,101256],{"class":1963},"mkdir",[115,101258,29217],{"class":174},[115,101260,101261],{"class":230}," mujoco_tutorial\n",[115,101263,101264,101267],{"class":117,"line":37},[115,101265,101266],{"class":174},"cd",[115,101268,101261],{"class":230},[115,101270,101271,101274],{"class":117,"line":1180},[115,101272,101273],{"class":1963},"touch",[115,101275,101276],{"class":230}," ch1_first_sim.py\n",[14,101278,101279],{},"写入:",[106,101281,101283],{"className":30379,"code":101282,"language":30381,"meta":22,"style":22},"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",[112,101284,101285,101292,101296,101300,101310,101315,101320,101324,101329,101334,101338,101343,101348,101353,101358,101363,101368,101372,101376,101380,101393,101407,101417,101421,101433,101445,101457,101469,101481,101485,101502,101507,101511,101522,101533,101537,101541,101555],{"__ignoreMap":22},[115,101286,101287,101289],{"class":117,"line":118},[115,101288,30393],{"class":121},[115,101290,101291],{"class":125}," mujoco\n",[115,101293,101294],{"class":117,"line":37},[115,101295,2400],{"emptyLinePlaceholder":42},[115,101297,101298],{"class":117,"line":1180},[115,101299,2400],{"emptyLinePlaceholder":42},[115,101301,101302,101305,101307],{"class":117,"line":1195},[115,101303,101304],{"class":174},"XML",[115,101306,13565],{"class":121},[115,101308,101309],{"class":230}," \"\"\"\n",[115,101311,101312],{"class":117,"line":1201},[115,101313,101314],{"class":230},"\u003Cmujoco model=\"first_sim\">\n",[115,101316,101317],{"class":117,"line":1215},[115,101318,101319],{"class":230},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[115,101321,101322],{"class":117,"line":1221},[115,101323,2400],{"emptyLinePlaceholder":42},[115,101325,101326],{"class":117,"line":1312},[115,101327,101328],{"class":230},"  \u003Cworldbody>\n",[115,101330,101331],{"class":117,"line":1318},[115,101332,101333],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[115,101335,101336],{"class":117,"line":1330},[115,101337,2400],{"emptyLinePlaceholder":42},[115,101339,101340],{"class":117,"line":1612},[115,101341,101342],{"class":230},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[115,101344,101345],{"class":117,"line":1617},[115,101346,101347],{"class":230},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[115,101349,101350],{"class":117,"line":1623},[115,101351,101352],{"class":230},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[115,101354,101355],{"class":117,"line":1628},[115,101356,101357],{"class":230},"    \u003C\u002Fbody>\n",[115,101359,101360],{"class":117,"line":1642},[115,101361,101362],{"class":230},"  \u003C\u002Fworldbody>\n",[115,101364,101365],{"class":117,"line":1647},[115,101366,101367],{"class":230},"\u003C\u002Fmujoco>\n",[115,101369,101370],{"class":117,"line":1653},[115,101371,95688],{"class":230},[115,101373,101374],{"class":117,"line":1674},[115,101375,2400],{"emptyLinePlaceholder":42},[115,101377,101378],{"class":117,"line":1679},[115,101379,2400],{"emptyLinePlaceholder":42},[115,101381,101382,101384,101386,101389,101391],{"class":117,"line":1693},[115,101383,31948],{"class":121},[115,101385,1973],{"class":1963},[115,101387,101388],{"class":125},"() -> ",[115,101390,95676],{"class":174},[115,101392,3739],{"class":125},[115,101394,101395,101398,101400,101403,101405],{"class":117,"line":1698},[115,101396,101397],{"class":125},"    model ",[115,101399,171],{"class":121},[115,101401,101402],{"class":125}," mujoco.MjModel.from_xml_string(",[115,101404,101304],{"class":174},[115,101406,132],{"class":125},[115,101408,101409,101412,101414],{"class":117,"line":1727},[115,101410,101411],{"class":125},"    data ",[115,101413,171],{"class":121},[115,101415,101416],{"class":125}," mujoco.MjData(model)\n",[115,101418,101419],{"class":117,"line":1732},[115,101420,2400],{"emptyLinePlaceholder":42},[115,101422,101423,101425,101427,101430],{"class":117,"line":1749},[115,101424,31300],{"class":174},[115,101426,126],{"class":125},[115,101428,101429],{"class":230},"\"nq:\"",[115,101431,101432],{"class":125},", model.nq)\n",[115,101434,101435,101437,101439,101442],{"class":117,"line":1754},[115,101436,31300],{"class":174},[115,101438,126],{"class":125},[115,101440,101441],{"class":230},"\"nv:\"",[115,101443,101444],{"class":125},", model.nv)\n",[115,101446,101447,101449,101451,101454],{"class":117,"line":1759},[115,101448,31300],{"class":174},[115,101450,126],{"class":125},[115,101452,101453],{"class":230},"\"nu:\"",[115,101455,101456],{"class":125},", model.nu)\n",[115,101458,101459,101461,101463,101466],{"class":117,"line":1764},[115,101460,31300],{"class":174},[115,101462,126],{"class":125},[115,101464,101465],{"class":230},"\"initial time:\"",[115,101467,101468],{"class":125},", data.time)\n",[115,101470,101471,101473,101475,101478],{"class":117,"line":1778},[115,101472,31300],{"class":174},[115,101474,126],{"class":125},[115,101476,101477],{"class":230},"\"initial qpos:\"",[115,101479,101480],{"class":125},", data.qpos.copy())\n",[115,101482,101483],{"class":117,"line":1783},[115,101484,2400],{"emptyLinePlaceholder":42},[115,101486,101487,101489,101492,101494,101496,101498,101500],{"class":117,"line":2577},[115,101488,3201],{"class":121},[115,101490,101491],{"class":125}," _ ",[115,101493,26044],{"class":121},[115,101495,32444],{"class":174},[115,101497,126],{"class":125},[115,101499,436],{"class":174},[115,101501,30787],{"class":125},[115,101503,101504],{"class":117,"line":2591},[115,101505,101506],{"class":125},"        mujoco.mj_step(model, data)\n",[115,101508,101509],{"class":117,"line":2599},[115,101510,2400],{"emptyLinePlaceholder":42},[115,101512,101513,101515,101517,101520],{"class":117,"line":2604},[115,101514,31300],{"class":174},[115,101516,126],{"class":125},[115,101518,101519],{"class":230},"\"final time:\"",[115,101521,101468],{"class":125},[115,101523,101524,101526,101528,101531],{"class":117,"line":2610},[115,101525,31300],{"class":174},[115,101527,126],{"class":125},[115,101529,101530],{"class":230},"\"final qpos:\"",[115,101532,101480],{"class":125},[115,101534,101535],{"class":117,"line":2616},[115,101536,2400],{"emptyLinePlaceholder":42},[115,101538,101539],{"class":117,"line":2621},[115,101540,2400],{"emptyLinePlaceholder":42},[115,101542,101543,101545,101547,101550,101553],{"class":117,"line":7949},[115,101544,1531],{"class":121},[115,101546,31221],{"class":174},[115,101548,101549],{"class":121}," ==",[115,101551,101552],{"class":230}," \"__main__\"",[115,101554,3739],{"class":125},[115,101556,101557],{"class":117,"line":7973},[115,101558,101559],{"class":125},"    main()\n",[86,101561,101562],{"id":101562},"代码逐段解释",[14,101564,101565],{},"导入库：",[106,101567,101569],{"className":30379,"code":101568,"language":30381,"meta":22,"style":22},"import mujoco\n",[112,101570,101571],{"__ignoreMap":22},[115,101572,101573,101575],{"class":117,"line":118},[115,101574,30393],{"class":121},[115,101576,101291],{"class":125},[14,101578,101579],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101581,101582],{},"定义 XML：",[106,101584,101586],{"className":30379,"code":101585,"language":30381,"meta":22,"style":22},"XML = \"\"\"\n...\n\"\"\"\n",[112,101587,101588,101596,101601],{"__ignoreMap":22},[115,101589,101590,101592,101594],{"class":117,"line":118},[115,101591,101304],{"class":174},[115,101593,13565],{"class":121},[115,101595,101309],{"class":230},[115,101597,101598],{"class":117,"line":37},[115,101599,101600],{"class":230},"...\n",[115,101602,101603],{"class":117,"line":1180},[115,101604,95688],{"class":230},[14,101606,101607,101608,101611],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[112,101609,101610],{},"freejoint"," 的方块。",[14,101613,101614],{},"编译模型：",[106,101616,101618],{"className":30379,"code":101617,"language":30381,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\n",[112,101619,101620],{"__ignoreMap":22},[115,101621,101622,101625,101627,101629,101631],{"class":117,"line":118},[115,101623,101624],{"class":125},"model ",[115,101626,171],{"class":121},[115,101628,101402],{"class":125},[115,101630,101304],{"class":174},[115,101632,132],{"class":125},[14,101634,101635],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101637,101638],{},"创建数据：",[106,101640,101642],{"className":30379,"code":101641,"language":30381,"meta":22,"style":22},"data = mujoco.MjData(model)\n",[112,101643,101644],{"__ignoreMap":22},[115,101645,101646,101649,101651],{"class":117,"line":118},[115,101647,101648],{"class":125},"data ",[115,101650,171],{"class":121},[115,101652,101416],{"class":125},[14,101654,101655,101657,101658,101660],{},[112,101656,33402],{}," 会保存仿真当前状态。刚创建时，时间是 ",[112,101659,317],{},"，方块还在初始位置。",[14,101662,101663],{},"推进仿真：",[106,101665,101667],{"className":30379,"code":101666,"language":30381,"meta":22,"style":22},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[112,101668,101669,101685],{"__ignoreMap":22},[115,101670,101671,101673,101675,101677,101679,101681,101683],{"class":117,"line":118},[115,101672,3025],{"class":121},[115,101674,101491],{"class":125},[115,101676,26044],{"class":121},[115,101678,32444],{"class":174},[115,101680,126],{"class":125},[115,101682,436],{"class":174},[115,101684,30787],{"class":125},[115,101686,101687],{"class":117,"line":37},[115,101688,101689],{"class":125},"    mujoco.mj_step(model, data)\n",[14,101691,101692,101693,101695],{},"每次 ",[112,101694,101205],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[86,101697,101698],{"id":101698},"代码逐行细讲",[14,101700,101701],{},"下面把完整代码按新手视角拆开讲。",[106,101703,101704],{"className":30379,"code":101568,"language":30381,"meta":22,"style":22},[112,101705,101706],{"__ignoreMap":22},[115,101707,101708,101710],{"class":117,"line":118},[115,101709,30393],{"class":121},[115,101711,101291],{"class":125},[14,101713,101714,101716,101717,338,101719,338,101721,28386],{},[112,101715,30393],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[112,101718,100665],{},[112,101720,100670],{},[112,101722,101723],{},"mujoco.mj_step",[106,101725,101726],{"className":30379,"code":101585,"language":30381,"meta":22,"style":22},[112,101727,101728,101736,101740],{"__ignoreMap":22},[115,101729,101730,101732,101734],{"class":117,"line":118},[115,101731,101304],{"class":174},[115,101733,13565],{"class":121},[115,101735,101309],{"class":230},[115,101737,101738],{"class":117,"line":37},[115,101739,101600],{"class":230},[115,101741,101742],{"class":117,"line":1180},[115,101743,95688],{"class":230},[14,101745,101746,101748,101749,101752],{},[112,101747,101304],{}," 是一个变量名。右边的三引号 ",[112,101750,101751],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[106,101754,101755],{"className":53057,"code":101314,"language":53059,"meta":22,"style":22},[112,101756,101757],{"__ignoreMap":22},[115,101758,101759,101761,101763,101766,101768,101771],{"class":117,"line":118},[115,101760,1035],{"class":125},[115,101762,101011],{"class":51290},[115,101764,101765],{"class":1963}," model",[115,101767,171],{"class":125},[115,101769,101770],{"class":230},"\"first_sim\"",[115,101772,51297],{"class":125},[14,101774,101775,101776,101779,101780,28386],{},"这是 XML 的根标签。",[112,101777,101778],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[112,101781,101782],{},"first_sim",[106,101784,101785],{"className":53057,"code":101173,"language":53059,"meta":22,"style":22},[112,101786,101787],{"__ignoreMap":22},[115,101788,101789,101791,101793,101795,101797,101799,101801,101803,101805],{"class":117,"line":118},[115,101790,1035],{"class":125},[115,101792,69156],{"class":51290},[115,101794,101184],{"class":1963},[115,101796,171],{"class":125},[115,101798,101189],{"class":230},[115,101800,101192],{"class":1963},[115,101802,171],{"class":125},[115,101804,101197],{"class":230},[115,101806,101134],{"class":125},[14,101808,101809,101811,101812,101815,101816,101819],{},[112,101810,69156],{}," 用来设置仿真参数。",[112,101813,101814],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[112,101817,101818],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[106,101821,101823],{"className":53057,"code":101822,"language":53059,"meta":22,"style":22},"\u003Cworldbody>\n",[112,101824,101825],{"__ignoreMap":22},[115,101826,101827,101829,101832],{"class":117,"line":118},[115,101828,1035],{"class":125},[115,101830,101831],{"class":51290},"worldbody",[115,101833,51297],{"class":125},[14,101835,101836,101838],{},[112,101837,101831],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[106,101840,101842],{"className":53057,"code":101841,"language":53059,"meta":22,"style":22},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[112,101843,101844],{"__ignoreMap":22},[115,101845,101846,101848,101850,101852,101854,101857,101859,101861,101864,101866,101868,101871,101873,101875,101878],{"class":117,"line":118},[115,101847,1035],{"class":125},[115,101849,101110],{"class":51290},[115,101851,14921],{"class":1963},[115,101853,171],{"class":125},[115,101855,101856],{"class":230},"\"floor\"",[115,101858,53814],{"class":1963},[115,101860,171],{"class":125},[115,101862,101863],{"class":230},"\"plane\"",[115,101865,101126],{"class":1963},[115,101867,171],{"class":125},[115,101869,101870],{"class":230},"\"2 2 0.1\"",[115,101872,78757],{"class":1963},[115,101874,171],{"class":125},[115,101876,101877],{"class":230},"\"0.8 0.8 0.8 1\"",[115,101879,101134],{"class":125},[14,101881,101882,101883,101885,101886,101889,101890,101893,101894,101896],{},"这行创建地面。",[112,101884,101110],{}," 是几何体。",[112,101887,101888],{},"name=\"floor\""," 是名字。",[112,101891,101892],{},"type=\"plane\""," 表示平面。",[112,101895,55100],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[106,101898,101900],{"className":53057,"code":101899,"language":53059,"meta":22,"style":22},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[112,101901,101902],{"__ignoreMap":22},[115,101903,101904,101906,101908,101910,101912,101914,101916,101918,101920],{"class":117,"line":118},[115,101905,1035],{"class":125},[115,101907,51790],{"class":51290},[115,101909,14921],{"class":1963},[115,101911,171],{"class":125},[115,101913,53481],{"class":230},[115,101915,101096],{"class":1963},[115,101917,171],{"class":125},[115,101919,101101],{"class":230},[115,101921,51297],{"class":125},[14,101923,101924,101925,28386,101927,101930,101931,101933],{},"这行创建一个刚体，名字叫 ",[112,101926,53704],{},[112,101928,101929],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[112,101932,101159],{},"，也就是离地面 1 米高。",[106,101935,101937],{"className":53057,"code":101936,"language":53059,"meta":22,"style":22},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[112,101938,101939],{"__ignoreMap":22},[115,101940,101941,101943,101945,101947,101949,101952],{"class":117,"line":118},[115,101942,1035],{"class":125},[115,101944,101610],{"class":51290},[115,101946,14921],{"class":1963},[115,101948,171],{"class":125},[115,101950,101951],{"class":230},"\"box_free\"",[115,101953,101134],{"class":125},[14,101955,101956,101957,101959],{},"这行很重要。",[112,101958,101610],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[106,101961,101963],{"className":53057,"code":101962,"language":53059,"meta":22,"style":22},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[112,101964,101965],{"__ignoreMap":22},[115,101966,101967,101969,101971,101973,101975,101977,101979,101981,101983,101985,101987,101989,101992,101994,101996,101998,102000,102003],{"class":117,"line":118},[115,101968,1035],{"class":125},[115,101970,101110],{"class":51290},[115,101972,14921],{"class":1963},[115,101974,171],{"class":125},[115,101976,101117],{"class":230},[115,101978,53814],{"class":1963},[115,101980,171],{"class":125},[115,101982,53481],{"class":230},[115,101984,101126],{"class":1963},[115,101986,171],{"class":125},[115,101988,101131],{"class":230},[115,101990,101991],{"class":1963}," mass",[115,101993,171],{"class":125},[115,101995,3678],{"class":230},[115,101997,78757],{"class":1963},[115,101999,171],{"class":125},[115,102001,102002],{"class":230},"\"1 0 0 1\"",[115,102004,101134],{"class":125},[14,102006,102007,102008,102011,102012,102015,102016,102019,102020,102023],{},"这行给 box body 添加一个盒子形状。",[112,102009,102010],{},"type=\"box\""," 表示形状是盒子。",[112,102013,102014],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[112,102017,102018],{},"mass=\"1\""," 表示质量是 1。",[112,102021,102022],{},"rgba=\"1 0 0 1\""," 表示红色。",[106,102025,102027],{"className":30379,"code":102026,"language":30381,"meta":22,"style":22},"def main() -> None:\n",[112,102028,102029],{"__ignoreMap":22},[115,102030,102031,102033,102035,102037,102039],{"class":117,"line":118},[115,102032,31948],{"class":121},[115,102034,1973],{"class":1963},[115,102036,101388],{"class":125},[115,102038,95676],{"class":174},[115,102040,3739],{"class":125},[14,102042,102043,102045,102046,102049,102050,102053],{},[112,102044,31948],{}," 用来定义函数。这里定义了一个叫 ",[112,102047,102048],{},"main"," 的函数。",[112,102051,102052],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[106,102055,102056],{"className":30379,"code":101617,"language":30381,"meta":22,"style":22},[112,102057,102058],{"__ignoreMap":22},[115,102059,102060,102062,102064,102066,102068],{"class":117,"line":118},[115,102061,101624],{"class":125},[115,102063,171],{"class":121},[115,102065,101402],{"class":125},[115,102067,101304],{"class":174},[115,102069,132],{"class":125},[14,102071,102072,102073,102076],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[112,102074,102075],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[106,102078,102079],{"className":30379,"code":101641,"language":30381,"meta":22,"style":22},[112,102080,102081],{"__ignoreMap":22},[115,102082,102083,102085,102087],{"class":117,"line":118},[115,102084,101648],{"class":125},[115,102086,171],{"class":121},[115,102088,101416],{"class":125},[14,102090,102091,102092,102094,102095,102097],{},"这行创建仿真数据。",[112,102093,33402],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[112,102096,33402],{}," 都会变化。",[106,102099,102101],{"className":30379,"code":102100,"language":30381,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[112,102102,102103,102113,102123],{"__ignoreMap":22},[115,102104,102105,102107,102109,102111],{"class":117,"line":118},[115,102106,30416],{"class":174},[115,102108,126],{"class":125},[115,102110,101429],{"class":230},[115,102112,101432],{"class":125},[115,102114,102115,102117,102119,102121],{"class":117,"line":37},[115,102116,30416],{"class":174},[115,102118,126],{"class":125},[115,102120,101441],{"class":230},[115,102122,101444],{"class":125},[115,102124,102125,102127,102129,102131],{"class":117,"line":1180},[115,102126,30416],{"class":174},[115,102128,126],{"class":125},[115,102130,101453],{"class":230},[115,102132,101456],{"class":125},[14,102134,102135,102137,102138,102141,102142,102145,102146,102149,102150,102153],{},[112,102136,30416],{}," 用来输出信息。",[112,102139,102140],{},"model.nq"," 是位置变量数量，",[112,102143,102144],{},"model.nv"," 是速度变量数量，",[112,102147,102148],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[112,102151,102152],{},"nu"," 是 0。",[106,102155,102157],{"className":30379,"code":102156,"language":30381,"meta":22,"style":22},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[112,102158,102159,102169],{"__ignoreMap":22},[115,102160,102161,102163,102165,102167],{"class":117,"line":118},[115,102162,30416],{"class":174},[115,102164,126],{"class":125},[115,102166,101465],{"class":230},[115,102168,101468],{"class":125},[115,102170,102171,102173,102175,102177],{"class":117,"line":37},[115,102172,30416],{"class":174},[115,102174,126],{"class":125},[115,102176,101477],{"class":230},[115,102178,101480],{"class":125},[14,102180,102181,102182,102184,102185,102187,102188,102191],{},"这里打印初始时间和初始位置。",[112,102183,101057],{}," 一开始是 0。",[112,102186,101060],{}," 是位置数组。",[112,102189,102190],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[106,102193,102194],{"className":30379,"code":101666,"language":30381,"meta":22,"style":22},[112,102195,102196,102212],{"__ignoreMap":22},[115,102197,102198,102200,102202,102204,102206,102208,102210],{"class":117,"line":118},[115,102199,3025],{"class":121},[115,102201,101491],{"class":125},[115,102203,26044],{"class":121},[115,102205,32444],{"class":174},[115,102207,126],{"class":125},[115,102209,436],{"class":174},[115,102211,30787],{"class":125},[115,102213,102214],{"class":117,"line":37},[115,102215,101689],{"class":125},[14,102217,102218,102220,102221,102224,102225,102227,102228,102230],{},[112,102219,3025],{}," 是循环。",[112,102222,102223],{},"range(100)"," 表示循环 100 次。",[112,102226,1117],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[112,102229,101205],{},"，仿真就前进一步。",[106,102232,102234],{"className":30379,"code":102233,"language":30381,"meta":22,"style":22},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[112,102235,102236,102246],{"__ignoreMap":22},[115,102237,102238,102240,102242,102244],{"class":117,"line":118},[115,102239,30416],{"class":174},[115,102241,126],{"class":125},[115,102243,101519],{"class":230},[115,102245,101468],{"class":125},[115,102247,102248,102250,102252,102254],{"class":117,"line":37},[115,102249,30416],{"class":174},[115,102251,126],{"class":125},[115,102253,101530],{"class":230},[115,102255,101480],{"class":125},[14,102257,102258],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[106,102260,102262],{"className":30379,"code":102261,"language":30381,"meta":22,"style":22},"if __name__ == \"__main__\":\n    main()\n",[112,102263,102264,102276],{"__ignoreMap":22},[115,102265,102266,102268,102270,102272,102274],{"class":117,"line":118},[115,102267,1531],{"class":121},[115,102269,31221],{"class":174},[115,102271,101549],{"class":121},[115,102273,101552],{"class":230},[115,102275,3739],{"class":125},[115,102277,102278],{"class":117,"line":37},[115,102279,101559],{"class":125},[14,102281,102282,102283,102286,102287,28386],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[112,102284,102285],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[112,102288,102285],{},[14,102290,102291],{},"运行:",[106,102293,102295],{"className":23823,"code":102294,"language":23825,"meta":22,"style":22},"python ch1_first_sim.py\n",[112,102296,102297],{"__ignoreMap":22},[115,102298,102299,102301],{"class":117,"line":118},[115,102300,30381],{"class":1963},[115,102302,101276],{"class":230},[57,102304,102306],{"id":102305},"_5运行结果说明","5.运行结果说明",[14,102308,102309],{},"你应该看到类似输出:",[106,102311,102314],{"className":102312,"code":102313,"language":5188,"meta":22},[5186],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[112,102315,102313],{"__ignoreMap":22},[14,102317,102318,102320,102321,102324,102325,28386],{},[112,102319,101610],{}," 有 7 个位置变量: ",[112,102322,102323],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[112,102326,102327],{},"vx vy vz wx wy wz",[14,102329,102330,102331,102334],{},"你还会看到 ",[112,102332,102333],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[57,102336,102338],{"id":102337},"_6验证步骤","6.验证步骤",[14,102340,102341],{},"确认版本:",[106,102343,102344],{"className":23823,"code":100929,"language":23825,"meta":22,"style":22},[112,102345,102346],{"__ignoreMap":22},[115,102347,102348,102350,102352],{"class":117,"line":118},[115,102349,30381],{"class":1963},[115,102351,30359],{"class":174},[115,102353,100940],{"class":230},[14,102355,102356],{},"确认导入的是官方 bindings:",[106,102358,102360],{"className":23823,"code":102359,"language":23825,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco)\"\n",[112,102361,102362],{"__ignoreMap":22},[115,102363,102364,102366,102368],{"class":117,"line":118},[115,102365,30381],{"class":1963},[115,102367,30359],{"class":174},[115,102369,102370],{"class":230}," \"import mujoco; print(mujoco)\"\n",[14,102372,102373],{},"运行程序:",[106,102375,102376],{"className":23823,"code":102294,"language":23825,"meta":22,"style":22},[112,102377,102378],{"__ignoreMap":22},[115,102379,102380,102382],{"class":117,"line":118},[115,102381,30381],{"class":1963},[115,102383,101276],{"class":230},[14,102385,102386,102387,102390,102391,28386],{},"检查 ",[112,102388,102389],{},"final time"," 是否约等于 ",[112,102392,102393],{},"1.0",[14,102395,102396],{},"再做几个小实验：",[69,102398,102399,102409,102417,102430],{},[72,102400,102401,102402,102404,102405,102408],{},"把 ",[112,102403,101929],{}," 改成 ",[112,102406,102407],{},"pos=\"0 0 2\"","，观察初始高度变化。",[72,102410,102401,102411,102404,102413,102416],{},[112,102412,101818],{},[112,102414,102415],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[72,102418,102401,102419,102404,102421,102424,102425,102427,102428,28386],{},[112,102420,101814],{},[112,102422,102423],{},"timestep=\"0.005\"","，观察 100 步后的 ",[112,102426,102389],{}," 是否变成约 ",[112,102429,35330],{},[72,102431,102432,102433,102436],{},"删除 ",[112,102434,102435],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102438,102439],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[57,102441,102443],{"id":102442},"_7常见错误与解决方案","7.常见错误与解决方案",[86,102445,102447],{"id":102446},"modulenotfounderror-no-module-named-mujoco",[112,102448,102449],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102451,102452],{},"解决:",[106,102454,102456],{"className":23823,"code":102455,"language":23825,"meta":22,"style":22},"pip install \"mujoco>=2.3\"\n",[112,102457,102458],{"__ignoreMap":22},[115,102459,102460,102462,102464],{"class":117,"line":118},[115,102461,23832],{"class":1963},[115,102463,23835],{"class":230},[115,102465,102466],{"class":230}," \"mujoco>=2.3\"\n",[86,102468,102470],{"id":102469},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102472,102473],{},"先安装系统依赖:",[106,102475,102477],{"className":23823,"code":102476,"language":23825,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[112,102478,102479],{"__ignoreMap":22},[115,102480,102481,102483,102485,102487,102489,102492,102494,102497,102499,102502,102504],{"class":117,"line":118},[115,102482,24577],{"class":1963},[115,102484,26316],{"class":230},[115,102486,23835],{"class":230},[115,102488,26401],{"class":174},[115,102490,102491],{"class":230}," mesa-libGL",[115,102493,100804],{"class":230},[115,102495,102496],{"class":230}," glfw",[115,102498,100824],{"class":230},[115,102500,102501],{"class":230}," libX11",[115,102503,100837],{"class":230},[115,102505,102506],{"class":230}," libXrandr\n",[86,102508,102510],{"id":102509},"xml-解析失败","XML 解析失败",[14,102512,102513],{},"检查:",[69,102515,102516,102519,102522,102528],{},[72,102517,102518],{},"标签是否闭合",[72,102520,102521],{},"属性是否带引号",[72,102523,102524,102525],{},"根节点是否是 ",[112,102526,102527],{},"\u003Cmujoco>",[72,102529,102530,102532,102533,102536],{},[112,102531,51790],{}," 是否放在 ",[112,102534,102535],{},"\u003Cworldbody>"," 内部",[86,102538,102540,102542,102543],{"id":102539},"final-time-不是严格等于-10",[112,102541,102389],{}," 不是严格等于 ",[112,102544,102393],{},[14,102546,102547],{},"这通常不是错误。浮点数计算可能得到：",[106,102549,102552],{"className":102550,"code":102551,"language":5188,"meta":22},[5186],"1.0000000000000007\n",[112,102553,102551],{"__ignoreMap":22},[14,102555,102556,102557,102559],{},"只要接近 ",[112,102558,102393],{}," 就正常。",[86,102561,102562],{"id":102562},"方块没有掉下来",[14,102564,102565],{},"检查：",[69,102567,102568,102574,102580,102585],{},[72,102569,102570,102571],{},"方块 body 里是否有 ",[112,102572,102573],{},"\u003Cfreejoint\u002F>",[72,102575,102576,102577],{},"重力是否是 ",[112,102578,102579],{},"0 0 -9.81",[72,102581,102582,102583],{},"是否真的调用了 ",[112,102584,100675],{},[72,102586,102587,102588,102590,102591],{},"你看的是否是 ",[112,102589,102333],{},"，不是 ",[112,102592,102593],{},"initial qpos",[57,102595,102597],{"id":102596},"_8本章小结","8.本章小结",[14,102599,102600],{},"本章你已经完成了 MuJoCo 的最小闭环：",[106,102602,102605],{"className":102603,"code":102604,"language":5188,"meta":22},[5186],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[112,102606,102604],{"__ignoreMap":22},[14,102608,102609],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5127,102611,102612],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":22,"searchDepth":37,"depth":37,"links":102614},[102615,102616,102617,102622,102626,102627,102628,102636],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":102618},[102619,102620,102621],{"id":101072,"depth":1180,"text":101073},{"id":101166,"depth":1180,"text":101167},{"id":101218,"depth":1180,"text":101219},{"id":101242,"depth":37,"text":101243,"children":102623},[102624,102625],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":102629},[102630,102631,102632,102633,102635],{"id":102446,"depth":1180,"text":102449},{"id":102469,"depth":1180,"text":102470},{"id":102509,"depth":1180,"text":102510},{"id":102539,"depth":1180,"text":102634},"final time 不是严格等于 1.0",{"id":102562,"depth":1180,"text":102562},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100628,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102643,"title":102644,"body":102645,"description":22,"extension":40,"meta":104301,"navigation":42,"path":104302,"seo":104303,"stem":104304,"__hash__":104305},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102646,"toc":104277},[102647,102650,102652,102655,102658,102675,102770,102773,102779,102781,102783,102807,102810,102824,102827,102868,102870,102883,102885,102888,102936,102948,102951,102954,102960,102973,103040,103043,103062,103065,103068,103074,103076,103085,103088,103092,103101,103183,103192,103196,103202,103216,103226,103228,103558,103561,103573,103575,103586,103588,103591,103609,103612,103615,103633,103644,103647,103662,103672,103674,103695,103712,103732,103738,103778,103794,103810,103816,103819,103843,103859,103864,103894,103911,103936,103939,103954,103963,103978,103987,104002,104009,104011,104021,104034,104041,104044,104083,104090,104092,104144,104146,104152,104155,104162,104169,104172,104174,104192,104195,104198,104232,104244,104246,104249,104271,104274],[10,102648,102644],{"id":102649},"_2xml-与-mjcf-物理建模基础",[57,102651,100637],{"id":100636},[14,102653,102654],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102656,102657],{},"本章结束后，你应该能看懂一个简单模型里：",[69,102659,102660,102663,102666,102669,102672],{},[72,102661,102662],{},"地面在哪里。",[72,102664,102665],{},"物体初始位置在哪里。",[72,102667,102668],{},"几何体是什么形状。",[72,102670,102671],{},"哪些 body 可以自由运动。",[72,102673,102674],{},"如何用名字在 Python 里找到 XML 中的对象。",[263,102676,102677,102687],{},[266,102678,102679],{},[269,102680,102681,102684],{},[272,102682,102683],{"align":23737},"标签",[272,102685,102686],{"align":23737},"作用",[310,102688,102689,102698,102708,102717,102727,102737,102750,102760],{},[269,102690,102691,102695],{},[315,102692,102693],{"align":23737},[112,102694,102527],{},[315,102696,102697],{"align":23737},"根节点",[269,102699,102700,102705],{},[315,102701,102702],{"align":23737},[112,102703,102704],{},"\u003Coption>",[315,102706,102707],{"align":23737},"仿真参数",[269,102709,102710,102714],{},[315,102711,102712],{"align":23737},[112,102713,102535],{},[315,102715,102716],{"align":23737},"世界中的物体",[269,102718,102719,102724],{},[315,102720,102721],{"align":23737},[112,102722,102723],{},"\u003Cbody>",[315,102725,102726],{"align":23737},"刚体",[269,102728,102729,102734],{},[315,102730,102731],{"align":23737},[112,102732,102733],{},"\u003Cgeom>",[315,102735,102736],{"align":23737},"几何体、碰撞体、可视体",[269,102738,102739,102747],{},[315,102740,102741,24979,102744],{"align":23737},[112,102742,102743],{},"\u003Cjoint>",[112,102745,102746],{},"\u003Cfreejoint>",[315,102748,102749],{"align":23737},"关节",[269,102751,102752,102757],{},[315,102753,102754],{"align":23737},[112,102755,102756],{},"\u003Csite>",[315,102758,102759],{"align":23737},"标记点",[269,102761,102762,102767],{},[315,102763,102764],{"align":23737},[112,102765,102766],{},"\u003Cactuator>",[315,102768,102769],{"align":23737},"控制器",[14,102771,102772],{},"初学时可以先记住：",[106,102774,102777],{"className":102775,"code":102776,"language":5188,"meta":22},[5186],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[112,102778,102776],{"__ignoreMap":22},[57,102780,100760],{"id":100759},[14,102782,100763],{},[106,102784,102786],{"className":23823,"code":102785,"language":23825,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[112,102787,102788],{"__ignoreMap":22},[115,102789,102790,102792,102794,102796,102798,102800,102802,102804],{"class":117,"line":118},[115,102791,24577],{"class":1963},[115,102793,26316],{"class":230},[115,102795,23835],{"class":230},[115,102797,26401],{"class":174},[115,102799,102491],{"class":230},[115,102801,100804],{"class":230},[115,102803,102496],{"class":230},[115,102805,102806],{"class":230}," glfw-devel\n",[14,102808,102809],{},"pip:",[106,102811,102812],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},[112,102813,102814],{"__ignoreMap":22},[115,102815,102816,102818,102820,102822],{"class":117,"line":118},[115,102817,23832],{"class":1963},[115,102819,23835],{"class":230},[115,102821,100920],{"class":230},[115,102823,100923],{"class":230},[14,102825,102826],{},"conda:",[106,102828,102830],{"className":23823,"code":102829,"language":23825,"meta":22,"style":22},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[112,102831,102832,102849,102858],{"__ignoreMap":22},[115,102833,102834,102836,102838,102840,102843,102845,102847],{"class":117,"line":118},[115,102835,30331],{"class":1963},[115,102837,29177],{"class":230},[115,102839,25116],{"class":174},[115,102841,102842],{"class":230}," mujoco-xml",[115,102844,100965],{"class":230},[115,102846,100968],{"class":174},[115,102848,100971],{"class":174},[115,102850,102851,102853,102855],{"class":117,"line":37},[115,102852,30331],{"class":1963},[115,102854,100978],{"class":230},[115,102856,102857],{"class":230}," mujoco-xml\n",[115,102859,102860,102862,102864,102866],{"class":117,"line":1180},[115,102861,23832],{"class":1963},[115,102863,23835],{"class":230},[115,102865,100920],{"class":230},[115,102867,100923],{"class":230},[14,102869,100994],{},[69,102871,102872,102875,102880],{},[72,102873,102874],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[72,102876,102877,102878,28386],{},"本章使用基础标签，适用于 ",[112,102879,101017],{},[72,102881,102882],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[57,102884,101035],{"id":101034},[14,102886,102887],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[106,102889,102891],{"className":53057,"code":102890,"language":53059,"meta":22,"style":22},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[112,102892,102893,102907,102915,102920,102928],{"__ignoreMap":22},[115,102894,102895,102897,102899,102901,102903,102905],{"class":117,"line":118},[115,102896,1035],{"class":125},[115,102898,101011],{"class":51290},[115,102900,101765],{"class":1963},[115,102902,171],{"class":125},[115,102904,62669],{"class":230},[115,102906,51297],{"class":125},[115,102908,102909,102911,102913],{"class":117,"line":37},[115,102910,52134],{"class":125},[115,102912,101831],{"class":51290},[115,102914,51297],{"class":125},[115,102916,102917],{"class":117,"line":1180},[115,102918,102919],{"class":125},"    ...\n",[115,102921,102922,102924,102926],{"class":117,"line":1195},[115,102923,52407],{"class":125},[115,102925,101831],{"class":51290},[115,102927,51297],{"class":125},[115,102929,102930,102932,102934],{"class":117,"line":1201},[115,102931,51775],{"class":125},[115,102933,101011],{"class":51290},[115,102935,51297],{"class":125},[14,102937,102938,102940,102941,102943,102944,102947],{},[112,102939,51790],{}," 表示刚体。",[112,102942,101110],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[112,102945,102946],{},"joint"," 表示刚体相对父刚体如何运动。",[86,102949,102950],{"id":102950},"层级结构非常重要",[14,102952,102953],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[106,102955,102958],{"className":102956,"code":102957,"language":5188,"meta":22},[5186],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[112,102959,102957],{"__ignoreMap":22},[14,102961,102962,101008,102965,102968,102969,102972],{},[112,102963,102964],{},"red_box_geom",[112,102966,102967],{},"box_center"," 都属于 ",[112,102970,102971],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[106,102974,102976],{"className":53057,"code":102975,"language":53059,"meta":22,"style":22},"\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",[112,102977,102978,102998,103012,103032],{"__ignoreMap":22},[115,102979,102980,102982,102984,102986,102988,102990,102992,102994,102996],{"class":117,"line":118},[115,102981,1035],{"class":125},[115,102983,51790],{"class":51290},[115,102985,14921],{"class":1963},[115,102987,171],{"class":125},[115,102989,53481],{"class":230},[115,102991,101096],{"class":1963},[115,102993,171],{"class":125},[115,102995,101101],{"class":230},[115,102997,51297],{"class":125},[115,102999,103000,103002,103004,103006,103008,103010],{"class":117,"line":37},[115,103001,52134],{"class":125},[115,103003,101610],{"class":51290},[115,103005,14921],{"class":1963},[115,103007,171],{"class":125},[115,103009,101951],{"class":230},[115,103011,101134],{"class":125},[115,103013,103014,103016,103018,103020,103022,103024,103026,103028,103030],{"class":117,"line":1180},[115,103015,52134],{"class":125},[115,103017,101110],{"class":51290},[115,103019,53814],{"class":1963},[115,103021,171],{"class":125},[115,103023,53481],{"class":230},[115,103025,101126],{"class":1963},[115,103027,171],{"class":125},[115,103029,101131],{"class":230},[115,103031,101134],{"class":125},[115,103033,103034,103036,103038],{"class":117,"line":1195},[115,103035,51775],{"class":125},[115,103037,51790],{"class":51290},[115,103039,51297],{"class":125},[14,103041,103042],{},"含义:",[69,103044,103045,103051,103056,103059],{},[72,103046,103047,103048,103050],{},"创建名为 ",[112,103049,53704],{}," 的刚体",[72,103052,103053,103054],{},"初始位置在世界坐标 ",[112,103055,101159],{},[72,103057,103058],{},"它有一个自由关节",[72,103060,103061],{},"它有一个盒子几何体",[86,103063,103064],{"id":103064},"坐标怎么理解",[14,103066,103067],{},"MuJoCo 默认使用三维坐标：",[106,103069,103072],{"className":103070,"code":103071,"language":5188,"meta":22},[5186],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[112,103073,103071],{"__ignoreMap":22},[14,103075,14634],{},[106,103077,103079],{"className":53057,"code":103078,"language":53059,"meta":22,"style":22},"pos=\"0 0 1\"\n",[112,103080,103081],{"__ignoreMap":22},[115,103082,103083],{"class":117,"line":118},[115,103084,103078],{"class":125},[14,103086,103087],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[86,103089,103091],{"id":103090},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103093,103094,103095,82520,103098,103100],{},"不同 ",[112,103096,103097],{},"type",[112,103099,31497],{}," 含义不同：",[263,103102,103103,103118],{},[266,103104,103105],{},[269,103106,103107,103111,103116],{},[272,103108,103109],{"align":23737},[112,103110,103097],{},[272,103112,103113,103115],{"align":23737},[112,103114,31497],{}," 示例",[272,103117,100690],{"align":23737},[310,103119,103120,103134,103149,103168],{},[269,103121,103122,103126,103131],{},[315,103123,103124],{"align":23737},[112,103125,53704],{},[315,103127,103128],{"align":23737},[112,103129,103130],{},"size=\"0.1 0.2 0.3\"",[315,103132,103133],{"align":23737},"x\u002Fy\u002Fz 半边长，不是完整长度",[269,103135,103136,103141,103146],{},[315,103137,103138],{"align":23737},[112,103139,103140],{},"sphere",[315,103142,103143],{"align":23737},[112,103144,103145],{},"size=\"0.1\"",[315,103147,103148],{"align":23737},"球半径",[269,103150,103151,103156,103161],{},[315,103152,103153],{"align":23737},[112,103154,103155],{},"capsule",[315,103157,103158],{"align":23737},[112,103159,103160],{},"size=\"0.03\"",[315,103162,103163,103164,103167],{"align":23737},"胶囊半径，长度常用 ",[112,103165,103166],{},"fromto"," 指定",[269,103169,103170,103175,103180],{},[315,103171,103172],{"align":23737},[112,103173,103174],{},"plane",[315,103176,103177],{"align":23737},[112,103178,103179],{},"size=\"3 3 0.1\"",[315,103181,103182],{"align":23737},"可视平面大小，通常当地面",[14,103184,103185,103186,103188,103189,103191],{},"最容易踩坑的是 box：",[112,103187,102014],{}," 表示边长大约是 ",[112,103190,32038],{},"，因为 MuJoCo 用的是半边长。",[86,103193,103195],{"id":103194},"site-是什么","site 是什么",[14,103197,103198,103201],{},[112,103199,103200],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[69,103203,103204,103207,103210,103213],{},[72,103205,103206],{},"标记机械臂末端。",[72,103208,103209],{},"标记目标位置。",[72,103211,103212],{},"放传感器或相机参考点。",[72,103214,103215],{},"在 Python 中读取某个关键点的世界坐标。",[14,103217,103218,103219,101008,103222,103225],{},"在后面的 Reacher 任务中，",[112,103220,103221],{},"tip",[112,103223,103224],{},"target"," 就会用 site 表示。",[57,103227,101243],{"id":101242},[106,103229,103231],{"className":30379,"code":103230,"language":30381,"meta":22,"style":22},"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",[112,103232,103233,103239,103249,103253,103257,103265,103270,103274,103278,103282,103287,103291,103296,103301,103306,103311,103315,103319,103323,103327,103331,103335,103347,103359,103367,103371,103386,103401,103405,103418,103433,103446,103459,103463,103479,103483,103487,103498,103510,103522,103534,103538,103542,103554],{"__ignoreMap":22},[115,103234,103235,103237],{"class":117,"line":118},[115,103236,30393],{"class":121},[115,103238,101291],{"class":125},[115,103240,103241,103243,103245,103247],{"class":117,"line":37},[115,103242,30393],{"class":121},[115,103244,31381],{"class":125},[115,103246,31384],{"class":121},[115,103248,31387],{"class":125},[115,103250,103251],{"class":117,"line":1180},[115,103252,2400],{"emptyLinePlaceholder":42},[115,103254,103255],{"class":117,"line":1195},[115,103256,2400],{"emptyLinePlaceholder":42},[115,103258,103259,103261,103263],{"class":117,"line":1201},[115,103260,101304],{"class":174},[115,103262,13565],{"class":121},[115,103264,101309],{"class":230},[115,103266,103267],{"class":117,"line":1215},[115,103268,103269],{"class":230},"\u003Cmujoco model=\"xml_basic\">\n",[115,103271,103272],{"class":117,"line":1221},[115,103273,101319],{"class":230},[115,103275,103276],{"class":117,"line":1312},[115,103277,2400],{"emptyLinePlaceholder":42},[115,103279,103280],{"class":117,"line":1318},[115,103281,101328],{"class":230},[115,103283,103284],{"class":117,"line":1330},[115,103285,103286],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[115,103288,103289],{"class":117,"line":1612},[115,103290,2400],{"emptyLinePlaceholder":42},[115,103292,103293],{"class":117,"line":1617},[115,103294,103295],{"class":230},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[115,103297,103298],{"class":117,"line":1623},[115,103299,103300],{"class":230},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[115,103302,103303],{"class":117,"line":1628},[115,103304,103305],{"class":230},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[115,103307,103308],{"class":117,"line":1642},[115,103309,103310],{"class":230},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[115,103312,103313],{"class":117,"line":1647},[115,103314,101357],{"class":230},[115,103316,103317],{"class":117,"line":1653},[115,103318,101362],{"class":230},[115,103320,103321],{"class":117,"line":1674},[115,103322,101367],{"class":230},[115,103324,103325],{"class":117,"line":1679},[115,103326,95688],{"class":230},[115,103328,103329],{"class":117,"line":1693},[115,103330,2400],{"emptyLinePlaceholder":42},[115,103332,103333],{"class":117,"line":1698},[115,103334,2400],{"emptyLinePlaceholder":42},[115,103336,103337,103339,103341,103343,103345],{"class":117,"line":1727},[115,103338,31948],{"class":121},[115,103340,1973],{"class":1963},[115,103342,101388],{"class":125},[115,103344,95676],{"class":174},[115,103346,3739],{"class":125},[115,103348,103349,103351,103353,103355,103357],{"class":117,"line":1732},[115,103350,101397],{"class":125},[115,103352,171],{"class":121},[115,103354,101402],{"class":125},[115,103356,101304],{"class":174},[115,103358,132],{"class":125},[115,103360,103361,103363,103365],{"class":117,"line":1749},[115,103362,101411],{"class":125},[115,103364,171],{"class":121},[115,103366,101416],{"class":125},[115,103368,103369],{"class":117,"line":1754},[115,103370,2400],{"emptyLinePlaceholder":42},[115,103372,103373,103376,103378,103381,103384],{"class":117,"line":1759},[115,103374,103375],{"class":125},"    box_body_id ",[115,103377,171],{"class":121},[115,103379,103380],{"class":125}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[115,103382,103383],{"class":230},"\"red_box\"",[115,103385,132],{"class":125},[115,103387,103388,103391,103393,103396,103399],{"class":117,"line":1764},[115,103389,103390],{"class":125},"    site_id ",[115,103392,171],{"class":121},[115,103394,103395],{"class":125}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[115,103397,103398],{"class":230},"\"box_center\"",[115,103400,132],{"class":125},[115,103402,103403],{"class":117,"line":1778},[115,103404,2400],{"emptyLinePlaceholder":42},[115,103406,103407,103409,103412,103414,103416],{"class":117,"line":1783},[115,103408,3101],{"class":121},[115,103410,103411],{"class":125}," box_body_id ",[115,103413,1035],{"class":121},[115,103415,4093],{"class":174},[115,103417,3739],{"class":125},[115,103419,103420,103423,103426,103428,103431],{"class":117,"line":2577},[115,103421,103422],{"class":121},"        raise",[115,103424,103425],{"class":174}," RuntimeError",[115,103427,126],{"class":125},[115,103429,103430],{"class":230},"\"body red_box not found\"",[115,103432,132],{"class":125},[115,103434,103435,103437,103440,103442,103444],{"class":117,"line":2591},[115,103436,3101],{"class":121},[115,103438,103439],{"class":125}," site_id ",[115,103441,1035],{"class":121},[115,103443,4093],{"class":174},[115,103445,3739],{"class":125},[115,103447,103448,103450,103452,103454,103457],{"class":117,"line":2599},[115,103449,103422],{"class":121},[115,103451,103425],{"class":174},[115,103453,126],{"class":125},[115,103455,103456],{"class":230},"\"site box_center not found\"",[115,103458,132],{"class":125},[115,103460,103461],{"class":117,"line":2604},[115,103462,2400],{"emptyLinePlaceholder":42},[115,103464,103465,103467,103469,103471,103473,103475,103477],{"class":117,"line":2610},[115,103466,3201],{"class":121},[115,103468,101491],{"class":125},[115,103470,26044],{"class":121},[115,103472,32444],{"class":174},[115,103474,126],{"class":125},[115,103476,1722],{"class":174},[115,103478,30787],{"class":125},[115,103480,103481],{"class":117,"line":2616},[115,103482,101506],{"class":125},[115,103484,103485],{"class":117,"line":2621},[115,103486,2400],{"emptyLinePlaceholder":42},[115,103488,103489,103491,103493,103496],{"class":117,"line":7949},[115,103490,31300],{"class":174},[115,103492,126],{"class":125},[115,103494,103495],{"class":230},"\"simulation time:\"",[115,103497,101468],{"class":125},[115,103499,103500,103502,103504,103507],{"class":117,"line":7973},[115,103501,31300],{"class":174},[115,103503,126],{"class":125},[115,103505,103506],{"class":230},"\"box body position:\"",[115,103508,103509],{"class":125},", data.xpos[box_body_id].copy())\n",[115,103511,103512,103514,103516,103519],{"class":117,"line":7978},[115,103513,31300],{"class":174},[115,103515,126],{"class":125},[115,103517,103518],{"class":230},"\"site position:\"",[115,103520,103521],{"class":125},", data.site_xpos[site_id].copy())\n",[115,103523,103524,103526,103528,103531],{"class":117,"line":7984},[115,103525,31300],{"class":174},[115,103527,126],{"class":125},[115,103529,103530],{"class":230},"\"box qpos:\"",[115,103532,103533],{"class":125},", np.array(data.qpos))\n",[115,103535,103536],{"class":117,"line":8011},[115,103537,2400],{"emptyLinePlaceholder":42},[115,103539,103540],{"class":117,"line":8016},[115,103541,2400],{"emptyLinePlaceholder":42},[115,103543,103544,103546,103548,103550,103552],{"class":117,"line":8022},[115,103545,1531],{"class":121},[115,103547,31221],{"class":174},[115,103549,101549],{"class":121},[115,103551,101552],{"class":230},[115,103553,3739],{"class":125},[115,103555,103556],{"class":117,"line":8034},[115,103557,101559],{"class":125},[14,103559,103560],{},"保存为：",[106,103562,103564],{"className":23823,"code":103563,"language":23825,"meta":22,"style":22},"touch ch2_xml_basic.py\n",[112,103565,103566],{"__ignoreMap":22},[115,103567,103568,103570],{"class":117,"line":118},[115,103569,101273],{"class":1963},[115,103571,103572],{"class":230}," ch2_xml_basic.py\n",[14,103574,102291],{},[106,103576,103578],{"className":23823,"code":103577,"language":23825,"meta":22,"style":22},"python ch2_xml_basic.py\n",[112,103579,103580],{"__ignoreMap":22},[115,103581,103582,103584],{"class":117,"line":118},[115,103583,30381],{"class":1963},[115,103585,103572],{"class":230},[86,103587,101562],{"id":101562},[14,103589,103590],{},"用名字查找 body：",[106,103592,103594],{"className":30379,"code":103593,"language":30381,"meta":22,"style":22},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[112,103595,103596],{"__ignoreMap":22},[115,103597,103598,103601,103603,103605,103607],{"class":117,"line":118},[115,103599,103600],{"class":125},"box_body_id ",[115,103602,171],{"class":121},[115,103604,103380],{"class":125},[115,103606,103383],{"class":230},[115,103608,132],{"class":125},[14,103610,103611],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103613,103614],{},"用名字查找 site：",[106,103616,103618],{"className":30379,"code":103617,"language":30381,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[112,103619,103620],{"__ignoreMap":22},[115,103621,103622,103625,103627,103629,103631],{"class":117,"line":118},[115,103623,103624],{"class":125},"site_id ",[115,103626,171],{"class":121},[115,103628,103395],{"class":125},[115,103630,103398],{"class":230},[115,103632,132],{"class":125},[14,103634,103635,103636,103639,103640,103643],{},"注意第二个参数是对象类型。查 body 就用 ",[112,103637,103638],{},"mjOBJ_BODY","，查 site 就用 ",[112,103641,103642],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103645,103646],{},"读取世界坐标：",[106,103648,103650],{"className":30379,"code":103649,"language":30381,"meta":22,"style":22},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[112,103651,103652,103657],{"__ignoreMap":22},[115,103653,103654],{"class":117,"line":118},[115,103655,103656],{"class":125},"data.xpos[box_body_id]\n",[115,103658,103659],{"class":117,"line":37},[115,103660,103661],{"class":125},"data.site_xpos[site_id]\n",[14,103663,103664,103667,103668,103671],{},[112,103665,103666],{},"xpos"," 是 body 的世界坐标，",[112,103669,103670],{},"site_xpos"," 是 site 的世界坐标。",[86,103673,101698],{"id":101698},[106,103675,103677],{"className":30379,"code":103676,"language":30381,"meta":22,"style":22},"import mujoco\nimport numpy as np\n",[112,103678,103679,103685],{"__ignoreMap":22},[115,103680,103681,103683],{"class":117,"line":118},[115,103682,30393],{"class":121},[115,103684,101291],{"class":125},[115,103686,103687,103689,103691,103693],{"class":117,"line":37},[115,103688,30393],{"class":121},[115,103690,31381],{"class":125},[115,103692,31384],{"class":121},[115,103694,31387],{"class":125},[14,103696,103697,103698,103701,103702,103705,103706,338,103709,28386],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[112,103699,103700],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[112,103703,103704],{},"as np"," 是习惯写法，后面就可以写 ",[112,103707,103708],{},"np.array(...)",[112,103710,103711],{},"np.round(...)",[106,103713,103714],{"className":30379,"code":101585,"language":30381,"meta":22,"style":22},[112,103715,103716,103724,103728],{"__ignoreMap":22},[115,103717,103718,103720,103722],{"class":117,"line":118},[115,103719,101304],{"class":174},[115,103721,13565],{"class":121},[115,103723,101309],{"class":230},[115,103725,103726],{"class":117,"line":37},[115,103727,101600],{"class":230},[115,103729,103730],{"class":117,"line":1180},[115,103731,95688],{"class":230},[14,103733,103734,103735,28386],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[112,103736,103737],{},"mujoco.MjModel.from_xml_string(XML)",[106,103739,103741],{"className":53057,"code":103740,"language":53059,"meta":22,"style":22},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[112,103742,103743],{"__ignoreMap":22},[115,103744,103745,103747,103749,103751,103753,103755,103757,103759,103762,103764,103766,103769,103771,103773,103776],{"class":117,"line":118},[115,103746,1035],{"class":125},[115,103748,103200],{"class":51290},[115,103750,14921],{"class":1963},[115,103752,171],{"class":125},[115,103754,103398],{"class":230},[115,103756,101096],{"class":1963},[115,103758,171],{"class":125},[115,103760,103761],{"class":230},"\"0 0 0\"",[115,103763,101126],{"class":1963},[115,103765,171],{"class":125},[115,103767,103768],{"class":230},"\"0.03\"",[115,103770,78757],{"class":1963},[115,103772,171],{"class":125},[115,103774,103775],{"class":230},"\"0 1 0 1\"",[115,103777,101134],{"class":125},[14,103779,103780,103782,103783,103786,103787,103789,103790,103793],{},[112,103781,103200],{}," 是标记点。",[112,103784,103785],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[112,103788,103160],{}," 表示显示出来的小球大小。",[112,103791,103792],{},"rgba=\"0 1 0 1\""," 表示绿色。",[106,103795,103796],{"className":30379,"code":103593,"language":30381,"meta":22,"style":22},[112,103797,103798],{"__ignoreMap":22},[115,103799,103800,103802,103804,103806,103808],{"class":117,"line":118},[115,103801,103600],{"class":125},[115,103803,171],{"class":121},[115,103805,103380],{"class":125},[115,103807,103383],{"class":230},[115,103809,132],{"class":125},[14,103811,103812,103813,103815],{},"这行的作用是：根据名字 ",[112,103814,103383],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103817,103818],{},"拆开看：",[69,103820,103821,103827,103832,103838],{},[72,103822,103823,103826],{},[112,103824,103825],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[72,103828,103829,103831],{},[112,103830,102075],{}," 是被查询的模型。",[72,103833,103834,103837],{},[112,103835,103836],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[72,103839,103840,103842],{},[112,103841,103383],{}," 是 XML 里写的名字。",[106,103844,103845],{"className":30379,"code":103617,"language":30381,"meta":22,"style":22},[112,103846,103847],{"__ignoreMap":22},[115,103848,103849,103851,103853,103855,103857],{"class":117,"line":118},[115,103850,103624],{"class":125},[115,103852,171],{"class":121},[115,103854,103395],{"class":125},[115,103856,103398],{"class":230},[115,103858,132],{"class":125},[14,103860,103861,103862,28386],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[112,103863,103398],{},[106,103865,103867],{"className":30379,"code":103866,"language":30381,"meta":22,"style":22},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[112,103868,103869,103881],{"__ignoreMap":22},[115,103870,103871,103873,103875,103877,103879],{"class":117,"line":118},[115,103872,1531],{"class":121},[115,103874,103411],{"class":125},[115,103876,1035],{"class":121},[115,103878,4093],{"class":174},[115,103880,3739],{"class":125},[115,103882,103883,103886,103888,103890,103892],{"class":117,"line":37},[115,103884,103885],{"class":121},"    raise",[115,103887,103425],{"class":174},[115,103889,126],{"class":125},[115,103891,103430],{"class":230},[115,103893,132],{"class":125},[14,103895,103896,103898,103899,103902,103903,103906,103907,103910],{},[112,103897,1531],{}," 是条件判断。",[112,103900,103901],{},"mj_name2id"," 找不到对象时会返回 ",[112,103904,103905],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[112,103908,103909],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[106,103912,103914],{"className":30379,"code":103913,"language":30381,"meta":22,"style":22},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[112,103915,103916,103932],{"__ignoreMap":22},[115,103917,103918,103920,103922,103924,103926,103928,103930],{"class":117,"line":118},[115,103919,3025],{"class":121},[115,103921,101491],{"class":125},[115,103923,26044],{"class":121},[115,103925,32444],{"class":174},[115,103927,126],{"class":125},[115,103929,1722],{"class":174},[115,103931,30787],{"class":125},[115,103933,103934],{"class":117,"line":37},[115,103935,101689],{"class":125},[14,103937,103938],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[106,103940,103942],{"className":30379,"code":103941,"language":30381,"meta":22,"style":22},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[112,103943,103944],{"__ignoreMap":22},[115,103945,103946,103948,103950,103952],{"class":117,"line":118},[115,103947,30416],{"class":174},[115,103949,126],{"class":125},[115,103951,103506],{"class":230},[115,103953,103509],{"class":125},[14,103955,103956,103958,103959,103962],{},[112,103957,101069],{}," 保存所有 body 的世界坐标。",[112,103960,103961],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[106,103964,103966],{"className":30379,"code":103965,"language":30381,"meta":22,"style":22},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[112,103967,103968],{"__ignoreMap":22},[115,103969,103970,103972,103974,103976],{"class":117,"line":118},[115,103971,30416],{"class":174},[115,103973,126],{"class":125},[115,103975,103518],{"class":230},[115,103977,103521],{"class":125},[14,103979,103980,103983,103984,103986],{},[112,103981,103982],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[112,103985,102967],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[106,103988,103990],{"className":30379,"code":103989,"language":30381,"meta":22,"style":22},"print(\"box qpos:\", np.array(data.qpos))\n",[112,103991,103992],{"__ignoreMap":22},[115,103993,103994,103996,103998,104000],{"class":117,"line":118},[115,103995,30416],{"class":174},[115,103997,126],{"class":125},[115,103999,103530],{"class":230},[115,104001,103533],{"class":125},[14,104003,104004,104005,104008],{},"这里打印广义位置数组。",[112,104006,104007],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[57,104010,102306],{"id":102305},[14,104012,104013,104014,104017,104018,28386],{},"程序会输出 ",[112,104015,104016],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[112,104019,104020],{},"qpos",[14,104022,104023,104025,104026,104029,104030,104033],{},[112,104024,103961],{}," 是 body 的世界坐标位置。",[112,104027,104028],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[112,104031,104032],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104035,82212,104036,82520,104038,104040],{},[112,104037,102967],{},[112,104039,103785],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104042,104043],{},"如果你把 site 改成：",[106,104045,104047],{"className":53057,"code":104046,"language":53059,"meta":22,"style":22},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[112,104048,104049],{"__ignoreMap":22},[115,104050,104051,104053,104055,104057,104059,104062,104064,104066,104069,104071,104073,104075,104077,104079,104081],{"class":117,"line":118},[115,104052,1035],{"class":125},[115,104054,103200],{"class":51290},[115,104056,14921],{"class":1963},[115,104058,171],{"class":125},[115,104060,104061],{"class":230},"\"box_top\"",[115,104063,101096],{"class":1963},[115,104065,171],{"class":125},[115,104067,104068],{"class":230},"\"0 0 0.15\"",[115,104070,101126],{"class":1963},[115,104072,171],{"class":125},[115,104074,103768],{"class":230},[115,104076,78757],{"class":1963},[115,104078,171],{"class":125},[115,104080,103775],{"class":230},[115,104082,101134],{"class":125},[14,104084,104085,104086,104089],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[112,104087,104088],{},"site position"," 就会比 body position 的 z 坐标更高。",[57,104091,102338],{"id":102337},[69,104093,104094,104103,104106,104113,104119,104130],{},[72,104095,102401,104096,104098,104099,102404,104101,28386],{},[112,104097,102971],{}," 的初始高度从 ",[112,104100,343],{},[112,104102,203],{},[72,104104,104105],{},"重新运行程序。",[72,104107,104108,104109,104112],{},"观察 ",[112,104110,104111],{},"box qpos"," 和最终位置是否变化。",[72,104114,104115,104116,104118],{},"故意把 ",[112,104117,103200],{}," 名称改错，确认程序能报错。",[72,104120,102401,104121,104123,104124,102404,104126,104129],{},[112,104122,101110],{}," 的颜色 ",[112,104125,102022],{},[112,104127,104128],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[72,104131,102401,104132,82520,104134,102404,104137,104140,104141,104143],{},[112,104133,102967],{},[112,104135,104136],{},"pos",[112,104138,104139],{},"0 0 0.2","，观察 ",[112,104142,104088],{}," 如何变化。",[57,104145,102443],{"id":102442},[86,104147,104149],{"id":104148},"xml-error-schema-violation",[112,104150,104151],{},"XML Error: Schema violation",[14,104153,104154],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[86,104156,104158,81280,104160],{"id":104157},"mj_name2id-返回-1",[112,104159,103901],{},[112,104161,103905],{},[14,104163,104164,104165,104168],{},"说明名字没有找到。检查 XML 中 ",[112,104166,104167],{},"name=\"...\"","，并确认对象类型正确。",[86,104170,104171],{"id":104171},"物体不下落",[14,104173,102513],{},[69,104175,104176,104181,104186],{},[72,104177,104178,104179],{},"body 是否有 ",[112,104180,101610],{},[72,104182,104183,104184],{},"gravity 是否为 ",[112,104185,102579],{},[72,104187,104188,104189,104191],{},"body 是否被固定在 ",[112,104190,101831],{}," 中",[86,104193,104194],{"id":104194},"坐标看起来不符合预期",[14,104196,104197],{},"先区分两种坐标：",[263,104199,104200,104209],{},[266,104201,104202],{},[269,104203,104204,104207],{},[272,104205,104206],{"align":23737},"坐标",[272,104208,100690],{"align":23737},[310,104210,104211,104221],{},[269,104212,104213,104218],{},[315,104214,104215,104216],{"align":23737},"XML 里的 ",[112,104217,104136],{},[315,104219,104220],{"align":23737},"相对父 body 的局部坐标",[269,104222,104223,104229],{},[315,104224,104225,24979,104227],{"align":23737},[112,104226,101069],{},[112,104228,103982],{},[315,104230,104231],{"align":23737},"仿真更新后的世界坐标",[14,104233,104234,104235,104237,104238,82529,104241,104243],{},"如果你修改了 ",[112,104236,101060],{},"，但还没调用 ",[112,104239,104240],{},"mj_forward",[112,104242,101205],{},"，世界坐标可能还没有更新。",[57,104245,102597],{"id":102596},[14,104247,104248],{},"MJCF 建模先掌握四件事：",[69,104250,104251,104256,104261,104266],{},[72,104252,104253,104255],{},[112,104254,51790],{}," 表示刚体层级。",[72,104257,104258,104260],{},[112,104259,101110],{}," 表示形状、碰撞和质量。",[72,104262,104263,104265],{},[112,104264,102946],{}," 决定 body 能不能动、怎么动。",[72,104267,104268,104270],{},[112,104269,103200],{}," 用来标记关键点，方便 Python 读取位置。",[14,104272,104273],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5127,104275,104276],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":22,"searchDepth":37,"depth":37,"links":104278},[104279,104280,104281,104287,104291,104292,104293,104300],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":104282},[104283,104284,104285,104286],{"id":102950,"depth":1180,"text":102950},{"id":103064,"depth":1180,"text":103064},{"id":103090,"depth":1180,"text":103091},{"id":103194,"depth":1180,"text":103195},{"id":101242,"depth":37,"text":101243,"children":104288},[104289,104290],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":104294},[104295,104296,104298,104299],{"id":104148,"depth":1180,"text":104151},{"id":104157,"depth":1180,"text":104297},"mj_name2id 返回 -1",{"id":104171,"depth":1180,"text":104171},{"id":104194,"depth":1180,"text":104194},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102644,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104307,"title":104308,"body":104309,"description":22,"extension":40,"meta":105804,"navigation":42,"path":105805,"seo":105806,"stem":105807,"__hash__":105808},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104310,"toc":105776},[104311,104314,104316,104319,104322,104360,104363,104369,104372,104374,104376,104403,104405,104419,104421,104462,104464,104488,104490,104493,104502,104511,104514,104523,104531,104540,104543,104553,104556,104608,104615,104621,104629,104677,104680,104699,104702,104710,104714,104723,104756,104758,105106,105108,105120,105122,105133,105135,105138,105159,105165,105168,105193,105203,105206,105214,105217,105220,105241,105252,105254,105274,105277,105298,105307,105326,105332,105357,105360,105374,105381,105405,105408,105416,105425,105441,105453,105461,105470,105472,105475,105499,105504,105507,105529,105531,105570,105572,105579,105581,105589,105592,105595,105607,105648,105655,105666,105673,105676,105725,105728,105731,105737,105739,105744,105770,105773],[10,104312,104308],{"id":104313},"_3python-控制接口读取状态与推进仿真",[57,104315,100637],{"id":100636},[14,104317,104318],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104320,104321],{},"你将学习:",[69,104323,104324,104329,104334,104338,104343,104354],{},[72,104325,104326],{},[112,104327,104328],{},"MjModel.from_xml_string",[72,104330,104331],{},[112,104332,104333],{},"MjData(model)",[72,104335,104336],{},[112,104337,101205],{},[72,104339,104340],{},[112,104341,104342],{},"mj_resetData",[72,104344,104345,104346,338,104348,338,104351],{},"读取 ",[112,104347,104020],{},[112,104349,104350],{},"qvel",[112,104352,104353],{},"ctrl",[72,104355,104356,104357],{},"使用 ",[112,104358,104359],{},"model.opt.timestep",[14,104361,104362],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[106,104364,104367],{"className":104365,"code":104366,"language":5188,"meta":22},[5186],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[112,104368,104366],{"__ignoreMap":22},[14,104370,104371],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[57,104373,100760],{"id":100759},[14,104375,100763],{},[106,104377,104379],{"className":23823,"code":104378,"language":23825,"meta":22,"style":22},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[112,104380,104381],{"__ignoreMap":22},[115,104382,104383,104385,104387,104389,104391,104394,104396,104398,104400],{"class":117,"line":118},[115,104384,24577],{"class":1963},[115,104386,26316],{"class":230},[115,104388,23835],{"class":230},[115,104390,26401],{"class":174},[115,104392,104393],{"class":230}," python3",[115,104395,100788],{"class":230},[115,104397,102491],{"class":230},[115,104399,100804],{"class":230},[115,104401,104402],{"class":230}," glfw\n",[14,104404,102809],{},[106,104406,104407],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},[112,104408,104409],{"__ignoreMap":22},[115,104410,104411,104413,104415,104417],{"class":117,"line":118},[115,104412,23832],{"class":1963},[115,104414,23835],{"class":230},[115,104416,100920],{"class":230},[115,104418,100923],{"class":230},[14,104420,102826],{},[106,104422,104424],{"className":23823,"code":104423,"language":23825,"meta":22,"style":22},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[112,104425,104426,104443,104452],{"__ignoreMap":22},[115,104427,104428,104430,104432,104434,104437,104439,104441],{"class":117,"line":118},[115,104429,30331],{"class":1963},[115,104431,29177],{"class":230},[115,104433,25116],{"class":174},[115,104435,104436],{"class":230}," mujoco-python-api",[115,104438,100965],{"class":230},[115,104440,100968],{"class":174},[115,104442,100971],{"class":174},[115,104444,104445,104447,104449],{"class":117,"line":37},[115,104446,30331],{"class":1963},[115,104448,100978],{"class":230},[115,104450,104451],{"class":230}," mujoco-python-api\n",[115,104453,104454,104456,104458,104460],{"class":117,"line":1180},[115,104455,23832],{"class":1963},[115,104457,23835],{"class":230},[115,104459,100920],{"class":230},[115,104461,100923],{"class":230},[14,104463,100994],{},[69,104465,104466,104473,104482],{},[72,104467,104468,101008,104470,104472],{},[112,104469,100665],{},[112,104471,100670],{}," 是官方 Python bindings 的类名。",[72,104474,104475,104476,104479,104480,28386],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[112,104477,104478],{},"mjModel"," 在 Python 中是 ",[112,104481,100699],{},[72,104483,104484,104485,28386],{},"不要使用 ",[112,104486,104487],{},"sim = mujoco_py.MjSim(...)",[57,104489,101035],{"id":101034},[14,104491,104492],{},"仿真推进核心代码:",[106,104494,104496],{"className":30379,"code":104495,"language":30381,"meta":22,"style":22},"mujoco.mj_step(model, data)\n",[112,104497,104498],{"__ignoreMap":22},[115,104499,104500],{"class":117,"line":118},[115,104501,104495],{"class":125},[14,104503,104504,104505,338,104507,338,104509,28386],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[112,104506,101060],{},[112,104508,101063],{},[112,104510,101057],{},[14,104512,104513],{},"重置仿真:",[106,104515,104517],{"className":30379,"code":104516,"language":30381,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\n",[112,104518,104519],{"__ignoreMap":22},[115,104520,104521],{"class":117,"line":118},[115,104522,104516],{"class":125},[14,104524,104525,104526,82529,104528,104530],{},"如果手动修改了 ",[112,104527,101060],{},[112,104529,101063],{},"，通常应调用:",[106,104532,104534],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},"mujoco.mj_forward(model, data)\n",[112,104535,104536],{"__ignoreMap":22},[115,104537,104538],{"class":117,"line":118},[115,104539,104533],{"class":125},[14,104541,104542],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[86,104544,104546,338,104548,338,104550,104552],{"id":104545},"qposqvelctrl-是什么",[112,104547,104020],{},[112,104549,104350],{},[112,104551,104353],{}," 是什么",[14,104554,104555],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[263,104557,104558,104570],{},[266,104559,104560],{},[269,104561,104562,104565,104567],{},[272,104563,104564],{"align":23737},"字段",[272,104566,100690],{"align":23737},[272,104568,104569],{"align":23737},"谁来修改",[310,104571,104572,104584,104596],{},[269,104573,104574,104578,104581],{},[315,104575,104576],{"align":23737},[112,104577,101060],{},[315,104579,104580],{"align":23737},"广义位置，例如小车位置、关节角、自由物体位置姿态",[315,104582,104583],{"align":23737},"MuJoCo 更新，也可以手动设置初始状态",[269,104585,104586,104590,104593],{},[315,104587,104588],{"align":23737},[112,104589,101063],{},[315,104591,104592],{"align":23737},"广义速度，例如小车速度、关节角速度",[315,104594,104595],{"align":23737},"MuJoCo 更新，也可以手动清零",[269,104597,104598,104602,104605],{},[315,104599,104600],{"align":23737},[112,104601,101066],{},[315,104603,104604],{"align":23737},"actuator 的控制输入",[315,104606,104607],{"align":23737},"主要由你的控制代码写入",[14,104609,9026,104610,101008,104612,104614],{},[112,104611,104020],{},[112,104613,104350],{}," 不一定同维。自由刚体就是典型例子：",[106,104616,104619],{"className":104617,"code":104618,"language":5188,"meta":22},[5186],"freejoint: qpos 7 维，qvel 6 维\n",[112,104620,104618],{"__ignoreMap":22},[86,104622,104624,101008,104626,104628],{"id":104623},"mj_step-和-mj_forward-的区别",[112,104625,101205],{},[112,104627,104240],{}," 的区别",[263,104630,104631,104644],{},[266,104632,104633],{},[269,104634,104635,104638,104641],{},[272,104636,104637],{"align":23737},"函数",[272,104639,104640],{"align":23737},"是否推进时间",[272,104642,104643],{"align":23737},"什么时候用",[310,104645,104646,104659],{},[269,104647,104648,104653,104656],{},[315,104649,104650],{"align":23737},[112,104651,104652],{},"mj_step(model, data)",[315,104654,104655],{"align":23737},"是",[315,104657,104658],{"align":23737},"正常仿真循环，每调用一次前进一步",[269,104660,104661,104666,104669],{},[315,104662,104663],{"align":23737},[112,104664,104665],{},"mj_forward(model, data)",[315,104667,104668],{"align":23737},"否",[315,104670,104671,104672,338,104674,104676],{"align":23737},"手动改了 ",[112,104673,104020],{},[112,104675,104350],{}," 后，刷新派生量",[14,104678,104679],{},"例如你写：",[106,104681,104683],{"className":30379,"code":104682,"language":30381,"meta":22,"style":22},"data.qpos[2] = 2.0\n",[112,104684,104685],{"__ignoreMap":22},[115,104686,104687,104690,104692,104694,104696],{"class":117,"line":118},[115,104688,104689],{"class":125},"data.qpos[",[115,104691,203],{"class":174},[115,104693,4443],{"class":125},[115,104695,171],{"class":121},[115,104697,104698],{"class":174}," 2.0\n",[14,104700,104701],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[106,104703,104704],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},[112,104705,104706],{"__ignoreMap":22},[115,104707,104708],{"class":117,"line":118},[115,104709,104533],{"class":125},[86,104711,104713],{"id":104712},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104715,104716,104719,104720,104722],{},[112,104717,104718],{},"mujoco.mj_resetData(model, data)"," 会把 ",[112,104721,33402],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[106,104724,104726],{"className":30379,"code":104725,"language":30381,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[112,104727,104728,104732,104742,104752],{"__ignoreMap":22},[115,104729,104730],{"class":117,"line":118},[115,104731,104516],{"class":125},[115,104733,104734,104737,104739],{"class":117,"line":37},[115,104735,104736],{"class":125},"data.qpos[:] ",[115,104738,171],{"class":121},[115,104740,104741],{"class":125}," random_qpos\n",[115,104743,104744,104747,104749],{"class":117,"line":1180},[115,104745,104746],{"class":125},"data.qvel[:] ",[115,104748,171],{"class":121},[115,104750,104751],{"class":174}," 0.0\n",[115,104753,104754],{"class":117,"line":1195},[115,104755,104533],{"class":125},[57,104757,101243],{"id":101242},[106,104759,104761],{"className":30379,"code":104760,"language":30381,"meta":22,"style":22},"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",[112,104762,104763,104769,104779,104783,104787,104795,104800,104804,104808,104812,104817,104821,104826,104831,104836,104840,104844,104848,104852,104856,104860,104879,104886,104898,104909,104925,104941,104945,104949,104961,104973,104981,104985,104996,105000,105016,105020,105024,105033,105037,105042,105051,105055,105068,105073,105082,105086,105090,105102],{"__ignoreMap":22},[115,104764,104765,104767],{"class":117,"line":118},[115,104766,30393],{"class":121},[115,104768,101291],{"class":125},[115,104770,104771,104773,104775,104777],{"class":117,"line":37},[115,104772,30393],{"class":121},[115,104774,31381],{"class":125},[115,104776,31384],{"class":121},[115,104778,31387],{"class":125},[115,104780,104781],{"class":117,"line":1180},[115,104782,2400],{"emptyLinePlaceholder":42},[115,104784,104785],{"class":117,"line":1195},[115,104786,2400],{"emptyLinePlaceholder":42},[115,104788,104789,104791,104793],{"class":117,"line":1201},[115,104790,101304],{"class":174},[115,104792,13565],{"class":121},[115,104794,101309],{"class":230},[115,104796,104797],{"class":117,"line":1215},[115,104798,104799],{"class":230},"\u003Cmujoco model=\"state_api\">\n",[115,104801,104802],{"class":117,"line":1221},[115,104803,101319],{"class":230},[115,104805,104806],{"class":117,"line":1312},[115,104807,2400],{"emptyLinePlaceholder":42},[115,104809,104810],{"class":117,"line":1318},[115,104811,101328],{"class":230},[115,104813,104814],{"class":117,"line":1330},[115,104815,104816],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[115,104818,104819],{"class":117,"line":1612},[115,104820,2400],{"emptyLinePlaceholder":42},[115,104822,104823],{"class":117,"line":1617},[115,104824,104825],{"class":230},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[115,104827,104828],{"class":117,"line":1623},[115,104829,104830],{"class":230},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[115,104832,104833],{"class":117,"line":1628},[115,104834,104835],{"class":230},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[115,104837,104838],{"class":117,"line":1642},[115,104839,101357],{"class":230},[115,104841,104842],{"class":117,"line":1647},[115,104843,101362],{"class":230},[115,104845,104846],{"class":117,"line":1653},[115,104847,101367],{"class":230},[115,104849,104850],{"class":117,"line":1674},[115,104851,95688],{"class":230},[115,104853,104854],{"class":117,"line":1679},[115,104855,2400],{"emptyLinePlaceholder":42},[115,104857,104858],{"class":117,"line":1693},[115,104859,2400],{"emptyLinePlaceholder":42},[115,104861,104862,104864,104867,104870,104872,104875,104877],{"class":117,"line":1698},[115,104863,31948],{"class":121},[115,104865,104866],{"class":1963}," print_state",[115,104868,104869],{"class":125},"(prefix: ",[115,104871,1300],{"class":174},[115,104873,104874],{"class":125},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[115,104876,95676],{"class":174},[115,104878,3739],{"class":125},[115,104880,104881,104883],{"class":117,"line":1727},[115,104882,31300],{"class":174},[115,104884,104885],{"class":125},"(prefix)\n",[115,104887,104888,104890,104892,104895],{"class":117,"line":1732},[115,104889,31300],{"class":174},[115,104891,126],{"class":125},[115,104893,104894],{"class":230},"\"  timestep:\"",[115,104896,104897],{"class":125},", model.opt.timestep)\n",[115,104899,104900,104902,104904,104907],{"class":117,"line":1749},[115,104901,31300],{"class":174},[115,104903,126],{"class":125},[115,104905,104906],{"class":230},"\"  time:\"",[115,104908,101468],{"class":125},[115,104910,104911,104913,104915,104918,104921,104923],{"class":117,"line":1754},[115,104912,31300],{"class":174},[115,104914,126],{"class":125},[115,104916,104917],{"class":230},"\"  qpos:\"",[115,104919,104920],{"class":125},", np.round(data.qpos.copy(), ",[115,104922,418],{"class":174},[115,104924,30498],{"class":125},[115,104926,104927,104929,104931,104934,104937,104939],{"class":117,"line":1759},[115,104928,31300],{"class":174},[115,104930,126],{"class":125},[115,104932,104933],{"class":230},"\"  qvel:\"",[115,104935,104936],{"class":125},", np.round(data.qvel.copy(), ",[115,104938,418],{"class":174},[115,104940,30498],{"class":125},[115,104942,104943],{"class":117,"line":1764},[115,104944,2400],{"emptyLinePlaceholder":42},[115,104946,104947],{"class":117,"line":1778},[115,104948,2400],{"emptyLinePlaceholder":42},[115,104950,104951,104953,104955,104957,104959],{"class":117,"line":1783},[115,104952,31948],{"class":121},[115,104954,1973],{"class":1963},[115,104956,101388],{"class":125},[115,104958,95676],{"class":174},[115,104960,3739],{"class":125},[115,104962,104963,104965,104967,104969,104971],{"class":117,"line":2577},[115,104964,101397],{"class":125},[115,104966,171],{"class":121},[115,104968,101402],{"class":125},[115,104970,101304],{"class":174},[115,104972,132],{"class":125},[115,104974,104975,104977,104979],{"class":117,"line":2591},[115,104976,101411],{"class":125},[115,104978,171],{"class":121},[115,104980,101416],{"class":125},[115,104982,104983],{"class":117,"line":2599},[115,104984,2400],{"emptyLinePlaceholder":42},[115,104986,104987,104990,104993],{"class":117,"line":2604},[115,104988,104989],{"class":125},"    print_state(",[115,104991,104992],{"class":230},"\"initial\"",[115,104994,104995],{"class":125},", model, data)\n",[115,104997,104998],{"class":117,"line":2610},[115,104999,2400],{"emptyLinePlaceholder":42},[115,105001,105002,105004,105006,105008,105010,105012,105014],{"class":117,"line":2616},[115,105003,3201],{"class":121},[115,105005,101491],{"class":125},[115,105007,26044],{"class":121},[115,105009,32444],{"class":174},[115,105011,126],{"class":125},[115,105013,781],{"class":174},[115,105015,30787],{"class":125},[115,105017,105018],{"class":117,"line":2621},[115,105019,101506],{"class":125},[115,105021,105022],{"class":117,"line":7949},[115,105023,2400],{"emptyLinePlaceholder":42},[115,105025,105026,105028,105031],{"class":117,"line":7973},[115,105027,104989],{"class":125},[115,105029,105030],{"class":230},"\"after 50 steps\"",[115,105032,104995],{"class":125},[115,105034,105035],{"class":117,"line":7978},[115,105036,2400],{"emptyLinePlaceholder":42},[115,105038,105039],{"class":117,"line":7984},[115,105040,105041],{"class":125},"    mujoco.mj_resetData(model, data)\n",[115,105043,105044,105046,105049],{"class":117,"line":8011},[115,105045,104989],{"class":125},[115,105047,105048],{"class":230},"\"after reset\"",[115,105050,104995],{"class":125},[115,105052,105053],{"class":117,"line":8016},[115,105054,2400],{"emptyLinePlaceholder":42},[115,105056,105057,105060,105062,105064,105066],{"class":117,"line":8022},[115,105058,105059],{"class":125},"    data.qpos[",[115,105061,203],{"class":174},[115,105063,4443],{"class":125},[115,105065,171],{"class":121},[115,105067,104698],{"class":174},[115,105069,105070],{"class":117,"line":8034},[115,105071,105072],{"class":125},"    mujoco.mj_forward(model, data)\n",[115,105074,105075,105077,105080],{"class":117,"line":8046},[115,105076,104989],{"class":125},[115,105078,105079],{"class":230},"\"after manual qpos edit\"",[115,105081,104995],{"class":125},[115,105083,105084],{"class":117,"line":8058},[115,105085,2400],{"emptyLinePlaceholder":42},[115,105087,105088],{"class":117,"line":9717},[115,105089,2400],{"emptyLinePlaceholder":42},[115,105091,105092,105094,105096,105098,105100],{"class":117,"line":9742},[115,105093,1531],{"class":121},[115,105095,31221],{"class":174},[115,105097,101549],{"class":121},[115,105099,101552],{"class":230},[115,105101,3739],{"class":125},[115,105103,105104],{"class":117,"line":9765},[115,105105,101559],{"class":125},[14,105107,103560],{},[106,105109,105111],{"className":23823,"code":105110,"language":23825,"meta":22,"style":22},"touch ch3_python_state.py\n",[112,105112,105113],{"__ignoreMap":22},[115,105114,105115,105117],{"class":117,"line":118},[115,105116,101273],{"class":1963},[115,105118,105119],{"class":230}," ch3_python_state.py\n",[14,105121,102291],{},[106,105123,105125],{"className":23823,"code":105124,"language":23825,"meta":22,"style":22},"python ch3_python_state.py\n",[112,105126,105127],{"__ignoreMap":22},[115,105128,105129,105131],{"class":117,"line":118},[115,105130,30381],{"class":1963},[115,105132,105119],{"class":230},[86,105134,101562],{"id":101562},[14,105136,105137],{},"打印状态的函数：",[106,105139,105141],{"className":30379,"code":105140,"language":30381,"meta":22,"style":22},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[112,105142,105143],{"__ignoreMap":22},[115,105144,105145,105147,105149,105151,105153,105155,105157],{"class":117,"line":118},[115,105146,31948],{"class":121},[115,105148,104866],{"class":1963},[115,105150,104869],{"class":125},[115,105152,1300],{"class":174},[115,105154,104874],{"class":125},[115,105156,95676],{"class":174},[115,105158,3739],{"class":125},[14,105160,105161,105162,105164],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[112,105163,33402],{}," 里发生了什么。",[14,105166,105167],{},"推进 50 步：",[106,105169,105171],{"className":30379,"code":105170,"language":30381,"meta":22,"style":22},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[112,105172,105173,105189],{"__ignoreMap":22},[115,105174,105175,105177,105179,105181,105183,105185,105187],{"class":117,"line":118},[115,105176,3025],{"class":121},[115,105178,101491],{"class":125},[115,105180,26044],{"class":121},[115,105182,32444],{"class":174},[115,105184,126],{"class":125},[115,105186,781],{"class":174},[115,105188,30787],{"class":125},[115,105190,105191],{"class":117,"line":37},[115,105192,101689],{"class":125},[14,105194,105195,105196,105199,105200,105202],{},"由于 ",[112,105197,105198],{},"timestep=0.01","，所以 50 步后时间约为 ",[112,105201,35330],{}," 秒。",[14,105204,105205],{},"重置：",[106,105207,105208],{"className":30379,"code":104516,"language":30381,"meta":22,"style":22},[112,105209,105210],{"__ignoreMap":22},[115,105211,105212],{"class":117,"line":118},[115,105213,104516],{"class":125},[14,105215,105216],{},"这会把时间、位置、速度恢复到初始状态。",[14,105218,105219],{},"手动改高度：",[106,105221,105223],{"className":30379,"code":105222,"language":30381,"meta":22,"style":22},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[112,105224,105225,105237],{"__ignoreMap":22},[115,105226,105227,105229,105231,105233,105235],{"class":117,"line":118},[115,105228,104689],{"class":125},[115,105230,203],{"class":174},[115,105232,4443],{"class":125},[115,105234,171],{"class":121},[115,105236,104698],{"class":174},[115,105238,105239],{"class":117,"line":37},[115,105240,104533],{"class":125},[14,105242,105243,105244,105247,105248,105251],{},"这个例子里 ",[112,105245,105246],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[112,105249,105250],{},"2.0"," 表示把小球放到更高的位置。",[86,105253,101698],{"id":101698},[106,105255,105256],{"className":30379,"code":105140,"language":30381,"meta":22,"style":22},[112,105257,105258],{"__ignoreMap":22},[115,105259,105260,105262,105264,105266,105268,105270,105272],{"class":117,"line":118},[115,105261,31948],{"class":121},[115,105263,104866],{"class":1963},[115,105265,104869],{"class":125},[115,105267,1300],{"class":174},[115,105269,104874],{"class":125},[115,105271,95676],{"class":174},[115,105273,3739],{"class":125},[14,105275,105276],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[69,105278,105279,105288,105293],{},[72,105280,105281,105284,105285,105287],{},[112,105282,105283],{},"prefix","：一段文字，比如 ",[112,105286,104992],{},"，用来说明现在打印的是哪个阶段。",[72,105289,105290,105292],{},[112,105291,102075],{},"：MuJoCo 模型。",[72,105294,105295,105297],{},[112,105296,33402],{},"：MuJoCo 当前状态。",[14,105299,105300,338,105303,105306],{},[112,105301,105302],{},"prefix: str",[112,105304,105305],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[106,105308,105310],{"className":30379,"code":105309,"language":30381,"meta":22,"style":22},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[112,105311,105312],{"__ignoreMap":22},[115,105313,105314,105316,105318,105320,105322,105324],{"class":117,"line":118},[115,105315,30416],{"class":174},[115,105317,126],{"class":125},[115,105319,104917],{"class":230},[115,105321,104920],{"class":125},[115,105323,418],{"class":174},[115,105325,30498],{"class":125},[14,105327,105328,105331],{},[112,105329,105330],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[106,105333,105335],{"className":30379,"code":105334,"language":30381,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[112,105336,105337,105349],{"__ignoreMap":22},[115,105338,105339,105341,105343,105345,105347],{"class":117,"line":118},[115,105340,101624],{"class":125},[115,105342,171],{"class":121},[115,105344,101402],{"class":125},[115,105346,101304],{"class":174},[115,105348,132],{"class":125},[115,105350,105351,105353,105355],{"class":117,"line":37},[115,105352,101648],{"class":125},[115,105354,171],{"class":121},[115,105356,101416],{"class":125},[14,105358,105359],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[106,105361,105363],{"className":30379,"code":105362,"language":30381,"meta":22,"style":22},"print_state(\"initial\", model, data)\n",[112,105364,105365],{"__ignoreMap":22},[115,105366,105367,105370,105372],{"class":117,"line":118},[115,105368,105369],{"class":125},"print_state(",[115,105371,104992],{"class":230},[115,105373,104995],{"class":125},[14,105375,105376,105377,105380],{},"调用刚才定义的 ",[112,105378,105379],{},"print_state"," 函数，打印初始状态。",[106,105382,105383],{"className":30379,"code":105170,"language":30381,"meta":22,"style":22},[112,105384,105385,105401],{"__ignoreMap":22},[115,105386,105387,105389,105391,105393,105395,105397,105399],{"class":117,"line":118},[115,105388,3025],{"class":121},[115,105390,101491],{"class":125},[115,105392,26044],{"class":121},[115,105394,32444],{"class":174},[115,105396,126],{"class":125},[115,105398,781],{"class":174},[115,105400,30787],{"class":125},[115,105402,105403],{"class":117,"line":37},[115,105404,101689],{"class":125},[14,105406,105407],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[106,105409,105410],{"className":30379,"code":104516,"language":30381,"meta":22,"style":22},[112,105411,105412],{"__ignoreMap":22},[115,105413,105414],{"class":117,"line":118},[115,105415,104516],{"class":125},[14,105417,105418,105419,105421,105422,105424],{},"重置 ",[112,105420,33402],{},"。注意它不会重新创建 ",[112,105423,102075],{},"，因为模型结构没有变，只是状态回到初始值。",[106,105426,105427],{"className":30379,"code":104682,"language":30381,"meta":22,"style":22},[112,105428,105429],{"__ignoreMap":22},[115,105430,105431,105433,105435,105437,105439],{"class":117,"line":118},[115,105432,104689],{"class":125},[115,105434,203],{"class":174},[115,105436,4443],{"class":125},[115,105438,171],{"class":121},[115,105440,104698],{"class":174},[14,105442,105443,105444,338,105447,338,105450,105452],{},"这行是“手动改状态”。在 freejoint 中，",[112,105445,105446],{},"qpos[0]",[112,105448,105449],{},"qpos[1]",[112,105451,105246],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[106,105454,105455],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},[112,105456,105457],{"__ignoreMap":22},[115,105458,105459],{"class":117,"line":118},[115,105460,104533],{"class":125},[14,105462,105463,105464,105466,105467,105469],{},"手动改完 ",[112,105465,104020],{}," 后，调用 ",[112,105468,104240],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[57,105471,102306],{"id":102305},[14,105473,105474],{},"你会看到:",[69,105476,105477,105482,105487,105490],{},[72,105478,105479,105480],{},"初始时间为 ",[112,105481,317],{},[72,105483,105484,105485],{},"50 步后时间约为 ",[112,105486,35330],{},[72,105488,105489],{},"reset 后状态恢复",[72,105491,105492,105493,105496,105497],{},"手动修改 ",[112,105494,105495],{},"data.qpos[2]"," 后，小球高度变为 ",[112,105498,105250],{},[14,105500,105501,105503],{},[112,105502,105246],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105505,105506],{},"输出里可以重点看三件事：",[69,105508,105509,105517,105522],{},[72,105510,105511,105513,105514,105516],{},[112,105512,2387],{}," 是否随着 ",[112,105515,101205],{}," 增加。",[72,105518,105519,105521],{},[112,105520,104020],{}," 的 z 坐标是否因为下落而变化。",[72,105523,105524,105526,105527,28386],{},[112,105525,104342],{}," 后时间是否回到 ",[112,105528,317],{},[57,105530,102338],{"id":102337},[69,105532,105533,105539,105545,105551,105554,105563],{},[72,105534,105535,105536,28386],{},"修改 timestep 为 ",[112,105537,105538],{},"0.005",[72,105540,105541,105542,28386],{},"重新运行，检查 50 步后时间是否约为 ",[112,105543,105544],{},"0.25",[72,105546,105547,105548,28386],{},"修改重力为 ",[112,105549,105550],{},"0 0 -1.0",[72,105552,105553],{},"观察小球下降速度是否变慢。",[72,105555,102401,105556,102404,105559,105562],{},[112,105557,105558],{},"data.qpos[2] = 2.0",[112,105560,105561],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[72,105564,105565,105566,105569],{},"注释掉 ",[112,105567,105568],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[57,105571,102443],{"id":102442},[86,105573,105575,105576,105578],{"id":105574},"修改-dataqpos-后位置没有更新","修改 ",[112,105577,101060],{}," 后位置没有更新",[14,105580,102452],{},[106,105582,105583],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},[112,105584,105585],{"__ignoreMap":22},[115,105586,105587],{"class":117,"line":118},[115,105588,104533],{"class":125},[86,105590,105591],{"id":105591},"数组维度看不懂",[14,105593,105594],{},"打印模型维度:",[106,105596,105598],{"className":30379,"code":105597,"language":30381,"meta":22,"style":22},"print(model.nq, model.nv, model.nu)\n",[112,105599,105600],{"__ignoreMap":22},[115,105601,105602,105604],{"class":117,"line":118},[115,105603,30416],{"class":174},[115,105605,105606],{"class":125},"(model.nq, model.nv, model.nu)\n",[263,105608,105609,105617],{},[266,105610,105611],{},[269,105612,105613,105615],{},[272,105614,104564],{"align":23737},[272,105616,100690],{"align":23737},[310,105618,105619,105629,105639],{},[269,105620,105621,105626],{},[315,105622,105623],{"align":23737},[112,105624,105625],{},"nq",[315,105627,105628],{"align":23737},"位置变量数量",[269,105630,105631,105636],{},[315,105632,105633],{"align":23737},[112,105634,105635],{},"nv",[315,105637,105638],{"align":23737},"速度变量数量",[269,105640,105641,105645],{},[315,105642,105643],{"align":23737},[112,105644,102152],{},[315,105646,105647],{"align":23737},"控制输入数量",[86,105649,105651,105652,105654],{"id":105650},"误以为-qpos-一定等于关节数","误以为 ",[112,105653,104020],{}," 一定等于关节数",[14,105656,105657,105658,82520,105660,105662,105663,105665],{},"不是。例如 ",[112,105659,101610],{},[112,105661,104020],{}," 是 7 维，但 ",[112,105664,104350],{}," 是 6 维。",[86,105667,105669,105670,105672],{"id":105668},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[112,105671,104020],{}," 的第几位",[14,105674,105675],{},"初学时可以先打印：",[106,105677,105679],{"className":30379,"code":105678,"language":30381,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[112,105680,105681,105691,105701,105713],{"__ignoreMap":22},[115,105682,105683,105685,105687,105689],{"class":117,"line":118},[115,105684,30416],{"class":174},[115,105686,126],{"class":125},[115,105688,101429],{"class":230},[115,105690,101432],{"class":125},[115,105692,105693,105695,105697,105699],{"class":117,"line":37},[115,105694,30416],{"class":174},[115,105696,126],{"class":125},[115,105698,101441],{"class":230},[115,105700,101444],{"class":125},[115,105702,105703,105705,105707,105710],{"class":117,"line":1180},[115,105704,30416],{"class":174},[115,105706,126],{"class":125},[115,105708,105709],{"class":230},"\"qpos:\"",[115,105711,105712],{"class":125},", data.qpos)\n",[115,105714,105715,105717,105719,105722],{"class":117,"line":1195},[115,105716,30416],{"class":174},[115,105718,126],{"class":125},[115,105720,105721],{"class":230},"\"qvel:\"",[115,105723,105724],{"class":125},", data.qvel)\n",[14,105726,105727],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[86,105729,105730],{"id":105730},"仿真结果每次都一样",[14,105732,105733,105734,105736],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[112,105735,104020],{},"、目标点或控制输入。",[57,105738,102597],{"id":102596},[14,105740,105741,105742,24619],{},"Python 控制 MuJoCo 的核心就是读写 ",[112,105743,33402],{},[69,105745,105746,105754,105759,105764],{},[72,105747,105748,105749,101008,105751,105753],{},"用 ",[112,105750,101060],{},[112,105752,101063],{}," 读取状态。",[72,105755,105748,105756,105758],{},[112,105757,101066],{}," 写入控制。",[72,105760,105748,105761,105763],{},[112,105762,101205],{}," 推进时间。",[72,105765,105766,105767,105769],{},"手动改状态后用 ",[112,105768,104240],{}," 刷新派生量。",[14,105771,105772],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5127,105774,105775],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":22,"searchDepth":37,"depth":37,"links":105777},[105778,105779,105780,105787,105791,105792,105793,105803],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":105781},[105782,105784,105786],{"id":104545,"depth":1180,"text":105783},"qpos、qvel、ctrl 是什么",{"id":104623,"depth":1180,"text":105785},"mj_step 和 mj_forward 的区别",{"id":104712,"depth":1180,"text":104713},{"id":101242,"depth":37,"text":101243,"children":105788},[105789,105790],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":105794},[105795,105797,105798,105800,105802],{"id":105574,"depth":1180,"text":105796},"修改 data.qpos 后位置没有更新",{"id":105591,"depth":1180,"text":105591},{"id":105650,"depth":1180,"text":105799},"误以为 qpos 一定等于关节数",{"id":105668,"depth":1180,"text":105801},"不知道某个元素在 qpos 的第几位",{"id":105730,"depth":1180,"text":105730},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104308,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105810,"title":105811,"body":105812,"description":22,"extension":40,"meta":107502,"navigation":42,"path":107503,"seo":107504,"stem":107505,"__hash__":107506},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105813,"toc":107478},[105814,105817,105819,105822,105824,105849,105852,105871,105874,105876,105878,105902,105904,105918,105920,105961,105963,105987,105989,105992,106026,106028,106041,106044,106112,106121,106125,106128,106162,106168,106171,106175,106214,106217,106237,106241,106284,106286,106315,106318,106324,106327,106329,106723,106725,106737,106739,106750,106752,106755,106784,106792,106795,106830,106833,106835,106843,106846,106848,106859,106869,106889,106892,106928,106940,106988,107007,107049,107062,107090,107095,107116,107126,107144,107147,107181,107184,107204,107207,107226,107232,107234,107237,107243,107249,107259,107262,107268,107277,107279,107325,107327,107333,107339,107342,107345,107365,107368,107374,107380,107382,107405,107408,107411,107420,107423,107461,107463,107466,107472,107475],[10,105815,105811],{"id":105816},"_4关节actuator-与力控制",[57,105818,100637],{"id":100636},[14,105820,105821],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105823,104321],{},[69,105825,105826,105832,105837,105841,105846],{},[72,105827,105828,105831],{},[112,105829,105830],{},"hinge"," 关节",[72,105833,105834],{},[112,105835,105836],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[72,105838,105839],{},[112,105840,101066],{},[72,105842,105843],{},[112,105844,105845],{},"ctrlrange",[72,105847,105848],{},"读取关节角和角速度",[14,105850,105851],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[106,105853,105855],{"className":30379,"code":105854,"language":30381,"meta":22,"style":22},"data.ctrl[0] = ...\n",[112,105856,105857],{"__ignoreMap":22},[115,105858,105859,105862,105864,105866,105868],{"class":117,"line":118},[115,105860,105861],{"class":125},"data.ctrl[",[115,105863,317],{"class":174},[115,105865,4443],{"class":125},[115,105867,171],{"class":121},[115,105869,105870],{"class":174}," ...\n",[14,105872,105873],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[57,105875,100760],{"id":100759},[14,105877,100763],{},[106,105879,105880],{"className":23823,"code":104378,"language":23825,"meta":22,"style":22},[112,105881,105882],{"__ignoreMap":22},[115,105883,105884,105886,105888,105890,105892,105894,105896,105898,105900],{"class":117,"line":118},[115,105885,24577],{"class":1963},[115,105887,26316],{"class":230},[115,105889,23835],{"class":230},[115,105891,26401],{"class":174},[115,105893,104393],{"class":230},[115,105895,100788],{"class":230},[115,105897,102491],{"class":230},[115,105899,100804],{"class":230},[115,105901,104402],{"class":230},[14,105903,102809],{},[106,105905,105906],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},[112,105907,105908],{"__ignoreMap":22},[115,105909,105910,105912,105914,105916],{"class":117,"line":118},[115,105911,23832],{"class":1963},[115,105913,23835],{"class":230},[115,105915,100920],{"class":230},[115,105917,100923],{"class":230},[14,105919,102826],{},[106,105921,105923],{"className":23823,"code":105922,"language":23825,"meta":22,"style":22},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[112,105924,105925,105942,105951],{"__ignoreMap":22},[115,105926,105927,105929,105931,105933,105936,105938,105940],{"class":117,"line":118},[115,105928,30331],{"class":1963},[115,105930,29177],{"class":230},[115,105932,25116],{"class":174},[115,105934,105935],{"class":230}," mujoco-control",[115,105937,100965],{"class":230},[115,105939,100968],{"class":174},[115,105941,100971],{"class":174},[115,105943,105944,105946,105948],{"class":117,"line":37},[115,105945,30331],{"class":1963},[115,105947,100978],{"class":230},[115,105949,105950],{"class":230}," mujoco-control\n",[115,105952,105953,105955,105957,105959],{"class":117,"line":1180},[115,105954,23832],{"class":1963},[115,105956,23835],{"class":230},[115,105958,100920],{"class":230},[115,105960,100923],{"class":230},[14,105962,100994],{},[69,105964,105965,105971,105978,105984],{},[72,105966,105967,105970],{},[112,105968,105969],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[72,105972,105973,105975,105976,28386],{},[112,105974,101066],{}," 长度等于 ",[112,105977,102148],{},[72,105979,82212,105980,105983],{},[112,105981,105982],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[72,105985,105986],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[57,105988,101035],{"id":101034},[14,105990,105991],{},"关节决定 body 如何运动:",[106,105993,105995],{"className":53057,"code":105994,"language":53059,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[112,105996,105997],{"__ignoreMap":22},[115,105998,105999,106001,106003,106005,106007,106010,106012,106014,106016,106019,106021,106024],{"class":117,"line":118},[115,106000,1035],{"class":125},[115,106002,102946],{"class":51290},[115,106004,14921],{"class":1963},[115,106006,171],{"class":125},[115,106008,106009],{"class":230},"\"hinge\"",[115,106011,53814],{"class":1963},[115,106013,171],{"class":125},[115,106015,106009],{"class":230},[115,106017,106018],{"class":1963}," axis",[115,106020,171],{"class":125},[115,106022,106023],{"class":230},"\"0 1 0\"",[115,106025,101134],{"class":125},[14,106027,103042],{},[69,106029,106030,106035,106038],{},[72,106031,106032,106033],{},"名字是 ",[112,106034,105830],{},[72,106036,106037],{},"类型是旋转关节",[72,106039,106040],{},"绕 y 轴旋转",[14,106042,106043],{},"actuator 决定如何施加控制:",[106,106045,106047],{"className":53057,"code":106046,"language":53059,"meta":22,"style":22},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[112,106048,106049,106058,106104],{"__ignoreMap":22},[115,106050,106051,106053,106056],{"class":117,"line":118},[115,106052,1035],{"class":125},[115,106054,106055],{"class":51290},"actuator",[115,106057,51297],{"class":125},[115,106059,106060,106062,106065,106067,106069,106072,106075,106077,106079,106082,106084,106086,106089,106091,106094,106097,106099,106102],{"class":117,"line":37},[115,106061,52134],{"class":125},[115,106063,106064],{"class":51290},"motor",[115,106066,14921],{"class":1963},[115,106068,171],{"class":125},[115,106070,106071],{"class":230},"\"hinge_motor\"",[115,106073,106074],{"class":1963}," joint",[115,106076,171],{"class":125},[115,106078,106009],{"class":230},[115,106080,106081],{"class":1963}," gear",[115,106083,171],{"class":125},[115,106085,3678],{"class":230},[115,106087,106088],{"class":1963}," ctrlrange",[115,106090,171],{"class":125},[115,106092,106093],{"class":230},"\"-2 2\"",[115,106095,106096],{"class":1963}," ctrllimited",[115,106098,171],{"class":125},[115,106100,106101],{"class":230},"\"true\"",[115,106103,101134],{"class":125},[115,106105,106106,106108,106110],{"class":117,"line":1180},[115,106107,51775],{"class":125},[115,106109,106055],{"class":51290},[115,106111,51297],{"class":125},[14,106113,106114,106117,106118,28386],{},[112,106115,106116],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[112,106119,106120],{},"[-2, 2]",[86,106122,106124],{"id":106123},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106126,106127],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[263,106129,106130,106140],{},[266,106131,106132],{},[269,106133,106134,106136,106138],{},[272,106135,25754],{"align":23737},[272,106137,102686],{"align":23737},[272,106139,100724],{"align":23737},[310,106141,106142,106152],{},[269,106143,106144,106146,106149],{},[315,106145,102946],{"align":23737},[315,106147,106148],{"align":23737},"定义能怎么动",[315,106150,106151],{"align":23737},"门轴允许门旋转",[269,106153,106154,106156,106159],{},[315,106155,106055],{"align":23737},[315,106157,106158],{"align":23737},"定义怎么施力或控制",[315,106160,106161],{"align":23737},"人推门、马达带动门",[14,106163,106164,106165,106167],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[112,106166,101066],{}," 主动控制它。",[14,106169,106170],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[86,106172,106174],{"id":106173},"hinge-joint","hinge joint",[106,106176,106178],{"className":53057,"code":106177,"language":53059,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[112,106179,106180],{"__ignoreMap":22},[115,106181,106182,106184,106186,106188,106190,106192,106194,106196,106198,106200,106202,106204,106207,106209,106212],{"class":117,"line":118},[115,106183,1035],{"class":125},[115,106185,102946],{"class":51290},[115,106187,14921],{"class":1963},[115,106189,171],{"class":125},[115,106191,106009],{"class":230},[115,106193,53814],{"class":1963},[115,106195,171],{"class":125},[115,106197,106009],{"class":230},[115,106199,106018],{"class":1963},[115,106201,171],{"class":125},[115,106203,106023],{"class":230},[115,106205,106206],{"class":1963}," damping",[115,106208,171],{"class":125},[115,106210,106211],{"class":230},"\"0.1\"",[115,106213,101134],{"class":125},[14,106215,106216],{},"含义：",[69,106218,106219,106225,106231],{},[72,106220,106221,106224],{},[112,106222,106223],{},"type=\"hinge\"","：只能绕一个轴旋转。",[72,106226,106227,106230],{},[112,106228,106229],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[72,106232,106233,106236],{},[112,106234,106235],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[86,106238,106240],{"id":106239},"motor-actuator","motor actuator",[106,106242,106244],{"className":53057,"code":106243,"language":53059,"meta":22,"style":22},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[112,106245,106246],{"__ignoreMap":22},[115,106247,106248,106250,106252,106254,106256,106258,106260,106262,106264,106266,106268,106270,106272,106274,106276,106278,106280,106282],{"class":117,"line":118},[115,106249,1035],{"class":125},[115,106251,106064],{"class":51290},[115,106253,14921],{"class":1963},[115,106255,171],{"class":125},[115,106257,106071],{"class":230},[115,106259,106074],{"class":1963},[115,106261,171],{"class":125},[115,106263,106009],{"class":230},[115,106265,106081],{"class":1963},[115,106267,171],{"class":125},[115,106269,3678],{"class":230},[115,106271,106088],{"class":1963},[115,106273,171],{"class":125},[115,106275,106093],{"class":230},[115,106277,106096],{"class":1963},[115,106279,171],{"class":125},[115,106281,106101],{"class":230},[115,106283,101134],{"class":125},[14,106285,106216],{},[69,106287,106288,106297,106303,106309],{},[72,106289,106290,106293,106294,106296],{},[112,106291,106292],{},"joint=\"hinge\"","：这个电机作用在名为 ",[112,106295,105830],{}," 的关节上。",[72,106298,106299,106302],{},[112,106300,106301],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[72,106304,106305,106308],{},[112,106306,106307],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[72,106310,106311,106314],{},[112,106312,106313],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106316,106317],{},"简单理解：",[106,106319,106322],{"className":106320,"code":106321,"language":5188,"meta":22},[5186],"实际施加效果 ≈ data.ctrl[0] * gear\n",[112,106323,106321],{"__ignoreMap":22},[14,106325,106326],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[57,106328,101243],{"id":101242},[106,106330,106332],{"className":30379,"code":106331,"language":30381,"meta":22,"style":22},"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",[112,106333,106334,106341,106345,106351,106361,106365,106369,106377,106382,106387,106391,106395,106400,106405,106409,106414,106419,106424,106429,106433,106437,106441,106446,106451,106456,106460,106464,106468,106472,106484,106496,106504,106508,106518,106528,106538,106542,106555,106568,106572,106589,106603,106638,106642,106646,106657,106672,106687,106699,106703,106707,106719],{"__ignoreMap":22},[115,106335,106336,106338],{"class":117,"line":118},[115,106337,30393],{"class":121},[115,106339,106340],{"class":125}," math\n",[115,106342,106343],{"class":117,"line":37},[115,106344,2400],{"emptyLinePlaceholder":42},[115,106346,106347,106349],{"class":117,"line":1180},[115,106348,30393],{"class":121},[115,106350,101291],{"class":125},[115,106352,106353,106355,106357,106359],{"class":117,"line":1195},[115,106354,30393],{"class":121},[115,106356,31381],{"class":125},[115,106358,31384],{"class":121},[115,106360,31387],{"class":125},[115,106362,106363],{"class":117,"line":1201},[115,106364,2400],{"emptyLinePlaceholder":42},[115,106366,106367],{"class":117,"line":1215},[115,106368,2400],{"emptyLinePlaceholder":42},[115,106370,106371,106373,106375],{"class":117,"line":1221},[115,106372,101304],{"class":174},[115,106374,13565],{"class":121},[115,106376,101309],{"class":230},[115,106378,106379],{"class":117,"line":1312},[115,106380,106381],{"class":230},"\u003Cmujoco model=\"one_link_motor\">\n",[115,106383,106384],{"class":117,"line":1318},[115,106385,106386],{"class":230},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[115,106388,106389],{"class":117,"line":1330},[115,106390,2400],{"emptyLinePlaceholder":42},[115,106392,106393],{"class":117,"line":1612},[115,106394,101328],{"class":230},[115,106396,106397],{"class":117,"line":1617},[115,106398,106399],{"class":230},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[115,106401,106402],{"class":117,"line":1623},[115,106403,106404],{"class":230},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[115,106406,106407],{"class":117,"line":1628},[115,106408,2400],{"emptyLinePlaceholder":42},[115,106410,106411],{"class":117,"line":1642},[115,106412,106413],{"class":230},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[115,106415,106416],{"class":117,"line":1647},[115,106417,106418],{"class":230},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[115,106420,106421],{"class":117,"line":1653},[115,106422,106423],{"class":230},"        \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",[115,106425,106426],{"class":117,"line":1674},[115,106427,106428],{"class":230},"      \u003C\u002Fbody>\n",[115,106430,106431],{"class":117,"line":1679},[115,106432,101357],{"class":230},[115,106434,106435],{"class":117,"line":1693},[115,106436,101362],{"class":230},[115,106438,106439],{"class":117,"line":1698},[115,106440,2400],{"emptyLinePlaceholder":42},[115,106442,106443],{"class":117,"line":1727},[115,106444,106445],{"class":230},"  \u003Cactuator>\n",[115,106447,106448],{"class":117,"line":1732},[115,106449,106450],{"class":230},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[115,106452,106453],{"class":117,"line":1749},[115,106454,106455],{"class":230},"  \u003C\u002Factuator>\n",[115,106457,106458],{"class":117,"line":1754},[115,106459,101367],{"class":230},[115,106461,106462],{"class":117,"line":1759},[115,106463,95688],{"class":230},[115,106465,106466],{"class":117,"line":1764},[115,106467,2400],{"emptyLinePlaceholder":42},[115,106469,106470],{"class":117,"line":1778},[115,106471,2400],{"emptyLinePlaceholder":42},[115,106473,106474,106476,106478,106480,106482],{"class":117,"line":1783},[115,106475,31948],{"class":121},[115,106477,1973],{"class":1963},[115,106479,101388],{"class":125},[115,106481,95676],{"class":174},[115,106483,3739],{"class":125},[115,106485,106486,106488,106490,106492,106494],{"class":117,"line":2577},[115,106487,101397],{"class":125},[115,106489,171],{"class":121},[115,106491,101402],{"class":125},[115,106493,101304],{"class":174},[115,106495,132],{"class":125},[115,106497,106498,106500,106502],{"class":117,"line":2591},[115,106499,101411],{"class":125},[115,106501,171],{"class":121},[115,106503,101416],{"class":125},[115,106505,106506],{"class":117,"line":2599},[115,106507,2400],{"emptyLinePlaceholder":42},[115,106509,106510,106512,106514,106516],{"class":117,"line":2604},[115,106511,31300],{"class":174},[115,106513,126],{"class":125},[115,106515,101429],{"class":230},[115,106517,101432],{"class":125},[115,106519,106520,106522,106524,106526],{"class":117,"line":2610},[115,106521,31300],{"class":174},[115,106523,126],{"class":125},[115,106525,101441],{"class":230},[115,106527,101444],{"class":125},[115,106529,106530,106532,106534,106536],{"class":117,"line":2616},[115,106531,31300],{"class":174},[115,106533,126],{"class":125},[115,106535,101453],{"class":230},[115,106537,101456],{"class":125},[115,106539,106540],{"class":117,"line":2621},[115,106541,2400],{"emptyLinePlaceholder":42},[115,106543,106544,106546,106549,106551,106553],{"class":117,"line":7949},[115,106545,3101],{"class":121},[115,106547,106548],{"class":125}," model.nu ",[115,106550,20949],{"class":121},[115,106552,25119],{"class":174},[115,106554,3739],{"class":125},[115,106556,106557,106559,106561,106563,106566],{"class":117,"line":7973},[115,106558,103422],{"class":121},[115,106560,103425],{"class":174},[115,106562,126],{"class":125},[115,106564,106565],{"class":230},"\"expected exactly one actuator\"",[115,106567,132],{"class":125},[115,106569,106570],{"class":117,"line":7978},[115,106571,2400],{"emptyLinePlaceholder":42},[115,106573,106574,106576,106578,106580,106582,106584,106587],{"class":117,"line":7984},[115,106575,3201],{"class":121},[115,106577,31617],{"class":125},[115,106579,26044],{"class":121},[115,106581,32444],{"class":174},[115,106583,126],{"class":125},[115,106585,106586],{"class":174},"2000",[115,106588,30787],{"class":125},[115,106590,106591,106594,106596,106598,106600],{"class":117,"line":8011},[115,106592,106593],{"class":125},"        t ",[115,106595,171],{"class":121},[115,106597,31617],{"class":125},[115,106599,580],{"class":121},[115,106601,106602],{"class":125}," model.opt.timestep\n",[115,106604,106605,106608,106610,106612,106614,106617,106619,106622,106624,106626,106629,106631,106633,106635],{"class":117,"line":8016},[115,106606,106607],{"class":125},"        data.ctrl[",[115,106609,317],{"class":174},[115,106611,4443],{"class":125},[115,106613,171],{"class":121},[115,106615,106616],{"class":174}," 1.5",[115,106618,6519],{"class":121},[115,106620,106621],{"class":125}," math.sin(",[115,106623,105250],{"class":174},[115,106625,6519],{"class":121},[115,106627,106628],{"class":125}," math.pi ",[115,106630,580],{"class":121},[115,106632,61857],{"class":174},[115,106634,6519],{"class":121},[115,106636,106637],{"class":125}," t)\n",[115,106639,106640],{"class":117,"line":8022},[115,106641,101506],{"class":125},[115,106643,106644],{"class":117,"line":8034},[115,106645,2400],{"emptyLinePlaceholder":42},[115,106647,106648,106650,106652,106655],{"class":117,"line":8046},[115,106649,31300],{"class":174},[115,106651,126],{"class":125},[115,106653,106654],{"class":230},"\"time:\"",[115,106656,101468],{"class":125},[115,106658,106659,106661,106663,106666,106668,106670],{"class":117,"line":8058},[115,106660,31300],{"class":174},[115,106662,126],{"class":125},[115,106664,106665],{"class":230},"\"joint qpos:\"",[115,106667,104920],{"class":125},[115,106669,418],{"class":174},[115,106671,30498],{"class":125},[115,106673,106674,106676,106678,106681,106683,106685],{"class":117,"line":9717},[115,106675,31300],{"class":174},[115,106677,126],{"class":125},[115,106679,106680],{"class":230},"\"joint qvel:\"",[115,106682,104936],{"class":125},[115,106684,418],{"class":174},[115,106686,30498],{"class":125},[115,106688,106689,106691,106693,106696],{"class":117,"line":9742},[115,106690,31300],{"class":174},[115,106692,126],{"class":125},[115,106694,106695],{"class":230},"\"last ctrl:\"",[115,106697,106698],{"class":125},", data.ctrl.copy())\n",[115,106700,106701],{"class":117,"line":9765},[115,106702,2400],{"emptyLinePlaceholder":42},[115,106704,106705],{"class":117,"line":9789},[115,106706,2400],{"emptyLinePlaceholder":42},[115,106708,106709,106711,106713,106715,106717],{"class":117,"line":9794},[115,106710,1531],{"class":121},[115,106712,31221],{"class":174},[115,106714,101549],{"class":121},[115,106716,101552],{"class":230},[115,106718,3739],{"class":125},[115,106720,106721],{"class":117,"line":9799},[115,106722,101559],{"class":125},[14,106724,103560],{},[106,106726,106728],{"className":23823,"code":106727,"language":23825,"meta":22,"style":22},"touch ch4_joint_motor.py\n",[112,106729,106730],{"__ignoreMap":22},[115,106731,106732,106734],{"class":117,"line":118},[115,106733,101273],{"class":1963},[115,106735,106736],{"class":230}," ch4_joint_motor.py\n",[14,106738,102291],{},[106,106740,106742],{"className":23823,"code":106741,"language":23825,"meta":22,"style":22},"python ch4_joint_motor.py\n",[112,106743,106744],{"__ignoreMap":22},[115,106745,106746,106748],{"class":117,"line":118},[115,106747,30381],{"class":1963},[115,106749,106736],{"class":230},[86,106751,101562],{"id":101562},[14,106753,106754],{},"检查 actuator 数量：",[106,106756,106758],{"className":30379,"code":106757,"language":30381,"meta":22,"style":22},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[112,106759,106760,106772],{"__ignoreMap":22},[115,106761,106762,106764,106766,106768,106770],{"class":117,"line":118},[115,106763,1531],{"class":121},[115,106765,106548],{"class":125},[115,106767,20949],{"class":121},[115,106769,25119],{"class":174},[115,106771,3739],{"class":125},[115,106773,106774,106776,106778,106780,106782],{"class":117,"line":37},[115,106775,103885],{"class":121},[115,106777,103425],{"class":174},[115,106779,126],{"class":125},[115,106781,106565],{"class":230},[115,106783,132],{"class":125},[14,106785,106786,106788,106789,106791],{},[112,106787,102148],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[112,106790,101066],{}," 长度应该是 1。",[14,106793,106794],{},"产生正弦控制信号：",[106,106796,106798],{"className":30379,"code":106797,"language":30381,"meta":22,"style":22},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[112,106799,106800],{"__ignoreMap":22},[115,106801,106802,106804,106806,106808,106810,106812,106814,106816,106818,106820,106822,106824,106826,106828],{"class":117,"line":118},[115,106803,105861],{"class":125},[115,106805,317],{"class":174},[115,106807,4443],{"class":125},[115,106809,171],{"class":121},[115,106811,106616],{"class":174},[115,106813,6519],{"class":121},[115,106815,106621],{"class":125},[115,106817,105250],{"class":174},[115,106819,6519],{"class":121},[115,106821,106628],{"class":125},[115,106823,580],{"class":121},[115,106825,61857],{"class":174},[115,106827,6519],{"class":121},[115,106829,106637],{"class":125},[14,106831,106832],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106834,101663],{},[106,106836,106837],{"className":30379,"code":104495,"language":30381,"meta":22,"style":22},[112,106838,106839],{"__ignoreMap":22},[115,106840,106841],{"class":117,"line":118},[115,106842,104495],{"class":125},[14,106844,106845],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[86,106847,101698],{"id":101698},[106,106849,106851],{"className":30379,"code":106850,"language":30381,"meta":22,"style":22},"import math\n",[112,106852,106853],{"__ignoreMap":22},[115,106854,106855,106857],{"class":117,"line":118},[115,106856,30393],{"class":121},[115,106858,106340],{"class":125},[14,106860,106861,106862,101008,106865,106868],{},"导入 Python 标准库里的数学模块。后面要用 ",[112,106863,106864],{},"math.sin",[112,106866,106867],{},"math.pi"," 生成周期变化的控制信号。",[106,106870,106871],{"className":30379,"code":103676,"language":30381,"meta":22,"style":22},[112,106872,106873,106879],{"__ignoreMap":22},[115,106874,106875,106877],{"class":117,"line":118},[115,106876,30393],{"class":121},[115,106878,101291],{"class":125},[115,106880,106881,106883,106885,106887],{"class":117,"line":37},[115,106882,30393],{"class":121},[115,106884,31381],{"class":125},[115,106886,31384],{"class":121},[115,106888,31387],{"class":125},[14,106890,106891],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[106,106893,106894],{"className":53057,"code":106177,"language":53059,"meta":22,"style":22},[112,106895,106896],{"__ignoreMap":22},[115,106897,106898,106900,106902,106904,106906,106908,106910,106912,106914,106916,106918,106920,106922,106924,106926],{"class":117,"line":118},[115,106899,1035],{"class":125},[115,106901,102946],{"class":51290},[115,106903,14921],{"class":1963},[115,106905,171],{"class":125},[115,106907,106009],{"class":230},[115,106909,53814],{"class":1963},[115,106911,171],{"class":125},[115,106913,106009],{"class":230},[115,106915,106018],{"class":1963},[115,106917,171],{"class":125},[115,106919,106023],{"class":230},[115,106921,106206],{"class":1963},[115,106923,171],{"class":125},[115,106925,106211],{"class":230},[115,106927,101134],{"class":125},[14,106929,106930,106931,106933,106934,106936,106937,106939],{},"这行定义关节。",[112,106932,105830],{}," 表示旋转关节。",[112,106935,106229],{}," 表示绕 y 轴旋转。",[112,106938,106235],{}," 表示有一点阻尼，运动不会完全无损耗。",[106,106941,106943],{"className":53057,"code":106942,"language":53059,"meta":22,"style":22},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[112,106944,106945],{"__ignoreMap":22},[115,106946,106947,106949,106951,106953,106955,106958,106960,106962,106965,106968,106970,106973,106975,106977,106979,106981,106983,106986],{"class":117,"line":118},[115,106948,1035],{"class":125},[115,106950,101110],{"class":51290},[115,106952,14921],{"class":1963},[115,106954,171],{"class":125},[115,106956,106957],{"class":230},"\"link_geom\"",[115,106959,53814],{"class":1963},[115,106961,171],{"class":125},[115,106963,106964],{"class":230},"\"capsule\"",[115,106966,106967],{"class":1963}," fromto",[115,106969,171],{"class":125},[115,106971,106972],{"class":230},"\"0 0 0 0 0 0.5\"",[115,106974,101126],{"class":1963},[115,106976,171],{"class":125},[115,106978,103768],{"class":230},[115,106980,101991],{"class":1963},[115,106982,171],{"class":125},[115,106984,106985],{"class":230},"\"0.5\"",[115,106987,101134],{"class":125},[14,106989,106990,106991,106993,106994,106996,106997,107000,107001,28386,107004,107006],{},"这行定义摆杆的形状。",[112,106992,103155],{}," 是胶囊体，适合表示杆子。",[112,106995,103166],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[112,106998,106999],{},"(0,0,0)"," 延伸到 ",[112,107002,107003],{},"(0,0,0.5)",[112,107005,103160],{}," 是半径。",[106,107008,107009],{"className":53057,"code":106243,"language":53059,"meta":22,"style":22},[112,107010,107011],{"__ignoreMap":22},[115,107012,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035,107037,107039,107041,107043,107045,107047],{"class":117,"line":118},[115,107014,1035],{"class":125},[115,107016,106064],{"class":51290},[115,107018,14921],{"class":1963},[115,107020,171],{"class":125},[115,107022,106071],{"class":230},[115,107024,106074],{"class":1963},[115,107026,171],{"class":125},[115,107028,106009],{"class":230},[115,107030,106081],{"class":1963},[115,107032,171],{"class":125},[115,107034,3678],{"class":230},[115,107036,106088],{"class":1963},[115,107038,171],{"class":125},[115,107040,106093],{"class":230},[115,107042,106096],{"class":1963},[115,107044,171],{"class":125},[115,107046,106101],{"class":230},[115,107048,101134],{"class":125},[14,107050,107051,107052,107054,107055,107058,107059,107061],{},"这行定义电机。它作用在 ",[112,107053,105830],{}," 关节上。",[112,107056,107057],{},"gear"," 可以理解成放大倍数。",[112,107060,105845],{}," 限制控制输入范围。",[106,107063,107064],{"className":30379,"code":106757,"language":30381,"meta":22,"style":22},[112,107065,107066,107078],{"__ignoreMap":22},[115,107067,107068,107070,107072,107074,107076],{"class":117,"line":118},[115,107069,1531],{"class":121},[115,107071,106548],{"class":125},[115,107073,20949],{"class":121},[115,107075,25119],{"class":174},[115,107077,3739],{"class":125},[115,107079,107080,107082,107084,107086,107088],{"class":117,"line":37},[115,107081,103885],{"class":121},[115,107083,103425],{"class":174},[115,107085,126],{"class":125},[115,107087,106565],{"class":230},[115,107089,132],{"class":125},[14,107091,107092,107094],{},[112,107093,102148],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[106,107096,107098],{"className":30379,"code":107097,"language":30381,"meta":22,"style":22},"for step in range(2000):\n",[112,107099,107100],{"__ignoreMap":22},[115,107101,107102,107104,107106,107108,107110,107112,107114],{"class":117,"line":118},[115,107103,3025],{"class":121},[115,107105,31617],{"class":125},[115,107107,26044],{"class":121},[115,107109,32444],{"class":174},[115,107111,126],{"class":125},[115,107113,106586],{"class":174},[115,107115,30787],{"class":125},[14,107117,107118,107119,107121,107122,107125],{},"循环 2000 步。这里没有用 ",[112,107120,1117],{},"，而是用 ",[112,107123,107124],{},"step","，因为后面要用当前步数计算时间。",[106,107127,107129],{"className":30379,"code":107128,"language":30381,"meta":22,"style":22},"t = step * model.opt.timestep\n",[112,107130,107131],{"__ignoreMap":22},[115,107132,107133,107136,107138,107140,107142],{"class":117,"line":118},[115,107134,107135],{"class":125},"t ",[115,107137,171],{"class":121},[115,107139,31617],{"class":125},[115,107141,580],{"class":121},[115,107143,106602],{"class":125},[14,107145,107146],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[106,107148,107149],{"className":30379,"code":106797,"language":30381,"meta":22,"style":22},[112,107150,107151],{"__ignoreMap":22},[115,107152,107153,107155,107157,107159,107161,107163,107165,107167,107169,107171,107173,107175,107177,107179],{"class":117,"line":118},[115,107154,105861],{"class":125},[115,107156,317],{"class":174},[115,107158,4443],{"class":125},[115,107160,171],{"class":121},[115,107162,106616],{"class":174},[115,107164,6519],{"class":121},[115,107166,106621],{"class":125},[115,107168,105250],{"class":174},[115,107170,6519],{"class":121},[115,107172,106628],{"class":125},[115,107174,580],{"class":121},[115,107176,61857],{"class":174},[115,107178,6519],{"class":121},[115,107180,106637],{"class":125},[14,107182,107183],{},"这行给电机输入一个正弦波。拆开看：",[69,107185,107186,107192,107198],{},[72,107187,107188,107191],{},[112,107189,107190],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[72,107193,107194,107197],{},[112,107195,107196],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[72,107199,107200,107203],{},[112,107201,107202],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107205,107206],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[106,107208,107210],{"className":30379,"code":107209,"language":30381,"meta":22,"style":22},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[112,107211,107212],{"__ignoreMap":22},[115,107213,107214,107216,107218,107220,107222,107224],{"class":117,"line":118},[115,107215,30416],{"class":174},[115,107217,126],{"class":125},[115,107219,106665],{"class":230},[115,107221,104920],{"class":125},[115,107223,418],{"class":174},[115,107225,30498],{"class":125},[14,107227,107228,107229,107231],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[112,107230,101060],{}," 只有一个数。",[57,107233,102306],{"id":102305},[14,107235,107236],{},"输出类似:",[106,107238,107241],{"className":107239,"code":107240,"language":5188,"meta":22},[5186],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[112,107242,107240],{"__ignoreMap":22},[14,107244,107245,107246,107248],{},"这里 ",[112,107247,106116],{}," 是电机输入。",[14,107250,107251,107254,107255,107258],{},[112,107252,107253],{},"joint qpos"," 是关节角度，单位通常是弧度。",[112,107256,107257],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107260,107261],{},"角度单位提示：",[106,107263,107266],{"className":107264,"code":107265,"language":5188,"meta":22},[5186],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[112,107267,107265],{"__ignoreMap":22},[14,107269,107270,107271,107273,107274,107276],{},"如果你看到 ",[112,107272,104020],{}," 是 ",[112,107275,35330],{},"，大约就是 28.6 度。",[57,107278,102338],{"id":102337},[69,107280,107281,107288,107291,107298,107301,107309,107317],{},[72,107282,102401,107283,102404,107285,28386],{},[112,107284,106301],{},[112,107286,107287],{},"gear=\"5\"",[72,107289,107290],{},"重新运行，观察关节运动是否更剧烈。",[72,107292,102401,107293,102404,107295,28386],{},[112,107294,105845],{},[112,107296,107297],{},"-0.2 0.2",[72,107299,107300],{},"重新运行，观察控制能力是否变弱。",[72,107302,107303,107304,107306,107307,28386],{},"去掉 actuator，确认 ",[112,107305,102148],{}," 变成 ",[112,107308,317],{},[72,107310,102401,107311,102404,107313,107316],{},[112,107312,106235],{},[112,107314,107315],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[72,107318,102401,107319,102404,107321,107324],{},[112,107320,106229],{},[112,107322,107323],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[57,107326,102443],{"id":102442},[86,107328,107330],{"id":107329},"indexerror-index-0-is-out-of-bounds",[112,107331,107332],{},"IndexError: index 0 is out of bounds",[14,107334,107335,107336,107338],{},"原因是 ",[112,107337,105982],{},"，没有 actuator。",[86,107340,107341],{"id":107341},"关节几乎不动",[14,107343,107344],{},"可能原因:",[69,107346,107347,107352,107356,107362],{},[72,107348,107349,107351],{},[112,107350,107057],{}," 太小",[72,107353,107354,107351],{},[112,107355,105845],{},[72,107357,107358,107361],{},[112,107359,107360],{},"damping"," 太大",[72,107363,107364],{},"重力方向导致运动不明显",[86,107366,107367],{"id":107367},"模型编译失败",[14,107369,107370,107371,107373],{},"检查 actuator 引用的 ",[112,107372,106292],{}," 是否存在，joint 名称是否拼写一致。",[86,107375,107377,107379],{"id":107376},"datactrl0-写了但没有效果",[112,107378,106116],{}," 写了但没有效果",[14,107381,102565],{},[69,107383,107384,107389,107392,107397,107402],{},[72,107385,107386,107388],{},[112,107387,102148],{}," 是否大于 0。",[72,107390,107391],{},"motor 是否引用了正确 joint。",[72,107393,107394,107396],{},[112,107395,107057],{}," 是否太小。",[72,107398,107399,107401],{},[112,107400,105845],{}," 是否把输入限制得太小。",[72,107403,107404],{},"body 是否真的有可动 joint。",[86,107406,107407],{"id":107407},"控制输入超过范围会怎样",[14,107409,107410],{},"如果设置了：",[106,107412,107414],{"className":53057,"code":107413,"language":53059,"meta":22,"style":22},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[112,107415,107416],{"__ignoreMap":22},[115,107417,107418],{"class":117,"line":118},[115,107419,107413],{"class":125},[14,107421,107422],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[106,107424,107426],{"className":30379,"code":107425,"language":30381,"meta":22,"style":22},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[112,107427,107428,107448],{"__ignoreMap":22},[115,107429,107430,107433,107435,107438,107440,107442,107444,107446],{"class":117,"line":118},[115,107431,107432],{"class":125},"action ",[115,107434,171],{"class":121},[115,107436,107437],{"class":125}," np.clip(action, ",[115,107439,657],{"class":121},[115,107441,105250],{"class":174},[115,107443,12436],{"class":125},[115,107445,105250],{"class":174},[115,107447,132],{"class":125},[115,107449,107450,107452,107454,107456,107458],{"class":117,"line":37},[115,107451,105861],{"class":125},[115,107453,317],{"class":174},[115,107455,4443],{"class":125},[115,107457,171],{"class":121},[115,107459,107460],{"class":125}," action\n",[57,107462,102597],{"id":102596},[14,107464,107465],{},"这一章建立了控制任务的基本形式：",[106,107467,107470],{"className":107468,"code":107469,"language":5188,"meta":22},[5186],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[112,107471,107469],{"__ignoreMap":22},[14,107473,107474],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5127,107476,107477],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":22,"searchDepth":37,"depth":37,"links":107479},[107480,107481,107482,107487,107491,107492,107493,107501],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":107483},[107484,107485,107486],{"id":106123,"depth":1180,"text":106124},{"id":106173,"depth":1180,"text":106174},{"id":106239,"depth":1180,"text":106240},{"id":101242,"depth":37,"text":101243,"children":107488},[107489,107490],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":107494},[107495,107496,107497,107498,107500],{"id":107329,"depth":1180,"text":107332},{"id":107341,"depth":1180,"text":107341},{"id":107367,"depth":1180,"text":107367},{"id":107376,"depth":1180,"text":107499},"data.ctrl[0] 写了但没有效果",{"id":107407,"depth":1180,"text":107407},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105811,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107508,"title":107509,"body":107510,"description":22,"extension":40,"meta":109419,"navigation":42,"path":109420,"seo":109421,"stem":109422,"__hash__":109423},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107511,"toc":109395},[107512,107515,107517,107520,107528,107531,107548,107551,107576,107579,107625,107627,107629,107684,107686,107705,107707,107750,107753,107770,107773,107789,107799,107806,107808,107811,107814,107848,107851,107899,107903,107906,107920,107929,107933,107936,107961,107964,107968,107981,107984,107990,107993,108008,108010,108013,108273,108275,108287,108290,108602,108604,108616,108618,108621,108636,108641,108644,108666,108669,108672,108706,108709,108713,108724,108727,108744,108747,108761,108768,108788,108795,108809,108812,108824,108839,108859,108862,108884,108887,108891,108906,108917,108932,108935,108965,108981,109010,109018,109042,109045,109063,109073,109085,109092,109101,109107,109116,109119,109121,109130,109133,109148,109150,109153,109164,109167,109178,109181,109199,109201,109218,109221,109249,109251,109255,109258,109288,109294,109297,109301,109309,109312,109314,109335,109338,109341,109357,109360,109376,109378,109381,109392],[10,107513,107509],{"id":107514},"_5viewer-可视化与-renderer-离屏渲染",[57,107516,100637],{"id":100636},[14,107518,107519],{},"本章掌握两类可视化方式:",[69,107521,107522,107525],{},[72,107523,107524],{},"交互式 viewer: 适合人工观察仿真",[72,107526,107527],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107529,107530],{},"使用官方接口:",[106,107532,107534],{"className":30379,"code":107533,"language":30381,"meta":22,"style":22},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[112,107535,107536,107543],{"__ignoreMap":22},[115,107537,107538,107540],{"class":117,"line":118},[115,107539,30393],{"class":121},[115,107541,107542],{"class":125}," mujoco.viewer\n",[115,107544,107545],{"class":117,"line":37},[115,107546,107547],{"class":125},"mujoco.viewer.launch_passive(model, data)\n",[14,107549,107550],{},"以及:",[106,107552,107554],{"className":30379,"code":107553,"language":30381,"meta":22,"style":22},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[112,107555,107556,107566],{"__ignoreMap":22},[115,107557,107558,107561,107563],{"class":117,"line":118},[115,107559,107560],{"class":125},"renderer ",[115,107562,171],{"class":121},[115,107564,107565],{"class":125}," mujoco.Renderer(model)\n",[115,107567,107568,107571,107573],{"class":117,"line":37},[115,107569,107570],{"class":125},"image ",[115,107572,171],{"class":121},[115,107574,107575],{"class":125}," renderer.render()\n",[14,107577,107578],{},"新手建议先理解二者区别：",[263,107580,107581,107597],{},[266,107582,107583],{},[269,107584,107585,107588,107591,107594],{},[272,107586,107587],{"align":23737},"工具",[272,107589,107590],{"align":23737},"用途",[272,107592,107593],{"align":23737},"是否打开窗口",[272,107595,107596],{"align":23737},"常见场景",[310,107598,107599,107612],{},[269,107600,107601,107604,107607,107609],{},[315,107602,107603],{"align":23737},"Viewer",[315,107605,107606],{"align":23737},"人眼实时观察仿真",[315,107608,104655],{"align":23737},[315,107610,107611],{"align":23737},"调试模型、看控制效果",[269,107613,107614,107617,107620,107622],{},[315,107615,107616],{"align":23737},"Renderer",[315,107618,107619],{"align":23737},"生成图像数组",[315,107621,104668],{"align":23737},[315,107623,107624],{"align":23737},"保存图片、训练视觉策略、服务器批量采集",[57,107626,100760],{"id":100759},[14,107628,100763],{},[106,107630,107632],{"className":23823,"code":107631,"language":23825,"meta":22,"style":22},"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",[112,107633,107634,107646,107656,107664,107672],{"__ignoreMap":22},[115,107635,107636,107638,107640,107642,107644],{"class":117,"line":118},[115,107637,24577],{"class":1963},[115,107639,26316],{"class":230},[115,107641,23835],{"class":230},[115,107643,26401],{"class":174},[115,107645,24679],{"class":174},[115,107647,107648,107650,107652,107654],{"class":117,"line":37},[115,107649,100798],{"class":230},[115,107651,100801],{"class":230},[115,107653,100804],{"class":230},[115,107655,24679],{"class":174},[115,107657,107658,107660,107662],{"class":117,"line":1180},[115,107659,100811],{"class":230},[115,107661,100814],{"class":230},[115,107663,24679],{"class":174},[115,107665,107666,107668,107670],{"class":117,"line":1195},[115,107667,100821],{"class":230},[115,107669,100824],{"class":230},[115,107671,24679],{"class":174},[115,107673,107674,107676,107678,107680,107682],{"class":117,"line":1201},[115,107675,100831],{"class":230},[115,107677,100834],{"class":230},[115,107679,100837],{"class":230},[115,107681,100840],{"class":230},[115,107683,102506],{"class":230},[14,107685,102809],{},[106,107687,107689],{"className":23823,"code":107688,"language":23825,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy pillow\n",[112,107690,107691],{"__ignoreMap":22},[115,107692,107693,107695,107697,107699,107702],{"class":117,"line":118},[115,107694,23832],{"class":1963},[115,107696,23835],{"class":230},[115,107698,100920],{"class":230},[115,107700,107701],{"class":230}," numpy",[115,107703,107704],{"class":230}," pillow\n",[14,107706,102826],{},[106,107708,107710],{"className":23823,"code":107709,"language":23825,"meta":22,"style":22},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[112,107711,107712,107729,107738],{"__ignoreMap":22},[115,107713,107714,107716,107718,107720,107723,107725,107727],{"class":117,"line":118},[115,107715,30331],{"class":1963},[115,107717,29177],{"class":230},[115,107719,25116],{"class":174},[115,107721,107722],{"class":230}," mujoco-render",[115,107724,100965],{"class":230},[115,107726,100968],{"class":174},[115,107728,100971],{"class":174},[115,107730,107731,107733,107735],{"class":117,"line":37},[115,107732,30331],{"class":1963},[115,107734,100978],{"class":230},[115,107736,107737],{"class":230}," mujoco-render\n",[115,107739,107740,107742,107744,107746,107748],{"class":117,"line":1180},[115,107741,23832],{"class":1963},[115,107743,23835],{"class":230},[115,107745,100920],{"class":230},[115,107747,107701],{"class":230},[115,107749,107704],{"class":230},[14,107751,107752],{},"离屏渲染后端:",[106,107754,107756],{"className":23823,"code":107755,"language":23825,"meta":22,"style":22},"export MUJOCO_GL=egl\n",[112,107757,107758],{"__ignoreMap":22},[115,107759,107760,107762,107765,107767],{"class":117,"line":118},[115,107761,25043],{"class":121},[115,107763,107764],{"class":125}," MUJOCO_GL",[115,107766,171],{"class":121},[115,107768,107769],{"class":125},"egl\n",[14,107771,107772],{},"或:",[106,107774,107776],{"className":23823,"code":107775,"language":23825,"meta":22,"style":22},"export MUJOCO_GL=osmesa\n",[112,107777,107778],{"__ignoreMap":22},[115,107779,107780,107782,107784,107786],{"class":117,"line":118},[115,107781,25043],{"class":121},[115,107783,107764],{"class":125},[115,107785,171],{"class":121},[115,107787,107788],{"class":125},"osmesa\n",[14,107790,107791,107792,107795,107796,28386],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[112,107793,107794],{},"egl"," 失败，再尝试 ",[112,107797,107798],{},"osmesa",[14,107800,107801,107802,107805],{},"如果你在本机桌面环境运行，通常先不要设置 ",[112,107803,107804],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[57,107807,101035],{"id":101034},[14,107809,107810],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107812,107813],{},"典型 viewer 流程:",[106,107815,107817],{"className":30379,"code":107816,"language":30381,"meta":22,"style":22},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[112,107818,107819,107832,107839,107843],{"__ignoreMap":22},[115,107820,107821,107824,107827,107829],{"class":117,"line":118},[115,107822,107823],{"class":121},"with",[115,107825,107826],{"class":125}," mujoco.viewer.launch_passive(model, data) ",[115,107828,31384],{"class":121},[115,107830,107831],{"class":125}," viewer:\n",[115,107833,107834,107836],{"class":117,"line":37},[115,107835,2251],{"class":121},[115,107837,107838],{"class":125}," viewer.is_running():\n",[115,107840,107841],{"class":117,"line":1180},[115,107842,101506],{"class":125},[115,107844,107845],{"class":117,"line":1195},[115,107846,107847],{"class":125},"        viewer.sync()\n",[14,107849,107850],{},"典型 renderer 流程:",[106,107852,107854],{"className":30379,"code":107853,"language":30381,"meta":22,"style":22},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[112,107855,107856,107882,107886,107891],{"__ignoreMap":22},[115,107857,107858,107860,107862,107865,107867,107869,107871,107873,107875,107877,107880],{"class":117,"line":118},[115,107859,107560],{"class":125},[115,107861,171],{"class":121},[115,107863,107864],{"class":125}," mujoco.Renderer(model, ",[115,107866,24982],{"class":5217},[115,107868,171],{"class":121},[115,107870,42343],{"class":174},[115,107872,12436],{"class":125},[115,107874,24978],{"class":5217},[115,107876,171],{"class":121},[115,107878,107879],{"class":174},"640",[115,107881,132],{"class":125},[115,107883,107884],{"class":117,"line":37},[115,107885,104495],{"class":125},[115,107887,107888],{"class":117,"line":1180},[115,107889,107890],{"class":125},"renderer.update_scene(data)\n",[115,107892,107893,107895,107897],{"class":117,"line":1195},[115,107894,107570],{"class":125},[115,107896,171],{"class":121},[115,107898,107575],{"class":125},[86,107900,107902],{"id":107901},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107904,107905],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[106,107907,107909],{"className":30379,"code":107908,"language":30381,"meta":22,"style":22},"mujoco.mj_step(model, data)\nviewer.sync()\n",[112,107910,107911,107915],{"__ignoreMap":22},[115,107912,107913],{"class":117,"line":118},[115,107914,104495],{"class":125},[115,107916,107917],{"class":117,"line":37},[115,107918,107919],{"class":125},"viewer.sync()\n",[14,107921,107922,107924,107925,107928],{},[112,107923,101205],{}," 负责算物理，",[112,107926,107927],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[86,107930,107932],{"id":107931},"为什么要-sleep","为什么要 sleep",[14,107934,107935],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[106,107937,107939],{"className":30379,"code":107938,"language":30381,"meta":22,"style":22},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[112,107940,107941],{"__ignoreMap":22},[115,107942,107943,107946,107948,107951,107953,107956,107958],{"class":117,"line":118},[115,107944,107945],{"class":125},"sleep_time ",[115,107947,171],{"class":121},[115,107949,107950],{"class":125}," model.opt.timestep ",[115,107952,657],{"class":121},[115,107954,107955],{"class":125}," (time.time() ",[115,107957,657],{"class":121},[115,107959,107960],{"class":125}," step_start)\n",[14,107962,107963],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[86,107965,107967],{"id":107966},"renderer-输出是什么","renderer 输出是什么",[106,107969,107971],{"className":30379,"code":107970,"language":30381,"meta":22,"style":22},"image = renderer.render()\n",[112,107972,107973],{"__ignoreMap":22},[115,107974,107975,107977,107979],{"class":117,"line":118},[115,107976,107570],{"class":125},[115,107978,171],{"class":121},[115,107980,107575],{"class":125},[14,107982,107983],{},"得到的是 NumPy 数组，形状通常是：",[106,107985,107988],{"className":107986,"code":107987,"language":5188,"meta":22},[5186],"(height, width, 3)\n",[112,107989,107987],{"__ignoreMap":22},[14,107991,107992],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[106,107994,107996],{"className":30379,"code":107995,"language":30381,"meta":22,"style":22},"Image.fromarray(image).save(\"render_output.png\")\n",[112,107997,107998],{"__ignoreMap":22},[115,107999,108000,108003,108006],{"class":117,"line":118},[115,108001,108002],{"class":125},"Image.fromarray(image).save(",[115,108004,108005],{"class":230},"\"render_output.png\"",[115,108007,132],{"class":125},[57,108009,101243],{"id":101242},[14,108011,108012],{},"交互式 Viewer:",[106,108014,108016],{"className":30379,"code":108015,"language":30381,"meta":22,"style":22},"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",[112,108017,108018,108024,108028,108034,108040,108044,108048,108056,108061,108065,108069,108073,108078,108083,108087,108091,108095,108100,108104,108108,108112,108116,108120,108124,108136,108148,108156,108160,108170,108190,108200,108205,108210,108214,108231,108244,108249,108253,108257,108269],{"__ignoreMap":22},[115,108019,108020,108022],{"class":117,"line":118},[115,108021,30393],{"class":121},[115,108023,31830],{"class":125},[115,108025,108026],{"class":117,"line":37},[115,108027,2400],{"emptyLinePlaceholder":42},[115,108029,108030,108032],{"class":117,"line":1180},[115,108031,30393],{"class":121},[115,108033,101291],{"class":125},[115,108035,108036,108038],{"class":117,"line":1195},[115,108037,30393],{"class":121},[115,108039,107542],{"class":125},[115,108041,108042],{"class":117,"line":1201},[115,108043,2400],{"emptyLinePlaceholder":42},[115,108045,108046],{"class":117,"line":1215},[115,108047,2400],{"emptyLinePlaceholder":42},[115,108049,108050,108052,108054],{"class":117,"line":1221},[115,108051,101304],{"class":174},[115,108053,13565],{"class":121},[115,108055,101309],{"class":230},[115,108057,108058],{"class":117,"line":1312},[115,108059,108060],{"class":230},"\u003Cmujoco model=\"viewer_demo\">\n",[115,108062,108063],{"class":117,"line":1318},[115,108064,101319],{"class":230},[115,108066,108067],{"class":117,"line":1330},[115,108068,2400],{"emptyLinePlaceholder":42},[115,108070,108071],{"class":117,"line":1612},[115,108072,101328],{"class":230},[115,108074,108075],{"class":117,"line":1617},[115,108076,108077],{"class":230},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[115,108079,108080],{"class":117,"line":1623},[115,108081,108082],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[115,108084,108085],{"class":117,"line":1628},[115,108086,2400],{"emptyLinePlaceholder":42},[115,108088,108089],{"class":117,"line":1642},[115,108090,101342],{"class":230},[115,108092,108093],{"class":117,"line":1647},[115,108094,101347],{"class":230},[115,108096,108097],{"class":117,"line":1653},[115,108098,108099],{"class":230},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[115,108101,108102],{"class":117,"line":1674},[115,108103,101357],{"class":230},[115,108105,108106],{"class":117,"line":1679},[115,108107,101362],{"class":230},[115,108109,108110],{"class":117,"line":1693},[115,108111,101367],{"class":230},[115,108113,108114],{"class":117,"line":1698},[115,108115,95688],{"class":230},[115,108117,108118],{"class":117,"line":1727},[115,108119,2400],{"emptyLinePlaceholder":42},[115,108121,108122],{"class":117,"line":1732},[115,108123,2400],{"emptyLinePlaceholder":42},[115,108125,108126,108128,108130,108132,108134],{"class":117,"line":1749},[115,108127,31948],{"class":121},[115,108129,1973],{"class":1963},[115,108131,101388],{"class":125},[115,108133,95676],{"class":174},[115,108135,3739],{"class":125},[115,108137,108138,108140,108142,108144,108146],{"class":117,"line":1754},[115,108139,101397],{"class":125},[115,108141,171],{"class":121},[115,108143,101402],{"class":125},[115,108145,101304],{"class":174},[115,108147,132],{"class":125},[115,108149,108150,108152,108154],{"class":117,"line":1759},[115,108151,101411],{"class":125},[115,108153,171],{"class":121},[115,108155,101416],{"class":125},[115,108157,108158],{"class":117,"line":1764},[115,108159,2400],{"emptyLinePlaceholder":42},[115,108161,108162,108164,108166,108168],{"class":117,"line":1778},[115,108163,34179],{"class":121},[115,108165,107826],{"class":125},[115,108167,31384],{"class":121},[115,108169,107831],{"class":125},[115,108171,108172,108175,108178,108180,108183,108185,108188],{"class":117,"line":1783},[115,108173,108174],{"class":121},"        while",[115,108176,108177],{"class":125}," viewer.is_running() ",[115,108179,30463],{"class":121},[115,108181,108182],{"class":125}," data.time ",[115,108184,1035],{"class":121},[115,108186,108187],{"class":174}," 5.0",[115,108189,3739],{"class":125},[115,108191,108192,108195,108197],{"class":117,"line":2577},[115,108193,108194],{"class":125},"            step_start ",[115,108196,171],{"class":121},[115,108198,108199],{"class":125}," time.time()\n",[115,108201,108202],{"class":117,"line":2591},[115,108203,108204],{"class":125},"            mujoco.mj_step(model, data)\n",[115,108206,108207],{"class":117,"line":2599},[115,108208,108209],{"class":125},"            viewer.sync()\n",[115,108211,108212],{"class":117,"line":2604},[115,108213,2400],{"emptyLinePlaceholder":42},[115,108215,108216,108219,108221,108223,108225,108227,108229],{"class":117,"line":2610},[115,108217,108218],{"class":125},"            sleep_time ",[115,108220,171],{"class":121},[115,108222,107950],{"class":125},[115,108224,657],{"class":121},[115,108226,107955],{"class":125},[115,108228,657],{"class":121},[115,108230,107960],{"class":125},[115,108232,108233,108235,108238,108240,108242],{"class":117,"line":2616},[115,108234,4642],{"class":121},[115,108236,108237],{"class":125}," sleep_time ",[115,108239,1085],{"class":121},[115,108241,4093],{"class":174},[115,108243,3739],{"class":125},[115,108245,108246],{"class":117,"line":2621},[115,108247,108248],{"class":125},"                time.sleep(sleep_time)\n",[115,108250,108251],{"class":117,"line":7949},[115,108252,2400],{"emptyLinePlaceholder":42},[115,108254,108255],{"class":117,"line":7973},[115,108256,2400],{"emptyLinePlaceholder":42},[115,108258,108259,108261,108263,108265,108267],{"class":117,"line":7978},[115,108260,1531],{"class":121},[115,108262,31221],{"class":174},[115,108264,101549],{"class":121},[115,108266,101552],{"class":230},[115,108268,3739],{"class":125},[115,108270,108271],{"class":117,"line":7984},[115,108272,101559],{"class":125},[14,108274,103560],{},[106,108276,108278],{"className":23823,"code":108277,"language":23825,"meta":22,"style":22},"touch ch5_viewer.py\n",[112,108279,108280],{"__ignoreMap":22},[115,108281,108282,108284],{"class":117,"line":118},[115,108283,101273],{"class":1963},[115,108285,108286],{"class":230}," ch5_viewer.py\n",[14,108288,108289],{},"离屏 Renderer 保存图片:",[106,108291,108293],{"className":30379,"code":108292,"language":30381,"meta":22,"style":22},"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",[112,108294,108295,108307,108311,108317,108327,108331,108335,108343,108348,108352,108356,108360,108364,108369,108373,108377,108381,108385,108389,108393,108397,108401,108405,108409,108413,108425,108437,108445,108470,108474,108490,108494,108498,108513,108522,108526,108540,108545,108550,108554,108566,108578,108582,108586,108598],{"__ignoreMap":22},[115,108296,108297,108299,108302,108304],{"class":117,"line":118},[115,108298,30738],{"class":121},[115,108300,108301],{"class":125}," pathlib ",[115,108303,30393],{"class":121},[115,108305,108306],{"class":125}," Path\n",[115,108308,108309],{"class":117,"line":37},[115,108310,2400],{"emptyLinePlaceholder":42},[115,108312,108313,108315],{"class":117,"line":1180},[115,108314,30393],{"class":121},[115,108316,101291],{"class":125},[115,108318,108319,108321,108323,108325],{"class":117,"line":1195},[115,108320,30738],{"class":121},[115,108322,47264],{"class":174},[115,108324,47267],{"class":121},[115,108326,47270],{"class":125},[115,108328,108329],{"class":117,"line":1201},[115,108330,2400],{"emptyLinePlaceholder":42},[115,108332,108333],{"class":117,"line":1215},[115,108334,2400],{"emptyLinePlaceholder":42},[115,108336,108337,108339,108341],{"class":117,"line":1221},[115,108338,101304],{"class":174},[115,108340,13565],{"class":121},[115,108342,101309],{"class":230},[115,108344,108345],{"class":117,"line":1312},[115,108346,108347],{"class":230},"\u003Cmujoco model=\"renderer_demo\">\n",[115,108349,108350],{"class":117,"line":1318},[115,108351,101319],{"class":230},[115,108353,108354],{"class":117,"line":1330},[115,108355,2400],{"emptyLinePlaceholder":42},[115,108357,108358],{"class":117,"line":1612},[115,108359,101328],{"class":230},[115,108361,108362],{"class":117,"line":1617},[115,108363,108077],{"class":230},[115,108365,108366],{"class":117,"line":1623},[115,108367,108368],{"class":230},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[115,108370,108371],{"class":117,"line":1628},[115,108372,108082],{"class":230},[115,108374,108375],{"class":117,"line":1642},[115,108376,2400],{"emptyLinePlaceholder":42},[115,108378,108379],{"class":117,"line":1647},[115,108380,101342],{"class":230},[115,108382,108383],{"class":117,"line":1653},[115,108384,101347],{"class":230},[115,108386,108387],{"class":117,"line":1674},[115,108388,108099],{"class":230},[115,108390,108391],{"class":117,"line":1679},[115,108392,101357],{"class":230},[115,108394,108395],{"class":117,"line":1693},[115,108396,101362],{"class":230},[115,108398,108399],{"class":117,"line":1698},[115,108400,101367],{"class":230},[115,108402,108403],{"class":117,"line":1727},[115,108404,95688],{"class":230},[115,108406,108407],{"class":117,"line":1732},[115,108408,2400],{"emptyLinePlaceholder":42},[115,108410,108411],{"class":117,"line":1749},[115,108412,2400],{"emptyLinePlaceholder":42},[115,108414,108415,108417,108419,108421,108423],{"class":117,"line":1754},[115,108416,31948],{"class":121},[115,108418,1973],{"class":1963},[115,108420,101388],{"class":125},[115,108422,95676],{"class":174},[115,108424,3739],{"class":125},[115,108426,108427,108429,108431,108433,108435],{"class":117,"line":1759},[115,108428,101397],{"class":125},[115,108430,171],{"class":121},[115,108432,101402],{"class":125},[115,108434,101304],{"class":174},[115,108436,132],{"class":125},[115,108438,108439,108441,108443],{"class":117,"line":1764},[115,108440,101411],{"class":125},[115,108442,171],{"class":121},[115,108444,101416],{"class":125},[115,108446,108447,108450,108452,108454,108456,108458,108460,108462,108464,108466,108468],{"class":117,"line":1778},[115,108448,108449],{"class":125},"    renderer ",[115,108451,171],{"class":121},[115,108453,107864],{"class":125},[115,108455,24982],{"class":5217},[115,108457,171],{"class":121},[115,108459,42343],{"class":174},[115,108461,12436],{"class":125},[115,108463,24978],{"class":5217},[115,108465,171],{"class":121},[115,108467,107879],{"class":174},[115,108469,132],{"class":125},[115,108471,108472],{"class":117,"line":1783},[115,108473,2400],{"emptyLinePlaceholder":42},[115,108475,108476,108478,108480,108482,108484,108486,108488],{"class":117,"line":2577},[115,108477,3201],{"class":121},[115,108479,101491],{"class":125},[115,108481,26044],{"class":121},[115,108483,32444],{"class":174},[115,108485,126],{"class":125},[115,108487,436],{"class":174},[115,108489,30787],{"class":125},[115,108491,108492],{"class":117,"line":2591},[115,108493,101506],{"class":125},[115,108495,108496],{"class":117,"line":2599},[115,108497,2400],{"emptyLinePlaceholder":42},[115,108499,108500,108503,108506,108508,108511],{"class":117,"line":2604},[115,108501,108502],{"class":125},"    renderer.update_scene(data, ",[115,108504,108505],{"class":5217},"camera",[115,108507,171],{"class":121},[115,108509,108510],{"class":230},"\"fixed_camera\"",[115,108512,132],{"class":125},[115,108514,108515,108518,108520],{"class":117,"line":2610},[115,108516,108517],{"class":125},"    image ",[115,108519,171],{"class":121},[115,108521,107575],{"class":125},[115,108523,108524],{"class":117,"line":2616},[115,108525,2400],{"emptyLinePlaceholder":42},[115,108527,108528,108531,108533,108536,108538],{"class":117,"line":2621},[115,108529,108530],{"class":125},"    output_path ",[115,108532,171],{"class":121},[115,108534,108535],{"class":125}," Path(",[115,108537,108005],{"class":230},[115,108539,132],{"class":125},[115,108541,108542],{"class":117,"line":7949},[115,108543,108544],{"class":125},"    Image.fromarray(image).save(output_path)\n",[115,108546,108547],{"class":117,"line":7973},[115,108548,108549],{"class":125},"    renderer.close()\n",[115,108551,108552],{"class":117,"line":7978},[115,108553,2400],{"emptyLinePlaceholder":42},[115,108555,108556,108558,108560,108563],{"class":117,"line":7984},[115,108557,31300],{"class":174},[115,108559,126],{"class":125},[115,108561,108562],{"class":230},"\"saved:\"",[115,108564,108565],{"class":125},", output_path.resolve())\n",[115,108567,108568,108570,108572,108575],{"class":117,"line":8011},[115,108569,31300],{"class":174},[115,108571,126],{"class":125},[115,108573,108574],{"class":230},"\"image shape:\"",[115,108576,108577],{"class":125},", image.shape)\n",[115,108579,108580],{"class":117,"line":8016},[115,108581,2400],{"emptyLinePlaceholder":42},[115,108583,108584],{"class":117,"line":8022},[115,108585,2400],{"emptyLinePlaceholder":42},[115,108587,108588,108590,108592,108594,108596],{"class":117,"line":8034},[115,108589,1531],{"class":121},[115,108591,31221],{"class":174},[115,108593,101549],{"class":121},[115,108595,101552],{"class":230},[115,108597,3739],{"class":125},[115,108599,108600],{"class":117,"line":8046},[115,108601,101559],{"class":125},[14,108603,103560],{},[106,108605,108607],{"className":23823,"code":108606,"language":23825,"meta":22,"style":22},"touch ch5_renderer.py\n",[112,108608,108609],{"__ignoreMap":22},[115,108610,108611,108613],{"class":117,"line":118},[115,108612,101273],{"class":1963},[115,108614,108615],{"class":230}," ch5_renderer.py\n",[86,108617,101562],{"id":101562},[14,108619,108620],{},"viewer 上下文：",[106,108622,108624],{"className":30379,"code":108623,"language":30381,"meta":22,"style":22},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[112,108625,108626],{"__ignoreMap":22},[115,108627,108628,108630,108632,108634],{"class":117,"line":118},[115,108629,107823],{"class":121},[115,108631,107826],{"class":125},[115,108633,31384],{"class":121},[115,108635,107831],{"class":125},[14,108637,108638,108640],{},[112,108639,107823],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108642,108643],{},"窗口循环：",[106,108645,108647],{"className":30379,"code":108646,"language":30381,"meta":22,"style":22},"while viewer.is_running() and data.time \u003C 5.0:\n",[112,108648,108649],{"__ignoreMap":22},[115,108650,108651,108654,108656,108658,108660,108662,108664],{"class":117,"line":118},[115,108652,108653],{"class":121},"while",[115,108655,108177],{"class":125},[115,108657,30463],{"class":121},[115,108659,108182],{"class":125},[115,108661,1035],{"class":121},[115,108663,108187],{"class":174},[115,108665,3739],{"class":125},[14,108667,108668],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108670,108671],{},"固定相机：",[106,108673,108675],{"className":53057,"code":108674,"language":53059,"meta":22,"style":22},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[112,108676,108677],{"__ignoreMap":22},[115,108678,108679,108681,108683,108685,108687,108689,108691,108693,108696,108699,108701,108704],{"class":117,"line":118},[115,108680,1035],{"class":125},[115,108682,108505],{"class":51290},[115,108684,14921],{"class":1963},[115,108686,171],{"class":125},[115,108688,108510],{"class":230},[115,108690,101096],{"class":1963},[115,108692,171],{"class":125},[115,108694,108695],{"class":230},"\"1.5 -2.0 1.2\"",[115,108697,108698],{"class":1963}," xyaxes",[115,108700,171],{"class":125},[115,108702,108703],{"class":230},"\"1 0.75 0 0 0 1\"",[115,108705,101134],{"class":125},[14,108707,108708],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[86,108710,108712],{"id":108711},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[106,108714,108716],{"className":30379,"code":108715,"language":30381,"meta":22,"style":22},"import time\n",[112,108717,108718],{"__ignoreMap":22},[115,108719,108720,108722],{"class":117,"line":118},[115,108721,30393],{"class":121},[115,108723,31830],{"class":125},[14,108725,108726],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[106,108728,108730],{"className":30379,"code":108729,"language":30381,"meta":22,"style":22},"import mujoco\nimport mujoco.viewer\n",[112,108731,108732,108738],{"__ignoreMap":22},[115,108733,108734,108736],{"class":117,"line":118},[115,108735,30393],{"class":121},[115,108737,101291],{"class":125},[115,108739,108740,108742],{"class":117,"line":37},[115,108741,30393],{"class":121},[115,108743,107542],{"class":125},[14,108745,108746],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[106,108748,108749],{"className":30379,"code":108623,"language":30381,"meta":22,"style":22},[112,108750,108751],{"__ignoreMap":22},[115,108752,108753,108755,108757,108759],{"class":117,"line":118},[115,108754,107823],{"class":121},[115,108756,107826],{"class":125},[115,108758,31384],{"class":121},[115,108760,107831],{"class":125},[14,108762,108763,108764,108767],{},"打开一个 viewer 窗口。",[112,108765,108766],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[106,108769,108770],{"className":30379,"code":108646,"language":30381,"meta":22,"style":22},[112,108771,108772],{"__ignoreMap":22},[115,108773,108774,108776,108778,108780,108782,108784,108786],{"class":117,"line":118},[115,108775,108653],{"class":121},[115,108777,108177],{"class":125},[115,108779,30463],{"class":121},[115,108781,108182],{"class":125},[115,108783,1035],{"class":121},[115,108785,108187],{"class":174},[115,108787,3739],{"class":125},[14,108789,108790,108791,108794],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[112,108792,108793],{},"viewer.is_running()"," 会变成 false，循环结束。",[106,108796,108798],{"className":30379,"code":108797,"language":30381,"meta":22,"style":22},"step_start = time.time()\n",[112,108799,108800],{"__ignoreMap":22},[115,108801,108802,108805,108807],{"class":117,"line":118},[115,108803,108804],{"class":125},"step_start ",[115,108806,171],{"class":121},[115,108808,108199],{"class":125},[14,108810,108811],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[106,108813,108814],{"className":30379,"code":107908,"language":30381,"meta":22,"style":22},[112,108815,108816,108820],{"__ignoreMap":22},[115,108817,108818],{"class":117,"line":118},[115,108819,104495],{"class":125},[115,108821,108822],{"class":117,"line":37},[115,108823,107919],{"class":125},[14,108825,108826,108828,108829,108831,108832,108834,108835,108838],{},[112,108827,101205],{}," 推进物理仿真。",[112,108830,107927],{}," 把最新的 ",[112,108833,33402],{}," 同步到窗口里显示。没有 ",[112,108836,108837],{},"sync()","，窗口可能看不到最新状态。",[106,108840,108841],{"className":30379,"code":107938,"language":30381,"meta":22,"style":22},[112,108842,108843],{"__ignoreMap":22},[115,108844,108845,108847,108849,108851,108853,108855,108857],{"class":117,"line":118},[115,108846,107945],{"class":125},[115,108848,171],{"class":121},[115,108850,107950],{"class":125},[115,108852,657],{"class":121},[115,108854,107955],{"class":125},[115,108856,657],{"class":121},[115,108858,107960],{"class":125},[14,108860,108861],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[106,108863,108865],{"className":30379,"code":108864,"language":30381,"meta":22,"style":22},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[112,108866,108867,108879],{"__ignoreMap":22},[115,108868,108869,108871,108873,108875,108877],{"class":117,"line":118},[115,108870,1531],{"class":121},[115,108872,108237],{"class":125},[115,108874,1085],{"class":121},[115,108876,4093],{"class":174},[115,108878,3739],{"class":125},[115,108880,108881],{"class":117,"line":37},[115,108882,108883],{"class":125},"    time.sleep(sleep_time)\n",[14,108885,108886],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[86,108888,108890],{"id":108889},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[106,108892,108894],{"className":30379,"code":108893,"language":30381,"meta":22,"style":22},"from pathlib import Path\n",[112,108895,108896],{"__ignoreMap":22},[115,108897,108898,108900,108902,108904],{"class":117,"line":118},[115,108899,30738],{"class":121},[115,108901,108301],{"class":125},[115,108903,30393],{"class":121},[115,108905,108306],{"class":125},[14,108907,108908,108909,108912,108913,108916],{},"导入 ",[112,108910,108911],{},"Path","，用来处理文件路径。相比直接写字符串，",[112,108914,108915],{},"Path(\"render_output.png\")"," 更清晰。",[106,108918,108920],{"className":30379,"code":108919,"language":30381,"meta":22,"style":22},"from PIL import Image\n",[112,108921,108922],{"__ignoreMap":22},[115,108923,108924,108926,108928,108930],{"class":117,"line":118},[115,108925,30738],{"class":121},[115,108927,47264],{"class":174},[115,108929,47267],{"class":121},[115,108931,47270],{"class":125},[14,108933,108934],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[106,108936,108937],{"className":53057,"code":108674,"language":53059,"meta":22,"style":22},[112,108938,108939],{"__ignoreMap":22},[115,108940,108941,108943,108945,108947,108949,108951,108953,108955,108957,108959,108961,108963],{"class":117,"line":118},[115,108942,1035],{"class":125},[115,108944,108505],{"class":51290},[115,108946,14921],{"class":1963},[115,108948,171],{"class":125},[115,108950,108510],{"class":230},[115,108952,101096],{"class":1963},[115,108954,171],{"class":125},[115,108956,108695],{"class":230},[115,108958,108698],{"class":1963},[115,108960,171],{"class":125},[115,108962,108703],{"class":230},[115,108964,101134],{"class":125},[14,108966,108967,108968,108970,108971,108973,108974,108977,108978,108980],{},"定义一个相机。",[112,108969,79800],{}," 是相机名字。",[112,108972,104136],{}," 是相机在世界里的位置。",[112,108975,108976],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[112,108979,104136],{}," 来调视角。",[106,108982,108984],{"className":30379,"code":108983,"language":30381,"meta":22,"style":22},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[112,108985,108986],{"__ignoreMap":22},[115,108987,108988,108990,108992,108994,108996,108998,109000,109002,109004,109006,109008],{"class":117,"line":118},[115,108989,107560],{"class":125},[115,108991,171],{"class":121},[115,108993,107864],{"class":125},[115,108995,24982],{"class":5217},[115,108997,171],{"class":121},[115,108999,42343],{"class":174},[115,109001,12436],{"class":125},[115,109003,24978],{"class":5217},[115,109005,171],{"class":121},[115,109007,107879],{"class":174},[115,109009,132],{"class":125},[14,109011,109012,109013,101008,109015,109017],{},"创建离屏渲染器。",[112,109014,24982],{},[112,109016,24978],{}," 决定输出图片大小。",[106,109019,109020],{"className":30379,"code":101666,"language":30381,"meta":22,"style":22},[112,109021,109022,109038],{"__ignoreMap":22},[115,109023,109024,109026,109028,109030,109032,109034,109036],{"class":117,"line":118},[115,109025,3025],{"class":121},[115,109027,101491],{"class":125},[115,109029,26044],{"class":121},[115,109031,32444],{"class":174},[115,109033,126],{"class":125},[115,109035,436],{"class":174},[115,109037,30787],{"class":125},[115,109039,109040],{"class":117,"line":37},[115,109041,101689],{"class":125},[14,109043,109044],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[106,109046,109048],{"className":30379,"code":109047,"language":30381,"meta":22,"style":22},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[112,109049,109050],{"__ignoreMap":22},[115,109051,109052,109055,109057,109059,109061],{"class":117,"line":118},[115,109053,109054],{"class":125},"renderer.update_scene(data, ",[115,109056,108505],{"class":5217},[115,109058,171],{"class":121},[115,109060,108510],{"class":230},[115,109062,132],{"class":125},[14,109064,109065,109066,109068,109069,109072],{},"告诉 renderer：用当前 ",[112,109067,33402],{}," 的状态更新画面，并使用名为 ",[112,109070,109071],{},"fixed_camera"," 的相机视角。",[106,109074,109075],{"className":30379,"code":107970,"language":30381,"meta":22,"style":22},[112,109076,109077],{"__ignoreMap":22},[115,109078,109079,109081,109083],{"class":117,"line":118},[115,109080,107570],{"class":125},[115,109082,171],{"class":121},[115,109084,107575],{"class":125},[14,109086,109087,109088,109091],{},"真正渲染出图像。",[112,109089,109090],{},"image"," 是一个 NumPy 数组，不是文件。",[106,109093,109095],{"className":30379,"code":109094,"language":30381,"meta":22,"style":22},"Image.fromarray(image).save(output_path)\n",[112,109096,109097],{"__ignoreMap":22},[115,109098,109099],{"class":117,"line":118},[115,109100,109094],{"class":125},[14,109102,109103,109104,28386],{},"把数组转换成图片，并保存到 ",[112,109105,109106],{},"render_output.png",[106,109108,109110],{"className":30379,"code":109109,"language":30381,"meta":22,"style":22},"renderer.close()\n",[112,109111,109112],{"__ignoreMap":22},[115,109113,109114],{"class":117,"line":118},[115,109115,109109],{"class":125},[14,109117,109118],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[57,109120,102306],{"id":102305},[14,109122,109123,109124,109126,109127,28386],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[112,109125,109106],{},"，并输出图像数组形状，例如 ",[112,109128,109129],{},"(480, 640, 3)",[14,109131,109132],{},"如果图片里看不到方块，先检查：",[69,109134,109135,109138,109141],{},[72,109136,109137],{},"方块是否掉到相机视野外。",[72,109139,109140],{},"camera 位置是否合理。",[72,109142,109143,109144,109147],{},"是否在 ",[112,109145,109146],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[57,109149,102338],{"id":102337},[14,109151,109152],{},"运行 viewer:",[106,109154,109156],{"className":23823,"code":109155,"language":23825,"meta":22,"style":22},"python ch5_viewer.py\n",[112,109157,109158],{"__ignoreMap":22},[115,109159,109160,109162],{"class":117,"line":118},[115,109161,30381],{"class":1963},[115,109163,108286],{"class":230},[14,109165,109166],{},"运行 renderer:",[106,109168,109170],{"className":23823,"code":109169,"language":23825,"meta":22,"style":22},"python ch5_renderer.py\n",[112,109171,109172],{"__ignoreMap":22},[115,109173,109174,109176],{"class":117,"line":118},[115,109175,30381],{"class":1963},[115,109177,108615],{"class":230},[14,109179,109180],{},"如果在服务器上运行:",[106,109182,109184],{"className":23823,"code":109183,"language":23825,"meta":22,"style":22},"MUJOCO_GL=egl python ch5_renderer.py\n",[112,109185,109186],{"__ignoreMap":22},[115,109187,109188,109190,109192,109194,109197],{"class":117,"line":118},[115,109189,107804],{"class":125},[115,109191,171],{"class":121},[115,109193,107794],{"class":230},[115,109195,109196],{"class":1963}," python",[115,109198,108615],{"class":230},[14,109200,107772],{},[106,109202,109204],{"className":23823,"code":109203,"language":23825,"meta":22,"style":22},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[112,109205,109206],{"__ignoreMap":22},[115,109207,109208,109210,109212,109214,109216],{"class":117,"line":118},[115,109209,107804],{"class":125},[115,109211,171],{"class":121},[115,109213,107798],{"class":230},[115,109215,109196],{"class":1963},[115,109217,108615],{"class":230},[14,109219,109220],{},"再做几个练习：",[69,109222,109223,109230,109233,109239],{},[72,109224,109225,109226,109229],{},"把 renderer 分辨率改成 ",[112,109227,109228],{},"height=240, width=320","，观察输出 shape。",[72,109231,109232],{},"把方块颜色改成蓝色，重新保存图片。",[72,109234,109235,109236,109238],{},"把相机 ",[112,109237,104136],{}," 改远一点，观察画面中物体是否变小。",[72,109240,109241,109242,102404,109245,109248],{},"把 viewer 示例中的 ",[112,109243,109244],{},"data.time \u003C 5.0",[112,109246,109247],{},"data.time \u003C 20.0","，观察更长时间。",[57,109250,102443],{"id":102442},[86,109252,109254],{"id":109253},"viewer-窗口打不开","viewer 窗口打不开",[14,109256,109257],{},"安装:",[106,109259,109261],{"className":23823,"code":109260,"language":23825,"meta":22,"style":22},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[112,109262,109263],{"__ignoreMap":22},[115,109264,109265,109267,109269,109271,109273,109275,109277,109279,109281,109283,109285],{"class":117,"line":118},[115,109266,24577],{"class":1963},[115,109268,26316],{"class":230},[115,109270,23835],{"class":230},[115,109272,26401],{"class":174},[115,109274,102496],{"class":230},[115,109276,100824],{"class":230},[115,109278,102501],{"class":230},[115,109280,100837],{"class":230},[115,109282,100843],{"class":230},[115,109284,100834],{"class":230},[115,109286,109287],{"class":230}," libXinerama\n",[86,109289,109291],{"id":109290},"glfwerror",[112,109292,109293],{},"GLFWError",[14,109295,109296],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[86,109298,109300],{"id":109299},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109302,109303,109304,82529,109306,109308],{},"尝试 ",[112,109305,101027],{},[112,109307,101030],{},"。可能存在版本差异。",[86,109310,109311],{"id":109311},"保存图片是黑的",[14,109313,102565],{},[69,109315,109316,109319,109322,109332],{},[72,109317,109318],{},"XML 里是否有 light。",[72,109320,109321],{},"相机是否对着模型。",[72,109323,109324,109325,109328,109329,28386],{},"是否先 ",[112,109326,109327],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[112,109330,109331],{},"renderer.render()",[72,109333,109334],{},"物体是否已经掉出视野。",[86,109336,109337],{"id":109337},"远程服务器没有显示器",[14,109339,109340],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[106,109342,109343],{"className":23823,"code":109183,"language":23825,"meta":22,"style":22},[112,109344,109345],{"__ignoreMap":22},[115,109346,109347,109349,109351,109353,109355],{"class":117,"line":118},[115,109348,107804],{"class":125},[115,109350,171],{"class":121},[115,109352,107794],{"class":230},[115,109354,109196],{"class":1963},[115,109356,108615],{"class":230},[14,109358,109359],{},"如果 EGL 不可用，再尝试：",[106,109361,109362],{"className":23823,"code":109203,"language":23825,"meta":22,"style":22},[112,109363,109364],{"__ignoreMap":22},[115,109365,109366,109368,109370,109372,109374],{"class":117,"line":118},[115,109367,107804],{"class":125},[115,109369,171],{"class":121},[115,109371,107798],{"class":230},[115,109373,109196],{"class":1963},[115,109375,108615],{"class":230},[57,109377,102597],{"id":102596},[14,109379,109380],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[69,109382,109383,109386,109389],{},[72,109384,109385],{},"先用 viewer 看模型和控制是否正常。",[72,109387,109388],{},"再用 renderer 保存图片或构造视觉观测。",[72,109390,109391],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5127,109393,109394],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":22,"searchDepth":37,"depth":37,"links":109396},[109397,109398,109399,109404,109409,109410,109411,109418],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":109400},[109401,109402,109403],{"id":107901,"depth":1180,"text":107902},{"id":107931,"depth":1180,"text":107932},{"id":107966,"depth":1180,"text":107967},{"id":101242,"depth":37,"text":101243,"children":109405},[109406,109407,109408],{"id":101562,"depth":1180,"text":101562},{"id":108711,"depth":1180,"text":108712},{"id":108889,"depth":1180,"text":108890},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":109412},[109413,109414,109415,109416,109417],{"id":109253,"depth":1180,"text":109254},{"id":109290,"depth":1180,"text":109293},{"id":109299,"depth":1180,"text":109300},{"id":109311,"depth":1180,"text":109311},{"id":109337,"depth":1180,"text":109337},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107509,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109425,"title":109426,"body":109427,"description":22,"extension":40,"meta":111338,"navigation":42,"path":111339,"seo":111340,"stem":111341,"__hash__":111342},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109428,"toc":111314},[109429,109432,109434,109437,109439,109458,109461,109467,109470,109472,109474,109498,109500,109514,109516,109557,109559,109570,109572,109575,109581,109584,109618,109621,109653,109656,109688,109692,109695,109735,109738,109744,109747,109753,109757,109760,109766,109769,109773,109776,109816,109818,109831,109834,109836,110418,110420,110432,110435,110446,110448,110451,110470,110482,110485,110506,110509,110512,110555,110558,110561,110581,110588,110590,110608,110623,110626,110632,110635,110641,110658,110665,110696,110707,110741,110752,110769,110778,110786,110791,110805,110808,110829,110835,110849,110854,110884,110894,110919,110927,110950,110953,110969,110972,110980,110986,111008,111021,111042,111051,111090,111101,111103,111106,111112,111115,111118,111124,111127,111147,111150,111152,111191,111193,111196,111204,111207,111210,111237,111240,111250,111256,111259,111265,111267,111273,111277,111280,111282,111285,111309,111312],[10,109430,109426],{"id":109431},"_6控制任务cartpole",[57,109433,100637],{"id":100636},[14,109435,109436],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109438,104321],{},[69,109440,109441,109444,109446,109449,109452,109455],{},[72,109442,109443],{},"slide joint",[72,109445,106174],{},[72,109447,109448],{},"cart force actuator",[72,109450,109451],{},"状态观测",[72,109453,109454],{},"简单控制循环",[72,109456,109457],{},"reward 设计雏形",[14,109459,109460],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[106,109462,109465],{"className":109463,"code":109464,"language":5188,"meta":22},[5186],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[112,109466,109464],{"__ignoreMap":22},[14,109468,109469],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[57,109471,100760],{"id":100759},[14,109473,100763],{},[106,109475,109476],{"className":23823,"code":104378,"language":23825,"meta":22,"style":22},[112,109477,109478],{"__ignoreMap":22},[115,109479,109480,109482,109484,109486,109488,109490,109492,109494,109496],{"class":117,"line":118},[115,109481,24577],{"class":1963},[115,109483,26316],{"class":230},[115,109485,23835],{"class":230},[115,109487,26401],{"class":174},[115,109489,104393],{"class":230},[115,109491,100788],{"class":230},[115,109493,102491],{"class":230},[115,109495,100804],{"class":230},[115,109497,104402],{"class":230},[14,109499,102809],{},[106,109501,109502],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},[112,109503,109504],{"__ignoreMap":22},[115,109505,109506,109508,109510,109512],{"class":117,"line":118},[115,109507,23832],{"class":1963},[115,109509,23835],{"class":230},[115,109511,100920],{"class":230},[115,109513,100923],{"class":230},[14,109515,102826],{},[106,109517,109519],{"className":23823,"code":109518,"language":23825,"meta":22,"style":22},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[112,109520,109521,109538,109547],{"__ignoreMap":22},[115,109522,109523,109525,109527,109529,109532,109534,109536],{"class":117,"line":118},[115,109524,30331],{"class":1963},[115,109526,29177],{"class":230},[115,109528,25116],{"class":174},[115,109530,109531],{"class":230}," mujoco-cartpole",[115,109533,100965],{"class":230},[115,109535,100968],{"class":174},[115,109537,100971],{"class":174},[115,109539,109540,109542,109544],{"class":117,"line":37},[115,109541,30331],{"class":1963},[115,109543,100978],{"class":230},[115,109545,109546],{"class":230}," mujoco-cartpole\n",[115,109548,109549,109551,109553,109555],{"class":117,"line":1180},[115,109550,23832],{"class":1963},[115,109552,23835],{"class":230},[115,109554,100920],{"class":230},[115,109556,100923],{"class":230},[14,109558,100994],{},[69,109560,109561,109564,109567],{},[72,109562,109563],{},"本章不依赖 Gymnasium。",[72,109565,109566],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[72,109568,109569],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[57,109571,101035],{"id":101034},[14,109573,109574],{},"Cartpole 的模型结构:",[106,109576,109579],{"className":109577,"code":109578,"language":5188,"meta":22},[5186],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[112,109580,109578],{"__ignoreMap":22},[14,109582,109583],{},"小车通过 slide joint 左右移动:",[106,109585,109587],{"className":53057,"code":109586,"language":53059,"meta":22,"style":22},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[112,109588,109589],{"__ignoreMap":22},[115,109590,109591,109593,109595,109597,109599,109602,109604,109606,109609,109611,109613,109616],{"class":117,"line":118},[115,109592,1035],{"class":125},[115,109594,102946],{"class":51290},[115,109596,14921],{"class":1963},[115,109598,171],{"class":125},[115,109600,109601],{"class":230},"\"cart_x\"",[115,109603,53814],{"class":1963},[115,109605,171],{"class":125},[115,109607,109608],{"class":230},"\"slide\"",[115,109610,106018],{"class":1963},[115,109612,171],{"class":125},[115,109614,109615],{"class":230},"\"1 0 0\"",[115,109617,101134],{"class":125},[14,109619,109620],{},"杆子通过 hinge joint 旋转:",[106,109622,109624],{"className":53057,"code":109623,"language":53059,"meta":22,"style":22},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[112,109625,109626],{"__ignoreMap":22},[115,109627,109628,109630,109632,109634,109636,109639,109641,109643,109645,109647,109649,109651],{"class":117,"line":118},[115,109629,1035],{"class":125},[115,109631,102946],{"class":51290},[115,109633,14921],{"class":1963},[115,109635,171],{"class":125},[115,109637,109638],{"class":230},"\"pole_hinge\"",[115,109640,53814],{"class":1963},[115,109642,171],{"class":125},[115,109644,106009],{"class":230},[115,109646,106018],{"class":1963},[115,109648,171],{"class":125},[115,109650,106023],{"class":230},[115,109652,101134],{"class":125},[14,109654,109655],{},"控制力作用在小车 slide joint 上:",[106,109657,109659],{"className":53057,"code":109658,"language":53059,"meta":22,"style":22},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[112,109660,109661],{"__ignoreMap":22},[115,109662,109663,109665,109667,109669,109671,109674,109676,109678,109680,109682,109684,109686],{"class":117,"line":118},[115,109664,1035],{"class":125},[115,109666,106064],{"class":51290},[115,109668,14921],{"class":1963},[115,109670,171],{"class":125},[115,109672,109673],{"class":230},"\"cart_motor\"",[115,109675,106074],{"class":1963},[115,109677,171],{"class":125},[115,109679,109601],{"class":230},[115,109681,106081],{"class":1963},[115,109683,171],{"class":125},[115,109685,54306],{"class":230},[115,109687,101134],{"class":125},[86,109689,109691],{"id":109690},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109693,109694],{},"这个简化模型有两个关节：",[263,109696,109697,109708],{},[266,109698,109699],{},[269,109700,109701,109703,109705],{},[272,109702,102749],{"align":23737},[272,109704,23738],{"align":23737},[272,109706,109707],{"align":23737},"对应状态",[310,109709,109710,109723],{},[269,109711,109712,109717,109720],{},[315,109713,109714],{"align":23737},[112,109715,109716],{},"cart_x",[315,109718,109719],{"align":23737},"slide",[315,109721,109722],{"align":23737},"小车 x 位置",[269,109724,109725,109730,109732],{},[315,109726,109727],{"align":23737},[112,109728,109729],{},"pole_hinge",[315,109731,105830],{"align":23737},[315,109733,109734],{"align":23737},"杆子角度",[14,109736,109737],{},"所以：",[106,109739,109742],{"className":109740,"code":109741,"language":5188,"meta":22},[5186],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[112,109743,109741],{"__ignoreMap":22},[14,109745,109746],{},"把它们拼起来就是观测：",[106,109748,109751],{"className":109749,"code":109750,"language":5188,"meta":22},[5186],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[112,109752,109750],{"__ignoreMap":22},[86,109754,109756],{"id":109755},"action-是什么","action 是什么",[14,109758,109759],{},"本章只有一个 actuator：",[106,109761,109764],{"className":109762,"code":109763,"language":5188,"meta":22},[5186],"data.ctrl[0] = action\n",[112,109765,109763],{"__ignoreMap":22},[14,109767,109768],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[86,109770,109772],{"id":109771},"reward-是什么","reward 是什么",[14,109774,109775],{},"奖励函数：",[106,109777,109779],{"className":30379,"code":109778,"language":30381,"meta":22,"style":22},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[112,109780,109781],{"__ignoreMap":22},[115,109782,109783,109785,109788,109790,109792,109794,109797,109799,109802,109804,109806,109808,109811,109813],{"class":117,"line":118},[115,109784,17047],{"class":121},[115,109786,109787],{"class":174}," float",[115,109789,126],{"class":125},[115,109791,102393],{"class":174},[115,109793,52261],{"class":121},[115,109795,109796],{"class":174}," 0.1",[115,109798,6519],{"class":121},[115,109800,109801],{"class":125}," cart_x ",[115,109803,580],{"class":121},[115,109805,109801],{"class":125},[115,109807,657],{"class":121},[115,109809,109810],{"class":125}," pole_angle ",[115,109812,580],{"class":121},[115,109814,109815],{"class":125}," pole_angle)\n",[14,109817,106216],{},[69,109819,109820,109825,109828],{},[72,109821,109822,109823,28386],{},"基础奖励是 ",[112,109824,102393],{},[72,109826,109827],{},"小车离中心越远，扣分越多。",[72,109829,109830],{},"杆子角度越大，扣分越多。",[14,109832,109833],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[57,109835,101243],{"id":101242},[106,109837,109839],{"className":30379,"code":109838,"language":30381,"meta":22,"style":22},"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",[112,109840,109841,109847,109857,109861,109865,109873,109878,109882,109886,109890,109895,109899,109904,109909,109914,109918,109923,109928,109933,109937,109941,109945,109949,109953,109958,109962,109966,109970,109974,109978,109988,109995,109999,110003,110017,110031,110044,110074,110078,110082,110094,110106,110114,110118,110131,110135,110139,110148,110152,110168,110178,110191,110204,110208,110231,110249,110253,110265,110269,110273,110283,110293,110297,110313,110354,110358,110378,110394,110398,110402,110414],{"__ignoreMap":22},[115,109842,109843,109845],{"class":117,"line":118},[115,109844,30393],{"class":121},[115,109846,101291],{"class":125},[115,109848,109849,109851,109853,109855],{"class":117,"line":37},[115,109850,30393],{"class":121},[115,109852,31381],{"class":125},[115,109854,31384],{"class":121},[115,109856,31387],{"class":125},[115,109858,109859],{"class":117,"line":1180},[115,109860,2400],{"emptyLinePlaceholder":42},[115,109862,109863],{"class":117,"line":1195},[115,109864,2400],{"emptyLinePlaceholder":42},[115,109866,109867,109869,109871],{"class":117,"line":1201},[115,109868,101304],{"class":174},[115,109870,13565],{"class":121},[115,109872,101309],{"class":230},[115,109874,109875],{"class":117,"line":1215},[115,109876,109877],{"class":230},"\u003Cmujoco model=\"cartpole\">\n",[115,109879,109880],{"class":117,"line":1221},[115,109881,101319],{"class":230},[115,109883,109884],{"class":117,"line":1312},[115,109885,2400],{"emptyLinePlaceholder":42},[115,109887,109888],{"class":117,"line":1318},[115,109889,101328],{"class":230},[115,109891,109892],{"class":117,"line":1330},[115,109893,109894],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[115,109896,109897],{"class":117,"line":1612},[115,109898,2400],{"emptyLinePlaceholder":42},[115,109900,109901],{"class":117,"line":1617},[115,109902,109903],{"class":230},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[115,109905,109906],{"class":117,"line":1623},[115,109907,109908],{"class":230},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[115,109910,109911],{"class":117,"line":1628},[115,109912,109913],{"class":230},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[115,109915,109916],{"class":117,"line":1642},[115,109917,2400],{"emptyLinePlaceholder":42},[115,109919,109920],{"class":117,"line":1647},[115,109921,109922],{"class":230},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[115,109924,109925],{"class":117,"line":1653},[115,109926,109927],{"class":230},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[115,109929,109930],{"class":117,"line":1674},[115,109931,109932],{"class":230},"        \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",[115,109934,109935],{"class":117,"line":1679},[115,109936,106428],{"class":230},[115,109938,109939],{"class":117,"line":1693},[115,109940,101357],{"class":230},[115,109942,109943],{"class":117,"line":1698},[115,109944,101362],{"class":230},[115,109946,109947],{"class":117,"line":1727},[115,109948,2400],{"emptyLinePlaceholder":42},[115,109950,109951],{"class":117,"line":1732},[115,109952,106445],{"class":230},[115,109954,109955],{"class":117,"line":1749},[115,109956,109957],{"class":230},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[115,109959,109960],{"class":117,"line":1754},[115,109961,106455],{"class":230},[115,109963,109964],{"class":117,"line":1759},[115,109965,101367],{"class":230},[115,109967,109968],{"class":117,"line":1764},[115,109969,95688],{"class":230},[115,109971,109972],{"class":117,"line":1778},[115,109973,2400],{"emptyLinePlaceholder":42},[115,109975,109976],{"class":117,"line":1783},[115,109977,2400],{"emptyLinePlaceholder":42},[115,109979,109980,109982,109985],{"class":117,"line":2577},[115,109981,31948],{"class":121},[115,109983,109984],{"class":1963}," get_observation",[115,109986,109987],{"class":125},"(data: mujoco.MjData) -> np.ndarray:\n",[115,109989,109990,109992],{"class":117,"line":2591},[115,109991,4090],{"class":121},[115,109993,109994],{"class":125}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[115,109996,109997],{"class":117,"line":2599},[115,109998,2400],{"emptyLinePlaceholder":42},[115,110000,110001],{"class":117,"line":2604},[115,110002,2400],{"emptyLinePlaceholder":42},[115,110004,110005,110007,110010,110013,110015],{"class":117,"line":2610},[115,110006,31948],{"class":121},[115,110008,110009],{"class":1963}," compute_reward",[115,110011,110012],{"class":125},"(obs: np.ndarray) -> ",[115,110014,165],{"class":174},[115,110016,3739],{"class":125},[115,110018,110019,110022,110024,110027,110029],{"class":117,"line":2616},[115,110020,110021],{"class":125},"    cart_x ",[115,110023,171],{"class":121},[115,110025,110026],{"class":125}," obs[",[115,110028,317],{"class":174},[115,110030,33247],{"class":125},[115,110032,110033,110036,110038,110040,110042],{"class":117,"line":2621},[115,110034,110035],{"class":125},"    pole_angle ",[115,110037,171],{"class":121},[115,110039,110026],{"class":125},[115,110041,343],{"class":174},[115,110043,33247],{"class":125},[115,110045,110046,110048,110050,110052,110054,110056,110058,110060,110062,110064,110066,110068,110070,110072],{"class":117,"line":7949},[115,110047,4090],{"class":121},[115,110049,109787],{"class":174},[115,110051,126],{"class":125},[115,110053,102393],{"class":174},[115,110055,52261],{"class":121},[115,110057,109796],{"class":174},[115,110059,6519],{"class":121},[115,110061,109801],{"class":125},[115,110063,580],{"class":121},[115,110065,109801],{"class":125},[115,110067,657],{"class":121},[115,110069,109810],{"class":125},[115,110071,580],{"class":121},[115,110073,109815],{"class":125},[115,110075,110076],{"class":117,"line":7973},[115,110077,2400],{"emptyLinePlaceholder":42},[115,110079,110080],{"class":117,"line":7978},[115,110081,2400],{"emptyLinePlaceholder":42},[115,110083,110084,110086,110088,110090,110092],{"class":117,"line":7984},[115,110085,31948],{"class":121},[115,110087,1973],{"class":1963},[115,110089,101388],{"class":125},[115,110091,95676],{"class":174},[115,110093,3739],{"class":125},[115,110095,110096,110098,110100,110102,110104],{"class":117,"line":8011},[115,110097,101397],{"class":125},[115,110099,171],{"class":121},[115,110101,101402],{"class":125},[115,110103,101304],{"class":174},[115,110105,132],{"class":125},[115,110107,110108,110110,110112],{"class":117,"line":8016},[115,110109,101411],{"class":125},[115,110111,171],{"class":121},[115,110113,101416],{"class":125},[115,110115,110116],{"class":117,"line":8022},[115,110117,2400],{"emptyLinePlaceholder":42},[115,110119,110120,110122,110124,110126,110128],{"class":117,"line":8034},[115,110121,105059],{"class":125},[115,110123,343],{"class":174},[115,110125,4443],{"class":125},[115,110127,171],{"class":121},[115,110129,110130],{"class":174}," 0.1\n",[115,110132,110133],{"class":117,"line":8046},[115,110134,105072],{"class":125},[115,110136,110137],{"class":117,"line":8058},[115,110138,2400],{"emptyLinePlaceholder":42},[115,110140,110141,110144,110146],{"class":117,"line":9717},[115,110142,110143],{"class":125},"    total_reward ",[115,110145,171],{"class":121},[115,110147,104751],{"class":174},[115,110149,110150],{"class":117,"line":9742},[115,110151,2400],{"emptyLinePlaceholder":42},[115,110153,110154,110156,110158,110160,110162,110164,110166],{"class":117,"line":9765},[115,110155,3201],{"class":121},[115,110157,31617],{"class":125},[115,110159,26044],{"class":121},[115,110161,32444],{"class":174},[115,110163,126],{"class":125},[115,110165,6411],{"class":174},[115,110167,30787],{"class":125},[115,110169,110170,110173,110175],{"class":117,"line":9789},[115,110171,110172],{"class":125},"        obs ",[115,110174,171],{"class":121},[115,110176,110177],{"class":125}," get_observation(data)\n",[115,110179,110180,110183,110185,110187,110189],{"class":117,"line":9794},[115,110181,110182],{"class":125},"        pole_angle ",[115,110184,171],{"class":121},[115,110186,110026],{"class":125},[115,110188,343],{"class":174},[115,110190,33247],{"class":125},[115,110192,110193,110196,110198,110200,110202],{"class":117,"line":9799},[115,110194,110195],{"class":125},"        pole_angular_velocity ",[115,110197,171],{"class":121},[115,110199,110026],{"class":125},[115,110201,197],{"class":174},[115,110203,33247],{"class":125},[115,110205,110206],{"class":117,"line":9804},[115,110207,2400],{"emptyLinePlaceholder":42},[115,110209,110210,110213,110215,110218,110220,110222,110224,110226,110228],{"class":117,"line":9813},[115,110211,110212],{"class":125},"        action ",[115,110214,171],{"class":121},[115,110216,110217],{"class":174}," 2.0",[115,110219,6519],{"class":121},[115,110221,109810],{"class":125},[115,110223,606],{"class":121},[115,110225,61857],{"class":174},[115,110227,6519],{"class":121},[115,110229,110230],{"class":125}," pole_angular_velocity\n",[115,110232,110233,110235,110237,110239,110241,110243,110245,110247],{"class":117,"line":9818},[115,110234,110212],{"class":125},[115,110236,171],{"class":121},[115,110238,107437],{"class":125},[115,110240,657],{"class":121},[115,110242,102393],{"class":174},[115,110244,12436],{"class":125},[115,110246,102393],{"class":174},[115,110248,132],{"class":125},[115,110250,110251],{"class":117,"line":9824},[115,110252,2400],{"emptyLinePlaceholder":42},[115,110254,110255,110257,110259,110261,110263],{"class":117,"line":9845},[115,110256,106607],{"class":125},[115,110258,317],{"class":174},[115,110260,4443],{"class":125},[115,110262,171],{"class":121},[115,110264,107460],{"class":125},[115,110266,110267],{"class":117,"line":9851},[115,110268,101506],{"class":125},[115,110270,110271],{"class":117,"line":9865},[115,110272,2400],{"emptyLinePlaceholder":42},[115,110274,110275,110278,110280],{"class":117,"line":9871},[115,110276,110277],{"class":125},"        reward ",[115,110279,171],{"class":121},[115,110281,110282],{"class":125}," compute_reward(get_observation(data))\n",[115,110284,110285,110288,110290],{"class":117,"line":9898},[115,110286,110287],{"class":125},"        total_reward ",[115,110289,9478],{"class":121},[115,110291,110292],{"class":125}," reward\n",[115,110294,110295],{"class":117,"line":9907},[115,110296,2400],{"emptyLinePlaceholder":42},[115,110298,110299,110301,110303,110305,110307,110309,110311],{"class":117,"line":9913},[115,110300,2497],{"class":121},[115,110302,31617],{"class":125},[115,110304,453],{"class":121},[115,110306,5755],{"class":174},[115,110308,101549],{"class":121},[115,110310,4093],{"class":174},[115,110312,3739],{"class":125},[115,110314,110315,110317,110319,110322,110325,110328,110331,110333,110336,110339,110341,110343,110345,110347,110350,110352],{"class":117,"line":9921},[115,110316,34651],{"class":174},[115,110318,126],{"class":125},[115,110320,110321],{"class":230},"\"step:\"",[115,110323,110324],{"class":125},", step, ",[115,110326,110327],{"class":230},"\"obs:\"",[115,110329,110330],{"class":125},", np.round(obs, ",[115,110332,197],{"class":174},[115,110334,110335],{"class":125},"), ",[115,110337,110338],{"class":230},"\"action:\"",[115,110340,12436],{"class":125},[115,110342,32019],{"class":174},[115,110344,126],{"class":125},[115,110346,165],{"class":174},[115,110348,110349],{"class":125},"(action), ",[115,110351,197],{"class":174},[115,110353,30498],{"class":125},[115,110355,110356],{"class":117,"line":9926},[115,110357,2400],{"emptyLinePlaceholder":42},[115,110359,110360,110362,110364,110367,110369,110371,110374,110376],{"class":117,"line":16605},[115,110361,31300],{"class":174},[115,110363,126],{"class":125},[115,110365,110366],{"class":230},"\"total_reward:\"",[115,110368,12436],{"class":125},[115,110370,32019],{"class":174},[115,110372,110373],{"class":125},"(total_reward, ",[115,110375,197],{"class":174},[115,110377,30498],{"class":125},[115,110379,110380,110382,110384,110387,110390,110392],{"class":117,"line":16611},[115,110381,31300],{"class":174},[115,110383,126],{"class":125},[115,110385,110386],{"class":230},"\"final obs:\"",[115,110388,110389],{"class":125},", np.round(get_observation(data), ",[115,110391,197],{"class":174},[115,110393,30498],{"class":125},[115,110395,110396],{"class":117,"line":16634},[115,110397,2400],{"emptyLinePlaceholder":42},[115,110399,110400],{"class":117,"line":16640},[115,110401,2400],{"emptyLinePlaceholder":42},[115,110403,110404,110406,110408,110410,110412],{"class":117,"line":16663},[115,110405,1531],{"class":121},[115,110407,31221],{"class":174},[115,110409,101549],{"class":121},[115,110411,101552],{"class":230},[115,110413,3739],{"class":125},[115,110415,110416],{"class":117,"line":16677},[115,110417,101559],{"class":125},[14,110419,103560],{},[106,110421,110423],{"className":23823,"code":110422,"language":23825,"meta":22,"style":22},"touch ch6_cartpole.py\n",[112,110424,110425],{"__ignoreMap":22},[115,110426,110427,110429],{"class":117,"line":118},[115,110428,101273],{"class":1963},[115,110430,110431],{"class":230}," ch6_cartpole.py\n",[14,110433,110434],{},"运行：",[106,110436,110438],{"className":23823,"code":110437,"language":23825,"meta":22,"style":22},"python ch6_cartpole.py\n",[112,110439,110440],{"__ignoreMap":22},[115,110441,110442,110444],{"class":117,"line":118},[115,110443,30381],{"class":1963},[115,110445,110431],{"class":230},[86,110447,101562],{"id":101562},[14,110449,110450],{},"构造观测：",[106,110452,110454],{"className":30379,"code":110453,"language":30381,"meta":22,"style":22},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[112,110455,110456,110464],{"__ignoreMap":22},[115,110457,110458,110460,110462],{"class":117,"line":118},[115,110459,31948],{"class":121},[115,110461,109984],{"class":1963},[115,110463,109987],{"class":125},[115,110465,110466,110468],{"class":117,"line":37},[115,110467,4090],{"class":121},[115,110469,109994],{"class":125},[14,110471,110472,110475,110476,110478,110479,110481],{},[112,110473,110474],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[112,110477,104020],{}," 2 维，",[112,110480,104350],{}," 2 维，所以 obs 是 4 维。",[14,110483,110484],{},"设置初始角度：",[106,110486,110488],{"className":30379,"code":110487,"language":30381,"meta":22,"style":22},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[112,110489,110490,110502],{"__ignoreMap":22},[115,110491,110492,110494,110496,110498,110500],{"class":117,"line":118},[115,110493,104689],{"class":125},[115,110495,343],{"class":174},[115,110497,4443],{"class":125},[115,110499,171],{"class":121},[115,110501,110130],{"class":174},[115,110503,110504],{"class":117,"line":37},[115,110505,104533],{"class":125},[14,110507,110508],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110510,110511],{},"简单反馈控制：",[106,110513,110515],{"className":30379,"code":110514,"language":30381,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[112,110516,110517,110537],{"__ignoreMap":22},[115,110518,110519,110521,110523,110525,110527,110529,110531,110533,110535],{"class":117,"line":118},[115,110520,107432],{"class":125},[115,110522,171],{"class":121},[115,110524,110217],{"class":174},[115,110526,6519],{"class":121},[115,110528,109810],{"class":125},[115,110530,606],{"class":121},[115,110532,61857],{"class":174},[115,110534,6519],{"class":121},[115,110536,110230],{"class":125},[115,110538,110539,110541,110543,110545,110547,110549,110551,110553],{"class":117,"line":37},[115,110540,107432],{"class":125},[115,110542,171],{"class":121},[115,110544,107437],{"class":125},[115,110546,657],{"class":121},[115,110548,102393],{"class":174},[115,110550,12436],{"class":125},[115,110552,102393],{"class":174},[115,110554,132],{"class":125},[14,110556,110557],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110559,110560],{},"限制动作：",[106,110562,110564],{"className":30379,"code":110563,"language":30381,"meta":22,"style":22},"np.clip(action, -1.0, 1.0)\n",[112,110565,110566],{"__ignoreMap":22},[115,110567,110568,110571,110573,110575,110577,110579],{"class":117,"line":118},[115,110569,110570],{"class":125},"np.clip(action, ",[115,110572,657],{"class":121},[115,110574,102393],{"class":174},[115,110576,12436],{"class":125},[115,110578,102393],{"class":174},[115,110580,132],{"class":125},[14,110582,110583,110584,110587],{},"因为 XML 里 ",[112,110585,110586],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[86,110589,101698],{"id":101698},[106,110591,110592],{"className":30379,"code":110453,"language":30381,"meta":22,"style":22},[112,110593,110594,110602],{"__ignoreMap":22},[115,110595,110596,110598,110600],{"class":117,"line":118},[115,110597,31948],{"class":121},[115,110599,109984],{"class":1963},[115,110601,109987],{"class":125},[115,110603,110604,110606],{"class":117,"line":37},[115,110605,4090],{"class":121},[115,110607,109994],{"class":125},[14,110609,110610,110611,110614,110615,110618,110619,110622],{},"这段定义了一个函数，用来获取当前观测。",[112,110612,110613],{},"data.qpos.copy()"," 是位置数组副本，",[112,110616,110617],{},"data.qvel.copy()"," 是速度数组副本。",[112,110620,110621],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110624,110625],{},"在本章模型里：",[106,110627,110630],{"className":110628,"code":110629,"language":5188,"meta":22},[5186],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[112,110631,110629],{"__ignoreMap":22},[14,110633,110634],{},"所以返回的 obs 是：",[106,110636,110639],{"className":110637,"code":110638,"language":5188,"meta":22},[5186],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[112,110640,110638],{"__ignoreMap":22},[106,110642,110644],{"className":30379,"code":110643,"language":30381,"meta":22,"style":22},"def compute_reward(obs: np.ndarray) -> float:\n",[112,110645,110646],{"__ignoreMap":22},[115,110647,110648,110650,110652,110654,110656],{"class":117,"line":118},[115,110649,31948],{"class":121},[115,110651,110009],{"class":1963},[115,110653,110012],{"class":125},[115,110655,165],{"class":174},[115,110657,3739],{"class":125},[14,110659,110660,110661,110664],{},"这行定义奖励函数。输入是观测 ",[112,110662,110663],{},"obs","，输出是一个浮点数奖励。",[106,110666,110668],{"className":30379,"code":110667,"language":30381,"meta":22,"style":22},"cart_x = obs[0]\npole_angle = obs[1]\n",[112,110669,110670,110683],{"__ignoreMap":22},[115,110671,110672,110675,110677,110679,110681],{"class":117,"line":118},[115,110673,110674],{"class":125},"cart_x ",[115,110676,171],{"class":121},[115,110678,110026],{"class":125},[115,110680,317],{"class":174},[115,110682,33247],{"class":125},[115,110684,110685,110688,110690,110692,110694],{"class":117,"line":37},[115,110686,110687],{"class":125},"pole_angle ",[115,110689,171],{"class":121},[115,110691,110026],{"class":125},[115,110693,343],{"class":174},[115,110695,33247],{"class":125},[14,110697,110698,110699,110702,110703,110706],{},"数组索引从 0 开始。",[112,110700,110701],{},"obs[0]"," 是第一个元素，也就是小车位置。",[112,110704,110705],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[106,110708,110709],{"className":30379,"code":109778,"language":30381,"meta":22,"style":22},[112,110710,110711],{"__ignoreMap":22},[115,110712,110713,110715,110717,110719,110721,110723,110725,110727,110729,110731,110733,110735,110737,110739],{"class":117,"line":118},[115,110714,17047],{"class":121},[115,110716,109787],{"class":174},[115,110718,126],{"class":125},[115,110720,102393],{"class":174},[115,110722,52261],{"class":121},[115,110724,109796],{"class":174},[115,110726,6519],{"class":121},[115,110728,109801],{"class":125},[115,110730,580],{"class":121},[115,110732,109801],{"class":125},[115,110734,657],{"class":121},[115,110736,109810],{"class":125},[115,110738,580],{"class":121},[115,110740,109815],{"class":125},[14,110742,110743,110744,110747,110748,110751],{},"这行计算奖励。",[112,110745,110746],{},"cart_x * cart_x"," 是小车位置的平方，",[112,110749,110750],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[106,110753,110755],{"className":30379,"code":110754,"language":30381,"meta":22,"style":22},"data.qpos[1] = 0.1\n",[112,110756,110757],{"__ignoreMap":22},[115,110758,110759,110761,110763,110765,110767],{"class":117,"line":118},[115,110760,104689],{"class":125},[115,110762,343],{"class":174},[115,110764,4443],{"class":125},[115,110766,171],{"class":121},[115,110768,110130],{"class":174},[14,110770,110771,110772,110774,110775,110777],{},"手动设置杆子的初始角度。因为 ",[112,110773,105446],{}," 是小车位置，",[112,110776,105449],{}," 是杆子角度，所以这里改的是杆子。",[106,110779,110780],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},[112,110781,110782],{"__ignoreMap":22},[115,110783,110784],{"class":117,"line":118},[115,110785,104533],{"class":125},[14,110787,105492,110788,110790],{},[112,110789,104020],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[106,110792,110794],{"className":30379,"code":110793,"language":30381,"meta":22,"style":22},"total_reward = 0.0\n",[112,110795,110796],{"__ignoreMap":22},[115,110797,110798,110801,110803],{"class":117,"line":118},[115,110799,110800],{"class":125},"total_reward ",[115,110802,171],{"class":121},[115,110804,104751],{"class":174},[14,110806,110807],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[106,110809,110811],{"className":30379,"code":110810,"language":30381,"meta":22,"style":22},"for step in range(1000):\n",[112,110812,110813],{"__ignoreMap":22},[115,110814,110815,110817,110819,110821,110823,110825,110827],{"class":117,"line":118},[115,110816,3025],{"class":121},[115,110818,31617],{"class":125},[115,110820,26044],{"class":121},[115,110822,32444],{"class":174},[115,110824,126],{"class":125},[115,110826,6411],{"class":174},[115,110828,30787],{"class":125},[14,110830,110831,110832,110834],{},"循环 1000 步。",[112,110833,107124],{}," 是当前步数，从 0 到 999。",[106,110836,110838],{"className":30379,"code":110837,"language":30381,"meta":22,"style":22},"obs = get_observation(data)\n",[112,110839,110840],{"__ignoreMap":22},[115,110841,110842,110845,110847],{"class":117,"line":118},[115,110843,110844],{"class":125},"obs ",[115,110846,171],{"class":121},[115,110848,110177],{"class":125},[14,110850,110851,110852,28386],{},"读取当前状态，保存到 ",[112,110853,110663],{},[106,110855,110857],{"className":30379,"code":110856,"language":30381,"meta":22,"style":22},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[112,110858,110859,110871],{"__ignoreMap":22},[115,110860,110861,110863,110865,110867,110869],{"class":117,"line":118},[115,110862,110687],{"class":125},[115,110864,171],{"class":121},[115,110866,110026],{"class":125},[115,110868,343],{"class":174},[115,110870,33247],{"class":125},[115,110872,110873,110876,110878,110880,110882],{"class":117,"line":37},[115,110874,110875],{"class":125},"pole_angular_velocity ",[115,110877,171],{"class":121},[115,110879,110026],{"class":125},[115,110881,197],{"class":174},[115,110883,33247],{"class":125},[14,110885,110886,110887,110890,110891,28386],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[112,110888,110889],{},"obs[3]","？因为 obs 的顺序是 ",[112,110892,110893],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[106,110895,110897],{"className":30379,"code":110896,"language":30381,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[112,110898,110899],{"__ignoreMap":22},[115,110900,110901,110903,110905,110907,110909,110911,110913,110915,110917],{"class":117,"line":118},[115,110902,107432],{"class":125},[115,110904,171],{"class":121},[115,110906,110217],{"class":174},[115,110908,6519],{"class":121},[115,110910,109810],{"class":125},[115,110912,606],{"class":121},[115,110914,61857],{"class":174},[115,110916,6519],{"class":121},[115,110918,110230],{"class":125},[14,110920,110921,110922,101008,110924,110926],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[112,110923,105250],{},[112,110925,35330],{}," 是人为设置的系数，不是固定公式。",[106,110928,110930],{"className":30379,"code":110929,"language":30381,"meta":22,"style":22},"action = np.clip(action, -1.0, 1.0)\n",[112,110931,110932],{"__ignoreMap":22},[115,110933,110934,110936,110938,110940,110942,110944,110946,110948],{"class":117,"line":118},[115,110935,107432],{"class":125},[115,110937,171],{"class":121},[115,110939,107437],{"class":125},[115,110941,657],{"class":121},[115,110943,102393],{"class":174},[115,110945,12436],{"class":125},[115,110947,102393],{"class":174},[115,110949,132],{"class":125},[14,110951,110952],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[106,110954,110955],{"className":30379,"code":109763,"language":30381,"meta":22,"style":22},[112,110956,110957],{"__ignoreMap":22},[115,110958,110959,110961,110963,110965,110967],{"class":117,"line":118},[115,110960,105861],{"class":125},[115,110962,317],{"class":174},[115,110964,4443],{"class":125},[115,110966,171],{"class":121},[115,110968,107460],{"class":125},[14,110970,110971],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[106,110973,110974],{"className":30379,"code":104495,"language":30381,"meta":22,"style":22},[112,110975,110976],{"__ignoreMap":22},[115,110977,110978],{"class":117,"line":118},[115,110979,104495],{"class":125},[14,110981,110982,110983,110985],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[112,110984,106116],{}," 计算小车和杆子的下一刻状态。",[106,110987,110989],{"className":30379,"code":110988,"language":30381,"meta":22,"style":22},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[112,110990,110991,111000],{"__ignoreMap":22},[115,110992,110993,110996,110998],{"class":117,"line":118},[115,110994,110995],{"class":125},"reward ",[115,110997,171],{"class":121},[115,110999,110282],{"class":125},[115,111001,111002,111004,111006],{"class":117,"line":37},[115,111003,110800],{"class":125},[115,111005,9478],{"class":121},[115,111007,110292],{"class":125},[14,111009,111010,111011,111013,111014,111017,111018,28386],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[112,111012,9478],{}," 是简写，",[112,111015,111016],{},"total_reward += reward"," 等价于 ",[112,111019,111020],{},"total_reward = total_reward + reward",[106,111022,111024],{"className":30379,"code":111023,"language":30381,"meta":22,"style":22},"if step % 100 == 0:\n",[112,111025,111026],{"__ignoreMap":22},[115,111027,111028,111030,111032,111034,111036,111038,111040],{"class":117,"line":118},[115,111029,1531],{"class":121},[115,111031,31617],{"class":125},[115,111033,453],{"class":121},[115,111035,5755],{"class":174},[115,111037,101549],{"class":121},[115,111039,4093],{"class":174},[115,111041,3739],{"class":125},[14,111043,111044,111046,111047,111050],{},[112,111045,453],{}," 是取余数。",[112,111048,111049],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[106,111052,111054],{"className":30379,"code":111053,"language":30381,"meta":22,"style":22},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[112,111055,111056],{"__ignoreMap":22},[115,111057,111058,111060,111062,111064,111066,111068,111070,111072,111074,111076,111078,111080,111082,111084,111086,111088],{"class":117,"line":118},[115,111059,30416],{"class":174},[115,111061,126],{"class":125},[115,111063,110321],{"class":230},[115,111065,110324],{"class":125},[115,111067,110327],{"class":230},[115,111069,110330],{"class":125},[115,111071,197],{"class":174},[115,111073,110335],{"class":125},[115,111075,110338],{"class":230},[115,111077,12436],{"class":125},[115,111079,32019],{"class":174},[115,111081,126],{"class":125},[115,111083,165],{"class":174},[115,111085,110349],{"class":125},[115,111087,197],{"class":174},[115,111089,30498],{"class":125},[14,111091,111092,111093,111096,111097,111100],{},"打印当前步数、观测和动作。",[112,111094,111095],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[112,111098,111099],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[57,111102,102306],{"id":102305},[14,111104,111105],{},"观测向量:",[106,111107,111110],{"className":111108,"code":111109,"language":5188,"meta":22},[5186],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[112,111111,111109],{"__ignoreMap":22},[14,111113,111114],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111116,111117],{},"每隔 100 步会打印一次：",[106,111119,111122],{"className":111120,"code":111121,"language":5188,"meta":22},[5186],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[112,111123,111121],{"__ignoreMap":22},[14,111125,111126],{},"重点观察：",[69,111128,111129,111135,111140],{},[72,111130,111131,111134],{},[112,111132,111133],{},"pole_angle"," 是否越来越大。",[72,111136,111137,111139],{},[112,111138,109716],{}," 是否跑得太远。",[72,111141,111142,111143,82529,111145,28386],{},"action 是否经常被 clip 到 ",[112,111144,103905],{},[112,111146,343],{},[14,111148,111149],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[57,111151,102338],{"id":102337},[69,111153,111154,111160,111163,111169,111179,111185,111188],{},[72,111155,111156,111157,28386],{},"把初始角度改为 ",[112,111158,111159],{},"data.qpos[1] = 0.3",[72,111161,111162],{},"重新运行，观察控制是否变差。",[72,111164,111165,111166,111168],{},"把 actuator ",[112,111167,107057],{}," 改小。",[72,111170,111171,111172,111175,111176,28386],{},"打印 ",[112,111173,111174],{},"model.nq, model.nv, model.nu","，应为 ",[112,111177,111178],{},"2 2 1",[72,111180,111181,111182,111184],{},"把 reward 里的 ",[112,111183,110750],{}," 系数改大，观察总奖励变化。",[72,111186,111187],{},"把控制器改成反号，观察杆子是否更容易倒。",[72,111189,111190],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[57,111192,102443],{"id":102442},[86,111194,111195],{"id":111195},"杆子方向和预期不一致",[14,111197,102386,111198,111200,111201,111203],{},[112,111199,106229],{}," 和 capsule 的 ",[112,111202,103166],{},"，必要时用 viewer 可视化确认。",[86,111205,111206],{"id":111206},"控制器越控越倒",[14,111208,111209],{},"说明反馈符号可能反了，尝试:",[106,111211,111213],{"className":30379,"code":111212,"language":30381,"meta":22,"style":22},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[112,111214,111215],{"__ignoreMap":22},[115,111216,111217,111219,111221,111223,111225,111227,111229,111231,111233,111235],{"class":117,"line":118},[115,111218,107432],{"class":125},[115,111220,171],{"class":121},[115,111222,52261],{"class":121},[115,111224,105250],{"class":174},[115,111226,6519],{"class":121},[115,111228,109810],{"class":125},[115,111230,657],{"class":121},[115,111232,61857],{"class":174},[115,111234,6519],{"class":121},[115,111236,110230],{"class":125},[86,111238,111239],{"id":111239},"小车飞走",[14,111241,111242,111243,111245,111246,111249],{},"降低 ",[112,111244,107057],{}," 或缩小 ",[112,111247,111248],{},"action"," 的 clip 范围。",[86,111251,111253,111255],{"id":111252},"obs3-为什么是杆子角速度",[112,111254,110889],{}," 为什么是杆子角速度",[14,111257,111258],{},"因为这个模型里：",[106,111260,111263],{"className":111261,"code":111262,"language":5188,"meta":22},[5186],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[112,111264,111262],{"__ignoreMap":22},[14,111266,109737],{},[106,111268,111271],{"className":111269,"code":111270,"language":5188,"meta":22},[5186],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[112,111272,111270],{"__ignoreMap":22},[86,111274,111276],{"id":111275},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111278,111279],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[57,111281,102597],{"id":102596},[14,111283,111284],{},"一个控制任务通常包含：",[69,111286,111287,111290,111298,111303,111306],{},[72,111288,111289],{},"模型：Cartpole 的 body、joint、actuator。",[72,111291,111292,111293,338,111295,111297],{},"观测：从 ",[112,111294,104020],{},[112,111296,104350],{}," 里取状态。",[72,111299,111300,111301,28386],{},"动作：写入 ",[112,111302,101066],{},[72,111304,111305],{},"奖励：根据任务目标打分。",[72,111307,111308],{},"循环：obs -> action -> step -> reward。",[14,111310,111311],{},"这就是后面 Gymnasium 环境的基本骨架。",[5127,111313,104276],{},{"title":22,"searchDepth":37,"depth":37,"links":111315},[111316,111317,111318,111323,111327,111328,111329,111337],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":111319},[111320,111321,111322],{"id":109690,"depth":1180,"text":109691},{"id":109755,"depth":1180,"text":109756},{"id":109771,"depth":1180,"text":109772},{"id":101242,"depth":37,"text":101243,"children":111324},[111325,111326],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":111330},[111331,111332,111333,111334,111336],{"id":111195,"depth":1180,"text":111195},{"id":111206,"depth":1180,"text":111206},{"id":111239,"depth":1180,"text":111239},{"id":111252,"depth":1180,"text":111335},"obs[3] 为什么是杆子角速度",{"id":111275,"depth":1180,"text":111276},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109426,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111344,"title":111345,"body":111346,"description":22,"extension":40,"meta":113360,"navigation":42,"path":113361,"seo":113362,"stem":113363,"__hash__":113364},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111347,"toc":113336},[111348,111351,111353,111356,111358,111375,111378,111381,111387,111390,111392,111394,111418,111420,111434,111436,111477,111479,111497,111499,111502,111508,111511,111539,111543,111549,111574,111577,111608,111615,111618,111621,111627,111630,111636,111639,111645,111649,111652,111677,111680,111682,112442,112444,112456,112458,112469,112471,112474,112491,112494,112496,112507,112510,112512,112558,112561,112574,112577,112659,112662,112664,112680,112690,112703,112706,112745,112755,112766,112776,112789,112792,112821,112824,112834,112837,112843,112860,112871,112873,112879,112896,112907,112928,112931,112943,112946,112967,112970,112978,112986,113003,113006,113075,113082,113090,113093,113106,113113,113115,113118,113124,113127,113130,113136,113142,113144,113184,113186,113192,113201,113204,113206,113226,113229,113232,113238,113242,113244,113271,113274,113277,113304,113310,113313,113316,113318,113321,113324,113330,113333],[10,111349,111345],{"id":111350},"_7控制任务reacher-机械臂到达目标",[57,111352,100637],{"id":100636},[14,111354,111355],{},"本章搭建一个二维两关节 reacher 任务。",[14,111357,104321],{},[69,111359,111360,111363,111366,111369,111372],{},[72,111361,111362],{},"两个 hinge joint",[72,111364,111365],{},"两个 motor actuator",[72,111367,111368],{},"site 作为末端点和目标点",[72,111370,111371],{},"根据末端和目标距离设计 reward",[72,111373,111374],{},"构造机械臂任务的基本形式",[14,111376,111377],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111379,111380],{},"Reacher 任务可以理解为：",[106,111382,111385],{"className":111383,"code":111384,"language":5188,"meta":22},[5186],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[112,111386,111384],{"__ignoreMap":22},[14,111388,111389],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[57,111391,100760],{"id":100759},[14,111393,100763],{},[106,111395,111396],{"className":23823,"code":104378,"language":23825,"meta":22,"style":22},[112,111397,111398],{"__ignoreMap":22},[115,111399,111400,111402,111404,111406,111408,111410,111412,111414,111416],{"class":117,"line":118},[115,111401,24577],{"class":1963},[115,111403,26316],{"class":230},[115,111405,23835],{"class":230},[115,111407,26401],{"class":174},[115,111409,104393],{"class":230},[115,111411,100788],{"class":230},[115,111413,102491],{"class":230},[115,111415,100804],{"class":230},[115,111417,104402],{"class":230},[14,111419,102809],{},[106,111421,111422],{"className":23823,"code":100909,"language":23825,"meta":22,"style":22},[112,111423,111424],{"__ignoreMap":22},[115,111425,111426,111428,111430,111432],{"class":117,"line":118},[115,111427,23832],{"class":1963},[115,111429,23835],{"class":230},[115,111431,100920],{"class":230},[115,111433,100923],{"class":230},[14,111435,102826],{},[106,111437,111439],{"className":23823,"code":111438,"language":23825,"meta":22,"style":22},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[112,111440,111441,111458,111467],{"__ignoreMap":22},[115,111442,111443,111445,111447,111449,111452,111454,111456],{"class":117,"line":118},[115,111444,30331],{"class":1963},[115,111446,29177],{"class":230},[115,111448,25116],{"class":174},[115,111450,111451],{"class":230}," mujoco-reacher",[115,111453,100965],{"class":230},[115,111455,100968],{"class":174},[115,111457,100971],{"class":174},[115,111459,111460,111462,111464],{"class":117,"line":37},[115,111461,30331],{"class":1963},[115,111463,100978],{"class":230},[115,111465,111466],{"class":230}," mujoco-reacher\n",[115,111468,111469,111471,111473,111475],{"class":117,"line":1180},[115,111470,23832],{"class":1963},[115,111472,23835],{"class":230},[115,111474,100920],{"class":230},[115,111476,100923],{"class":230},[14,111478,100994],{},[69,111480,111481,111484,111487],{},[72,111482,111483],{},"本章使用低维状态，不使用图像输入。",[72,111485,111486],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[72,111488,111489,111490,338,111492,338,111494,111496],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[112,111491,104020],{},[112,111493,104350],{},[112,111495,103670],{}," 的方法一致。",[57,111498,101035],{"id":101034},[14,111500,111501],{},"Reacher 任务核心:",[106,111503,111506],{"className":111504,"code":111505,"language":5188,"meta":22},[5186],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[112,111507,111505],{"__ignoreMap":22},[14,111509,111510],{},"读取 site 世界坐标:",[106,111512,111514],{"className":30379,"code":111513,"language":30381,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[112,111515,111516,111529],{"__ignoreMap":22},[115,111517,111518,111520,111522,111524,111527],{"class":117,"line":118},[115,111519,103624],{"class":125},[115,111521,171],{"class":121},[115,111523,103395],{"class":125},[115,111525,111526],{"class":230},"\"tip\"",[115,111528,132],{"class":125},[115,111530,111531,111534,111536],{"class":117,"line":37},[115,111532,111533],{"class":125},"tip_pos ",[115,111535,171],{"class":121},[115,111537,111538],{"class":125}," data.site_xpos[site_id]\n",[86,111540,111542],{"id":111541},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111544,111545,111546,111548],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[112,111547,104020],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[106,111550,111552],{"className":30379,"code":111551,"language":30381,"meta":22,"style":22},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[112,111553,111554,111564],{"__ignoreMap":22},[115,111555,111556,111559,111561],{"class":117,"line":118},[115,111557,111558],{"class":125},"tip ",[115,111560,171],{"class":121},[115,111562,111563],{"class":125}," data.site_xpos[tip_site_id]\n",[115,111565,111566,111569,111571],{"class":117,"line":37},[115,111567,111568],{"class":125},"target ",[115,111570,171],{"class":121},[115,111572,111573],{"class":125}," data.site_xpos[target_site_id]\n",[14,111575,111576],{},"这样 reward 就很容易写：",[106,111578,111580],{"className":30379,"code":111579,"language":30381,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[112,111581,111582,111597],{"__ignoreMap":22},[115,111583,111584,111587,111589,111592,111594],{"class":117,"line":118},[115,111585,111586],{"class":125},"dist ",[115,111588,171],{"class":121},[115,111590,111591],{"class":125}," np.linalg.norm(tip ",[115,111593,657],{"class":121},[115,111595,111596],{"class":125}," target)\n",[115,111598,111599,111601,111603,111605],{"class":117,"line":37},[115,111600,110995],{"class":125},[115,111602,171],{"class":121},[115,111604,52261],{"class":121},[115,111606,111607],{"class":125},"dist\n",[14,111609,111610,111611,111614],{},"距离越小，",[112,111612,111613],{},"-dist"," 越接近 0，奖励越高。",[86,111616,111617],{"id":111617},"两关节机械臂的状态",[14,111619,111620],{},"这个模型有两个 hinge joint：",[106,111622,111625],{"className":111623,"code":111624,"language":5188,"meta":22},[5186],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[112,111626,111624],{"__ignoreMap":22},[14,111628,111629],{},"再加上末端和目标位置：",[106,111631,111634],{"className":111632,"code":111633,"language":5188,"meta":22},[5186],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[112,111635,111633],{"__ignoreMap":22},[14,111637,111638],{},"总维度：",[106,111640,111643],{"className":111641,"code":111642,"language":5188,"meta":22},[5186],"2 + 2 + 3 + 3 = 10\n",[112,111644,111642],{"__ignoreMap":22},[86,111646,111648],{"id":111647},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111650,111651],{},"本章把重力设为：",[106,111653,111655],{"className":53057,"code":111654,"language":53059,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[112,111656,111657],{"__ignoreMap":22},[115,111658,111659,111661,111663,111665,111667,111669,111671,111673,111675],{"class":117,"line":118},[115,111660,1035],{"class":125},[115,111662,69156],{"class":51290},[115,111664,101184],{"class":1963},[115,111666,171],{"class":125},[115,111668,101189],{"class":230},[115,111670,101192],{"class":1963},[115,111672,171],{"class":125},[115,111674,103761],{"class":230},[115,111676,101134],{"class":125},[14,111678,111679],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[57,111681,101243],{"id":101242},[106,111683,111685],{"className":30379,"code":111684,"language":30381,"meta":22,"style":22},"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",[112,111686,111687,111693,111703,111707,111711,111719,111724,111729,111733,111737,111742,111747,111751,111756,111761,111766,111770,111775,111780,111785,111790,111794,111798,111802,111806,111810,111815,111820,111824,111828,111832,111836,111840,111855,111864,111876,111899,111906,111910,111914,111924,111938,111952,111959,111963,111967,111981,111993,112005,112018,112033,112050,112054,112058,112070,112082,112090,112098,112102,112118,112123,112136,112149,112164,112168,112203,112235,112239,112243,112252,112256,112272,112282,112293,112309,112325,112341,112357,112361,112379,112399,112418,112422,112426,112438],{"__ignoreMap":22},[115,111688,111689,111691],{"class":117,"line":118},[115,111690,30393],{"class":121},[115,111692,101291],{"class":125},[115,111694,111695,111697,111699,111701],{"class":117,"line":37},[115,111696,30393],{"class":121},[115,111698,31381],{"class":125},[115,111700,31384],{"class":121},[115,111702,31387],{"class":125},[115,111704,111705],{"class":117,"line":1180},[115,111706,2400],{"emptyLinePlaceholder":42},[115,111708,111709],{"class":117,"line":1195},[115,111710,2400],{"emptyLinePlaceholder":42},[115,111712,111713,111715,111717],{"class":117,"line":1201},[115,111714,101304],{"class":174},[115,111716,13565],{"class":121},[115,111718,101309],{"class":230},[115,111720,111721],{"class":117,"line":1215},[115,111722,111723],{"class":230},"\u003Cmujoco model=\"two_link_reacher\">\n",[115,111725,111726],{"class":117,"line":1221},[115,111727,111728],{"class":230},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[115,111730,111731],{"class":117,"line":1312},[115,111732,2400],{"emptyLinePlaceholder":42},[115,111734,111735],{"class":117,"line":1318},[115,111736,101328],{"class":230},[115,111738,111739],{"class":117,"line":1330},[115,111740,111741],{"class":230},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[115,111743,111744],{"class":117,"line":1612},[115,111745,111746],{"class":230},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[115,111748,111749],{"class":117,"line":1617},[115,111750,2400],{"emptyLinePlaceholder":42},[115,111752,111753],{"class":117,"line":1623},[115,111754,111755],{"class":230},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[115,111757,111758],{"class":117,"line":1628},[115,111759,111760],{"class":230},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[115,111762,111763],{"class":117,"line":1642},[115,111764,111765],{"class":230},"      \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",[115,111767,111768],{"class":117,"line":1647},[115,111769,2400],{"emptyLinePlaceholder":42},[115,111771,111772],{"class":117,"line":1653},[115,111773,111774],{"class":230},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[115,111776,111777],{"class":117,"line":1674},[115,111778,111779],{"class":230},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[115,111781,111782],{"class":117,"line":1679},[115,111783,111784],{"class":230},"        \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",[115,111786,111787],{"class":117,"line":1693},[115,111788,111789],{"class":230},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[115,111791,111792],{"class":117,"line":1698},[115,111793,106428],{"class":230},[115,111795,111796],{"class":117,"line":1727},[115,111797,101357],{"class":230},[115,111799,111800],{"class":117,"line":1732},[115,111801,101362],{"class":230},[115,111803,111804],{"class":117,"line":1749},[115,111805,2400],{"emptyLinePlaceholder":42},[115,111807,111808],{"class":117,"line":1754},[115,111809,106445],{"class":230},[115,111811,111812],{"class":117,"line":1759},[115,111813,111814],{"class":230},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[115,111816,111817],{"class":117,"line":1764},[115,111818,111819],{"class":230},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[115,111821,111822],{"class":117,"line":1778},[115,111823,106455],{"class":230},[115,111825,111826],{"class":117,"line":1783},[115,111827,101367],{"class":230},[115,111829,111830],{"class":117,"line":2577},[115,111831,95688],{"class":230},[115,111833,111834],{"class":117,"line":2591},[115,111835,2400],{"emptyLinePlaceholder":42},[115,111837,111838],{"class":117,"line":2599},[115,111839,2400],{"emptyLinePlaceholder":42},[115,111841,111842,111844,111847,111850,111852],{"class":117,"line":2604},[115,111843,31948],{"class":121},[115,111845,111846],{"class":1963}," site_position",[115,111848,111849],{"class":125},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[115,111851,1300],{"class":174},[115,111853,111854],{"class":125},") -> np.ndarray:\n",[115,111856,111857,111859,111861],{"class":117,"line":2610},[115,111858,103390],{"class":125},[115,111860,171],{"class":121},[115,111862,111863],{"class":125}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[115,111865,111866,111868,111870,111872,111874],{"class":117,"line":2616},[115,111867,3101],{"class":121},[115,111869,103439],{"class":125},[115,111871,1035],{"class":121},[115,111873,4093],{"class":174},[115,111875,3739],{"class":125},[115,111877,111878,111880,111882,111884,111886,111889,111891,111893,111895,111897],{"class":117,"line":2621},[115,111879,103422],{"class":121},[115,111881,103425],{"class":174},[115,111883,126],{"class":125},[115,111885,178],{"class":121},[115,111887,111888],{"class":230},"\"site not found: ",[115,111890,1021],{"class":174},[115,111892,79800],{"class":125},[115,111894,1071],{"class":174},[115,111896,376],{"class":230},[115,111898,132],{"class":125},[115,111900,111901,111903],{"class":117,"line":7949},[115,111902,4090],{"class":121},[115,111904,111905],{"class":125}," data.site_xpos[site_id].copy()\n",[115,111907,111908],{"class":117,"line":7973},[115,111909,2400],{"emptyLinePlaceholder":42},[115,111911,111912],{"class":117,"line":7978},[115,111913,2400],{"emptyLinePlaceholder":42},[115,111915,111916,111918,111921],{"class":117,"line":7984},[115,111917,31948],{"class":121},[115,111919,111920],{"class":1963}," get_obs",[115,111922,111923],{"class":125},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[115,111925,111926,111929,111931,111934,111936],{"class":117,"line":8011},[115,111927,111928],{"class":125},"    tip ",[115,111930,171],{"class":121},[115,111932,111933],{"class":125}," site_position(model, data, ",[115,111935,111526],{"class":230},[115,111937,132],{"class":125},[115,111939,111940,111943,111945,111947,111950],{"class":117,"line":8016},[115,111941,111942],{"class":125},"    target ",[115,111944,171],{"class":121},[115,111946,111933],{"class":125},[115,111948,111949],{"class":230},"\"target\"",[115,111951,132],{"class":125},[115,111953,111954,111956],{"class":117,"line":8022},[115,111955,4090],{"class":121},[115,111957,111958],{"class":125}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[115,111960,111961],{"class":117,"line":8034},[115,111962,2400],{"emptyLinePlaceholder":42},[115,111964,111965],{"class":117,"line":8046},[115,111966,2400],{"emptyLinePlaceholder":42},[115,111968,111969,111971,111974,111977,111979],{"class":117,"line":8058},[115,111970,31948],{"class":121},[115,111972,111973],{"class":1963}," reward",[115,111975,111976],{"class":125},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[115,111978,165],{"class":174},[115,111980,3739],{"class":125},[115,111982,111983,111985,111987,111989,111991],{"class":117,"line":9717},[115,111984,111928],{"class":125},[115,111986,171],{"class":121},[115,111988,111933],{"class":125},[115,111990,111526],{"class":230},[115,111992,132],{"class":125},[115,111994,111995,111997,111999,112001,112003],{"class":117,"line":9742},[115,111996,111942],{"class":125},[115,111998,171],{"class":121},[115,112000,111933],{"class":125},[115,112002,111949],{"class":230},[115,112004,132],{"class":125},[115,112006,112007,112010,112012,112014,112016],{"class":117,"line":9765},[115,112008,112009],{"class":125},"    dist ",[115,112011,171],{"class":121},[115,112013,111591],{"class":125},[115,112015,657],{"class":121},[115,112017,111596],{"class":125},[115,112019,112020,112023,112025,112028,112030],{"class":117,"line":9789},[115,112021,112022],{"class":125},"    control_cost ",[115,112024,171],{"class":121},[115,112026,112027],{"class":174}," 0.01",[115,112029,6519],{"class":121},[115,112031,112032],{"class":125}," np.sum(np.square(data.ctrl))\n",[115,112034,112035,112037,112039,112041,112043,112045,112047],{"class":117,"line":9794},[115,112036,4090],{"class":121},[115,112038,109787],{"class":174},[115,112040,126],{"class":125},[115,112042,657],{"class":121},[115,112044,111586],{"class":125},[115,112046,657],{"class":121},[115,112048,112049],{"class":125}," control_cost)\n",[115,112051,112052],{"class":117,"line":9799},[115,112053,2400],{"emptyLinePlaceholder":42},[115,112055,112056],{"class":117,"line":9804},[115,112057,2400],{"emptyLinePlaceholder":42},[115,112059,112060,112062,112064,112066,112068],{"class":117,"line":9813},[115,112061,31948],{"class":121},[115,112063,1973],{"class":1963},[115,112065,101388],{"class":125},[115,112067,95676],{"class":174},[115,112069,3739],{"class":125},[115,112071,112072,112074,112076,112078,112080],{"class":117,"line":9818},[115,112073,101397],{"class":125},[115,112075,171],{"class":121},[115,112077,101402],{"class":125},[115,112079,101304],{"class":174},[115,112081,132],{"class":125},[115,112083,112084,112086,112088],{"class":117,"line":9824},[115,112085,101411],{"class":125},[115,112087,171],{"class":121},[115,112089,101416],{"class":125},[115,112091,112092,112094,112096],{"class":117,"line":9845},[115,112093,110143],{"class":125},[115,112095,171],{"class":121},[115,112097,104751],{"class":174},[115,112099,112100],{"class":117,"line":9851},[115,112101,2400],{"emptyLinePlaceholder":42},[115,112103,112104,112106,112108,112110,112112,112114,112116],{"class":117,"line":9865},[115,112105,3201],{"class":121},[115,112107,31617],{"class":125},[115,112109,26044],{"class":121},[115,112111,32444],{"class":174},[115,112113,126],{"class":125},[115,112115,65064],{"class":174},[115,112117,30787],{"class":125},[115,112119,112120],{"class":117,"line":9871},[115,112121,112122],{"class":125},"        mujoco.mj_forward(model, data)\n",[115,112124,112125,112128,112130,112132,112134],{"class":117,"line":9898},[115,112126,112127],{"class":125},"        tip ",[115,112129,171],{"class":121},[115,112131,111933],{"class":125},[115,112133,111526],{"class":230},[115,112135,132],{"class":125},[115,112137,112138,112141,112143,112145,112147],{"class":117,"line":9907},[115,112139,112140],{"class":125},"        target ",[115,112142,171],{"class":121},[115,112144,111933],{"class":125},[115,112146,111949],{"class":230},[115,112148,132],{"class":125},[115,112150,112151,112154,112156,112159,112161],{"class":117,"line":9913},[115,112152,112153],{"class":125},"        error ",[115,112155,171],{"class":121},[115,112157,112158],{"class":125}," target ",[115,112160,657],{"class":121},[115,112162,112163],{"class":125}," tip\n",[115,112165,112166],{"class":117,"line":9921},[115,112167,2400],{"emptyLinePlaceholder":42},[115,112169,112170,112172,112174,112176,112178,112181,112183,112185,112188,112190,112193,112195,112197,112199,112201],{"class":117,"line":9926},[115,112171,106607],{"class":125},[115,112173,317],{"class":174},[115,112175,4443],{"class":125},[115,112177,171],{"class":121},[115,112179,112180],{"class":125}," np.clip(",[115,112182,105250],{"class":174},[115,112184,6519],{"class":121},[115,112186,112187],{"class":125}," error[",[115,112189,203],{"class":174},[115,112191,112192],{"class":125},"], ",[115,112194,657],{"class":121},[115,112196,102393],{"class":174},[115,112198,12436],{"class":125},[115,112200,102393],{"class":174},[115,112202,132],{"class":125},[115,112204,112205,112207,112209,112211,112213,112215,112217,112219,112221,112223,112225,112227,112229,112231,112233],{"class":117,"line":16605},[115,112206,106607],{"class":125},[115,112208,343],{"class":174},[115,112210,4443],{"class":125},[115,112212,171],{"class":121},[115,112214,112180],{"class":125},[115,112216,105250],{"class":174},[115,112218,6519],{"class":121},[115,112220,112187],{"class":125},[115,112222,317],{"class":174},[115,112224,112192],{"class":125},[115,112226,657],{"class":121},[115,112228,102393],{"class":174},[115,112230,12436],{"class":125},[115,112232,102393],{"class":174},[115,112234,132],{"class":125},[115,112236,112237],{"class":117,"line":16611},[115,112238,2400],{"emptyLinePlaceholder":42},[115,112240,112241],{"class":117,"line":16634},[115,112242,101506],{"class":125},[115,112244,112245,112247,112249],{"class":117,"line":16640},[115,112246,110287],{"class":125},[115,112248,9478],{"class":121},[115,112250,112251],{"class":125}," reward(model, data)\n",[115,112253,112254],{"class":117,"line":16663},[115,112255,2400],{"emptyLinePlaceholder":42},[115,112257,112258,112260,112262,112264,112266,112268,112270],{"class":117,"line":16677},[115,112259,2497],{"class":121},[115,112261,31617],{"class":125},[115,112263,453],{"class":121},[115,112265,5755],{"class":174},[115,112267,101549],{"class":121},[115,112269,4093],{"class":174},[115,112271,3739],{"class":125},[115,112273,112274,112277,112279],{"class":117,"line":16697},[115,112275,112276],{"class":125},"            obs ",[115,112278,171],{"class":121},[115,112280,112281],{"class":125}," get_obs(model, data)\n",[115,112283,112284,112286,112288,112290],{"class":117,"line":16703},[115,112285,34651],{"class":174},[115,112287,126],{"class":125},[115,112289,110321],{"class":230},[115,112291,112292],{"class":125},", step)\n",[115,112294,112295,112297,112299,112302,112305,112307],{"class":117,"line":16714},[115,112296,34651],{"class":174},[115,112298,126],{"class":125},[115,112300,112301],{"class":230},"\"  tip:\"",[115,112303,112304],{"class":125},", np.round(tip, ",[115,112306,197],{"class":174},[115,112308,30498],{"class":125},[115,112310,112311,112313,112315,112318,112321,112323],{"class":117,"line":16737},[115,112312,34651],{"class":174},[115,112314,126],{"class":125},[115,112316,112317],{"class":230},"\"  target:\"",[115,112319,112320],{"class":125},", np.round(target, ",[115,112322,197],{"class":174},[115,112324,30498],{"class":125},[115,112326,112327,112329,112331,112334,112337,112339],{"class":117,"line":16759},[115,112328,34651],{"class":174},[115,112330,126],{"class":125},[115,112332,112333],{"class":230},"\"  ctrl:\"",[115,112335,112336],{"class":125},", np.round(data.ctrl.copy(), ",[115,112338,197],{"class":174},[115,112340,30498],{"class":125},[115,112342,112343,112345,112347,112350,112353,112355],{"class":117,"line":16764},[115,112344,34651],{"class":174},[115,112346,126],{"class":125},[115,112348,112349],{"class":230},"\"  obs_dim:\"",[115,112351,112352],{"class":125},", obs.shape[",[115,112354,317],{"class":174},[115,112356,4657],{"class":125},[115,112358,112359],{"class":117,"line":16770},[115,112360,2400],{"emptyLinePlaceholder":42},[115,112362,112363,112365,112367,112369,112371,112373,112375,112377],{"class":117,"line":16784},[115,112364,31300],{"class":174},[115,112366,126],{"class":125},[115,112368,110366],{"class":230},[115,112370,12436],{"class":125},[115,112372,32019],{"class":174},[115,112374,110373],{"class":125},[115,112376,197],{"class":174},[115,112378,30498],{"class":125},[115,112380,112381,112383,112385,112388,112391,112393,112395,112397],{"class":117,"line":16797},[115,112382,31300],{"class":174},[115,112384,126],{"class":125},[115,112386,112387],{"class":230},"\"final tip:\"",[115,112389,112390],{"class":125},", np.round(site_position(model, data, ",[115,112392,111526],{"class":230},[115,112394,110335],{"class":125},[115,112396,197],{"class":174},[115,112398,30498],{"class":125},[115,112400,112401,112403,112405,112408,112410,112412,112414,112416],{"class":117,"line":16802},[115,112402,31300],{"class":174},[115,112404,126],{"class":125},[115,112406,112407],{"class":230},"\"target:\"",[115,112409,112390],{"class":125},[115,112411,111949],{"class":230},[115,112413,110335],{"class":125},[115,112415,197],{"class":174},[115,112417,30498],{"class":125},[115,112419,112420],{"class":117,"line":16816},[115,112421,2400],{"emptyLinePlaceholder":42},[115,112423,112424],{"class":117,"line":16821},[115,112425,2400],{"emptyLinePlaceholder":42},[115,112427,112428,112430,112432,112434,112436],{"class":117,"line":16827},[115,112429,1531],{"class":121},[115,112431,31221],{"class":174},[115,112433,101549],{"class":121},[115,112435,101552],{"class":230},[115,112437,3739],{"class":125},[115,112439,112440],{"class":117,"line":16832},[115,112441,101559],{"class":125},[14,112443,103560],{},[106,112445,112447],{"className":23823,"code":112446,"language":23825,"meta":22,"style":22},"touch ch7_reacher.py\n",[112,112448,112449],{"__ignoreMap":22},[115,112450,112451,112453],{"class":117,"line":118},[115,112452,101273],{"class":1963},[115,112454,112455],{"class":230}," ch7_reacher.py\n",[14,112457,110434],{},[106,112459,112461],{"className":23823,"code":112460,"language":23825,"meta":22,"style":22},"python ch7_reacher.py\n",[112,112462,112463],{"__ignoreMap":22},[115,112464,112465,112467],{"class":117,"line":118},[115,112466,30381],{"class":1963},[115,112468,112455],{"class":230},[86,112470,101562],{"id":101562},[14,112472,112473],{},"读取 site 坐标：",[106,112475,112477],{"className":30379,"code":112476,"language":30381,"meta":22,"style":22},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[112,112478,112479],{"__ignoreMap":22},[115,112480,112481,112483,112485,112487,112489],{"class":117,"line":118},[115,112482,31948],{"class":121},[115,112484,111846],{"class":1963},[115,112486,111849],{"class":125},[115,112488,1300],{"class":174},[115,112490,111854],{"class":125},[14,112492,112493],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112495,110450],{},[106,112497,112499],{"className":30379,"code":112498,"language":30381,"meta":22,"style":22},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[112,112500,112501],{"__ignoreMap":22},[115,112502,112503,112505],{"class":117,"line":118},[115,112504,17047],{"class":121},[115,112506,111958],{"class":125},[14,112508,112509],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112511,109775],{},[106,112513,112515],{"className":30379,"code":112514,"language":30381,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[112,112516,112517,112529,112542],{"__ignoreMap":22},[115,112518,112519,112521,112523,112525,112527],{"class":117,"line":118},[115,112520,111586],{"class":125},[115,112522,171],{"class":121},[115,112524,111591],{"class":125},[115,112526,657],{"class":121},[115,112528,111596],{"class":125},[115,112530,112531,112534,112536,112538,112540],{"class":117,"line":37},[115,112532,112533],{"class":125},"control_cost ",[115,112535,171],{"class":121},[115,112537,112027],{"class":174},[115,112539,6519],{"class":121},[115,112541,112032],{"class":125},[115,112543,112544,112546,112548,112550,112552,112554,112556],{"class":117,"line":1180},[115,112545,17047],{"class":121},[115,112547,109787],{"class":174},[115,112549,126],{"class":125},[115,112551,657],{"class":121},[115,112553,111586],{"class":125},[115,112555,657],{"class":121},[115,112557,112049],{"class":125},[14,112559,112560],{},"奖励由两部分组成：",[69,112562,112563,112568],{},[72,112564,112565,112567],{},[112,112566,111613],{},"：末端离目标越远，奖励越低。",[72,112569,112570,112573],{},[112,112571,112572],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112575,112576],{},"简单控制器：",[106,112578,112580],{"className":30379,"code":112579,"language":30381,"meta":22,"style":22},"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",[112,112581,112582,112595,112627],{"__ignoreMap":22},[115,112583,112584,112587,112589,112591,112593],{"class":117,"line":118},[115,112585,112586],{"class":125},"error ",[115,112588,171],{"class":121},[115,112590,112158],{"class":125},[115,112592,657],{"class":121},[115,112594,112163],{"class":125},[115,112596,112597,112599,112601,112603,112605,112607,112609,112611,112613,112615,112617,112619,112621,112623,112625],{"class":117,"line":37},[115,112598,105861],{"class":125},[115,112600,317],{"class":174},[115,112602,4443],{"class":125},[115,112604,171],{"class":121},[115,112606,112180],{"class":125},[115,112608,105250],{"class":174},[115,112610,6519],{"class":121},[115,112612,112187],{"class":125},[115,112614,203],{"class":174},[115,112616,112192],{"class":125},[115,112618,657],{"class":121},[115,112620,102393],{"class":174},[115,112622,12436],{"class":125},[115,112624,102393],{"class":174},[115,112626,132],{"class":125},[115,112628,112629,112631,112633,112635,112637,112639,112641,112643,112645,112647,112649,112651,112653,112655,112657],{"class":117,"line":1180},[115,112630,105861],{"class":125},[115,112632,343],{"class":174},[115,112634,4443],{"class":125},[115,112636,171],{"class":121},[115,112638,112180],{"class":125},[115,112640,105250],{"class":174},[115,112642,6519],{"class":121},[115,112644,112187],{"class":125},[115,112646,317],{"class":174},[115,112648,112192],{"class":125},[115,112650,657],{"class":121},[115,112652,102393],{"class":174},[115,112654,12436],{"class":125},[115,112656,102393],{"class":174},[115,112658,132],{"class":125},[14,112660,112661],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[86,112663,101698],{"id":101698},[106,112665,112666],{"className":30379,"code":112476,"language":30381,"meta":22,"style":22},[112,112667,112668],{"__ignoreMap":22},[115,112669,112670,112672,112674,112676,112678],{"class":117,"line":118},[115,112671,31948],{"class":121},[115,112673,111846],{"class":1963},[115,112675,111849],{"class":125},[115,112677,1300],{"class":174},[115,112679,111854],{"class":125},[14,112681,112682,112683,112685,112686,82529,112688,28386],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[112,112684,79800],{}," 是 site 的名字，比如 ",[112,112687,111526],{},[112,112689,111949],{},[106,112691,112693],{"className":30379,"code":112692,"language":30381,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[112,112694,112695],{"__ignoreMap":22},[115,112696,112697,112699,112701],{"class":117,"line":118},[115,112698,103624],{"class":125},[115,112700,171],{"class":121},[115,112702,111863],{"class":125},[14,112704,112705],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[106,112707,112709],{"className":30379,"code":112708,"language":30381,"meta":22,"style":22},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[112,112710,112711,112723],{"__ignoreMap":22},[115,112712,112713,112715,112717,112719,112721],{"class":117,"line":118},[115,112714,1531],{"class":121},[115,112716,103439],{"class":125},[115,112718,1035],{"class":121},[115,112720,4093],{"class":174},[115,112722,3739],{"class":125},[115,112724,112725,112727,112729,112731,112733,112735,112737,112739,112741,112743],{"class":117,"line":37},[115,112726,103885],{"class":121},[115,112728,103425],{"class":174},[115,112730,126],{"class":125},[115,112732,178],{"class":121},[115,112734,111888],{"class":230},[115,112736,1021],{"class":174},[115,112738,79800],{"class":125},[115,112740,1071],{"class":174},[115,112742,376],{"class":230},[115,112744,132],{"class":125},[14,112746,112747,112748,112751,112752,112754],{},"如果 site 没找到，就主动报错。",[112,112749,112750],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[112,112753,79800],{}," 的值放进字符串里。",[106,112756,112758],{"className":30379,"code":112757,"language":30381,"meta":22,"style":22},"return data.site_xpos[site_id].copy()\n",[112,112759,112760],{"__ignoreMap":22},[115,112761,112762,112764],{"class":117,"line":118},[115,112763,17047],{"class":121},[115,112765,111905],{"class":125},[14,112767,112768,112769,112771,112772,112775],{},"返回这个 site 的世界坐标。",[112,112770,103670],{}," 里的每一行都是一个 site 的 ",[112,112773,112774],{},"(x, y, z)"," 坐标。",[106,112777,112779],{"className":30379,"code":112778,"language":30381,"meta":22,"style":22},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[112,112780,112781],{"__ignoreMap":22},[115,112782,112783,112785,112787],{"class":117,"line":118},[115,112784,31948],{"class":121},[115,112786,111920],{"class":1963},[115,112788,111923],{"class":125},[14,112790,112791],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[106,112793,112795],{"className":30379,"code":112794,"language":30381,"meta":22,"style":22},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[112,112796,112797,112809],{"__ignoreMap":22},[115,112798,112799,112801,112803,112805,112807],{"class":117,"line":118},[115,112800,111558],{"class":125},[115,112802,171],{"class":121},[115,112804,111933],{"class":125},[115,112806,111526],{"class":230},[115,112808,132],{"class":125},[115,112810,112811,112813,112815,112817,112819],{"class":117,"line":37},[115,112812,111568],{"class":125},[115,112814,171],{"class":121},[115,112816,111933],{"class":125},[115,112818,111949],{"class":230},[115,112820,132],{"class":125},[14,112822,112823],{},"分别读取末端点和目标点的世界坐标。",[106,112825,112826],{"className":30379,"code":112498,"language":30381,"meta":22,"style":22},[112,112827,112828],{"__ignoreMap":22},[115,112829,112830,112832],{"class":117,"line":118},[115,112831,17047],{"class":121},[115,112833,111958],{"class":125},[14,112835,112836],{},"把四部分拼成一个观测数组：",[106,112838,112841],{"className":112839,"code":112840,"language":5188,"meta":22},[5186],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[112,112842,112840],{"__ignoreMap":22},[106,112844,112846],{"className":30379,"code":112845,"language":30381,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\n",[112,112847,112848],{"__ignoreMap":22},[115,112849,112850,112852,112854,112856,112858],{"class":117,"line":118},[115,112851,111586],{"class":125},[115,112853,171],{"class":121},[115,112855,111591],{"class":125},[115,112857,657],{"class":121},[115,112859,111596],{"class":125},[14,112861,112862,112863,112866,112867,112870],{},"计算 tip 到 target 的距离。",[112,112864,112865],{},"tip - target"," 得到一个三维向量，",[112,112868,112869],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112872,14634],{},[106,112874,112877],{"className":112875,"code":112876,"language":5188,"meta":22},[5186],"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",[112,112878,112876],{"__ignoreMap":22},[106,112880,112882],{"className":30379,"code":112881,"language":30381,"meta":22,"style":22},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[112,112883,112884],{"__ignoreMap":22},[115,112885,112886,112888,112890,112892,112894],{"class":117,"line":118},[115,112887,112533],{"class":125},[115,112889,171],{"class":121},[115,112891,112027],{"class":174},[115,112893,6519],{"class":121},[115,112895,112032],{"class":125},[14,112897,112898,112899,112902,112903,112906],{},"计算动作惩罚。",[112,112900,112901],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[112,112904,112905],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[106,112908,112910],{"className":30379,"code":112909,"language":30381,"meta":22,"style":22},"return float(-dist - control_cost)\n",[112,112911,112912],{"__ignoreMap":22},[115,112913,112914,112916,112918,112920,112922,112924,112926],{"class":117,"line":118},[115,112915,17047],{"class":121},[115,112917,109787],{"class":174},[115,112919,126],{"class":125},[115,112921,657],{"class":121},[115,112923,111586],{"class":125},[115,112925,657],{"class":121},[115,112927,112049],{"class":125},[14,112929,112930],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[106,112932,112933],{"className":30379,"code":110793,"language":30381,"meta":22,"style":22},[112,112934,112935],{"__ignoreMap":22},[115,112936,112937,112939,112941],{"class":117,"line":118},[115,112938,110800],{"class":125},[115,112940,171],{"class":121},[115,112942,104751],{"class":174},[14,112944,112945],{},"累计奖励变量，记录整个运行过程的总分。",[106,112947,112949],{"className":30379,"code":112948,"language":30381,"meta":22,"style":22},"for step in range(500):\n",[112,112950,112951],{"__ignoreMap":22},[115,112952,112953,112955,112957,112959,112961,112963,112965],{"class":117,"line":118},[115,112954,3025],{"class":121},[115,112956,31617],{"class":125},[115,112958,26044],{"class":121},[115,112960,32444],{"class":174},[115,112962,126],{"class":125},[115,112964,65064],{"class":174},[115,112966,30787],{"class":125},[14,112968,112969],{},"运行 500 个控制步。",[106,112971,112972],{"className":30379,"code":104533,"language":30381,"meta":22,"style":22},[112,112973,112974],{"__ignoreMap":22},[115,112975,112976],{"class":117,"line":118},[115,112977,104533],{"class":125},[14,112979,112980,112981,101008,112983,112985],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[112,112982,103221],{},[112,112984,103224],{}," 是当前状态下的坐标。",[106,112987,112989],{"className":30379,"code":112988,"language":30381,"meta":22,"style":22},"error = target - tip\n",[112,112990,112991],{"__ignoreMap":22},[115,112992,112993,112995,112997,112999,113001],{"class":117,"line":118},[115,112994,112586],{"class":125},[115,112996,171],{"class":121},[115,112998,112158],{"class":125},[115,113000,657],{"class":121},[115,113002,112163],{"class":125},[14,113004,113005],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[106,113007,113009],{"className":30379,"code":113008,"language":30381,"meta":22,"style":22},"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",[112,113010,113011,113043],{"__ignoreMap":22},[115,113012,113013,113015,113017,113019,113021,113023,113025,113027,113029,113031,113033,113035,113037,113039,113041],{"class":117,"line":118},[115,113014,105861],{"class":125},[115,113016,317],{"class":174},[115,113018,4443],{"class":125},[115,113020,171],{"class":121},[115,113022,112180],{"class":125},[115,113024,105250],{"class":174},[115,113026,6519],{"class":121},[115,113028,112187],{"class":125},[115,113030,203],{"class":174},[115,113032,112192],{"class":125},[115,113034,657],{"class":121},[115,113036,102393],{"class":174},[115,113038,12436],{"class":125},[115,113040,102393],{"class":174},[115,113042,132],{"class":125},[115,113044,113045,113047,113049,113051,113053,113055,113057,113059,113061,113063,113065,113067,113069,113071,113073],{"class":117,"line":37},[115,113046,105861],{"class":125},[115,113048,343],{"class":174},[115,113050,4443],{"class":125},[115,113052,171],{"class":121},[115,113054,112180],{"class":125},[115,113056,105250],{"class":174},[115,113058,6519],{"class":121},[115,113060,112187],{"class":125},[115,113062,317],{"class":174},[115,113064,112192],{"class":125},[115,113066,657],{"class":121},[115,113068,102393],{"class":174},[115,113070,12436],{"class":125},[115,113072,102393],{"class":174},[115,113074,132],{"class":125},[14,113076,113077,113078,113081],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[112,113079,113080],{},"error -> ctrl -> step"," 的流程。",[106,113083,113084],{"className":30379,"code":104495,"language":30381,"meta":22,"style":22},[112,113085,113086],{"__ignoreMap":22},[115,113087,113088],{"class":117,"line":118},[115,113089,104495],{"class":125},[14,113091,113092],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[106,113094,113096],{"className":30379,"code":113095,"language":30381,"meta":22,"style":22},"obs = get_obs(model, data)\n",[112,113097,113098],{"__ignoreMap":22},[115,113099,113100,113102,113104],{"class":117,"line":118},[115,113101,110844],{"class":125},[115,113103,171],{"class":121},[115,113105,112281],{"class":125},[14,113107,113108,113109,113112],{},"读取最新观测。后面打印 ",[112,113110,113111],{},"obs.shape[0]","，用来确认观测维度是 10。",[57,113114,102306],{"id":102305},[14,113116,113117],{},"观测维度为:",[106,113119,113122],{"className":113120,"code":113121,"language":5188,"meta":22},[5186],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[112,113123,113121],{"__ignoreMap":22},[14,113125,113126],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113128,113129],{},"程序每 100 步打印：",[106,113131,113134],{"className":113132,"code":113133,"language":5188,"meta":22},[5186],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[112,113135,113133],{"__ignoreMap":22},[14,113137,113138,113139,113141],{},"如果控制有效，你应该看到最终 ",[112,113140,103221],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[57,113143,102338],{"id":102337},[69,113145,113146,113149,113152,113158,113164,113171,113181],{},[72,113147,113148],{},"修改目标点位置。",[72,113150,113151],{},"重新运行，观察最终 tip 是否变化。",[72,113153,113154,113155,113157],{},"把 gravity 改成 ",[112,113156,102579],{},"，观察控制是否变差。",[72,113159,111171,113160,111175,113162,28386],{},[112,113161,102148],{},[112,113163,203],{},[72,113165,102401,113166,102404,113168,113170],{},[112,113167,110586],{},[112,113169,107297],{},"，观察机械臂是否更难移动。",[72,113172,102401,113173,82520,113175,102404,113177,113180],{},[112,113174,103224],{},[112,113176,104136],{},[112,113178,113179],{},"0.2 0 0.6","，观察 reward 和 final tip。",[72,113182,113183],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[57,113185,102443],{"id":102442},[86,113187,113189],{"id":113188},"site-not-found",[112,113190,113191],{},"site not found",[14,113193,113194,113195,101008,113198,28386],{},"检查 XML 中是否有 ",[112,113196,113197],{},"site name=\"tip\"",[112,113199,113200],{},"site name=\"target\"",[86,113202,113203],{"id":113203},"机械臂完全不动",[14,113205,102513],{},[69,113207,113208,113213,113216,113221],{},[72,113209,113210,113212],{},[112,113211,102148],{}," 是否为 2",[72,113214,113215],{},"actuator 是否引用正确 joint",[72,113217,113218,113220],{},[112,113219,101066],{}," 是否被赋值",[72,113222,113223,113224],{},"是否执行了 ",[112,113225,100675],{},[86,113227,113228],{"id":113228},"控制效果不好",[14,113230,113231],{},"正常。本章重点不是控制器最优，而是任务结构:",[106,113233,113236],{"className":113234,"code":113235,"language":5188,"meta":22},[5186],"obs → action → mj_step → reward → next_obs\n",[112,113237,113235],{"__ignoreMap":22},[86,113239,113241],{"id":113240},"tip-坐标不变化","tip 坐标不变化",[14,113243,102565],{},[69,113245,113246,113251,113259,113268],{},[72,113247,113248,113249,28386],{},"是否每步调用了 ",[112,113250,100675],{},[72,113252,113253,113254,101008,113256,28386],{},"是否写入了 ",[112,113255,106116],{},[112,113257,113258],{},"data.ctrl[1]",[72,113260,113261,113262,338,113265,28386],{},"actuator 是否正确引用 ",[112,113263,113264],{},"joint1",[112,113266,113267],{},"joint2",[72,113269,113270],{},"控制输入是否太小。",[86,113272,113273],{"id":113273},"目标点不会动",[14,113275,113276],{},"本章的 target 是固定 site：",[106,113278,113280],{"className":53057,"code":113279,"language":53059,"meta":22,"style":22},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[112,113281,113282],{"__ignoreMap":22},[115,113283,113284,113286,113288,113290,113292,113294,113296,113298,113301],{"class":117,"line":118},[115,113285,1035],{"class":125},[115,113287,103200],{"class":51290},[115,113289,14921],{"class":1963},[115,113291,171],{"class":125},[115,113293,111949],{"class":230},[115,113295,101096],{"class":1963},[115,113297,171],{"class":125},[115,113299,113300],{"class":230},"\"0.5 0 0.4\"",[115,113302,113303],{"class":125}," ...\u002F>\n",[14,113305,113306,113307,113309],{},"它直接挂在 ",[112,113308,101831],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[86,113311,113312],{"id":113312},"机械臂不像真实机械臂",[14,113314,113315],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[57,113317,102597],{"id":102596},[14,113319,113320],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113322,113323],{},"核心公式：",[106,113325,113328],{"className":113326,"code":113327,"language":5188,"meta":22},[5186],"distance = ||tip - target||\nreward = -distance - action_cost\n",[112,113329,113327],{"__ignoreMap":22},[14,113331,113332],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5127,113334,113335],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":22,"searchDepth":37,"depth":37,"links":113337},[113338,113339,113340,113345,113349,113350,113351,113359],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":113341},[113342,113343,113344],{"id":111541,"depth":1180,"text":111542},{"id":111617,"depth":1180,"text":111617},{"id":111647,"depth":1180,"text":111648},{"id":101242,"depth":37,"text":101243,"children":113346},[113347,113348],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":113352},[113353,113354,113355,113356,113357,113358],{"id":113188,"depth":1180,"text":113191},{"id":113203,"depth":1180,"text":113203},{"id":113228,"depth":1180,"text":113228},{"id":113240,"depth":1180,"text":113241},{"id":113273,"depth":1180,"text":113273},{"id":113312,"depth":1180,"text":113312},{"id":102596,"depth":37,"text":102597},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111345,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113366,"title":113367,"body":113368,"description":22,"extension":40,"meta":116830,"navigation":42,"path":116831,"seo":116832,"stem":116833,"__hash__":116834},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113369,"toc":116801},[113370,113373,113375,113378,113381,113406,113409,113415,113418,113424,113426,113428,113452,113454,113472,113474,113517,113519,113546,113548,113551,113603,113606,113612,113621,113624,113662,113665,113704,113707,113715,113722,113725,113731,113733,113787,113794,113839,113842,113846,113862,113872,113874,115135,115137,115149,115151,115162,115164,115167,115188,115191,115194,115227,115233,115236,115269,115272,115275,115316,115321,115335,115338,115351,115356,115379,115381,115396,115406,115421,115428,115448,115463,115481,115484,115501,115509,115525,115531,115563,115576,115608,115618,115653,115667,115713,115727,115769,115780,115793,115799,115832,115835,115862,115872,115912,115922,115939,115946,115964,115967,116008,116021,116036,116039,116062,116065,116077,116080,116099,116104,116125,116128,116143,116146,116180,116192,116207,116210,116235,116238,116257,116260,116292,116295,116319,116325,116355,116362,116375,116378,116380,116382,116388,116391,116394,116406,116409,116411,116465,116467,116471,116477,116486,116489,116496,116498,116521,116524,116528,116530,116548,116554,116556,116589,116592,116598,116602,116605,116625,116630,116634,116641,116661,116666,116670,116673,116693,116696,116782,116786,116789,116795,116798],[10,113371,113367],{"id":113372},"_8gymnasium-风格强化学习接口基础",[57,113374,100637],{"id":100636},[14,113376,113377],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113379,113380],{},"你将实现:",[106,113382,113384],{"className":30379,"code":113383,"language":30381,"meta":22,"style":22},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[112,113385,113386,113396],{"__ignoreMap":22},[115,113387,113388,113391,113393],{"class":117,"line":118},[115,113389,113390],{"class":125},"obs, info ",[115,113392,171],{"class":121},[115,113394,113395],{"class":125}," env.reset()\n",[115,113397,113398,113401,113403],{"class":117,"line":37},[115,113399,113400],{"class":125},"obs, reward, terminated, truncated, info ",[115,113402,171],{"class":121},[115,113404,113405],{"class":125}," env.step(action)\n",[14,113407,113408],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113410,113411,113412,113414],{},"前面章节的代码都是“脚本式”的：在 ",[112,113413,102285],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113416,113417],{},"可以先记住 Gymnasium 环境的核心交互：",[106,113419,113422],{"className":113420,"code":113421,"language":5188,"meta":22},[5186],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[112,113423,113421],{"__ignoreMap":22},[57,113425,100760],{"id":100759},[14,113427,100763],{},[106,113429,113430],{"className":23823,"code":104378,"language":23825,"meta":22,"style":22},[112,113431,113432],{"__ignoreMap":22},[115,113433,113434,113436,113438,113440,113442,113444,113446,113448,113450],{"class":117,"line":118},[115,113435,24577],{"class":1963},[115,113437,26316],{"class":230},[115,113439,23835],{"class":230},[115,113441,26401],{"class":174},[115,113443,104393],{"class":230},[115,113445,100788],{"class":230},[115,113447,102491],{"class":230},[115,113449,100804],{"class":230},[115,113451,104402],{"class":230},[14,113453,102809],{},[106,113455,113457],{"className":23823,"code":113456,"language":23825,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[112,113458,113459],{"__ignoreMap":22},[115,113460,113461,113463,113465,113467,113469],{"class":117,"line":118},[115,113462,23832],{"class":1963},[115,113464,23835],{"class":230},[115,113466,100920],{"class":230},[115,113468,107701],{"class":230},[115,113470,113471],{"class":230}," gymnasium\n",[14,113473,102826],{},[106,113475,113477],{"className":23823,"code":113476,"language":23825,"meta":22,"style":22},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[112,113478,113479,113496,113505],{"__ignoreMap":22},[115,113480,113481,113483,113485,113487,113490,113492,113494],{"class":117,"line":118},[115,113482,30331],{"class":1963},[115,113484,29177],{"class":230},[115,113486,25116],{"class":174},[115,113488,113489],{"class":230}," mujoco-gym-api",[115,113491,100965],{"class":230},[115,113493,100968],{"class":174},[115,113495,100971],{"class":174},[115,113497,113498,113500,113502],{"class":117,"line":37},[115,113499,30331],{"class":1963},[115,113501,100978],{"class":230},[115,113503,113504],{"class":230}," mujoco-gym-api\n",[115,113506,113507,113509,113511,113513,113515],{"class":117,"line":1180},[115,113508,23832],{"class":1963},[115,113510,23835],{"class":230},[115,113512,100920],{"class":230},[115,113514,107701],{"class":230},[115,113516,113471],{"class":230},[14,113518,100994],{},[69,113520,113521,113531,113534,113540],{},[72,113522,113523,113524,113527,113528,28386],{},"本章使用 ",[112,113525,113526],{},"gymnasium","，不是旧版 ",[112,113529,113530],{},"gym",[72,113532,113533],{},"Gymnasium API 与旧 Gym API 有差异。",[72,113535,113536,113537,28386],{},"旧 Gym 常见返回值是 4 个: ",[112,113538,113539],{},"obs, reward, done, info",[72,113541,113542,113543,28386],{},"Gymnasium 返回值是 5 个: ",[112,113544,113545],{},"obs, reward, terminated, truncated, info",[57,113547,101035],{"id":101034},[14,113549,113550],{},"强化学习环境接口包含:",[263,113552,113553,113562],{},[266,113554,113555],{},[269,113556,113557,113560],{},[272,113558,113559],{"align":23737},"方法",[272,113561,102686],{"align":23737},[310,113563,113564,113574,113584,113594],{},[269,113565,113566,113571],{},[315,113567,113568],{"align":23737},[112,113569,113570],{},"reset()",[315,113572,113573],{"align":23737},"重置环境",[269,113575,113576,113581],{},[315,113577,113578],{"align":23737},[112,113579,113580],{},"step(action)",[315,113582,113583],{"align":23737},"执行动作",[269,113585,113586,113591],{},[315,113587,113588],{"align":23737},[112,113589,113590],{},"observation_space",[315,113592,113593],{"align":23737},"观测空间",[269,113595,113596,113601],{},[315,113597,113598],{"align":23737},[112,113599,113600],{},"action_space",[315,113602,23655],{"align":23737},[14,113604,113605],{},"一个最小环境需要完成:",[106,113607,113610],{"className":113608,"code":113609,"language":5188,"meta":22},[5186],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[112,113611,113609],{"__ignoreMap":22},[86,113613,113615,101008,113618,104628],{"id":113614},"terminated-和-truncated-的区别",[112,113616,113617],{},"terminated",[112,113619,113620],{},"truncated",[14,113622,113623],{},"Gymnasium 把“结束”拆成两个概念：",[263,113625,113626,113636],{},[266,113627,113628],{},[269,113629,113630,113632,113634],{},[272,113631,104564],{"align":23737},[272,113633,100690],{"align":23737},[272,113635,21188],{"align":23737},[310,113637,113638,113650],{},[269,113639,113640,113644,113647],{},[315,113641,113642],{"align":23737},[112,113643,113617],{},[315,113645,113646],{"align":23737},"任务自然结束",[315,113648,113649],{"align":23737},"机械臂到达目标、机器人摔倒",[269,113651,113652,113656,113659],{},[315,113653,113654],{"align":23737},[112,113655,113620],{},[315,113657,113658],{"align":23737},"因外部限制截断",[315,113660,113661],{"align":23737},"达到最大步数、时间限制",[14,113663,113664],{},"本章中：",[106,113666,113668],{"className":30379,"code":113667,"language":30381,"meta":22,"style":22},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[112,113669,113670,113685],{"__ignoreMap":22},[115,113671,113672,113675,113677,113680,113682],{"class":117,"line":118},[115,113673,113674],{"class":125},"terminated ",[115,113676,171],{"class":121},[115,113678,113679],{"class":125}," dist ",[115,113681,1035],{"class":121},[115,113683,113684],{"class":174}," 0.05\n",[115,113686,113687,113690,113692,113694,113697,113699,113701],{"class":117,"line":37},[115,113688,113689],{"class":125},"truncated ",[115,113691,171],{"class":121},[115,113693,38874],{"class":174},[115,113695,113696],{"class":125},".steps ",[115,113698,1710],{"class":121},[115,113700,38874],{"class":174},[115,113702,113703],{"class":125},".max_steps\n",[14,113705,113706],{},"也就是：",[69,113708,113709,113712],{},[72,113710,113711],{},"末端距离目标小于 0.05，任务成功结束。",[72,113713,113714],{},"步数超过上限，episode 被截断。",[86,113716,113718,101008,113720],{"id":113717},"observation_space-和-action_space",[112,113719,113590],{},[112,113721,113600],{},[14,113723,113724],{},"这两个对象告诉算法：",[106,113726,113729],{"className":113727,"code":113728,"language":5188,"meta":22},[5186],"观测长什么样\n动作允许多大\n",[112,113730,113728],{"__ignoreMap":22},[14,113732,14634],{},[106,113734,113736],{"className":30379,"code":113735,"language":30381,"meta":22,"style":22},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[112,113737,113738],{"__ignoreMap":22},[115,113739,113740,113742,113745,113747,113750,113753,113756,113758,113760,113763,113765,113767,113769,113771,113773,113775,113777,113780,113782,113784],{"class":117,"line":118},[115,113741,30824],{"class":174},[115,113743,113744],{"class":125},".action_space ",[115,113746,171],{"class":121},[115,113748,113749],{"class":125}," spaces.Box(",[115,113751,113752],{"class":5217},"low",[115,113754,113755],{"class":121},"=-",[115,113757,102393],{"class":174},[115,113759,12436],{"class":125},[115,113761,113762],{"class":5217},"high",[115,113764,171],{"class":121},[115,113766,102393],{"class":174},[115,113768,12436],{"class":125},[115,113770,95953],{"class":5217},[115,113772,171],{"class":121},[115,113774,126],{"class":125},[115,113776,203],{"class":174},[115,113778,113779],{"class":125},",), ",[115,113781,93490],{"class":5217},[115,113783,171],{"class":121},[115,113785,113786],{"class":125},"np.float32)\n",[14,113788,113789,113790,113793],{},"表示动作是 2 维数组，每个值都在 ",[112,113791,113792],{},"[-1, 1]"," 范围内。",[106,113795,113797],{"className":30379,"code":113796,"language":30381,"meta":22,"style":22},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[112,113798,113799],{"__ignoreMap":22},[115,113800,113801,113803,113806,113808,113810,113812,113814,113817,113819,113821,113823,113825,113827,113829,113831,113833,113835,113837],{"class":117,"line":118},[115,113802,30824],{"class":174},[115,113804,113805],{"class":125},".observation_space ",[115,113807,171],{"class":121},[115,113809,113749],{"class":125},[115,113811,113752],{"class":5217},[115,113813,113755],{"class":121},[115,113815,113816],{"class":125},"np.inf, ",[115,113818,113762],{"class":5217},[115,113820,171],{"class":121},[115,113822,113816],{"class":125},[115,113824,95953],{"class":5217},[115,113826,171],{"class":121},[115,113828,126],{"class":125},[115,113830,571],{"class":174},[115,113832,113779],{"class":125},[115,113834,93490],{"class":5217},[115,113836,171],{"class":121},[115,113838,113786],{"class":125},[14,113840,113841],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[86,113843,113845],{"id":113844},"frame_skip-是什么","frame_skip 是什么",[106,113847,113849],{"className":30379,"code":113848,"language":30381,"meta":22,"style":22},"self.frame_skip = 5\n",[112,113850,113851],{"__ignoreMap":22},[115,113852,113853,113855,113858,113860],{"class":117,"line":118},[115,113854,30824],{"class":174},[115,113856,113857],{"class":125},".frame_skip ",[115,113859,171],{"class":121},[115,113861,54417],{"class":174},[14,113863,113864,113865,113868,113869,113871],{},"表示外部调用一次 ",[112,113866,113867],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[112,113870,101205],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[57,113873,101243],{"id":101242},[106,113875,113877],{"className":30379,"code":113876,"language":30381,"meta":22,"style":22},"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",[112,113878,113879,113891,113897,113907,113918,113922,113926,113934,113939,113943,113947,113951,113955,113959,113963,113967,113972,113976,113980,113984,113989,113993,113997,114001,114005,114009,114013,114017,114021,114025,114029,114033,114037,114041,114059,114074,114078,114091,114101,114116,114133,114137,114158,114177,114202,114216,114220,114230,114242,114252,114256,114298,114336,114340,114350,114366,114381,114400,114407,114411,114424,114439,114454,114467,114486,114502,114506,114547,114562,114577,114581,114620,114631,114644,114648,114658,114667,114671,114681,114696,114714,114718,114729,114746,114759,114763,114773,114777,114788,114799,114803,114817,114831,114847,114851,114864,114881,114896,114903,114907,114911,114923,114933,114951,114963,114975,114979,114987,115003,115012,115021,115029,115071,115084,115089,115093,115111,115115,115119,115131],{"__ignoreMap":22},[115,113880,113881,113883,113886,113888],{"class":117,"line":118},[115,113882,30393],{"class":121},[115,113884,113885],{"class":125}," gymnasium ",[115,113887,31384],{"class":121},[115,113889,113890],{"class":125}," gym\n",[115,113892,113893,113895],{"class":117,"line":37},[115,113894,30393],{"class":121},[115,113896,101291],{"class":125},[115,113898,113899,113901,113903,113905],{"class":117,"line":1180},[115,113900,30393],{"class":121},[115,113902,31381],{"class":125},[115,113904,31384],{"class":121},[115,113906,31387],{"class":125},[115,113908,113909,113911,113913,113915],{"class":117,"line":1195},[115,113910,30738],{"class":121},[115,113912,113885],{"class":125},[115,113914,30393],{"class":121},[115,113916,113917],{"class":125}," spaces\n",[115,113919,113920],{"class":117,"line":1201},[115,113921,2400],{"emptyLinePlaceholder":42},[115,113923,113924],{"class":117,"line":1215},[115,113925,2400],{"emptyLinePlaceholder":42},[115,113927,113928,113930,113932],{"class":117,"line":1221},[115,113929,101304],{"class":174},[115,113931,13565],{"class":121},[115,113933,101309],{"class":230},[115,113935,113936],{"class":117,"line":1312},[115,113937,113938],{"class":230},"\u003Cmujoco model=\"gym_reacher\">\n",[115,113940,113941],{"class":117,"line":1318},[115,113942,111728],{"class":230},[115,113944,113945],{"class":117,"line":1330},[115,113946,2400],{"emptyLinePlaceholder":42},[115,113948,113949],{"class":117,"line":1612},[115,113950,101328],{"class":230},[115,113952,113953],{"class":117,"line":1617},[115,113954,111746],{"class":230},[115,113956,113957],{"class":117,"line":1623},[115,113958,2400],{"emptyLinePlaceholder":42},[115,113960,113961],{"class":117,"line":1628},[115,113962,111755],{"class":230},[115,113964,113965],{"class":117,"line":1642},[115,113966,111760],{"class":230},[115,113968,113969],{"class":117,"line":1647},[115,113970,113971],{"class":230},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[115,113973,113974],{"class":117,"line":1653},[115,113975,2400],{"emptyLinePlaceholder":42},[115,113977,113978],{"class":117,"line":1674},[115,113979,111774],{"class":230},[115,113981,113982],{"class":117,"line":1679},[115,113983,111779],{"class":230},[115,113985,113986],{"class":117,"line":1693},[115,113987,113988],{"class":230},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[115,113990,113991],{"class":117,"line":1698},[115,113992,111789],{"class":230},[115,113994,113995],{"class":117,"line":1727},[115,113996,106428],{"class":230},[115,113998,113999],{"class":117,"line":1732},[115,114000,101357],{"class":230},[115,114002,114003],{"class":117,"line":1749},[115,114004,101362],{"class":230},[115,114006,114007],{"class":117,"line":1754},[115,114008,2400],{"emptyLinePlaceholder":42},[115,114010,114011],{"class":117,"line":1759},[115,114012,106445],{"class":230},[115,114014,114015],{"class":117,"line":1764},[115,114016,111814],{"class":230},[115,114018,114019],{"class":117,"line":1778},[115,114020,111819],{"class":230},[115,114022,114023],{"class":117,"line":1783},[115,114024,106455],{"class":230},[115,114026,114027],{"class":117,"line":2577},[115,114028,101367],{"class":230},[115,114030,114031],{"class":117,"line":2591},[115,114032,95688],{"class":230},[115,114034,114035],{"class":117,"line":2599},[115,114036,2400],{"emptyLinePlaceholder":42},[115,114038,114039],{"class":117,"line":2604},[115,114040,2400],{"emptyLinePlaceholder":42},[115,114042,114043,114045,114048,114050,114052,114054,114057],{"class":117,"line":2610},[115,114044,14695],{"class":121},[115,114046,114047],{"class":1963}," ReacherEnv",[115,114049,126],{"class":125},[115,114051,113530],{"class":1963},[115,114053,683],{"class":125},[115,114055,114056],{"class":1963},"Env",[115,114058,30787],{"class":125},[115,114060,114061,114064,114066,114068,114071],{"class":117,"line":2616},[115,114062,114063],{"class":125},"    metadata ",[115,114065,171],{"class":121},[115,114067,4448],{"class":125},[115,114069,114070],{"class":230},"\"render_modes\"",[115,114072,114073],{"class":125},": []}\n",[115,114075,114076],{"class":117,"line":2621},[115,114077,2400],{"emptyLinePlaceholder":42},[115,114079,114080,114082,114084,114087,114089],{"class":117,"line":7949},[115,114081,30802],{"class":121},[115,114083,30805],{"class":174},[115,114085,114086],{"class":125},"(self) -> ",[115,114088,95676],{"class":174},[115,114090,3739],{"class":125},[115,114092,114093,114095,114097,114099],{"class":117,"line":7973},[115,114094,30818],{"class":174},[115,114096,17262],{"class":125},[115,114098,30830],{"class":174},[115,114100,1976],{"class":125},[115,114102,114103,114105,114108,114110,114112,114114],{"class":117,"line":7978},[115,114104,30846],{"class":174},[115,114106,114107],{"class":125},".model ",[115,114109,171],{"class":121},[115,114111,101402],{"class":125},[115,114113,101304],{"class":174},[115,114115,132],{"class":125},[115,114117,114118,114120,114123,114125,114128,114130],{"class":117,"line":7984},[115,114119,30846],{"class":174},[115,114121,114122],{"class":125},".data ",[115,114124,171],{"class":121},[115,114126,114127],{"class":125}," mujoco.MjData(",[115,114129,30824],{"class":174},[115,114131,114132],{"class":125},".model)\n",[115,114134,114135],{"class":117,"line":8011},[115,114136,2400],{"emptyLinePlaceholder":42},[115,114138,114139,114141,114144,114146,114149,114151,114154,114156],{"class":117,"line":8016},[115,114140,30846],{"class":174},[115,114142,114143],{"class":125},".tip_site_id ",[115,114145,171],{"class":121},[115,114147,114148],{"class":125}," mujoco.mj_name2id(",[115,114150,30824],{"class":174},[115,114152,114153],{"class":125},".model, mujoco.mjtObj.mjOBJ_SITE, ",[115,114155,111526],{"class":230},[115,114157,132],{"class":125},[115,114159,114160,114162,114165,114167,114169,114171,114173,114175],{"class":117,"line":8022},[115,114161,30846],{"class":174},[115,114163,114164],{"class":125},".target_site_id ",[115,114166,171],{"class":121},[115,114168,114148],{"class":125},[115,114170,30824],{"class":174},[115,114172,114153],{"class":125},[115,114174,111949],{"class":230},[115,114176,132],{"class":125},[115,114178,114179,114181,114183,114185,114187,114189,114192,114194,114196,114198,114200],{"class":117,"line":8034},[115,114180,2497],{"class":121},[115,114182,38874],{"class":174},[115,114184,114143],{"class":125},[115,114186,1035],{"class":121},[115,114188,4093],{"class":174},[115,114190,114191],{"class":121}," or",[115,114193,38874],{"class":174},[115,114195,114164],{"class":125},[115,114197,1035],{"class":121},[115,114199,4093],{"class":174},[115,114201,3739],{"class":125},[115,114203,114204,114207,114209,114211,114214],{"class":117,"line":8046},[115,114205,114206],{"class":121},"            raise",[115,114208,103425],{"class":174},[115,114210,126],{"class":125},[115,114212,114213],{"class":230},"\"required sites not found\"",[115,114215,132],{"class":125},[115,114217,114218],{"class":117,"line":8058},[115,114219,2400],{"emptyLinePlaceholder":42},[115,114221,114222,114224,114226,114228],{"class":117,"line":9717},[115,114223,30846],{"class":174},[115,114225,113857],{"class":125},[115,114227,171],{"class":121},[115,114229,54417],{"class":174},[115,114231,114232,114234,114237,114239],{"class":117,"line":9742},[115,114233,30846],{"class":174},[115,114235,114236],{"class":125},".max_steps ",[115,114238,171],{"class":121},[115,114240,114241],{"class":174}," 200\n",[115,114243,114244,114246,114248,114250],{"class":117,"line":9765},[115,114245,30846],{"class":174},[115,114247,113696],{"class":125},[115,114249,171],{"class":121},[115,114251,47334],{"class":174},[115,114253,114254],{"class":117,"line":9789},[115,114255,2400],{"emptyLinePlaceholder":42},[115,114257,114258,114260,114262,114264,114266,114268,114270,114272,114274,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296],{"class":117,"line":9794},[115,114259,30846],{"class":174},[115,114261,113744],{"class":125},[115,114263,171],{"class":121},[115,114265,113749],{"class":125},[115,114267,113752],{"class":5217},[115,114269,113755],{"class":121},[115,114271,102393],{"class":174},[115,114273,12436],{"class":125},[115,114275,113762],{"class":5217},[115,114277,171],{"class":121},[115,114279,102393],{"class":174},[115,114281,12436],{"class":125},[115,114283,95953],{"class":5217},[115,114285,171],{"class":121},[115,114287,126],{"class":125},[115,114289,203],{"class":174},[115,114291,113779],{"class":125},[115,114293,93490],{"class":5217},[115,114295,171],{"class":121},[115,114297,113786],{"class":125},[115,114299,114300,114302,114304,114306,114308,114310,114312,114314,114316,114318,114320,114322,114324,114326,114328,114330,114332,114334],{"class":117,"line":9799},[115,114301,30846],{"class":174},[115,114303,113805],{"class":125},[115,114305,171],{"class":121},[115,114307,113749],{"class":125},[115,114309,113752],{"class":5217},[115,114311,113755],{"class":121},[115,114313,113816],{"class":125},[115,114315,113762],{"class":5217},[115,114317,171],{"class":121},[115,114319,113816],{"class":125},[115,114321,95953],{"class":5217},[115,114323,171],{"class":121},[115,114325,126],{"class":125},[115,114327,571],{"class":174},[115,114329,113779],{"class":125},[115,114331,93490],{"class":5217},[115,114333,171],{"class":121},[115,114335,113786],{"class":125},[115,114337,114338],{"class":117,"line":9804},[115,114339,2400],{"emptyLinePlaceholder":42},[115,114341,114342,114344,114347],{"class":117,"line":9813},[115,114343,30802],{"class":121},[115,114345,114346],{"class":1963}," _get_obs",[115,114348,114349],{"class":125},"(self) -> np.ndarray:\n",[115,114351,114352,114354,114356,114358,114361,114363],{"class":117,"line":9818},[115,114353,112127],{"class":125},[115,114355,171],{"class":121},[115,114357,38874],{"class":174},[115,114359,114360],{"class":125},".data.site_xpos[",[115,114362,30824],{"class":174},[115,114364,114365],{"class":125},".tip_site_id].copy()\n",[115,114367,114368,114370,114372,114374,114376,114378],{"class":117,"line":9824},[115,114369,112140],{"class":125},[115,114371,171],{"class":121},[115,114373,38874],{"class":174},[115,114375,114360],{"class":125},[115,114377,30824],{"class":174},[115,114379,114380],{"class":125},".target_site_id].copy()\n",[115,114382,114383,114385,114387,114390,114392,114395,114397],{"class":117,"line":9845},[115,114384,110172],{"class":125},[115,114386,171],{"class":121},[115,114388,114389],{"class":125}," np.concatenate([",[115,114391,30824],{"class":174},[115,114393,114394],{"class":125},".data.qpos.copy(), ",[115,114396,30824],{"class":174},[115,114398,114399],{"class":125},".data.qvel.copy(), tip, target])\n",[115,114401,114402,114404],{"class":117,"line":9851},[115,114403,14753],{"class":121},[115,114405,114406],{"class":125}," obs.astype(np.float32)\n",[115,114408,114409],{"class":117,"line":9865},[115,114410,2400],{"emptyLinePlaceholder":42},[115,114412,114413,114415,114418,114420,114422],{"class":117,"line":9871},[115,114414,30802],{"class":121},[115,114416,114417],{"class":1963}," _get_reward",[115,114419,114086],{"class":125},[115,114421,165],{"class":174},[115,114423,3739],{"class":125},[115,114425,114426,114428,114430,114432,114434,114436],{"class":117,"line":9898},[115,114427,112127],{"class":125},[115,114429,171],{"class":121},[115,114431,38874],{"class":174},[115,114433,114360],{"class":125},[115,114435,30824],{"class":174},[115,114437,114438],{"class":125},".tip_site_id]\n",[115,114440,114441,114443,114445,114447,114449,114451],{"class":117,"line":9907},[115,114442,112140],{"class":125},[115,114444,171],{"class":121},[115,114446,38874],{"class":174},[115,114448,114360],{"class":125},[115,114450,30824],{"class":174},[115,114452,114453],{"class":125},".target_site_id]\n",[115,114455,114456,114459,114461,114463,114465],{"class":117,"line":9913},[115,114457,114458],{"class":125},"        dist ",[115,114460,171],{"class":121},[115,114462,111591],{"class":125},[115,114464,657],{"class":121},[115,114466,111596],{"class":125},[115,114468,114469,114472,114474,114476,114478,114481,114483],{"class":117,"line":9921},[115,114470,114471],{"class":125},"        control_cost ",[115,114473,171],{"class":121},[115,114475,112027],{"class":174},[115,114477,6519],{"class":121},[115,114479,114480],{"class":125}," np.sum(np.square(",[115,114482,30824],{"class":174},[115,114484,114485],{"class":125},".data.ctrl))\n",[115,114487,114488,114490,114492,114494,114496,114498,114500],{"class":117,"line":9926},[115,114489,14753],{"class":121},[115,114491,109787],{"class":174},[115,114493,126],{"class":125},[115,114495,657],{"class":121},[115,114497,111586],{"class":125},[115,114499,657],{"class":121},[115,114501,112049],{"class":125},[115,114503,114504],{"class":117,"line":16605},[115,114505,2400],{"emptyLinePlaceholder":42},[115,114507,114508,114510,114513,114516,114518,114521,114523,114525,114527,114529,114531,114534,114537,114539,114541,114543,114545],{"class":117,"line":16611},[115,114509,30802],{"class":121},[115,114511,114512],{"class":1963}," reset",[115,114514,114515],{"class":125},"(self, ",[115,114517,580],{"class":121},[115,114519,114520],{"class":125},", seed: ",[115,114522,129],{"class":174},[115,114524,25110],{"class":121},[115,114526,38934],{"class":174},[115,114528,13565],{"class":121},[115,114530,38934],{"class":174},[115,114532,114533],{"class":125},", options: ",[115,114535,114536],{"class":174},"dict",[115,114538,25110],{"class":121},[115,114540,38934],{"class":174},[115,114542,13565],{"class":121},[115,114544,38934],{"class":174},[115,114546,30787],{"class":125},[115,114548,114549,114551,114554,114557,114559],{"class":117,"line":16634},[115,114550,30818],{"class":174},[115,114552,114553],{"class":125},"().reset(",[115,114555,114556],{"class":5217},"seed",[115,114558,171],{"class":121},[115,114560,114561],{"class":125},"seed)\n",[115,114563,114564,114567,114569,114572,114574],{"class":117,"line":16640},[115,114565,114566],{"class":125},"        mujoco.mj_resetData(",[115,114568,30824],{"class":174},[115,114570,114571],{"class":125},".model, ",[115,114573,30824],{"class":174},[115,114575,114576],{"class":125},".data)\n",[115,114578,114579],{"class":117,"line":16663},[115,114580,2400],{"emptyLinePlaceholder":42},[115,114582,114583,114585,114588,114590,114592,114595,114597,114599,114601,114603,114605,114607,114609,114611,114613,114615,114617],{"class":117,"line":16677},[115,114584,30846],{"class":174},[115,114586,114587],{"class":125},".data.qpos[:] ",[115,114589,171],{"class":121},[115,114591,38874],{"class":174},[115,114593,114594],{"class":125},".np_random.uniform(",[115,114596,113752],{"class":5217},[115,114598,113755],{"class":121},[115,114600,86200],{"class":174},[115,114602,12436],{"class":125},[115,114604,113762],{"class":5217},[115,114606,171],{"class":121},[115,114608,86200],{"class":174},[115,114610,12436],{"class":125},[115,114612,31497],{"class":5217},[115,114614,171],{"class":121},[115,114616,30824],{"class":174},[115,114618,114619],{"class":125},".model.nq)\n",[115,114621,114622,114624,114627,114629],{"class":117,"line":16697},[115,114623,30846],{"class":174},[115,114625,114626],{"class":125},".data.qvel[:] ",[115,114628,171],{"class":121},[115,114630,104751],{"class":174},[115,114632,114633,114636,114638,114640,114642],{"class":117,"line":16703},[115,114634,114635],{"class":125},"        mujoco.mj_forward(",[115,114637,30824],{"class":174},[115,114639,114571],{"class":125},[115,114641,30824],{"class":174},[115,114643,114576],{"class":125},[115,114645,114646],{"class":117,"line":16714},[115,114647,2400],{"emptyLinePlaceholder":42},[115,114649,114650,114652,114654,114656],{"class":117,"line":16737},[115,114651,30846],{"class":174},[115,114653,113696],{"class":125},[115,114655,171],{"class":121},[115,114657,47334],{"class":174},[115,114659,114660,114662,114664],{"class":117,"line":16759},[115,114661,14753],{"class":121},[115,114663,38874],{"class":174},[115,114665,114666],{"class":125},"._get_obs(), {}\n",[115,114668,114669],{"class":117,"line":16764},[115,114670,2400],{"emptyLinePlaceholder":42},[115,114672,114673,114675,114678],{"class":117,"line":16770},[115,114674,30802],{"class":121},[115,114676,114677],{"class":1963}," step",[115,114679,114680],{"class":125},"(self, action):\n",[115,114682,114683,114685,114687,114690,114692,114694],{"class":117,"line":16784},[115,114684,110212],{"class":125},[115,114686,171],{"class":121},[115,114688,114689],{"class":125}," np.asarray(action, ",[115,114691,93490],{"class":5217},[115,114693,171],{"class":121},[115,114695,113786],{"class":125},[115,114697,114698,114700,114702,114704,114706,114709,114711],{"class":117,"line":16797},[115,114699,110212],{"class":125},[115,114701,171],{"class":121},[115,114703,107437],{"class":125},[115,114705,30824],{"class":174},[115,114707,114708],{"class":125},".action_space.low, ",[115,114710,30824],{"class":174},[115,114712,114713],{"class":125},".action_space.high)\n",[115,114715,114716],{"class":117,"line":16802},[115,114717,2400],{"emptyLinePlaceholder":42},[115,114719,114720,114722,114725,114727],{"class":117,"line":16816},[115,114721,30846],{"class":174},[115,114723,114724],{"class":125},".data.ctrl[:] ",[115,114726,171],{"class":121},[115,114728,107460],{"class":125},[115,114730,114731,114733,114735,114737,114739,114741,114743],{"class":117,"line":16821},[115,114732,3403],{"class":121},[115,114734,101491],{"class":125},[115,114736,26044],{"class":121},[115,114738,32444],{"class":174},[115,114740,126],{"class":125},[115,114742,30824],{"class":174},[115,114744,114745],{"class":125},".frame_skip):\n",[115,114747,114748,114751,114753,114755,114757],{"class":117,"line":16827},[115,114749,114750],{"class":125},"            mujoco.mj_step(",[115,114752,30824],{"class":174},[115,114754,114571],{"class":125},[115,114756,30824],{"class":174},[115,114758,114576],{"class":125},[115,114760,114761],{"class":117,"line":16832},[115,114762,2400],{"emptyLinePlaceholder":42},[115,114764,114765,114767,114769,114771],{"class":117,"line":16846},[115,114766,30846],{"class":174},[115,114768,113696],{"class":125},[115,114770,9478],{"class":121},[115,114772,55689],{"class":174},[115,114774,114775],{"class":117,"line":16851},[115,114776,2400],{"emptyLinePlaceholder":42},[115,114778,114779,114781,114783,114785],{"class":117,"line":16856},[115,114780,110172],{"class":125},[115,114782,171],{"class":121},[115,114784,38874],{"class":174},[115,114786,114787],{"class":125},"._get_obs()\n",[115,114789,114790,114792,114794,114796],{"class":117,"line":16870},[115,114791,110277],{"class":125},[115,114793,171],{"class":121},[115,114795,38874],{"class":174},[115,114797,114798],{"class":125},"._get_reward()\n",[115,114800,114801],{"class":117,"line":16882},[115,114802,2400],{"emptyLinePlaceholder":42},[115,114804,114805,114807,114809,114811,114813,114815],{"class":117,"line":16887},[115,114806,112127],{"class":125},[115,114808,171],{"class":121},[115,114810,38874],{"class":174},[115,114812,114360],{"class":125},[115,114814,30824],{"class":174},[115,114816,114438],{"class":125},[115,114818,114819,114821,114823,114825,114827,114829],{"class":117,"line":16900},[115,114820,112140],{"class":125},[115,114822,171],{"class":121},[115,114824,38874],{"class":174},[115,114826,114360],{"class":125},[115,114828,30824],{"class":174},[115,114830,114453],{"class":125},[115,114832,114833,114835,114837,114839,114842,114844],{"class":117,"line":16905},[115,114834,114458],{"class":125},[115,114836,171],{"class":121},[115,114838,109787],{"class":174},[115,114840,114841],{"class":125},"(np.linalg.norm(tip ",[115,114843,657],{"class":121},[115,114845,114846],{"class":125}," target))\n",[115,114848,114849],{"class":117,"line":16910},[115,114850,2400],{"emptyLinePlaceholder":42},[115,114852,114853,114856,114858,114860,114862],{"class":117,"line":16915},[115,114854,114855],{"class":125},"        terminated ",[115,114857,171],{"class":121},[115,114859,113679],{"class":125},[115,114861,1035],{"class":121},[115,114863,113684],{"class":174},[115,114865,114866,114869,114871,114873,114875,114877,114879],{"class":117,"line":16928},[115,114867,114868],{"class":125},"        truncated ",[115,114870,171],{"class":121},[115,114872,38874],{"class":174},[115,114874,113696],{"class":125},[115,114876,1710],{"class":121},[115,114878,38874],{"class":174},[115,114880,113703],{"class":125},[115,114882,114883,114886,114888,114890,114893],{"class":117,"line":16933},[115,114884,114885],{"class":125},"        info ",[115,114887,171],{"class":121},[115,114889,4448],{"class":125},[115,114891,114892],{"class":230},"\"distance\"",[115,114894,114895],{"class":125},": dist}\n",[115,114897,114898,114900],{"class":117,"line":32634},[115,114899,14753],{"class":121},[115,114901,114902],{"class":125}," obs, reward, terminated, truncated, info\n",[115,114904,114905],{"class":117,"line":32640},[115,114906,2400],{"emptyLinePlaceholder":42},[115,114908,114909],{"class":117,"line":32646},[115,114910,2400],{"emptyLinePlaceholder":42},[115,114912,114913,114915,114917,114919,114921],{"class":117,"line":32652},[115,114914,31948],{"class":121},[115,114916,1973],{"class":1963},[115,114918,101388],{"class":125},[115,114920,95676],{"class":174},[115,114922,3739],{"class":125},[115,114924,114925,114928,114930],{"class":117,"line":32658},[115,114926,114927],{"class":125},"    env ",[115,114929,171],{"class":121},[115,114931,114932],{"class":125}," ReacherEnv()\n",[115,114934,114935,114938,114940,114943,114945,114947,114949],{"class":117,"line":32669},[115,114936,114937],{"class":125},"    obs, info ",[115,114939,171],{"class":121},[115,114941,114942],{"class":125}," env.reset(",[115,114944,114556],{"class":5217},[115,114946,171],{"class":121},[115,114948,317],{"class":174},[115,114950,132],{"class":125},[115,114952,114953,114955,114957,114960],{"class":117,"line":32675},[115,114954,31300],{"class":174},[115,114956,126],{"class":125},[115,114958,114959],{"class":230},"\"initial obs shape:\"",[115,114961,114962],{"class":125},", obs.shape)\n",[115,114964,114965,114967,114969,114972],{"class":117,"line":32695},[115,114966,31300],{"class":174},[115,114968,126],{"class":125},[115,114970,114971],{"class":230},"\"initial info:\"",[115,114973,114974],{"class":125},", info)\n",[115,114976,114977],{"class":117,"line":32701},[115,114978,2400],{"emptyLinePlaceholder":42},[115,114980,114981,114983,114985],{"class":117,"line":32712},[115,114982,110143],{"class":125},[115,114984,171],{"class":121},[115,114986,104751],{"class":174},[115,114988,114989,114991,114993,114995,114997,114999,115001],{"class":117,"line":32718},[115,114990,3201],{"class":121},[115,114992,31617],{"class":125},[115,114994,26044],{"class":121},[115,114996,32444],{"class":174},[115,114998,126],{"class":125},[115,115000,825],{"class":174},[115,115002,30787],{"class":125},[115,115004,115005,115007,115009],{"class":117,"line":32724},[115,115006,110212],{"class":125},[115,115008,171],{"class":121},[115,115010,115011],{"class":125}," env.action_space.sample()\n",[115,115013,115014,115017,115019],{"class":117,"line":32730},[115,115015,115016],{"class":125},"        obs, reward, terminated, truncated, info ",[115,115018,171],{"class":121},[115,115020,113405],{"class":125},[115,115022,115023,115025,115027],{"class":117,"line":32736},[115,115024,110287],{"class":125},[115,115026,9478],{"class":121},[115,115028,110292],{"class":125},[115,115030,115031,115033,115035,115037,115039,115042,115044,115046,115049,115051,115053,115056,115058,115060,115063,115065,115067,115069],{"class":117,"line":32742},[115,115032,32452],{"class":174},[115,115034,126],{"class":125},[115,115036,110321],{"class":230},[115,115038,110324],{"class":125},[115,115040,115041],{"class":230},"\"reward:\"",[115,115043,12436],{"class":125},[115,115045,32019],{"class":174},[115,115047,115048],{"class":125},"(reward, ",[115,115050,197],{"class":174},[115,115052,110335],{"class":125},[115,115054,115055],{"class":230},"\"distance:\"",[115,115057,12436],{"class":125},[115,115059,32019],{"class":174},[115,115061,115062],{"class":125},"(info[",[115,115064,114892],{"class":230},[115,115066,112192],{"class":125},[115,115068,197],{"class":174},[115,115070,30498],{"class":125},[115,115072,115073,115075,115078,115081],{"class":117,"line":32748},[115,115074,2497],{"class":121},[115,115076,115077],{"class":125}," terminated ",[115,115079,115080],{"class":121},"or",[115,115082,115083],{"class":125}," truncated:\n",[115,115085,115086],{"class":117,"line":32754},[115,115087,115088],{"class":121},"            break\n",[115,115090,115091],{"class":117,"line":32774},[115,115092,2400],{"emptyLinePlaceholder":42},[115,115094,115095,115097,115099,115101,115103,115105,115107,115109],{"class":117,"line":32780},[115,115096,31300],{"class":174},[115,115098,126],{"class":125},[115,115100,110366],{"class":230},[115,115102,12436],{"class":125},[115,115104,32019],{"class":174},[115,115106,110373],{"class":125},[115,115108,197],{"class":174},[115,115110,30498],{"class":125},[115,115112,115113],{"class":117,"line":32796},[115,115114,2400],{"emptyLinePlaceholder":42},[115,115116,115117],{"class":117,"line":32802},[115,115118,2400],{"emptyLinePlaceholder":42},[115,115120,115121,115123,115125,115127,115129],{"class":117,"line":32816},[115,115122,1531],{"class":121},[115,115124,31221],{"class":174},[115,115126,101549],{"class":121},[115,115128,101552],{"class":230},[115,115130,3739],{"class":125},[115,115132,115133],{"class":117,"line":32822},[115,115134,101559],{"class":125},[14,115136,103560],{},[106,115138,115140],{"className":23823,"code":115139,"language":23825,"meta":22,"style":22},"touch ch8_gym_env.py\n",[112,115141,115142],{"__ignoreMap":22},[115,115143,115144,115146],{"class":117,"line":118},[115,115145,101273],{"class":1963},[115,115147,115148],{"class":230}," ch8_gym_env.py\n",[14,115150,110434],{},[106,115152,115154],{"className":23823,"code":115153,"language":23825,"meta":22,"style":22},"python ch8_gym_env.py\n",[112,115155,115156],{"__ignoreMap":22},[115,115157,115158,115160],{"class":117,"line":118},[115,115159,30381],{"class":1963},[115,115161,115148],{"class":230},[86,115163,101562],{"id":101562},[14,115165,115166],{},"继承 Gymnasium 环境：",[106,115168,115170],{"className":30379,"code":115169,"language":30381,"meta":22,"style":22},"class ReacherEnv(gym.Env):\n",[112,115171,115172],{"__ignoreMap":22},[115,115173,115174,115176,115178,115180,115182,115184,115186],{"class":117,"line":118},[115,115175,14695],{"class":121},[115,115177,114047],{"class":1963},[115,115179,126],{"class":125},[115,115181,113530],{"class":1963},[115,115183,683],{"class":125},[115,115185,114056],{"class":1963},[115,115187,30787],{"class":125},[14,115189,115190],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115192,115193],{},"初始化模型：",[106,115195,115197],{"className":30379,"code":115196,"language":30381,"meta":22,"style":22},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[112,115198,115199,115213],{"__ignoreMap":22},[115,115200,115201,115203,115205,115207,115209,115211],{"class":117,"line":118},[115,115202,30824],{"class":174},[115,115204,114107],{"class":125},[115,115206,171],{"class":121},[115,115208,101402],{"class":125},[115,115210,101304],{"class":174},[115,115212,132],{"class":125},[115,115214,115215,115217,115219,115221,115223,115225],{"class":117,"line":37},[115,115216,30824],{"class":174},[115,115218,114122],{"class":125},[115,115220,171],{"class":121},[115,115222,114127],{"class":125},[115,115224,30824],{"class":174},[115,115226,114132],{"class":125},[14,115228,115229,115230,115232],{},"这和前面章节一样，只是现在放到了类的 ",[112,115231,30830],{}," 里。",[14,115234,115235],{},"缓存 site ID：",[106,115237,115239],{"className":30379,"code":115238,"language":30381,"meta":22,"style":22},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[112,115240,115241,115255],{"__ignoreMap":22},[115,115242,115243,115245,115247,115249,115251,115253],{"class":117,"line":118},[115,115244,30824],{"class":174},[115,115246,114143],{"class":125},[115,115248,171],{"class":121},[115,115250,114148],{"class":125},[115,115252,89544],{"class":174},[115,115254,132],{"class":125},[115,115256,115257,115259,115261,115263,115265,115267],{"class":117,"line":37},[115,115258,30824],{"class":174},[115,115260,114164],{"class":125},[115,115262,171],{"class":121},[115,115264,114148],{"class":125},[115,115266,89544],{"class":174},[115,115268,132],{"class":125},[14,115270,115271],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115273,115274],{},"reset：",[106,115276,115278],{"className":30379,"code":115277,"language":30381,"meta":22,"style":22},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[112,115279,115280],{"__ignoreMap":22},[115,115281,115282,115284,115286,115288,115290,115292,115294,115296,115298,115300,115302,115304,115306,115308,115310,115312,115314],{"class":117,"line":118},[115,115283,31948],{"class":121},[115,115285,114512],{"class":1963},[115,115287,114515],{"class":125},[115,115289,580],{"class":121},[115,115291,114520],{"class":125},[115,115293,129],{"class":174},[115,115295,25110],{"class":121},[115,115297,38934],{"class":174},[115,115299,13565],{"class":121},[115,115301,38934],{"class":174},[115,115303,114533],{"class":125},[115,115305,114536],{"class":174},[115,115307,25110],{"class":121},[115,115309,38934],{"class":174},[115,115311,13565],{"class":121},[115,115313,38934],{"class":174},[115,115315,30787],{"class":125},[14,115317,115318,115320],{},[112,115319,70046],{}," 做四件事：",[69,115322,115323,115326,115329,115332],{},[72,115324,115325],{},"设置随机种子。",[72,115327,115328],{},"重置 MuJoCo data。",[72,115330,115331],{},"随机初始化关节角。",[72,115333,115334],{},"返回初始观测和 info。",[14,115336,115337],{},"step：",[106,115339,115341],{"className":30379,"code":115340,"language":30381,"meta":22,"style":22},"def step(self, action):\n",[112,115342,115343],{"__ignoreMap":22},[115,115344,115345,115347,115349],{"class":117,"line":118},[115,115346,31948],{"class":121},[115,115348,114677],{"class":1963},[115,115350,114680],{"class":125},[14,115352,115353,115355],{},[112,115354,107124],{}," 做六件事：",[69,115357,115358,115361,115367,115370,115373,115376],{},[72,115359,115360],{},"检查并裁剪 action。",[72,115362,115363,115364,28386],{},"写入 ",[112,115365,115366],{},"self.data.ctrl",[72,115368,115369],{},"连续推进若干个 MuJoCo 物理步。",[72,115371,115372],{},"计算新观测。",[72,115374,115375],{},"计算奖励和结束条件。",[72,115377,115378],{},"返回 Gymnasium 标准五元组。",[86,115380,101698],{"id":101698},[106,115382,115384],{"className":30379,"code":115383,"language":30381,"meta":22,"style":22},"import gymnasium as gym\n",[112,115385,115386],{"__ignoreMap":22},[115,115387,115388,115390,115392,115394],{"class":117,"line":118},[115,115389,30393],{"class":121},[115,115391,113885],{"class":125},[115,115393,31384],{"class":121},[115,115395,113890],{"class":125},[14,115397,115398,115399,115401,115402,115405],{},"导入 Gymnasium，并起别名 ",[112,115400,113530],{},"。后面写 ",[112,115403,115404],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[106,115407,115409],{"className":30379,"code":115408,"language":30381,"meta":22,"style":22},"from gymnasium import spaces\n",[112,115410,115411],{"__ignoreMap":22},[115,115412,115413,115415,115417,115419],{"class":117,"line":118},[115,115414,30738],{"class":121},[115,115416,113885],{"class":125},[115,115418,30393],{"class":121},[115,115420,113917],{"class":125},[14,115422,115423,115424,115427],{},"导入空间定义工具。",[112,115425,115426],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[106,115429,115430],{"className":30379,"code":115169,"language":30381,"meta":22,"style":22},[112,115431,115432],{"__ignoreMap":22},[115,115433,115434,115436,115438,115440,115442,115444,115446],{"class":117,"line":118},[115,115435,14695],{"class":121},[115,115437,114047],{"class":1963},[115,115439,126],{"class":125},[115,115441,113530],{"class":1963},[115,115443,683],{"class":125},[115,115445,114056],{"class":1963},[115,115447,30787],{"class":125},[14,115449,115450,115451,115454,115455,115457,115458,101008,115460,115462],{},"定义一个类，名字叫 ",[112,115452,115453],{},"ReacherEnv","。括号里的 ",[112,115456,115404],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[112,115459,70046],{},[112,115461,107124],{}," 这两个核心方法。",[106,115464,115466],{"className":30379,"code":115465,"language":30381,"meta":22,"style":22},"metadata = {\"render_modes\": []}\n",[112,115467,115468],{"__ignoreMap":22},[115,115469,115470,115473,115475,115477,115479],{"class":117,"line":118},[115,115471,115472],{"class":125},"metadata ",[115,115474,171],{"class":121},[115,115476,4448],{"class":125},[115,115478,114070],{"class":230},[115,115480,114073],{"class":125},[14,115482,115483],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[106,115485,115487],{"className":30379,"code":115486,"language":30381,"meta":22,"style":22},"def __init__(self) -> None:\n",[112,115488,115489],{"__ignoreMap":22},[115,115490,115491,115493,115495,115497,115499],{"class":117,"line":118},[115,115492,31948],{"class":121},[115,115494,30805],{"class":174},[115,115496,114086],{"class":125},[115,115498,95676],{"class":174},[115,115500,3739],{"class":125},[14,115502,115503,115505,115506,28386],{},[112,115504,30830],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[112,115507,115508],{},"env = ReacherEnv()",[106,115510,115512],{"className":30379,"code":115511,"language":30381,"meta":22,"style":22},"super().__init__()\n",[112,115513,115514],{"__ignoreMap":22},[115,115515,115516,115519,115521,115523],{"class":117,"line":118},[115,115517,115518],{"class":174},"super",[115,115520,17262],{"class":125},[115,115522,30830],{"class":174},[115,115524,1976],{"class":125},[14,115526,115527,115528,115530],{},"调用父类 ",[112,115529,115404],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[106,115532,115533],{"className":30379,"code":115196,"language":30381,"meta":22,"style":22},[112,115534,115535,115549],{"__ignoreMap":22},[115,115536,115537,115539,115541,115543,115545,115547],{"class":117,"line":118},[115,115538,30824],{"class":174},[115,115540,114107],{"class":125},[115,115542,171],{"class":121},[115,115544,101402],{"class":125},[115,115546,101304],{"class":174},[115,115548,132],{"class":125},[115,115550,115551,115553,115555,115557,115559,115561],{"class":117,"line":37},[115,115552,30824],{"class":174},[115,115554,114122],{"class":125},[115,115556,171],{"class":121},[115,115558,114127],{"class":125},[115,115560,30824],{"class":174},[115,115562,114132],{"class":125},[14,115564,115565,115566,115568,115569,101008,115572,115575],{},"把 MuJoCo 模型和状态保存到 ",[112,115567,30824],{}," 上。",[112,115570,115571],{},"self.model",[112,115573,115574],{},"self.data"," 表示这个环境对象自己的模型和状态。",[106,115577,115578],{"className":30379,"code":115238,"language":30381,"meta":22,"style":22},[112,115579,115580,115594],{"__ignoreMap":22},[115,115581,115582,115584,115586,115588,115590,115592],{"class":117,"line":118},[115,115583,30824],{"class":174},[115,115585,114143],{"class":125},[115,115587,171],{"class":121},[115,115589,114148],{"class":125},[115,115591,89544],{"class":174},[115,115593,132],{"class":125},[115,115595,115596,115598,115600,115602,115604,115606],{"class":117,"line":37},[115,115597,30824],{"class":174},[115,115599,114164],{"class":125},[115,115601,171],{"class":121},[115,115603,114148],{"class":125},[115,115605,89544],{"class":174},[115,115607,132],{"class":125},[14,115609,115610,115611,101008,115614,115617],{},"提前查好 tip 和 target 的 site ID。这样 ",[112,115612,115613],{},"_get_obs",[112,115615,115616],{},"_get_reward"," 里就不用每次按名字查找。",[106,115619,115621],{"className":30379,"code":115620,"language":30381,"meta":22,"style":22},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[112,115622,115623,115633,115643],{"__ignoreMap":22},[115,115624,115625,115627,115629,115631],{"class":117,"line":118},[115,115626,30824],{"class":174},[115,115628,113857],{"class":125},[115,115630,171],{"class":121},[115,115632,54417],{"class":174},[115,115634,115635,115637,115639,115641],{"class":117,"line":37},[115,115636,30824],{"class":174},[115,115638,114236],{"class":125},[115,115640,171],{"class":121},[115,115642,114241],{"class":174},[115,115644,115645,115647,115649,115651],{"class":117,"line":1180},[115,115646,30824],{"class":174},[115,115648,113696],{"class":125},[115,115650,171],{"class":121},[115,115652,47334],{"class":174},[14,115654,115655,115658,115659,115662,115663,115666],{},[112,115656,115657],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[112,115660,115661],{},"max_steps"," 是一个 episode 最多运行多少步。",[112,115664,115665],{},"steps"," 记录当前 episode 已经走了多少步。",[106,115668,115669],{"className":30379,"code":113735,"language":30381,"meta":22,"style":22},[112,115670,115671],{"__ignoreMap":22},[115,115672,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701,115703,115705,115707,115709,115711],{"class":117,"line":118},[115,115674,30824],{"class":174},[115,115676,113744],{"class":125},[115,115678,171],{"class":121},[115,115680,113749],{"class":125},[115,115682,113752],{"class":5217},[115,115684,113755],{"class":121},[115,115686,102393],{"class":174},[115,115688,12436],{"class":125},[115,115690,113762],{"class":5217},[115,115692,171],{"class":121},[115,115694,102393],{"class":174},[115,115696,12436],{"class":125},[115,115698,95953],{"class":5217},[115,115700,171],{"class":121},[115,115702,126],{"class":125},[115,115704,203],{"class":174},[115,115706,113779],{"class":125},[115,115708,93490],{"class":5217},[115,115710,171],{"class":121},[115,115712,113786],{"class":125},[14,115714,115715,115716,115719,115720,101008,115723,115726],{},"定义动作空间。",[112,115717,115718],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[112,115721,115722],{},"low=-1.0",[112,115724,115725],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[106,115728,115729],{"className":30379,"code":113796,"language":30381,"meta":22,"style":22},[112,115730,115731],{"__ignoreMap":22},[115,115732,115733,115735,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761,115763,115765,115767],{"class":117,"line":118},[115,115734,30824],{"class":174},[115,115736,113805],{"class":125},[115,115738,171],{"class":121},[115,115740,113749],{"class":125},[115,115742,113752],{"class":5217},[115,115744,113755],{"class":121},[115,115746,113816],{"class":125},[115,115748,113762],{"class":5217},[115,115750,171],{"class":121},[115,115752,113816],{"class":125},[115,115754,95953],{"class":5217},[115,115756,171],{"class":121},[115,115758,126],{"class":125},[115,115760,571],{"class":174},[115,115762,113779],{"class":125},[115,115764,93490],{"class":5217},[115,115766,171],{"class":121},[115,115768,113786],{"class":125},[14,115770,115771,115772,115775,115776,115779],{},"定义观测空间。",[112,115773,115774],{},"shape=(10,)"," 表示观测是 10 个数。",[112,115777,115778],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[106,115781,115783],{"className":30379,"code":115782,"language":30381,"meta":22,"style":22},"def _get_obs(self) -> np.ndarray:\n",[112,115784,115785],{"__ignoreMap":22},[115,115786,115787,115789,115791],{"class":117,"line":118},[115,115788,31948],{"class":121},[115,115790,114346],{"class":1963},[115,115792,114349],{"class":125},[14,115794,115795,115796,115798],{},"定义内部函数，用来生成观测。函数名前面的 ",[112,115797,1117],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[106,115800,115802],{"className":30379,"code":115801,"language":30381,"meta":22,"style":22},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[112,115803,115804,115818],{"__ignoreMap":22},[115,115805,115806,115808,115810,115812,115814,115816],{"class":117,"line":118},[115,115807,111558],{"class":125},[115,115809,171],{"class":121},[115,115811,38874],{"class":174},[115,115813,114360],{"class":125},[115,115815,30824],{"class":174},[115,115817,114365],{"class":125},[115,115819,115820,115822,115824,115826,115828,115830],{"class":117,"line":37},[115,115821,111568],{"class":125},[115,115823,171],{"class":121},[115,115825,38874],{"class":174},[115,115827,114360],{"class":125},[115,115829,30824],{"class":174},[115,115831,114380],{"class":125},[14,115833,115834],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[106,115836,115838],{"className":30379,"code":115837,"language":30381,"meta":22,"style":22},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[112,115839,115840,115856],{"__ignoreMap":22},[115,115841,115842,115844,115846,115848,115850,115852,115854],{"class":117,"line":118},[115,115843,110844],{"class":125},[115,115845,171],{"class":121},[115,115847,114389],{"class":125},[115,115849,30824],{"class":174},[115,115851,114394],{"class":125},[115,115853,30824],{"class":174},[115,115855,114399],{"class":125},[115,115857,115858,115860],{"class":117,"line":37},[115,115859,17047],{"class":121},[115,115861,114406],{"class":125},[14,115863,115864,115865,115868,115869,115871],{},"拼接观测，并转换成 ",[112,115866,115867],{},"float32","。很多强化学习库默认使用 ",[112,115870,115867],{},"，所以这里主动转换。",[106,115873,115874],{"className":30379,"code":115277,"language":30381,"meta":22,"style":22},[112,115875,115876],{"__ignoreMap":22},[115,115877,115878,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910],{"class":117,"line":118},[115,115879,31948],{"class":121},[115,115881,114512],{"class":1963},[115,115883,114515],{"class":125},[115,115885,580],{"class":121},[115,115887,114520],{"class":125},[115,115889,129],{"class":174},[115,115891,25110],{"class":121},[115,115893,38934],{"class":174},[115,115895,13565],{"class":121},[115,115897,38934],{"class":174},[115,115899,114533],{"class":125},[115,115901,114536],{"class":174},[115,115903,25110],{"class":121},[115,115905,38934],{"class":174},[115,115907,13565],{"class":121},[115,115909,38934],{"class":174},[115,115911,30787],{"class":125},[14,115913,115914,115915,115917,115918,115921],{},"定义 reset。",[112,115916,114556],{}," 用来控制随机数，保证实验可以复现。",[112,115919,115920],{},"options"," 用来接收额外配置，本章暂时不用。",[106,115923,115925],{"className":30379,"code":115924,"language":30381,"meta":22,"style":22},"super().reset(seed=seed)\n",[112,115926,115927],{"__ignoreMap":22},[115,115928,115929,115931,115933,115935,115937],{"class":117,"line":118},[115,115930,115518],{"class":174},[115,115932,114553],{"class":125},[115,115934,114556],{"class":5217},[115,115936,171],{"class":121},[115,115938,114561],{"class":125},[14,115940,115941,115942,115945],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[112,115943,115944],{},"self.np_random"," 生成可复现的随机数。",[106,115947,115949],{"className":30379,"code":115948,"language":30381,"meta":22,"style":22},"mujoco.mj_resetData(self.model, self.data)\n",[112,115950,115951],{"__ignoreMap":22},[115,115952,115953,115956,115958,115960,115962],{"class":117,"line":118},[115,115954,115955],{"class":125},"mujoco.mj_resetData(",[115,115957,30824],{"class":174},[115,115959,114571],{"class":125},[115,115961,30824],{"class":174},[115,115963,114576],{"class":125},[14,115965,115966],{},"把 MuJoCo 状态重置到默认状态。",[106,115968,115970],{"className":30379,"code":115969,"language":30381,"meta":22,"style":22},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[112,115971,115972],{"__ignoreMap":22},[115,115973,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992,115994,115996,115998,116000,116002,116004,116006],{"class":117,"line":118},[115,115975,30824],{"class":174},[115,115977,114587],{"class":125},[115,115979,171],{"class":121},[115,115981,38874],{"class":174},[115,115983,114594],{"class":125},[115,115985,113752],{"class":5217},[115,115987,113755],{"class":121},[115,115989,86200],{"class":174},[115,115991,12436],{"class":125},[115,115993,113762],{"class":5217},[115,115995,171],{"class":121},[115,115997,86200],{"class":174},[115,115999,12436],{"class":125},[115,116001,31497],{"class":5217},[115,116003,171],{"class":121},[115,116005,30824],{"class":174},[115,116007,114619],{"class":125},[14,116009,115331,116010,116013,116014,116017,116018,116020],{},[112,116011,116012],{},"[:]"," 表示修改整个数组。",[112,116015,116016],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[112,116019,102140],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[106,116022,116024],{"className":30379,"code":116023,"language":30381,"meta":22,"style":22},"self.data.qvel[:] = 0.0\n",[112,116025,116026],{"__ignoreMap":22},[115,116027,116028,116030,116032,116034],{"class":117,"line":118},[115,116029,30824],{"class":174},[115,116031,114626],{"class":125},[115,116033,171],{"class":121},[115,116035,104751],{"class":174},[14,116037,116038],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[106,116040,116042],{"className":30379,"code":116041,"language":30381,"meta":22,"style":22},"self.steps = 0\nreturn self._get_obs(), {}\n",[112,116043,116044,116054],{"__ignoreMap":22},[115,116045,116046,116048,116050,116052],{"class":117,"line":118},[115,116047,30824],{"class":174},[115,116049,113696],{"class":125},[115,116051,171],{"class":121},[115,116053,47334],{"class":174},[115,116055,116056,116058,116060],{"class":117,"line":37},[115,116057,17047],{"class":121},[115,116059,38874],{"class":174},[115,116061,114666],{"class":125},[14,116063,116064],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[106,116066,116067],{"className":30379,"code":115340,"language":30381,"meta":22,"style":22},[112,116068,116069],{"__ignoreMap":22},[115,116070,116071,116073,116075],{"class":117,"line":118},[115,116072,31948],{"class":121},[115,116074,114677],{"class":1963},[115,116076,114680],{"class":125},[14,116078,116079],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[106,116081,116083],{"className":30379,"code":116082,"language":30381,"meta":22,"style":22},"action = np.asarray(action, dtype=np.float32)\n",[112,116084,116085],{"__ignoreMap":22},[115,116086,116087,116089,116091,116093,116095,116097],{"class":117,"line":118},[115,116088,107432],{"class":125},[115,116090,171],{"class":121},[115,116092,114689],{"class":125},[115,116094,93490],{"class":5217},[115,116096,171],{"class":121},[115,116098,113786],{"class":125},[14,116100,116101,116102,28386],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[112,116103,115867],{},[106,116105,116107],{"className":30379,"code":116106,"language":30381,"meta":22,"style":22},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[112,116108,116109],{"__ignoreMap":22},[115,116110,116111,116113,116115,116117,116119,116121,116123],{"class":117,"line":118},[115,116112,107432],{"class":125},[115,116114,171],{"class":121},[115,116116,107437],{"class":125},[115,116118,30824],{"class":174},[115,116120,114708],{"class":125},[115,116122,30824],{"class":174},[115,116124,114713],{"class":125},[14,116126,116127],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[106,116129,116131],{"className":30379,"code":116130,"language":30381,"meta":22,"style":22},"self.data.ctrl[:] = action\n",[112,116132,116133],{"__ignoreMap":22},[115,116134,116135,116137,116139,116141],{"class":117,"line":118},[115,116136,30824],{"class":174},[115,116138,114724],{"class":125},[115,116140,171],{"class":121},[115,116142,107460],{"class":125},[14,116144,116145],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[106,116147,116149],{"className":30379,"code":116148,"language":30381,"meta":22,"style":22},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[112,116150,116151,116167],{"__ignoreMap":22},[115,116152,116153,116155,116157,116159,116161,116163,116165],{"class":117,"line":118},[115,116154,3025],{"class":121},[115,116156,101491],{"class":125},[115,116158,26044],{"class":121},[115,116160,32444],{"class":174},[115,116162,126],{"class":125},[115,116164,30824],{"class":174},[115,116166,114745],{"class":125},[115,116168,116169,116172,116174,116176,116178],{"class":117,"line":37},[115,116170,116171],{"class":125},"    mujoco.mj_step(",[115,116173,30824],{"class":174},[115,116175,114571],{"class":125},[115,116177,30824],{"class":174},[115,116179,114576],{"class":125},[14,116181,116182,116183,116186,116187,116189,116190,28386],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[112,116184,116185],{},"frame_skip=5","，所以外部调用一次 ",[112,116188,113867],{},"，内部实际执行 5 次 ",[112,116191,101205],{},[106,116193,116195],{"className":30379,"code":116194,"language":30381,"meta":22,"style":22},"self.steps += 1\n",[112,116196,116197],{"__ignoreMap":22},[115,116198,116199,116201,116203,116205],{"class":117,"line":118},[115,116200,30824],{"class":174},[115,116202,113696],{"class":125},[115,116204,9478],{"class":121},[115,116206,55689],{"class":174},[14,116208,116209],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[106,116211,116213],{"className":30379,"code":116212,"language":30381,"meta":22,"style":22},"obs = self._get_obs()\nreward = self._get_reward()\n",[112,116214,116215,116225],{"__ignoreMap":22},[115,116216,116217,116219,116221,116223],{"class":117,"line":118},[115,116218,110844],{"class":125},[115,116220,171],{"class":121},[115,116222,38874],{"class":174},[115,116224,114787],{"class":125},[115,116226,116227,116229,116231,116233],{"class":117,"line":37},[115,116228,110995],{"class":125},[115,116230,171],{"class":121},[115,116232,38874],{"class":174},[115,116234,114798],{"class":125},[14,116236,116237],{},"计算新的观测和奖励。",[106,116239,116241],{"className":30379,"code":116240,"language":30381,"meta":22,"style":22},"dist = float(np.linalg.norm(tip - target))\n",[112,116242,116243],{"__ignoreMap":22},[115,116244,116245,116247,116249,116251,116253,116255],{"class":117,"line":118},[115,116246,111586],{"class":125},[115,116248,171],{"class":121},[115,116250,109787],{"class":174},[115,116252,114841],{"class":125},[115,116254,657],{"class":121},[115,116256,114846],{"class":125},[14,116258,116259],{},"计算末端到目标的距离，并转换成 Python float。",[106,116261,116262],{"className":30379,"code":113667,"language":30381,"meta":22,"style":22},[112,116263,116264,116276],{"__ignoreMap":22},[115,116265,116266,116268,116270,116272,116274],{"class":117,"line":118},[115,116267,113674],{"class":125},[115,116269,171],{"class":121},[115,116271,113679],{"class":125},[115,116273,1035],{"class":121},[115,116275,113684],{"class":174},[115,116277,116278,116280,116282,116284,116286,116288,116290],{"class":117,"line":37},[115,116279,113689],{"class":125},[115,116281,171],{"class":121},[115,116283,38874],{"class":174},[115,116285,113696],{"class":125},[115,116287,1710],{"class":121},[115,116289,38874],{"class":174},[115,116291,113703],{"class":125},[14,116293,116294],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[106,116296,116298],{"className":30379,"code":116297,"language":30381,"meta":22,"style":22},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[112,116299,116300,116313],{"__ignoreMap":22},[115,116301,116302,116305,116307,116309,116311],{"class":117,"line":118},[115,116303,116304],{"class":125},"info ",[115,116306,171],{"class":121},[115,116308,4448],{"class":125},[115,116310,114892],{"class":230},[115,116312,114895],{"class":125},[115,116314,116315,116317],{"class":117,"line":37},[115,116316,17047],{"class":121},[115,116318,114902],{"class":125},[14,116320,116321,116324],{},[112,116322,116323],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[106,116326,116328],{"className":30379,"code":116327,"language":30381,"meta":22,"style":22},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[112,116329,116330,116339],{"__ignoreMap":22},[115,116331,116332,116335,116337],{"class":117,"line":118},[115,116333,116334],{"class":125},"env ",[115,116336,171],{"class":121},[115,116338,114932],{"class":125},[115,116340,116341,116343,116345,116347,116349,116351,116353],{"class":117,"line":37},[115,116342,113390],{"class":125},[115,116344,171],{"class":121},[115,116346,114942],{"class":125},[115,116348,114556],{"class":5217},[115,116350,171],{"class":121},[115,116352,317],{"class":174},[115,116354,132],{"class":125},[14,116356,116357,116358,116361],{},"创建环境并重置。",[112,116359,116360],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[106,116363,116365],{"className":30379,"code":116364,"language":30381,"meta":22,"style":22},"action = env.action_space.sample()\n",[112,116366,116367],{"__ignoreMap":22},[115,116368,116369,116371,116373],{"class":117,"line":118},[115,116370,107432],{"class":125},[115,116372,171],{"class":121},[115,116374,115011],{"class":125},[14,116376,116377],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[57,116379,102306],{"id":102305},[14,116381,105474],{},[106,116383,116386],{"className":116384,"code":116385,"language":5188,"meta":22},[5186],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[112,116387,116385],{"__ignoreMap":22},[14,116389,116390],{},"这个环境已经具备强化学习环境的基本结构。",[14,116392,116393],{},"主函数里使用随机动作：",[106,116395,116396],{"className":30379,"code":116364,"language":30381,"meta":22,"style":22},[112,116397,116398],{"__ignoreMap":22},[115,116399,116400,116402,116404],{"class":117,"line":118},[115,116401,107432],{"class":125},[115,116403,171],{"class":121},[115,116405,115011],{"class":125},[14,116407,116408],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[57,116410,102338],{"id":102337},[69,116412,116413,116416,116422,116431,116440,116449,116455],{},[72,116414,116415],{},"运行程序。",[72,116417,116418,116419,28386],{},"确认 ",[112,116420,116421],{},"obs.shape == (10,)",[72,116423,111171,116424,116427,116428,28386],{},[112,116425,116426],{},"env.action_space","，应类似 ",[112,116429,116430],{},"Box(-1.0, 1.0, (2,), float32)",[72,116432,105575,116433,116436,116437,28386],{},[112,116434,116435],{},"self.max_steps = 10","，确认环境会更快 ",[112,116438,116439],{},"truncated=True",[72,116441,102401,116442,102404,116445,116448],{},[112,116443,116444],{},"terminated = dist \u003C 0.05",[112,116446,116447],{},"dist \u003C 0.2","，观察是否更容易结束。",[72,116450,102401,116451,116454],{},[112,116452,116453],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[72,116456,116457,116458,116460,116461,116464],{},"在 ",[112,116459,116323],{}," 里加入 ",[112,116462,116463],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[57,116466,102443],{"id":102442},[86,116468,116470],{"id":116469},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116472,116473,116474,116476],{},"Gymnasium 的 ",[112,116475,107124],{}," 返回 5 个值:",[106,116478,116480],{"className":30379,"code":116479,"language":30381,"meta":22,"style":22},"obs, reward, terminated, truncated, info\n",[112,116481,116482],{"__ignoreMap":22},[115,116483,116484],{"class":117,"line":118},[115,116485,116479],{"class":125},[14,116487,116488],{},"不是旧 Gym 的 4 个值。",[86,116490,116492,116495],{"id":116491},"datactrl-action-维度错误",[112,116493,116494],{},"data.ctrl[:] = action"," 维度错误",[14,116497,102513],{},[106,116499,116501],{"className":30379,"code":116500,"language":30381,"meta":22,"style":22},"print(self.model.nu)\nprint(action.shape)\n",[112,116502,116503,116514],{"__ignoreMap":22},[115,116504,116505,116507,116509,116511],{"class":117,"line":118},[115,116506,30416],{"class":174},[115,116508,126],{"class":125},[115,116510,30824],{"class":174},[115,116512,116513],{"class":125},".model.nu)\n",[115,116515,116516,116518],{"class":117,"line":37},[115,116517,30416],{"class":174},[115,116519,116520],{"class":125},"(action.shape)\n",[14,116522,116523],{},"两者必须匹配。",[86,116525,116527],{"id":116526},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116529,102452],{},[106,116531,116533],{"className":30379,"code":116532,"language":30381,"meta":22,"style":22},"mujoco.mj_forward(self.model, self.data)\n",[112,116534,116535],{"__ignoreMap":22},[115,116536,116537,116540,116542,116544,116546],{"class":117,"line":118},[115,116538,116539],{"class":125},"mujoco.mj_forward(",[115,116541,30824],{"class":174},[115,116543,114571],{"class":125},[115,116545,30824],{"class":174},[115,116547,114576],{"class":125},[86,116549,116551,116553],{"id":116550},"observation_space-维度和-obs-不一致",[112,116552,113590],{}," 维度和 obs 不一致",[14,116555,102565],{},[106,116557,116559],{"className":30379,"code":116558,"language":30381,"meta":22,"style":22},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[112,116560,116561,116571,116578],{"__ignoreMap":22},[115,116562,116563,116565,116567,116569],{"class":117,"line":118},[115,116564,110844],{"class":125},[115,116566,171],{"class":121},[115,116568,38874],{"class":174},[115,116570,114787],{"class":125},[115,116572,116573,116575],{"class":117,"line":37},[115,116574,30416],{"class":174},[115,116576,116577],{"class":125},"(obs.shape)\n",[115,116579,116580,116582,116584,116586],{"class":117,"line":1180},[115,116581,30416],{"class":174},[115,116583,126],{"class":125},[115,116585,30824],{"class":174},[115,116587,116588],{"class":125},".observation_space.shape)\n",[14,116590,116591],{},"两者必须一致。本章观测是：",[106,116593,116596],{"className":116594,"code":116595,"language":5188,"meta":22},[5186],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[112,116597,116595],{"__ignoreMap":22},[86,116599,116601],{"id":116600},"action-超过范围","action 超过范围",[14,116603,116604],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[106,116606,116607],{"className":30379,"code":116106,"language":30381,"meta":22,"style":22},[112,116608,116609],{"__ignoreMap":22},[115,116610,116611,116613,116615,116617,116619,116621,116623],{"class":117,"line":118},[115,116612,107432],{"class":125},[115,116614,171],{"class":121},[115,116616,107437],{"class":125},[115,116618,30824],{"class":174},[115,116620,114708],{"class":125},[115,116622,30824],{"class":174},[115,116624,114713],{"class":125},[14,116626,116627,116628,28386],{},"这能避免无效动作直接写入 ",[112,116629,101066],{},[86,116631,116633],{"id":116632},"忘记返回-info","忘记返回 info",[14,116635,116473,116636,101008,116638,116640],{},[112,116637,70046],{},[112,116639,107124],{}," 都会返回 info：",[106,116642,116643],{"className":30379,"code":113383,"language":30381,"meta":22,"style":22},[112,116644,116645,116653],{"__ignoreMap":22},[115,116646,116647,116649,116651],{"class":117,"line":118},[115,116648,113390],{"class":125},[115,116650,171],{"class":121},[115,116652,113395],{"class":125},[115,116654,116655,116657,116659],{"class":117,"line":37},[115,116656,113400],{"class":125},[115,116658,171],{"class":121},[115,116660,113405],{"class":125},[14,116662,116663,116664,28386],{},"即使暂时没有额外信息，也返回 ",[112,116665,32460],{},[57,116667,116669],{"id":116668},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116671,116672],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[69,116674,116675,116678,116681,116684,116687,116690],{},[72,116676,116677],{},"更稳定的 reward。",[72,116679,116680],{},"合理的 episode 长度。",[72,116682,116683],{},"可重复的随机目标采样。",[72,116685,116686],{},"render 接口。",[72,116688,116689],{},"环境注册代码。",[72,116691,116692],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116694,116695],{},"如果只是自己写训练循环，最小形式是：",[106,116697,116699],{"className":30379,"code":116698,"language":30381,"meta":22,"style":22},"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",[112,116700,116701,116709,116725,116729,116745,116754,116763,116773],{"__ignoreMap":22},[115,116702,116703,116705,116707],{"class":117,"line":118},[115,116704,116334],{"class":125},[115,116706,171],{"class":121},[115,116708,114932],{"class":125},[115,116710,116711,116713,116715,116717,116719,116721,116723],{"class":117,"line":37},[115,116712,113390],{"class":125},[115,116714,171],{"class":121},[115,116716,114942],{"class":125},[115,116718,114556],{"class":5217},[115,116720,171],{"class":121},[115,116722,317],{"class":174},[115,116724,132],{"class":125},[115,116726,116727],{"class":117,"line":1180},[115,116728,2400],{"emptyLinePlaceholder":42},[115,116730,116731,116733,116735,116737,116739,116741,116743],{"class":117,"line":1195},[115,116732,3025],{"class":121},[115,116734,101491],{"class":125},[115,116736,26044],{"class":121},[115,116738,32444],{"class":174},[115,116740,126],{"class":125},[115,116742,6411],{"class":174},[115,116744,30787],{"class":125},[115,116746,116747,116750,116752],{"class":117,"line":1201},[115,116748,116749],{"class":125},"    action ",[115,116751,171],{"class":121},[115,116753,115011],{"class":125},[115,116755,116756,116759,116761],{"class":117,"line":1215},[115,116757,116758],{"class":125},"    obs, reward, terminated, truncated, info ",[115,116760,171],{"class":121},[115,116762,113405],{"class":125},[115,116764,116765,116767,116769,116771],{"class":117,"line":1221},[115,116766,3101],{"class":121},[115,116768,115077],{"class":125},[115,116770,115080],{"class":121},[115,116772,115083],{"class":125},[115,116774,116775,116778,116780],{"class":117,"line":1312},[115,116776,116777],{"class":125},"        obs, info ",[115,116779,171],{"class":121},[115,116781,113395],{"class":125},[57,116783,116785],{"id":116784},"_9本章小结","9.本章小结",[14,116787,116788],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[106,116790,116793],{"className":116791,"code":116792,"language":5188,"meta":22},[5186],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[112,116794,116792],{"__ignoreMap":22},[14,116796,116797],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5127,116799,116800],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":22,"searchDepth":37,"depth":37,"links":116802},[116803,116804,116805,116812,116816,116817,116818,116828,116829],{"id":100636,"depth":37,"text":100637},{"id":100759,"depth":37,"text":100760},{"id":101034,"depth":37,"text":101035,"children":116806},[116807,116809,116811],{"id":113614,"depth":1180,"text":116808},"terminated 和 truncated 的区别",{"id":113717,"depth":1180,"text":116810},"observation_space 和 action_space",{"id":113844,"depth":1180,"text":113845},{"id":101242,"depth":37,"text":101243,"children":116813},[116814,116815],{"id":101562,"depth":1180,"text":101562},{"id":101698,"depth":1180,"text":101698},{"id":102305,"depth":37,"text":102306},{"id":102337,"depth":37,"text":102338},{"id":102442,"depth":37,"text":102443,"children":116819},[116820,116821,116823,116824,116826,116827],{"id":116469,"depth":1180,"text":116470},{"id":116491,"depth":1180,"text":116822},"data.ctrl[:] = action 维度错误",{"id":116526,"depth":1180,"text":116527},{"id":116550,"depth":1180,"text":116825},"observation_space 维度和 obs 不一致",{"id":116600,"depth":1180,"text":116601},{"id":116632,"depth":1180,"text":116633},{"id":116668,"depth":37,"text":116669},{"id":116784,"depth":37,"text":116785},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113367,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116836,"title":116837,"body":116838,"description":117261,"extension":40,"meta":117262,"navigation":42,"path":117263,"seo":117264,"stem":117265,"__hash__":117266},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116839,"toc":117251},[116840,116844,116847,116850,116870,116876,116882,116892,116895,116898,116918,116921,116925,116928,116934,116937,116951,116954,116957,117031,117034,117040,117043,117066,117069,117119,117122,117128,117131,117134,117137,117156,117159,117165,117168,117171,117174,117194,117197,117200,117203,117248],[10,116841,116843],{"id":116842},"mujoco-学习","MuJoCo 学习",[14,116845,116846],{},"初版",[14,116848,116849],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[69,116851,116852,116855,116858,116867],{},[72,116853,116854],{},"MuJoCo 模型文件在描述什么。",[72,116856,116857],{},"Python 代码怎样读取和推进仿真。",[72,116859,116860,338,116862,338,116864,116866],{},[112,116861,104020],{},[112,116863,104350],{},[112,116865,104353],{}," 这些数组为什么重要。",[72,116868,116869],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116871,116872,116873,116875],{},"默认环境为 Fedora 44、Python >= 3.10、",[112,116874,101017],{}," 官方 Python bindings。",[14,116877,116878,116879,116881],{},"注意：本文禁止使用 ",[112,116880,101002],{},"。所有示例均使用：",[106,116883,116884],{"className":30379,"code":101568,"language":30381,"meta":22,"style":22},[112,116885,116886],{"__ignoreMap":22},[115,116887,116888,116890],{"class":117,"line":118},[115,116889,30393],{"class":121},[115,116891,101291],{"class":125},[57,116893,116894],{"id":116894},"适合谁阅读",[14,116896,116897],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[69,116899,116900,116903,116906,116909],{},[72,116901,116902],{},"没学过 MuJoCo，只会一点 Python。",[72,116904,116905],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[72,116907,116908],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[72,116910,116911,116912,116914,116915,116917],{},"以前接触过 ",[112,116913,101002],{},"，现在想迁移到官方 ",[112,116916,101011],{}," Python bindings。",[14,116919,116920],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[57,116922,116924],{"id":116923},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116926,116927],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[106,116929,116932],{"className":116930,"code":116931,"language":5188,"meta":22},[5186],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[112,116933,116931],{"__ignoreMap":22},[14,116935,116936],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[69,116938,116939,116942,116945,116948],{},[72,116940,116941],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[72,116943,116944],{},"快速测试控制算法，不必一开始就上真实机器人。",[72,116946,116947],{},"生成强化学习环境。",[72,116949,116950],{},"采集状态、动作、图像、奖励等训练数据。",[57,116952,116953],{"id":116953},"学习前的心智模型",[14,116955,116956],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[263,116958,116959,116971],{},[266,116960,116961],{},[269,116962,116963,116966,116969],{},[272,116964,116965],{"align":23737},"部分",[272,116967,116968],{"align":23737},"负责什么",[272,116970,21188],{"align":23737},[310,116972,116973,116984,116996,117008,117020],{},[269,116974,116975,116978,116981],{},[315,116976,116977],{"align":23737},"MJCF XML",[315,116979,116980],{"align":23737},"定义世界和机器人结构",[315,116982,116983],{"align":23737},"地面、盒子、关节、电机、摄像头",[269,116985,116986,116990,116993],{},[315,116987,116988],{"align":23737},[112,116989,100699],{},[315,116991,116992],{"align":23737},"编译后的静态模型",[315,116994,116995],{"align":23737},"有几个关节、有几个电机、时间步长是多少",[269,116997,116998,117002,117005],{},[315,116999,117000],{"align":23737},[112,117001,100709],{},[315,117003,117004],{"align":23737},"运行中的动态状态",[315,117006,117007],{"align":23737},"当前时间、位置、速度、电机输入",[269,117009,117010,117014,117017],{},[315,117011,117012],{"align":23737},[112,117013,101205],{},[315,117015,117016],{"align":23737},"推进一步物理仿真",[315,117018,117019],{"align":23737},"根据重力、力、碰撞更新状态",[269,117021,117022,117025,117028],{},[315,117023,117024],{"align":23737},"Viewer \u002F Renderer",[315,117026,117027],{"align":23737},"把仿真显示出来",[315,117029,117030],{"align":23737},"打开窗口或保存图片",[14,117032,117033],{},"一句话总结：",[106,117035,117038],{"className":117036,"code":117037,"language":5188,"meta":22},[5186],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[112,117039,117037],{"__ignoreMap":22},[14,117041,117042],{},"参考来源：",[1132,117044,117045,117052,117059],{},[72,117046,117047,117048],{},"MuJoCo Python 官方文档：",[27,117049,117050],{"href":117050,"rel":117051},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[31],[72,117053,117054,117055],{},"MuJoCo XML Reference：",[27,117056,117057],{"href":117057,"rel":117058},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[31],[72,117060,117061,117062],{},"MuJoCo Overview：",[27,117063,117064],{"href":117064,"rel":117065},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[31],[57,117067,117068],{"id":117068},"章节目录",[69,117070,117071,117077,117083,117089,117095,117101,117107,117113],{},[72,117072,117073],{},[27,117074,117076],{"href":117075},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[72,117078,117079],{},[27,117080,117082],{"href":117081},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[72,117084,117085],{},[27,117086,117088],{"href":117087},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[72,117090,117091],{},[27,117092,117094],{"href":117093},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[72,117096,117097],{},[27,117098,117100],{"href":117099},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[72,117102,117103],{},[27,117104,117106],{"href":117105},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[72,117108,117109],{},[27,117110,117112],{"href":117111},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[72,117114,117115],{},[27,117116,117118],{"href":117117},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[57,117120,117121],{"id":117121},"推荐学习路线",[106,117123,117126],{"className":117124,"code":117125,"language":5188,"meta":22},[5186],"环境安装\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",[112,117127,117125],{"__ignoreMap":22},[14,117129,117130],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[57,117132,117133],{"id":117133},"建议的目录结构",[14,117135,117136],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[106,117138,117140],{"className":23823,"code":117139,"language":23825,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[112,117141,117142,117150],{"__ignoreMap":22},[115,117143,117144,117146,117148],{"class":117,"line":118},[115,117145,101256],{"class":1963},[115,117147,29217],{"class":174},[115,117149,101261],{"class":230},[115,117151,117152,117154],{"class":117,"line":37},[115,117153,101266],{"class":174},[115,117155,101261],{"class":230},[14,117157,117158],{},"每一章的代码都单独保存：",[106,117160,117163],{"className":117161,"code":117162,"language":5188,"meta":22},[5186],"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",[112,117164,117162],{"__ignoreMap":22},[14,117166,117167],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[57,117169,117170],{"id":117170},"学习方法",[14,117172,117173],{},"每章建议按这个顺序操作：",[69,117175,117176,117179,117182,117185,117188,117191],{},[72,117177,117178],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[72,117180,117181],{},"复制最小可运行代码，保存成指定文件。",[72,117183,117184],{},"运行代码，确认没有报错。",[72,117186,117187],{},"对照“运行结果说明”理解输出。",[72,117189,117190],{},"做“验证步骤”，主动改一两个参数。",[72,117192,117193],{},"遇到报错先看“常见错误与解决方案”。",[14,117195,117196],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[57,117198,117199],{"id":117199},"全局排错顺序",[14,117201,117202],{},"遇到问题时，按下面顺序查：",[69,117204,117205,117211,117217,117222,117225,117228,117235,117245],{},[72,117206,117207,117208],{},"Python 环境是否激活：",[112,117209,117210],{},"which python",[72,117212,117213,117214],{},"MuJoCo 是否能导入：",[112,117215,117216],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[72,117218,117219,117220],{},"是否误装了 ",[112,117221,101002],{},[72,117223,117224],{},"XML 标签是否闭合、属性是否拼写正确",[72,117226,117227],{},"actuator 引用的 joint 名字是否存在",[72,117229,117230,117232,117233],{},[112,117231,101066],{}," 的长度是否等于 ",[112,117234,102148],{},[72,117236,105575,117237,82529,117239,117241,117242],{},[112,117238,104020],{},[112,117240,104350],{}," 后是否调用了 ",[112,117243,117244],{},"mujoco.mj_forward",[72,117246,117247],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5127,117249,117250],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":22,"searchDepth":37,"depth":37,"links":117252},[117253,117254,117255,117256,117257,117258,117259,117260],{"id":116894,"depth":37,"text":116894},{"id":116923,"depth":37,"text":116924},{"id":116953,"depth":37,"text":116953},{"id":117068,"depth":37,"text":117068},{"id":117121,"depth":37,"text":117121},{"id":117133,"depth":37,"text":117133},{"id":117170,"depth":37,"text":117170},{"id":117199,"depth":37,"text":117199},"仿真搭建。",{"category":23379},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116837,"description":117261},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117268,"title":117269,"body":117270,"description":39,"extension":40,"meta":117725,"navigation":42,"path":117726,"seo":117727,"stem":117728,"__hash__":117729},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117271,"toc":117723},[117272,117275,117278,117284,117720],[10,117273,117269],{"id":117274},"_1-最常用的基本操作更新",[14,117276,117277],{},"装linux系统教程：",[14,117279,117280],{},[27,117281,117282],{"href":117282,"rel":117283},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[31],[106,117285,117289],{"className":117286,"code":117287,"language":117288,"meta":22,"style":22},"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",[112,117290,117291,117296,117301,117310,117315,117324,117329,117349,117354,117365,117370,117379,117384,117412,117417,117436,117441,117460,117464,117469,117485,117489,117494,117524,117528,117533,117549,117553,117558,117573,117577,117582,117598,117602,117607,117619,117631,117635,117640,117657,117661,117666,117684,117688,117693,117702,117706,117711],{"__ignoreMap":22},[115,117292,117293],{"class":117,"line":118},[115,117294,117295],{"class":184},"#更新相关的知识\n",[115,117297,117298],{"class":117,"line":37},[115,117299,117300],{"class":184},"# 更新软件包列表（从服务器获取最新软件信息）\n",[115,117302,117303,117305,117308],{"class":117,"line":1180},[115,117304,24577],{"class":1963},[115,117306,117307],{"class":230}," apt",[115,117309,26243],{"class":230},[115,117311,117312],{"class":117,"line":1195},[115,117313,117314],{"class":184},"# 升级所有可更新的软件包（不删除旧包）\n",[115,117316,117317,117319,117321],{"class":117,"line":1201},[115,117318,24577],{"class":1963},[115,117320,117307],{"class":230},[115,117322,117323],{"class":230}," upgrade\n",[115,117325,117326],{"class":117,"line":1215},[115,117327,117328],{"class":184},"#更新和升级软件包\n",[115,117330,117331,117333,117335,117338,117340,117342,117344,117347],{"class":117,"line":1221},[115,117332,24577],{"class":1963},[115,117334,117307],{"class":230},[115,117336,117337],{"class":230}," update",[115,117339,26191],{"class":125},[115,117341,24577],{"class":1963},[115,117343,117307],{"class":230},[115,117345,117346],{"class":230}," upgrade",[115,117348,100971],{"class":174},[115,117350,117351],{"class":117,"line":1312},[115,117352,117353],{"class":184},"#列出可更新的软件包及版本信息\n",[115,117355,117356,117359,117362],{"class":117,"line":1318},[115,117357,117358],{"class":1963},"apt",[115,117360,117361],{"class":230}," list",[115,117363,117364],{"class":174}," --upgradable\n",[115,117366,117367],{"class":117,"line":1330},[115,117368,117369],{"class":184},"#彻底升级（处理依赖关系，可能删除旧包）\n",[115,117371,117372,117374,117376],{"class":117,"line":1612},[115,117373,24577],{"class":1963},[115,117375,117307],{"class":230},[115,117377,117378],{"class":230}," full-upgrade\n",[115,117380,117381],{"class":117,"line":1617},[115,117382,117383],{"class":184},"#设置指定版本\n",[115,117385,117386,117388,117390,117392,117394,117397,117399,117401,117403,117405,117408,117410],{"class":117,"line":1623},[115,117387,24577],{"class":1963},[115,117389,117307],{"class":230},[115,117391,23835],{"class":230},[115,117393,28903],{"class":121},[115,117395,117396],{"class":230},"package_nam",[115,117398,200],{"class":125},[115,117400,1085],{"class":121},[115,117402,171],{"class":230},[115,117404,1035],{"class":121},[115,117406,117407],{"class":230},"version_numbe",[115,117409,795],{"class":125},[115,117411,51297],{"class":121},[115,117413,117414],{"class":117,"line":1628},[115,117415,117416],{"class":184},"#只安装软件包不升级\n",[115,117418,117419,117421,117423,117425,117427,117429,117431,117433],{"class":117,"line":1642},[115,117420,24577],{"class":1963},[115,117422,117307],{"class":230},[115,117424,23835],{"class":230},[115,117426,28903],{"class":121},[115,117428,117396],{"class":230},[115,117430,200],{"class":125},[115,117432,1085],{"class":121},[115,117434,117435],{"class":174}," --no-upgrade\n",[115,117437,117438],{"class":117,"line":1647},[115,117439,117440],{"class":184},"#只升级，不存在就不安装\n",[115,117442,117443,117445,117447,117449,117451,117453,117455,117457],{"class":117,"line":1653},[115,117444,24577],{"class":1963},[115,117446,117307],{"class":230},[115,117448,23835],{"class":230},[115,117450,28903],{"class":121},[115,117452,117396],{"class":230},[115,117454,200],{"class":125},[115,117456,1085],{"class":121},[115,117458,117459],{"class":174}," --only-upgrade\n",[115,117461,117462],{"class":117,"line":1674},[115,117463,2400],{"emptyLinePlaceholder":42},[115,117465,117466],{"class":117,"line":1679},[115,117467,117468],{"class":184},"#安装指定的软件命令\n",[115,117470,117471,117473,117475,117477,117479,117481,117483],{"class":117,"line":1693},[115,117472,24577],{"class":1963},[115,117474,117307],{"class":230},[115,117476,23835],{"class":230},[115,117478,28903],{"class":121},[115,117480,117396],{"class":230},[115,117482,200],{"class":125},[115,117484,51297],{"class":121},[115,117486,117487],{"class":117,"line":1698},[115,117488,2400],{"emptyLinePlaceholder":42},[115,117490,117491],{"class":117,"line":1727},[115,117492,117493],{"class":184},"#安装多个软件包\n",[115,117495,117496,117498,117500,117502,117504,117507,117510,117512,117514,117517,117519,117521],{"class":117,"line":1732},[115,117497,24577],{"class":1963},[115,117499,117307],{"class":230},[115,117501,23835],{"class":230},[115,117503,28903],{"class":121},[115,117505,117506],{"class":230},"package_",[115,117508,117509],{"class":121},"1>",[115,117511,28903],{"class":121},[115,117513,117506],{"class":230},[115,117515,117516],{"class":121},"2>",[115,117518,28903],{"class":121},[115,117520,117506],{"class":230},[115,117522,117523],{"class":121},"3>\n",[115,117525,117526],{"class":117,"line":1749},[115,117527,2400],{"emptyLinePlaceholder":42},[115,117529,117530],{"class":117,"line":1754},[115,117531,117532],{"class":184},"#更新指定的软件命令\n",[115,117534,117535,117537,117539,117541,117543,117545,117547],{"class":117,"line":1759},[115,117536,24577],{"class":1963},[115,117538,117307],{"class":230},[115,117540,117337],{"class":230},[115,117542,28903],{"class":121},[115,117544,117396],{"class":230},[115,117546,200],{"class":125},[115,117548,51297],{"class":121},[115,117550,117551],{"class":117,"line":1764},[115,117552,2400],{"emptyLinePlaceholder":42},[115,117554,117555],{"class":117,"line":1778},[115,117556,117557],{"class":184},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[115,117559,117560,117562,117565,117567,117569,117571],{"class":117,"line":1783},[115,117561,117358],{"class":1963},[115,117563,117564],{"class":230}," show",[115,117566,28903],{"class":121},[115,117568,117396],{"class":230},[115,117570,200],{"class":125},[115,117572,51297],{"class":121},[115,117574,117575],{"class":117,"line":2577},[115,117576,2400],{"emptyLinePlaceholder":42},[115,117578,117579],{"class":117,"line":2591},[115,117580,117581],{"class":184},"#删除软件包命令\n",[115,117583,117584,117586,117588,117590,117592,117594,117596],{"class":117,"line":2599},[115,117585,24577],{"class":1963},[115,117587,117307],{"class":230},[115,117589,26080],{"class":230},[115,117591,28903],{"class":121},[115,117593,117396],{"class":230},[115,117595,200],{"class":125},[115,117597,51297],{"class":121},[115,117599,117600],{"class":117,"line":2604},[115,117601,2400],{"emptyLinePlaceholder":42},[115,117603,117604],{"class":117,"line":2610},[115,117605,117606],{"class":184},"# 清理旧版本和缓存（释放磁盘空间）\n",[115,117608,117609,117611,117613,117616],{"class":117,"line":2616},[115,117610,24577],{"class":1963},[115,117612,117307],{"class":230},[115,117614,117615],{"class":230}," autoremove",[115,117617,117618],{"class":184},"  # 删除不再需要的依赖和库文件\n",[115,117620,117621,117623,117625,117628],{"class":117,"line":2621},[115,117622,24577],{"class":1963},[115,117624,117307],{"class":230},[115,117626,117627],{"class":230}," clean",[115,117629,117630],{"class":184},"       # 清理下载的缓存包\n",[115,117632,117633],{"class":117,"line":7949},[115,117634,2400],{"emptyLinePlaceholder":42},[115,117636,117637],{"class":117,"line":7973},[115,117638,117639],{"class":184},"#移除软件包及配置文件\n",[115,117641,117642,117644,117646,117649,117651,117653,117655],{"class":117,"line":7978},[115,117643,24577],{"class":1963},[115,117645,117307],{"class":230},[115,117647,117648],{"class":230}," purge",[115,117650,28903],{"class":121},[115,117652,117396],{"class":230},[115,117654,200],{"class":125},[115,117656,51297],{"class":121},[115,117658,117659],{"class":117,"line":7984},[115,117660,2400],{"emptyLinePlaceholder":42},[115,117662,117663],{"class":117,"line":8011},[115,117664,117665],{"class":184},"#查找软件包命令\n",[115,117667,117668,117670,117672,117675,117677,117680,117682],{"class":117,"line":8016},[115,117669,24577],{"class":1963},[115,117671,117307],{"class":230},[115,117673,117674],{"class":230}," search",[115,117676,28903],{"class":121},[115,117678,117679],{"class":230},"keywor",[115,117681,439],{"class":125},[115,117683,51297],{"class":121},[115,117685,117686],{"class":117,"line":8022},[115,117687,2400],{"emptyLinePlaceholder":42},[115,117689,117690],{"class":117,"line":8034},[115,117691,117692],{"class":184},"#列出所有已安装的包\n",[115,117694,117695,117697,117699],{"class":117,"line":8046},[115,117696,117358],{"class":1963},[115,117698,117361],{"class":230},[115,117700,117701],{"class":174}," --installed\n",[115,117703,117704],{"class":117,"line":8058},[115,117705,2400],{"emptyLinePlaceholder":42},[115,117707,117708],{"class":117,"line":9717},[115,117709,117710],{"class":184},"#列出所有已安装的包的版本信息\n",[115,117712,117713,117715,117717],{"class":117,"line":9742},[115,117714,117358],{"class":1963},[115,117716,117361],{"class":230},[115,117718,117719],{"class":174}," --all-versions\n",[5127,117721,117722],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":22,"searchDepth":37,"depth":37,"links":117724},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117269,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117731,"title":117732,"body":117733,"description":39,"extension":40,"meta":118474,"navigation":42,"path":118475,"seo":118476,"stem":118477,"__hash__":118478},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117734,"toc":118461},[117735,117738,117742,117745,117751,117755,117759,117765,117770,117775,117780,117785,117790,117793,117796,117799,117802,117806,117809,117814,117817,117822,117825,117830,117837,117840,117843,117846,117849,117852,117863,117867,117871,117876,117881,117885,117890,117894,117899,117903,117907,117912,117915,117960,117965,117969,117973,117978,117984,117989,117999,118004,118014,118019,118024,118051,118055,118058,118063,118066,118091,118095,118100,118103,118108,118113,118133,118138,118141,118156,118160,118213,118216,118221,118225,118228,118243,118246,118249,118254,118258,118262,118265,118269,118273,118276,118281,118286,118290,118297,118305,118308,118315,118320,118325,118328,118333,118340,118345,118352,118356,118358,118363,118367,118370,118373,118378,118381,118386,118389,118394,118399,118404,118408,118413,118417,118458],[10,117736,117732],{"id":117737},"_2-linux装机教程",[57,117739,117741],{"id":117740},"_21-实体机","2.1 实体机",[14,117743,117744],{},"使用清华源：（Ubuntu24.04）",[14,117746,117747],{},[27,117748,117749],{"href":117749,"rel":117750},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[31],[57,117752,117754],{"id":117753},"_22-普通虚拟机","2.2 普通虚拟机",[86,117756,117758],{"id":117757},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117760,117761],{},[27,117762,117763],{"href":117763,"rel":117764},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[31],[14,117766,117767],{},[20,117768],{"alt":22,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117771,117772],{},[20,117773],{"alt":22,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117776,117777],{},[20,117778],{"alt":22,"src":117779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117781,117782],{},[20,117783],{"alt":22,"src":117784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117786,117787],{},[20,117788],{"alt":22,"src":117789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117791,117792],{},"内存4G（4096MB）；",[14,117794,117795],{},"CPU给4个核；",[14,117797,117798],{},"硬盘动态分配60G；",[14,117800,117801],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[86,117803,117805],{"id":117804},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117807,117808],{},"按照1.1的步骤下载Ubuntu",[14,117810,117811],{},[20,117812],{"alt":22,"src":117813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117815,117816],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117818,117819],{},[20,117820],{"alt":22,"src":117821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117823,117824],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117826,117827],{},[20,117828],{"alt":22,"src":117829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117831,117832,117833,117836],{},"选择“正常安装”(找不到都用Alt+F7)， ",[275,117834,117835],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117838,117839],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117841,117842],{},"将改动写入磁盘吗 继续",[14,117844,117845],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117847,117848],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117850,117851],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117853,117854,117855,117858,117859,117862],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[275,117856,117857],{},"除了"," 选不发送系统信息与不升级之外， ",[275,117860,117861],{},"其它"," 都跳过或前进）",[86,117864,117866],{"id":117865},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21999,117868,117870],{"id":117869},"_2231-全屏","2.2.3.1 全屏",[14,117872,117873],{},[20,117874],{"alt":22,"src":117875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117877,117878],{},[20,117879],{"alt":22,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21999,117882,117884],{"id":117883},"_2232-文件交换","2.2.3.2 文件交换",[14,117886,117887],{},[20,117888],{"alt":22,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21999,117891,117893],{"id":117892},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117895,117896],{},[20,117897],{"alt":22,"src":117898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[57,117900,117902],{"id":117901},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[86,117904,117906],{"id":117905},"_231-简介与优缺点","2.3.1 简介与优缺点",[69,117908,117909],{},[72,117910,117911],{},"什么情况下推荐？",[14,117913,117914],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[69,117916,117917],{"start":37},[72,117918,117919,117920],{},"优缺点：",[69,117921,117922,117952],{},[72,117923,117924,117925],{},"优点：",[69,117926,117927,117930,117937,117940,117943,117946,117949],{},[72,117928,117929],{},"WSL2是最好的Linux发行版;(bushi)",[72,117931,117932,117933,117936],{},"性能损耗极低。且比在Windows上跑深度性能 ",[275,117934,117935],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[72,117938,117939],{},"非常方便调用USB设备，可以USB直通;",[72,117941,117942],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[72,117944,117945],{},"非常方便Win与WSL2互相传文件等协同操作;",[72,117947,117948],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[72,117950,117951],{},"非常方便使用Windows的VScode远程开发;",[72,117953,117954,117955],{},"缺点：",[69,117956,117957],{},[72,117958,117959],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117961,117962],{},[20,117963],{"alt":22,"src":117964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[86,117966,117968],{"id":117967},"_232-安装教程","2.3.2 安装教程",[21999,117970,117972],{"id":117971},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[69,117974,117975],{},[72,117976,117977],{},"方法一(图形界面)",[14,117979,117980,117981,24619],{},"用Win+R输入",[112,117982,117983],{},"appwiz.cpl",[14,117985,117986],{},[20,117987],{"alt":22,"src":117988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117990,117991,117992,117995,117996,26474],{},"点击OK进入 ",[275,117993,117994],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[275,117997,117998],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118000,118001],{},[20,118002],{"alt":22,"src":118003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118005,118006,118007,101008,118010,118013],{},"选择 ",[275,118008,118009],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[275,118011,118012],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118015,118016],{},[20,118017],{"alt":22,"src":118018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[69,118020,118021],{"start":37},[72,118022,118023],{},"方法二(命令行)",[106,118025,118029],{"className":118026,"code":118027,"language":118028,"meta":22,"style":22},"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",[112,118030,118031,118036,118041,118046],{"__ignoreMap":22},[115,118032,118033],{"class":117,"line":118},[115,118034,118035],{},"# 开启 Linux 子系统\n",[115,118037,118038],{"class":117,"line":37},[115,118039,118040],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[115,118042,118043],{"class":117,"line":1180},[115,118044,118045],{},"# 开启虚拟机平台\n",[115,118047,118048],{"class":117,"line":1195},[115,118049,118050],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21999,118052,118054],{"id":118053},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118056,118057],{},"用管理员权限打开powershell",[14,118059,118060],{},[20,118061],{"alt":22,"src":118062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118064,118065],{},"升级WSL并设置默认版本为WSL2",[106,118067,118069],{"className":118026,"code":118068,"language":118028,"meta":22,"style":22},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[112,118070,118071,118076,118081,118086],{"__ignoreMap":22},[115,118072,118073],{"class":117,"line":118},[115,118074,118075],{},"# 更新 wsl\n",[115,118077,118078],{"class":117,"line":37},[115,118079,118080],{},"wsl --update\n",[115,118082,118083],{"class":117,"line":1180},[115,118084,118085],{},"# 将 wsl 版本设置为 wsl2\n",[115,118087,118088],{"class":117,"line":1195},[115,118089,118090],{},"wsl --set-default-version 2\n",[21999,118092,118094],{"id":118093},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[69,118096,118097],{},[72,118098,118099],{},"方式一(商店下载)",[14,118101,118102],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118104,118105],{},[20,118106],{"alt":22,"src":118107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[69,118109,118110],{"start":37},[72,118111,118112],{},"方式二(命令行安装)",[106,118114,118116],{"className":118026,"code":118115,"language":118028,"meta":22,"style":22},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[112,118117,118118,118123,118128],{"__ignoreMap":22},[115,118119,118120],{"class":117,"line":118},[115,118121,118122],{},"# 列出可安装的 Linux 版本\n",[115,118124,118125],{"class":117,"line":37},[115,118126,118127],{},"#（需要科学手段）\n",[115,118129,118130],{"class":117,"line":1180},[115,118131,118132],{},"wsl --list --online\n",[14,118134,118135],{},[20,118136],{"alt":22,"src":118137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118139,118140],{},"选择对应发行版并安装",[106,118142,118144],{"className":118026,"code":118143,"language":118028,"meta":22,"style":22},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[112,118145,118146,118151],{"__ignoreMap":22},[115,118147,118148],{"class":117,"line":118},[115,118149,118150],{},"# Ubuntu安装完毕后需要重启系统\n",[115,118152,118153],{"class":117,"line":37},[115,118154,118155],{},"wsl --install -d Ubuntu-24.04\n",[21999,118157,118159],{"id":118158},"_2324-查看系统状态","2.3.2.4 查看系统状态",[106,118161,118163],{"className":118026,"code":118162,"language":118028,"meta":22,"style":22},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[112,118164,118165,118170,118175,118180,118185,118189,118193,118198,118203,118208],{"__ignoreMap":22},[115,118166,118167],{"class":117,"line":118},[115,118168,118169],{},"# 查看 wsl\n",[115,118171,118172],{"class":117,"line":37},[115,118173,118174],{},"wsl -l\n",[115,118176,118177],{"class":117,"line":1180},[115,118178,118179],{},"# 查看 wsl 运行版本或模式\n",[115,118181,118182],{"class":117,"line":1195},[115,118183,118184],{},"wsl -l -v\n",[115,118186,118187],{"class":117,"line":1201},[115,118188,2400],{"emptyLinePlaceholder":42},[115,118190,118191],{"class":117,"line":1215},[115,118192,2400],{"emptyLinePlaceholder":42},[115,118194,118195],{"class":117,"line":1221},[115,118196,118197],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[115,118199,118200],{"class":117,"line":1312},[115,118201,118202],{},"wsl --set-version \u003Cdistro> 2\n",[115,118204,118205],{"class":117,"line":1318},[115,118206,118207],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[115,118209,118210],{"class":117,"line":1330},[115,118211,118212],{},"wsl --unregister \u003Cdistro>\n",[14,118214,118215],{},"输出Version为2即正常",[14,118217,118218],{},[20,118219],{"alt":22,"src":118220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21999,118222,118224],{"id":118223},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118226,118227],{},"直接在Powershell里输入wsl命令进入子系统",[106,118229,118231],{"className":118026,"code":118230,"language":118028,"meta":22,"style":22},"# 进入子系统\nwsl\n",[112,118232,118233,118238],{"__ignoreMap":22},[115,118234,118235],{"class":117,"line":118},[115,118236,118237],{},"# 进入子系统\n",[115,118239,118240],{"class":117,"line":37},[115,118241,118242],{},"wsl\n",[14,118244,118245],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118247,118248],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118250,118251],{},[20,118252],{"alt":22,"src":118253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[86,118255,118257],{"id":118256},"_233-配置各种环境","2.3.3 配置各种环境",[21999,118259,118261],{"id":118260},"_2331-换源","2.3.3.1 换源",[14,118263,118264],{},"(同实体机LINUX，往下找教程)",[21999,118266,118268],{"id":118267},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22911,118270,118272],{"id":118271},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118274,118275],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118277,118278],{},[20,118279],{"alt":22,"src":118280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118282,118283],{},[20,118284],{"alt":22,"src":118285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22911,118287,118289],{"id":118288},"_23322-cuda","2.3.3.2.2 CUDA",[14,118291,118292,118293],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[27,118294,118295],{"href":118295,"rel":118296},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[31],[14,118298,118299,118302],{},[20,118300],{"alt":22,"src":118301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[20,118303],{"alt":22,"src":118304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118306,118307],{},"在下方的网站，选择合适的版本。",[14,118309,118310,118311],{},"WSL2 专属 CUDA 指南：",[27,118312,118313],{"href":118313,"rel":118314},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[31],[14,118316,118317],{},[275,118318,118319],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118321,118322],{},[20,118323],{"alt":22,"src":118324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118326,118327],{},"挨行敲一遍",[14,118329,118330],{},[20,118331],{"alt":22,"src":118332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118334,118335,118336,118339],{},"敲完后，输入",[112,118337,118338],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118341,118342],{},[20,118343],{"alt":22,"src":118344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118346,118347,118348,118351],{},"（请详看下方教程的",[275,118349,118350],{},"安装CUDA的配置环境来看","如何配置环境）",[22911,118353,118355],{"id":118354},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118357,118264],{},[14,118359,118360],{},[20,118361],{"alt":22,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21999,118364,118366],{"id":118365},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118368,118369],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118371,118372],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118374,118375],{},[20,118376],{"alt":22,"src":118377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118379,118380],{},"连接WSL2",[14,118382,118383],{},[20,118384],{"alt":22,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118387,118388],{},"远程开发成功。",[14,118390,118391],{},[20,118392],{"alt":22,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118395,118396],{},[20,118397],{"alt":22,"src":118398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118400,118401],{},[20,118402],{"alt":22,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21999,118405,118407],{"id":118406},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118409,118410],{},[20,118411],{"alt":22,"src":118412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21999,118414,118416],{"id":118415},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[106,118418,118420],{"className":117286,"code":118419,"language":117288,"meta":22,"style":22},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[112,118421,118422,118430,118438,118449,118453],{"__ignoreMap":22},[115,118423,118424,118426,118428],{"class":117,"line":118},[115,118425,24577],{"class":1963},[115,118427,117307],{"class":230},[115,118429,26243],{"class":230},[115,118431,118432,118434,118436],{"class":117,"line":37},[115,118433,24577],{"class":1963},[115,118435,117307],{"class":230},[115,118437,117323],{"class":230},[115,118439,118440,118442,118444,118446],{"class":117,"line":1180},[115,118441,24577],{"class":1963},[115,118443,117307],{"class":230},[115,118445,23835],{"class":230},[115,118447,118448],{"class":230}," mesa-utils\n",[115,118450,118451],{"class":117,"line":1195},[115,118452,2400],{"emptyLinePlaceholder":42},[115,118454,118455],{"class":117,"line":1201},[115,118456,118457],{"class":184},"#然后重启wsl2即可\n",[5127,118459,118460],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":22,"searchDepth":37,"depth":37,"links":118462},[118463,118464,118469],{"id":117740,"depth":37,"text":117741},{"id":117753,"depth":37,"text":117754,"children":118465},[118466,118467,118468],{"id":117757,"depth":1180,"text":117758},{"id":117804,"depth":1180,"text":117805},{"id":117865,"depth":1180,"text":117866},{"id":117901,"depth":37,"text":117902,"children":118470},[118471,118472,118473],{"id":117905,"depth":1180,"text":117906},{"id":117967,"depth":1180,"text":117968},{"id":118256,"depth":1180,"text":118257},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117732,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118480,"title":118481,"body":118482,"description":39,"extension":40,"meta":121418,"navigation":42,"path":121419,"seo":121420,"stem":121421,"__hash__":121422},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118483,"toc":121390},[118484,118487,118491,118497,118501,118507,118511,118699,118702,118707,118711,118715,118718,118721,118727,118732,118735,118738,118743,118776,118781,118785,118862,118865,118870,118874,118877,118916,118919,118928,118946,118951,118958,119075,119080,119083,119110,119115,119119,119128,119178,119185,119189,119192,119206,119213,119247,119252,119256,119279,119282,119287,119291,119294,119297,119300,119342,119346,119349,119352,119393,119397,119401,119404,119409,119414,119417,119440,119443,119451,119456,119459,119464,119469,119472,119477,119481,119486,119509,119514,119576,119584,119589,119594,119597,119602,119605,119610,119615,119633,119638,119644,119649,119663,119667,119670,119673,119676,119719,119722,119727,119828,119831,119836,119840,119844,119881,119885,119889,119893,119939,119943,119988,119992,119999,120007,120062,120065,120142,120145,120168,120172,120175,120180,120185,120193,120196,120201,120206,120211,120214,120219,120228,120231,120236,120239,120310,120315,120318,120323,120326,120331,120334,120339,120342,120347,120352,120355,120430,120433,120446,120451,120454,120468,120471,120500,120505,120534,120537,120542,120546,120551,120560,120563,120568,120571,120576,120579,120582,120587,120590,120595,120600,120603,120608,120611,120736,120741,120771,120774,120779,120784,120801,120804,120847,120850,120877,120882,120895,121038,121042,121047,121061,121064,121115,121118,121148,121151,121167,121172,121186,121189,121256,121261,121270,121275,121278,121290,121295,121302,121326,121329,121334,121337,121356,121361,121368,121380,121387],[10,118485,118481],{"id":118486},"_3-安装必备配置",[57,118488,118490],{"id":118489},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[106,118492,118495],{"className":118493,"code":118494,"language":5188},[5186],"  打开下方网站（注意，该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",[112,118496,118494],{"__ignoreMap":22},[86,118498,118500],{"id":118499},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[106,118502,118505],{"className":118503,"code":118504,"language":5188},[5186],"  输入以下命令\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",[112,118506,118504],{"__ignoreMap":22},[86,118508,118510],{"id":118509},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[106,118512,118516],{"className":118513,"code":118514,"language":118515,"meta":22,"style":22},"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",[112,118517,118518,118526,118537,118549,118563,118567,118577,118582,118586,118590,118595,118599,118611,118615,118620,118624,118635,118639,118655,118659,118670,118674,118679,118683,118691],{"__ignoreMap":22},[115,118519,118520,118522,118524],{"class":117,"line":118},[115,118521,24577],{"class":1963},[115,118523,117307],{"class":230},[115,118525,26243],{"class":230},[115,118527,118528,118530,118532,118534],{"class":117,"line":37},[115,118529,24577],{"class":1963},[115,118531,117307],{"class":230},[115,118533,23835],{"class":230},[115,118535,118536],{"class":230}," vim\n",[115,118538,118539,118541,118544,118546],{"class":117,"line":1180},[115,118540,24577],{"class":1963},[115,118542,118543],{"class":230}," rm",[115,118545,25326],{"class":174},[115,118547,118548],{"class":230}," \u002Fetc\u002Fapt\u002Fsources.list\n",[115,118550,118551,118553,118555,118557,118560],{"class":117,"line":1195},[115,118552,24577],{"class":1963},[115,118554,118543],{"class":230},[115,118556,25326],{"class":174},[115,118558,118559],{"class":230}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[115,118561,118562],{"class":174},"**\n",[115,118564,118565],{"class":117,"line":1201},[115,118566,2400],{"emptyLinePlaceholder":42},[115,118568,118569,118571,118574],{"class":117,"line":1215},[115,118570,24577],{"class":1963},[115,118572,118573],{"class":230}," vim",[115,118575,118576],{"class":230}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[115,118578,118579],{"class":117,"line":1221},[115,118580,118581],{"class":230},"```\n",[115,118583,118584],{"class":117,"line":1312},[115,118585,2400],{"emptyLinePlaceholder":42},[115,118587,118588],{"class":117,"line":1318},[115,118589,2400],{"emptyLinePlaceholder":42},[115,118591,118592],{"class":117,"line":1330},[115,118593,118594],{"class":1963},"选择好Ubuntu版本后，复制下方的内容。\n",[115,118596,118597],{"class":117,"line":1612},[115,118598,2400],{"emptyLinePlaceholder":42},[115,118600,118601,118603,118606,118609],{"class":117,"line":1617},[115,118602,352],{"class":121},[115,118604,118605],{"class":230},"[](",[115,118607,118608],{"class":1963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[115,118610,132],{"class":230},[115,118612,118613],{"class":117,"line":1623},[115,118614,2400],{"emptyLinePlaceholder":42},[115,118616,118617],{"class":117,"line":1628},[115,118618,118619],{"class":1963},"粘贴进去\n",[115,118621,118622],{"class":117,"line":1642},[115,118623,2400],{"emptyLinePlaceholder":42},[115,118625,118626,118628,118630,118633],{"class":117,"line":1647},[115,118627,352],{"class":121},[115,118629,118605],{"class":230},[115,118631,118632],{"class":1963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[115,118634,132],{"class":230},[115,118636,118637],{"class":117,"line":1653},[115,118638,2400],{"emptyLinePlaceholder":42},[115,118640,118641,118644,118647,118650,118652],{"class":117,"line":1674},[115,118642,118643],{"class":1963},"按一下ESC，然后英文冒号，输入",[115,118645,118646],{"class":230}," `",[115,118648,118649],{"class":1963},":wq!",[115,118651,1097],{"class":230},[115,118653,118654],{"class":1963},"然后回车\n",[115,118656,118657],{"class":117,"line":1679},[115,118658,2400],{"emptyLinePlaceholder":42},[115,118660,118661,118663,118665,118668],{"class":117,"line":1693},[115,118662,352],{"class":121},[115,118664,118605],{"class":230},[115,118666,118667],{"class":1963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[115,118669,132],{"class":230},[115,118671,118672],{"class":117,"line":1698},[115,118673,2400],{"emptyLinePlaceholder":42},[115,118675,118676],{"class":117,"line":1727},[115,118677,118678],{"class":1963},"输入以下命令\n",[115,118680,118681],{"class":117,"line":1732},[115,118682,2400],{"emptyLinePlaceholder":42},[115,118684,118685,118688],{"class":117,"line":1749},[115,118686,118687],{"class":230},"```",[115,118689,118690],{"class":1963},"Bash\n",[115,118692,118693,118695,118697],{"class":117,"line":1754},[115,118694,24577],{"class":1963},[115,118696,117307],{"class":230},[115,118698,26243],{"class":230},[14,118700,118701],{},"这里被替换成对应学校则成功",[14,118703,118704],{},[20,118705],{"alt":22,"src":118706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[57,118708,118710],{"id":118709},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[86,118712,118714],{"id":118713},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118716,118717],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118719,118720],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118722,118723],{},[27,118724,118725],{"href":118725,"rel":118726},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[31],[14,118728,118729],{},[20,118730],{"alt":22,"src":118731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118733,118734],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118736,118737],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118739,118740],{},[20,118741],{"alt":22,"src":118742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[106,118744,118746],{"className":117286,"code":118745,"language":117288,"meta":22,"style":22},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[112,118747,118748,118753,118760,118765],{"__ignoreMap":22},[115,118749,118750],{"class":117,"line":118},[115,118751,118752],{"class":184},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[115,118754,118755,118757],{"class":117,"line":37},[115,118756,101266],{"class":174},[115,118758,118759],{"class":230}," ~\u002FDownloads\n",[115,118761,118762],{"class":117,"line":1180},[115,118763,118764],{"class":184},"#下方chrome安装包名不一定是这个，根据名字来看\n",[115,118766,118767,118769,118771,118773],{"class":117,"line":1195},[115,118768,24577],{"class":1963},[115,118770,117307],{"class":230},[115,118772,23835],{"class":230},[115,118774,118775],{"class":230}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118777,118778],{},[20,118779],{"alt":22,"src":118780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[86,118782,118784],{"id":118783},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[106,118786,118788],{"className":117286,"code":118787,"language":117288,"meta":22,"style":22},"# 老版\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",[112,118789,118790,118795,118803,118814,118819,118823,118828,118838,118846,118857],{"__ignoreMap":22},[115,118791,118792],{"class":117,"line":118},[115,118793,118794],{"class":184},"# 老版\n",[115,118796,118797,118799,118801],{"class":117,"line":37},[115,118798,24577],{"class":1963},[115,118800,117307],{"class":230},[115,118802,26243],{"class":230},[115,118804,118805,118807,118809,118811],{"class":117,"line":1180},[115,118806,24577],{"class":1963},[115,118808,117307],{"class":230},[115,118810,23835],{"class":230},[115,118812,118813],{"class":230}," neofetch\n",[115,118815,118816],{"class":117,"line":1195},[115,118817,118818],{"class":1963},"neofetch\n",[115,118820,118821],{"class":117,"line":1201},[115,118822,2400],{"emptyLinePlaceholder":42},[115,118824,118825],{"class":117,"line":1215},[115,118826,118827],{"class":184},"# 新版\n",[115,118829,118830,118832,118835],{"class":117,"line":1221},[115,118831,24577],{"class":1963},[115,118833,118834],{"class":230}," add-apt-repository",[115,118836,118837],{"class":230}," ppa:zhangsongcui3371\u002Ffastfetch\n",[115,118839,118840,118842,118844],{"class":117,"line":1312},[115,118841,24577],{"class":1963},[115,118843,117307],{"class":230},[115,118845,26243],{"class":230},[115,118847,118848,118850,118852,118854],{"class":117,"line":1318},[115,118849,24577],{"class":1963},[115,118851,117307],{"class":230},[115,118853,23835],{"class":230},[115,118855,118856],{"class":230}," fastfetch\n",[115,118858,118859],{"class":117,"line":1330},[115,118860,118861],{"class":1963},"fastfetch\n",[14,118863,118864],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118866,118867],{},[20,118868],{"alt":22,"src":118869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[86,118871,118873],{"id":118872},"_323-移除snap应用","3.2.3 移除snap应用",[14,118875,118876],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[106,118878,118880],{"className":117286,"code":118879,"language":117288,"meta":22,"style":22},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[112,118881,118882,118894,118905],{"__ignoreMap":22},[115,118883,118884,118886,118888,118891],{"class":117,"line":118},[115,118885,24577],{"class":1963},[115,118887,26514],{"class":230},[115,118889,118890],{"class":230}," disable",[115,118892,118893],{"class":230}," snapd.service\n",[115,118895,118896,118898,118900,118902],{"class":117,"line":37},[115,118897,24577],{"class":1963},[115,118899,26514],{"class":230},[115,118901,118890],{"class":230},[115,118903,118904],{"class":230}," snapd.socket\n",[115,118906,118907,118909,118911,118913],{"class":117,"line":1180},[115,118908,24577],{"class":1963},[115,118910,26514],{"class":230},[115,118912,118890],{"class":230},[115,118914,118915],{"class":230}," snapd.seeded.service\n",[14,118917,118918],{},"然后查看snap应用列表",[14,118920,118921,118922,118927],{},"根据你安装的选择不同（最小安装或普通安装），有",[27,118923,118926],{"href":118924,"rel":118925},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[31],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[106,118929,118931],{"className":117286,"code":118930,"language":117288,"meta":22,"style":22},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[112,118932,118933,118938],{"__ignoreMap":22},[115,118934,118935],{"class":117,"line":118},[115,118936,118937],{"class":184},"# 查询当前系统上snap安装了哪些app\n",[115,118939,118940,118943],{"class":117,"line":37},[115,118941,118942],{"class":1963},"snap",[115,118944,118945],{"class":230}," list\n",[14,118947,118948],{},[20,118949],{"alt":22,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118952,118953,118954,118957],{},"卸载掉图中所有应用，按照 ",[275,118955,118956],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[106,118959,118961],{"className":117286,"code":118960,"language":117288,"meta":22,"style":22},"#移除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",[112,118962,118963,118968,118980,118985,118996,119001,119012,119017,119028,119033,119037,119042,119053,119064],{"__ignoreMap":22},[115,118964,118965],{"class":117,"line":118},[115,118966,118967],{"class":184},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[115,118969,118970,118972,118975,118977],{"class":117,"line":37},[115,118971,24577],{"class":1963},[115,118973,118974],{"class":230}," snap",[115,118976,26080],{"class":230},[115,118978,118979],{"class":230}," snap-store\n",[115,118981,118982],{"class":117,"line":1180},[115,118983,118984],{"class":184},"#移除firefox浏览器\n",[115,118986,118987,118989,118991,118993],{"class":117,"line":1195},[115,118988,24577],{"class":1963},[115,118990,118974],{"class":230},[115,118992,26080],{"class":230},[115,118994,118995],{"class":230}," firefox\n",[115,118997,118998],{"class":117,"line":1201},[115,118999,119000],{"class":184},"#移除gnome-42-2204\n",[115,119002,119003,119005,119007,119009],{"class":117,"line":1215},[115,119004,24577],{"class":1963},[115,119006,118974],{"class":230},[115,119008,26080],{"class":230},[115,119010,119011],{"class":230}," gnome-42-2204\n",[115,119013,119014],{"class":117,"line":1221},[115,119015,119016],{"class":184},"#移除gtk-common-themes\n",[115,119018,119019,119021,119023,119025],{"class":117,"line":1312},[115,119020,24577],{"class":1963},[115,119022,118974],{"class":230},[115,119024,26080],{"class":230},[115,119026,119027],{"class":230}," gtk-common-themes\n",[115,119029,119030],{"class":117,"line":1318},[115,119031,119032],{"class":184},"#移除其它...\n",[115,119034,119035],{"class":117,"line":1330},[115,119036,2674],{"class":125},[115,119038,119039],{"class":117,"line":1612},[115,119040,119041],{"class":184},"#移除core22,bare以及snapd\n",[115,119043,119044,119046,119048,119050],{"class":117,"line":1617},[115,119045,24577],{"class":1963},[115,119047,118974],{"class":230},[115,119049,26080],{"class":230},[115,119051,119052],{"class":230}," core22\n",[115,119054,119055,119057,119059,119061],{"class":117,"line":1623},[115,119056,24577],{"class":1963},[115,119058,118974],{"class":230},[115,119060,26080],{"class":230},[115,119062,119063],{"class":230}," bare\n",[115,119065,119066,119068,119070,119072],{"class":117,"line":1628},[115,119067,24577],{"class":1963},[115,119069,118974],{"class":230},[115,119071,26080],{"class":230},[115,119073,119074],{"class":230}," snapd\n",[14,119076,119077],{},[20,119078],{"alt":22,"src":119079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119081,119082],{},"输入以下命令查看是否还有snap包",[106,119084,119086],{"className":117286,"code":119085,"language":117288,"meta":22,"style":22},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[112,119087,119088,119094,119098,119102,119106],{"__ignoreMap":22},[115,119089,119090,119092],{"class":117,"line":118},[115,119091,118942],{"class":1963},[115,119093,118945],{"class":230},[115,119095,119096],{"class":117,"line":37},[115,119097,118794],{"class":184},[115,119099,119100],{"class":117,"line":1180},[115,119101,118818],{"class":1963},[115,119103,119104],{"class":117,"line":1195},[115,119105,118827],{"class":184},[115,119107,119108],{"class":117,"line":1201},[115,119109,118861],{"class":1963},[14,119111,119112],{},[20,119113],{"alt":22,"src":119114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[86,119116,119118],{"id":119117},"_324-移除snap","3.2.4 移除snap",[14,119120,119121,119122,119127],{},"在删除掉",[27,119123,119126],{"href":119124,"rel":119125},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[31],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[106,119129,119131],{"className":117286,"code":119130,"language":117288,"meta":22,"style":22}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[112,119132,119133,119138,119151,119156,119167],{"__ignoreMap":22},[115,119134,119135],{"class":117,"line":118},[115,119136,119137],{"class":184}," #使用apt移除掉snap\n",[115,119139,119140,119142,119144,119146,119149],{"class":117,"line":37},[115,119141,24577],{"class":1963},[115,119143,117307],{"class":230},[115,119145,117615],{"class":230},[115,119147,119148],{"class":174}," --purge",[115,119150,119074],{"class":230},[115,119152,119153],{"class":117,"line":1180},[115,119154,119155],{"class":184},"#移除snapd的一些目录\n",[115,119157,119158,119160,119162,119164],{"class":117,"line":1195},[115,119159,24577],{"class":1963},[115,119161,118543],{"class":230},[115,119163,25326],{"class":174},[115,119165,119166],{"class":230}," \u002Fvar\u002Fcache\u002Fsnapd\n",[115,119168,119169,119171,119173,119175],{"class":117,"line":1201},[115,119170,24577],{"class":1963},[115,119172,118543],{"class":230},[115,119174,25326],{"class":174},[115,119176,119177],{"class":230}," ~\u002Fsnap\n",[14,119179,119180,119181,119184],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[112,119182,119183],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[86,119186,119188],{"id":119187},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119190,119191],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[106,119193,119195],{"className":117286,"code":119194,"language":117288,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[112,119196,119197],{"__ignoreMap":22},[115,119198,119199,119201,119203],{"class":117,"line":118},[115,119200,24577],{"class":1963},[115,119202,118573],{"class":230},[115,119204,119205],{"class":230}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119207,119208,119209,119212],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[112,119210,119211],{},":wq"," 回车",[106,119214,119216],{"className":117286,"code":119215,"language":117288,"meta":22,"style":22},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[112,119217,119218,119225,119239],{"__ignoreMap":22},[115,119219,119220,119223],{"class":117,"line":118},[115,119221,119222],{"class":1963},"Package:",[115,119224,119074],{"class":230},[115,119226,119227,119230,119233,119236],{"class":117,"line":37},[115,119228,119229],{"class":1963},"Pin:",[115,119231,119232],{"class":230}," release",[115,119234,119235],{"class":230}," a=",[115,119237,119238],{"class":174},"*\n",[115,119240,119241,119244],{"class":117,"line":1180},[115,119242,119243],{"class":1963},"Pin-Priority:",[115,119245,119246],{"class":174}," -10\n",[14,119248,119249],{},[20,119250],{"alt":22,"src":119251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[86,119253,119255],{"id":119254},"_326-测试是否成功","3.2.6 测试是否成功",[106,119257,119259],{"className":117286,"code":119258,"language":117288,"meta":22,"style":22},"sudo apt update\nsudo apt install firefox\n",[112,119260,119261,119269],{"__ignoreMap":22},[115,119262,119263,119265,119267],{"class":117,"line":118},[115,119264,24577],{"class":1963},[115,119266,117307],{"class":230},[115,119268,26243],{"class":230},[115,119270,119271,119273,119275,119277],{"class":117,"line":37},[115,119272,24577],{"class":1963},[115,119274,117307],{"class":230},[115,119276,23835],{"class":230},[115,119278,118995],{"class":230},[14,119280,119281],{},"这里提示snapd无法被安装，就证明成功了",[14,119283,119284],{},[20,119285],{"alt":22,"src":119286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[86,119288,119290],{"id":119289},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119292,119293],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119295,119296],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119298,119299],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[106,119301,119303],{"className":117286,"code":119302,"language":117288,"meta":22,"style":22},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[112,119304,119305,119310,119319,119324,119332],{"__ignoreMap":22},[115,119306,119307],{"class":117,"line":118},[115,119308,119309],{"class":184},"# 添加Mozilla提供的源\n",[115,119311,119312,119314,119316],{"class":117,"line":37},[115,119313,24577],{"class":1963},[115,119315,118834],{"class":230},[115,119317,119318],{"class":230}," ppa:mozillateam\u002Fppa\n",[115,119320,119321],{"class":117,"line":1180},[115,119322,119323],{"class":184},"# 安装Firefox\n",[115,119325,119326,119328,119330],{"class":117,"line":1195},[115,119327,24577],{"class":1963},[115,119329,117307],{"class":230},[115,119331,26243],{"class":230},[115,119333,119334,119336,119338,119340],{"class":117,"line":1201},[115,119335,24577],{"class":1963},[115,119337,117307],{"class":230},[115,119339,23835],{"class":230},[115,119341,118995],{"class":230},[86,119343,119345],{"id":119344},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119347,119348],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119350,119351],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[106,119353,119355],{"className":117286,"code":119354,"language":117288,"meta":22,"style":22},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[112,119356,119357,119362,119372,119380,119384],{"__ignoreMap":22},[115,119358,119359],{"class":117,"line":118},[115,119360,119361],{"class":184},"#删掉禁止安装snap的配置文件\n",[115,119363,119364,119366,119368,119370],{"class":117,"line":37},[115,119365,24577],{"class":1963},[115,119367,118543],{"class":230},[115,119369,25326],{"class":174},[115,119371,119205],{"class":230},[115,119373,119374,119376,119378],{"class":117,"line":1180},[115,119375,24577],{"class":1963},[115,119377,117307],{"class":230},[115,119379,26243],{"class":230},[115,119381,119382],{"class":117,"line":1195},[115,119383,2400],{"emptyLinePlaceholder":42},[115,119385,119386,119388,119390],{"class":117,"line":1201},[115,119387,24577],{"class":1963},[115,119389,117307],{"class":230},[115,119391,119392],{"class":230}," dist-update\n",[57,119394,119396],{"id":119395},"_33-中文输入法","3.3 中文输入法",[86,119398,119400],{"id":119399},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119402,119403],{},"官网下载搜狗输入法",[14,119405,119406],{},[20,119407],{"alt":22,"src":119408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119410,119411],{},[20,119412],{"alt":22,"src":119413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119415,119416],{},"打开终端输入如下",[106,119418,119420],{"className":117286,"code":119419,"language":117288,"meta":22,"style":22},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[112,119421,119422,119429],{"__ignoreMap":22},[115,119423,119424,119426],{"class":117,"line":118},[115,119425,101266],{"class":174},[115,119427,119428],{"class":230}," ~\u002FDownloads\u002F\n",[115,119430,119431,119433,119435,119437],{"class":117,"line":37},[115,119432,24577],{"class":1963},[115,119434,117307],{"class":230},[115,119436,23835],{"class":230},[115,119438,119439],{"class":230}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119441,119442],{},"打开Fcitx",[14,119444,119445,119448],{},[20,119446],{"alt":22,"src":119447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[20,119449],{"alt":22,"src":119450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119452,119453],{},[20,119454],{"alt":22,"src":119455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119457,119458],{},"添加搜狗输入法",[14,119460,119461],{},[20,119462],{"alt":22,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119465,119466],{},[20,119467],{"alt":22,"src":119468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119470,119471],{},"将搜狗输入法设置为唯一输入法",[14,119473,119474],{},[20,119475],{"alt":22,"src":119476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[86,119478,119480],{"id":119479},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[69,119482,119483],{},[72,119484,119485],{},"卸载旧输入法",[106,119487,119489],{"className":118513,"code":119488,"language":118515,"meta":22,"style":22},"sudo apt purge fcitx* ibus*\n",[112,119490,119491],{"__ignoreMap":22},[115,119492,119493,119495,119497,119499,119502,119504,119507],{"class":117,"line":118},[115,119494,24577],{"class":1963},[115,119496,117307],{"class":230},[115,119498,117648],{"class":230},[115,119500,119501],{"class":230}," fcitx",[115,119503,580],{"class":174},[115,119505,119506],{"class":230}," ibus",[115,119508,119238],{"class":174},[69,119510,119511],{"start":37},[72,119512,119513],{},"安装Fcitx5",[106,119515,119517],{"className":117286,"code":119516,"language":117288,"meta":22,"style":22},"# 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",[112,119518,119519,119524,119538,119542,119547,119556,119564],{"__ignoreMap":22},[115,119520,119521],{"class":117,"line":118},[115,119522,119523],{"class":184},"# Ubuntu22.04及以上、Debian12及以上\n",[115,119525,119526,119528,119530,119532,119535],{"class":117,"line":37},[115,119527,24577],{"class":1963},[115,119529,117307],{"class":230},[115,119531,23835],{"class":230},[115,119533,119534],{"class":230}," fcitx5",[115,119536,119537],{"class":230}," fcitx5-chinese-addons\n",[115,119539,119540],{"class":117,"line":1180},[115,119541,2400],{"emptyLinePlaceholder":42},[115,119543,119544],{"class":117,"line":1195},[115,119545,119546],{"class":184},"# Ubuntu20.04\n",[115,119548,119549,119551,119553],{"class":117,"line":1201},[115,119550,24577],{"class":1963},[115,119552,118834],{"class":230},[115,119554,119555],{"class":230}," ppa:zhsj\u002Ffcitx5\n",[115,119557,119558,119560,119562],{"class":117,"line":1215},[115,119559,24577],{"class":1963},[115,119561,117307],{"class":230},[115,119563,26243],{"class":230},[115,119565,119566,119568,119570,119572,119574],{"class":117,"line":1221},[115,119567,24577],{"class":1963},[115,119569,117307],{"class":230},[115,119571,23835],{"class":230},[115,119573,119534],{"class":230},[115,119575,119537],{"class":230},[69,119577,119578,119581],{"start":1180},[72,119579,119580],{},"Reboot System",[72,119582,119583],{},"启动Fcitx5",[14,119585,119586],{},[20,119587],{"alt":22,"src":119588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[69,119590,119591],{"start":1201},[72,119592,119593],{},"修改一些设置",[14,119595,119596],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119598,119599],{},[20,119600],{"alt":22,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119603,119604],{},"添加快捷键以便于更好切换中英文",[14,119606,119607],{},[20,119608],{"alt":22,"src":119609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[69,119611,119612],{"start":1215},[72,119613,119614],{},"重启",[106,119616,119618],{"className":118513,"code":119617,"language":118515,"meta":22,"style":22},"sudo shutdown -r now\n",[112,119619,119620],{"__ignoreMap":22},[115,119621,119622,119624,119627,119630],{"class":117,"line":118},[115,119623,24577],{"class":1963},[115,119625,119626],{"class":230}," shutdown",[115,119628,119629],{"class":174}," -r",[115,119631,119632],{"class":230}," now\n",[69,119634,119635],{"start":1221},[72,119636,119637],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119639,119640],{},[27,119641,119642],{"href":119642,"rel":119643},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[31],[69,119645,119646],{"start":1312},[72,119647,119648],{},"再重启",[106,119650,119651],{"className":118513,"code":119617,"language":118515,"meta":22,"style":22},[112,119652,119653],{"__ignoreMap":22},[115,119654,119655,119657,119659,119661],{"class":117,"line":118},[115,119656,24577],{"class":1963},[115,119658,119626],{"class":230},[115,119660,119629],{"class":174},[115,119662,119632],{"class":230},[57,119664,119666],{"id":119665},"_34-pip3源替换","3.4 pip3源替换",[14,119668,119669],{},"非Debian系发行版需要做。",[14,119671,119672],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119674,119675],{},"使用dnf的系统也可能不用做。",[106,119677,119679],{"className":117286,"code":119678,"language":117288,"meta":22,"style":22},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[112,119680,119681,119686,119693,119698,119703],{"__ignoreMap":22},[115,119682,119683],{"class":117,"line":118},[115,119684,119685],{"class":184},"# 检查是否已安装 pip\n",[115,119687,119688,119691],{"class":117,"line":37},[115,119689,119690],{"class":1963},"pip3",[115,119692,26294],{"class":174},[115,119694,119695],{"class":117,"line":1180},[115,119696,119697],{"class":184},"# 如果未安装，先安装 pip3（见下方）\n",[115,119699,119700],{"class":117,"line":1195},[115,119701,119702],{"class":184},"# 配置 pip 使用清华源\n",[115,119704,119705,119707,119710,119713,119716],{"class":117,"line":1201},[115,119706,119690],{"class":1963},[115,119708,119709],{"class":230}," config",[115,119711,119712],{"class":230}," set",[115,119714,119715],{"class":230}," global.index-url",[115,119717,119718],{"class":230}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119720,119721],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119723,119724],{},[20,119725],{"alt":22,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[106,119728,119730],{"className":117286,"code":119729,"language":117288,"meta":22,"style":22},"#安装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",[112,119731,119732,119737,119745,119756,119760,119765,119784,119788,119793,119805,119809,119814],{"__ignoreMap":22},[115,119733,119734],{"class":117,"line":118},[115,119735,119736],{"class":184},"#安装pip3\n",[115,119738,119739,119741,119743],{"class":117,"line":37},[115,119740,24577],{"class":1963},[115,119742,117307],{"class":230},[115,119744,26243],{"class":230},[115,119746,119747,119749,119751,119753],{"class":117,"line":1180},[115,119748,24577],{"class":1963},[115,119750,26077],{"class":230},[115,119752,23835],{"class":230},[115,119754,119755],{"class":230}," python3-pip\n",[115,119757,119758],{"class":117,"line":1195},[115,119759,2400],{"emptyLinePlaceholder":42},[115,119761,119762],{"class":117,"line":1201},[115,119763,119764],{"class":184},"#更新pip3\n",[115,119766,119767,119769,119771,119773,119775,119777,119780,119782],{"class":117,"line":1215},[115,119768,100869],{"class":1963},[115,119770,100872],{"class":174},[115,119772,100895],{"class":230},[115,119774,23835],{"class":230},[115,119776,26431],{"class":174},[115,119778,119779],{"class":230}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[115,119781,100900],{"class":174},[115,119783,100903],{"class":230},[115,119785,119786],{"class":117,"line":1221},[115,119787,2400],{"emptyLinePlaceholder":42},[115,119789,119790],{"class":117,"line":1312},[115,119791,119792],{"class":184},"#设置pip源为清华源\n",[115,119794,119795,119797,119799,119801,119803],{"class":117,"line":1318},[115,119796,119690],{"class":1963},[115,119798,119709],{"class":230},[115,119800,119712],{"class":230},[115,119802,119715],{"class":230},[115,119804,119718],{"class":230},[115,119806,119807],{"class":117,"line":1330},[115,119808,2400],{"emptyLinePlaceholder":42},[115,119810,119811],{"class":117,"line":1612},[115,119812,119813],{"class":184},"#测试\n",[115,119815,119816,119818,119820,119822,119824,119826],{"class":117,"line":1617},[115,119817,100869],{"class":1963},[115,119819,100872],{"class":174},[115,119821,100895],{"class":230},[115,119823,23835],{"class":230},[115,119825,100900],{"class":174},[115,119827,100903],{"class":230},[14,119829,119830],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119832,119833],{},[20,119834],{"alt":22,"src":119835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[57,119837,119839],{"id":119838},"_35-显卡驱动安装","3.5 显卡驱动安装",[86,119841,119843],{"id":119842},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[106,119845,119847],{"className":118513,"code":119846,"language":118515,"meta":22,"style":22},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[112,119848,119849,119854,119869,119874],{"__ignoreMap":22},[115,119850,119851],{"class":117,"line":118},[115,119852,119853],{"class":184},"# 如果是使用apt安装的驱动\n",[115,119855,119856,119858,119860,119862,119864,119867],{"class":117,"line":37},[115,119857,24577],{"class":1963},[115,119859,26077],{"class":230},[115,119861,26080],{"class":230},[115,119863,119148],{"class":174},[115,119865,119866],{"class":230}," nvidia",[115,119868,119238],{"class":174},[115,119870,119871],{"class":117,"line":1180},[115,119872,119873],{"class":184},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[115,119875,119876,119878],{"class":117,"line":1195},[115,119877,24577],{"class":1963},[115,119879,119880],{"class":230}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[86,119882,119884],{"id":119883},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21999,119886,119888],{"id":119887},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22911,119890,119892],{"id":119891},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[106,119894,119896],{"className":118513,"code":119895,"language":118515,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[112,119897,119898,119903,119914,119919,119929,119934],{"__ignoreMap":22},[115,119899,119900],{"class":117,"line":118},[115,119901,119902],{"class":184},"# 安装英伟达驱动\n",[115,119904,119905,119907,119909,119911],{"class":117,"line":37},[115,119906,24577],{"class":1963},[115,119908,117307],{"class":230},[115,119910,23835],{"class":230},[115,119912,119913],{"class":230}," nvidia-driver-版本号\n",[115,119915,119916],{"class":117,"line":1180},[115,119917,119918],{"class":184},"# 重启 \n",[115,119920,119921,119923,119925,119927],{"class":117,"line":1195},[115,119922,24577],{"class":1963},[115,119924,119626],{"class":230},[115,119926,119629],{"class":174},[115,119928,119632],{"class":230},[115,119930,119931],{"class":117,"line":1201},[115,119932,119933],{"class":184},"# 检查驱动是否安装成功\n",[115,119935,119936],{"class":117,"line":1215},[115,119937,119938],{"class":1963},"nvidia-smi\n",[22911,119940,119942],{"id":119941},"_35212-debian","3.5.2.1.2 Debian",[106,119944,119946],{"className":118513,"code":119945,"language":118515,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[112,119947,119948,119952,119966,119970,119980,119984],{"__ignoreMap":22},[115,119949,119950],{"class":117,"line":118},[115,119951,119902],{"class":184},[115,119953,119954,119956,119958,119960,119963],{"class":117,"line":37},[115,119955,24577],{"class":1963},[115,119957,117307],{"class":230},[115,119959,23835],{"class":230},[115,119961,119962],{"class":230}," nvidia-driver",[115,119964,119965],{"class":230}," nvidia-settings\n",[115,119967,119968],{"class":117,"line":1180},[115,119969,119918],{"class":184},[115,119971,119972,119974,119976,119978],{"class":117,"line":1195},[115,119973,24577],{"class":1963},[115,119975,119626],{"class":230},[115,119977,119629],{"class":174},[115,119979,119632],{"class":230},[115,119981,119982],{"class":117,"line":1201},[115,119983,119933],{"class":184},[115,119985,119986],{"class":117,"line":1215},[115,119987,119938],{"class":1963},[21999,119989,119991],{"id":119990},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119993,119994,119995,119998],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[275,119996,119997],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120000,120001,120002],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23554,120003,120004],{},[275,120005,120006],{},"（也可以不禁用桌面环境，直接进行下一步。）",[106,120008,120010],{"className":118513,"code":120009,"language":118515,"meta":22,"style":22},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[112,120011,120012,120017,120027,120032,120045,120050],{"__ignoreMap":22},[115,120013,120014],{"class":117,"line":118},[115,120015,120016],{"class":184},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[115,120018,120019,120021,120024],{"class":117,"line":37},[115,120020,24577],{"class":1963},[115,120022,120023],{"class":230}," telinit",[115,120025,120026],{"class":174}," 3\n",[115,120028,120029],{"class":117,"line":1180},[115,120030,120031],{"class":184},"# ubuntu 使用下方命令\n",[115,120033,120034,120036,120039,120042],{"class":117,"line":1195},[115,120035,24577],{"class":1963},[115,120037,120038],{"class":230}," service",[115,120040,120041],{"class":230}," lightdm",[115,120043,120044],{"class":230}," stop\n",[115,120046,120047],{"class":117,"line":1201},[115,120048,120049],{"class":184},"# Fedora 使用下方命令\n",[115,120051,120052,120054,120056,120059],{"class":117,"line":1215},[115,120053,24577],{"class":1963},[115,120055,26514],{"class":230},[115,120057,120058],{"class":230}," isolate",[115,120060,120061],{"class":230}," multi-user.target\n",[14,120063,120064],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[106,120066,120068],{"className":118513,"code":120067,"language":118515,"meta":22,"style":22},"# 编译环境+准备工作\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",[112,120069,120070,120075,120086,120091,120098,120103,120115,120120,120127,120132],{"__ignoreMap":22},[115,120071,120072],{"class":117,"line":118},[115,120073,120074],{"class":184},"# 编译环境+准备工作\n",[115,120076,120077,120079,120081,120083],{"class":117,"line":37},[115,120078,24577],{"class":1963},[115,120080,117307],{"class":230},[115,120082,23835],{"class":230},[115,120084,120085],{"class":230}," build-essential\n",[115,120087,120088],{"class":117,"line":1180},[115,120089,120090],{"class":184},"# 进入到.run目录中\n",[115,120092,120093,120095],{"class":117,"line":1195},[115,120094,101266],{"class":174},[115,120096,120097],{"class":230}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[115,120099,120100],{"class":117,"line":1201},[115,120101,120102],{"class":184},"# 给驱动文件增加可执行权限：\n",[115,120104,120105,120107,120109,120112],{"class":117,"line":1215},[115,120106,24577],{"class":1963},[115,120108,24580],{"class":230},[115,120110,120111],{"class":230}," a+x",[115,120113,120114],{"class":230}," NVIDIA-Linux-x86_64-550.107.02.run\n",[115,120116,120117],{"class":117,"line":1221},[115,120118,120119],{"class":184},"# 然后执行安装：\n",[115,120121,120122,120124],{"class":117,"line":1312},[115,120123,24577],{"class":1963},[115,120125,120126],{"class":230}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[115,120128,120129],{"class":117,"line":1318},[115,120130,120131],{"class":184},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[115,120133,120134,120136,120139],{"class":117,"line":1330},[115,120135,24577],{"class":1963},[115,120137,120138],{"class":230}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[115,120140,120141],{"class":174},"  --no-opengl-files\n",[14,120143,120144],{},"安装完毕重启即可",[106,120146,120148],{"className":118513,"code":120147,"language":118515,"meta":22,"style":22},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[112,120149,120150,120154,120160,120164],{"__ignoreMap":22},[115,120151,120152],{"class":117,"line":118},[115,120153,119918],{"class":184},[115,120155,120156,120158],{"class":117,"line":37},[115,120157,24577],{"class":1963},[115,120159,26648],{"class":230},[115,120161,120162],{"class":117,"line":1180},[115,120163,119933],{"class":184},[115,120165,120166],{"class":117,"line":1195},[115,120167,119938],{"class":1963},[86,120169,120171],{"id":120170},"_353-安装cuda","3.5.3 安装CUDA",[14,120173,120174],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120176,120177],{},[20,120178],{"alt":22,"src":120179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[69,120181,120182],{},[72,120183,120184],{},"先查看显卡驱动所支持的最高CUDA版本",[106,120186,120187],{"className":118513,"code":119938,"language":118515,"meta":22,"style":22},[112,120188,120189],{"__ignoreMap":22},[115,120190,120191],{"class":117,"line":118},[115,120192,119938],{"class":1963},[14,120194,120195],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120197,120198],{},[20,120199],{"alt":22,"src":120200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[69,120202,120203],{"start":37},[72,120204,120205],{},"下载CUDA并安装CUDA",[14,120207,118292,120208],{},[27,120209,118295],{"href":118295,"rel":120210},[31],[14,120212,120213],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120215,120216],{},[20,120217],{"alt":22,"src":120218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120220,120221,120222,120227],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[27,120223,120226],{"href":120224,"rel":120225},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[31],"Vinci机器人队单片机教程","）",[14,120229,120230],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120232,120233],{},[20,120234],{"alt":22,"src":120235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120237,120238],{},"将最下方框框里的命令敲入终端",[106,120240,120242],{"className":118513,"code":120241,"language":118515,"meta":22,"style":22},"# 在当前文件夹下创建一个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",[112,120243,120244,120249,120258,120263,120270,120275,120283,120288,120299,120304],{"__ignoreMap":22},[115,120245,120246],{"class":117,"line":118},[115,120247,120248],{"class":184},"# 在当前文件夹下创建一个ttt的子文件夹\n",[115,120250,120251,120253,120255],{"class":117,"line":37},[115,120252,101256],{"class":1963},[115,120254,29217],{"class":174},[115,120256,120257],{"class":230}," .\u002Fttt\n",[115,120259,120260],{"class":117,"line":1180},[115,120261,120262],{"class":184},"# 进入ttt文件夹\n",[115,120264,120265,120267],{"class":117,"line":1195},[115,120266,101266],{"class":174},[115,120268,120269],{"class":230}," ttt\n",[115,120271,120272],{"class":117,"line":1201},[115,120273,120274],{"class":184},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[115,120276,120277,120280],{"class":117,"line":1215},[115,120278,120279],{"class":1963},"wget",[115,120281,120282],{"class":230}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[115,120284,120285],{"class":117,"line":1221},[115,120286,120287],{"class":184},"# 给予权限\n",[115,120289,120290,120292,120294,120296],{"class":117,"line":1312},[115,120291,24577],{"class":1963},[115,120293,24580],{"class":230},[115,120295,120111],{"class":230},[115,120297,120298],{"class":230}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[115,120300,120301],{"class":117,"line":1318},[115,120302,120303],{"class":184},"# 运行脚本\n",[115,120305,120306,120308],{"class":117,"line":1330},[115,120307,24577],{"class":1963},[115,120309,120298],{"class":230},[14,120311,120312],{},[20,120313],{"alt":22,"src":120314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120316,120317],{},"正在安装中：",[14,120319,120320],{},[20,120321],{"alt":22,"src":120322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120324,120325],{},"输入accept接受即可",[14,120327,120328],{},[20,120329],{"alt":22,"src":120330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120332,120333],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120335,120336],{},[20,120337],{"alt":22,"src":120338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120340,120341],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120343,120344],{},[20,120345],{"alt":22,"src":120346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[69,120348,120349],{"start":1180},[72,120350,120351],{},"配置环境",[14,120353,120354],{},"根据上方确认一下路径，比如我上面红色框起来的为",[106,120356,120358],{"className":118513,"code":120357,"language":118515,"meta":22,"style":22},"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",[112,120359,120360,120376,120391],{"__ignoreMap":22},[115,120361,120362,120365,120368,120371,120374],{"class":117,"line":118},[115,120363,120364],{"class":1963},"Please",[115,120366,120367],{"class":230}," make",[115,120369,120370],{"class":230}," sure",[115,120372,120373],{"class":230}," that",[115,120375,2674],{"class":125},[115,120377,120378,120380,120383,120386,120389],{"class":117,"line":37},[115,120379,52261],{"class":1963},[115,120381,120382],{"class":230},"   PATH",[115,120384,120385],{"class":230}," includes",[115,120387,120388],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[115,120390,2674],{"class":125},[115,120392,120393,120395,120398,120400,120403,120406,120408,120411,120414,120417,120420,120422,120425,120427],{"class":117,"line":1180},[115,120394,52261],{"class":1963},[115,120396,120397],{"class":230},"   LD_LIBRARY_PATH",[115,120399,120385],{"class":230},[115,120401,120402],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[115,120404,120405],{"class":230}," or,",[115,120407,5210],{"class":230},[115,120409,120410],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[115,120412,120413],{"class":230}," to",[115,120415,120416],{"class":230}," \u002Fetc\u002Fld.so.conf",[115,120418,120419],{"class":230}," and",[115,120421,27231],{"class":230},[115,120423,120424],{"class":230}," ldconfig",[115,120426,64594],{"class":230},[115,120428,120429],{"class":230}," root\n",[14,120431,120432],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[106,120434,120436],{"className":118513,"code":120435,"language":118515,"meta":22,"style":22},"which nvcc\n",[112,120437,120438],{"__ignoreMap":22},[115,120439,120440,120443],{"class":117,"line":118},[115,120441,120442],{"class":174},"which",[115,120444,120445],{"class":230}," nvcc\n",[14,120447,120448],{},[20,120449],{"alt":22,"src":120450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120452,120453],{},"所以我进行以下操作：",[106,120455,120457],{"className":118513,"code":120456,"language":118515,"meta":22,"style":22},"sudo vim ~\u002F.bashrc\n",[112,120458,120459],{"__ignoreMap":22},[115,120460,120461,120463,120465],{"class":117,"line":118},[115,120462,24577],{"class":1963},[115,120464,118573],{"class":230},[115,120466,120467],{"class":230}," ~\u002F.bashrc\n",[14,120469,120470],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[106,120472,120474],{"className":118513,"code":120473,"language":118515,"meta":22,"style":22},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[112,120475,120476,120488],{"__ignoreMap":22},[115,120477,120478,120480,120483,120485],{"class":117,"line":118},[115,120479,25043],{"class":121},[115,120481,120482],{"class":125}," PATH",[115,120484,171],{"class":121},[115,120486,120487],{"class":125},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[115,120489,120490,120492,120495,120497],{"class":117,"line":37},[115,120491,25043],{"class":121},[115,120493,120494],{"class":125}," LD_LIBRARY_PATH",[115,120496,171],{"class":121},[115,120498,120499],{"class":125},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120501,120502],{},[20,120503],{"alt":22,"src":120504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[106,120506,120508],{"className":118513,"code":120507,"language":118515,"meta":22,"style":22},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[112,120509,120510,120515,120521,120526],{"__ignoreMap":22},[115,120511,120512],{"class":117,"line":118},[115,120513,120514],{"class":184},"# 刷新当前终端的环境变量\n",[115,120516,120517,120519],{"class":117,"line":37},[115,120518,100883],{"class":174},[115,120520,120467],{"class":230},[115,120522,120523],{"class":117,"line":1180},[115,120524,120525],{"class":184},"# 验证CUDA是否安装成功\n",[115,120527,120528,120531],{"class":117,"line":1195},[115,120529,120530],{"class":1963},"nvcc",[115,120532,120533],{"class":174}," -V\n",[14,120535,120536],{},"出现下图这种则安装成功。",[14,120538,120539],{},[20,120540],{"alt":22,"src":120541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[86,120543,120545],{"id":120544},"_354-安装cudnn","3.5.4 安装cuDNN",[69,120547,120548],{},[72,120549,120550],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120552,120553,120554,120559],{},"前往 NVIDIA cuDNN 下载页面：",[27,120555,120558],{"href":120556,"rel":120557},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[31],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120561,120562],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120564,120565],{},[20,120566],{"alt":22,"src":120567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120569,120570],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120572,120573],{},[20,120574],{"alt":22,"src":120575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120577,120578],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120580,120581],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120583,120584],{},[275,120585,120586],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120588,120589],{},"下载好的：",[14,120591,120592],{},[20,120593],{"alt":22,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[69,120596,120597],{"start":37},[72,120598,120599],{},"安装cuDNN",[14,120601,120602],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120604,120605],{},[20,120606],{"alt":22,"src":120607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120609,120610],{},"解压文件，并复制到对应位置完成安装",[106,120612,120614],{"className":118513,"code":120613,"language":118515,"meta":22,"style":22},"# 解压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",[112,120615,120616,120621,120632,120637,120644,120649,120665,120679,120684,120695,120704,120708,120724],{"__ignoreMap":22},[115,120617,120618],{"class":117,"line":118},[115,120619,120620],{"class":184},"# 解压cuDNN文件\n",[115,120622,120623,120626,120629],{"class":117,"line":37},[115,120624,120625],{"class":1963},"tar",[115,120627,120628],{"class":174}," -xvf",[115,120630,120631],{"class":230}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[115,120633,120634],{"class":117,"line":1180},[115,120635,120636],{"class":184},"# cd进文件夹\n",[115,120638,120639,120641],{"class":117,"line":1195},[115,120640,101266],{"class":174},[115,120642,120643],{"class":230}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[115,120645,120646],{"class":117,"line":1201},[115,120647,120648],{"class":184},"# 复制cuDNN文件到CUDA目录\n",[115,120650,120651,120653,120655,120658,120660,120663],{"class":117,"line":1215},[115,120652,24577],{"class":1963},[115,120654,27862],{"class":230},[115,120656,120657],{"class":230}," include\u002Fcudnn",[115,120659,580],{"class":174},[115,120661,120662],{"class":230},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[115,120664,2674],{"class":125},[115,120666,120667,120669,120671,120674,120676],{"class":117,"line":1221},[115,120668,24577],{"class":1963},[115,120670,27862],{"class":230},[115,120672,120673],{"class":230}," lib\u002Flibcudnn",[115,120675,580],{"class":174},[115,120677,120678],{"class":230},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[115,120680,120681],{"class":117,"line":1312},[115,120682,120683],{"class":184},"# 对比一下有没有缺文件\n",[115,120685,120686,120688,120691,120693],{"class":117,"line":1318},[115,120687,26762],{"class":1963},[115,120689,120690],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[115,120692,580],{"class":174},[115,120694,2674],{"class":125},[115,120696,120697,120699,120702],{"class":117,"line":1330},[115,120698,26762],{"class":1963},[115,120700,120701],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[115,120703,119238],{"class":174},[115,120705,120706],{"class":117,"line":1612},[115,120707,120287],{"class":184},[115,120709,120710,120712,120714,120717,120719,120721],{"class":117,"line":1617},[115,120711,24577],{"class":1963},[115,120713,24580],{"class":230},[115,120715,120716],{"class":230}," a+r",[115,120718,120690],{"class":230},[115,120720,580],{"class":174},[115,120722,120723],{"class":125},"   \n",[115,120725,120726,120728,120730,120732,120734],{"class":117,"line":1623},[115,120727,24577],{"class":1963},[115,120729,24580],{"class":230},[115,120731,120716],{"class":230},[115,120733,120701],{"class":230},[115,120735,119238],{"class":174},[69,120737,120738],{"start":1180},[72,120739,120740],{},"检查是否安装成功",[106,120742,120744],{"className":118513,"code":120743,"language":118515,"meta":22,"style":22},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[112,120745,120746,120751],{"__ignoreMap":22},[115,120747,120748],{"class":117,"line":118},[115,120749,120750],{"class":184},"# 检查cuDNN版本命令\n",[115,120752,120753,120756,120759,120761,120763,120766,120769],{"class":117,"line":37},[115,120754,120755],{"class":1963},"cat",[115,120757,120758],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[115,120760,25110],{"class":121},[115,120762,30237],{"class":1963},[115,120764,120765],{"class":230}," CUDNN_MAJOR",[115,120767,120768],{"class":174}," -A",[115,120770,47724],{"class":174},[14,120772,120773],{},"出现下图这样的就是安装成功了",[14,120775,120776],{},[20,120777],{"alt":22,"src":120778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[69,120780,120781],{"start":1195},[72,120782,120783],{},"软链接(一般不需要)",[106,120785,120787],{"className":118513,"code":120786,"language":118515,"meta":22,"style":22},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[112,120788,120789,120794],{"__ignoreMap":22},[115,120790,120791],{"class":117,"line":118},[115,120792,120793],{"class":184},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[115,120795,120796,120798],{"class":117,"line":37},[115,120797,24577],{"class":1963},[115,120799,120800],{"class":230}," ldconfig\n",[14,120802,120803],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[106,120805,120810],{"className":120806,"code":120807,"language":120808,"meta":120809,"style":22},"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",[112,120811,120812,120817,120822,120827,120832,120837,120842],{"__ignoreMap":22},[115,120813,120814],{"class":117,"line":118},[115,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[115,120818,120819],{"class":117,"line":37},[115,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[115,120823,120824],{"class":117,"line":1180},[115,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[115,120828,120829],{"class":117,"line":1195},[115,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[115,120833,120834],{"class":117,"line":1201},[115,120835,120836],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[115,120838,120839],{"class":117,"line":1215},[115,120840,120841],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[115,120843,120844],{"class":117,"line":1221},[115,120845,120846],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120848,120849],{},"运行下方的命令",[106,120851,120853],{"className":118513,"code":120852,"language":118515,"meta":22,"style":22},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[112,120854,120855,120860,120867,120872],{"__ignoreMap":22},[115,120856,120857],{"class":117,"line":118},[115,120858,120859],{"class":184},"# cd进入CUDA路径\n",[115,120861,120862,120864],{"class":117,"line":37},[115,120863,101266],{"class":174},[115,120865,120866],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[115,120868,120869],{"class":117,"line":1180},[115,120870,120871],{"class":184}," # 查看本路径下的需要软链接的文件名\n",[115,120873,120874],{"class":117,"line":1195},[115,120875,120876],{"class":1963}," ls\n",[14,120878,120879],{},[20,120880],{"alt":22,"src":120881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120883,120884,120885,18411,120888,18411,120891,120894],{},"如上图，我需要将",[112,120886,120887],{},"libcudnn_xxx_xxxxx.so.8.9.7",[112,120889,120890],{},"libcudnn_xxx_xxxxx.so.8",[112,120892,120893],{},"libcudnn_xxx_xxxxx.so","软链接",[106,120896,120898],{"className":118513,"code":120897,"language":118515,"meta":22,"style":22},"# 创建符号链接。对于每个 .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",[112,120899,120900,120905,120921,120935,120949,120963,120977,120991,121005,121010,121016,121021],{"__ignoreMap":22},[115,120901,120902],{"class":117,"line":118},[115,120903,120904],{"class":184},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[115,120906,120907,120909,120912,120915,120918],{"class":117,"line":37},[115,120908,24577],{"class":1963},[115,120910,120911],{"class":230}," ln",[115,120913,120914],{"class":174}," -sf",[115,120916,120917],{"class":230}," libcudnn_cnn_train.so.8.9.7",[115,120919,120920],{"class":230}," libcudnn_cnn_train.so.8\n",[115,120922,120923,120925,120927,120929,120932],{"class":117,"line":1180},[115,120924,24577],{"class":1963},[115,120926,120911],{"class":230},[115,120928,120914],{"class":174},[115,120930,120931],{"class":230}," libcudnn_adv_infer.so.8.9.7",[115,120933,120934],{"class":230}," libcudnn_adv_infer.so.8\n",[115,120936,120937,120939,120941,120943,120946],{"class":117,"line":1195},[115,120938,24577],{"class":1963},[115,120940,120911],{"class":230},[115,120942,120914],{"class":174},[115,120944,120945],{"class":230}," libcudnn_adv_train.so.8.9.7",[115,120947,120948],{"class":230}," libcudnn_adv_train.so.8\n",[115,120950,120951,120953,120955,120957,120960],{"class":117,"line":1201},[115,120952,24577],{"class":1963},[115,120954,120911],{"class":230},[115,120956,120914],{"class":174},[115,120958,120959],{"class":230}," libcudnn_cnn_infer.so.8.9.7",[115,120961,120962],{"class":230}," libcudnn_cnn_infer.so.8\n",[115,120964,120965,120967,120969,120971,120974],{"class":117,"line":1215},[115,120966,24577],{"class":1963},[115,120968,120911],{"class":230},[115,120970,120914],{"class":174},[115,120972,120973],{"class":230}," libcudnn.so.8.9.7",[115,120975,120976],{"class":230}," libcudnn.so.8\n",[115,120978,120979,120981,120983,120985,120988],{"class":117,"line":1221},[115,120980,24577],{"class":1963},[115,120982,120911],{"class":230},[115,120984,120914],{"class":174},[115,120986,120987],{"class":230}," libcudnn_ops_infer.so.8.9.7",[115,120989,120990],{"class":230}," libcudnn_ops_infer.so.8\n",[115,120992,120993,120995,120997,120999,121002],{"class":117,"line":1312},[115,120994,24577],{"class":1963},[115,120996,120911],{"class":230},[115,120998,120914],{"class":174},[115,121000,121001],{"class":230}," libcudnn_ops_train.so.8.9.7",[115,121003,121004],{"class":230}," libcudnn_ops_train.so.8\n",[115,121006,121007],{"class":117,"line":1318},[115,121008,121009],{"class":184},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[115,121011,121012,121014],{"class":117,"line":1330},[115,121013,24577],{"class":1963},[115,121015,120800],{"class":230},[115,121017,121018],{"class":117,"line":1612},[115,121019,121020],{"class":184},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[115,121022,121023,121025,121028,121031,121033,121036],{"class":117,"line":1617},[115,121024,26762],{"class":1963},[115,121026,121027],{"class":174}," -l",[115,121029,121030],{"class":230}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[115,121032,580],{"class":174},[115,121034,121035],{"class":230},".so",[115,121037,119238],{"class":174},[86,121039,121041],{"id":121040},"_355-常见问题","3.5.5 常见问题",[69,121043,121044],{},[72,121045,121046],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[106,121048,121050],{"className":118513,"code":121049,"language":118515,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[112,121051,121052],{"__ignoreMap":22},[115,121053,121054,121056,121058],{"class":117,"line":118},[115,121055,24577],{"class":1963},[115,121057,118573],{"class":230},[115,121059,121060],{"class":230}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121062,121063],{},"blacklist-nouveau.conf文件内容如下：",[106,121065,121067],{"className":118513,"code":121066,"language":118515,"meta":22,"style":22},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[112,121068,121069,121077,121084,121096,121106],{"__ignoreMap":22},[115,121070,121071,121074],{"class":117,"line":118},[115,121072,121073],{"class":1963},"blacklist",[115,121075,121076],{"class":230}," nouveau\n",[115,121078,121079,121081],{"class":117,"line":37},[115,121080,121073],{"class":1963},[115,121082,121083],{"class":230}," lbm-nouveau\n",[115,121085,121086,121088,121091,121094],{"class":117,"line":1180},[115,121087,115920],{"class":1963},[115,121089,121090],{"class":230}," nouveau",[115,121092,121093],{"class":230}," modeset=",[115,121095,3085],{"class":174},[115,121097,121098,121101,121103],{"class":117,"line":1195},[115,121099,121100],{"class":174},"alias",[115,121102,121090],{"class":230},[115,121104,121105],{"class":230}," off\n",[115,121107,121108,121110,121113],{"class":117,"line":1201},[115,121109,121100],{"class":174},[115,121111,121112],{"class":230}," lbm-nouveau",[115,121114,121105],{"class":230},[14,121116,121117],{},"接着运行下方命令",[106,121119,121121],{"className":118513,"code":121120,"language":118515,"meta":22,"style":22},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[112,121122,121123,121133,121138],{"__ignoreMap":22},[115,121124,121125,121127,121130],{"class":117,"line":118},[115,121126,24577],{"class":1963},[115,121128,121129],{"class":230}," update-initramfs",[115,121131,121132],{"class":174}," -u\n",[115,121134,121135],{"class":117,"line":37},[115,121136,121137],{"class":1963},"或者\n",[115,121139,121140,121142,121145],{"class":117,"line":1180},[115,121141,24577],{"class":1963},[115,121143,121144],{"class":230}," dracut",[115,121146,121147],{"class":174}," --force\n",[14,121149,121150],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[106,121152,121154],{"className":118513,"code":121153,"language":118515,"meta":22,"style":22},"lsmod | grep nouveau\n",[112,121155,121156],{"__ignoreMap":22},[115,121157,121158,121161,121163,121165],{"class":117,"line":118},[115,121159,121160],{"class":1963},"lsmod",[115,121162,25110],{"class":121},[115,121164,30237],{"class":1963},[115,121166,121076],{"class":230},[69,121168,121169],{"start":37},[72,121170,121171],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[106,121173,121175],{"className":118513,"code":121174,"language":118515,"meta":22,"style":22},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[112,121176,121177],{"__ignoreMap":22},[115,121178,121179,121181,121183],{"class":117,"line":118},[115,121180,24577],{"class":1963},[115,121182,118573],{"class":230},[115,121184,121185],{"class":230}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121187,121188],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[106,121190,121192],{"className":118513,"code":121191,"language":118515,"meta":22,"style":22},"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",[112,121193,121194,121202,121210,121218,121225,121233,121243,121251],{"__ignoreMap":22},[115,121195,121196,121199],{"class":117,"line":118},[115,121197,121198],{"class":1963},"Section",[115,121200,121201],{"class":230}," \"OutputClass\"\n",[115,121203,121204,121207],{"class":117,"line":37},[115,121205,121206],{"class":1963},"   Identifier",[115,121208,121209],{"class":230}," \"nvidia\"\n",[115,121211,121212,121215],{"class":117,"line":1180},[115,121213,121214],{"class":1963},"   MatchDriver",[115,121216,121217],{"class":230}," \"nvidia-drm\"\n",[115,121219,121220,121223],{"class":117,"line":1195},[115,121221,121222],{"class":1963},"   Driver",[115,121224,121209],{"class":230},[115,121226,121227,121230],{"class":117,"line":1201},[115,121228,121229],{"class":1963},"   Option",[115,121231,121232],{"class":230}," \"AllowEmptyInitialConfiguration\"\n",[115,121234,121235,121237,121240],{"class":117,"line":1215},[115,121236,121229],{"class":1963},[115,121238,121239],{"class":230}," \"PrimaryGPU\"",[115,121241,121242],{"class":230}," \"yes\"\n",[115,121244,121245,121248],{"class":117,"line":1221},[115,121246,121247],{"class":1963},"   ModulePath",[115,121249,121250],{"class":230}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[115,121252,121253],{"class":117,"line":1312},[115,121254,121255],{"class":1963},"EndSection\n",[69,121257,121258],{"start":1180},[72,121259,121260],{},"安装N卡驱动提示错误",[106,121262,121264],{"className":120806,"code":121263,"language":120808,"meta":120809,"style":22},"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",[112,121265,121266],{"__ignoreMap":22},[115,121267,121268],{"class":117,"line":118},[115,121269,121263],{},[69,121271,121272],{},[72,121273,121274],{},"检查当前运行的内核版本：",[14,121276,121277],{},"运行以下命令以查看你当前正在使用的内核版本：",[106,121279,121281],{"className":117286,"code":121280,"language":117288,"meta":22,"style":22},"uname -r\n",[112,121282,121283],{"__ignoreMap":22},[115,121284,121285,121287],{"class":117,"line":118},[115,121286,70194],{"class":1963},[115,121288,121289],{"class":174}," -r\n",[69,121291,121292],{"start":37},[72,121293,121294],{},"安装内核开发文件：",[14,121296,121297,121298,121301],{},"确保你已经安装了与当前内核版本相匹配的 ",[112,121299,121300],{},"kernel-devel"," 包。运行以下命令来安装：",[106,121303,121305],{"className":117286,"code":121304,"language":117288,"meta":22,"style":22},"sudo dnf install kernel-devel-$(uname -r)\n",[112,121306,121307],{"__ignoreMap":22},[115,121308,121309,121311,121313,121315,121318,121320,121322,121324],{"class":117,"line":118},[115,121310,24577],{"class":1963},[115,121312,26316],{"class":230},[115,121314,23835],{"class":230},[115,121316,121317],{"class":230}," kernel-devel-",[115,121319,25100],{"class":125},[115,121321,70194],{"class":1963},[115,121323,119629],{"class":174},[115,121325,132],{"class":125},[14,121327,121328],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[69,121330,121331],{"start":1180},[72,121332,121333],{},"安装内核源代码（如果需要）：",[14,121335,121336],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[106,121338,121340],{"className":117286,"code":121339,"language":117288,"meta":22,"style":22},"sudo dnf install kernel-headers kernel-source\n",[112,121341,121342],{"__ignoreMap":22},[115,121343,121344,121346,121348,121350,121353],{"class":117,"line":118},[115,121345,24577],{"class":1963},[115,121347,26316],{"class":230},[115,121349,23835],{"class":230},[115,121351,121352],{"class":230}," kernel-headers",[115,121354,121355],{"class":230}," kernel-source\n",[69,121357,121358],{"start":1195},[72,121359,121360],{},"检查安装：",[14,121362,121363,121364,121367],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[112,121365,121366],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[106,121369,121371],{"className":117286,"code":121370,"language":117288,"meta":22,"style":22},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[112,121372,121373],{"__ignoreMap":22},[115,121374,121375,121377],{"class":117,"line":118},[115,121376,26762],{"class":1963},[115,121378,121379],{"class":230}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121381,121382,121383,121386],{},"如果仍然遇到问题，可以通过 ",[112,121384,121385],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5127,121388,121389],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":22,"searchDepth":37,"depth":37,"links":121391},[121392,121396,121406,121410,121411],{"id":118489,"depth":37,"text":118490,"children":121393},[121394,121395],{"id":118499,"depth":1180,"text":118500},{"id":118509,"depth":1180,"text":118510},{"id":118709,"depth":37,"text":118710,"children":121397},[121398,121399,121400,121401,121402,121403,121404,121405],{"id":118713,"depth":1180,"text":118714},{"id":118783,"depth":1180,"text":118784},{"id":118872,"depth":1180,"text":118873},{"id":119117,"depth":1180,"text":119118},{"id":119187,"depth":1180,"text":119188},{"id":119254,"depth":1180,"text":119255},{"id":119289,"depth":1180,"text":119290},{"id":119344,"depth":1180,"text":119345},{"id":119395,"depth":37,"text":119396,"children":121407},[121408,121409],{"id":119399,"depth":1180,"text":119400},{"id":119479,"depth":1180,"text":119480},{"id":119665,"depth":37,"text":119666},{"id":119838,"depth":37,"text":119839,"children":121412},[121413,121414,121415,121416,121417],{"id":119842,"depth":1180,"text":119843},{"id":119883,"depth":1180,"text":119884},{"id":120170,"depth":1180,"text":120171},{"id":120544,"depth":1180,"text":120545},{"id":121040,"depth":1180,"text":121041},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118481,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121424,"title":121425,"body":121426,"description":39,"extension":40,"meta":121766,"navigation":42,"path":121767,"seo":121768,"stem":121769,"__hash__":121770},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121427,"toc":121764},[121428,121431,121436,121439,121685,121690,121693,121729,121732,121761],[10,121429,121425],{"id":121430},"_4-命令教程长期积累",[69,121432,121433],{},[72,121434,121435],{},"大多数命令",[14,121437,121438],{},"常用 Linux 命令速查：",[106,121440,121442],{"className":117286,"code":121441,"language":117288,"meta":22,"style":22},"# 文件与目录\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",[112,121443,121444,121449,121456,121463,121471,121478,121485,121493,121501,121508,121515,121523,121527,121532,121539,121547,121554,121558,121563,121570,121578,121586,121594,121602,121606,121611,121619,121626,121633,121641,121649,121653,121658,121667,121676],{"__ignoreMap":22},[115,121445,121446],{"class":117,"line":118},[115,121447,121448],{"class":184},"# 文件与目录\n",[115,121450,121451,121453],{"class":117,"line":37},[115,121452,26762],{"class":1963},[115,121454,121455],{"class":184},"        # 列出目录内容\n",[115,121457,121458,121460],{"class":117,"line":1180},[115,121459,101266],{"class":174},[115,121461,121462],{"class":184},"        # 切换目录\n",[115,121464,121465,121468],{"class":117,"line":1195},[115,121466,121467],{"class":174},"pwd",[115,121469,121470],{"class":184},"       # 显示当前路径\n",[115,121472,121473,121475],{"class":117,"line":1201},[115,121474,101256],{"class":1963},[115,121476,121477],{"class":184},"     # 创建目录\n",[115,121479,121480,121482],{"class":117,"line":1215},[115,121481,25323],{"class":1963},[115,121483,121484],{"class":184},"        # 删除文件或目录\n",[115,121486,121487,121490],{"class":117,"line":1221},[115,121488,121489],{"class":1963},"cp",[115,121491,121492],{"class":184},"        # 复制文件或目录\n",[115,121494,121495,121498],{"class":117,"line":1312},[115,121496,121497],{"class":1963},"mv",[115,121499,121500],{"class":184},"        # 移动\u002F重命名文件或目录\n",[115,121502,121503,121505],{"class":117,"line":1318},[115,121504,101273],{"class":1963},[115,121506,121507],{"class":184},"     # 创建空文件\n",[115,121509,121510,121512],{"class":117,"line":1330},[115,121511,120755],{"class":1963},[115,121513,121514],{"class":184},"       # 查看文件内容\n",[115,121516,121517,121520],{"class":117,"line":1612},[115,121518,121519],{"class":1963},"head\u002Ftail",[115,121521,121522],{"class":184}," # 查看文件头部\u002F尾部\n",[115,121524,121525],{"class":117,"line":1617},[115,121526,2400],{"emptyLinePlaceholder":42},[115,121528,121529],{"class":117,"line":1623},[115,121530,121531],{"class":184},"# 权限管理\n",[115,121533,121534,121536],{"class":117,"line":1628},[115,121535,24612],{"class":1963},[115,121537,121538],{"class":184},"     # 修改文件权限\n",[115,121540,121541,121544],{"class":117,"line":1642},[115,121542,121543],{"class":1963},"chown",[115,121545,121546],{"class":184},"     # 修改文件所有者\n",[115,121548,121549,121551],{"class":117,"line":1647},[115,121550,24577],{"class":1963},[115,121552,121553],{"class":184},"      # 以管理员身份执行\n",[115,121555,121556],{"class":117,"line":1653},[115,121557,2400],{"emptyLinePlaceholder":42},[115,121559,121560],{"class":117,"line":1674},[115,121561,121562],{"class":184},"# 系统信息\n",[115,121564,121565,121567],{"class":117,"line":1679},[115,121566,70194],{"class":1963},[115,121568,121569],{"class":184},"     # 系统信息\n",[115,121571,121572,121575],{"class":117,"line":1693},[115,121573,121574],{"class":1963},"df",[115,121576,121577],{"class":184},"        # 磁盘使用情况\n",[115,121579,121580,121583],{"class":117,"line":1698},[115,121581,121582],{"class":1963},"free",[115,121584,121585],{"class":184},"      # 内存使用情况\n",[115,121587,121588,121591],{"class":117,"line":1727},[115,121589,121590],{"class":1963},"top\u002Fhtop",[115,121592,121593],{"class":184},"  # 进程监控\n",[115,121595,121596,121599],{"class":117,"line":1732},[115,121597,121598],{"class":1963},"ps",[115,121600,121601],{"class":184},"        # 查看进程\n",[115,121603,121604],{"class":117,"line":1749},[115,121605,2400],{"emptyLinePlaceholder":42},[115,121607,121608],{"class":117,"line":1754},[115,121609,121610],{"class":184},"# 网络\n",[115,121612,121613,121616],{"class":117,"line":1759},[115,121614,121615],{"class":1963},"ping",[115,121617,121618],{"class":184},"      # 测试网络连通性\n",[115,121620,121621,121623],{"class":117,"line":1764},[115,121622,26850],{"class":1963},[115,121624,121625],{"class":184},"      # 发送 HTTP 请求\n",[115,121627,121628,121630],{"class":117,"line":1778},[115,121629,120279],{"class":1963},[115,121631,121632],{"class":184},"      # 下载文件\n",[115,121634,121635,121638],{"class":117,"line":1783},[115,121636,121637],{"class":1963},"ssh",[115,121639,121640],{"class":184},"       # 远程登录\n",[115,121642,121643,121646],{"class":117,"line":2577},[115,121644,121645],{"class":1963},"scp",[115,121647,121648],{"class":184},"       # 远程文件传输\n",[115,121650,121651],{"class":117,"line":2591},[115,121652,2400],{"emptyLinePlaceholder":42},[115,121654,121655],{"class":117,"line":2599},[115,121656,121657],{"class":184},"# 包管理（Debian\u002FUbuntu）\n",[115,121659,121660,121662,121664],{"class":117,"line":2604},[115,121661,117358],{"class":1963},[115,121663,117337],{"class":230},[115,121665,121666],{"class":184},"   # 更新软件源\n",[115,121668,121669,121671,121673],{"class":117,"line":2610},[115,121670,117358],{"class":1963},[115,121672,23835],{"class":230},[115,121674,121675],{"class":184},"  # 安装软件包\n",[115,121677,121678,121680,121682],{"class":117,"line":2616},[115,121679,117358],{"class":1963},[115,121681,26080],{"class":230},[115,121683,121684],{"class":184},"   # 卸载软件包\n",[69,121686,121687],{"start":37},[72,121688,121689],{},"KDE Dolphin 以root打开",[14,121691,121692],{},"kde5",[106,121694,121696],{"className":117286,"code":121695,"language":117288,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[112,121697,121698],{"__ignoreMap":22},[115,121699,121700,121703,121706,121709,121711,121713,121716,121719,121721,121724,121726],{"class":117,"line":118},[115,121701,121702],{"class":1963},"pkexec",[115,121704,121705],{"class":230}," env",[115,121707,121708],{"class":230}," DISPLAY=",[115,121710,28144],{"class":125},[115,121712,28202],{"class":230},[115,121714,121715],{"class":125},"$XAUTHORITY ",[115,121717,121718],{"class":230},"KDE_SESSION_VERSION=",[115,121720,444],{"class":174},[115,121722,121723],{"class":230}," KDE_FULL_SESSION=",[115,121725,1363],{"class":174},[115,121727,121728],{"class":230}," dolphin\n",[14,121730,121731],{},"kde6",[106,121733,121735],{"className":117286,"code":121734,"language":117288,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[112,121736,121737],{"__ignoreMap":22},[115,121738,121739,121741,121743,121745,121747,121749,121751,121753,121755,121757,121759],{"class":117,"line":118},[115,121740,121702],{"class":1963},[115,121742,121705],{"class":230},[115,121744,121708],{"class":230},[115,121746,28144],{"class":125},[115,121748,28202],{"class":230},[115,121750,121715],{"class":125},[115,121752,121718],{"class":230},[115,121754,469],{"class":174},[115,121756,121723],{"class":230},[115,121758,1363],{"class":174},[115,121760,121728],{"class":230},[5127,121762,121763],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":22,"searchDepth":37,"depth":37,"links":121765},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121425,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121772,"title":121773,"body":121774,"description":39,"extension":40,"meta":121788,"navigation":42,"path":121789,"seo":121790,"stem":121791,"__hash__":121792},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121775,"toc":121786},[121776,121779],[10,121777,121773],{"id":121778},"_5-各种环境配置",[14,121780,121781],{},[27,121782,121785],{"href":121783,"rel":121784},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[31],"电控组环境搭建大全",{"title":22,"searchDepth":37,"depth":37,"links":121787},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121773,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121794,"title":121795,"body":121796,"description":39,"extension":40,"meta":122144,"navigation":42,"path":122145,"seo":122146,"stem":122147,"__hash__":122148},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121797,"toc":122136},[121798,121801,121805,121809,121813,121818,121825,121829,122122,122126,122133],[10,121799,121795],{"id":121800},"_6-拓展功能",[57,121802,121804],{"id":121803},"_61-wine","6.1 Wine",[57,121806,121808],{"id":121807},"_62-android","6.2 Android",[86,121810,121812],{"id":121811},"_621-i卡a卡","6.2.1 I卡、A卡",[69,121814,121815],{},[72,121816,121817],{},"Wayland-Waydroid(体验超级好)",[14,121819,121820,121821],{},"Waydroid 官网与安装指南：",[27,121822,121823],{"href":121823,"rel":121824},"https:\u002F\u002Fwaydro.id\u002F",[31],[86,121826,121828],{"id":121827},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[69,121830,121831],{},[72,121832,121833,121834,121836,121837,121841,121843,121846,121851,122048],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53706,121835],{},"BlissOS 官网下载：",[27,121838,121839],{"href":121839,"rel":121840},"https:\u002F\u002Fblissos.org\u002F",[31],[53706,121842],{},[20,121844],{"alt":22,"src":121845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[69,121847,121848],{"start":1180},[72,121849,121850],{},"比较推荐的配置",[106,121852,121854],{"className":117286,"code":121853,"language":117288,"meta":22,"style":22},"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",[112,121855,121856,121863,121873,121883,121893,121905,121915,121922,121932,121941,121950,121960,121970,121979,121989,121999,122011,122021,122030,122040],{"__ignoreMap":22},[115,121857,121858,121861],{"class":117,"line":118},[115,121859,121860],{"class":1963},"qemu-system-x86_64",[115,121862,24679],{"class":174},[115,121864,121865,121868,121871],{"class":117,"line":37},[115,121866,121867],{"class":174},"        -M",[115,121869,121870],{"class":230}," q35,vmport=off",[115,121872,24679],{"class":174},[115,121874,121875,121878,121881],{"class":117,"line":1180},[115,121876,121877],{"class":174},"        -accel",[115,121879,121880],{"class":230}," kvm",[115,121882,24679],{"class":174},[115,121884,121885,121888,121891],{"class":117,"line":1195},[115,121886,121887],{"class":174},"        -cpu",[115,121889,121890],{"class":230}," qemu64,+sse3,+sse4.2",[115,121892,24679],{"class":174},[115,121894,121895,121898,121901,121903],{"class":117,"line":1201},[115,121896,121897],{"class":174},"        -smp",[115,121899,121900],{"class":230}," 8,cores=",[115,121902,418],{"class":174},[115,121904,24679],{"class":174},[115,121906,121907,121910,121913],{"class":117,"line":1215},[115,121908,121909],{"class":174},"        -m",[115,121911,121912],{"class":230}," 6G",[115,121914,24679],{"class":174},[115,121916,121917,121920],{"class":117,"line":1221},[115,121918,121919],{"class":174},"        -usb",[115,121921,24679],{"class":174},[115,121923,121924,121927,121930],{"class":117,"line":1312},[115,121925,121926],{"class":174},"        -device",[115,121928,121929],{"class":230}," virtio-tablet",[115,121931,24679],{"class":174},[115,121933,121934,121936,121939],{"class":117,"line":1318},[115,121935,121926],{"class":174},[115,121937,121938],{"class":230}," virtio-keyboard",[115,121940,24679],{"class":174},[115,121942,121943,121945,121948],{"class":117,"line":1330},[115,121944,121926],{"class":174},[115,121946,121947],{"class":230}," usb-tablet",[115,121949,24679],{"class":174},[115,121951,121952,121955,121958],{"class":117,"line":1612},[115,121953,121954],{"class":174},"        -bios",[115,121956,121957],{"class":230}," OVMF-pure-efi64.fd",[115,121959,24679],{"class":174},[115,121961,121962,121965,121968],{"class":117,"line":1617},[115,121963,121964],{"class":174},"        -net",[115,121966,121967],{"class":230}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[115,121969,24679],{"class":174},[115,121971,121972,121974,121977],{"class":117,"line":1623},[115,121973,121964],{"class":174},[115,121975,121976],{"class":230}," nic,model=virtio",[115,121978,24679],{"class":174},[115,121980,121981,121984,121987],{"class":117,"line":1628},[115,121982,121983],{"class":174},"        -audio",[115,121985,121986],{"class":230}," sdl,model=hda",[115,121988,24679],{"class":174},[115,121990,121991,121994,121997],{"class":117,"line":1642},[115,121992,121993],{"class":174},"        -display",[115,121995,121996],{"class":230}," sdl,gl=on,show-cursor=on",[115,121998,24679],{"class":174},[115,122000,122001,122003,122006,122009],{"class":117,"line":1647},[115,122002,121926],{"class":174},[115,122004,122005],{"class":230}," virtio-vga-gl,xres=1920,yres=",[115,122007,122008],{"class":174},"1080",[115,122010,24679],{"class":174},[115,122012,122013,122016,122019],{"class":117,"line":1653},[115,122014,122015],{"class":174},"        -drive",[115,122017,122018],{"class":230}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[115,122020,24679],{"class":174},[115,122022,122023,122025,122028],{"class":117,"line":1674},[115,122024,122015],{"class":174},[115,122026,122027],{"class":230}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[115,122029,24679],{"class":174},[115,122031,122032,122035,122038],{"class":117,"line":1679},[115,122033,122034],{"class":174},"        -monitor",[115,122036,122037],{"class":230}," stdio",[115,122039,24679],{"class":174},[115,122041,122042,122045],{"class":117,"line":1693},[115,122043,122044],{"class":174},"        -serial",[115,122046,122047],{"class":230}," none\n",[69,122049,122050],{"start":1201},[72,122051,122052,122053],{},"常用操作：",[69,122054,122055,122058,122114],{},[72,122056,122057],{},"全屏：Ctrl+Alt+F",[72,122059,122060,122061,122066],{},"adb调试",[69,122062,122063],{},[72,122064,122065],{},"使Linux与Android用ADB连接。",[106,122067,122069],{"className":117286,"code":122068,"language":117288,"meta":22,"style":22},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[112,122070,122071,122076,122087,122092,122104,122109],{"__ignoreMap":22},[115,122072,122073],{"class":117,"line":118},[115,122074,122075],{"class":184},"# 连接安卓\n",[115,122077,122078,122081,122084],{"class":117,"line":37},[115,122079,122080],{"class":1963},"adb",[115,122082,122083],{"class":230}," connect",[115,122085,122086],{"class":174}," 127.0.0.1\n",[115,122088,122089],{"class":117,"line":1180},[115,122090,122091],{"class":184},"# 打开shell\n",[115,122093,122094,122096,122098,122101],{"class":117,"line":1195},[115,122095,122080],{"class":1963},[115,122097,26884],{"class":174},[115,122099,122100],{"class":230}," 127.0.0.1:5555",[115,122102,122103],{"class":230}," shell\n",[115,122105,122106],{"class":117,"line":1201},[115,122107,122108],{"class":184},"# 使用root权限\n",[115,122110,122111],{"class":117,"line":1215},[115,122112,122113],{"class":1963},"su\n",[72,122115,122116,122117],{},"中文输入法",[69,122118,122119],{},[72,122120,122121],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[57,122123,122125],{"id":122124},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122127,122128,122129],{},"rEFInd 官网与文档：",[27,122130,122131],{"href":122131,"rel":122132},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[31],[5127,122134,122135],{},"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":22,"searchDepth":37,"depth":37,"links":122137},[122138,122139,122143],{"id":121803,"depth":37,"text":121804},{"id":121807,"depth":37,"text":121808,"children":122140},[122141,122142],{"id":121811,"depth":1180,"text":121812},{"id":121827,"depth":1180,"text":121828},{"id":122124,"depth":37,"text":122125},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121795,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122150,"title":122151,"body":122152,"description":39,"extension":40,"meta":125451,"navigation":42,"path":125452,"seo":125453,"stem":125454,"__hash__":125455},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122153,"toc":125425},[122154,122157,122161,122164,122171,122421,122424,122496,122499,122503,122507,122512,122515,122518,122521,122526,122529,122532,122535,122540,122543,122548,122551,122554,122559,122562,122567,122570,122574,122578,122581,122586,122589,122603,122606,122609,122618,122621,122630,122633,122636,122645,122648,122657,122660,122663,122672,122675,122678,122693,122696,122699,122708,122713,122716,122719,122728,122731,122740,122743,122752,122755,122764,122769,122772,122780,122785,122788,122797,122800,122808,122813,122816,122825,122828,122831,122835,122838,122843,122846,122851,122865,122870,122875,122886,122891,122897,122902,122917,122922,122925,122930,122935,122940,122948,122953,122960,122965,122976,122981,122984,122988,122991,122994,122999,123002,123021,123026,123029,123038,123043,123046,123068,123071,123101,123104,123109,123112,123126,123131,123150,123153,123156,123161,123173,123178,123183,123186,123191,123194,123209,123212,123217,123222,123226,123231,123271,123274,123278,123284,123290,123295,123298,123305,123310,123317,123320,123323,123330,123344,123347,123407,123410,123424,123436,123439,123442,123445,123509,123512,123515,123518,123538,123541,123546,123553,123557,123560,123564,123569,123574,123578,123581,123584,123626,123631,123634,123656,123671,123673,123678,123690,123750,123752,123754,123808,123810,123812,123818,123823,123826,123831,123835,123838,123900,123905,123908,123910,123914,123926,124008,124010,124012,124066,124072,124074,124078,124083,124085,124090,124094,124114,124149,124153,124156,124159,124162,124169,124172,124184,124187,124202,124205,124224,124272,124275,124292,124295,124309,124314,124317,124326,124341,124353,124391,124396,124405,124410,124415,124441,124450,124454,124458,124463,124466,124470,124474,124479,124482,124487,124490,124495,124498,124503,124506,124510,124515,124518,124523,124526,124530,124535,124538,124543,124546,124551,124554,124558,124563,124566,124571,124574,124579,124582,124586,124591,124594,124599,124602,124607,124610,124615,124618,124623,124626,124631,124634,124638,124643,124646,124651,124658,124662,124667,124670,124675,124678,124682,124687,124690,124693,124696,124699,124702,124706,124709,124719,124724,124729,124751,124756,124761,124768,124772,124777,124780,124783,124788,124791,124794,124797,124800,124803,124806,124809,124812,124815,124818,124821,124824,124829,124834,124839,124844,124849,124854,124859,124862,124866,124869,124873,124878,124883,124888,124893,124897,124903,124911,124916,124919,124924,124939,124942,124947,124981,124996,124999,125054,125080,125092,125095,125104,125107,125122,125127,125130,125136,125141,125144,125149,125152,125157,125162,125169,125172,125187,125190,125225,125230,125238,125276,125279,125282,125287,125290,125295,125306,125340,125345,125348,125357,125362,125368,125371,125376,125385,125390,125393,125396,125401,125409,125412,125417,125422],[10,122155,122151],{"id":122156},"_7-其他操作",[57,122158,122160],{"id":122159},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122162,122163],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122165,122166,122167,122170],{},"进入工控机的硬盘目录，进入",[112,122168,122169],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[106,122172,122176],{"className":122173,"code":122174,"language":122175,"meta":22,"style":22},"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",[112,122177,122178,122186,122197,122204,122211,122223,122230,122242,122253,122264,122271,122278,122285,122297,122309,122316,122328,122340,122347,122359,122371,122383,122394,122401,122412],{"__ignoreMap":22},[115,122179,122180,122183],{"class":117,"line":118},[115,122181,122182],{"class":51290},"network",[115,122184,122185],{"class":125},": \n",[115,122187,122188,122191,122193,122195],{"class":117,"line":37},[115,122189,122190],{"class":51290},"  version",[115,122192,51427],{"class":125},[115,122194,203],{"class":174},[115,122196,2674],{"class":125},[115,122198,122199,122202],{"class":117,"line":1180},[115,122200,122201],{"class":51290},"  wifis",[115,122203,122185],{"class":125},[115,122205,122206,122209],{"class":117,"line":1195},[115,122207,122208],{"class":51290},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[115,122210,122185],{"class":125},[115,122212,122213,122216,122218,122221],{"class":117,"line":1201},[115,122214,122215],{"class":51290},"      renderer",[115,122217,51427],{"class":125},[115,122219,122220],{"class":230},"NetworkManager",[115,122222,2674],{"class":125},[115,122224,122225,122228],{"class":117,"line":1215},[115,122226,122227],{"class":51290},"      match",[115,122229,122185],{"class":125},[115,122231,122232,122235,122237,122240],{"class":117,"line":1221},[115,122233,122234],{"class":51290},"        name",[115,122236,51427],{"class":125},[115,122238,122239],{"class":230},"\"wlan0\"",[115,122241,2674],{"class":125},[115,122243,122244,122247,122249,122251],{"class":117,"line":1312},[115,122245,122246],{"class":51290},"      dhcp4",[115,122248,51427],{"class":125},[115,122250,1363],{"class":174},[115,122252,2674],{"class":125},[115,122254,122255,122258,122260,122262],{"class":117,"line":1318},[115,122256,122257],{"class":51290},"      dhcp6",[115,122259,51427],{"class":125},[115,122261,1363],{"class":174},[115,122263,2674],{"class":125},[115,122265,122266,122269],{"class":117,"line":1330},[115,122267,122268],{"class":51290},"      access-points",[115,122270,122185],{"class":125},[115,122272,122273,122276],{"class":117,"line":1612},[115,122274,122275],{"class":230},"        \"EMIS_Vinci_Robocon_5G\"",[115,122277,122185],{"class":125},[115,122279,122280,122283],{"class":117,"line":1617},[115,122281,122282],{"class":51290},"          auth",[115,122284,122185],{"class":125},[115,122286,122287,122290,122292,122295],{"class":117,"line":1623},[115,122288,122289],{"class":51290},"            key-management",[115,122291,51427],{"class":125},[115,122293,122294],{"class":230},"\"psk\"",[115,122296,2674],{"class":125},[115,122298,122299,122302,122304,122307],{"class":117,"line":1628},[115,122300,122301],{"class":51290},"            password",[115,122303,51427],{"class":125},[115,122305,122306],{"class":230},"\"vinci666\"",[115,122308,2674],{"class":125},[115,122310,122311,122314],{"class":117,"line":1642},[115,122312,122313],{"class":51290},"          networkmanager",[115,122315,122185],{"class":125},[115,122317,122318,122321,122323,122326],{"class":117,"line":1647},[115,122319,122320],{"class":51290},"            uuid",[115,122322,51427],{"class":125},[115,122324,122325],{"class":230},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[115,122327,2674],{"class":125},[115,122329,122330,122333,122335,122338],{"class":117,"line":1653},[115,122331,122332],{"class":51290},"            name",[115,122334,51427],{"class":125},[115,122336,122337],{"class":230},"\"EMIS_Vinci_Robocon_5G\"",[115,122339,2674],{"class":125},[115,122341,122342,122345],{"class":117,"line":1674},[115,122343,122344],{"class":51290},"            passthrough",[115,122346,122185],{"class":125},[115,122348,122349,122352,122354,122357],{"class":117,"line":1679},[115,122350,122351],{"class":51290},"              wifi-security.auth-alg",[115,122353,51427],{"class":125},[115,122355,122356],{"class":230},"\"open\"",[115,122358,2674],{"class":125},[115,122360,122361,122364,122366,122369],{"class":117,"line":1693},[115,122362,122363],{"class":51290},"              ipv6.addr-gen-mode",[115,122365,51427],{"class":125},[115,122367,122368],{"class":230},"\"default\"",[115,122370,2674],{"class":125},[115,122372,122373,122376,122378,122381],{"class":117,"line":1698},[115,122374,122375],{"class":51290},"              ipv6.ip6-privacy",[115,122377,51427],{"class":125},[115,122379,122380],{"class":230},"\"-1\"",[115,122382,2674],{"class":125},[115,122384,122385,122388,122390,122392],{"class":117,"line":1727},[115,122386,122387],{"class":51290},"              proxy._",[115,122389,51427],{"class":125},[115,122391,7653],{"class":230},[115,122393,2674],{"class":125},[115,122395,122396,122399],{"class":117,"line":1732},[115,122397,122398],{"class":51290},"      networkmanager",[115,122400,122185],{"class":125},[115,122402,122403,122406,122408,122410],{"class":117,"line":1749},[115,122404,122405],{"class":51290},"        uuid",[115,122407,51427],{"class":125},[115,122409,122325],{"class":230},[115,122411,2674],{"class":125},[115,122413,122414,122416,122418],{"class":117,"line":1754},[115,122415,122234],{"class":51290},[115,122417,51427],{"class":125},[115,122419,122420],{"class":230},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122422,122423],{},"将其改为新wifi的名和密码：",[106,122425,122427],{"className":122173,"code":122426,"language":122175,"meta":22,"style":22},"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",[112,122428,122429,122435,122444,122450,122457,122466,122474,122480,122486],{"__ignoreMap":22},[115,122430,122431,122433],{"class":117,"line":118},[115,122432,122182],{"class":51290},[115,122434,3739],{"class":125},[115,122436,122437,122439,122441],{"class":117,"line":37},[115,122438,122190],{"class":51290},[115,122440,51427],{"class":125},[115,122442,122443],{"class":174},"2\n",[115,122445,122446,122448],{"class":117,"line":1180},[115,122447,122201],{"class":51290},[115,122449,3739],{"class":125},[115,122451,122452,122455],{"class":117,"line":1195},[115,122453,122454],{"class":51290},"    wlan0",[115,122456,3739],{"class":125},[115,122458,122459,122461,122463],{"class":117,"line":1201},[115,122460,122246],{"class":51290},[115,122462,51427],{"class":125},[115,122464,122465],{"class":174},"true\n",[115,122467,122468,122470,122472],{"class":117,"line":1215},[115,122469,122257],{"class":51290},[115,122471,51427],{"class":125},[115,122473,122465],{"class":174},[115,122475,122476,122478],{"class":117,"line":1221},[115,122477,122268],{"class":51290},[115,122479,3739],{"class":125},[115,122481,122482,122484],{"class":117,"line":1312},[115,122483,122275],{"class":230},[115,122485,3739],{"class":125},[115,122487,122488,122491,122493],{"class":117,"line":1318},[115,122489,122490],{"class":51290},"          password",[115,122492,51427],{"class":125},[115,122494,122495],{"class":230},"\"vinci666\"\n",[14,122497,122498],{},"工控机开机即可连上网。",[57,122500,122502],{"id":122501},"_72-ssh远程开发","7.2 SSH远程开发",[86,122504,122506],{"id":122505},"_721-环境准备","7.2.1 环境准备",[14,122508,122509],{},[275,122510,122511],{},"1.硬件准备",[14,122513,122514],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122516,122517],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122519,122520],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122522,122523],{},[275,122524,122525],{},"2.设置固定IP",[14,122527,122528],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122530,122531],{},"1.进入设置界面",[14,122533,122534],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122536,122537],{},[20,122538],{"alt":22,"src":122539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122541,122542],{},"2.配置所连接的网络",[14,122544,122545],{},[20,122546],{"alt":22,"src":122547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122549,122550],{},"3.设置固定IP",[14,122552,122553],{},"查看当前IP地址。",[14,122555,122556],{},[20,122557],{"alt":22,"src":122558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122560,122561],{},"设置固定IP。",[14,122563,122564],{},[20,122565],{"alt":22,"src":122566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122568,122569],{},"至此，IP配置完毕。",[86,122571,122573],{"id":122572},"_722-环境搭建","7.2.2 环境搭建",[14,122575,122576],{},[275,122577,25754],{},[14,122579,122580],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122582,122583],{},[275,122584,122585],{},"实现",[14,122587,122588],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[69,122590,122591,122594,122597,122600],{},[72,122592,122593],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[72,122595,122596],{},"远程主机启动SSH服务；",[72,122598,122599],{},"本地主机登陆远程主机；",[72,122601,122602],{},"实现数据传输。",[14,122604,122605],{},"1.安装SSH客户端与服务端",[14,122607,122608],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[106,122610,122612],{"className":120806,"code":122611,"language":120808,"meta":120809,"style":22}," sudo apt install openssh-server\n",[112,122613,122614],{"__ignoreMap":22},[115,122615,122616],{"class":117,"line":118},[115,122617,122611],{},[14,122619,122620],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[106,122622,122624],{"className":120806,"code":122623,"language":120808,"meta":120809,"style":22},"sudo apt install openssh-client\n",[112,122625,122626],{"__ignoreMap":22},[115,122627,122628],{"class":117,"line":118},[115,122629,122623],{},[14,122631,122632],{},"2.远程主机启动SSH服务",[14,122634,122635],{},"远程主机启动 ssh 服务命令如下：",[106,122637,122639],{"className":120806,"code":122638,"language":120808,"meta":120809,"style":22},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[112,122640,122641],{"__ignoreMap":22},[115,122642,122643],{"class":117,"line":118},[115,122644,122638],{},[14,122646,122647],{},"启动后可使用如下命令查看服务是否正常运行：",[106,122649,122651],{"className":120806,"code":122650,"language":120808,"meta":120809,"style":22},"ps -e | grep ssh\n",[112,122652,122653],{"__ignoreMap":22},[115,122654,122655],{"class":117,"line":118},[115,122656,122650],{},[14,122658,122659],{},"如果启动成功，会包含 sshd 程序。",[14,122661,122662],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[106,122664,122666],{"className":120806,"code":122665,"language":120808,"meta":120809,"style":22},"sudo systemctl enable ssh\n",[112,122667,122668],{"__ignoreMap":22},[115,122669,122670],{"class":117,"line":118},[115,122671,122665],{},[14,122673,122674],{},"3.本地远程登录",[14,122676,122677],{},"登录远程主机可以调用如下命令:",[106,122679,122681],{"className":117286,"code":122680,"language":117288,"meta":22,"style":22},"ssh -X 用户名@ip地址\n",[112,122682,122683],{"__ignoreMap":22},[115,122684,122685,122687,122690],{"class":117,"line":118},[115,122686,121637],{"class":1963},[115,122688,122689],{"class":174}," -X",[115,122691,122692],{"class":230}," 用户名@ip地址\n",[14,122694,122695],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122697,122698],{},"如果退出，可以调用exit命令：",[106,122700,122702],{"className":120806,"code":122701,"language":120808,"meta":120809,"style":22},"exit\n",[112,122703,122704],{"__ignoreMap":22},[115,122705,122706],{"class":117,"line":118},[115,122707,122701],{},[14,122709,122710],{},[275,122711,122712],{},"4.实现数据传输",[14,122714,122715],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122717,122718],{},"上传文件指令格式如下：",[106,122720,122722],{"className":120806,"code":122721,"language":120808,"meta":120809,"style":22},"scp 本地文件路径 账号@ip:路径\n",[112,122723,122724],{"__ignoreMap":22},[115,122725,122726],{"class":117,"line":118},[115,122727,122721],{},[14,122729,122730],{},"上传文件夹指令格式如下：",[106,122732,122734],{"className":120806,"code":122733,"language":120808,"meta":120809,"style":22},"scp -r 本地文件夹路径 账号@ip:路径\n",[112,122735,122736],{"__ignoreMap":22},[115,122737,122738],{"class":117,"line":118},[115,122739,122733],{},[14,122741,122742],{},"下载文件指令格式如下：",[106,122744,122746],{"className":120806,"code":122745,"language":120808,"meta":120809,"style":22},"scp 账号@ip:路径 本地文件夹路径\n",[112,122747,122748],{"__ignoreMap":22},[115,122749,122750],{"class":117,"line":118},[115,122751,122745],{},[14,122753,122754],{},"下载文件夹指令格式如下：",[106,122756,122758],{"className":120806,"code":122757,"language":120808,"meta":120809,"style":22},"scp -r 账号@ip:路径 本地文件夹路径\n",[112,122759,122760],{"__ignoreMap":22},[115,122761,122762],{"class":117,"line":118},[115,122763,122757],{},[14,122765,122766],{},[275,122767,122768],{},"优化",[14,122770,122771],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[69,122773,122774,122777],{},[72,122775,122776],{},"本地生成密钥对；",[72,122778,122779],{},"将公钥上传至远程主机。",[14,122781,122782],{},[275,122783,122784],{},"1.生成密钥对",[14,122786,122787],{},"本地客户端生成公私钥：（一路回车默认即可）",[106,122789,122791],{"className":120806,"code":122790,"language":120808,"meta":120809,"style":22},"ssh-keygen\n",[112,122792,122793],{"__ignoreMap":22},[115,122794,122795],{"class":117,"line":118},[115,122796,122790],{},[14,122798,122799],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[69,122801,122802,122805],{},[72,122803,122804],{},"id_rsa （私钥）；",[72,122806,122807],{},"id_rsa.pub (公钥)。",[14,122809,122810],{},[275,122811,122812],{},"2.公钥上传",[14,122814,122815],{},"上传指令如下：",[106,122817,122819],{"className":120806,"code":122818,"language":120808,"meta":120809,"style":22},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[112,122820,122821],{"__ignoreMap":22},[115,122822,122823],{"class":117,"line":118},[115,122824,122818],{},[14,122826,122827],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122829,122830],{},"以后再远程登录就无需录入密码了。",[86,122832,122834],{"id":122833},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122836,122837],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122839,122840],{},[275,122841,122842],{},"1.准备工作",[14,122844,122845],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122847,122848],{},[275,122849,122850],{},"2.为VScode安装远程开发插件",[14,122852,122853,122854,122857,122858,122861,122862,28386],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[112,122855,122856],{},"扩展：商店","的搜索栏输入",[112,122859,122860],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[112,122863,122864],{},"安装",[14,122866,122867],{},[20,122868],{"alt":22,"src":122869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122871,122872],{},[275,122873,122874],{},"3.配置远程连接",[14,122876,122877,122878,122881,122882,122885],{},"步骤1：使用快捷键",[112,122879,122880],{},"ctrl + shift + p","打开命令输入窗口，并输入",[112,122883,122884],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122887,122888],{},[20,122889],{"alt":22,"src":122890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122892,122893,122894,28386],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[112,122895,122896],{},"Add New SSH Host",[14,122898,122899],{},[20,122900],{"alt":22,"src":122901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122903,122904,122905,122908,122909,122912,122913,122916],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[112,122906,122907],{},"ssh +X ubuntu@192.168.43.164","，其中，",[112,122910,122911],{},"ubuntu","需要替换为你的登录用户名，",[112,122914,122915],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122918,122919],{},[20,122920],{"alt":22,"src":122921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122923,122924],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122926,122927],{},[20,122928],{"alt":22,"src":122929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122931,122932],{},[20,122933],{"alt":22,"src":122934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122936,122937],{},[275,122938,122939],{},"4.使用",[14,122941,122942,122943,122881,122945,122947],{},"步骤1：继续使用快捷键",[112,122944,122880],{},[112,122946,122884],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122949,122950],{},[20,122951],{"alt":22,"src":122952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122954,122955,122956,122959],{},"或者，也可以点击侧边栏的",[112,122957,122958],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122961,122962],{},[20,122963],{"alt":22,"src":122964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122966,122967,122968,122971,122972,122975],{},"步骤2：选择菜单栏的",[112,122969,122970],{},"文件","下的",[112,122973,122974],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122977,122978],{},[20,122979],{"alt":22,"src":122980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122982,122983],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[57,122985,122987],{"id":122986},"_73-远程桌面","7.3 远程桌面",[14,122989,122990],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122992,122993],{},"我们选择使用VNC来看。",[69,122995,122996],{},[72,122997,122998],{},"安装VNC服务器：",[14,123000,123001],{},"这里以TigerVNC为例进行安装：",[106,123003,123005],{"className":117286,"code":123004,"language":117288,"meta":22,"style":22},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[112,123006,123007],{"__ignoreMap":22},[115,123008,123009,123011,123013,123015,123018],{"class":117,"line":118},[115,123010,24577],{"class":1963},[115,123012,117307],{"class":230},[115,123014,23835],{"class":230},[115,123016,123017],{"class":230}," tigervnc-standalone-server",[115,123019,123020],{"class":230}," tigervnc-common\n",[69,123022,123023],{"start":37},[72,123024,123025],{},"设置VNC密码：",[14,123027,123028],{},"为VNC用户设置密码，运行以下命令：",[106,123030,123032],{"className":117286,"code":123031,"language":117288,"meta":22,"style":22},"vncpasswd\n",[112,123033,123034],{"__ignoreMap":22},[115,123035,123036],{"class":117,"line":118},[115,123037,123031],{"class":1963},[69,123039,123040],{"start":1180},[72,123041,123042],{},"配置VNC启动脚本:",[14,123044,123045],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[106,123047,123049],{"className":117286,"code":123048,"language":117288,"meta":22,"style":22},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[112,123050,123051,123060],{"__ignoreMap":22},[115,123052,123053,123055,123057],{"class":117,"line":118},[115,123054,101256],{"class":1963},[115,123056,29217],{"class":174},[115,123058,123059],{"class":230}," ~\u002F.vnc\n",[115,123061,123062,123065],{"class":117,"line":37},[115,123063,123064],{"class":1963},"nano",[115,123066,123067],{"class":230}," ~\u002F.vnc\u002Fxstartup\n",[14,123069,123070],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[106,123072,123074],{"className":117286,"code":123073,"language":117288,"meta":22,"style":22},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[112,123075,123076,123081,123089,123096],{"__ignoreMap":22},[115,123077,123078],{"class":117,"line":118},[115,123079,123080],{"class":184},"#!\u002Fbin\u002Fsh\n",[115,123082,123083,123086],{"class":117,"line":37},[115,123084,123085],{"class":174},"unset",[115,123087,123088],{"class":230}," SESSION_MANAGER\n",[115,123090,123091,123093],{"class":117,"line":1180},[115,123092,123085],{"class":174},[115,123094,123095],{"class":230}," DBUS_SESSION_BUS_ADDRESS\n",[115,123097,123098],{"class":117,"line":1195},[115,123099,123100],{"class":1963},"gnome-session\n",[14,123102,123103],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[69,123105,123106],{"start":1195},[72,123107,123108],{},"给予执行权限：",[14,123110,123111],{},"为xstartup文件设置执行权限：",[106,123113,123115],{"className":117286,"code":123114,"language":117288,"meta":22,"style":22},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[112,123116,123117],{"__ignoreMap":22},[115,123118,123119,123121,123124],{"class":117,"line":118},[115,123120,24612],{"class":1963},[115,123122,123123],{"class":230}," +x",[115,123125,123067],{"class":230},[69,123127,123128],{"start":1201},[72,123129,123130],{},"启动VNC服务器：",[106,123132,123134],{"className":117286,"code":123133,"language":117288,"meta":22,"style":22},"vncserver -geometry 1920x1080 -localhost=0\n",[112,123135,123136],{"__ignoreMap":22},[115,123137,123138,123141,123144,123147],{"class":117,"line":118},[115,123139,123140],{"class":1963},"vncserver",[115,123142,123143],{"class":174}," -geometry",[115,123145,123146],{"class":230}," 1920x1080",[115,123148,123149],{"class":174}," -localhost=0\n",[14,123151,123152],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123154,123155],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[69,123157,123158],{"start":1215},[72,123159,123160],{},"查看已开启的VNC服务器：",[106,123162,123164],{"className":117286,"code":123163,"language":117288,"meta":22,"style":22},"vncserver -list\n",[112,123165,123166],{"__ignoreMap":22},[115,123167,123168,123170],{"class":117,"line":118},[115,123169,123140],{"class":1963},[115,123171,123172],{"class":174}," -list\n",[14,123174,123175],{},[20,123176],{"alt":22,"src":123177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[69,123179,123180],{"start":1221},[72,123181,123182],{},"连接到VNC服务器：",[14,123184,123185],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[69,123187,123188],{"start":1312},[72,123189,123190],{},"停止VNC服务器：",[14,123192,123193],{},"如果需要停止VNC服务器，可以使用以下命令：",[106,123195,123197],{"className":117286,"code":123196,"language":117288,"meta":22,"style":22},"vncserver -kill :1\n",[112,123198,123199],{"__ignoreMap":22},[115,123200,123201,123203,123206],{"class":117,"line":118},[115,123202,123140],{"class":1963},[115,123204,123205],{"class":174}," -kill",[115,123207,123208],{"class":230}," :1\n",[14,123210,123211],{},"将:1替换为你实际使用的显示编号。",[14,123213,123214],{},[20,123215],{"alt":22,"src":123216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123218,123219],{},[20,123220],{"alt":22,"src":123221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[57,123223,123225],{"id":123224},"_74-usb端口设置","7.4 USB端口设置",[14,123227,123228],{},[275,123229,123230],{},"首先先配置好权限",[106,123232,123234],{"className":117286,"code":123233,"language":117288,"meta":22,"style":22},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[112,123235,123236,123241,123254,123261,123266],{"__ignoreMap":22},[115,123237,123238],{"class":117,"line":118},[115,123239,123240],{"class":184},"# 将用户权限提高\n",[115,123242,123243,123245,123247,123249,123252],{"class":117,"line":37},[115,123244,24577],{"class":1963},[115,123246,26575],{"class":230},[115,123248,26578],{"class":174},[115,123250,123251],{"class":230}," dialout",[115,123253,26583],{"class":125},[115,123255,123256,123258],{"class":117,"line":1180},[115,123257,26602],{"class":1963},[115,123259,123260],{"class":230}," dialout\n",[115,123262,123263],{"class":117,"line":1195},[115,123264,123265],{"class":184},"# 查看下面命令是否输出dialout（若输出才正常）\n",[115,123267,123268],{"class":117,"line":1201},[115,123269,123270],{"class":1963},"groups\n",[14,123272,123273],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[86,123275,123277],{"id":123276},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123279,123280,123283],{},[275,123281,123282],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123285,123286,123289],{},[275,123287,123288],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123291,123292],{},[275,123293,123294],{},"流程如下：",[14,123296,123297],{},"（1）.查找设备idVendor和idProduct",[14,123299,123300,123301,123304],{},"接入两个USB设备，在终端调用指令",[112,123302,123303],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123306,123307],{},[20,123308],{"alt":22,"src":123309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123311,123312,123313,123316],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[112,123314,123315],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123318,123319],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123321,123322],{},"（2）.编写映射规则",[14,123324,123325,123326,123329],{},"在",[112,123327,123328],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[106,123331,123333],{"className":117286,"code":123332,"language":117288,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[112,123334,123335],{"__ignoreMap":22},[115,123336,123337,123339,123341],{"class":117,"line":118},[115,123338,24577],{"class":1963},[115,123340,118573],{"class":230},[115,123342,123343],{"class":230}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123345,123346],{},"输入如下内容：",[106,123348,123350],{"className":117286,"code":123349,"language":117288,"meta":22,"style":22},"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",[112,123351,123352,123382],{"__ignoreMap":22},[115,123353,123354,123357,123359,123362,123365,123368,123371,123373,123376,123379],{"class":117,"line":118},[115,123355,123356],{"class":125},"KERNEL",[115,123358,171],{"class":121},[115,123360,123361],{"class":230},"=\"ttyUSB*\",",[115,123363,123364],{"class":1963}," ATTRS",[115,123366,123367],{"class":230},"{idVendor}==",[115,123369,123370],{"class":1963},"\"10c4\"",[115,123372,503],{"class":1963},[115,123374,123375],{"class":230}," ATTRS{idProduct}==\"ea60\",",[115,123377,123378],{"class":230}," MODE:=\"0777\",",[115,123380,123381],{"class":230}," SYMLINK+=\"mylidar\"\n",[115,123383,123384,123386,123388,123390,123392,123394,123397,123399,123402,123404],{"class":117,"line":37},[115,123385,123356],{"class":125},[115,123387,171],{"class":121},[115,123389,123361],{"class":230},[115,123391,123364],{"class":1963},[115,123393,123367],{"class":230},[115,123395,123396],{"class":1963},"\"1a86\"",[115,123398,503],{"class":1963},[115,123400,123401],{"class":230}," ATTRS{idProduct}==\"7523\",",[115,123403,123378],{"class":230},[115,123405,123406],{"class":230}," SYMLINK+=\"mycar\"\n",[14,123408,123409],{},"代码解释：",[1132,123411,123412,123415,123418,123421],{},[72,123413,123414],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[72,123416,123417],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[72,123419,123420],{},"SYMLINK是符号连接，即绑定的别名；",[72,123422,123423],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123425,123426,123427,123430,123433],{},"***小提示：***",[23554,123428,123429],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[112,123431,123432],{},"\u002Fetc\u002Fudev\u002Frule.d",[23554,123434,123435],{},"目录即可。",[14,123437,123438],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123440,123441],{},"（3）.使规则生效",[14,123443,123444],{},"在终端下输入如下指令：",[106,123446,123448],{"className":117286,"code":123447,"language":117288,"meta":22,"style":22},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[112,123449,123450,123455,123467,123478,123482,123487,123500],{"__ignoreMap":22},[115,123451,123452],{"class":117,"line":118},[115,123453,123454],{"class":184},"# Ubuntu用下方命令\n",[115,123456,123457,123459,123461,123464],{"class":117,"line":37},[115,123458,24577],{"class":1963},[115,123460,120038],{"class":230},[115,123462,123463],{"class":230}," udev",[115,123465,123466],{"class":230}," reload\n",[115,123468,123469,123471,123473,123475],{"class":117,"line":1180},[115,123470,24577],{"class":1963},[115,123472,120038],{"class":230},[115,123474,123463],{"class":230},[115,123476,123477],{"class":230}," restart\n",[115,123479,123480],{"class":117,"line":1195},[115,123481,2400],{"emptyLinePlaceholder":42},[115,123483,123484],{"class":117,"line":1201},[115,123485,123486],{"class":184},"#Fedora用下方命令\n",[115,123488,123489,123491,123494,123497],{"class":117,"line":1215},[115,123490,24577],{"class":1963},[115,123492,123493],{"class":230}," udevadm",[115,123495,123496],{"class":230}," control",[115,123498,123499],{"class":174}," --reload\n",[115,123501,123502,123504,123506],{"class":117,"line":1221},[115,123503,24577],{"class":1963},[115,123505,123493],{"class":230},[115,123507,123508],{"class":230}," trigger\n",[14,123510,123511],{},"再重新插拔设备即可。",[14,123513,123514],{},"（4）.测试",[14,123516,123517],{},"终端下输入如下指令",[106,123519,123521],{"className":117286,"code":123520,"language":117288,"meta":22,"style":22},"ll \u002Fdev | grep ttyUSB\n",[112,123522,123523],{"__ignoreMap":22},[115,123524,123525,123528,123531,123533,123535],{"class":117,"line":118},[115,123526,123527],{"class":1963},"ll",[115,123529,123530],{"class":230}," \u002Fdev",[115,123532,25110],{"class":121},[115,123534,30237],{"class":1963},[115,123536,123537],{"class":230}," ttyUSB\n",[14,123539,123540],{},"运行结果如下：",[14,123542,123543],{},[20,123544],{"alt":22,"src":123545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123547,123548,123549,123552],{},"也可以多次插拔USB设备，会发现设备端口",[112,123550,123551],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123554,123555],{},[275,123556,117954],{},[14,123558,123559],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[86,123561,123563],{"id":123562},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123565,123566,123568],{},[275,123567,123282],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123570,123571,123573],{},[275,123572,123288],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123575,123576],{},[275,123577,123294],{},[14,123579,123580],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123582,123583],{},"调用如下指令查看第一台雷达的USB信息：",[106,123585,123587],{"className":117286,"code":123586,"language":117288,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[112,123588,123589,123609],{"__ignoreMap":22},[115,123590,123591,123594,123596,123599,123602,123604,123606],{"class":117,"line":118},[115,123592,123593],{"class":1963},"udevadm",[115,123595,69811],{"class":230},[115,123597,123598],{"class":174}," --attribute-walk",[115,123600,123601],{"class":174}," --name=\u002Fdev\u002FttyUSB0",[115,123603,25110],{"class":121},[115,123605,30237],{"class":1963},[115,123607,123608],{"class":230}," KERNELS\n",[115,123610,123611,123613,123615,123617,123620,123622,123624],{"class":117,"line":37},[115,123612,123593],{"class":1963},[115,123614,69811],{"class":230},[115,123616,123598],{"class":174},[115,123618,123619],{"class":174}," --name=\u002Fdev\u002FttyACM0",[115,123621,25110],{"class":121},[115,123623,30237],{"class":1963},[115,123625,123608],{"class":230},[14,123627,123628],{},[20,123629],{"alt":22,"src":123630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123632,123633],{},"调用如下指令查看第二台雷达的USB信息：",[106,123635,123637],{"className":117286,"code":123636,"language":117288,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[112,123638,123639],{"__ignoreMap":22},[115,123640,123641,123643,123645,123647,123650,123652,123654],{"class":117,"line":118},[115,123642,123593],{"class":1963},[115,123644,69811],{"class":230},[115,123646,123598],{"class":174},[115,123648,123649],{"class":174}," --name=\u002Fdev\u002FttyUSB1",[115,123651,25110],{"class":121},[115,123653,30237],{"class":1963},[115,123655,123608],{"class":230},[14,123657,123658,123659,123662,123663,123666,123667,123670],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[112,123660,123661],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[112,123664,123665],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[275,123668,123669],{},"唯一性标识","”。",[14,123672,123322],{},[14,123674,123325,123675,123677],{},[112,123676,123328],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[106,123679,123680],{"className":117286,"code":123332,"language":117288,"meta":22,"style":22},[112,123681,123682],{"__ignoreMap":22},[115,123683,123684,123686,123688],{"class":117,"line":118},[115,123685,24577],{"class":1963},[115,123687,118573],{"class":230},[115,123689,123343],{"class":230},[106,123691,123693],{"className":117286,"code":123692,"language":117288,"meta":22,"style":22},"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",[112,123694,123695,123724],{"__ignoreMap":22},[115,123696,123697,123699,123701,123703,123706,123708,123711,123714,123716,123719,123721],{"class":117,"line":118},[115,123698,123356],{"class":125},[115,123700,171],{"class":121},[115,123702,123361],{"class":230},[115,123704,123705],{"class":125}," KERNELS",[115,123707,171],{"class":121},[115,123709,123710],{"class":230},"=\"1-1.3:1.0\",",[115,123712,123713],{"class":1963}," MODE:",[115,123715,171],{"class":230},[115,123717,123718],{"class":1963},"\"0777\"",[115,123720,503],{"class":1963},[115,123722,123723],{"class":230}," SYMLINK+=\"rplidar_front\"\n",[115,123725,123726,123728,123730,123732,123734,123736,123739,123741,123743,123745,123747],{"class":117,"line":37},[115,123727,123356],{"class":125},[115,123729,171],{"class":121},[115,123731,123361],{"class":230},[115,123733,123705],{"class":125},[115,123735,171],{"class":121},[115,123737,123738],{"class":230},"=\"1-1.4:1.0\",",[115,123740,123713],{"class":1963},[115,123742,171],{"class":230},[115,123744,123718],{"class":1963},[115,123746,503],{"class":1963},[115,123748,123749],{"class":230}," SYMLINK+=\"rplidar_back\"\n",[14,123751,123441],{},[14,123753,123444],{},[106,123755,123756],{"className":117286,"code":123447,"language":117288,"meta":22,"style":22},[112,123757,123758,123762,123772,123782,123786,123790,123800],{"__ignoreMap":22},[115,123759,123760],{"class":117,"line":118},[115,123761,123454],{"class":184},[115,123763,123764,123766,123768,123770],{"class":117,"line":37},[115,123765,24577],{"class":1963},[115,123767,120038],{"class":230},[115,123769,123463],{"class":230},[115,123771,123466],{"class":230},[115,123773,123774,123776,123778,123780],{"class":117,"line":1180},[115,123775,24577],{"class":1963},[115,123777,120038],{"class":230},[115,123779,123463],{"class":230},[115,123781,123477],{"class":230},[115,123783,123784],{"class":117,"line":1195},[115,123785,2400],{"emptyLinePlaceholder":42},[115,123787,123788],{"class":117,"line":1201},[115,123789,123486],{"class":184},[115,123791,123792,123794,123796,123798],{"class":117,"line":1215},[115,123793,24577],{"class":1963},[115,123795,123493],{"class":230},[115,123797,123496],{"class":230},[115,123799,123499],{"class":174},[115,123801,123802,123804,123806],{"class":117,"line":1221},[115,123803,24577],{"class":1963},[115,123805,123493],{"class":230},[115,123807,123508],{"class":230},[14,123809,123511],{},[14,123811,123514],{},[14,123813,123517,123814,123817],{},[112,123815,123816],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123819,123820],{},[20,123821],{"alt":22,"src":123822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123824,123825],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123827,123828,123830],{},[275,123829,117954],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[86,123832,123834],{"id":123833},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123836,123837],{},"（1）.查看所连接的主机USB接口的信息",[106,123839,123841],{"className":117286,"code":123840,"language":117288,"meta":22,"style":22},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[112,123842,123843,123873],{"__ignoreMap":22},[115,123844,123845,123847,123849,123852,123854,123856,123858,123860,123863,123866,123868,123871],{"class":117,"line":118},[115,123846,123593],{"class":1963},[115,123848,69811],{"class":230},[115,123850,123851],{"class":174}," -a",[115,123853,29217],{"class":174},[115,123855,28423],{"class":125},[115,123857,123593],{"class":1963},[115,123859,69811],{"class":230},[115,123861,123862],{"class":174}," -q",[115,123864,123865],{"class":230}," path",[115,123867,25116],{"class":174},[115,123869,123870],{"class":230}," \u002Fdev\u002FttyACM0",[115,123872,132],{"class":125},[115,123874,123875,123877,123879,123881,123883,123885,123887,123889,123891,123893,123895,123898],{"class":117,"line":37},[115,123876,123593],{"class":1963},[115,123878,69811],{"class":230},[115,123880,123851],{"class":174},[115,123882,29217],{"class":174},[115,123884,28423],{"class":125},[115,123886,123593],{"class":1963},[115,123888,69811],{"class":230},[115,123890,123862],{"class":174},[115,123892,123865],{"class":230},[115,123894,25116],{"class":174},[115,123896,123897],{"class":230}," \u002Fdev\u002FttyUSB0",[115,123899,132],{"class":125},[14,123901,123902],{},[20,123903],{"alt":22,"src":123904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123906,123907],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123909,123322],{},[14,123911,123325,123912,123677],{},[112,123913,123328],{},[106,123915,123916],{"className":117286,"code":123332,"language":117288,"meta":22,"style":22},[112,123917,123918],{"__ignoreMap":22},[115,123919,123920,123922,123924],{"class":117,"line":118},[115,123921,24577],{"class":1963},[115,123923,118573],{"class":230},[115,123925,123343],{"class":230},[106,123927,123929],{"className":117286,"code":123928,"language":117288,"meta":22,"style":22},"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",[112,123930,123931,123959,123985],{"__ignoreMap":22},[115,123932,123933,123935,123937,123940,123942,123944,123946,123948,123951,123954,123956],{"class":117,"line":118},[115,123934,123356],{"class":125},[115,123936,171],{"class":121},[115,123938,123939],{"class":230},"=\"ttyACM*\",",[115,123941,123364],{"class":1963},[115,123943,123367],{"class":230},[115,123945,123396],{"class":1963},[115,123947,503],{"class":1963},[115,123949,123950],{"class":230}," ATTRS{idProduct}==\"55d4\",",[115,123952,123953],{"class":230}," ATTRS{serial}==\"0001\",",[115,123955,123378],{"class":230},[115,123957,123958],{"class":230}," SYMLINK+=\"ttyACM_MCU\"\n",[115,123960,123961,123963,123965,123967,123969,123971,123973,123975,123977,123980,123982],{"class":117,"line":37},[115,123962,123356],{"class":125},[115,123964,171],{"class":121},[115,123966,123939],{"class":230},[115,123968,123364],{"class":1963},[115,123970,123367],{"class":230},[115,123972,123396],{"class":1963},[115,123974,503],{"class":1963},[115,123976,123950],{"class":230},[115,123978,123979],{"class":230}," ATTRS{serial}==\"0002\",",[115,123981,123378],{"class":230},[115,123983,123984],{"class":230}," SYMLINK+=\"ttyACM_Lidar\"\n",[115,123986,123987,123989,123991,123993,123995,123997,123999,124001,124003,124005],{"class":117,"line":1180},[115,123988,123356],{"class":125},[115,123990,171],{"class":121},[115,123992,123361],{"class":230},[115,123994,123364],{"class":1963},[115,123996,123367],{"class":230},[115,123998,123396],{"class":1963},[115,124000,503],{"class":1963},[115,124002,123401],{"class":230},[115,124004,123378],{"class":230},[115,124006,124007],{"class":230}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124009,123441],{},[14,124011,123444],{},[106,124013,124014],{"className":117286,"code":123447,"language":117288,"meta":22,"style":22},[112,124015,124016,124020,124030,124040,124044,124048,124058],{"__ignoreMap":22},[115,124017,124018],{"class":117,"line":118},[115,124019,123454],{"class":184},[115,124021,124022,124024,124026,124028],{"class":117,"line":37},[115,124023,24577],{"class":1963},[115,124025,120038],{"class":230},[115,124027,123463],{"class":230},[115,124029,123466],{"class":230},[115,124031,124032,124034,124036,124038],{"class":117,"line":1180},[115,124033,24577],{"class":1963},[115,124035,120038],{"class":230},[115,124037,123463],{"class":230},[115,124039,123477],{"class":230},[115,124041,124042],{"class":117,"line":1195},[115,124043,2400],{"emptyLinePlaceholder":42},[115,124045,124046],{"class":117,"line":1201},[115,124047,123486],{"class":184},[115,124049,124050,124052,124054,124056],{"class":117,"line":1215},[115,124051,24577],{"class":1963},[115,124053,123493],{"class":230},[115,124055,123496],{"class":230},[115,124057,123499],{"class":174},[115,124059,124060,124062,124064],{"class":117,"line":1221},[115,124061,24577],{"class":1963},[115,124063,123493],{"class":230},[115,124065,123508],{"class":230},[14,124067,124068,124069],{},"再重新插拔设备即可，或者 ",[275,124070,124071],{},"直接重启系统。",[14,124073,123514],{},[14,124075,123517,124076,123817],{},[112,124077,123816],{},[14,124079,124080],{},[20,124081],{"alt":22,"src":124082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124084,123825],{},[14,124086,124087,124089],{},[275,124088,117954],{}," 一些设备可能没有串口号等。",[86,124091,124093],{"id":124092},"_744-其他注意事项","7.4.4 其他注意事项",[14,124095,124096,124097,124099,124100,124103,124104,18411,124107,124110,124111,124113],{},"并非所有的USB设备端口号都是",[112,124098,123551],{},"的格式，比如Arduino的端口号可能是",[112,124101,124102],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[112,124105,124106],{},"videon",[112,124108,124109],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[112,124112,124106],{},"端口，绑定时需要关联的也是该接口。",[14,124115,124116,124117,124120,124121,124124,124125,124127,124128,124131,124132,124135,124136,124139,124140,124139,124143,124139,124146,28386],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[112,124118,124119],{},"KERNEL==\"ttyUSB*\"","修改为",[112,124122,124123],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[112,124126,124119],{},"修改为类似于",[112,124129,124130],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[112,124133,124134],{},"video[0,2,4,6]","表示可以绑定的端口为",[112,124137,124138],{},"video0","或",[112,124141,124142],{},"video2",[112,124144,124145],{},"video4",[112,124147,124148],{},"video6",[57,124150,124152],{"id":124151},"_75-挂载内网网页","7.5 挂载内网网页",[14,124154,124155],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124157,124158],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124160,124161],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124163,124164,124165],{},"Termux 下载地址（F-Droid）：",[27,124166,124167],{"href":124167,"rel":124168},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[31],[14,124170,124171],{},"首先打开app后，先更新软件缓存：",[106,124173,124175],{"className":117286,"code":124174,"language":117288,"meta":22,"style":22},"pkg update\n",[112,124176,124177],{"__ignoreMap":22},[115,124178,124179,124182],{"class":117,"line":118},[115,124180,124181],{"class":1963},"pkg",[115,124183,26243],{"class":230},[14,124185,124186],{},"然后换源",[106,124188,124190],{"className":117286,"code":124189,"language":117288,"meta":22,"style":22},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[112,124191,124192],{"__ignoreMap":22},[115,124193,124194,124196,124199],{"class":117,"line":118},[115,124195,123064],{"class":1963},[115,124197,124198],{"class":125}," $PREFIX",[115,124200,124201],{"class":230},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124203,124204],{},"将该文件内容替换为下面：",[106,124206,124208],{"className":117286,"code":124207,"language":117288,"meta":22,"style":22},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[112,124209,124210],{"__ignoreMap":22},[115,124211,124212,124215,124218,124221],{"class":117,"line":118},[115,124213,124214],{"class":1963},"deb",[115,124216,124217],{"class":230}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[115,124219,124220],{"class":230}," stable",[115,124222,124223],{"class":230}," main\n",[1132,124225,124226,124253],{},[72,124227,124228,124229,124231,124232],{},"如果你使用的是",[112,124230,123064],{},"编辑器：",[1132,124233,124234,124241,124247],{},[72,124235,124236,124237,124240],{},"按 ",[112,124238,124239],{},"Ctrl+O"," 保存文件。",[72,124242,124236,124243,124246],{},[112,124244,124245],{},"Enter"," 确认文件名。",[72,124248,124236,124249,124252],{},[112,124250,124251],{},"Ctrl+X"," 退出编辑器。",[72,124254,124228,124255,124231,124258],{},[112,124256,124257],{},"vim",[1132,124259,124260,124266],{},[72,124261,124236,124262,124265],{},[112,124263,124264],{},"Esc"," 退出编辑模式。",[72,124267,124268,124269,124271],{},"输入 ",[112,124270,119211],{}," 保存并退出。",[14,124273,124274],{},"接下来重新更新软件源：",[106,124276,124278],{"className":117286,"code":124277,"language":117288,"meta":22,"style":22},"pkg update && pkg upgrade\n",[112,124279,124280],{"__ignoreMap":22},[115,124281,124282,124284,124286,124288,124290],{"class":117,"line":118},[115,124283,124181],{"class":1963},[115,124285,117337],{"class":230},[115,124287,26191],{"class":125},[115,124289,124181],{"class":1963},[115,124291,117323],{"class":230},[14,124293,124294],{},"安装python：",[106,124296,124298],{"className":117286,"code":124297,"language":117288,"meta":22,"style":22},"pkg install python\n",[112,124299,124300],{"__ignoreMap":22},[115,124301,124302,124304,124306],{"class":117,"line":118},[115,124303,124181],{"class":1963},[115,124305,23835],{"class":230},[115,124307,124308],{"class":230}," python\n",[14,124310,124311,26474],{},[275,124312,124313],{},"通过Termux访问设备存储",[14,124315,124316],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[106,124318,124320],{"className":117286,"code":124319,"language":117288,"meta":22,"style":22},"termux-setup-storage\n",[112,124321,124322],{"__ignoreMap":22},[115,124323,124324],{"class":117,"line":118},[115,124325,124319],{"class":1963},[69,124327,124328],{},[72,124329,124330,26474,124333],{},[275,124331,124332],{},"进入HTML文件所在的目录",[69,124334,124335],{},[72,124336,124337,124338,124340],{},"使用",[112,124339,101266],{},"命令进入HTML文件所在的目录：",[106,124342,124344],{"className":117286,"code":124343,"language":117288,"meta":22,"style":22},"cd ~\u002Fyour_html_folder\n",[112,124345,124346],{"__ignoreMap":22},[115,124347,124348,124350],{"class":117,"line":118},[115,124349,101266],{"class":174},[115,124351,124352],{"class":230}," ~\u002Fyour_html_folder\n",[69,124354,124355],{"start":37},[72,124356,124357,26474,124360,124365,124382],{},[275,124358,124359],{},"启动Python HTTP服务器",[69,124361,124362],{},[72,124363,124364],{},"运行以下命令启动一个简单的HTTP服务器：",[106,124366,124368],{"className":117286,"code":124367,"language":117288,"meta":22,"style":22},"python -m http.server 8000\n",[112,124369,124370],{"__ignoreMap":22},[115,124371,124372,124374,124376,124379],{"class":117,"line":118},[115,124373,30381],{"class":1963},[115,124375,100872],{"class":174},[115,124377,124378],{"class":230}," http.server",[115,124380,124381],{"class":174}," 8000\n",[69,124383,124384],{"start":1180},[72,124385,124386,124387,124390],{},"这会在端口",[112,124388,124389],{},"8000","上启动一个Web服务器。",[1132,124392,124393],{},[72,124394,124395],{},"启动服务器后，Termux会显示日志信息，例如：",[106,124397,124399],{"className":120806,"code":124398,"language":120808,"meta":120809,"style":22},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[112,124400,124401],{"__ignoreMap":22},[115,124402,124403],{"class":117,"line":118},[115,124404,124398],{},[1132,124406,124407],{},[72,124408,124409],{},"这表示服务器已成功启动。",[14,124411,124412],{},[275,124413,124414],{},"在浏览器中访问HTML文件",[69,124416,124417],{},[72,124418,124419,26474,124422,124427],{},[275,124420,124421],{},"在同一设备上访问",[69,124423,124424],{},[72,124425,124426],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[106,124428,124431],{"className":124429,"code":124430,"language":71654,"meta":22,"style":22},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[112,124432,124433],{"__ignoreMap":22},[115,124434,124435,124438],{"class":117,"line":118},[115,124436,124437],{"class":125},"http:",[115,124439,124440],{"class":184},"\u002F\u002Flocalhost:8000\n",[1132,124442,124443],{},[72,124444,124445,124446,124449],{},"如果HTML文件中有",[112,124447,124448],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[57,124451,124453],{"id":124452},"_76-linux重点知识","7.6 Linux重点知识",[86,124455,124457],{"id":124456},"_761-关于点的说明","7.6.1 关于点的说明",[14,124459,124460],{},[20,124461],{"alt":22,"src":124462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124464,124465],{},"一点本目录，两点上目录",[86,124467,124469],{"id":124468},"_762-目录","7.6.2 目录",[21999,124471,124473],{"id":124472},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124475,124476],{},[275,124477,124478],{},"\u002Fboot:",[14,124480,124481],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124483,124484],{},[275,124485,124486],{},"\u002Fetc:",[14,124488,124489],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124491,124492],{},[275,124493,124494],{},"\u002Flib：",[14,124496,124497],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124499,124500],{},[275,124501,124502],{},"\u002Fsys:",[14,124504,124505],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21999,124507,124509],{"id":124508},"_7622-指令集合","7.6.2.2 指令集合",[14,124511,124512],{},[275,124513,124514],{},"\u002Fbin:",[14,124516,124517],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124519,124520],{},[275,124521,124522],{},"\u002Fsbin:",[14,124524,124525],{},"只有系统管理员才能使用的程序和指令",[21999,124527,124529],{"id":124528},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124531,124532],{},[275,124533,124534],{},"\u002Fdev:",[14,124536,124537],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124539,124540],{},[275,124541,124542],{},"\u002Fmedia:",[14,124544,124545],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124547,124548],{},[275,124549,124550],{},"\u002Fmnt:",[14,124552,124553],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21999,124555,124557],{"id":124556},"_7624-临时文件","7.6.2.4 临时文件",[14,124559,124560],{},[275,124561,124562],{},"\u002Frun:",[14,124564,124565],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124567,124568],{},[275,124569,124570],{},"\u002Flost+found:",[14,124572,124573],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124575,124576],{},[275,124577,124578],{},"\u002Ftmp:",[14,124580,124581],{},"这个目录是用来存放一些临时文件的",[21999,124583,124585],{"id":124584},"_7625-账户","7.6.2.5 账户",[14,124587,124588],{},[275,124589,124590],{},"\u002Froot：",[14,124592,124593],{},"系统管理员的用户主目录",[14,124595,124596,26474],{},[275,124597,124598],{},"\u002Fhome",[14,124600,124601],{},"用户的主目录，以用户的账号命名的",[14,124603,124604,26474],{},[275,124605,124606],{},"\u002Fusr",[14,124608,124609],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124611,124612],{},[275,124613,124614],{},"\u002Fusr\u002Fbin：",[14,124616,124617],{},"系统用户使用的应用程序与指令",[14,124619,124620],{},[275,124621,124622],{},"\u002Fusr\u002Fsbin：",[14,124624,124625],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124627,124628],{},[275,124629,124630],{},"\u002Fusr\u002Fsrc：",[14,124632,124633],{},"内核源代码默认的放置目录",[21999,124635,124637],{"id":124636},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124639,124640],{},[275,124641,124642],{},"\u002Fvar：",[14,124644,124645],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124647,124648],{},[275,124649,124650],{},"\u002Fproc:",[14,124652,124653,124654,124657],{},"管理 ",[275,124655,124656],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21999,124659,124661],{"id":124660},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124663,124664],{},[275,124665,124666],{},"\u002Fopt:",[14,124668,124669],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124671,124672],{},[275,124673,124674],{},"\u002Fsrv:",[14,124676,124677],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[86,124679,124681],{"id":124680},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124683,124684],{},[20,124685],{"alt":22,"src":124686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124688,124689],{},"windows-->linux:",[14,124691,124692],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124694,124695],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124697,124698],{},"linux传输文件到windows",[14,124700,124701],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[86,124703,124705],{"id":124704},"_764-易忘知识","7.6.4 易忘知识",[14,124707,124708],{},"操作系统内核查看",[106,124710,124711],{"className":117286,"code":121280,"language":117288,"meta":22,"style":22},[112,124712,124713],{"__ignoreMap":22},[115,124714,124715,124717],{"class":117,"line":118},[115,124716,70194],{"class":1963},[115,124718,121289],{"class":174},[14,124720,124721],{},[20,124722],{"alt":22,"src":124723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124725,124726],{},[20,124727],{"alt":22,"src":124728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[106,124730,124732],{"className":117286,"code":124731,"language":117288,"meta":22,"style":22},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[112,124733,124734,124746],{"__ignoreMap":22},[115,124735,124736,124738,124741,124744],{"class":117,"line":118},[115,124737,121497],{"class":1963},[115,124739,124740],{"class":230}," mvtest",[115,124742,124743],{"class":230}," mvtest2",[115,124745,2674],{"class":125},[115,124747,124748],{"class":117,"line":37},[115,124749,124750],{"class":1963},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124752,124753],{},[20,124754],{"alt":22,"src":124755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124757,124758],{},[20,124759],{"alt":22,"src":124760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124762,124763,124764,124767],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[112,124765,124766],{},"du -a"," 可以快速查看磁盘使用细节。",[86,124769,124771],{"id":124770},"_765-vim","7.6.5 Vim",[14,124773,124774],{},[20,124775],{"alt":22,"src":124776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124778,124779],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124781,124782],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124784,124785],{},[275,124786,124787],{},"1.命令模式：",[14,124789,124790],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124792,124793],{},"x 删除当前光标所在处的字符",[14,124795,124796],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124798,124799],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124801,124802],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124804,124805],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124807,124808],{},"dd 剪切当前行",[14,124810,124811],{},"yy 复制当前行",[14,124813,124814],{},"p 粘贴剪贴板内容到光标下方",[14,124816,124817],{},"P 粘贴剪贴板内容到光标上方",[14,124819,124820],{},"u 撤销上一次操作",[14,124822,124823],{},"ctrl+r 重做上一次操作",[14,124825,124826,124828],{},[920,124827],{}," 保存文件",[14,124830,124831,124833],{},[770,124832],{}," 退出Vim编辑器",[14,124835,124836,124838],{},[770,124837],{},"! 强制退出Vim编辑器，不保存修改",[14,124840,124841],{},[275,124842,124843],{},"2.输入模式：",[14,124845,124846],{},[20,124847],{"alt":22,"src":124848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124850,124851],{},[275,124852,124853],{},"3.底线命令模式：",[14,124855,124856],{},[20,124857],{"alt":22,"src":124858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124860,124861],{},"按下esc可以退出底线命令模式",[86,124863,124865],{"id":124864},"_766-apt","7.6.6 apt",[14,124867,124868],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[86,124870,124872],{"id":124871},"_767-home与root的区别","7.6.7 home与root的区别",[14,124874,124875],{},[20,124876],{"alt":22,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124879,124880],{},[20,124881],{"alt":22,"src":124882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124884,124885],{},[20,124886],{"alt":22,"src":124887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124889,124890],{},[20,124891],{"alt":22,"src":124892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[86,124894,124896],{"id":124895},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124898,124899],{},[27,124900,124901],{"href":124901,"rel":124902},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[31],[69,124904,124905,124908],{},[72,124906,124907],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[72,124909,124910],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124912,124913],{},[20,124914],{"alt":22,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124917,124918],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124920,124921],{},[20,124922],{"alt":22,"src":124923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[106,124925,124927],{"className":120806,"code":124926,"language":120808,"meta":120809,"style":22},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[112,124928,124929,124934],{"__ignoreMap":22},[115,124930,124931],{"class":117,"line":118},[115,124932,124933],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[115,124935,124936],{"class":117,"line":37},[115,124937,124938],{},".\u002Fpycharm.sh\n",[14,124940,124941],{},"3️⃣创建.desktop文件",[14,124943,124944],{},[275,124945,124946],{},"原理：",[1132,124948,124949,124959],{},[72,124950,124951,124952,124958],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[275,124953,124954,124957],{},[112,124955,124956],{},".desktop"," 文件"," 来识别应用。",[72,124960,124961,124963,124964],{},[112,124962,124956],{}," 文件相当于一个“应用注册表”，告诉系统：",[1132,124965,124966,124969,124972,124975,124978],{},[72,124967,124968],{},"应用名字（Name）",[72,124970,124971],{},"图标（Icon）",[72,124973,124974],{},"执行命令（Exec）",[72,124976,124977],{},"分类（Categories）",[72,124979,124980],{},"是否需要终端（Terminal）",[106,124982,124984],{"className":120806,"code":124983,"language":120808,"meta":120809,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[112,124985,124986,124991],{"__ignoreMap":22},[115,124987,124988],{"class":117,"line":118},[115,124989,124990],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[115,124992,124993],{"class":117,"line":37},[115,124994,124995],{},"nano pycharm.desktop\n",[14,124997,124998],{},"nano是一个命令行下的编辑器，也可以使用vim",[106,125000,125002],{"className":120806,"code":125001,"language":120808,"meta":120809,"style":22},"[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",[112,125003,125004,125009,125014,125019,125024,125029,125034,125039,125044,125049],{"__ignoreMap":22},[115,125005,125006],{"class":117,"line":118},[115,125007,125008],{},"[Desktop Entry]\n",[115,125010,125011],{"class":117,"line":37},[115,125012,125013],{},"Version=1.0\n",[115,125015,125016],{"class":117,"line":1180},[115,125017,125018],{},"Type=Application\n",[115,125020,125021],{"class":117,"line":1195},[115,125022,125023],{},"Name=PyCharm\n",[115,125025,125026],{"class":117,"line":1201},[115,125027,125028],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[115,125030,125031],{"class":117,"line":1215},[115,125032,125033],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[115,125035,125036],{"class":117,"line":1221},[115,125037,125038],{},"Comment=JetBrains PyCharm IDE\n",[115,125040,125041],{"class":117,"line":1312},[115,125042,125043],{},"Categories=Development;IDE;\n",[115,125045,125046],{"class":117,"line":1318},[115,125047,125048],{},"Terminal=false\n",[115,125050,125051],{"class":117,"line":1330},[115,125052,125053],{},"StartupWMClass=jetbrains-pycharm\n",[1132,125055,125056,125062,125068,125074],{},[72,125057,125058,125061],{},[112,125059,125060],{},"Exec"," → 点击图标时执行的命令",[72,125063,125064,125067],{},[112,125065,125066],{},"Icon"," → 显示在菜单和桌面上的图标",[72,125069,125070,125073],{},[112,125071,125072],{},"Terminal=false"," → 不打开终端",[72,125075,125076,125079],{},[112,125077,125078],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125081,125082,125083],"blockquote",{},[14,125084,125085,125086,125088,125089],{},"可以理解成 ",[112,125087,124956],{}," 文件是 Linux 的 ",[275,125090,125091],{},"快捷方式配置文件",[14,125093,125094],{},"4️⃣设置可执行权限",[106,125096,125098],{"className":120806,"code":125097,"language":120808,"meta":120809,"style":22},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[112,125099,125100],{"__ignoreMap":22},[115,125101,125102],{"class":117,"line":118},[115,125103,125097],{},[14,125105,125106],{},"5️⃣桌面图标启动的话如下：",[106,125108,125110],{"className":120806,"code":125109,"language":120808,"meta":120809,"style":22},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[112,125111,125112,125117],{"__ignoreMap":22},[115,125113,125114],{"class":117,"line":118},[115,125115,125116],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[115,125118,125119],{"class":117,"line":37},[115,125120,125121],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[69,125123,125124],{"start":1180},[72,125125,125126],{},"下载Appimage文件实现软件的安装",[14,125128,125129],{},"1️⃣先下载appimage",[14,125131,125132],{},[27,125133,125134],{"href":125134,"rel":125135},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[31],[14,125137,125138],{},[20,125139],{"alt":22,"src":125140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125142,125143],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125145,125146],{},[20,125147],{"alt":22,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125150,125151],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125153,125154],{},[20,125155],{"alt":22,"src":125156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125158,125159],{},[20,125160],{"alt":22,"src":125161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125163,125164,125165,125168],{},"3️⃣给他们放在",[112,125166,125167],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125170,125171],{},"4️⃣给软件执行权限",[106,125173,125175],{"className":120806,"code":125174,"language":120808,"meta":120809,"style":22},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[112,125176,125177,125182],{"__ignoreMap":22},[115,125178,125179],{"class":117,"line":118},[115,125180,125181],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[115,125183,125184],{"class":117,"line":37},[115,125185,125186],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125188,125189],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[106,125191,125193],{"className":117286,"code":125192,"language":117288,"meta":22,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[112,125194,125195,125202,125209,125215],{"__ignoreMap":22},[115,125196,125197,125199],{"class":117,"line":118},[115,125198,101266],{"class":174},[115,125200,125201],{"class":230}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[115,125203,125204,125206],{"class":117,"line":37},[115,125205,101273],{"class":1963},[115,125207,125208],{"class":230}," .\u002Fqqmusic.desktop\n",[115,125210,125211,125213],{"class":117,"line":1180},[115,125212,124257],{"class":1963},[115,125214,125208],{"class":230},[115,125216,125217,125219,125221,125223],{"class":117,"line":1195},[115,125218,24577],{"class":1963},[115,125220,24580],{"class":230},[115,125222,123123],{"class":230},[115,125224,125208],{"class":230},[14,125226,125227,125229],{},[112,125228,101273],{},"：一个 Linux 命令，主要功能是：",[1132,125231,125232,125235],{},[72,125233,125234],{},"如果文件不存在，就创建一个新的空文件",[72,125236,125237],{},"如果文件已存在，就更新该文件的最后修改时间",[106,125239,125241],{"className":120806,"code":125240,"language":120808,"meta":120809,"style":22},"[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",[112,125242,125243,125247,125252,125257,125262,125266,125271],{"__ignoreMap":22},[115,125244,125245],{"class":117,"line":118},[115,125246,125008],{},[115,125248,125249],{"class":117,"line":37},[115,125250,125251],{},"Name=QQ音乐\n",[115,125253,125254],{"class":117,"line":1180},[115,125255,125256],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[115,125258,125259],{"class":117,"line":1195},[115,125260,125261],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[115,125263,125264],{"class":117,"line":1201},[115,125265,125018],{},[115,125267,125268],{"class":117,"line":1215},[115,125269,125270],{},"Categories=Audio;Music;Player;\n",[115,125272,125273],{"class":117,"line":1221},[115,125274,125275],{},"Comment=QQ Music Client for Linux\n",[14,125277,125278],{},"将文件复制进去",[14,125280,125281],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125283,125284],{},[20,125285],{"alt":22,"src":125286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125288,125289],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125291,125292],{},[20,125293],{"alt":22,"src":125294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125296,125297,125298,125301,125302,125305],{},"如果你用的不是KDE，那么也可以直接修改",[112,125299,125300],{},"qqmuic.desktop","：在exec的末尾加上",[112,125303,125304],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[106,125307,125309],{"className":120806,"code":125308,"language":120808,"meta":120809,"style":22},"[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",[112,125310,125311,125315,125319,125324,125328,125332,125336],{"__ignoreMap":22},[115,125312,125313],{"class":117,"line":118},[115,125314,125008],{},[115,125316,125317],{"class":117,"line":37},[115,125318,125251],{},[115,125320,125321],{"class":117,"line":1180},[115,125322,125323],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[115,125325,125326],{"class":117,"line":1195},[115,125327,125261],{},[115,125329,125330],{"class":117,"line":1201},[115,125331,125018],{},[115,125333,125334],{"class":117,"line":1215},[115,125335,125270],{},[115,125337,125338],{"class":117,"line":1221},[115,125339,125275],{},[14,125341,125342],{},[20,125343],{"alt":22,"src":125344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125346,125347],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[106,125349,125351],{"className":120806,"code":125350,"language":120808,"meta":120809,"style":22},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[112,125352,125353],{"__ignoreMap":22},[115,125354,125355],{"class":117,"line":118},[115,125356,125350],{},[69,125358,125359],{"start":1195},[72,125360,125361],{},"去Flathub上安装软件",[14,125363,125364],{},[27,125365,125366],{"href":125366,"rel":125367},"https:\u002F\u002Fflathub.org\u002F",[31],[14,125369,125370],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125372,125373],{},[20,125374],{"alt":22,"src":125375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[106,125377,125379],{"className":120806,"code":125378,"language":120808,"meta":120809,"style":22},"flatpak install flathub com.obsproject.Studio\n",[112,125380,125381],{"__ignoreMap":22},[115,125382,125383],{"class":117,"line":118},[115,125384,125378],{},[14,125386,125387],{},[20,125388],{"alt":22,"src":125389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125391,125392],{},"2️⃣运行软件",[14,125394,125395],{},"a.官方方式：",[14,125397,125398],{},[20,125399],{"alt":22,"src":125400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[106,125402,125403],{"className":120806,"code":125378,"language":120808,"meta":120809,"style":22},[112,125404,125405],{"__ignoreMap":22},[115,125406,125407],{"class":117,"line":118},[115,125408,125378],{},[14,125410,125411],{},"b.当普通软件运行：",[14,125413,125414],{},[20,125415],{"alt":22,"src":125416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125418,125419],{},[20,125420],{"alt":22,"src":125421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5127,125423,125424],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":22,"searchDepth":37,"depth":37,"links":125426},[125427,125428,125433,125434,125440,125441],{"id":122159,"depth":37,"text":122160},{"id":122501,"depth":37,"text":122502,"children":125429},[125430,125431,125432],{"id":122505,"depth":1180,"text":122506},{"id":122572,"depth":1180,"text":122573},{"id":122833,"depth":1180,"text":122834},{"id":122986,"depth":37,"text":122987},{"id":123224,"depth":37,"text":123225,"children":125435},[125436,125437,125438,125439],{"id":123276,"depth":1180,"text":123277},{"id":123562,"depth":1180,"text":123563},{"id":123833,"depth":1180,"text":123834},{"id":124092,"depth":1180,"text":124093},{"id":124151,"depth":37,"text":124152},{"id":124452,"depth":37,"text":124453,"children":125442},[125443,125444,125445,125446,125447,125448,125449,125450],{"id":124456,"depth":1180,"text":124457},{"id":124468,"depth":1180,"text":124469},{"id":124680,"depth":1180,"text":124681},{"id":124704,"depth":1180,"text":124705},{"id":124770,"depth":1180,"text":124771},{"id":124864,"depth":1180,"text":124865},{"id":124871,"depth":1180,"text":124872},{"id":124895,"depth":1180,"text":124896},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122151,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125457,"title":125458,"body":125459,"description":39,"extension":40,"meta":125463,"navigation":42,"path":125464,"seo":125465,"stem":125466,"__hash__":125467},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125460,"toc":125461},[],{"title":22,"searchDepth":37,"depth":37,"links":125462},[],{"category":30264},"\u002Fwiki\u002F2025-01-27-linux",{"title":125458,"description":39},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125469,"title":125470,"body":125471,"description":125475,"extension":40,"meta":125866,"navigation":42,"path":125867,"seo":125868,"stem":125869,"__hash__":125870},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125472,"toc":125864},[125473,125476,125480,125497,125500,125553,125557,125559,125599,125608,125612,125615,125856,125861],[14,125474,125475],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125477,125479],{"id":125478},"_1ubuntu环境配置","1.Ubuntu环境配置",[69,125481,125482,125485,125488,125491,125494],{},[72,125483,125484],{},"ubuntu环境换源",[72,125486,125487],{},"安装cuda",[72,125489,125490],{},"安装miniconda",[72,125492,125493],{},"安装pytorch",[72,125495,125496],{},"安装genesis",[14,125498,125499],{},"参考链接：",[106,125501,125503],{"className":23823,"code":125502,"language":23825,"meta":22,"style":22},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[112,125504,125505],{"__ignoreMap":22},[115,125506,125507,125510,125513,125516,125518,125521,125524,125526,125529,125532,125534,125537,125540,125542,125545,125548,125550],{"class":117,"line":118},[115,125508,125509],{"class":1963},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[115,125511,125512],{"class":230},"=blogdetail",[115,125514,125515],{"class":125},"&sharetype",[115,125517,171],{"class":121},[115,125519,125520],{"class":230},"blogdetail",[115,125522,125523],{"class":125},"&sharerId",[115,125525,171],{"class":121},[115,125527,125528],{"class":230},"144728092",[115,125530,125531],{"class":125},"&sharerefer",[115,125533,171],{"class":121},[115,125535,125536],{"class":230},"PC",[115,125538,125539],{"class":125},"&sharesource",[115,125541,171],{"class":121},[115,125543,125544],{"class":230},"qq_69379513",[115,125546,125547],{"class":125},"&sharefrom",[115,125549,171],{"class":121},[115,125551,125552],{"class":230},"from_link\n",[10,125554,125556],{"id":125555},"_2genesis-报错issue","2.Genesis 报错issue",[14,125558,125499],{},[106,125560,125561],{"className":23823,"code":125502,"language":23825,"meta":22,"style":22},[112,125562,125563],{"__ignoreMap":22},[115,125564,125565,125567,125569,125571,125573,125575,125577,125579,125581,125583,125585,125587,125589,125591,125593,125595,125597],{"class":117,"line":118},[115,125566,125509],{"class":1963},[115,125568,125512],{"class":230},[115,125570,125515],{"class":125},[115,125572,171],{"class":121},[115,125574,125520],{"class":230},[115,125576,125523],{"class":125},[115,125578,171],{"class":121},[115,125580,125528],{"class":230},[115,125582,125531],{"class":125},[115,125584,171],{"class":121},[115,125586,125536],{"class":230},[115,125588,125539],{"class":125},[115,125590,171],{"class":121},[115,125592,125544],{"class":230},[115,125594,125547],{"class":125},[115,125596,171],{"class":121},[115,125598,125552],{"class":230},[106,125600,125602],{"className":23823,"code":125601,"language":23825,"meta":22,"style":22},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[112,125603,125604],{"__ignoreMap":22},[115,125605,125606],{"class":117,"line":118},[115,125607,125601],{"class":1963},[10,125609,125611],{"id":125610},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125613,125614],{},"hello_robot.py",[106,125616,125618],{"className":30379,"code":125617,"language":30381,"meta":22,"style":22},"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",[112,125619,125620,125626,125641,125645,125657,125669,125673,125686,125690,125709,125719,125729,125743,125747,125751,125756,125760,125770,125777,125791,125798,125808,125813,125817,125835,125840,125844,125851],{"__ignoreMap":22},[115,125621,125622,125624],{"class":117,"line":118},[115,125623,30393],{"class":121},[115,125625,45306],{"class":125},[115,125627,125628,125631,125634,125636,125638],{"class":117,"line":37},[115,125629,125630],{"class":125},"os.environ[",[115,125632,125633],{"class":230},"'PYOPENGL_PLATFORM'",[115,125635,4443],{"class":125},[115,125637,171],{"class":121},[115,125639,125640],{"class":230}," 'glx'\n",[115,125642,125643],{"class":117,"line":1180},[115,125644,2400],{"emptyLinePlaceholder":42},[115,125646,125647,125649,125652,125654],{"class":117,"line":1195},[115,125648,30393],{"class":121},[115,125650,125651],{"class":125}," genesis ",[115,125653,31384],{"class":121},[115,125655,125656],{"class":125}," gs\n",[115,125658,125659,125661,125664,125666],{"class":117,"line":1201},[115,125660,30738],{"class":121},[115,125662,125663],{"class":125}," pynput ",[115,125665,30393],{"class":121},[115,125667,125668],{"class":125}," keyboard\n",[115,125670,125671],{"class":117,"line":1215},[115,125672,2400],{"emptyLinePlaceholder":42},[115,125674,125675,125678,125681,125683],{"class":117,"line":1221},[115,125676,125677],{"class":125},"gs.init(",[115,125679,125680],{"class":5217},"backend",[115,125682,171],{"class":121},[115,125684,125685],{"class":125},"gs.gpu)\n",[115,125687,125688],{"class":117,"line":1312},[115,125689,2400],{"emptyLinePlaceholder":42},[115,125691,125692,125695,125697,125700,125703,125705,125707],{"class":117,"line":1318},[115,125693,125694],{"class":125},"scene ",[115,125696,171],{"class":121},[115,125698,125699],{"class":125}," gs.Scene(",[115,125701,125702],{"class":5217},"show_viewer",[115,125704,171],{"class":121},[115,125706,31477],{"class":174},[115,125708,132],{"class":125},[115,125710,125711,125714,125716],{"class":117,"line":1330},[115,125712,125713],{"class":125},"plane ",[115,125715,171],{"class":121},[115,125717,125718],{"class":125}," scene.add_entity(gs.morphs.Plane())\n",[115,125720,125721,125724,125726],{"class":117,"line":1612},[115,125722,125723],{"class":125},"franka ",[115,125725,171],{"class":121},[115,125727,125728],{"class":125}," scene.add_entity(\n",[115,125730,125731,125734,125736,125738,125741],{"class":117,"line":1617},[115,125732,125733],{"class":125},"    gs.morphs.MJCF(",[115,125735,45355],{"class":5217},[115,125737,171],{"class":121},[115,125739,125740],{"class":230},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[115,125742,38048],{"class":125},[115,125744,125745],{"class":117,"line":1623},[115,125746,132],{"class":125},[115,125748,125749],{"class":117,"line":1628},[115,125750,2400],{"emptyLinePlaceholder":42},[115,125752,125753],{"class":117,"line":1642},[115,125754,125755],{"class":125},"scene.build()\n",[115,125757,125758],{"class":117,"line":1647},[115,125759,2400],{"emptyLinePlaceholder":42},[115,125761,125762,125764,125767],{"class":117,"line":1653},[115,125763,31948],{"class":121},[115,125765,125766],{"class":1963}," on_press",[115,125768,125769],{"class":125},"(key):\n",[115,125771,125772,125775],{"class":117,"line":1674},[115,125773,125774],{"class":121},"    try",[115,125776,3739],{"class":125},[115,125778,125779,125781,125784,125786,125789],{"class":117,"line":1679},[115,125780,2497],{"class":121},[115,125782,125783],{"class":125}," key.char ",[115,125785,2949],{"class":121},[115,125787,125788],{"class":230}," 'q'",[115,125790,3739],{"class":125},[115,125792,125793,125795],{"class":117,"line":1693},[115,125794,15733],{"class":121},[115,125796,125797],{"class":174}," False\n",[115,125799,125800,125803,125806],{"class":117,"line":1698},[115,125801,125802],{"class":121},"    except",[115,125804,125805],{"class":174}," AttributeError",[115,125807,3739],{"class":125},[115,125809,125810],{"class":117,"line":1727},[115,125811,125812],{"class":121},"        pass\n",[115,125814,125815],{"class":117,"line":1732},[115,125816,2400],{"emptyLinePlaceholder":42},[115,125818,125819,125822,125824,125827,125830,125832],{"class":117,"line":1749},[115,125820,125821],{"class":125},"listener ",[115,125823,171],{"class":121},[115,125825,125826],{"class":125}," keyboard.Listener(",[115,125828,125829],{"class":5217},"on_press",[115,125831,171],{"class":121},[115,125833,125834],{"class":125},"on_press)\n",[115,125836,125837],{"class":117,"line":1754},[115,125838,125839],{"class":125},"listener.start()\n",[115,125841,125842],{"class":117,"line":1759},[115,125843,2400],{"emptyLinePlaceholder":42},[115,125845,125846,125848],{"class":117,"line":1764},[115,125847,108653],{"class":121},[115,125849,125850],{"class":125}," listener.running:\n",[115,125852,125853],{"class":117,"line":1778},[115,125854,125855],{"class":125},"    scene.step()\n",[14,125857,125858],{},[20,125859],{"alt":22,"src":125860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5127,125862,125863],{},"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":22,"searchDepth":37,"depth":37,"links":125865},[],{"category":23379},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125470,"description":125475},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125872,"title":125873,"body":125874,"description":39,"extension":40,"meta":125889,"navigation":42,"path":125890,"seo":125891,"stem":125892,"__hash__":125893},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125875,"toc":125886},[125876,125879,125883],[10,125877,125873],{"id":125878},"_1-基础知识",[57,125880,125882],{"id":125881},"_11-js的组成","1.1 js的组成",[14,125884,125885],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":22,"searchDepth":37,"depth":37,"links":125887},[125888],{"id":125881,"depth":37,"text":125882},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125873,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125895,"title":125896,"body":125897,"description":39,"extension":40,"meta":126036,"navigation":42,"path":126037,"seo":126038,"stem":126039,"__hash__":126040},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125898,"toc":126024},[125899,125902,125906,125909,125913,125923,125927,125930,125933,125936,125940,125947,125953,125957,125963,125974,125978,125981,125985,125988,125992,125995,125999,126002,126006,126009,126012,126015,126018,126021],[10,125900,125896],{"id":125901},"_2-vscode必备内容",[57,125903,125905],{"id":125904},"_21-标签分类","2.1 标签分类",[14,125907,125908],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[57,125910,125912],{"id":125911},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125914,125915,125916,125918,125919,125922],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[112,125917,352],{}," 然后按 ",[112,125920,125921],{},"Tab","，快速自动生成基本结构。",[57,125924,125926],{"id":125925},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125928,125929],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125931,125932],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125934,125935],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[57,125937,125939],{"id":125938},"_24-视图缩放","2.4 视图缩放",[14,125941,125942,125943,125946],{},"缩放视图 ",[112,125944,125945],{},"ctrl+"," 可实现代码增大。",[14,125948,125949,125952],{},[112,125950,125951],{},"ctrl-"," 可实现代码减小。",[57,125954,125956],{"id":125955},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125958,125959,125960,28386],{},"VSCode 新建文件快捷键为 ",[112,125961,125962],{},"ctrl+N",[14,125964,125965,125966,125969,125970,125973],{},"保存快捷键为 ",[112,125967,125968],{},"ctrl+S","，将文本保存为 ",[112,125971,125972],{},".html"," 文件。",[57,125975,125977],{"id":125976},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125979,125980],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[57,125982,125984],{"id":125983},"_27-vscode-icons","2.7 vscode-icons",[14,125986,125987],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[57,125989,125991],{"id":125990},"_28-easy-less","2.8 Easy LESS",[14,125993,125994],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[57,125996,125998],{"id":125997},"_29-会了吧插件","2.9 会了吧插件",[14,126000,126001],{},"会了吧插件可以展示代码中英语单词的意思。",[57,126003,126005],{"id":126004},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126007,126008],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126010,126011],{},"②选定多个相同的单词:ctrl+D",[14,126013,126014],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126016,126017],{},"④全局替换某些单词:ctrl+h",[14,126019,126020],{},"⑤快速定位到某一行:ctrl+g",[14,126022,126023],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":22,"searchDepth":37,"depth":37,"links":126025},[126026,126027,126028,126029,126030,126031,126032,126033,126034,126035],{"id":125904,"depth":37,"text":125905},{"id":125911,"depth":37,"text":125912},{"id":125925,"depth":37,"text":125926},{"id":125938,"depth":37,"text":125939},{"id":125955,"depth":37,"text":125956},{"id":125976,"depth":37,"text":125977},{"id":125983,"depth":37,"text":125984},{"id":125990,"depth":37,"text":125991},{"id":125997,"depth":37,"text":125998},{"id":126004,"depth":37,"text":126005},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125896,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126042,"title":126043,"body":126044,"description":39,"extension":40,"meta":126203,"navigation":42,"path":126204,"seo":126205,"stem":126206,"__hash__":126207},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126045,"toc":126195},[126046,126049,126053,126063,126069,126075,126079,126088,126092,126097,126100,126103,126107,126110,126120,126129,126138,126147,126157,126164,126169,126174,126187],[10,126047,126043],{"id":126048},"_3-html文本与容器标签",[57,126050,126052],{"id":126051},"_31-标题标签","3.1 标题标签",[14,126054,126055,126058,126059,126062],{},[112,126056,126057],{},"\u003Ch1>","我是一级标签",[112,126060,126061],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126064,126065,126058,126067],{},[112,126066,126057],{},[112,126068,126061],{},[14,126070,123325,126071,126074],{},[112,126072,126073],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[57,126076,126078],{"id":126077},"_32-段落标签","3.2 段落标签",[14,126080,126081,126084,126085],{},[112,126082,126083],{},"\u003Cp>","....",[112,126086,126087],{},"\u003C\u002Fp>",[57,126089,126091],{"id":126090},"_33-换行标签","3.3 换行标签",[14,126093,126094],{},[112,126095,126096],{},"\u003Cbr \u002F>",[14,126098,126099],{},"具有强制换行的作用",[14,126101,126102],{},"单标签",[57,126104,126106],{"id":126105},"_34-文本格式化标签","3.4 文本格式化标签",[14,126108,126109],{},"提供粗体、斜体和下划线等效果",[14,126111,126112,126113,82529,126116,126119],{},"加粗：",[112,126114,126115],{},"\u003Cstrong>...\u003C\u002Fstrong>",[112,126117,126118],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126121,126122,126123,82529,126126,126119],{},"斜体：",[112,126124,126125],{},"\u003Cem>...\u003C\u002Fem>",[112,126127,126128],{},"\u003Ci>...\u003C\u002Fi>",[14,126130,126131,126132,82529,126135,126119],{},"删除线：",[112,126133,126134],{},"\u003Cdel>...\u003C\u002Fdel>",[112,126136,126137],{},"\u003Cs>...\u003C\u002Fs>",[14,126139,126140,126141,82529,126144,126119],{},"下划线：",[112,126142,126143],{},"\u003Cins>...\u003C\u002Fins>",[112,126145,126146],{},"\u003Cu>...\u003C\u002Fu>",[57,126148,126150,126151,18411,126154,102683],{"id":126149},"_35-div和span标签","3.5 ",[112,126152,126153],{},"\u003Cdiv>",[112,126155,126156],{},"\u003Cspan>",[14,126158,126159,101008,126161,126163],{},[112,126160,126153],{},[112,126162,126156],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126165,126166],{},[112,126167,126168],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126170,126171],{},[112,126172,126173],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126175,126176,126177,126179,126180,126182,126183,126186],{},"两者特点：①",[112,126178,126153],{}," 标签用来布局，但一行通常只放一个 ",[112,126181,126153],{},"。可以理解为一个大盒子，独占一行，在 ",[112,126184,126185],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126188,77239,126189,126191,126192,126194],{},[112,126190,126156],{}," 标签也可用于布局，一行可以放多个 ",[112,126193,126156],{},"，可理解为小盒子。",{"title":22,"searchDepth":37,"depth":37,"links":126196},[126197,126198,126199,126200,126201],{"id":126051,"depth":37,"text":126052},{"id":126077,"depth":37,"text":126078},{"id":126090,"depth":37,"text":126091},{"id":126105,"depth":37,"text":126106},{"id":126149,"depth":37,"text":126202},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126043,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126209,"title":126210,"body":126211,"description":39,"extension":40,"meta":126408,"navigation":42,"path":126409,"seo":126410,"stem":126411,"__hash__":126412},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126212,"toc":126400},[126213,126216,126220,126223,126229,126236,126242,126248,126251,126254,126257,126260,126263,126266,126269,126273,126276,126279,126282,126288,126294,126300,126307,126311,126317,126323,126326,126329,126335,126341,126347,126350,126353,126357,126360,126370,126376,126380,126389,126393,126396],[10,126214,126210],{"id":126215},"_4-html图像与链接",[57,126217,126219],{"id":126218},"_41-图像标签","4.1 图像标签",[14,126221,126222],{},"（1）标签",[14,126224,126225,126228],{},[112,126226,126227],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126230,126231,126232,126235],{},"src是",[112,126233,126234],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126237,126238,126239],{},"alt:文本，替换文本。图像不能显示的文字 ",[112,126240,126241],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126243,126244,126245],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[112,126246,126247],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126249,126250],{},"width:像素，设置图像的宽度",[14,126252,126253],{},"height:像素，设置图像的高度",[14,126255,126256],{},"border：像素，设置图像的边框粗细",[14,126258,126259],{},"（2）图像标签属性的注意点：",[14,126261,126262],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126264,126265],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126267,126268],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[57,126270,126272],{"id":126271},"_42-路径注意要点","4.2 路径注意要点：",[14,126274,126275],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126277,126278],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126280,126281],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126283,126284,126285],{},"①同一级路径：图像文件位于HTML文件同一级，如",[112,126286,126287],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126289,126290,126291],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[112,126292,126293],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126295,126296,126297],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[112,126298,126299],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126301,126302,126303,376],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[27,126304,126305],{"href":126305,"rel":126306},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[31],[57,126308,126310],{"id":126309},"_43-超链接标签","4.3 超链接标签",[14,126312,126313,126316],{},[112,126314,126315],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126318,126319,126320],{},"①语法格式：",[112,126321,126322],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126324,126325],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126327,126328],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126330,126331,126332],{},"③链接分类：外部链接：",[112,126333,126334],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126336,126337,126338],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[112,126339,126340],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126342,126343,126344],{},"空链接：如果当时没有确定链接目标时，",[112,126345,126346],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126348,126349],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126351,126352],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[57,126354,126356],{"id":126355},"_44-锚点链接","4.4 锚点链接",[14,126358,126359],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126361,126362,126363,126366,126367],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[112,126364,126365],{},"\u003Ca href=\"#two\">","第二级",[112,126368,126369],{},"\u003C\u002Fa>",[14,126371,126372,126373],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[112,126374,126375],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[57,126377,126379],{"id":126378},"_45-注释标签","4.5 注释标签",[14,126381,126382,126385,126386],{},[112,126383,126384],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[112,126387,126388],{},"ctrl+\u002F",[57,126390,126392],{"id":126391},"_46-特殊字符","4.6 特殊字符",[14,126394,126395],{},"可以实现添加多个空格",[20,126397],{"style":126398,"src":126399},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":22,"searchDepth":37,"depth":37,"links":126401},[126402,126403,126404,126405,126406,126407],{"id":126218,"depth":37,"text":126219},{"id":126271,"depth":37,"text":126272},{"id":126309,"depth":37,"text":126310},{"id":126355,"depth":37,"text":126356},{"id":126378,"depth":37,"text":126379},{"id":126391,"depth":37,"text":126392},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126210,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126414,"title":126415,"body":126416,"description":39,"extension":40,"meta":126709,"navigation":42,"path":126710,"seo":126711,"stem":126712,"__hash__":126713},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126417,"toc":126700},[126418,126421,126425,126428,126431,126434,126437,126440,126443,126446,126449,126452,126472,126478,126482,126485,126488,126491,126494,126497,126500,126504,126507,126510,126513,126516,126529,126534,126537,126540,126555,126558,126561,126564,126567,126570,126574,126577,126584,126587,126590,126593,126596,126599,126605,126608,126611,126617,126620,126623,126626,126632,126635,126638,126652,126659,126662,126665,126672,126681,126684,126687,126690,126694,126697],[10,126419,126415],{"id":126420},"_5-html表格列表与表单",[57,126422,126424],{"id":126423},"_51-表格标签","5.1 表格标签",[14,126426,126427],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126429,126430],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126432,126433],{},"②表格基本语法：",[20,126435],{"style":126398,"src":126436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126438,126439],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[20,126441],{"style":126398,"src":126442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126444,126445],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[20,126447],{"style":126398,"src":126448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126450,126451],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126453,126454,126457,126458,126460,126461,126464,126465,126467,126468,126471],{},[112,126455,126456],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[112,126459,126456],{},"内部必须拥有",[112,126462,126463],{},"\u003Ctr>","标签，一般位于第一行，",[112,126466,126456],{},"比",[112,126469,126470],{},"\u003Cth>","范围广",[14,126473,126474,126477],{},[112,126475,126476],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[57,126479,126481],{"id":126480},"_52-合并单元格","5.2 合并单元格",[14,126483,126484],{},"（1）合并单元格方式：",[14,126486,126487],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126489,126490],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126492,126493],{},"（2）目标单元格：",[14,126495,126496],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126498,126499],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[57,126501,126503],{"id":126502},"_53-列表标签","5.3 列表标签",[14,126505,126506],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126508,126509],{},"①无序列表：",[20,126511],{"style":126398,"src":126512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126514,126515],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126517,126518,126521,126522,126525,126526,126528],{},[112,126519,126520],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[112,126523,126524],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[112,126527,126520],{},"中输入其他标签或文字是不对的",[14,126530,126531,126533],{},[112,126532,126524],{},"之间相当于一个容器，可以容纳所有元素",[14,126535,126536],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126538,126539],{},"在css中去除前边的小圆点采用如下代码:",[106,126541,126545],{"className":126542,"code":126543,"language":126544,"meta":22,"style":22},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[112,126546,126547],{"__ignoreMap":22},[115,126548,126549,126552],{"class":117,"line":118},[115,126550,126551],{"class":51290},"list-style",[115,126553,126554],{"class":125},": none;\n",[14,126556,126557],{},"②有序列表：",[20,126559],{"style":126398,"src":126560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126562,126563],{},"③自定义列表：",[20,126565],{"style":126398,"src":126566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[20,126568],{"style":126398,"src":126569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[57,126571,126573],{"id":126572},"_54-表单标签","5.4 表单标签",[14,126575,126576],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126578,126579,126580,126583],{},"（1）表单域：包含单元素的区域，",[112,126581,126582],{},"\u003Cform>","标签可以实现信息的收集和传递。",[20,126585],{"style":126398,"src":126586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126588,126589],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126591,126592],{},"表单元素提交必须有name属性",[14,126594,126595],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126597,126598],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126600,77216,126601,126604],{},[112,126602,126603],{},"\u003Cinput>","输入表单元素",[20,126606],{"style":126398,"src":126607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[20,126609],{"style":126398,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126612,126613,126614],{},"单选按钮：",[112,126615,126616],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[20,126618],{"style":126398,"src":126619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126621,126622],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[20,126624],{"style":126398,"src":126625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126627,126628,126631],{},[275,126629,126630],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126633,126634],{},"②select下拉表单元素：可以节约页面控件",[20,126636],{"style":126398,"src":126637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126639,126640,13796,126642,126645,126646,126648,126649,126651],{},[275,126641,155],{},[112,126643,126644],{},"\u003Cselect>","中至少包含一对",[112,126647,102704],{},"；在",[112,126650,102704],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126653,126654,126655,126658],{},"③",[112,126656,126657],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[20,126660],{"style":126398,"src":126661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126663,126664],{},"3行20列",[57,126666,126668,126669,102683],{"id":126667},"_55-lable标签","5.5 ",[112,126670,126671],{},"\u003Clable>",[14,126673,126674,126675,126677,126678,126680],{},"它不是表单标签，但常常与表单标签搭配使用，",[112,126676,126671],{},"标签用于绑定一个表单标签，当点击",[112,126679,126671],{},"标签内的文本",[14,126682,126683],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[20,126685],{"style":126398,"src":126686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[20,126688],{"style":126398,"src":126689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[57,126691,126693],{"id":126692},"_56-实例","5.6 实例",[20,126695],{"style":126398,"src":126696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5127,126698,126699],{},"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":22,"searchDepth":37,"depth":37,"links":126701},[126702,126703,126704,126705,126706,126708],{"id":126423,"depth":37,"text":126424},{"id":126480,"depth":37,"text":126481},{"id":126502,"depth":37,"text":126503},{"id":126572,"depth":37,"text":126573},{"id":126667,"depth":37,"text":126707},"5.5 \u003Clable>标签",{"id":126692,"depth":37,"text":126693},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126415,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126715,"title":126716,"body":126717,"description":39,"extension":40,"meta":127266,"navigation":42,"path":127267,"seo":127268,"stem":127269,"__hash__":127270},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126718,"toc":127241},[126719,126722,126726,126729,126732,126736,126739,126742,126745,126748,126751,126754,126757,126761,126764,126768,126771,126774,126777,126781,126784,126787,126790,126796,126799,126802,126805,126808,126811,126814,126817,126850,126854,126857,126860,126863,126867,126870,126873,126876,126879,126882,126886,126889,126892,126895,126899,126902,126906,126909,126913,126916,126921,126925,126928,126932,126935,126938,126941,126944,126971,126974,126978,126981,126984,126989,126992,126995,126999,127002,127007,127010,127013,127016,127020,127023,127026,127029,127033,127036,127039,127042,127046,127050,127053,127093,127096,127100,127107,127110,127114,127117,127163,127167,127170,127173,127176,127204,127208,127211,127238],[10,126720,126716],{"id":126721},"_6-css语法与文本样式",[57,126723,126725],{"id":126724},"_61-css语法规范","6.1 css语法规范",[14,126727,126728],{},"由两部分组成，选择器及一条或多条声明",[20,126730],{"style":126398,"src":126731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126733,126734],{},[275,126735,155],{},[14,126737,126738],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126740,126741],{},"②属性与属性值以“键值对”的形式出现",[14,126743,126744],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126746,126747],{},"④属性和属性值之间用英文“;”分开",[20,126749],{"style":126398,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[20,126752],{"style":126398,"src":126753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[20,126755],{"style":126398,"src":126756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[57,126758,126760],{"id":126759},"_62-css选择器","6.2 css选择器",[14,126762,126763],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[86,126765,126767],{"id":126766},"_621-标签选择器","6.2.1 标签选择器",[14,126769,126770],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126772,126773],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[20,126775],{"style":126398,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[86,126778,126780],{"id":126779},"_622-类选择器","6.2.2 类选择器",[14,126782,126783],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126785,126786],{},"②样例",[20,126788],{"style":126398,"src":126789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126791,126792,126793,126795],{},"③ ",[275,126794,126630],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126797,126798],{},"可以理解为给这个标签起了个名字，来表示；",[14,126800,126801],{},"长名称或词组可以使用横线来为选择器命名；",[14,126803,126804],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126806,126807],{},"命名要有意义；",[20,126809],{"style":126398,"src":126810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126812,126813],{},"类选择器也可以指定特殊的元素p.center{}",[14,126815,126816],{},"p.center和.center都对",[106,126818,126820],{"className":126542,"code":126819,"language":126544,"meta":22,"style":22},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[112,126821,126822,126827,126836,126846],{"__ignoreMap":22},[115,126823,126824],{"class":117,"line":118},[115,126825,126826],{"class":184},"\u002F* 类选择器指定特殊元素 *\u002F\n",[115,126828,126829,126831,126834],{"class":117,"line":37},[115,126830,14],{"class":51290},[115,126832,126833],{"class":1963},".center",[115,126835,15573],{"class":125},[115,126837,126838,126840,126842,126844],{"class":117,"line":1180},[115,126839,70516],{"class":174},[115,126841,51427],{"class":125},[115,126843,51582],{"class":174},[115,126845,1291],{"class":125},[115,126847,126848],{"class":117,"line":1195},[115,126849,1565],{"class":125},[86,126851,126853],{"id":126852},"_623-多类名使用","6.2.3 多类名使用",[14,126855,126856],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[20,126858],{"style":126398,"src":126859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126861,126862],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[86,126864,126866],{"id":126865},"_624-id选择器","6.2.4 id选择器",[14,126868,126869],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126871,126872],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[20,126874],{"style":126398,"src":126875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126877,126878],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126880,126881],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[86,126883,126885],{"id":126884},"_625-通配符选择器","6.2.5 通配符选择器",[14,126887,126888],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126890,126891],{},"* {",[14,126893,126894],{},"color=\"red\"}",[86,126896,126898],{"id":126897},"_626-总结","6.2.6 总结",[20,126900],{"style":126398,"src":126901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[57,126903,126905],{"id":126904},"_63-css字体属性","6.3 css字体属性",[14,126907,126908],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[86,126910,126912],{"id":126911},"_631-字体系列","6.3.1 字体系列",[14,126914,126915],{},"font-family: '宋体';",[14,126917,126918,126920],{},[275,126919,155],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[86,126922,126924],{"id":126923},"_632-字体大小","6.3.2 字体大小",[14,126926,126927],{},"font-size: 20px",[14,126929,126930,26474],{},[275,126931,126630],{},[14,126933,126934],{},"①px（像素）大小是网页的最常用单位",[14,126936,126937],{},"②谷歌浏览器默认为16px",[14,126939,126940],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126942,126943],{},"④可以给body指定整个页面的大小：会自动引用",[106,126945,126947],{"className":126542,"code":126946,"language":126544,"meta":22,"style":22},"body {\n  font-size: 16px;\n}\n",[112,126948,126949,126955,126967],{"__ignoreMap":22},[115,126950,126951,126953],{"class":117,"line":118},[115,126952,51790],{"class":51290},[115,126954,15573],{"class":125},[115,126956,126957,126959,126961,126963,126965],{"class":117,"line":37},[115,126958,70616],{"class":174},[115,126960,51427],{"class":125},[115,126962,726],{"class":174},[115,126964,51482],{"class":121},[115,126966,1291],{"class":125},[115,126968,126969],{"class":117,"line":1180},[115,126970,1565],{"class":125},[14,126972,126973],{},"⑤标题标签比较特殊，需要单独指定大小",[86,126975,126977],{"id":126976},"_633-字体粗细","6.3.3 字体粗细",[14,126979,126980],{},"font-weight: bold;",[14,126982,126983],{},"font-weight: 100；",[14,126985,126986,126988],{},[275,126987,155],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126990,126991],{},"font-weight= 400;",[14,126993,126994],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[86,126996,126998],{"id":126997},"_634-文字样式","6.3.4 文字样式",[14,127000,127001],{},"font-style: normal；",[14,127003,127004,26474],{},[275,127005,127006],{},"属性值",[14,127008,127009],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127011,127012],{},"②italic：浏览器会显示斜体的字体样式",[20,127014],{"style":126398,"src":127015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[86,127017,127019],{"id":127018},"_635-字体符合属性","6.3.5 字体符合属性",[20,127021],{"style":126398,"src":127022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[20,127024],{"style":126398,"src":127025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127027,127028],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127030,127031,26474],{},[275,127032,126630],{},[14,127034,127035],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127037,127038],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127040,127041],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[57,127043,127045],{"id":127044},"_64-css-test文本属性","6.4 css test文本属性",[86,127047,127049],{"id":127048},"_641-文本颜色","6.4.1 文本颜色",[14,127051,127052],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[106,127054,127056],{"className":126542,"code":127055,"language":126544,"meta":22,"style":22},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[112,127057,127058,127063,127069,127079,127084,127089],{"__ignoreMap":22},[115,127059,127060],{"class":117,"line":118},[115,127061,127062],{"class":184},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[115,127064,127065,127067],{"class":117,"line":37},[115,127066,14],{"class":51290},[115,127068,15573],{"class":125},[115,127070,127071,127073,127075,127077],{"class":117,"line":1180},[115,127072,70895],{"class":174},[115,127074,51427],{"class":125},[115,127076,57411],{"class":174},[115,127078,1291],{"class":125},[115,127080,127081],{"class":117,"line":1195},[115,127082,127083],{"class":184},"  \u002F* color: #ff0000; *\u002F\n",[115,127085,127086],{"class":117,"line":1201},[115,127087,127088],{"class":184},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[115,127090,127091],{"class":117,"line":1215},[115,127092,1565],{"class":125},[20,127094],{"style":126398,"src":127095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[86,127097,127099],{"id":127098},"_642-对齐文本","6.4.2 对齐文本",[14,127101,127102,127103,127106],{},"text-align属于用于设置元素内文本内容的 ",[275,127104,127105],{},"水平对齐"," 方式",[14,127108,127109],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[86,127111,127113],{"id":127112},"_643-装饰文本","6.4.3 装饰文本",[14,127115,127116],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[106,127118,127120],{"className":126542,"code":127119,"language":126544,"meta":22,"style":22},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[112,127121,127122,127128,127138,127142,127148,127159],{"__ignoreMap":22},[115,127123,127124,127126],{"class":117,"line":118},[115,127125,27],{"class":51290},[115,127127,15573],{"class":125},[115,127129,127130,127132,127134,127136],{"class":117,"line":37},[115,127131,70492],{"class":174},[115,127133,51427],{"class":125},[115,127135,54727],{"class":174},[115,127137,1291],{"class":125},[115,127139,127140],{"class":117,"line":1180},[115,127141,1565],{"class":125},[115,127143,127144,127146],{"class":117,"line":1195},[115,127145,14],{"class":51290},[115,127147,15573],{"class":125},[115,127149,127150,127152,127154,127157],{"class":117,"line":1201},[115,127151,70492],{"class":174},[115,127153,51427],{"class":125},[115,127155,127156],{"class":174},"underline",[115,127158,1291],{"class":125},[115,127160,127161],{"class":117,"line":1215},[115,127162,1565],{"class":125},[86,127164,127166],{"id":127165},"_644-文本缩进","6.4.4 文本缩进",[14,127168,127169],{},"实现文本的第一行首行缩进自己指定的距离",[14,127171,127172],{},"20px往右边走；-20px往左边走",[14,127174,127175],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[106,127177,127179],{"className":126542,"code":127178,"language":126544,"meta":22,"style":22},"p {\n  text-indent: 2em;\n}\n",[112,127180,127181,127187,127200],{"__ignoreMap":22},[115,127182,127183,127185],{"class":117,"line":118},[115,127184,14],{"class":51290},[115,127186,15573],{"class":125},[115,127188,127189,127192,127194,127196,127198],{"class":117,"line":37},[115,127190,127191],{"class":174},"  text-indent",[115,127193,51427],{"class":125},[115,127195,203],{"class":174},[115,127197,23554],{"class":121},[115,127199,1291],{"class":125},[115,127201,127202],{"class":117,"line":1180},[115,127203,1565],{"class":125},[86,127205,127207],{"id":127206},"_645-行间距","6.4.5 行间距",[14,127209,127210],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[106,127212,127214],{"className":126542,"code":127213,"language":126544,"meta":22,"style":22},"p {\n  line-height: 1.6;\n}\n",[112,127215,127216,127222,127234],{"__ignoreMap":22},[115,127217,127218,127220],{"class":117,"line":118},[115,127219,14],{"class":51290},[115,127221,15573],{"class":125},[115,127223,127224,127227,127229,127232],{"class":117,"line":37},[115,127225,127226],{"class":174},"  line-height",[115,127228,51427],{"class":125},[115,127230,127231],{"class":174},"1.6",[115,127233,1291],{"class":125},[115,127235,127236],{"class":117,"line":1180},[115,127237,1565],{"class":125},[5127,127239,127240],{},"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":22,"searchDepth":37,"depth":37,"links":127242},[127243,127244,127252,127259],{"id":126724,"depth":37,"text":126725},{"id":126759,"depth":37,"text":126760,"children":127245},[127246,127247,127248,127249,127250,127251],{"id":126766,"depth":1180,"text":126767},{"id":126779,"depth":1180,"text":126780},{"id":126852,"depth":1180,"text":126853},{"id":126865,"depth":1180,"text":126866},{"id":126884,"depth":1180,"text":126885},{"id":126897,"depth":1180,"text":126898},{"id":126904,"depth":37,"text":126905,"children":127253},[127254,127255,127256,127257,127258],{"id":126911,"depth":1180,"text":126912},{"id":126923,"depth":1180,"text":126924},{"id":126976,"depth":1180,"text":126977},{"id":126997,"depth":1180,"text":126998},{"id":127018,"depth":1180,"text":127019},{"id":127044,"depth":37,"text":127045,"children":127260},[127261,127262,127263,127264,127265],{"id":127048,"depth":1180,"text":127049},{"id":127098,"depth":1180,"text":127099},{"id":127112,"depth":1180,"text":127113},{"id":127165,"depth":1180,"text":127166},{"id":127206,"depth":1180,"text":127207},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126716,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127272,"title":127273,"body":127274,"description":39,"extension":40,"meta":127923,"navigation":42,"path":127924,"seo":127925,"stem":127926,"__hash__":127927},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127275,"toc":127904},[127276,127279,127283,127287,127347,127351,127361,127364,127367,127371,127396,127400,127403,127406,127409,127412,127415,127419,127422,127425,127467,127470,127496,127502,127505,127509,127513,127519,127522,127525,127528,127531,127534,127537,127582,127586,127589,127592,127596,127600,127629,127632,127637,127640,127643,127646,127649,127653,127657,127660,127662,127665,127669,127672,127676,127679,127682,127685,127689,127693,127699,127709,127712,127715,127718,127721,127724,127847,127855,127863,127901],[10,127277,127273],{"id":127278},"_7-css引入方式与选择器进阶",[57,127280,127282],{"id":127281},"_71-css引入方式","7.1 css引入方式",[86,127284,127286],{"id":127285},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[106,127288,127292],{"className":127289,"code":127290,"language":127291,"meta":22,"style":22},"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",[112,127293,127294,127302,127309,127321,127334,127339],{"__ignoreMap":22},[115,127295,127296,127298,127300],{"class":117,"line":118},[115,127297,1035],{"class":125},[115,127299,5127],{"class":51290},[115,127301,51297],{"class":125},[115,127303,127304,127307],{"class":117,"line":37},[115,127305,127306],{"class":51290},"  h1",[115,127308,15573],{"class":125},[115,127310,127311,127314,127316,127319],{"class":117,"line":1180},[115,127312,127313],{"class":174},"    color",[115,127315,51427],{"class":125},[115,127317,127318],{"class":174},"blue",[115,127320,1291],{"class":125},[115,127322,127323,127326,127328,127330,127332],{"class":117,"line":1195},[115,127324,127325],{"class":174},"    font-size",[115,127327,51427],{"class":125},[115,127329,925],{"class":174},[115,127331,51482],{"class":121},[115,127333,1291],{"class":125},[115,127335,127336],{"class":117,"line":1201},[115,127337,127338],{"class":125},"  }\n",[115,127340,127341,127343,127345],{"class":117,"line":1215},[115,127342,51775],{"class":125},[115,127344,5127],{"class":51290},[115,127346,51297],{"class":125},[14,127348,127349,26474],{},[275,127350,126630],{},[14,127352,77216,127353,127356,127357,127360],{},[112,127354,127355],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[112,127358,127359],{},"\u003Chead>","标签中",[14,127362,127363],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127365,127366],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[86,127368,127370],{"id":127369},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[106,127372,127374],{"className":127289,"code":127373,"language":127291,"meta":22,"style":22},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[112,127375,127376],{"__ignoreMap":22},[115,127377,127378,127380,127382,127384,127386,127389,127392,127394],{"class":117,"line":118},[115,127379,1035],{"class":125},[115,127381,14],{"class":51290},[115,127383,62616],{"class":1963},[115,127385,171],{"class":125},[115,127387,127388],{"class":230},"\"color: red; font-size: 16px;\"",[115,127390,127391],{"class":125},">这是一个段落\u003C\u002F",[115,127393,14],{"class":51290},[115,127395,51297],{"class":125},[14,127397,127398,26474],{},[275,127399,126630],{},[14,127401,127402],{},"①style其实就是标签的属性",[14,127404,127405],{},"②在双引号中间，写法要符合css规范",[14,127407,127408],{},"③可以控制当前的标签设置样式",[14,127410,127411],{},"④书写繁琐，简单时才用",[14,127413,127414],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[86,127416,127418],{"id":127417},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127420,127421],{},"使用最多，单独建一个css文件，然后html引用",[14,127423,127424],{},"①css文件部分： style.css",[106,127426,127428],{"className":126542,"code":127427,"language":126544,"meta":22,"style":22},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[112,127429,127430,127435,127441,127451,127463],{"__ignoreMap":22},[115,127431,127432],{"class":117,"line":118},[115,127433,127434],{"class":184},"\u002F* style.css *\u002F\n",[115,127436,127437,127439],{"class":117,"line":37},[115,127438,10],{"class":51290},[115,127440,15573],{"class":125},[115,127442,127443,127445,127447,127449],{"class":117,"line":1180},[115,127444,70895],{"class":174},[115,127446,51427],{"class":125},[115,127448,127318],{"class":174},[115,127450,1291],{"class":125},[115,127452,127453,127455,127457,127459,127461],{"class":117,"line":1195},[115,127454,70616],{"class":174},[115,127456,51427],{"class":125},[115,127458,925],{"class":174},[115,127460,51482],{"class":121},[115,127462,1291],{"class":125},[115,127464,127465],{"class":117,"line":1201},[115,127466,1565],{"class":125},[14,127468,127469],{},"②html部分",[106,127471,127473],{"className":127289,"code":127472,"language":127291,"meta":22,"style":22},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[112,127474,127475],{"__ignoreMap":22},[115,127476,127477,127479,127481,127483,127485,127487,127489,127491,127494],{"class":117,"line":118},[115,127478,1035],{"class":125},[115,127480,68995],{"class":51290},[115,127482,68998],{"class":1963},[115,127484,171],{"class":125},[115,127486,69003],{"class":230},[115,127488,61047],{"class":1963},[115,127490,171],{"class":125},[115,127492,127493],{"class":230},"\"style.css\"",[115,127495,51297],{"class":125},[14,127497,127498,127501],{},[112,127499,127500],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127503,127504],{},"ctrl+0回到页面原来大小",[57,127506,127508],{"id":127507},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[86,127510,127512],{"id":127511},"_721-快速生成html","7.2.1 快速生成html",[14,127514,127515,127516],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[112,127517,127518],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127520,127521],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127523,127524],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127526,127527],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127529,127530],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127532,127533],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127535,127536],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[106,127538,127540],{"className":127289,"code":127539,"language":127291,"meta":22,"style":22},"\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",[112,127541,127542,127547,127552,127557,127562,127567,127572,127577],{"__ignoreMap":22},[115,127543,127544],{"class":117,"line":118},[115,127545,127546],{"class":184},"\u003C!-- Emmet 语法示例 -->\n",[115,127548,127549],{"class":117,"line":37},[115,127550,127551],{"class":184},"\u003C!-- div*3        → 生成3个div -->\n",[115,127553,127554],{"class":117,"line":1180},[115,127555,127556],{"class":184},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[115,127558,127559],{"class":117,"line":1195},[115,127560,127561],{"class":184},"\u003C!-- div+p        → 兄弟div和p -->\n",[115,127563,127564],{"class":117,"line":1201},[115,127565,127566],{"class":184},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[115,127568,127569],{"class":117,"line":1215},[115,127570,127571],{"class":184},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[115,127573,127574],{"class":117,"line":1221},[115,127575,127576],{"class":184},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[115,127578,127579],{"class":117,"line":1312},[115,127580,127581],{"class":184},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[86,127583,127585],{"id":127584},"_722-快速生成css","7.2.2 快速生成css",[14,127587,127588],{},"简写开头",[14,127590,127591],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[57,127593,127595],{"id":127594},"_73-css复合选择器","7.3 css复合选择器",[86,127597,127599],{"id":127598},"_731-后代选择器","7.3.1 后代选择器",[106,127601,127603],{"className":126542,"code":127602,"language":126544,"meta":22,"style":22},".parent .child {\n  color: blue;\n}\n",[112,127604,127605,127615,127625],{"__ignoreMap":22},[115,127606,127607,127610,127613],{"class":117,"line":118},[115,127608,127609],{"class":1963},".parent",[115,127611,127612],{"class":1963}," .child",[115,127614,15573],{"class":125},[115,127616,127617,127619,127621,127623],{"class":117,"line":37},[115,127618,70895],{"class":174},[115,127620,51427],{"class":125},[115,127622,127318],{"class":174},[115,127624,1291],{"class":125},[115,127626,127627],{"class":117,"line":1180},[115,127628,1565],{"class":125},[14,127630,127631],{},"元素1 元素2 {样式声明}",[14,127633,127634],{},[275,127635,127636],{},"注意点:",[14,127638,127639],{},"①元素1和元素2中间用空格隔开",[14,127641,127642],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127644,127645],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127647,127648],{},"④元素1和元素2可以是任意基础选择器",[86,127650,127652],{"id":127651},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127654,127655],{},[275,127656,127636],{},[14,127658,127659],{},"①元素1和元素2中间用大于号隔开",[14,127661,127642],{},[14,127663,127664],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[86,127666,127668],{"id":127667},"_733-并集选择器","7.3.3 并集选择器",[14,127670,127671],{},"元素1，元素2 {样式声明}",[14,127673,127674],{},[275,127675,127636],{},[14,127677,127678],{},"①元素1和元素2中间用逗号隔开",[14,127680,127681],{},"②逗号可以理解为和的意思",[14,127683,127684],{},"③并集选择器通常用于集体声明",[86,127686,127688],{"id":127687},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127690,127691],{},[275,127692,127636],{},[14,127694,127695,127696,127698],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68995,127697],{},"－:visited－:hover－:active。",[14,127700,127701,127702,127705,127706,25741],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127703,127704],"hover",{}," 、 ",[127707,127708],"first-child",{},[14,127710,127711],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127713,127714],{},"link对没访问的进行设置",[14,127716,127717],{},"vistied对已访问的进行改变",[14,127719,127720],{},"hover鼠标经过就会变",[14,127722,127723],{},"active常按(点)就会变",[106,127725,127727],{"className":126542,"code":127726,"language":126544,"meta":22,"style":22},"\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",[112,127728,127729,127734,127743,127753,127763,127767,127776,127787,127791,127799,127809,127819,127823,127832,127843],{"__ignoreMap":22},[115,127730,127731],{"class":117,"line":118},[115,127732,127733],{"class":184},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[115,127735,127736,127738,127741],{"class":117,"line":37},[115,127737,27],{"class":51290},[115,127739,127740],{"class":1963},":link",[115,127742,15573],{"class":125},[115,127744,127745,127747,127749,127751],{"class":117,"line":1180},[115,127746,70895],{"class":174},[115,127748,51427],{"class":125},[115,127750,62359],{"class":174},[115,127752,1291],{"class":125},[115,127754,127755,127757,127759,127761],{"class":117,"line":1195},[115,127756,70492],{"class":174},[115,127758,51427],{"class":125},[115,127760,54727],{"class":174},[115,127762,1291],{"class":125},[115,127764,127765],{"class":117,"line":1201},[115,127766,1565],{"class":125},[115,127768,127769,127771,127774],{"class":117,"line":1215},[115,127770,27],{"class":51290},[115,127772,127773],{"class":1963},":visited",[115,127775,15573],{"class":125},[115,127777,127778,127780,127782,127785],{"class":117,"line":1221},[115,127779,70895],{"class":174},[115,127781,51427],{"class":125},[115,127783,127784],{"class":174},"purple",[115,127786,1291],{"class":125},[115,127788,127789],{"class":117,"line":1312},[115,127790,1565],{"class":125},[115,127792,127793,127795,127797],{"class":117,"line":1318},[115,127794,27],{"class":51290},[115,127796,60930],{"class":1963},[115,127798,15573],{"class":125},[115,127800,127801,127803,127805,127807],{"class":117,"line":1330},[115,127802,70895],{"class":174},[115,127804,51427],{"class":125},[115,127806,54879],{"class":174},[115,127808,1291],{"class":125},[115,127810,127811,127813,127815,127817],{"class":117,"line":1612},[115,127812,70492],{"class":174},[115,127814,51427],{"class":125},[115,127816,127156],{"class":174},[115,127818,1291],{"class":125},[115,127820,127821],{"class":117,"line":1617},[115,127822,1565],{"class":125},[115,127824,127825,127827,127830],{"class":117,"line":1623},[115,127826,27],{"class":51290},[115,127828,127829],{"class":1963},":active",[115,127831,15573],{"class":125},[115,127833,127834,127836,127838,127841],{"class":117,"line":1628},[115,127835,70895],{"class":174},[115,127837,51427],{"class":125},[115,127839,127840],{"class":174},"green",[115,127842,1291],{"class":125},[115,127844,127845],{"class":117,"line":1642},[115,127846,1565],{"class":125},[86,127848,127850,127851,127854],{"id":127849},"_735-伪类选择器","7.3.5 ",[127852,127853],"focus",{},"伪类选择器",[14,127856,127857,127859,127860,127862],{},[127852,127858],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[112,127861,126603],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[106,127864,127866],{"className":126542,"code":127865,"language":126544,"meta":22,"style":22},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[112,127867,127868,127876,127887,127897],{"__ignoreMap":22},[115,127869,127870,127872,127874],{"class":117,"line":118},[115,127871,53811],{"class":51290},[115,127873,61890],{"class":1963},[115,127875,15573],{"class":125},[115,127877,127878,127881,127883,127885],{"class":117,"line":37},[115,127879,127880],{"class":174},"  border-color",[115,127882,51427],{"class":125},[115,127884,54879],{"class":174},[115,127886,1291],{"class":125},[115,127888,127889,127891,127893,127895],{"class":117,"line":1180},[115,127890,70788],{"class":174},[115,127892,51427],{"class":125},[115,127894,54727],{"class":174},[115,127896,1291],{"class":125},[115,127898,127899],{"class":117,"line":1195},[115,127900,1565],{"class":125},[5127,127902,127903],{},"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":22,"searchDepth":37,"depth":37,"links":127905},[127906,127911,127915],{"id":127281,"depth":37,"text":127282,"children":127907},[127908,127909,127910],{"id":127285,"depth":1180,"text":127286},{"id":127369,"depth":1180,"text":127370},{"id":127417,"depth":1180,"text":127418},{"id":127507,"depth":37,"text":127508,"children":127912},[127913,127914],{"id":127511,"depth":1180,"text":127512},{"id":127584,"depth":1180,"text":127585},{"id":127594,"depth":37,"text":127595,"children":127916},[127917,127918,127919,127920,127921],{"id":127598,"depth":1180,"text":127599},{"id":127651,"depth":1180,"text":127652},{"id":127667,"depth":1180,"text":127668},{"id":127687,"depth":1180,"text":127688},{"id":127849,"depth":1180,"text":127922},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127273,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127929,"title":127930,"body":127931,"description":39,"extension":40,"meta":129854,"navigation":42,"path":129855,"seo":129856,"stem":129857,"__hash__":129858},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127932,"toc":129828},[127933,127936,127940,127949,127953,127979,127984,127987,127990,127993,127996,128000,128003,128013,128021,128025,128060,128065,128068,128071,128074,128077,128081,128084,128093,128097,128110,128115,128118,128121,128124,128128,128131,128135,128138,128193,128196,128227,128230,128284,128288,128291,128457,128580,128583,128586,128589,128592,128596,128599,128603,128606,128609,128613,128616,128647,128674,128702,128705,128709,128735,128778,128782,128876,128879,128906,128909,128912,128915,128918,128921,128924,128927,128930,128933,128937,128994,129021,129025,129073,129077,129118,129120,129123,129126,129129,129132,129136,129228,129231,129234,129237,129241,129364,129565,129569,129573,129576,129579,129582,129586,129589,129592,129617,129620,129623,129626,129629,129632,129636,129644,129706,129709,129767,129770,129773,129776,129779,129782,129785,129788,129825],[10,127934,127930],{"id":127935},"_8-css显示模式与背景特性",[57,127937,127939],{"id":127938},"_81-css元素显示模式","8.1 css元素显示模式",[14,127941,127942,127943,127945,127946,127948],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[112,127944,126153],{},"自己占一行，比如一行可以放多个",[112,127947,126156],{},"，HTML 元素一般分为块元素和行内元素两种类型",[86,127950,127952],{"id":127951},"_811-块元素","8.1.1 块元素",[14,127954,127955,127956,127958,127959,338,127962,338,127964,338,127966,338,127969,338,127972,127975,127976,127978],{},"常见的块元素有",[112,127957,126057],{},"~",[112,127960,127961],{},"\u003Ch6>",[112,127963,126083],{},[112,127965,126153],{},[112,127967,127968],{},"\u003Cul>",[112,127970,127971],{},"\u003Col>",[112,127973,127974],{},"\u003Cli>","等，其中 ",[112,127977,126153],{}," 标签是最典型的块元素",[14,127980,127981],{},[275,127982,127983],{},"块级元素的特点：",[14,127985,127986],{},"① 比较霸道，自己独占一行。",[14,127988,127989],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127991,127992],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127994,127995],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127997,127998],{},[275,127999,155],{},[14,128001,128002],{},"①文字类的元素内不能使用块级元素",[14,128004,77239,128005,128007,128008,128010,128011],{},[112,128006,126083],{}," 标签主要用于存放文字，因此 ",[112,128009,126083],{}," 里面不能放块级元素，特别是不能放",[112,128012,126153],{},[14,128014,128015,128016,127958,128018,128020],{},"⑥同理， ",[112,128017,126057],{},[112,128019,127961],{},"等都是文字类块级标签，里面也不能放其他块级元素",[86,128022,128024],{"id":128023},"_812-行内元素","8.1.2 行内元素",[14,128026,128027,128028,338,128030,338,128033,338,128036,338,128039,338,128042,338,128045,338,128048,338,128051,338,128054,128056,128057,128059],{},"常见的行内元素有 ",[112,128029,126315],{},[112,128031,128032],{},"\u003Cstrong>",[112,128034,128035],{},"\u003Cb>",[112,128037,128038],{},"\u003Cem>",[112,128040,128041],{},"\u003Ci>",[112,128043,128044],{},"\u003Cdel>",[112,128046,128047],{},"\u003Cs>",[112,128049,128050],{},"\u003Cins>",[112,128052,128053],{},"\u003Cu>",[112,128055,126156],{}," 等，其中 ",[112,128058,126156],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128061,128062],{},[275,128063,128064],{},"特点：",[14,128066,128067],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128069,128070],{},"② 高、宽直接设置是无效的。",[14,128072,128073],{},"③ 默认宽度就是它本身内容的宽度。",[14,128075,128076],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128078,128079],{},[275,128080,155],{},[14,128082,128083],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128085,128086,128087,128089,128090,128092],{},"②特殊情况链接 ",[112,128088,126315],{}," 里面可以放块级元素，但是给 ",[112,128091,126315],{}," 转换一下块级模式最安全",[86,128094,128096],{"id":128095},"_813-行内块元素","8.1.3 行内块元素",[14,128098,128099,128100,338,128103,338,128106,128109],{},"在行内元素中有几个特殊的标签 —— ",[112,128101,128102],{},"\u003Cimg \u002F>",[112,128104,128105],{},"\u003Cinput \u002F>",[112,128107,128108],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128111,128112],{},[275,128113,128114],{},"行内块元素的特点：",[14,128116,128117],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128119,128120],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128122,128123],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[86,128125,128127],{"id":128126},"_814-总结","8.1.4 总结",[20,128129],{"style":126398,"src":128130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[86,128132,128134],{"id":128133},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128136,128137],{},"①转换为块元素：display:block;",[106,128139,128141],{"className":126542,"code":128140,"language":126544,"meta":22,"style":22},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[112,128142,128143,128148,128154,128165,128177,128189],{"__ignoreMap":22},[115,128144,128145],{"class":117,"line":118},[115,128146,128147],{"class":184},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[115,128149,128150,128152],{"class":117,"line":37},[115,128151,27],{"class":51290},[115,128153,15573],{"class":125},[115,128155,128156,128159,128161,128163],{"class":117,"line":1180},[115,128157,128158],{"class":174},"  display",[115,128160,51427],{"class":125},[115,128162,60859],{"class":174},[115,128164,1291],{"class":125},[115,128166,128167,128169,128171,128173,128175],{"class":117,"line":1195},[115,128168,70558],{"class":174},[115,128170,51427],{"class":125},[115,128172,436],{"class":174},[115,128174,51482],{"class":121},[115,128176,1291],{"class":125},[115,128178,128179,128181,128183,128185,128187],{"class":117,"line":1201},[115,128180,70778],{"class":174},[115,128182,51427],{"class":125},[115,128184,526],{"class":174},[115,128186,51482],{"class":121},[115,128188,1291],{"class":125},[115,128190,128191],{"class":117,"line":1215},[115,128192,1565],{"class":125},[14,128194,128195],{},"②转换为行内元素：display:inline;",[106,128197,128199],{"className":126542,"code":128198,"language":126544,"meta":22,"style":22},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[112,128200,128201,128206,128212,128223],{"__ignoreMap":22},[115,128202,128203],{"class":117,"line":118},[115,128204,128205],{"class":184},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[115,128207,128208,128210],{"class":117,"line":37},[115,128209,51601],{"class":51290},[115,128211,15573],{"class":125},[115,128213,128214,128216,128218,128221],{"class":117,"line":1180},[115,128215,128158],{"class":174},[115,128217,51427],{"class":125},[115,128219,128220],{"class":174},"inline",[115,128222,1291],{"class":125},[115,128224,128225],{"class":117,"line":1195},[115,128226,1565],{"class":125},[14,128228,128229],{},"③转换为行内块：display:inline-block;",[106,128231,128233],{"className":126542,"code":128232,"language":126544,"meta":22,"style":22},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[112,128234,128235,128240,128246,128256,128268,128280],{"__ignoreMap":22},[115,128236,128237],{"class":117,"line":118},[115,128238,128239],{"class":184},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[115,128241,128242,128244],{"class":117,"line":37},[115,128243,115],{"class":51290},[115,128245,15573],{"class":125},[115,128247,128248,128250,128252,128254],{"class":117,"line":1180},[115,128249,128158],{"class":174},[115,128251,51427],{"class":125},[115,128253,72373],{"class":174},[115,128255,1291],{"class":125},[115,128257,128258,128260,128262,128264,128266],{"class":117,"line":1195},[115,128259,70558],{"class":174},[115,128261,51427],{"class":125},[115,128263,737],{"class":174},[115,128265,51482],{"class":121},[115,128267,1291],{"class":125},[115,128269,128270,128272,128274,128276,128278],{"class":117,"line":1201},[115,128271,70778],{"class":174},[115,128273,51427],{"class":125},[115,128275,1076],{"class":174},[115,128277,51482],{"class":121},[115,128279,1291],{"class":125},[115,128281,128282],{"class":117,"line":1215},[115,128283,1565],{"class":125},[86,128285,128287],{"id":128286},"_816-小米侧边栏","8.1.6 小米侧边栏",[20,128289],{"style":126398,"src":128290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[106,128292,128294],{"className":127289,"code":128293,"language":127291,"meta":22,"style":22},"\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",[112,128295,128296,128301,128316,128335,128354,128373,128392,128411,128430,128449],{"__ignoreMap":22},[115,128297,128298],{"class":117,"line":118},[115,128299,128300],{"class":184},"\u003C!-- 小米侧边栏案例 -->\n",[115,128302,128303,128305,128307,128309,128311,128314],{"class":117,"line":37},[115,128304,1035],{"class":125},[115,128306,51601],{"class":51290},[115,128308,53476],{"class":1963},[115,128310,171],{"class":125},[115,128312,128313],{"class":230},"\"sidebar\"",[115,128315,51297],{"class":125},[115,128317,128318,128320,128322,128324,128326,128328,128331,128333],{"class":117,"line":1180},[115,128319,52134],{"class":125},[115,128321,27],{"class":51290},[115,128323,61047],{"class":1963},[115,128325,171],{"class":125},[115,128327,61052],{"class":230},[115,128329,128330],{"class":125},">手机 电话卡\u003C\u002F",[115,128332,27],{"class":51290},[115,128334,51297],{"class":125},[115,128336,128337,128339,128341,128343,128345,128347,128350,128352],{"class":117,"line":1195},[115,128338,52134],{"class":125},[115,128340,27],{"class":51290},[115,128342,61047],{"class":1963},[115,128344,171],{"class":125},[115,128346,61052],{"class":230},[115,128348,128349],{"class":125},">电视 盒子\u003C\u002F",[115,128351,27],{"class":51290},[115,128353,51297],{"class":125},[115,128355,128356,128358,128360,128362,128364,128366,128369,128371],{"class":117,"line":1201},[115,128357,52134],{"class":125},[115,128359,27],{"class":51290},[115,128361,61047],{"class":1963},[115,128363,171],{"class":125},[115,128365,61052],{"class":230},[115,128367,128368],{"class":125},">笔记本 平板\u003C\u002F",[115,128370,27],{"class":51290},[115,128372,51297],{"class":125},[115,128374,128375,128377,128379,128381,128383,128385,128388,128390],{"class":117,"line":1215},[115,128376,52134],{"class":125},[115,128378,27],{"class":51290},[115,128380,61047],{"class":1963},[115,128382,171],{"class":125},[115,128384,61052],{"class":230},[115,128386,128387],{"class":125},">出行 穿戴\u003C\u002F",[115,128389,27],{"class":51290},[115,128391,51297],{"class":125},[115,128393,128394,128396,128398,128400,128402,128404,128407,128409],{"class":117,"line":1221},[115,128395,52134],{"class":125},[115,128397,27],{"class":51290},[115,128399,61047],{"class":1963},[115,128401,171],{"class":125},[115,128403,61052],{"class":230},[115,128405,128406],{"class":125},">智能 路由器\u003C\u002F",[115,128408,27],{"class":51290},[115,128410,51297],{"class":125},[115,128412,128413,128415,128417,128419,128421,128423,128426,128428],{"class":117,"line":1312},[115,128414,52134],{"class":125},[115,128416,27],{"class":51290},[115,128418,61047],{"class":1963},[115,128420,171],{"class":125},[115,128422,61052],{"class":230},[115,128424,128425],{"class":125},">健康 儿童\u003C\u002F",[115,128427,27],{"class":51290},[115,128429,51297],{"class":125},[115,128431,128432,128434,128436,128438,128440,128442,128445,128447],{"class":117,"line":1318},[115,128433,52134],{"class":125},[115,128435,27],{"class":51290},[115,128437,61047],{"class":1963},[115,128439,171],{"class":125},[115,128441,61052],{"class":230},[115,128443,128444],{"class":125},">耳机 音响\u003C\u002F",[115,128446,27],{"class":51290},[115,128448,51297],{"class":125},[115,128450,128451,128453,128455],{"class":117,"line":1330},[115,128452,51775],{"class":125},[115,128454,51601],{"class":51290},[115,128456,51297],{"class":125},[106,128458,128460],{"className":126542,"code":128459,"language":126544,"meta":22,"style":22},".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",[112,128461,128462,128471,128481,128494,128506,128518,128530,128540,128551,128555,128565,128576],{"__ignoreMap":22},[115,128463,128464,128467,128469],{"class":117,"line":118},[115,128465,128466],{"class":1963},".sidebar",[115,128468,1399],{"class":51290},[115,128470,15573],{"class":125},[115,128472,128473,128475,128477,128479],{"class":117,"line":37},[115,128474,128158],{"class":174},[115,128476,51427],{"class":125},[115,128478,60859],{"class":174},[115,128480,1291],{"class":125},[115,128482,128483,128485,128487,128490,128492],{"class":117,"line":1180},[115,128484,70558],{"class":174},[115,128486,51427],{"class":125},[115,128488,128489],{"class":174},"234",[115,128491,51482],{"class":121},[115,128493,1291],{"class":125},[115,128495,128496,128498,128500,128502,128504],{"class":117,"line":1195},[115,128497,70778],{"class":174},[115,128499,51427],{"class":125},[115,128501,577],{"class":174},[115,128503,51482],{"class":121},[115,128505,1291],{"class":125},[115,128507,128508,128510,128512,128514,128516],{"class":117,"line":1201},[115,128509,127226],{"class":174},[115,128511,51427],{"class":125},[115,128513,577],{"class":174},[115,128515,51482],{"class":121},[115,128517,1291],{"class":125},[115,128519,128520,128522,128524,128526,128528],{"class":117,"line":1215},[115,128521,70813],{"class":174},[115,128523,51427],{"class":125},[115,128525,1076],{"class":174},[115,128527,51482],{"class":121},[115,128529,1291],{"class":125},[115,128531,128532,128534,128536,128538],{"class":117,"line":1221},[115,128533,70895],{"class":174},[115,128535,51427],{"class":125},[115,128537,60832],{"class":174},[115,128539,1291],{"class":125},[115,128541,128542,128544,128546,128549],{"class":117,"line":1312},[115,128543,70868],{"class":174},[115,128545,51427],{"class":125},[115,128547,128548],{"class":174},"#55585a",[115,128550,1291],{"class":125},[115,128552,128553],{"class":117,"line":1318},[115,128554,1565],{"class":125},[115,128556,128557,128559,128561,128563],{"class":117,"line":1330},[115,128558,128466],{"class":1963},[115,128560,1399],{"class":51290},[115,128562,60930],{"class":1963},[115,128564,15573],{"class":125},[115,128566,128567,128569,128571,128574],{"class":117,"line":1612},[115,128568,70868],{"class":174},[115,128570,51427],{"class":125},[115,128572,128573],{"class":174},"#ff6700",[115,128575,1291],{"class":125},[115,128577,128578],{"class":117,"line":1617},[115,128579,1565],{"class":125},[20,128581],{"style":126398,"src":128582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128584,128585],{},"行高=盒子高度：实现文字的垂直居中",[14,128587,128588],{},"原理讲解：",[20,128590],{"style":126398,"src":128591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[57,128593,128595],{"id":128594},"_82-css背景","8.2 css背景",[14,128597,128598],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[86,128600,128602],{"id":128601},"_821-背景颜色","8.2.1 背景颜色",[14,128604,128605],{},"background-color:颜色值;",[14,128607,128608],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[86,128610,128612],{"id":128611},"_822-背景图片","8.2.2 背景图片",[14,128614,128615],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[106,128617,128619],{"className":126542,"code":128618,"language":126544,"meta":22,"style":22},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[112,128620,128621,128627,128643],{"__ignoreMap":22},[115,128622,128623,128625],{"class":117,"line":118},[115,128624,51601],{"class":51290},[115,128626,15573],{"class":125},[115,128628,128629,128632,128634,128636,128638,128641],{"class":117,"line":37},[115,128630,128631],{"class":174},"  background-image",[115,128633,51427],{"class":125},[115,128635,61716],{"class":174},[115,128637,126],{"class":125},[115,128639,128640],{"class":5217},"images\u002Fbg.png",[115,128642,2719],{"class":125},[115,128644,128645],{"class":117,"line":1180},[115,128646,1565],{"class":125},[263,128648,128649,128658],{},[266,128650,128651],{},[269,128652,128653,128656],{},[272,128654,128655],{"align":23737},"参数值",[272,128657,102686],{"align":23737},[310,128659,128660,128667],{},[269,128661,128662,128664],{},[315,128663,54727],{"align":23737},[315,128665,128666],{"align":23737},"无背景图（默认的）",[269,128668,128669,128671],{},[315,128670,61716],{"align":23737},[315,128672,128673],{"align":23737},"使用绝对或相对地址指定背景图像",[106,128675,128676],{"className":126542,"code":128618,"language":126544,"meta":22,"style":22},[112,128677,128678,128684,128698],{"__ignoreMap":22},[115,128679,128680,128682],{"class":117,"line":118},[115,128681,51601],{"class":51290},[115,128683,15573],{"class":125},[115,128685,128686,128688,128690,128692,128694,128696],{"class":117,"line":37},[115,128687,128631],{"class":174},[115,128689,51427],{"class":125},[115,128691,61716],{"class":174},[115,128693,126],{"class":125},[115,128695,128640],{"class":5217},[115,128697,2719],{"class":125},[115,128699,128700],{"class":117,"line":1180},[115,128701,1565],{"class":125},[14,128703,128704],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[86,128706,128708],{"id":128707},"_823-背景平铺","8.2.3 背景平铺",[106,128710,128712],{"className":126542,"code":128711,"language":126544,"meta":22,"style":22},"div {\n  background-repeat: no-repeat;\n}\n",[112,128713,128714,128720,128731],{"__ignoreMap":22},[115,128715,128716,128718],{"class":117,"line":118},[115,128717,51601],{"class":51290},[115,128719,15573],{"class":125},[115,128721,128722,128725,128727,128729],{"class":117,"line":37},[115,128723,128724],{"class":174},"  background-repeat",[115,128726,51427],{"class":125},[115,128728,61726],{"class":174},[115,128730,1291],{"class":125},[115,128732,128733],{"class":117,"line":1180},[115,128734,1565],{"class":125},[263,128736,128737,128745],{},[266,128738,128739],{},[269,128740,128741,128743],{},[272,128742,128655],{"align":23737},[272,128744,102686],{"align":23737},[310,128746,128747,128755,128762,128770],{},[269,128748,128749,128752],{},[315,128750,128751],{"align":23737},"repeat",[315,128753,128754],{"align":23737},"背景图像在纵向和横向上平铺（默认的）",[269,128756,128757,128759],{},[315,128758,61726],{"align":23737},[315,128760,128761],{"align":23737},"背景图像不平铺",[269,128763,128764,128767],{},[315,128765,128766],{"align":23737},"repeat-x",[315,128768,128769],{"align":23737},"背景图像在横向上平铺",[269,128771,128772,128775],{},[315,128773,128774],{"align":23737},"repeat-y",[315,128776,128777],{"align":23737},"背景图像在纵向平铺",[86,128779,128781],{"id":128780},"_824-背景图片位置","8.2.4 背景图片位置",[106,128783,128785],{"className":126542,"code":128784,"language":126544,"meta":22,"style":22},"\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",[112,128786,128787,128792,128798,128812,128816,128821,128827,128843,128847,128852,128858,128872],{"__ignoreMap":22},[115,128788,128789],{"class":117,"line":118},[115,128790,128791],{"class":184},"\u002F* 方位名词 *\u002F\n",[115,128793,128794,128796],{"class":117,"line":37},[115,128795,51601],{"class":51290},[115,128797,15573],{"class":125},[115,128799,128800,128803,128805,128807,128810],{"class":117,"line":1180},[115,128801,128802],{"class":174},"  background-position",[115,128804,51427],{"class":125},[115,128806,51582],{"class":174},[115,128808,128809],{"class":174}," top",[115,128811,1291],{"class":125},[115,128813,128814],{"class":117,"line":1195},[115,128815,1565],{"class":125},[115,128817,128818],{"class":117,"line":1201},[115,128819,128820],{"class":184},"\u002F* 精确单位 *\u002F\n",[115,128822,128823,128825],{"class":117,"line":1215},[115,128824,51601],{"class":51290},[115,128826,15573],{"class":125},[115,128828,128829,128831,128833,128835,128837,128839,128841],{"class":117,"line":1221},[115,128830,128802],{"class":174},[115,128832,51427],{"class":125},[115,128834,825],{"class":174},[115,128836,51482],{"class":121},[115,128838,57494],{"class":174},[115,128840,51482],{"class":121},[115,128842,1291],{"class":125},[115,128844,128845],{"class":117,"line":1312},[115,128846,1565],{"class":125},[115,128848,128849],{"class":117,"line":1318},[115,128850,128851],{"class":184},"\u002F* 混合单位 *\u002F\n",[115,128853,128854,128856],{"class":117,"line":1330},[115,128855,51601],{"class":51290},[115,128857,15573],{"class":125},[115,128859,128860,128862,128864,128866,128868,128870],{"class":117,"line":1612},[115,128861,128802],{"class":174},[115,128863,51427],{"class":125},[115,128865,825],{"class":174},[115,128867,51482],{"class":121},[115,128869,17145],{"class":174},[115,128871,1291],{"class":125},[115,128873,128874],{"class":117,"line":1617},[115,128875,1565],{"class":125},[14,128877,128878],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[263,128880,128881,128889],{},[266,128882,128883],{},[269,128884,128885,128887],{},[272,128886,128655],{"align":23737},[272,128888,25870],{"align":23737},[310,128890,128891,128898],{},[269,128892,128893,128895],{},[315,128894,51958],{"align":23737},[315,128896,128897],{"align":23737},"百分数|由浮点数和单位标识符组成的长度值",[269,128899,128900,128903],{},[315,128901,128902],{"align":23737},"position",[315,128904,128905],{"align":23737},"top|center|bottom|left|center|right 方位名词",[14,128907,128908],{},"其他说明：",[14,128910,128911],{},"①参数是方位名词",[14,128913,128914],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128916,128917],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128919,128920],{},"②参数是精确单位",[14,128922,128923],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128925,128926],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128928,128929],{},"③参数是混合单位",[14,128931,128932],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[86,128934,128936],{"id":128935},"_825-背景图片固定","8.2.5 背景图片固定",[106,128938,128940],{"className":126542,"code":128939,"language":126544,"meta":22,"style":22},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[112,128941,128942,128947,128953,128965,128969,128974,128980,128990],{"__ignoreMap":22},[115,128943,128944],{"class":117,"line":118},[115,128945,128946],{"class":184},"\u002F* 背景滚动（默认） *\u002F\n",[115,128948,128949,128951],{"class":117,"line":37},[115,128950,51601],{"class":51290},[115,128952,15573],{"class":125},[115,128954,128955,128958,128960,128963],{"class":117,"line":1180},[115,128956,128957],{"class":174},"  background-attachment",[115,128959,51427],{"class":125},[115,128961,128962],{"class":174},"scroll",[115,128964,1291],{"class":125},[115,128966,128967],{"class":117,"line":1195},[115,128968,1565],{"class":125},[115,128970,128971],{"class":117,"line":1201},[115,128972,128973],{"class":184},"\u002F* 背景固定 *\u002F\n",[115,128975,128976,128978],{"class":117,"line":1215},[115,128977,51601],{"class":51290},[115,128979,15573],{"class":125},[115,128981,128982,128984,128986,128988],{"class":117,"line":1221},[115,128983,128957],{"class":174},[115,128985,51427],{"class":125},[115,128987,86223],{"class":174},[115,128989,1291],{"class":125},[115,128991,128992],{"class":117,"line":1312},[115,128993,1565],{"class":125},[263,128995,128996,129005],{},[266,128997,128998],{},[269,128999,129000,129003],{},[272,129001,129002],{"align":23737},"参数",[272,129004,102686],{"align":23737},[310,129006,129007,129014],{},[269,129008,129009,129011],{},[315,129010,128962],{"align":23737},[315,129012,129013],{"align":23737},"背景图像是随对象内容滚动",[269,129015,129016,129018],{},[315,129017,86223],{"align":23737},[315,129019,129020],{"align":23737},"背景图像固定",[86,129022,129024],{"id":129023},"_826-背景样式合写","8.2.6 背景样式合写",[106,129026,129028],{"className":126542,"code":129027,"language":126544,"meta":22,"style":22},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[112,129029,129030,129035,129041,129069],{"__ignoreMap":22},[115,129031,129032],{"class":117,"line":118},[115,129033,129034],{"class":184},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[115,129036,129037,129039],{"class":117,"line":37},[115,129038,51601],{"class":51290},[115,129040,15573],{"class":125},[115,129042,129043,129045,129047,129049,129052,129054,129056,129058,129060,129063,129065,129067],{"class":117,"line":1180},[115,129044,70601],{"class":174},[115,129046,51427],{"class":125},[115,129048,60832],{"class":174},[115,129050,129051],{"class":174}," url",[115,129053,126],{"class":125},[115,129055,128640],{"class":5217},[115,129057,13715],{"class":125},[115,129059,61726],{"class":174},[115,129061,129062],{"class":174}," fixed",[115,129064,17145],{"class":174},[115,129066,128809],{"class":174},[115,129068,1291],{"class":125},[115,129070,129071],{"class":117,"line":1195},[115,129072,1565],{"class":125},[86,129074,129076],{"id":129075},"_827-背景色半透明","8.2.7 背景色半透明",[106,129078,129080],{"className":126542,"code":129079,"language":126544,"meta":22,"style":22},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[112,129081,129082,129088,129114],{"__ignoreMap":22},[115,129083,129084,129086],{"class":117,"line":118},[115,129085,51601],{"class":51290},[115,129087,15573],{"class":125},[115,129089,129090,129092,129094,129096,129098,129100,129102,129104,129106,129108,129110,129112],{"class":117,"line":37},[115,129091,70601],{"class":174},[115,129093,51427],{"class":125},[115,129095,55100],{"class":174},[115,129097,126],{"class":125},[115,129099,317],{"class":174},[115,129101,12436],{"class":125},[115,129103,317],{"class":174},[115,129105,12436],{"class":125},[115,129107,317],{"class":174},[115,129109,12436],{"class":125},[115,129111,100511],{"class":174},[115,129113,2719],{"class":125},[115,129115,129116],{"class":117,"line":1180},[115,129117,1565],{"class":125},[14,129119,99386],{},[14,129121,129122],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129124,129125],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129127,129128],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129130,129131],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[86,129133,129135],{"id":129134},"_828-总结","8.2.8 总结",[263,129137,129138,129149],{},[266,129139,129140],{},[269,129141,129142,129145,129147],{},[272,129143,129144],{"align":23737},"属性",[272,129146,102686],{"align":23737},[272,129148,278],{"align":23737},[310,129150,129151,129162,129173,129184,129195,129206,129217],{},[269,129152,129153,129156,129159],{},[315,129154,129155],{"align":23737},"background-color",[315,129157,129158],{"align":23737},"背景颜色",[315,129160,129161],{"align":23737},"预定义的颜色值\u002F十六进制\u002FRGB代码",[269,129163,129164,129167,129170],{},[315,129165,129166],{"align":23737},"background-image",[315,129168,129169],{"align":23737},"背景图片",[315,129171,129172],{"align":23737},"url(图片路径)",[269,129174,129175,129178,129181],{},[315,129176,129177],{"align":23737},"background-repeat",[315,129179,129180],{"align":23737},"是否平铺",[315,129182,129183],{"align":23737},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[269,129185,129186,129189,129192],{},[315,129187,129188],{"align":23737},"background-position",[315,129190,129191],{"align":23737},"背景位置",[315,129193,129194],{"align":23737},"length\u002Fposition 分别是x和y坐标",[269,129196,129197,129200,129203],{},[315,129198,129199],{"align":23737},"background-attachment",[315,129201,129202],{"align":23737},"背景附着",[315,129204,129205],{"align":23737},"scroll(背景滚动) \u002Ffixed (背景固定)",[269,129207,129208,129211,129214],{},[315,129209,129210],{"align":23737},"背景简写",[315,129212,129213],{"align":23737},"书写更简单",[315,129215,129216],{"align":23737},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[269,129218,129219,129222,129225],{},[315,129220,129221],{"align":23737},"背景半透明",[315,129223,129224],{"align":23737},"背景颜色半透明",[315,129226,129227],{"align":23737},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129229,129230],{},"颜色渐变：",[20,129232],{"style":126398,"src":129233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[20,129235],{"style":126398,"src":129236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[86,129238,129240],{"id":129239},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[106,129242,129244],{"className":127289,"code":129243,"language":127291,"meta":22,"style":22},"\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",[112,129245,129246,129261,129280,129299,129318,129337,129356],{"__ignoreMap":22},[115,129247,129248,129250,129252,129254,129256,129259],{"class":117,"line":118},[115,129249,1035],{"class":125},[115,129251,51601],{"class":51290},[115,129253,53476],{"class":1963},[115,129255,171],{"class":125},[115,129257,129258],{"class":230},"\"nav\"",[115,129260,51297],{"class":125},[115,129262,129263,129265,129267,129269,129271,129273,129276,129278],{"class":117,"line":37},[115,129264,52134],{"class":125},[115,129266,27],{"class":51290},[115,129268,61047],{"class":1963},[115,129270,171],{"class":125},[115,129272,61052],{"class":230},[115,129274,129275],{"class":125},">五彩导航1\u003C\u002F",[115,129277,27],{"class":51290},[115,129279,51297],{"class":125},[115,129281,129282,129284,129286,129288,129290,129292,129295,129297],{"class":117,"line":1180},[115,129283,52134],{"class":125},[115,129285,27],{"class":51290},[115,129287,61047],{"class":1963},[115,129289,171],{"class":125},[115,129291,61052],{"class":230},[115,129293,129294],{"class":125},">五彩导航2\u003C\u002F",[115,129296,27],{"class":51290},[115,129298,51297],{"class":125},[115,129300,129301,129303,129305,129307,129309,129311,129314,129316],{"class":117,"line":1195},[115,129302,52134],{"class":125},[115,129304,27],{"class":51290},[115,129306,61047],{"class":1963},[115,129308,171],{"class":125},[115,129310,61052],{"class":230},[115,129312,129313],{"class":125},">五彩导航3\u003C\u002F",[115,129315,27],{"class":51290},[115,129317,51297],{"class":125},[115,129319,129320,129322,129324,129326,129328,129330,129333,129335],{"class":117,"line":1201},[115,129321,52134],{"class":125},[115,129323,27],{"class":51290},[115,129325,61047],{"class":1963},[115,129327,171],{"class":125},[115,129329,61052],{"class":230},[115,129331,129332],{"class":125},">五彩导航4\u003C\u002F",[115,129334,27],{"class":51290},[115,129336,51297],{"class":125},[115,129338,129339,129341,129343,129345,129347,129349,129352,129354],{"class":117,"line":1215},[115,129340,52134],{"class":125},[115,129342,27],{"class":51290},[115,129344,61047],{"class":1963},[115,129346,171],{"class":125},[115,129348,61052],{"class":230},[115,129350,129351],{"class":125},">五彩导航5\u003C\u002F",[115,129353,27],{"class":51290},[115,129355,51297],{"class":125},[115,129357,129358,129360,129362],{"class":117,"line":1221},[115,129359,51775],{"class":125},[115,129361,51601],{"class":51290},[115,129363,51297],{"class":125},[106,129365,129367],{"className":126542,"code":129366,"language":126544,"meta":22,"style":22},".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",[112,129368,129369,129378,129388,129400,129412,129422,129434,129444,129448,129473,129496,129519,129542],{"__ignoreMap":22},[115,129370,129371,129374,129376],{"class":117,"line":118},[115,129372,129373],{"class":1963},".nav",[115,129375,1399],{"class":51290},[115,129377,15573],{"class":125},[115,129379,129380,129382,129384,129386],{"class":117,"line":37},[115,129381,128158],{"class":174},[115,129383,51427],{"class":125},[115,129385,72373],{"class":174},[115,129387,1291],{"class":125},[115,129389,129390,129392,129394,129396,129398],{"class":117,"line":1180},[115,129391,70558],{"class":174},[115,129393,51427],{"class":125},[115,129395,942],{"class":174},[115,129397,51482],{"class":121},[115,129399,1291],{"class":125},[115,129401,129402,129404,129406,129408,129410],{"class":117,"line":1195},[115,129403,70778],{"class":174},[115,129405,51427],{"class":125},[115,129407,981],{"class":174},[115,129409,51482],{"class":121},[115,129411,1291],{"class":125},[115,129413,129414,129416,129418,129420],{"class":117,"line":1201},[115,129415,70516],{"class":174},[115,129417,51427],{"class":125},[115,129419,51582],{"class":174},[115,129421,1291],{"class":125},[115,129423,129424,129426,129428,129430,129432],{"class":117,"line":1215},[115,129425,127226],{"class":174},[115,129427,51427],{"class":125},[115,129429,981],{"class":174},[115,129431,51482],{"class":121},[115,129433,1291],{"class":125},[115,129435,129436,129438,129440,129442],{"class":117,"line":1221},[115,129437,70895],{"class":174},[115,129439,51427],{"class":125},[115,129441,60832],{"class":174},[115,129443,1291],{"class":125},[115,129445,129446],{"class":117,"line":1312},[115,129447,1565],{"class":125},[115,129449,129450,129452,129454,129457,129459,129461,129464,129466,129468,129470],{"class":117,"line":1318},[115,129451,129373],{"class":1963},[115,129453,1399],{"class":51290},[115,129455,129456],{"class":1963},":nth-child",[115,129458,126],{"class":125},[115,129460,343],{"class":174},[115,129462,129463],{"class":125},") { ",[115,129465,129155],{"class":174},[115,129467,51427],{"class":125},[115,129469,128573],{"class":174},[115,129471,129472],{"class":125},"; }\n",[115,129474,129475,129477,129479,129481,129483,129485,129487,129489,129491,129494],{"class":117,"line":1330},[115,129476,129373],{"class":1963},[115,129478,1399],{"class":51290},[115,129480,129456],{"class":1963},[115,129482,126],{"class":125},[115,129484,203],{"class":174},[115,129486,129463],{"class":125},[115,129488,129155],{"class":174},[115,129490,51427],{"class":125},[115,129492,129493],{"class":174},"#ff0000",[115,129495,129472],{"class":125},[115,129497,129498,129500,129502,129504,129506,129508,129510,129512,129514,129517],{"class":117,"line":1612},[115,129499,129373],{"class":1963},[115,129501,1399],{"class":51290},[115,129503,129456],{"class":1963},[115,129505,126],{"class":125},[115,129507,197],{"class":174},[115,129509,129463],{"class":125},[115,129511,129155],{"class":174},[115,129513,51427],{"class":125},[115,129515,129516],{"class":174},"#00a4ff",[115,129518,129472],{"class":125},[115,129520,129521,129523,129525,129527,129529,129531,129533,129535,129537,129540],{"class":117,"line":1617},[115,129522,129373],{"class":1963},[115,129524,1399],{"class":51290},[115,129526,129456],{"class":1963},[115,129528,126],{"class":125},[115,129530,418],{"class":174},[115,129532,129463],{"class":125},[115,129534,129155],{"class":174},[115,129536,51427],{"class":125},[115,129538,129539],{"class":174},"#ff00ff",[115,129541,129472],{"class":125},[115,129543,129544,129546,129548,129550,129552,129554,129556,129558,129560,129563],{"class":117,"line":1623},[115,129545,129373],{"class":1963},[115,129547,1399],{"class":51290},[115,129549,129456],{"class":1963},[115,129551,126],{"class":125},[115,129553,444],{"class":174},[115,129555,129463],{"class":125},[115,129557,129155],{"class":174},[115,129559,51427],{"class":125},[115,129561,129562],{"class":174},"#00ff00",[115,129564,129472],{"class":125},[57,129566,129568],{"id":129567},"_83-css三大特性","8.3 css三大特性",[86,129570,129572],{"id":129571},"_831-层叠性","8.3.1 层叠性",[14,129574,129575],{},"为了解决样式冲突问题",[14,129577,129578],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129580,129581],{},"   ②样式不冲突，不会层叠",[86,129583,129585],{"id":129584},"_832-继承性","8.3.2 继承性",[14,129587,129588],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129590,129591],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[106,129593,129595],{"className":126542,"code":129594,"language":126544,"meta":22,"style":22},"p {\n  color: #333;\n}\n",[112,129596,129597,129603,129613],{"__ignoreMap":22},[115,129598,129599,129601],{"class":117,"line":118},[115,129600,14],{"class":51290},[115,129602,15573],{"class":125},[115,129604,129605,129607,129609,129611],{"class":117,"line":37},[115,129606,70895],{"class":174},[115,129608,51427],{"class":125},[115,129610,62359],{"class":174},[115,129612,1291],{"class":125},[115,129614,129615],{"class":117,"line":1180},[115,129616,1565],{"class":125},[20,129618],{"style":126398,"src":129619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129621,129622],{},"解释：①行高可以跟单位也可以不跟单位",[14,129624,129625],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129627,129628],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129630,129631],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[86,129633,129635],{"id":129634},"_833-优先级","8.3.3 优先级",[69,129637,129638,129641],{},[72,129639,129640],{},"选择器相同，则执行层叠性",[72,129642,129643],{},"选择器不同，则根据选择器权重执行",[263,129645,129646,129656],{},[266,129647,129648],{},[269,129649,129650,129653],{},[272,129651,129652],{"align":23737},"选择器",[272,129654,129655],{"align":23737},"选择器权重",[310,129657,129658,129666,129674,129682,129690,129698],{},[269,129659,129660,129663],{},[315,129661,129662],{"align":23737},"继承 或者*",[315,129664,129665],{"align":23737},"0，0，0，0",[269,129667,129668,129671],{},[315,129669,129670],{"align":23737},"标签选择器",[315,129672,129673],{"align":23737},"0，0，0，1",[269,129675,129676,129679],{},[315,129677,129678],{"align":23737},"类选择器，伪类选择器",[315,129680,129681],{"align":23737},"0，0，1，0",[269,129683,129684,129687],{},[315,129685,129686],{"align":23737},"ID选择器",[315,129688,129689],{"align":23737},"0，1，0，0",[269,129691,129692,129695],{},[315,129693,129694],{"align":23737},"行内样式",[315,129696,129697],{"align":23737},"1，0，0，0",[269,129699,129700,129703],{},[315,129701,129702],{"align":23737},"！important",[315,129704,129705],{"align":23737},"无穷大",[14,129707,129708],{},"! important用法：",[106,129710,129712],{"className":126542,"code":129711,"language":126544,"meta":22,"style":22},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[112,129713,129714,129719,129725,129738,129742,129747,129753,129763],{"__ignoreMap":22},[115,129715,129716],{"class":117,"line":118},[115,129717,129718],{"class":184},"\u002F* !important 拥有最高优先级 *\u002F\n",[115,129720,129721,129723],{"class":117,"line":37},[115,129722,51601],{"class":51290},[115,129724,15573],{"class":125},[115,129726,129727,129729,129731,129733,129736],{"class":117,"line":1180},[115,129728,70895],{"class":174},[115,129730,51427],{"class":125},[115,129732,51635],{"class":174},[115,129734,129735],{"class":121}," !important",[115,129737,1291],{"class":125},[115,129739,129740],{"class":117,"line":1195},[115,129741,1565],{"class":125},[115,129743,129744],{"class":117,"line":1201},[115,129745,129746],{"class":184},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[115,129748,129749,129751],{"class":117,"line":1215},[115,129750,51601],{"class":51290},[115,129752,15573],{"class":125},[115,129754,129755,129757,129759,129761],{"class":117,"line":1221},[115,129756,70895],{"class":174},[115,129758,51427],{"class":125},[115,129760,57411],{"class":174},[115,129762,1291],{"class":125},[115,129764,129765],{"class":117,"line":1312},[115,129766,1565],{"class":125},[14,129768,129769],{},"优先级注意点：",[14,129771,129772],{},"①权重是有4组数字组成,但是不会有进位",[14,129774,129775],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129777,129778],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129780,129781],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129783,129784],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129786,129787],{},"⑥复合选择器",[263,129789,129790,129800],{},[266,129791,129792],{},[269,129793,129794,129797],{},[272,129795,129796],{"align":23737},"div ul li",[272,129798,129799],{"align":23737},"0,0,0,3",[310,129801,129802,129810,129818],{},[269,129803,129804,129807],{},[315,129805,129806],{"align":23737},".nav ul li",[315,129808,129809],{"align":23737},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[269,129811,129812,129815],{},[315,129813,129814],{"align":23737},"a:hover",[315,129816,129817],{"align":23737},"0,0,1,1",[269,129819,129820,129823],{},[315,129821,129822],{"align":23737},".nav a",[315,129824,129817],{"align":23737},[5127,129826,129827],{},"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":22,"searchDepth":37,"depth":37,"links":129829},[129830,129838,129849],{"id":127938,"depth":37,"text":127939,"children":129831},[129832,129833,129834,129835,129836,129837],{"id":127951,"depth":1180,"text":127952},{"id":128023,"depth":1180,"text":128024},{"id":128095,"depth":1180,"text":128096},{"id":128126,"depth":1180,"text":128127},{"id":128133,"depth":1180,"text":128134},{"id":128286,"depth":1180,"text":128287},{"id":128594,"depth":37,"text":128595,"children":129839},[129840,129841,129842,129843,129844,129845,129846,129847,129848],{"id":128601,"depth":1180,"text":128602},{"id":128611,"depth":1180,"text":128612},{"id":128707,"depth":1180,"text":128708},{"id":128780,"depth":1180,"text":128781},{"id":128935,"depth":1180,"text":128936},{"id":129023,"depth":1180,"text":129024},{"id":129075,"depth":1180,"text":129076},{"id":129134,"depth":1180,"text":129135},{"id":129239,"depth":1180,"text":129240},{"id":129567,"depth":37,"text":129568,"children":129850},[129851,129852,129853],{"id":129571,"depth":1180,"text":129572},{"id":129584,"depth":1180,"text":129585},{"id":129634,"depth":1180,"text":129635},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127930,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129860,"title":129861,"body":129862,"description":39,"extension":40,"meta":131452,"navigation":42,"path":131453,"seo":131454,"stem":131455,"__hash__":131456},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129863,"toc":131431},[129864,129867,129871,129874,129877,129880,129883,129886,129889,129892,129896,129904,129941,129977,129980,129994,129999,130033,130036,130129,130134,130137,130167,130170,130175,130183,130187,130194,130240,130284,130289,130292,130295,130298,130301,130304,130307,130309,130312,130316,130321,130365,130370,130373,130376,130413,130418,130421,130424,130427,130430,130462,130465,130468,130471,130503,130506,130509,130512,130516,130519,130551,130554,130558,130578,130581,130589,130592,130596,130601,130604,130636,130641,130644,130682,130686,130691,130694,130697,130728,130731,130748,130753,130805,130865,130870,130924,130962,130966,130970,130973,130977,130985,130988,130990,131001,131006,131054,131088,131091,131094,131097,131100,131144,131147,131150,131153,131156,131159,131162,131206,131209,131212,131215,131218,131221,131224,131230,131233,131277,131280,131283,131286,131289,131292,131336,131339,131341,131344,131348,131352,131390,131394,131397,131400,131404,131412,131416,131419,131422,131425,131428],[10,129865,129861],{"id":129866},"_9-css盒模型浮动与切图",[57,129868,129870],{"id":129869},"_91-盒子模型","9.1 盒子模型",[14,129872,129873],{},"利用盒子来设计网页",[14,129875,129876],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129878,129879],{},"网页布局设置：",[14,129881,129882],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129884,129885],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129887,129888],{},"③往盒子里装内容",[20,129890],{"style":126398,"src":129891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[86,129893,129895],{"id":129894},"_911-边框border","9.1.1 边框（border）",[69,129897,129898,129901],{},[72,129899,129900],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[72,129902,129903],{},"语法",[106,129905,129907],{"className":126542,"code":129906,"language":126544,"meta":22,"style":22},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[112,129908,129909,129914,129920,129937],{"__ignoreMap":22},[115,129910,129911],{"class":117,"line":118},[115,129912,129913],{"class":184},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[115,129915,129916,129918],{"class":117,"line":37},[115,129917,51601],{"class":51290},[115,129919,15573],{"class":125},[115,129921,129922,129924,129926,129928,129930,129932,129935],{"class":117,"line":1180},[115,129923,70886],{"class":174},[115,129925,51427],{"class":125},[115,129927,343],{"class":174},[115,129929,51482],{"class":121},[115,129931,51511],{"class":174},[115,129933,129934],{"class":174}," #ccc",[115,129936,1291],{"class":125},[115,129938,129939],{"class":117,"line":1195},[115,129940,1565],{"class":125},[263,129942,129943,129951],{},[266,129944,129945],{},[269,129946,129947,129949],{},[272,129948,129144],{"align":23737},[272,129950,102686],{"align":23737},[310,129952,129953,129961,129969],{},[269,129954,129955,129958],{},[315,129956,129957],{"align":23737},"border-width",[315,129959,129960],{"align":23737},"定义边框粗细，单位是px",[269,129962,129963,129966],{},[315,129964,129965],{"align":23737},"border-style",[315,129967,129968],{"align":23737},"边框的样式",[269,129970,129971,129974],{},[315,129972,129973],{"align":23737},"border-color",[315,129975,129976],{"align":23737},"边框的颜色",[14,129978,129979],{},"边框样式 border-style 可以设置如下值：",[1132,129981,129982,129985,129988,129991],{},[72,129983,129984],{},"none：没有边框即忽略所有边框的宽度（默认值）",[72,129986,129987],{},"solid：边框为单实线(最为常用的)",[72,129989,129990],{},"dashed：边框为虚线",[72,129992,129993],{},"dotted：边框为点线",[69,129995,129996],{"start":1180},[72,129997,129998],{},"边框的合写分写",[106,130000,130001],{"className":126542,"code":129906,"language":126544,"meta":22,"style":22},[112,130002,130003,130007,130013,130029],{"__ignoreMap":22},[115,130004,130005],{"class":117,"line":118},[115,130006,129913],{"class":184},[115,130008,130009,130011],{"class":117,"line":37},[115,130010,51601],{"class":51290},[115,130012,15573],{"class":125},[115,130014,130015,130017,130019,130021,130023,130025,130027],{"class":117,"line":1180},[115,130016,70886],{"class":174},[115,130018,51427],{"class":125},[115,130020,343],{"class":174},[115,130022,51482],{"class":121},[115,130024,51511],{"class":174},[115,130026,129934],{"class":174},[115,130028,1291],{"class":125},[115,130030,130031],{"class":117,"line":1195},[115,130032,1565],{"class":125},[14,130034,130035],{},"边框分开写法：",[106,130037,130039],{"className":126542,"code":130038,"language":126544,"meta":22,"style":22},"\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",[112,130040,130041,130046,130052,130070,130088,130107,130125],{"__ignoreMap":22},[115,130042,130043],{"class":117,"line":118},[115,130044,130045],{"class":184},"\u002F* 边框分开写法 *\u002F\n",[115,130047,130048,130050],{"class":117,"line":37},[115,130049,51601],{"class":51290},[115,130051,15573],{"class":125},[115,130053,130054,130057,130059,130061,130063,130065,130068],{"class":117,"line":1180},[115,130055,130056],{"class":174},"  border-top",[115,130058,51427],{"class":125},[115,130060,343],{"class":174},[115,130062,51482],{"class":121},[115,130064,51511],{"class":174},[115,130066,130067],{"class":174}," #000",[115,130069,1291],{"class":125},[115,130071,130072,130075,130077,130079,130081,130083,130086],{"class":117,"line":1195},[115,130073,130074],{"class":174},"  border-right",[115,130076,51427],{"class":125},[115,130078,203],{"class":174},[115,130080,51482],{"class":121},[115,130082,62231],{"class":174},[115,130084,130085],{"class":174}," #333",[115,130087,1291],{"class":125},[115,130089,130090,130093,130095,130097,130099,130102,130105],{"class":117,"line":1201},[115,130091,130092],{"class":174},"  border-bottom",[115,130094,51427],{"class":125},[115,130096,197],{"class":174},[115,130098,51482],{"class":121},[115,130100,130101],{"class":174}," dotted",[115,130103,130104],{"class":174}," #666",[115,130106,1291],{"class":125},[115,130108,130109,130112,130114,130116,130118,130120,130123],{"class":117,"line":1215},[115,130110,130111],{"class":174},"  border-left",[115,130113,51427],{"class":125},[115,130115,343],{"class":174},[115,130117,51482],{"class":121},[115,130119,51511],{"class":174},[115,130121,130122],{"class":174}," #999",[115,130124,1291],{"class":125},[115,130126,130127],{"class":117,"line":1221},[115,130128,1565],{"class":125},[69,130130,130131],{"start":1195},[72,130132,130133],{},"表格的细线边框",[14,130135,130136],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[106,130138,130140],{"className":126542,"code":130139,"language":126544,"meta":22,"style":22},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[112,130141,130142,130147,130153,130163],{"__ignoreMap":22},[115,130143,130144],{"class":117,"line":118},[115,130145,130146],{"class":184},"\u002F* 表格细线边框合并 *\u002F\n",[115,130148,130149,130151],{"class":117,"line":37},[115,130150,263],{"class":51290},[115,130152,15573],{"class":125},[115,130154,130155,130157,130159,130161],{"class":117,"line":1180},[115,130156,70568],{"class":174},[115,130158,51427],{"class":125},[115,130160,65025],{"class":174},[115,130162,1291],{"class":125},[115,130164,130165],{"class":117,"line":1195},[115,130166,1565],{"class":125},[14,130168,130169],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[69,130171,130172],{"start":1201},[72,130173,130174],{},"解决边框额外增加盒子的实际大小的方法：",[1132,130176,130177,130180],{},[72,130178,130179],{},"测量盒子大小的时候,不量边框",[72,130181,130182],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[86,130184,130186],{"id":130185},"_912-内边距","9.1.2 内边距",[69,130188,130189,130192],{},[72,130190,130191],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[72,130193,129903],{},[263,130195,130196,130206],{},[266,130197,130198],{},[269,130199,130200,130203],{},[272,130201,130202],{"align":23737},"值的个数",[272,130204,130205],{"align":23737},"表达意思",[310,130207,130208,130216,130224,130232],{},[269,130209,130210,130213],{},[315,130211,130212],{"align":23737},"padding: 5px;",[315,130214,130215],{"align":23737},"1个值，代表上下左右都有5个元素",[269,130217,130218,130221],{},[315,130219,130220],{"align":23737},"padding: 5px 10px;",[315,130222,130223],{"align":23737},"2个值，代表上下内边距为5像素，左右内边距为10像素",[269,130225,130226,130229],{},[315,130227,130228],{"align":23737},"padding: 5px 10px 20px;",[315,130230,130231],{"align":23737},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[269,130233,130234,130237],{},[315,130235,130236],{"align":23737},"padding: 5px 10px 20px 30px;",[315,130238,130239],{"align":23737},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[263,130241,130242,130250],{},[266,130243,130244],{},[269,130245,130246,130248],{},[272,130247,129144],{"align":23737},[272,130249,102686],{"align":23737},[310,130251,130252,130260,130268,130276],{},[269,130253,130254,130257],{},[315,130255,130256],{"align":23737},"padding-left",[315,130258,130259],{"align":23737},"左内边距",[269,130261,130262,130265],{},[315,130263,130264],{"align":23737},"padding-right",[315,130266,130267],{"align":23737},"右内边距",[269,130269,130270,130273],{},[315,130271,130272],{"align":23737},"padding-top",[315,130274,130275],{"align":23737},"上内边距",[269,130277,130278,130281],{},[315,130279,130280],{"align":23737},"padding-bottom",[315,130282,130283],{"align":23737},"下内边距",[69,130285,130286],{"start":1180},[72,130287,130288],{},"内边距会影响盒子的实际大小",[14,130290,130291],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130293,130294],{},"①内容和边框有了距离，添加了内边距",[14,130296,130297],{},"②padding影响了盒子实际大小",[14,130299,130300],{},"内边距对盒子大小的影响：",[14,130302,130303],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130305,130306],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130308,95210],{},[14,130310,130311],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[86,130313,130315],{"id":130314},"_913-外边距","9.1.3 外边距",[69,130317,130318],{},[72,130319,130320],{},"控制盒子与盒子之间的距离",[263,130322,130323,130331],{},[266,130324,130325],{},[269,130326,130327,130329],{},[272,130328,129144],{"align":23737},[272,130330,102686],{"align":23737},[310,130332,130333,130341,130349,130357],{},[269,130334,130335,130338],{},[315,130336,130337],{"align":23737},"margin-left",[315,130339,130340],{"align":23737},"左外边距",[269,130342,130343,130346],{},[315,130344,130345],{"align":23737},"margin-right",[315,130347,130348],{"align":23737},"右外边距",[269,130350,130351,130354],{},[315,130352,130353],{"align":23737},"margin-top",[315,130355,130356],{"align":23737},"上外边距",[269,130358,130359,130362],{},[315,130360,130361],{"align":23737},"margin-bottom",[315,130363,130364],{"align":23737},"下外边距",[69,130366,130367],{"start":37},[72,130368,130369],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130371,130372],{},"①盒子必须指定了宽度（width）",[14,130374,130375],{},"②盒子左右的外边距都设置为 auto",[106,130377,130379],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[112,130380,130381,130386,130393,130409],{"__ignoreMap":22},[115,130382,130383],{"class":117,"line":118},[115,130384,130385],{"class":184},"\u002F* margin 复合写法（同上） *\u002F\n",[115,130387,130388,130391],{"class":117,"line":37},[115,130389,130390],{"class":1963},".box",[115,130392,15573],{"class":125},[115,130394,130395,130397,130399,130401,130403,130406],{"class":117,"line":1180},[115,130396,70460],{"class":174},[115,130398,51427],{"class":125},[115,130400,317],{"class":174},[115,130402,51546],{"class":174},[115,130404,130405],{"class":125},";  ",[115,130407,130408],{"class":184},"\u002F* 块级盒子水平居中 *\u002F\n",[115,130410,130411],{"class":117,"line":1195},[115,130412,1565],{"class":125},[69,130414,130415],{"start":1180},[72,130416,130417],{},"外边距塌陷问题",[14,130419,130420],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[20,130422],{"style":126398,"src":130423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130425,130426],{},"解决方案：",[14,130428,130429],{},"①可以为父亲元素定义上边距",[106,130431,130432],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,130433,130434,130438,130444,130458],{"__ignoreMap":22},[115,130435,130436],{"class":117,"line":118},[115,130437,130385],{"class":184},[115,130439,130440,130442],{"class":117,"line":37},[115,130441,130390],{"class":1963},[115,130443,15573],{"class":125},[115,130445,130446,130448,130450,130452,130454,130456],{"class":117,"line":1180},[115,130447,70460],{"class":174},[115,130449,51427],{"class":125},[115,130451,317],{"class":174},[115,130453,51546],{"class":174},[115,130455,130405],{"class":125},[115,130457,130408],{"class":184},[115,130459,130460],{"class":117,"line":1195},[115,130461,1565],{"class":125},[14,130463,130464],{},"②可以为父亲元素定义上内边距",[14,130466,130467],{},"③可以为父亲元素添加overflow:hidden",[20,130469],{"style":126398,"src":130470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[106,130472,130473],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,130474,130475,130479,130485,130499],{"__ignoreMap":22},[115,130476,130477],{"class":117,"line":118},[115,130478,130385],{"class":184},[115,130480,130481,130483],{"class":117,"line":37},[115,130482,130390],{"class":1963},[115,130484,15573],{"class":125},[115,130486,130487,130489,130491,130493,130495,130497],{"class":117,"line":1180},[115,130488,70460],{"class":174},[115,130490,51427],{"class":125},[115,130492,317],{"class":174},[115,130494,51546],{"class":174},[115,130496,130405],{"class":125},[115,130498,130408],{"class":184},[115,130500,130501],{"class":117,"line":1195},[115,130502,1565],{"class":125},[20,130504],{"style":126398,"src":130505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130507,130508],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130510,130511],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[86,130513,130515],{"id":130514},"_914-清除内外边距","9.1.4 清除内外边距",[14,130517,130518],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[106,130520,130521],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,130522,130523,130527,130533,130547],{"__ignoreMap":22},[115,130524,130525],{"class":117,"line":118},[115,130526,130385],{"class":184},[115,130528,130529,130531],{"class":117,"line":37},[115,130530,130390],{"class":1963},[115,130532,15573],{"class":125},[115,130534,130535,130537,130539,130541,130543,130545],{"class":117,"line":1180},[115,130536,70460],{"class":174},[115,130538,51427],{"class":125},[115,130540,317],{"class":174},[115,130542,51546],{"class":174},[115,130544,130405],{"class":125},[115,130546,130408],{"class":184},[115,130548,130549],{"class":117,"line":1195},[115,130550,1565],{"class":125},[14,130552,130553],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[86,130555,130557],{"id":130556},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1132,130559,130560,130563,130566,130569,130572,130575],{},[72,130561,130562],{},"文件→打开 ：可以打开我们要测量的图片",[72,130564,130565],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[72,130567,130568],{},"右击标尺，把里面的单位改为像素",[72,130570,130571],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[72,130573,130574],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[72,130576,130577],{},"用选区拖动 可以测量大小",[20,130579],{"style":126398,"src":130580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1132,130582,130583,130586],{},[72,130584,130585],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[72,130587,130588],{},"吸管取色工具",[20,130590],{"style":126398,"src":130591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[86,130593,130595],{"id":130594},"_916-案例","9.1.6 案例",[69,130597,130598],{},[72,130599,130600],{},"小米商品",[20,130602],{"style":126398,"src":130603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[106,130605,130606],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,130607,130608,130612,130618,130632],{"__ignoreMap":22},[115,130609,130610],{"class":117,"line":118},[115,130611,130385],{"class":184},[115,130613,130614,130616],{"class":117,"line":37},[115,130615,130390],{"class":1963},[115,130617,15573],{"class":125},[115,130619,130620,130622,130624,130626,130628,130630],{"class":117,"line":1180},[115,130621,70460],{"class":174},[115,130623,51427],{"class":125},[115,130625,317],{"class":174},[115,130627,51546],{"class":174},[115,130629,130405],{"class":125},[115,130631,130408],{"class":184},[115,130633,130634],{"class":117,"line":1195},[115,130635,1565],{"class":125},[69,130637,130638],{"start":37},[72,130639,130640],{},"快报模块",[20,130642],{"style":126398,"src":130643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[106,130645,130647],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[112,130648,130649,130654,130669,130674],{"__ignoreMap":22},[115,130650,130651],{"class":117,"line":118},[115,130652,130653],{"class":184},"\u003C!-- HTML 代码示例 -->\n",[115,130655,130656,130658,130660,130662,130664,130667],{"class":117,"line":37},[115,130657,1035],{"class":125},[115,130659,51601],{"class":51290},[115,130661,53476],{"class":1963},[115,130663,171],{"class":125},[115,130665,130666],{"class":230},"\"example\"",[115,130668,51297],{"class":125},[115,130670,130671],{"class":117,"line":1180},[115,130672,130673],{"class":125},"  示例内容\n",[115,130675,130676,130678,130680],{"class":117,"line":1195},[115,130677,51775],{"class":125},[115,130679,51601],{"class":51290},[115,130681,51297],{"class":125},[86,130683,130685],{"id":130684},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[69,130687,130688],{},[72,130689,130690],{},"圆角边框",[14,130692,130693],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[20,130695],{"style":126398,"src":130696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[106,130698,130700],{"className":126542,"code":130699,"language":126544,"meta":22,"style":22},"div {\n  border: 1px solid #ccc;\n}\n",[112,130701,130702,130708,130724],{"__ignoreMap":22},[115,130703,130704,130706],{"class":117,"line":118},[115,130705,51601],{"class":51290},[115,130707,15573],{"class":125},[115,130709,130710,130712,130714,130716,130718,130720,130722],{"class":117,"line":37},[115,130711,70886],{"class":174},[115,130713,51427],{"class":125},[115,130715,343],{"class":174},[115,130717,51482],{"class":121},[115,130719,51511],{"class":174},[115,130721,129934],{"class":174},[115,130723,1291],{"class":125},[115,130725,130726],{"class":117,"line":1180},[115,130727,1565],{"class":125},[14,130729,130730],{},"解释:",[1132,130732,130733,130736,130739,130742,130745],{},[72,130734,130735],{},"参数值可以为数值或百分比的形式",[72,130737,130738],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[72,130740,130741],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[72,130743,130744],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[72,130746,130747],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[69,130749,130750],{"start":37},[72,130751,130752],{},"盒子阴影",[106,130754,130756],{"className":126542,"code":130755,"language":126544,"meta":22,"style":22},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[112,130757,130758,130764,130801],{"__ignoreMap":22},[115,130759,130760,130762],{"class":117,"line":118},[115,130761,51601],{"class":51290},[115,130763,15573],{"class":125},[115,130765,130766,130769,130771,130773,130775,130777,130779,130781,130783,130785,130787,130789,130791,130793,130795,130797,130799],{"class":117,"line":37},[115,130767,130768],{"class":174},"  box-shadow",[115,130770,51427],{"class":125},[115,130772,317],{"class":174},[115,130774,14756],{"class":174},[115,130776,51482],{"class":121},[115,130778,2038],{"class":174},[115,130780,51482],{"class":121},[115,130782,78757],{"class":174},[115,130784,126],{"class":125},[115,130786,317],{"class":174},[115,130788,12436],{"class":125},[115,130790,317],{"class":174},[115,130792,12436],{"class":125},[115,130794,317],{"class":174},[115,130796,12436],{"class":125},[115,130798,86200],{"class":174},[115,130800,2719],{"class":125},[115,130802,130803],{"class":117,"line":1180},[115,130804,1565],{"class":125},[263,130806,130807,130815],{},[266,130808,130809],{},[269,130810,130811,130813],{},[272,130812,278],{"align":23737},[272,130814,27490],{"align":23737},[310,130816,130817,130825,130833,130841,130849,130857],{},[269,130818,130819,130822],{},[315,130820,130821],{"align":23737},"h-shadow",[315,130823,130824],{"align":23737},"必需,水平阴影的位置,允许负值",[269,130826,130827,130830],{},[315,130828,130829],{"align":23737},"v-shadow",[315,130831,130832],{"align":23737},"必需,垂直阴影的位置,允许负值",[269,130834,130835,130838],{},[315,130836,130837],{"align":23737},"blur",[315,130839,130840],{"align":23737},"可选,模糊距离,就是影子的虚实",[269,130842,130843,130846],{},[315,130844,130845],{"align":23737},"spread",[315,130847,130848],{"align":23737},"可选,阴影尺寸",[269,130850,130851,130854],{},[315,130852,130853],{"align":23737},"color",[315,130855,130856],{"align":23737},"可选,阴影的颜色",[269,130858,130859,130862],{},[315,130860,130861],{"align":23737},"inset",[315,130863,130864],{"align":23737},"可选,将外部阴影(outset)改为内部阴影",[69,130866,130867],{"start":1180},[72,130868,130869],{},"文字阴影",[106,130871,130873],{"className":126542,"code":130872,"language":126544,"meta":22,"style":22},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[112,130874,130875,130881,130920],{"__ignoreMap":22},[115,130876,130877,130879],{"class":117,"line":118},[115,130878,14],{"class":51290},[115,130880,15573],{"class":125},[115,130882,130883,130886,130888,130890,130892,130894,130896,130898,130900,130902,130904,130906,130908,130910,130912,130914,130916,130918],{"class":117,"line":37},[115,130884,130885],{"class":174},"  text-shadow",[115,130887,51427],{"class":125},[115,130889,343],{"class":174},[115,130891,51482],{"class":121},[115,130893,25119],{"class":174},[115,130895,51482],{"class":121},[115,130897,14756],{"class":174},[115,130899,51482],{"class":121},[115,130901,78757],{"class":174},[115,130903,126],{"class":125},[115,130905,317],{"class":174},[115,130907,12436],{"class":125},[115,130909,317],{"class":174},[115,130911,12436],{"class":125},[115,130913,317],{"class":174},[115,130915,12436],{"class":125},[115,130917,100511],{"class":174},[115,130919,2719],{"class":125},[115,130921,130922],{"class":117,"line":1180},[115,130923,1565],{"class":125},[263,130925,130926,130934],{},[266,130927,130928],{},[269,130929,130930,130932],{},[272,130931,278],{"align":23737},[272,130933,27490],{"align":23737},[310,130935,130936,130942,130949,130956],{},[269,130937,130938,130940],{},[315,130939,130821],{"align":23737},[315,130941,130824],{"align":23737},[269,130943,130944,130946],{},[315,130945,130829],{"align":23737},[315,130947,130948],{"align":23737},"必需,垂直阴影位置,允许负值",[269,130950,130951,130953],{},[315,130952,130837],{"align":23737},[315,130954,130955],{"align":23737},"可选,模糊的距离",[269,130957,130958,130960],{},[315,130959,130853],{"align":23737},[315,130961,130856],{"align":23737},[57,130963,130965],{"id":130964},"_92-浮动","9.2 浮动",[86,130967,130969],{"id":130968},"_921-浮动介绍","9.2.1 浮动介绍",[14,130971,130972],{},"在16.2中详细介绍",[86,130974,130976],{"id":130975},"_922-清除浮动","9.2.2 清除浮动",[69,130978,130979,130982],{},[72,130980,130981],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[72,130983,130984],{},"清除浮动的本质",[14,130986,130987],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130989,9026],{},[1132,130991,130992,130995,130998],{},[72,130993,130994],{},"如果父盒子本身有高度，则不需要清除浮动",[72,130996,130997],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[72,130999,131000],{},"父级有了高度，就不会影响下面的标准流了",[69,131002,131003],{"start":1180},[72,131004,131005],{},"清除浮动样式",[106,131007,131009],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[112,131010,131011,131018,131029,131033,131040,131050],{"__ignoreMap":22},[115,131012,131013,131016],{"class":117,"line":118},[115,131014,131015],{"class":1963},".left",[115,131017,15573],{"class":125},[115,131019,131020,131023,131025,131027],{"class":117,"line":37},[115,131021,131022],{"class":174},"  float",[115,131024,51427],{"class":125},[115,131026,23737],{"class":174},[115,131028,1291],{"class":125},[115,131030,131031],{"class":117,"line":1180},[115,131032,1565],{"class":125},[115,131034,131035,131038],{"class":117,"line":1195},[115,131036,131037],{"class":1963},".right",[115,131039,15573],{"class":125},[115,131041,131042,131044,131046,131048],{"class":117,"line":1201},[115,131043,131022],{"class":174},[115,131045,51427],{"class":125},[115,131047,72512],{"class":174},[115,131049,1291],{"class":125},[115,131051,131052],{"class":117,"line":1215},[115,131053,1565],{"class":125},[263,131055,131056,131064],{},[266,131057,131058],{},[269,131059,131060,131062],{},[272,131061,127006],{"align":23737},[272,131063,27490],{"align":23737},[310,131065,131066,131073,131080],{},[269,131067,131068,131070],{},[315,131069,23737],{"align":23737},[315,131071,131072],{"align":23737},"不允许左侧有浮动元素（清除左侧浮动的影响）",[269,131074,131075,131077],{},[315,131076,72512],{"align":23737},[315,131078,131079],{"align":23737},"不允许右侧有浮动元素（清除右侧浮动的影响）",[269,131081,131082,131085],{},[315,131083,131084],{"align":23737},"both",[315,131086,131087],{"align":23737},"同时清除左右侧浮动的影响",[14,131089,131090],{},"法一",[14,131092,131093],{},"额外标签法也称为隔墙法",[14,131095,131096],{},"使用方式：",[14,131098,131099],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[106,131101,131102],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,131103,131104,131110,131120,131124,131130,131140],{"__ignoreMap":22},[115,131105,131106,131108],{"class":117,"line":118},[115,131107,131015],{"class":1963},[115,131109,15573],{"class":125},[115,131111,131112,131114,131116,131118],{"class":117,"line":37},[115,131113,131022],{"class":174},[115,131115,51427],{"class":125},[115,131117,23737],{"class":174},[115,131119,1291],{"class":125},[115,131121,131122],{"class":117,"line":1180},[115,131123,1565],{"class":125},[115,131125,131126,131128],{"class":117,"line":1195},[115,131127,131037],{"class":1963},[115,131129,15573],{"class":125},[115,131131,131132,131134,131136,131138],{"class":117,"line":1201},[115,131133,131022],{"class":174},[115,131135,51427],{"class":125},[115,131137,72512],{"class":174},[115,131139,1291],{"class":125},[115,131141,131142],{"class":117,"line":1215},[115,131143,1565],{"class":125},[14,131145,131146],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131148,131149],{},"优点： 通俗易懂，书写方便",[14,131151,131152],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131154,131155],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131157,131158],{},"法二",[14,131160,131161],{},"父级添加overflow属性",[106,131163,131164],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,131165,131166,131172,131182,131186,131192,131202],{"__ignoreMap":22},[115,131167,131168,131170],{"class":117,"line":118},[115,131169,131015],{"class":1963},[115,131171,15573],{"class":125},[115,131173,131174,131176,131178,131180],{"class":117,"line":37},[115,131175,131022],{"class":174},[115,131177,51427],{"class":125},[115,131179,23737],{"class":174},[115,131181,1291],{"class":125},[115,131183,131184],{"class":117,"line":1180},[115,131185,1565],{"class":125},[115,131187,131188,131190],{"class":117,"line":1195},[115,131189,131037],{"class":1963},[115,131191,15573],{"class":125},[115,131193,131194,131196,131198,131200],{"class":117,"line":1201},[115,131195,131022],{"class":174},[115,131197,51427],{"class":125},[115,131199,72512],{"class":174},[115,131201,1291],{"class":125},[115,131203,131204],{"class":117,"line":1215},[115,131205,1565],{"class":125},[14,131207,131208],{},"overflow: hidden;",[14,131210,131211],{},"优点：代码简洁",[14,131213,131214],{},"缺点：无法显示溢出的部分",[14,131216,131217],{},"注意：是给父元素添加代码",[14,131219,131220],{},"法三",[14,131222,131223],{},"父级添加after伪元素",[14,131225,131226,131229],{},[131227,131228],"after",{}," 方式是额外标签法的升级版",[14,131231,131232],{},"使用的时候复制就可以",[106,131234,131235],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,131236,131237,131243,131253,131257,131263,131273],{"__ignoreMap":22},[115,131238,131239,131241],{"class":117,"line":118},[115,131240,131015],{"class":1963},[115,131242,15573],{"class":125},[115,131244,131245,131247,131249,131251],{"class":117,"line":37},[115,131246,131022],{"class":174},[115,131248,51427],{"class":125},[115,131250,23737],{"class":174},[115,131252,1291],{"class":125},[115,131254,131255],{"class":117,"line":1180},[115,131256,1565],{"class":125},[115,131258,131259,131261],{"class":117,"line":1195},[115,131260,131037],{"class":1963},[115,131262,15573],{"class":125},[115,131264,131265,131267,131269,131271],{"class":117,"line":1201},[115,131266,131022],{"class":174},[115,131268,51427],{"class":125},[115,131270,72512],{"class":174},[115,131272,1291],{"class":125},[115,131274,131275],{"class":117,"line":1215},[115,131276,1565],{"class":125},[14,131278,131279],{},"优点：没有增加标签，结构更简单",[14,131281,131282],{},"缺点：照顾低版本浏览器",[14,131284,131285],{},"代表网站： 百度、淘宝网、网易等",[14,131287,131288],{},"法四",[14,131290,131291],{},"父级添加双伪元素",[106,131293,131294],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,131295,131296,131302,131312,131316,131322,131332],{"__ignoreMap":22},[115,131297,131298,131300],{"class":117,"line":118},[115,131299,131015],{"class":1963},[115,131301,15573],{"class":125},[115,131303,131304,131306,131308,131310],{"class":117,"line":37},[115,131305,131022],{"class":174},[115,131307,51427],{"class":125},[115,131309,23737],{"class":174},[115,131311,1291],{"class":125},[115,131313,131314],{"class":117,"line":1180},[115,131315,1565],{"class":125},[115,131317,131318,131320],{"class":117,"line":1195},[115,131319,131037],{"class":1963},[115,131321,15573],{"class":125},[115,131323,131324,131326,131328,131330],{"class":117,"line":1201},[115,131325,131022],{"class":174},[115,131327,51427],{"class":125},[115,131329,72512],{"class":174},[115,131331,1291],{"class":125},[115,131333,131334],{"class":117,"line":1215},[115,131335,1565],{"class":125},[14,131337,131338],{},"优点：代码更简洁",[14,131340,131282],{},[14,131342,131343],{},"代表网站：小米、腾讯等",[57,131345,131347],{"id":131346},"_93-ps切图","9.3 PS切图",[86,131349,131351],{"id":131350},"_931-常见图片格式","9.3.1 常见图片格式",[263,131353,131354,131364],{},[266,131355,131356],{},[269,131357,131358,131361],{},[272,131359,131360],{"align":23737},"jpg图像格式",[272,131362,131363],{"align":23737},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[310,131365,131366,131374,131382],{},[269,131367,131368,131371],{},[315,131369,131370],{"align":23737},"gif图像格式",[315,131372,131373],{"align":23737},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[269,131375,131376,131379],{},[315,131377,131378],{"align":23737},"png图像格式",[315,131380,131381],{"align":23737},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[269,131383,131384,131387],{},[315,131385,131386],{"align":23737},"PSD图像格式",[315,131388,131389],{"align":23737},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[86,131391,131393],{"id":131392},"_932-图层切图","9.3.2 图层切图",[14,131395,131396],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131398,131399],{},"按住shift选中两个图层->图层菜单->合并图层",[86,131401,131403],{"id":131402},"_933-切片切图","9.3.3 切片切图",[1132,131405,131406,131409],{},[72,131407,131408],{},"利用切片工具手动划出",[72,131410,131411],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[86,131413,131415],{"id":131414},"_934-切图步骤","9.3.4 切图步骤",[14,131417,131418],{},"用切片工具选中：",[20,131420],{"style":126398,"src":131421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131423,131424],{},"文件 -> 导出",[20,131426],{"style":126398,"src":131427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5127,131429,131430],{},"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":22,"searchDepth":37,"depth":37,"links":131432},[131433,131442,131446],{"id":129869,"depth":37,"text":129870,"children":131434},[131435,131436,131437,131438,131439,131440,131441],{"id":129894,"depth":1180,"text":129895},{"id":130185,"depth":1180,"text":130186},{"id":130314,"depth":1180,"text":130315},{"id":130514,"depth":1180,"text":130515},{"id":130556,"depth":1180,"text":130557},{"id":130594,"depth":1180,"text":130595},{"id":130684,"depth":1180,"text":130685},{"id":130964,"depth":37,"text":130965,"children":131443},[131444,131445],{"id":130968,"depth":1180,"text":130969},{"id":130975,"depth":1180,"text":130976},{"id":131346,"depth":37,"text":131347,"children":131447},[131448,131449,131450,131451],{"id":131350,"depth":1180,"text":131351},{"id":131392,"depth":1180,"text":131393},{"id":131402,"depth":1180,"text":131403},{"id":131414,"depth":1180,"text":131415},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129861,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131458,"title":131459,"body":131460,"description":39,"extension":40,"meta":132101,"navigation":42,"path":132102,"seo":132103,"stem":132104,"__hash__":132105},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131461,"toc":132089},[131462,131465,131469,131495,131529,131533,131537,131540,131582,131589,131599,131607,131609,131612,131615,131618,131625,131639,131643,131646,131675,131679,131682,131696,131700,131703,131731,131735,131738,131764,131768,131773,131806,131811,131839,131843,131860,131906,131911,131955,131972,132079,132087],[10,131463,131459],{"id":131464},"_10-css规范与学成在线案例",[57,131466,131468],{"id":131467},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[69,131470,131471,131477,131483,131489],{},[72,131472,131473,131476],{},[275,131474,131475],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[72,131478,131479,131482],{},[275,131480,131481],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[72,131484,131485,131488],{},[275,131486,131487],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[72,131490,131491,131494],{},[275,131492,131493],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[106,131496,131497],{"className":126542,"code":129906,"language":126544,"meta":22,"style":22},[112,131498,131499,131503,131509,131525],{"__ignoreMap":22},[115,131500,131501],{"class":117,"line":118},[115,131502,129913],{"class":184},[115,131504,131505,131507],{"class":117,"line":37},[115,131506,51601],{"class":51290},[115,131508,15573],{"class":125},[115,131510,131511,131513,131515,131517,131519,131521,131523],{"class":117,"line":1180},[115,131512,70886],{"class":174},[115,131514,51427],{"class":125},[115,131516,343],{"class":174},[115,131518,51482],{"class":121},[115,131520,51511],{"class":174},[115,131522,129934],{"class":174},[115,131524,1291],{"class":125},[115,131526,131527],{"class":117,"line":1195},[115,131528,1565],{"class":125},[57,131530,131532],{"id":131531},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[86,131534,131536],{"id":131535},"_1021-header头部制作","10.2.1 header头部制作",[20,131538],{"style":126398,"src":131539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1132,131541,131542,131549,131556,131562,131569,131576],{},[72,131543,131544,131545,131548],{},"1号是版心盒子 ",[275,131546,131547],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[72,131550,131551,131552,131555],{},"版心盒子 里面包含 2号盒子 ",[275,131553,131554],{},"logo"," 图标",[72,131557,131558,131559,131561],{},"版心盒子 里面包含 3号盒子 ",[275,131560,53703],{}," 导航栏",[72,131563,131564,131565,131568],{},"版心盒子 里面包含 4号盒子 ",[275,131566,131567],{},"search"," 搜索框",[72,131570,131571,131572,131575],{},"版心盒子 里面包含 5号盒子 ",[275,131573,131574],{},"user"," 个人信息",[72,131577,131578,131579],{},"注意，要求里面的 ",[275,131580,131581],{},"4个子盒子 必须都浮动",[69,131583,131584],{},[72,131585,131586],{},[275,131587,131588],{},"导航栏注意点:",[14,131590,131591,131592,131595,131596],{},"实际开发中， ",[275,131593,131594],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[275,131597,131598],{},"用 li 包含链接(li+a)的做法",[1132,131600,131601,131604],{},[72,131602,131603],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[72,131605,131606],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131608,9026],{},[14,131610,131611],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131613,131614],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131616,131617],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[69,131619,131620],{"start":37},[72,131621,131622],{},[275,131623,131624],{},"4号盒子search的细节：",[1132,131626,131627,131630,131633],{},[72,131628,131629],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[72,131631,131632],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[72,131634,131635,131638],{},[112,131636,131637],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[86,131640,131642],{"id":131641},"_1022-banner制作","10.2.2 banner制作",[20,131644],{"style":126398,"src":131645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1132,131647,131648,131655,131661,131668],{},[72,131649,131650,131651,131654],{},"1号盒子是通栏的大盒子 ",[275,131652,131653],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[72,131656,131657,131658,131660],{},"2号盒子是版心 ",[275,131659,920],{}," ， 要水平居中对齐",[72,131662,131663,131664,131667],{},"3号盒子版心内，左对齐 ",[275,131665,131666],{},"subnav"," 侧导航栏",[72,131669,131670,131671,131674],{},"4号盒子版心内，右对齐 ",[275,131672,131673],{},"course"," 课程",[86,131676,131678],{"id":131677},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[20,131680],{"style":126398,"src":131681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1132,131683,131684,131687,131690,131693],{},[72,131685,131686],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[72,131688,131689],{},"1号盒子是标题 H3 左侧浮动",[72,131691,131692],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[72,131694,131695],{},"3号盒子 右浮动 mod 修改",[86,131697,131699],{"id":131698},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[20,131701],{"style":126398,"src":131702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1132,131704,131705,131711,131718,131725,131728],{},[72,131706,131707,131708,131710],{},"1号盒子为最大的盒子 ",[275,131709,53704],{}," 版心水平居中对齐",[72,131712,131713,131714,131717],{},"2号盒子为上面部分 ",[275,131715,131716],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[72,131719,131720,131721,131724],{},"3号盒子为底下部分 ",[275,131722,131723],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[72,131726,131727],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[72,131729,131730],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[86,131732,131734],{"id":131733},"_1025-底部模块制作","10.2.5 底部模块制作",[20,131736],{"style":126398,"src":131737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1132,131739,131740,131747,131750,131757],{},[72,131741,131742,131743,131746],{},"1号盒子通栏大盒子 底部 ",[275,131744,131745],{},"footer"," 给高度 底色是白色",[72,131748,131749],{},"2号盒子版心水平居中",[72,131751,131752,131753,131756],{},"3号盒子版权 ",[275,131754,131755],{},"copyright"," 左对齐",[72,131758,131759,131760,131763],{},"4号盒子 链接组 ",[275,131761,131762],{},"links"," 右对齐",[86,131765,131767],{"id":131766},"_1026-代码模块","10.2.6 代码模块",[69,131769,131770],{},[72,131771,131772],{},"html部分",[106,131774,131776],{"className":127289,"code":131775,"language":127291,"meta":22,"style":22},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[112,131777,131778],{"__ignoreMap":22},[115,131779,131780,131782,131784,131786,131788,131791,131794,131796,131799,131802,131804],{"class":117,"line":118},[115,131781,1035],{"class":125},[115,131783,27],{"class":51290},[115,131785,61047],{"class":1963},[115,131787,171],{"class":125},[115,131789,131790],{"class":230},"\"https:\u002F\u002Fexample.com\"",[115,131792,131793],{"class":1963}," target",[115,131795,171],{"class":125},[115,131797,131798],{"class":230},"\"_blank\"",[115,131800,131801],{"class":125},">链接文字\u003C\u002F",[115,131803,27],{"class":51290},[115,131805,51297],{"class":125},[69,131807,131808],{"start":37},[72,131809,131810],{},"css部分",[106,131812,131813],{"className":127289,"code":131775,"language":127291,"meta":22,"style":22},[112,131814,131815],{"__ignoreMap":22},[115,131816,131817,131819,131821,131823,131825,131827,131829,131831,131833,131835,131837],{"class":117,"line":118},[115,131818,1035],{"class":125},[115,131820,27],{"class":51290},[115,131822,61047],{"class":1963},[115,131824,171],{"class":125},[115,131826,131790],{"class":230},[115,131828,131793],{"class":1963},[115,131830,171],{"class":125},[115,131832,131798],{"class":230},[115,131834,131801],{"class":125},[115,131836,27],{"class":51290},[115,131838,51297],{"class":125},[86,131840,131842],{"id":131841},"_1027-收获","10.2.7 收获",[69,131844,131845,131848,131851,131854,131857],{},[72,131846,131847],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[72,131849,131850],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[72,131852,131853],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[72,131855,131856],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[72,131858,131859],{},"遗忘代码",[106,131861,131863],{"className":126542,"code":131862,"language":126544,"meta":22,"style":22},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[112,131864,131865,131887,131892,131902],{"__ignoreMap":22},[115,131866,131867,131869,131871,131873,131875,131877,131879,131881,131883,131885],{"class":117,"line":118},[115,131868,51601],{"class":51290},[115,131870,12436],{"class":125},[115,131872,14],{"class":51290},[115,131874,12436],{"class":125},[115,131876,10],{"class":51290},[115,131878,12436],{"class":125},[115,131880,1132],{"class":51290},[115,131882,12436],{"class":125},[115,131884,72],{"class":51290},[115,131886,15573],{"class":125},[115,131888,131889],{"class":117,"line":37},[115,131890,131891],{"class":184},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[115,131893,131894,131896,131898,131900],{"class":117,"line":1180},[115,131895,128158],{"class":174},[115,131897,51427],{"class":125},[115,131899,60859],{"class":174},[115,131901,1291],{"class":125},[115,131903,131904],{"class":117,"line":1195},[115,131905,1565],{"class":125},[69,131907,131908],{"start":1215},[72,131909,131910],{},"html引css的程序",[106,131912,131913],{"className":126542,"code":131862,"language":126544,"meta":22,"style":22},[112,131914,131915,131937,131941,131951],{"__ignoreMap":22},[115,131916,131917,131919,131921,131923,131925,131927,131929,131931,131933,131935],{"class":117,"line":118},[115,131918,51601],{"class":51290},[115,131920,12436],{"class":125},[115,131922,14],{"class":51290},[115,131924,12436],{"class":125},[115,131926,10],{"class":51290},[115,131928,12436],{"class":125},[115,131930,1132],{"class":51290},[115,131932,12436],{"class":125},[115,131934,72],{"class":51290},[115,131936,15573],{"class":125},[115,131938,131939],{"class":117,"line":37},[115,131940,131891],{"class":184},[115,131942,131943,131945,131947,131949],{"class":117,"line":1180},[115,131944,128158],{"class":174},[115,131946,51427],{"class":125},[115,131948,60859],{"class":174},[115,131950,1291],{"class":125},[115,131952,131953],{"class":117,"line":1195},[115,131954,1565],{"class":125},[69,131956,131957,131960,131963,131966,131969],{"start":1221},[72,131958,131959],{},"浮动的盒子不会有外边距合并问题",[72,131961,131962],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[72,131964,131965],{},"ctrl+g快速定位行；shift+alt多个光标",[72,131967,131968],{},"学习上方各个模块的选择器起名方法，以后就这样用",[72,131970,131971],{},"在写选择器时尽量写全一些，例如",[106,131973,131975],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},"\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",[112,131976,131977,131982,131998,132003,132018,132023,132038,132043,132058,132063],{"__ignoreMap":22},[115,131978,131979],{"class":117,"line":118},[115,131980,131981],{"class":184},"\u002F* 静态定位（默认） *\u002F\n",[115,131983,131984,131987,131989,131991,131993,131996],{"class":117,"line":37},[115,131985,131986],{"class":1963},".static",[115,131988,79797],{"class":125},[115,131990,128902],{"class":174},[115,131992,51427],{"class":125},[115,131994,131995],{"class":174},"static",[115,131997,129472],{"class":125},[115,131999,132000],{"class":117,"line":1180},[115,132001,132002],{"class":184},"\u002F* 相对定位 *\u002F\n",[115,132004,132005,132008,132010,132012,132014,132016],{"class":117,"line":1195},[115,132006,132007],{"class":1963},".relative",[115,132009,79797],{"class":125},[115,132011,128902],{"class":174},[115,132013,51427],{"class":125},[115,132015,54754],{"class":174},[115,132017,129472],{"class":125},[115,132019,132020],{"class":117,"line":1201},[115,132021,132022],{"class":184},"\u002F* 绝对定位 *\u002F\n",[115,132024,132025,132028,132030,132032,132034,132036],{"class":117,"line":1215},[115,132026,132027],{"class":1963},".absolute",[115,132029,79797],{"class":125},[115,132031,128902],{"class":174},[115,132033,51427],{"class":125},[115,132035,54821],{"class":174},[115,132037,129472],{"class":125},[115,132039,132040],{"class":117,"line":1221},[115,132041,132042],{"class":184},"\u002F* 固定定位 *\u002F\n",[115,132044,132045,132048,132050,132052,132054,132056],{"class":117,"line":1312},[115,132046,132047],{"class":1963},".fixed",[115,132049,79797],{"class":125},[115,132051,128902],{"class":174},[115,132053,51427],{"class":125},[115,132055,86223],{"class":174},[115,132057,129472],{"class":125},[115,132059,132060],{"class":117,"line":1318},[115,132061,132062],{"class":184},"\u002F* 粘性定位 *\u002F\n",[115,132064,132065,132068,132070,132072,132074,132077],{"class":117,"line":1330},[115,132066,132067],{"class":1963},".sticky",[115,132069,79797],{"class":125},[115,132071,128902],{"class":174},[115,132073,51427],{"class":125},[115,132075,132076],{"class":174},"sticky",[115,132078,129472],{"class":125},[69,132080,132081,132084],{"start":1617},[72,132082,132083],{},"一定要用好注释",[72,132085,132086],{},"浮动的盒子不会有外边距合并的问题",[5127,132088,131430],{},{"title":22,"searchDepth":37,"depth":37,"links":132090},[132091,132092],{"id":131467,"depth":37,"text":131468},{"id":131531,"depth":37,"text":131532,"children":132093},[132094,132095,132096,132097,132098,132099,132100],{"id":131535,"depth":1180,"text":131536},{"id":131641,"depth":1180,"text":131642},{"id":131677,"depth":1180,"text":131678},{"id":131698,"depth":1180,"text":131699},{"id":131733,"depth":1180,"text":131734},{"id":131766,"depth":1180,"text":131767},{"id":131841,"depth":1180,"text":131842},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131459,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132107,"title":132108,"body":132109,"description":39,"extension":40,"meta":133595,"navigation":42,"path":133596,"seo":133597,"stem":133598,"__hash__":133599},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132110,"toc":133587},[132111,132114,132118,132122,132133,132137,132154,132198,132231,132234,132251,132254,132257,132301,132305,132309,132312,132315,132319,132322,132333,132396,132437,132440,132455,132509,132517,132520,132531,132585,132611,132614,132627,132681,132713,132767,132790,132844,132847,132850,132857,132911,132932,132986,132989,132992,133077,133085,133142,133165,133169,133172,133190,133194,133213,133267,133305,133309,133312,133315,133337,133341,133349,133352,133357,133368,133371,133375,133389,133433,133436,133440,133443,133448,133474,133479,133556,133559,133563,133566,133569,133572,133575,133578,133581,133584],[10,132112,132108],{"id":132113},"_11-传统布局与定位体系",[57,132115,132117],{"id":132116},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[86,132119,132121],{"id":132120},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1132,132123,132124,132127,132130],{},[72,132125,132126],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[72,132128,132129],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[72,132131,132132],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[86,132134,132136],{"id":132135},"_1112-浮动","11.1.2 浮动",[1132,132138,132139,132142,132145,132148,132151],{},[72,132140,132141],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[72,132143,132144],{},"浮动可以改变元素标签默认的排列方式",[72,132146,132147],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[72,132149,132150],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[72,132152,132153],{},"在使用行内块转换时盒子之间是有空隙的",[106,132155,132156],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,132157,132158,132164,132174,132178,132184,132194],{"__ignoreMap":22},[115,132159,132160,132162],{"class":117,"line":118},[115,132161,131015],{"class":1963},[115,132163,15573],{"class":125},[115,132165,132166,132168,132170,132172],{"class":117,"line":37},[115,132167,131022],{"class":174},[115,132169,51427],{"class":125},[115,132171,23737],{"class":174},[115,132173,1291],{"class":125},[115,132175,132176],{"class":117,"line":1180},[115,132177,1565],{"class":125},[115,132179,132180,132182],{"class":117,"line":1195},[115,132181,131037],{"class":1963},[115,132183,15573],{"class":125},[115,132185,132186,132188,132190,132192],{"class":117,"line":1201},[115,132187,131022],{"class":174},[115,132189,51427],{"class":125},[115,132191,72512],{"class":174},[115,132193,1291],{"class":125},[115,132195,132196],{"class":117,"line":1215},[115,132197,1565],{"class":125},[263,132199,132200,132208],{},[266,132201,132202],{},[269,132203,132204,132206],{},[272,132205,127006],{"align":23737},[272,132207,27490],{"align":23737},[310,132209,132210,132217,132224],{},[269,132211,132212,132214],{},[315,132213,54727],{"align":23737},[315,132215,132216],{"align":23737},"元素不浮动（默认值）",[269,132218,132219,132221],{},[315,132220,23737],{"align":23737},[315,132222,132223],{"align":23737},"元素向左浮动",[269,132225,132226,132228],{},[315,132227,72512],{"align":23737},[315,132229,132230],{"align":23737},"元素向右浮动",[14,132232,132233],{},"浮动重点：",[1132,132235,132236,132239,132242,132245,132248],{},[72,132237,132238],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[72,132240,132241],{},"浮动的元素会一行内显示并且元素顶部对齐",[72,132243,132244],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[72,132246,132247],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[72,132249,132250],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132252,132253],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132255,132256],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[106,132258,132259],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,132260,132261,132267,132277,132281,132287,132297],{"__ignoreMap":22},[115,132262,132263,132265],{"class":117,"line":118},[115,132264,131015],{"class":1963},[115,132266,15573],{"class":125},[115,132268,132269,132271,132273,132275],{"class":117,"line":37},[115,132270,131022],{"class":174},[115,132272,51427],{"class":125},[115,132274,23737],{"class":174},[115,132276,1291],{"class":125},[115,132278,132279],{"class":117,"line":1180},[115,132280,1565],{"class":125},[115,132282,132283,132285],{"class":117,"line":1195},[115,132284,131037],{"class":1963},[115,132286,15573],{"class":125},[115,132288,132289,132291,132293,132295],{"class":117,"line":1201},[115,132290,131022],{"class":174},[115,132292,51427],{"class":125},[115,132294,72512],{"class":174},[115,132296,1291],{"class":125},[115,132298,132299],{"class":117,"line":1215},[115,132300,1565],{"class":125},[86,132302,132304],{"id":132303},"_1113-定位","11.1.3 定位",[21999,132306,132308],{"id":132307},"_11131-使用场景","11.1.3.1 使用场景",[14,132310,132311],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132313,132314],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21999,132316,132318],{"id":132317},"_11132-定位组成","11.1.3.2 定位组成",[14,132320,132321],{},"定位 = 定位模式 + 边偏移",[69,132323,132324],{},[72,132325,132326,132329,132330],{},[275,132327,132328],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[275,132331,132332],{},"定位模式",[106,132334,132336],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[112,132337,132338,132344,132358,132375,132392],{"__ignoreMap":22},[115,132339,132340,132342],{"class":117,"line":118},[115,132341,130390],{"class":1963},[115,132343,15573],{"class":125},[115,132345,132346,132349,132351,132353,132355],{"class":117,"line":37},[115,132347,132348],{"class":174},"  position",[115,132350,51427],{"class":125},[115,132352,54754],{"class":174},[115,132354,130405],{"class":125},[115,132356,132357],{"class":184},"\u002F* 定位模式 *\u002F\n",[115,132359,132360,132363,132365,132367,132369,132372],{"class":117,"line":1180},[115,132361,132362],{"class":174},"  top",[115,132364,51427],{"class":125},[115,132366,571],{"class":174},[115,132368,51482],{"class":121},[115,132370,132371],{"class":125},";           ",[115,132373,132374],{"class":184},"\u002F* 边偏移：上 *\u002F\n",[115,132376,132377,132380,132382,132384,132386,132389],{"class":117,"line":1195},[115,132378,132379],{"class":174},"  left",[115,132381,51427],{"class":125},[115,132383,825],{"class":174},[115,132385,51482],{"class":121},[115,132387,132388],{"class":125},";          ",[115,132390,132391],{"class":184},"\u002F* 边偏移：左 *\u002F\n",[115,132393,132394],{"class":117,"line":1201},[115,132395,1565],{"class":125},[263,132397,132398,132407],{},[266,132399,132400],{},[269,132401,132402,132404],{},[272,132403,278],{"align":23737},[272,132405,132406],{"align":23737},"语义",[310,132408,132409,132416,132423,132430],{},[269,132410,132411,132413],{},[315,132412,131995],{"align":23737},[315,132414,132415],{"align":23737},"静态定位",[269,132417,132418,132420],{},[315,132419,54754],{"align":23737},[315,132421,132422],{"align":23737},"相对定位",[269,132424,132425,132427],{},[315,132426,54821],{"align":23737},[315,132428,132429],{"align":23737},"绝对定位",[269,132431,132432,132434],{},[315,132433,86223],{"align":23737},[315,132435,132436],{"align":23737},"固定定位",[14,132438,132439],{},"（1）静态定位：",[1132,132441,132442,132453],{},[72,132443,132444,132445,132448,132449,132452],{},"静态定位是元素的 ",[275,132446,132447],{},"默认定位方式"," ， ",[275,132450,132451],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[72,132454,5182],{},[106,132456,132457],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132458,132459,132465,132477,132491,132505],{"__ignoreMap":22},[115,132460,132461,132463],{"class":117,"line":118},[115,132462,130390],{"class":1963},[115,132464,15573],{"class":125},[115,132466,132467,132469,132471,132473,132475],{"class":117,"line":37},[115,132468,132348],{"class":174},[115,132470,51427],{"class":125},[115,132472,54754],{"class":174},[115,132474,130405],{"class":125},[115,132476,132357],{"class":184},[115,132478,132479,132481,132483,132485,132487,132489],{"class":117,"line":1180},[115,132480,132362],{"class":174},[115,132482,51427],{"class":125},[115,132484,571],{"class":174},[115,132486,51482],{"class":121},[115,132488,132371],{"class":125},[115,132490,132374],{"class":184},[115,132492,132493,132495,132497,132499,132501,132503],{"class":117,"line":1195},[115,132494,132379],{"class":174},[115,132496,51427],{"class":125},[115,132498,825],{"class":174},[115,132500,51482],{"class":121},[115,132502,132388],{"class":125},[115,132504,132391],{"class":184},[115,132506,132507],{"class":117,"line":1201},[115,132508,1565],{"class":125},[1132,132510,132511,132514],{},[72,132512,132513],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[72,132515,132516],{},"静态定位在布局时我们几乎不用的",[14,132518,132519],{},"（2）相对定位",[1132,132521,132522,132529],{},[72,132523,132524,132525,132528],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[275,132526,132527],{},"原来的位置"," 来说的（自恋型）",[72,132530,5182],{},[106,132532,132533],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132534,132535,132541,132553,132567,132581],{"__ignoreMap":22},[115,132536,132537,132539],{"class":117,"line":118},[115,132538,130390],{"class":1963},[115,132540,15573],{"class":125},[115,132542,132543,132545,132547,132549,132551],{"class":117,"line":37},[115,132544,132348],{"class":174},[115,132546,51427],{"class":125},[115,132548,54754],{"class":174},[115,132550,130405],{"class":125},[115,132552,132357],{"class":184},[115,132554,132555,132557,132559,132561,132563,132565],{"class":117,"line":1180},[115,132556,132362],{"class":174},[115,132558,51427],{"class":125},[115,132560,571],{"class":174},[115,132562,51482],{"class":121},[115,132564,132371],{"class":125},[115,132566,132374],{"class":184},[115,132568,132569,132571,132573,132575,132577,132579],{"class":117,"line":1195},[115,132570,132379],{"class":174},[115,132572,51427],{"class":125},[115,132574,825],{"class":174},[115,132576,51482],{"class":121},[115,132578,132388],{"class":125},[115,132580,132391],{"class":184},[115,132582,132583],{"class":117,"line":1201},[115,132584,1565],{"class":125},[1132,132586,132587],{},[72,132588,132589,132590,132592,132593,132595,132596,132599,132600,132603,132604,132606,132607,132610],{},"相对定位的特点：",[53706,132591],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53706,132594],{},"  ② ",[275,132597,132598],{},"原来"," 在标准流的 ",[275,132601,132602],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53706,132605],{},"  ③因此， ",[275,132608,132609],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132612,132613],{},"（3）绝对定位",[1132,132615,132616,132625],{},[72,132617,132618,132620,132621,132624],{},[275,132619,132429],{}," 是元素在移动位置的时候，是相对于它 ",[275,132622,132623],{},"祖先元素"," 来说的（拼爹型）",[72,132626,5182],{},[106,132628,132629],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132630,132631,132637,132649,132663,132677],{"__ignoreMap":22},[115,132632,132633,132635],{"class":117,"line":118},[115,132634,130390],{"class":1963},[115,132636,15573],{"class":125},[115,132638,132639,132641,132643,132645,132647],{"class":117,"line":37},[115,132640,132348],{"class":174},[115,132642,51427],{"class":125},[115,132644,54754],{"class":174},[115,132646,130405],{"class":125},[115,132648,132357],{"class":184},[115,132650,132651,132653,132655,132657,132659,132661],{"class":117,"line":1180},[115,132652,132362],{"class":174},[115,132654,51427],{"class":125},[115,132656,571],{"class":174},[115,132658,51482],{"class":121},[115,132660,132371],{"class":125},[115,132662,132374],{"class":184},[115,132664,132665,132667,132669,132671,132673,132675],{"class":117,"line":1195},[115,132666,132379],{"class":174},[115,132668,51427],{"class":125},[115,132670,825],{"class":174},[115,132672,51482],{"class":121},[115,132674,132388],{"class":125},[115,132676,132391],{"class":184},[115,132678,132679],{"class":117,"line":1201},[115,132680,1565],{"class":125},[1132,132682,132683,132698,132707,132710],{},[72,132684,132685,132686,132688,132689,132691,132692,132694,132695,132697],{},"绝对定位的特点：",[53706,132687],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53706,132690],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53706,132693],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53706,132696],{},"  (4)固定定位",[72,132699,132700,132702,132703,132706],{},[275,132701,132436],{}," 是元素 ",[275,132704,132705],{},"固定于浏览器可视区的位置"," 。（认死理型）",[72,132708,132709],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[72,132711,132712],{},"语法:",[106,132714,132715],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132716,132717,132723,132735,132749,132763],{"__ignoreMap":22},[115,132718,132719,132721],{"class":117,"line":118},[115,132720,130390],{"class":1963},[115,132722,15573],{"class":125},[115,132724,132725,132727,132729,132731,132733],{"class":117,"line":37},[115,132726,132348],{"class":174},[115,132728,51427],{"class":125},[115,132730,54754],{"class":174},[115,132732,130405],{"class":125},[115,132734,132357],{"class":184},[115,132736,132737,132739,132741,132743,132745,132747],{"class":117,"line":1180},[115,132738,132362],{"class":174},[115,132740,51427],{"class":125},[115,132742,571],{"class":174},[115,132744,51482],{"class":121},[115,132746,132371],{"class":125},[115,132748,132374],{"class":184},[115,132750,132751,132753,132755,132757,132759,132761],{"class":117,"line":1195},[115,132752,132379],{"class":174},[115,132754,51427],{"class":125},[115,132756,825],{"class":174},[115,132758,51482],{"class":121},[115,132760,132388],{"class":125},[115,132762,132391],{"class":184},[115,132764,132765],{"class":117,"line":1201},[115,132766,1565],{"class":125},[1132,132768,132769,132778],{},[72,132770,132771,132772,132774,132775,132777],{},"特点:",[53706,132773],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53706,132776],{},"  ②固定定位不再占有原先的位置,完全脱标",[72,132779,132780,132781,132783,132784,132786,132787,132789],{},"固定在版心位置的方法:",[53706,132782],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53706,132785],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53706,132788],{},"  实例：",[106,132791,132792],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132793,132794,132800,132812,132826,132840],{"__ignoreMap":22},[115,132795,132796,132798],{"class":117,"line":118},[115,132797,130390],{"class":1963},[115,132799,15573],{"class":125},[115,132801,132802,132804,132806,132808,132810],{"class":117,"line":37},[115,132803,132348],{"class":174},[115,132805,51427],{"class":125},[115,132807,54754],{"class":174},[115,132809,130405],{"class":125},[115,132811,132357],{"class":184},[115,132813,132814,132816,132818,132820,132822,132824],{"class":117,"line":1180},[115,132815,132362],{"class":174},[115,132817,51427],{"class":125},[115,132819,571],{"class":174},[115,132821,51482],{"class":121},[115,132823,132371],{"class":125},[115,132825,132374],{"class":184},[115,132827,132828,132830,132832,132834,132836,132838],{"class":117,"line":1195},[115,132829,132379],{"class":174},[115,132831,51427],{"class":125},[115,132833,825],{"class":174},[115,132835,51482],{"class":121},[115,132837,132388],{"class":125},[115,132839,132391],{"class":184},[115,132841,132842],{"class":117,"line":1201},[115,132843,1565],{"class":125},[20,132845],{"style":126398,"src":132846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132848,132849],{},"(5)粘性定位",[1132,132851,132852,132855],{},[72,132853,132854],{},"粘性定位可以被认为是相对定位和固定定位的混合",[72,132856,5182],{},[106,132858,132859],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132860,132861,132867,132879,132893,132907],{"__ignoreMap":22},[115,132862,132863,132865],{"class":117,"line":118},[115,132864,130390],{"class":1963},[115,132866,15573],{"class":125},[115,132868,132869,132871,132873,132875,132877],{"class":117,"line":37},[115,132870,132348],{"class":174},[115,132872,51427],{"class":125},[115,132874,54754],{"class":174},[115,132876,130405],{"class":125},[115,132878,132357],{"class":184},[115,132880,132881,132883,132885,132887,132889,132891],{"class":117,"line":1180},[115,132882,132362],{"class":174},[115,132884,51427],{"class":125},[115,132886,571],{"class":174},[115,132888,51482],{"class":121},[115,132890,132371],{"class":125},[115,132892,132374],{"class":184},[115,132894,132895,132897,132899,132901,132903,132905],{"class":117,"line":1195},[115,132896,132379],{"class":174},[115,132898,51427],{"class":125},[115,132900,825],{"class":174},[115,132902,51482],{"class":121},[115,132904,132388],{"class":125},[115,132906,132391],{"class":184},[115,132908,132909],{"class":117,"line":1201},[115,132910,1565],{"class":125},[1132,132912,132913],{},[72,132914,132915,132916,132918,132919,132921,132922,132924,132925,132928,132929,132931],{},"粘性定位的特点：",[53706,132917],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53706,132920],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53706,132923],{},"  ③必须添加 top 、left、right、bottom ",[275,132926,132927],{},"其中一个"," 才有效",[53706,132930],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[106,132933,132934],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,132935,132936,132942,132954,132968,132982],{"__ignoreMap":22},[115,132937,132938,132940],{"class":117,"line":118},[115,132939,130390],{"class":1963},[115,132941,15573],{"class":125},[115,132943,132944,132946,132948,132950,132952],{"class":117,"line":37},[115,132945,132348],{"class":174},[115,132947,51427],{"class":125},[115,132949,54754],{"class":174},[115,132951,130405],{"class":125},[115,132953,132357],{"class":184},[115,132955,132956,132958,132960,132962,132964,132966],{"class":117,"line":1180},[115,132957,132362],{"class":174},[115,132959,51427],{"class":125},[115,132961,571],{"class":174},[115,132963,51482],{"class":121},[115,132965,132371],{"class":125},[115,132967,132374],{"class":184},[115,132969,132970,132972,132974,132976,132978,132980],{"class":117,"line":1195},[115,132971,132379],{"class":174},[115,132973,51427],{"class":125},[115,132975,825],{"class":174},[115,132977,51482],{"class":121},[115,132979,132388],{"class":125},[115,132981,132391],{"class":184},[115,132983,132984],{"class":117,"line":1201},[115,132985,1565],{"class":125},[20,132987],{"style":126398,"src":132988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132990,132991],{},"(6)总结",[263,132993,132994,133009],{},[266,132995,132996],{},[269,132997,132998,133000,133003,133006],{},[272,132999,132332],{"align":23737},[272,133001,133002],{"align":23737},"是否脱标",[272,133004,133005],{"align":23737},"移动位置",[272,133007,133008],{"align":23737},"是否常用",[310,133010,133011,133024,133038,133052,133065],{},[269,133012,133013,133016,133018,133021],{},[315,133014,133015],{"align":23737},"Static 静态定位",[315,133017,104668],{"align":23737},[315,133019,133020],{"align":23737},"不能使用边偏移",[315,133022,133023],{"align":23737},"很少",[269,133025,133026,133029,133032,133035],{},[315,133027,133028],{"align":23737},"Relative 相对定位",[315,133030,133031],{"align":23737},"否(占有位置)",[315,133033,133034],{"align":23737},"相对于自身位置移动",[315,133036,133037],{"align":23737},"基本单独使用",[269,133039,133040,133043,133046,133049],{},[315,133041,133042],{"align":23737},"Absolute 绝对定位",[315,133044,133045],{"align":23737},"是(不占有位置)",[315,133047,133048],{"align":23737},"带有定位的父级",[315,133050,133051],{"align":23737},"要和定位父级元素搭配使用",[269,133053,133054,133057,133059,133062],{},[315,133055,133056],{"align":23737},"Fixed 固定定位",[315,133058,133045],{"align":23737},[315,133060,133061],{"align":23737},"浏览器可视区",[315,133063,133064],{"align":23737},"单独使用,不需要父级",[269,133066,133067,133070,133072,133074],{},[315,133068,133069],{"align":23737},"Sticky 粘性定位",[315,133071,133031],{"align":23737},[315,133073,133061],{"align":23737},[315,133075,133076],{"align":23737},"当前阶段少",[69,133078,133079],{"start":37},[72,133080,133081,133084],{},[275,133082,133083],{},"边偏移"," 则决定了该元素的最终位置",[263,133086,133087,133098],{},[266,133088,133089],{},[269,133090,133091,133094,133096],{},[272,133092,133093],{"align":23737},"边偏移属性",[272,133095,27493],{"align":23737},[272,133097,27490],{"align":23737},[310,133099,133100,133111,133122,133132],{},[269,133101,133102,133105,133108],{},[315,133103,133104],{"align":23737},"top",[315,133106,133107],{"align":23737},"top: 80px;",[315,133109,133110],{"align":23737},"顶端偏移量，定义元素相对于父元素上边线的距离",[269,133112,133113,133116,133119],{},[315,133114,133115],{"align":23737},"bottom",[315,133117,133118],{"align":23737},"bottom: 80px ;",[315,133120,133121],{"align":23737},"底部偏移量，定义元素相对于其父元素下边线的距离",[269,133123,133124,133126,133129],{},[315,133125,23737],{"align":23737},[315,133127,133128],{"align":23737},"left: 80px ;",[315,133130,133131],{"align":23737},"左侧偏移量，定义元素相对于其父元素左边线的距离",[269,133133,133134,133136,133139],{},[315,133135,72512],{"align":23737},[315,133137,133138],{"align":23737},"right: 80px ;",[315,133140,133141],{"align":23737},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1132,133143,133144],{},[72,133145,9026,133146,133148,133149,133151,133152,133154,133155,133158,133159,133161,133162,133164],{},[53706,133147],{},"  ① ",[275,133150,133083],{}," 需要和 ",[275,133153,132332],{}," 联合使用， ",[275,133156,133157],{},"单独使用无效"," ；",[53706,133160],{},"  ②top和bottom不要同时使用",[53706,133163],{},"  ③left和right不要同时使用",[21999,133166,133168],{"id":133167},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133170,133171],{},"子级是绝对定位的话，父级要用相对定位",[1132,133173,133174,133177,133180,133183],{},[72,133175,133176],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[72,133178,133179],{},"父盒子需要加定位限制子盒子在父盒子内显示",[72,133181,133182],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[72,133184,133185,133186,133189],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[275,133187,133188],{},"子绝父绝"," 也会遇到",[21999,133191,133193],{"id":133192},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1132,133195,133196,133211],{},[72,133197,133198,133199,133202,133203,133206,133207,133210],{},"在使用 ",[275,133200,133201],{},"定位"," 布局时，可能会 ",[275,133204,133205],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[275,133208,133209],{},"z-index"," 来控制盒子的前后次序 (z轴)",[72,133212,5182],{},[106,133214,133215],{"className":126542,"code":132335,"language":126544,"meta":22,"style":22},[112,133216,133217,133223,133235,133249,133263],{"__ignoreMap":22},[115,133218,133219,133221],{"class":117,"line":118},[115,133220,130390],{"class":1963},[115,133222,15573],{"class":125},[115,133224,133225,133227,133229,133231,133233],{"class":117,"line":37},[115,133226,132348],{"class":174},[115,133228,51427],{"class":125},[115,133230,54754],{"class":174},[115,133232,130405],{"class":125},[115,133234,132357],{"class":184},[115,133236,133237,133239,133241,133243,133245,133247],{"class":117,"line":1180},[115,133238,132362],{"class":174},[115,133240,51427],{"class":125},[115,133242,571],{"class":174},[115,133244,51482],{"class":121},[115,133246,132371],{"class":125},[115,133248,132374],{"class":184},[115,133250,133251,133253,133255,133257,133259,133261],{"class":117,"line":1195},[115,133252,132379],{"class":174},[115,133254,51427],{"class":125},[115,133256,825],{"class":174},[115,133258,51482],{"class":121},[115,133260,132388],{"class":125},[115,133262,132391],{"class":184},[115,133264,133265],{"class":117,"line":1201},[115,133266,1565],{"class":125},[1132,133268,133269],{},[72,133270,133271,133272,133148,133274,133276,133277,127705,133280,82529,133283,133285,133286,133288,133289,133292,133293,133158,133296,133298,133299,133302,133304],{},"z-index的特性",[53706,133273],{},[275,133275,127006],{}," ： ",[275,133278,133279],{},"正整数",[275,133281,133282],{},"负整数",[275,133284,317],{}," ，默认值是 0，数值越大，盒子越靠上；",[53706,133287],{},"  ②如果 ",[275,133290,133291],{},"属性值相同"," ，则按照书写顺序， ",[275,133294,133295],{},"后来居上",[53706,133297],{},"  ③数字后面 ",[275,133300,133301],{},"不能加单位",[53706,133303],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21999,133306,133308],{"id":133307},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133310,133311],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133313,133314],{},"方法:",[1132,133316,133317,133327],{},[72,133318,133319,133320,133323,133324],{},"left: 50%; 让 ",[275,133321,133322],{},"盒子的左侧"," 移动到 ",[275,133325,133326],{},"父级元素的水平中心位置",[72,133328,133329,133330,133333,133334],{},"margin-left: -100px; 让盒子 ",[275,133331,133332],{},"向左"," 移动 ",[275,133335,133336],{},"自身宽度的一半",[21999,133338,133340],{"id":133339},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[69,133342,133343,133346],{},[72,133344,133345],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[72,133347,133348],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133350,133351],{},"也就是说绝对定位和固定定位和浮动类似",[69,133353,133354],{"start":1180},[72,133355,133356],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1132,133358,133359,133362,133365],{},[72,133360,133361],{},"可以用inline-block 转换为行内块",[72,133363,133364],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[72,133366,133367],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133369,133370],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21999,133372,133374],{"id":133373},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[69,133376,133377,133380,133383,133386],{},[72,133378,133379],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[72,133381,133382],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[72,133384,133385],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[72,133387,133388],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[106,133390,133391],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,133392,133393,133399,133409,133413,133419,133429],{"__ignoreMap":22},[115,133394,133395,133397],{"class":117,"line":118},[115,133396,131015],{"class":1963},[115,133398,15573],{"class":125},[115,133400,133401,133403,133405,133407],{"class":117,"line":37},[115,133402,131022],{"class":174},[115,133404,51427],{"class":125},[115,133406,23737],{"class":174},[115,133408,1291],{"class":125},[115,133410,133411],{"class":117,"line":1180},[115,133412,1565],{"class":125},[115,133414,133415,133417],{"class":117,"line":1195},[115,133416,131037],{"class":1963},[115,133418,15573],{"class":125},[115,133420,133421,133423,133425,133427],{"class":117,"line":1201},[115,133422,131022],{"class":174},[115,133424,51427],{"class":125},[115,133426,72512],{"class":174},[115,133428,1291],{"class":125},[115,133430,133431],{"class":117,"line":1215},[115,133432,1565],{"class":125},[20,133434],{"style":126398,"src":133435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21999,133437,133439],{"id":133438},"_11138-轮播图","11.1.3.8 轮播图",[20,133441],{"style":126398,"src":133442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[69,133444,133445],{},[72,133446,133447],{},"制作顺序:",[1132,133449,133450,133453,133456,133465],{},[72,133451,133452],{},"大盒子我们类名为： tb-promo 淘宝广告",[72,133454,133455],{},"里面先放一张图片",[72,133457,133458,133459,133461,133462,133464],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53706,133460],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53706,133463],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[72,133466,133467,133468,133470,133471,133473],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53706,133469],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53706,133472],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[69,133475,133476],{"start":37},[72,133477,133478],{},"代码模块",[106,133480,133482],{"className":126542,"code":133481,"language":126544,"meta":22,"style":22},"\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",[112,133483,133484,133489,133496,133506,133516,133526,133530,133535,133542,133552],{"__ignoreMap":22},[115,133485,133486],{"class":117,"line":118},[115,133487,133488],{"class":184},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[115,133490,133491,133494],{"class":117,"line":37},[115,133492,133493],{"class":1963},".son",[115,133495,15573],{"class":125},[115,133497,133498,133500,133502,133504],{"class":117,"line":1180},[115,133499,132348],{"class":174},[115,133501,51427],{"class":125},[115,133503,54821],{"class":174},[115,133505,1291],{"class":125},[115,133507,133508,133510,133512,133514],{"class":117,"line":1195},[115,133509,132362],{"class":174},[115,133511,51427],{"class":125},[115,133513,317],{"class":174},[115,133515,1291],{"class":125},[115,133517,133518,133520,133522,133524],{"class":117,"line":1201},[115,133519,132379],{"class":174},[115,133521,51427],{"class":125},[115,133523,317],{"class":174},[115,133525,1291],{"class":125},[115,133527,133528],{"class":117,"line":1215},[115,133529,1565],{"class":125},[115,133531,133532],{"class":117,"line":1221},[115,133533,133534],{"class":184},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[115,133536,133537,133540],{"class":117,"line":1312},[115,133538,133539],{"class":1963},".father",[115,133541,15573],{"class":125},[115,133543,133544,133546,133548,133550],{"class":117,"line":1318},[115,133545,132348],{"class":174},[115,133547,51427],{"class":125},[115,133549,54754],{"class":174},[115,133551,1291],{"class":125},[115,133553,133554],{"class":117,"line":1330},[115,133555,1565],{"class":125},[14,133557,133558],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[86,133560,133562],{"id":133561},"_1114-定位数值的移动","11.1.4 定位数值的移动",[20,133564],{"style":126398,"src":133565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133567,133568],{},"✨ 黄金口诀：",[14,133570,133571],{},"\"TOP正下负上，LEFT正右负左\"",[14,133573,133574],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133576,133577],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133579,133580],{},"✨ 简单记：",[14,133582,133583],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5127,133585,133586],{},"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":22,"searchDepth":37,"depth":37,"links":133588},[133589],{"id":132116,"depth":37,"text":132117,"children":133590},[133591,133592,133593,133594],{"id":132120,"depth":1180,"text":132121},{"id":132135,"depth":1180,"text":132136},{"id":132303,"depth":1180,"text":132304},{"id":133561,"depth":1180,"text":133562},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132108,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133601,"title":133602,"body":133603,"description":39,"extension":40,"meta":135026,"navigation":42,"path":135027,"seo":135028,"stem":135029,"__hash__":135030},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133604,"toc":135005},[133605,133608,133612,133620,133624,133629,133637,133649,133653,133658,133666,133677,133681,133686,133727,133735,133739,133742,133745,133748,133842,133845,133939,133942,134036,134039,134042,134077,134080,134083,134113,134116,134119,134122,134125,134128,134131,134134,134204,134207,134211,134215,134256,134260,134266,134269,134272,134276,134279,134282,134285,134366,134369,134372,134376,134380,134383,134386,134389,134392,134395,134401,134410,134414,134433,134437,134447,134450,134453,134456,134459,134462,134465,134468,134471,134480,134484,134493,134496,134501,134554,134559,134725,134728,134731,134736,134739,134742,134745,134748,134753,134901,134904,134907,134912,134915,134920,134954,134957,134960,134964,134967,134974,134977,134980,134983,134986,134989,134992,134995,134999,135002],[10,133606,133602],{"id":133607},"_12-显示隐藏与图形资源",[57,133609,133611],{"id":133610},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1132,133613,133614,133617],{},[72,133615,133616],{},"目的:让一个元素在页面中消失或者显示出来",[72,133618,133619],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[86,133621,133623],{"id":133622},"_1211-display-显示","12.1.1 display 显示",[69,133625,133626],{},[72,133627,133628],{},"display 设置或检索对象是否及如何显示",[1132,133630,133631,133634],{},[72,133632,133633],{},"display: none;隐藏对象",[72,133635,133636],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[69,133638,133639,133646],{"start":37},[72,133640,133641,133642,133645],{},"特点： display 隐藏元素后， ",[275,133643,133644],{},"不再占"," 有原来的位置",[72,133647,133648],{},"在js中使用非常的广泛",[86,133650,133652],{"id":133651},"_1212-visibility可见性","12.1.2 visibility可见性",[69,133654,133655],{},[72,133656,133657],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1132,133659,133660,133663],{},[72,133661,133662],{},"visibility： visible；元素可见",[72,133664,133665],{},"visibility：hidden；元素隐藏",[69,133667,133668,133671,133674],{"start":37},[72,133669,133670],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[72,133672,133673],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[72,133675,133676],{},"隐藏后继续占有原有位置",[86,133678,133680],{"id":133679},"_1213-overflow溢出","12.1.3 overflow溢出",[1132,133682,133683],{},[72,133684,133685],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[263,133687,133688,133696],{},[266,133689,133690],{},[269,133691,133692,133694],{},[272,133693,127006],{"align":23737},[272,133695,27490],{"align":23737},[310,133697,133698,133706,133713,133720],{},[269,133699,133700,133703],{},[315,133701,133702],{"align":23737},"visible",[315,133704,133705],{"align":23737},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[269,133707,133708,133710],{},[315,133709,61704],{"align":23737},[315,133711,133712],{"align":23737},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[269,133714,133715,133717],{},[315,133716,128962],{"align":23737},[315,133718,133719],{"align":23737},"不管超出内容否，总是显示滚动条",[269,133721,133722,133724],{},[315,133723,72653],{"align":23737},[315,133725,133726],{"align":23737},"超出自动显示滚动条，不超出不显示滚动条",[1132,133728,133729,133732],{},[72,133730,133731],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[72,133733,133734],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[86,133736,133738],{"id":133737},"_1214-案例收获","12.1.4 案例收获",[20,133740],{"style":126398,"src":133741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133743,133744],{},"问题：没做出来动态效果，使用hover没实现",[14,133746,133747],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[106,133749,133750],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,133751,133752,133756,133770,133774,133788,133792,133806,133810,133824,133828],{"__ignoreMap":22},[115,133753,133754],{"class":117,"line":118},[115,133755,131981],{"class":184},[115,133757,133758,133760,133762,133764,133766,133768],{"class":117,"line":37},[115,133759,131986],{"class":1963},[115,133761,79797],{"class":125},[115,133763,128902],{"class":174},[115,133765,51427],{"class":125},[115,133767,131995],{"class":174},[115,133769,129472],{"class":125},[115,133771,133772],{"class":117,"line":1180},[115,133773,132002],{"class":184},[115,133775,133776,133778,133780,133782,133784,133786],{"class":117,"line":1195},[115,133777,132007],{"class":1963},[115,133779,79797],{"class":125},[115,133781,128902],{"class":174},[115,133783,51427],{"class":125},[115,133785,54754],{"class":174},[115,133787,129472],{"class":125},[115,133789,133790],{"class":117,"line":1201},[115,133791,132022],{"class":184},[115,133793,133794,133796,133798,133800,133802,133804],{"class":117,"line":1215},[115,133795,132027],{"class":1963},[115,133797,79797],{"class":125},[115,133799,128902],{"class":174},[115,133801,51427],{"class":125},[115,133803,54821],{"class":174},[115,133805,129472],{"class":125},[115,133807,133808],{"class":117,"line":1221},[115,133809,132042],{"class":184},[115,133811,133812,133814,133816,133818,133820,133822],{"class":117,"line":1312},[115,133813,132047],{"class":1963},[115,133815,79797],{"class":125},[115,133817,128902],{"class":174},[115,133819,51427],{"class":125},[115,133821,86223],{"class":174},[115,133823,129472],{"class":125},[115,133825,133826],{"class":117,"line":1318},[115,133827,132062],{"class":184},[115,133829,133830,133832,133834,133836,133838,133840],{"class":117,"line":1330},[115,133831,132067],{"class":1963},[115,133833,79797],{"class":125},[115,133835,128902],{"class":174},[115,133837,51427],{"class":125},[115,133839,132076],{"class":174},[115,133841,129472],{"class":125},[14,133843,133844],{},"完整代码：",[106,133846,133847],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,133848,133849,133853,133867,133871,133885,133889,133903,133907,133921,133925],{"__ignoreMap":22},[115,133850,133851],{"class":117,"line":118},[115,133852,131981],{"class":184},[115,133854,133855,133857,133859,133861,133863,133865],{"class":117,"line":37},[115,133856,131986],{"class":1963},[115,133858,79797],{"class":125},[115,133860,128902],{"class":174},[115,133862,51427],{"class":125},[115,133864,131995],{"class":174},[115,133866,129472],{"class":125},[115,133868,133869],{"class":117,"line":1180},[115,133870,132002],{"class":184},[115,133872,133873,133875,133877,133879,133881,133883],{"class":117,"line":1195},[115,133874,132007],{"class":1963},[115,133876,79797],{"class":125},[115,133878,128902],{"class":174},[115,133880,51427],{"class":125},[115,133882,54754],{"class":174},[115,133884,129472],{"class":125},[115,133886,133887],{"class":117,"line":1201},[115,133888,132022],{"class":184},[115,133890,133891,133893,133895,133897,133899,133901],{"class":117,"line":1215},[115,133892,132027],{"class":1963},[115,133894,79797],{"class":125},[115,133896,128902],{"class":174},[115,133898,51427],{"class":125},[115,133900,54821],{"class":174},[115,133902,129472],{"class":125},[115,133904,133905],{"class":117,"line":1221},[115,133906,132042],{"class":184},[115,133908,133909,133911,133913,133915,133917,133919],{"class":117,"line":1312},[115,133910,132047],{"class":1963},[115,133912,79797],{"class":125},[115,133914,128902],{"class":174},[115,133916,51427],{"class":125},[115,133918,86223],{"class":174},[115,133920,129472],{"class":125},[115,133922,133923],{"class":117,"line":1318},[115,133924,132062],{"class":184},[115,133926,133927,133929,133931,133933,133935,133937],{"class":117,"line":1330},[115,133928,132067],{"class":1963},[115,133930,79797],{"class":125},[115,133932,128902],{"class":174},[115,133934,51427],{"class":125},[115,133936,132076],{"class":174},[115,133938,129472],{"class":125},[14,133940,133941],{},"分布思路重点详解：",[106,133943,133944],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,133945,133946,133950,133964,133968,133982,133986,134000,134004,134018,134022],{"__ignoreMap":22},[115,133947,133948],{"class":117,"line":118},[115,133949,131981],{"class":184},[115,133951,133952,133954,133956,133958,133960,133962],{"class":117,"line":37},[115,133953,131986],{"class":1963},[115,133955,79797],{"class":125},[115,133957,128902],{"class":174},[115,133959,51427],{"class":125},[115,133961,131995],{"class":174},[115,133963,129472],{"class":125},[115,133965,133966],{"class":117,"line":1180},[115,133967,132002],{"class":184},[115,133969,133970,133972,133974,133976,133978,133980],{"class":117,"line":1195},[115,133971,132007],{"class":1963},[115,133973,79797],{"class":125},[115,133975,128902],{"class":174},[115,133977,51427],{"class":125},[115,133979,54754],{"class":174},[115,133981,129472],{"class":125},[115,133983,133984],{"class":117,"line":1201},[115,133985,132022],{"class":184},[115,133987,133988,133990,133992,133994,133996,133998],{"class":117,"line":1215},[115,133989,132027],{"class":1963},[115,133991,79797],{"class":125},[115,133993,128902],{"class":174},[115,133995,51427],{"class":125},[115,133997,54821],{"class":174},[115,133999,129472],{"class":125},[115,134001,134002],{"class":117,"line":1221},[115,134003,132042],{"class":184},[115,134005,134006,134008,134010,134012,134014,134016],{"class":117,"line":1312},[115,134007,132047],{"class":1963},[115,134009,79797],{"class":125},[115,134011,128902],{"class":174},[115,134013,51427],{"class":125},[115,134015,86223],{"class":174},[115,134017,129472],{"class":125},[115,134019,134020],{"class":117,"line":1318},[115,134021,132062],{"class":184},[115,134023,134024,134026,134028,134030,134032,134034],{"class":117,"line":1330},[115,134025,132067],{"class":1963},[115,134027,79797],{"class":125},[115,134029,128902],{"class":174},[115,134031,51427],{"class":125},[115,134033,132076],{"class":174},[115,134035,129472],{"class":125},[20,134037],{"style":126398,"src":134038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134040,134041],{},"图片太大，盒子太小，此时需要修改图片的大小",[106,134043,134045],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[112,134046,134047],{"__ignoreMap":22},[115,134048,134049,134051,134053,134055,134057,134060,134062,134064,134067,134070,134072,134075],{"class":117,"line":118},[115,134050,1035],{"class":125},[115,134052,20],{"class":51290},[115,134054,55229],{"class":1963},[115,134056,171],{"class":125},[115,134058,134059],{"class":230},"\"images\u002Fpic.jpg\"",[115,134061,55237],{"class":1963},[115,134063,171],{"class":125},[115,134065,134066],{"class":230},"\"描述文字\"",[115,134068,134069],{"class":1963}," title",[115,134071,171],{"class":125},[115,134073,134074],{"class":230},"\"悬停提示\"",[115,134076,51297],{"class":125},[20,134078],{"style":126398,"src":134079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134081,134082],{},"制造遮罩层",[106,134084,134085],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,134086,134087],{"__ignoreMap":22},[115,134088,134089,134091,134093,134095,134097,134099,134101,134103,134105,134107,134109,134111],{"class":117,"line":118},[115,134090,1035],{"class":125},[115,134092,20],{"class":51290},[115,134094,55229],{"class":1963},[115,134096,171],{"class":125},[115,134098,134059],{"class":230},[115,134100,55237],{"class":1963},[115,134102,171],{"class":125},[115,134104,134066],{"class":230},[115,134106,134069],{"class":1963},[115,134108,171],{"class":125},[115,134110,134074],{"class":230},[115,134112,51297],{"class":125},[14,134114,134115],{},"此时是这样的为标准流",[20,134117],{"style":126398,"src":134118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134120,134121],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134123,134124],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134126,134127],{},"让他在中间，用center(background-position)",[14,134129,134130],{},"将需要变的尽可能放到一个盒子中",[14,134132,134133],{},"放大盒子上内部盒子发生变化",[106,134135,134137],{"className":126542,"code":134136,"language":126544,"meta":22,"style":22},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[112,134138,134139,134145,134155,134159,134166,134176,134188,134200],{"__ignoreMap":22},[115,134140,134141,134143],{"class":117,"line":118},[115,134142,127609],{"class":1963},[115,134144,15573],{"class":125},[115,134146,134147,134149,134151,134153],{"class":117,"line":37},[115,134148,132348],{"class":174},[115,134150,51427],{"class":125},[115,134152,54754],{"class":174},[115,134154,1291],{"class":125},[115,134156,134157],{"class":117,"line":1180},[115,134158,1565],{"class":125},[115,134160,134161,134164],{"class":117,"line":1195},[115,134162,134163],{"class":1963},".child",[115,134165,15573],{"class":125},[115,134167,134168,134170,134172,134174],{"class":117,"line":1201},[115,134169,132348],{"class":174},[115,134171,51427],{"class":125},[115,134173,54821],{"class":174},[115,134175,1291],{"class":125},[115,134177,134178,134180,134182,134184,134186],{"class":117,"line":1215},[115,134179,132362],{"class":174},[115,134181,51427],{"class":125},[115,134183,781],{"class":174},[115,134185,453],{"class":121},[115,134187,1291],{"class":125},[115,134189,134190,134192,134194,134196,134198],{"class":117,"line":1221},[115,134191,132379],{"class":174},[115,134193,51427],{"class":125},[115,134195,781],{"class":174},[115,134197,453],{"class":121},[115,134199,1291],{"class":125},[115,134201,134202],{"class":117,"line":1312},[115,134203,1565],{"class":125},[14,134205,134206],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[57,134208,134210],{"id":134209},"_122-精灵图","12.2 精灵图",[86,134212,134214],{"id":134213},"_1221-理解","12.2.1 理解",[69,134216,134217,134235],{},[72,134218,134219,134220,132448,134223,134226,134227,134230,134231,134234],{},"目的： ",[275,134221,134222],{},"为了有效地减少服务器接收和发送请求的次数",[275,134224,134225],{},"提高"," 页面的 ",[275,134228,134229],{},"加载速度"," ，出现了 ",[275,134232,134233],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[72,134236,134237,134238,134240,134241,134243,134244,134246,134247,134249,134250,134252,134253,134255],{},"使用精灵图核心：",[53706,134239],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53706,134242],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53706,134245],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53706,134248],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53706,134251],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53706,134254],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[86,134257,134259],{"id":134258},"_1222-扒图","12.2.2 扒图",[106,134261,134264],{"className":134262,"code":134263,"language":5188},[5186],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[112,134265,134263],{"__ignoreMap":22},[20,134267],{"style":126398,"src":134268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[20,134270],{"style":126398,"src":134271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[86,134273,134275],{"id":134274},"_1223-精灵图的实现","12.2.3 精灵图的实现",[20,134277],{"style":126398,"src":134278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134280,134281],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[20,134283],{"style":126398,"src":134284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[106,134286,134288],{"className":126542,"code":134287,"language":126544,"meta":22,"style":22},"\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",[112,134289,134290,134295,134302,134314,134326,134345,134362],{"__ignoreMap":22},[115,134291,134292],{"class":117,"line":118},[115,134293,134294],{"class":184},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[115,134296,134297,134300],{"class":117,"line":37},[115,134298,134299],{"class":1963},".icon",[115,134301,15573],{"class":125},[115,134303,134304,134306,134308,134310,134312],{"class":117,"line":1180},[115,134305,70558],{"class":174},[115,134307,51427],{"class":125},[115,134309,825],{"class":174},[115,134311,51482],{"class":121},[115,134313,1291],{"class":125},[115,134315,134316,134318,134320,134322,134324],{"class":117,"line":1195},[115,134317,70778],{"class":174},[115,134319,51427],{"class":125},[115,134321,825],{"class":174},[115,134323,51482],{"class":121},[115,134325,1291],{"class":125},[115,134327,134328,134330,134332,134334,134336,134339,134341,134343],{"class":117,"line":1201},[115,134329,70601],{"class":174},[115,134331,51427],{"class":125},[115,134333,61716],{"class":174},[115,134335,126],{"class":125},[115,134337,134338],{"class":5217},"sprites.png",[115,134340,13715],{"class":125},[115,134342,61726],{"class":174},[115,134344,1291],{"class":125},[115,134346,134347,134349,134351,134353,134355,134358,134360],{"class":117,"line":1215},[115,134348,128802],{"class":174},[115,134350,51427],{"class":125},[115,134352,51753],{"class":174},[115,134354,51482],{"class":121},[115,134356,134357],{"class":174}," -20",[115,134359,51482],{"class":121},[115,134361,1291],{"class":125},[115,134363,134364],{"class":117,"line":1221},[115,134365,1565],{"class":125},[20,134367],{"style":126398,"src":134368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134370,134371],{},"在前端中坐标轴的正方向是右和下",[57,134373,134375],{"id":134374},"_123-字体图标","12.3 字体图标",[86,134377,134379],{"id":134378},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134381,134382],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134384,134385],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134387,134388],{},"1.图片文件还是比较大的。",[14,134390,134391],{},"2.图片本身放大和缩小会失真。",[14,134393,134394],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134396,134397,134398,25741],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[275,134399,134400],{},"字体图标 iconfont",[14,134402,134403,134406,134407,28386],{},[275,134404,134405],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[275,134408,134409],{},"展示的是图标，本质属于字体",[86,134411,134413],{"id":134412},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1132,134415,134416,134421,134424,134427,134430],{},[72,134417,134418,134420],{},[275,134419,25877],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[72,134422,134423],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[72,134425,134426],{},"兼容性：几乎支持所有的浏览器，请放心使用",[72,134428,134429],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[72,134431,134432],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[86,134434,134436],{"id":134435},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1132,134438,134439],{},[72,134440,134441,134442],{},"icomoon字体库：",[27,134443,134446],{"href":134444,"rel":134445},"http:\u002F\u002Ficomoon.io\u002F",[31],"http:\u002F\u002Ficomoon.io",[14,134448,134449],{},"进去之后点icomoon app",[20,134451],{"style":126398,"src":134452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134454,134455],{},"可以对其编辑：",[20,134457],{"style":126398,"src":134458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134460,134461],{},"生成字体：",[20,134463],{"style":126398,"src":134464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134466,134467],{},"下载：",[20,134469],{"style":126398,"src":134470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1132,134472,134473],{},[72,134474,134475,134476],{},"阿里iconfont字体库： ",[27,134477,134478],{"href":134478,"rel":134479},"http:\u002F\u002Fwww.iconfont.cn\u002F",[31],[86,134481,134483],{"id":134482},"_1234-字体图标的引入","12.3.4 字体图标的引入",[69,134485,134486],{},[72,134487,134488,134489,134492],{},"把下载包里面的 ",[275,134490,134491],{},"fonts"," 文件夹放入页面根目录下",[20,134494],{"style":126398,"src":134495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[69,134497,134498],{"start":37},[72,134499,134500],{},"字体文件格式",[263,134502,134503,134512],{},[266,134504,134505],{},[269,134506,134507,134510],{},[272,134508,134509],{"align":23737},"格式",[272,134511,23741],{"align":23737},[310,134513,134514,134524,134534,134544],{},[269,134515,134516,134521],{},[315,134517,134518],{"align":23737},[275,134519,134520],{},".ttf",[315,134522,134523],{"align":23737},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[269,134525,134526,134531],{},[315,134527,134528],{"align":23737},[275,134529,134530],{},".woff",[315,134532,134533],{"align":23737},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[269,134535,134536,134541],{},[315,134537,134538],{"align":23737},[275,134539,134540],{},".eot",[315,134542,134543],{"align":23737},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[269,134545,134546,134551],{},[315,134547,134548],{"align":23737},[275,134549,134550],{},"svg",[315,134552,134553],{"align":23737},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[69,134555,134556],{"start":1180},[72,134557,134558],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[106,134560,134562],{"className":126542,"code":134561,"language":126544,"meta":22,"style":22},"\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",[112,134563,134564,134569,134576,134588,134604,134629,134650,134670,134690,134694,134700,134710,134721],{"__ignoreMap":22},[115,134565,134566],{"class":117,"line":118},[115,134567,134568],{"class":184},"\u002F* 引入字体图标 *\u002F\n",[115,134570,134571,134574],{"class":117,"line":37},[115,134572,134573],{"class":121},"@font-face",[115,134575,15573],{"class":125},[115,134577,134578,134581,134583,134586],{"class":117,"line":1180},[115,134579,134580],{"class":174},"  font-family",[115,134582,51427],{"class":125},[115,134584,134585],{"class":230},"'icomoon'",[115,134587,1291],{"class":125},[115,134589,134590,134593,134595,134597,134599,134602],{"class":117,"line":1195},[115,134591,134592],{"class":174},"  src",[115,134594,51427],{"class":125},[115,134596,61716],{"class":174},[115,134598,126],{"class":125},[115,134600,134601],{"class":230},"'fonts\u002Ficomoon.eot'",[115,134603,2719],{"class":125},[115,134605,134606,134608,134610,134612,134614,134617,134619,134622,134624,134627],{"class":117,"line":1201},[115,134607,134592],{"class":174},[115,134609,51427],{"class":125},[115,134611,61716],{"class":174},[115,134613,126],{"class":125},[115,134615,134616],{"class":230},"'fonts\u002Ficomoon.eot?#iefix'",[115,134618,13715],{"class":125},[115,134620,134621],{"class":174},"format",[115,134623,126],{"class":125},[115,134625,134626],{"class":230},"'embedded-opentype'",[115,134628,38048],{"class":125},[115,134630,134631,134634,134636,134639,134641,134643,134645,134648],{"class":117,"line":1215},[115,134632,134633],{"class":174},"       url",[115,134635,126],{"class":125},[115,134637,134638],{"class":230},"'fonts\u002Ficomoon.woff'",[115,134640,13715],{"class":125},[115,134642,134621],{"class":174},[115,134644,126],{"class":125},[115,134646,134647],{"class":230},"'woff'",[115,134649,38048],{"class":125},[115,134651,134652,134654,134656,134659,134661,134663,134665,134668],{"class":117,"line":1221},[115,134653,134633],{"class":174},[115,134655,126],{"class":125},[115,134657,134658],{"class":230},"'fonts\u002Ficomoon.ttf'",[115,134660,13715],{"class":125},[115,134662,134621],{"class":174},[115,134664,126],{"class":125},[115,134666,134667],{"class":230},"'truetype'",[115,134669,38048],{"class":125},[115,134671,134672,134674,134676,134679,134681,134683,134685,134688],{"class":117,"line":1312},[115,134673,134633],{"class":174},[115,134675,126],{"class":125},[115,134677,134678],{"class":230},"'fonts\u002Ficomoon.svg#icomoon'",[115,134680,13715],{"class":125},[115,134682,134621],{"class":174},[115,134684,126],{"class":125},[115,134686,134687],{"class":230},"'svg'",[115,134689,2719],{"class":125},[115,134691,134692],{"class":117,"line":1318},[115,134693,1565],{"class":125},[115,134695,134696,134698],{"class":117,"line":1330},[115,134697,134299],{"class":1963},[115,134699,15573],{"class":125},[115,134701,134702,134704,134706,134708],{"class":117,"line":1612},[115,134703,134580],{"class":174},[115,134705,51427],{"class":125},[115,134707,134585],{"class":230},[115,134709,1291],{"class":125},[115,134711,134712,134715,134717,134719],{"class":117,"line":1617},[115,134713,134714],{"class":174},"  font-style",[115,134716,51427],{"class":125},[115,134718,63831],{"class":174},[115,134720,1291],{"class":125},[115,134722,134723],{"class":117,"line":1623},[115,134724,1565],{"class":125},[14,134726,134727],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[20,134729],{"style":126398,"src":134730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[69,134732,134733],{"start":1195},[72,134734,134735],{},"添加字体",[20,134737],{"style":126398,"src":134738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134740,134741],{},"复制：",[20,134743],{"style":126398,"src":134744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134746,134747],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[69,134749,134750],{"start":1201},[72,134751,134752],{},"代码展示：",[106,134754,134755],{"className":126542,"code":134561,"language":126544,"meta":22,"style":22},[112,134756,134757,134761,134767,134777,134791,134813,134831,134849,134867,134871,134877,134887,134897],{"__ignoreMap":22},[115,134758,134759],{"class":117,"line":118},[115,134760,134568],{"class":184},[115,134762,134763,134765],{"class":117,"line":37},[115,134764,134573],{"class":121},[115,134766,15573],{"class":125},[115,134768,134769,134771,134773,134775],{"class":117,"line":1180},[115,134770,134580],{"class":174},[115,134772,51427],{"class":125},[115,134774,134585],{"class":230},[115,134776,1291],{"class":125},[115,134778,134779,134781,134783,134785,134787,134789],{"class":117,"line":1195},[115,134780,134592],{"class":174},[115,134782,51427],{"class":125},[115,134784,61716],{"class":174},[115,134786,126],{"class":125},[115,134788,134601],{"class":230},[115,134790,2719],{"class":125},[115,134792,134793,134795,134797,134799,134801,134803,134805,134807,134809,134811],{"class":117,"line":1201},[115,134794,134592],{"class":174},[115,134796,51427],{"class":125},[115,134798,61716],{"class":174},[115,134800,126],{"class":125},[115,134802,134616],{"class":230},[115,134804,13715],{"class":125},[115,134806,134621],{"class":174},[115,134808,126],{"class":125},[115,134810,134626],{"class":230},[115,134812,38048],{"class":125},[115,134814,134815,134817,134819,134821,134823,134825,134827,134829],{"class":117,"line":1215},[115,134816,134633],{"class":174},[115,134818,126],{"class":125},[115,134820,134638],{"class":230},[115,134822,13715],{"class":125},[115,134824,134621],{"class":174},[115,134826,126],{"class":125},[115,134828,134647],{"class":230},[115,134830,38048],{"class":125},[115,134832,134833,134835,134837,134839,134841,134843,134845,134847],{"class":117,"line":1221},[115,134834,134633],{"class":174},[115,134836,126],{"class":125},[115,134838,134658],{"class":230},[115,134840,13715],{"class":125},[115,134842,134621],{"class":174},[115,134844,126],{"class":125},[115,134846,134667],{"class":230},[115,134848,38048],{"class":125},[115,134850,134851,134853,134855,134857,134859,134861,134863,134865],{"class":117,"line":1312},[115,134852,134633],{"class":174},[115,134854,126],{"class":125},[115,134856,134678],{"class":230},[115,134858,13715],{"class":125},[115,134860,134621],{"class":174},[115,134862,126],{"class":125},[115,134864,134687],{"class":230},[115,134866,2719],{"class":125},[115,134868,134869],{"class":117,"line":1318},[115,134870,1565],{"class":125},[115,134872,134873,134875],{"class":117,"line":1330},[115,134874,134299],{"class":1963},[115,134876,15573],{"class":125},[115,134878,134879,134881,134883,134885],{"class":117,"line":1612},[115,134880,134580],{"class":174},[115,134882,51427],{"class":125},[115,134884,134585],{"class":230},[115,134886,1291],{"class":125},[115,134888,134889,134891,134893,134895],{"class":117,"line":1617},[115,134890,134714],{"class":174},[115,134892,51427],{"class":125},[115,134894,63831],{"class":174},[115,134896,1291],{"class":125},[115,134898,134899],{"class":117,"line":1623},[115,134900,1565],{"class":125},[20,134902],{"style":126398,"src":134903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134905,134906],{},"更加细节展示：",[69,134908,134909],{},[72,134910,134911],{},"html 标签内添加小图标",[20,134913],{"style":126398,"src":134914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[69,134916,134917],{"start":37},[72,134918,134919],{},"给标签定义字体",[106,134921,134922],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,134923,134924,134928,134942,134946],{"__ignoreMap":22},[115,134925,134926],{"class":117,"line":118},[115,134927,130653],{"class":184},[115,134929,134930,134932,134934,134936,134938,134940],{"class":117,"line":37},[115,134931,1035],{"class":125},[115,134933,51601],{"class":51290},[115,134935,53476],{"class":1963},[115,134937,171],{"class":125},[115,134939,130666],{"class":230},[115,134941,51297],{"class":125},[115,134943,134944],{"class":117,"line":1180},[115,134945,130673],{"class":125},[115,134947,134948,134950,134952],{"class":117,"line":1195},[115,134949,51775],{"class":125},[115,134951,51601],{"class":51290},[115,134953,51297],{"class":125},[14,134955,134956],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[20,134958],{"style":126398,"src":134959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[86,134961,134963],{"id":134962},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134965,134966],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134968,134969,134970,134973],{},"把压缩包里面的 ",[275,134971,134972],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134975,134976],{},"打开网站，点下方：",[20,134978],{"style":126398,"src":134979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[20,134981],{"style":126398,"src":134982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[20,134984],{"style":126398,"src":134985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134987,134988],{},"点yes重新加载",[14,134990,134991],{},"然后重复之前的操作就可以实现了",[14,134993,134994],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[86,134996,134998],{"id":134997},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[20,135000],{"style":126398,"src":135001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5127,135003,135004],{},"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":22,"searchDepth":37,"depth":37,"links":135006},[135007,135013,135018],{"id":133610,"depth":37,"text":133611,"children":135008},[135009,135010,135011,135012],{"id":133622,"depth":1180,"text":133623},{"id":133651,"depth":1180,"text":133652},{"id":133679,"depth":1180,"text":133680},{"id":133737,"depth":1180,"text":133738},{"id":134209,"depth":37,"text":134210,"children":135014},[135015,135016,135017],{"id":134213,"depth":1180,"text":134214},{"id":134258,"depth":1180,"text":134259},{"id":134274,"depth":1180,"text":134275},{"id":134374,"depth":37,"text":134375,"children":135019},[135020,135021,135022,135023,135024,135025],{"id":134378,"depth":1180,"text":134379},{"id":134412,"depth":1180,"text":134413},{"id":134435,"depth":1180,"text":134436},{"id":134482,"depth":1180,"text":134483},{"id":134962,"depth":1180,"text":134963},{"id":134997,"depth":1180,"text":134998},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133602,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135032,"title":135033,"body":135034,"description":39,"extension":40,"meta":136261,"navigation":42,"path":136262,"seo":136263,"stem":136264,"__hash__":136265},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135035,"toc":136242},[135036,135039,135043,135046,135060,135128,135158,135161,135165,135169,135271,135318,135322,135325,135328,135362,135365,135368,135371,135374,135377,135380,135383,135385,135388,135391,135394,135397,135400,135403,135406,135434,135437,135441,135444,135451,135454,135457,135483,135486,135490,135493,135496,135503,135507,135510,135512,135544,135547,135550,135562,135568,135571,135574,135577,135579,135583,135586,135589,135592,135637,135641,135643,135646,135653,135695,135698,135702,135707,135721,135725,135728,135731,135734,135737,135740,135774,135777,135780,135834,135837,135840,135843,135846,135898,135901,135904,135953,135957,135959,135962,135965,135968,135971,135974,136032,136035,136041,136044,136047,136079,136082,136086,136090,136093,136125,136129,136132,136176,136180,136183,136186,136189,136192,136195,136198,136201,136203,136206,136208,136211,136214,136217,136220,136225,136228,136230,136233,136236,136239],[10,135037,135033],{"id":135038},"_13-界面样式与布局技巧",[57,135040,135042],{"id":135041},"_131-css三角","13.1 css三角",[14,135044,135045],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1132,135047,135048,135051,135054,135057],{},[72,135049,135050],{},"用css 边框可以模拟三角效果",[72,135052,135053],{},"宽度高度为0",[72,135055,135056],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[72,135058,135059],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[106,135061,135063],{"className":126542,"code":135062,"language":126544,"meta":22,"style":22},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[112,135064,135065,135070,135077,135087,135097,135113,135124],{"__ignoreMap":22},[115,135066,135067],{"class":117,"line":118},[115,135068,135069],{"class":184},"\u002F* CSS 实现三角形 *\u002F\n",[115,135071,135072,135075],{"class":117,"line":37},[115,135073,135074],{"class":1963},".triangle",[115,135076,15573],{"class":125},[115,135078,135079,135081,135083,135085],{"class":117,"line":1180},[115,135080,70558],{"class":174},[115,135082,51427],{"class":125},[115,135084,317],{"class":174},[115,135086,1291],{"class":125},[115,135088,135089,135091,135093,135095],{"class":117,"line":1195},[115,135090,70778],{"class":174},[115,135092,51427],{"class":125},[115,135094,317],{"class":174},[115,135096,1291],{"class":125},[115,135098,135099,135101,135103,135105,135107,135109,135111],{"class":117,"line":1201},[115,135100,70886],{"class":174},[115,135102,51427],{"class":125},[115,135104,571],{"class":174},[115,135106,51482],{"class":121},[115,135108,51511],{"class":174},[115,135110,63981],{"class":174},[115,135112,1291],{"class":125},[115,135114,135115,135118,135120,135122],{"class":117,"line":1215},[115,135116,135117],{"class":174},"  border-bottom-color",[115,135119,51427],{"class":125},[115,135121,62359],{"class":174},[115,135123,1291],{"class":125},[115,135125,135126],{"class":117,"line":1221},[115,135127,1565],{"class":125},[106,135129,135130],{"className":126542,"code":130699,"language":126544,"meta":22,"style":22},[112,135131,135132,135138,135154],{"__ignoreMap":22},[115,135133,135134,135136],{"class":117,"line":118},[115,135135,51601],{"class":51290},[115,135137,15573],{"class":125},[115,135139,135140,135142,135144,135146,135148,135150,135152],{"class":117,"line":37},[115,135141,70886],{"class":174},[115,135143,51427],{"class":125},[115,135145,343],{"class":174},[115,135147,51482],{"class":121},[115,135149,51511],{"class":174},[115,135151,129934],{"class":174},[115,135153,1291],{"class":125},[115,135155,135156],{"class":117,"line":1180},[115,135157,1565],{"class":125},[20,135159],{"style":126398,"src":135160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[57,135162,135164],{"id":135163},"_132-css用户界面样式","13.2 css用户界面样式",[86,135166,135168],{"id":135167},"_1321-鼠标样式","13.2.1 鼠标样式",[106,135170,135172],{"className":126542,"code":135171,"language":126544,"meta":22,"style":22},"\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",[112,135173,135174,135179,135198,135216,135235,135252],{"__ignoreMap":22},[115,135175,135176],{"class":117,"line":118},[115,135177,135178],{"class":184},"\u002F* 鼠标样式 *\u002F\n",[115,135180,135181,135183,135185,135188,135190,135192,135195],{"class":117,"line":37},[115,135182,51601],{"class":51290},[115,135184,79797],{"class":125},[115,135186,135187],{"class":174},"cursor",[115,135189,51427],{"class":125},[115,135191,62020],{"class":174},[115,135193,135194],{"class":125},"; }   ",[115,135196,135197],{"class":184},"\u002F* 手型 *\u002F\n",[115,135199,135200,135202,135204,135206,135208,135211,135213],{"class":117,"line":1180},[115,135201,51601],{"class":51290},[115,135203,79797],{"class":125},[115,135205,135187],{"class":174},[115,135207,51427],{"class":125},[115,135209,135210],{"class":174},"default",[115,135212,135194],{"class":125},[115,135214,135215],{"class":184},"\u002F* 默认 *\u002F\n",[115,135217,135218,135220,135222,135224,135226,135229,135232],{"class":117,"line":1195},[115,135219,51601],{"class":51290},[115,135221,79797],{"class":125},[115,135223,135187],{"class":174},[115,135225,51427],{"class":125},[115,135227,135228],{"class":174},"move",[115,135230,135231],{"class":125},"; }      ",[115,135233,135234],{"class":184},"\u002F* 移动 *\u002F\n",[115,135236,135237,135239,135241,135243,135245,135247,135249],{"class":117,"line":1201},[115,135238,51601],{"class":51290},[115,135240,79797],{"class":125},[115,135242,135187],{"class":174},[115,135244,51427],{"class":125},[115,135246,5188],{"class":174},[115,135248,135231],{"class":125},[115,135250,135251],{"class":184},"\u002F* 文本 *\u002F\n",[115,135253,135254,135256,135258,135260,135262,135265,135268],{"class":117,"line":1215},[115,135255,51601],{"class":51290},[115,135257,79797],{"class":125},[115,135259,135187],{"class":174},[115,135261,51427],{"class":125},[115,135263,135264],{"class":174},"not-allowed",[115,135266,135267],{"class":125},"; } ",[115,135269,135270],{"class":184},"\u002F* 禁止 *\u002F\n",[263,135272,135273,135281],{},[266,135274,135275],{},[269,135276,135277,135279],{},[272,135278,127006],{"align":23737},[272,135280,27490],{"align":23737},[310,135282,135283,135290,135297,135304,135311],{},[269,135284,135285,135287],{},[315,135286,135210],{"align":23737},[315,135288,135289],{"align":23737},"小白 默认",[269,135291,135292,135294],{},[315,135293,62020],{"align":23737},[315,135295,135296],{"align":23737},"小手",[269,135298,135299,135301],{},[315,135300,135228],{"align":23737},[315,135302,135303],{"align":23737},"移动",[269,135305,135306,135308],{},[315,135307,5188],{"align":23737},[315,135309,135310],{"align":23737},"文本",[269,135312,135313,135315],{},[315,135314,135264],{"align":23737},[315,135316,135317],{"align":23737},"禁止",[86,135319,135321],{"id":135320},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135323,135324],{},"去除表单轮廓线",[14,135326,135327],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[106,135329,135330],{"className":126542,"code":129906,"language":126544,"meta":22,"style":22},[112,135331,135332,135336,135342,135358],{"__ignoreMap":22},[115,135333,135334],{"class":117,"line":118},[115,135335,129913],{"class":184},[115,135337,135338,135340],{"class":117,"line":37},[115,135339,51601],{"class":51290},[115,135341,15573],{"class":125},[115,135343,135344,135346,135348,135350,135352,135354,135356],{"class":117,"line":1180},[115,135345,70886],{"class":174},[115,135347,51427],{"class":125},[115,135349,343],{"class":174},[115,135351,51482],{"class":121},[115,135353,51511],{"class":174},[115,135355,129934],{"class":174},[115,135357,1291],{"class":125},[115,135359,135360],{"class":117,"line":1195},[115,135361,1565],{"class":125},[14,135363,135364],{},"文本域：",[20,135366],{"style":126398,"src":135367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135369,135370],{},"此时会有一个空白区域",[20,135372],{"style":126398,"src":135373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135375,135376],{},"写在同一行就不会出现这个问题",[20,135378],{"style":126398,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135381,135382],{},"文本域是行内块元素，一定记住！！！",[14,135384,98223],{},[20,135386],{"style":126398,"src":135387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135389,135390],{},"文本域尽量放在一行",[14,135392,135393],{},"知识回顾：cols是列，rols是行",[20,135395],{"style":126398,"src":135396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135398,135399],{},"它可以进行拖动，显然这是我们不愿意看到的",[20,135401],{"style":126398,"src":135402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135404,135405],{},"使用resize进行解决",[106,135407,135409],{"className":126542,"code":135408,"language":126544,"meta":22,"style":22},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[112,135410,135411,135417,135430],{"__ignoreMap":22},[115,135412,135413,135415],{"class":117,"line":118},[115,135414,53811],{"class":51290},[115,135416,15573],{"class":125},[115,135418,135419,135421,135423,135425,135427],{"class":117,"line":37},[115,135420,70788],{"class":174},[115,135422,51427],{"class":125},[115,135424,54727],{"class":174},[115,135426,130405],{"class":125},[115,135428,135429],{"class":184},"\u002F* 取消表单轮廓线 *\u002F\n",[115,135431,135432],{"class":117,"line":1180},[115,135433,1565],{"class":125},[14,135435,135436],{},"此时就无法通过右下方实现拖动了",[86,135438,135440],{"id":135439},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135442,135443],{},"实现一个盒子中的文字和图片对齐",[14,135445,135446,135447,135450],{},"用于设置一个元素的 ",[275,135448,135449],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135452,135453],{},"图片和文字默认是基线对齐",[20,135455],{"style":126398,"src":135456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[106,135458,135459],{"className":126542,"code":135408,"language":126544,"meta":22,"style":22},[112,135460,135461,135467,135479],{"__ignoreMap":22},[115,135462,135463,135465],{"class":117,"line":118},[115,135464,53811],{"class":51290},[115,135466,15573],{"class":125},[115,135468,135469,135471,135473,135475,135477],{"class":117,"line":37},[115,135470,70788],{"class":174},[115,135472,51427],{"class":125},[115,135474,54727],{"class":174},[115,135476,130405],{"class":125},[115,135478,135429],{"class":184},[115,135480,135481],{"class":117,"line":1180},[115,135482,1565],{"class":125},[20,135484],{"style":126398,"src":135485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21999,135487,135489],{"id":135488},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135491,135492],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[20,135494],{"style":126398,"src":135495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135497,135498,135499,135502],{},"此时可以给图片、表单这些行内块元素的 ",[275,135500,135501],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21999,135504,135506],{"id":135505},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135508,135509],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135511,14634],{},[106,135513,135515],{"className":126542,"code":135514,"language":126544,"meta":22,"style":22},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[112,135516,135517,135522,135528,135540],{"__ignoreMap":22},[115,135518,135519],{"class":117,"line":118},[115,135520,135521],{"class":184},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[115,135523,135524,135526],{"class":117,"line":37},[115,135525,20],{"class":51290},[115,135527,15573],{"class":125},[115,135529,135530,135533,135535,135538],{"class":117,"line":1180},[115,135531,135532],{"class":174},"  vertical-align",[115,135534,51427],{"class":125},[115,135536,135537],{"class":174},"middle",[115,135539,1291],{"class":125},[115,135541,135542],{"class":117,"line":1195},[115,135543,1565],{"class":125},[20,135545],{"style":126398,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135548,135549],{},"主要解决方法有两种：",[69,135551,135552],{},[72,135553,135554,135557,135558,135561],{},[275,135555,135556],{},"给图片"," 添加 ",[275,135559,135560],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135563,135564,135565],{},"2.把图片转换为块级元素 ",[275,135566,135567],{},"display: block",[14,135569,135570],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135572,135573],{},"img {",[14,135575,135576],{},"vertical-align:middle;",[14,135578,1071],{},[86,135580,135582],{"id":135581},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135584,135585],{},"效果：",[20,135587],{"style":126398,"src":135588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135590,135591],{},"单行文本溢出显示省略号--必须满足三个条件：",[106,135593,135595],{"className":126542,"code":135594,"language":126544,"meta":22,"style":22},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[112,135596,135597,135602,135608,135618,135623,135633],{"__ignoreMap":22},[115,135598,135599],{"class":117,"line":118},[115,135600,135601],{"class":184},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[115,135603,135604,135606],{"class":117,"line":37},[115,135605,20],{"class":51290},[115,135607,15573],{"class":125},[115,135609,135610,135612,135614,135616],{"class":117,"line":1180},[115,135611,135532],{"class":174},[115,135613,51427],{"class":125},[115,135615,135537],{"class":174},[115,135617,1291],{"class":125},[115,135619,135620],{"class":117,"line":1195},[115,135621,135622],{"class":184},"  \u002F* 或 *\u002F\n",[115,135624,135625,135627,135629,135631],{"class":117,"line":1201},[115,135626,128158],{"class":174},[115,135628,51427],{"class":125},[115,135630,60859],{"class":174},[115,135632,1291],{"class":125},[115,135634,135635],{"class":117,"line":1215},[115,135636,1565],{"class":125},[86,135638,135640],{"id":135639},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135642,135585],{},[20,135644],{"style":126398,"src":135645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135647,135648,135649,135652],{},"多行文本溢出显示省略号， ",[275,135650,135651],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[106,135654,135655],{"className":126542,"code":135594,"language":126544,"meta":22,"style":22},[112,135656,135657,135661,135667,135677,135681,135691],{"__ignoreMap":22},[115,135658,135659],{"class":117,"line":118},[115,135660,135601],{"class":184},[115,135662,135663,135665],{"class":117,"line":37},[115,135664,20],{"class":51290},[115,135666,15573],{"class":125},[115,135668,135669,135671,135673,135675],{"class":117,"line":1180},[115,135670,135532],{"class":174},[115,135672,51427],{"class":125},[115,135674,135537],{"class":174},[115,135676,1291],{"class":125},[115,135678,135679],{"class":117,"line":1195},[115,135680,135622],{"class":184},[115,135682,135683,135685,135687,135689],{"class":117,"line":1201},[115,135684,128158],{"class":174},[115,135686,51427],{"class":125},[115,135688,60859],{"class":174},[115,135690,1291],{"class":125},[115,135692,135693],{"class":117,"line":1215},[115,135694,1565],{"class":125},[14,135696,135697],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[57,135699,135701],{"id":135700},"_133-常见布局技巧","13.3 常见布局技巧",[14,135703,135704],{},[275,135705,135706],{},"巧妙利用一个技术更快更好的布局：",[69,135708,135709,135712,135715,135718],{},[72,135710,135711],{},"margin负值的运用",[72,135713,135714],{},"文字围绕浮动元素",[72,135716,135717],{},"行内块的巧妙运用",[72,135719,135720],{},"CSS三角强化",[86,135722,135724],{"id":135723},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135726,135727],{},"应用场景：",[20,135729],{"style":126398,"src":135730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[20,135732],{"style":126398,"src":135733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135735,135736],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135738,135739],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[106,135741,135742],{"className":126542,"code":129906,"language":126544,"meta":22,"style":22},[112,135743,135744,135748,135754,135770],{"__ignoreMap":22},[115,135745,135746],{"class":117,"line":118},[115,135747,129913],{"class":184},[115,135749,135750,135752],{"class":117,"line":37},[115,135751,51601],{"class":51290},[115,135753,15573],{"class":125},[115,135755,135756,135758,135760,135762,135764,135766,135768],{"class":117,"line":1180},[115,135757,70886],{"class":174},[115,135759,51427],{"class":125},[115,135761,343],{"class":174},[115,135763,51482],{"class":121},[115,135765,51511],{"class":174},[115,135767,129934],{"class":174},[115,135769,1291],{"class":125},[115,135771,135772],{"class":117,"line":1195},[115,135773,1565],{"class":125},[20,135775],{"style":126398,"src":135776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135778,135779],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[106,135781,135783],{"className":126542,"code":135782,"language":126544,"meta":22,"style":22},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[112,135784,135785,135790,135796,135806,135818,135830],{"__ignoreMap":22},[115,135786,135787],{"class":117,"line":118},[115,135788,135789],{"class":184},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[115,135791,135792,135794],{"class":117,"line":37},[115,135793,130390],{"class":1963},[115,135795,15573],{"class":125},[115,135797,135798,135800,135802,135804],{"class":117,"line":1180},[115,135799,132348],{"class":174},[115,135801,51427],{"class":125},[115,135803,54754],{"class":174},[115,135805,1291],{"class":125},[115,135807,135808,135810,135812,135814,135816],{"class":117,"line":1195},[115,135809,132362],{"class":174},[115,135811,51427],{"class":125},[115,135813,571],{"class":174},[115,135815,51482],{"class":121},[115,135817,1291],{"class":125},[115,135819,135820,135822,135824,135826,135828],{"class":117,"line":1201},[115,135821,132379],{"class":174},[115,135823,51427],{"class":125},[115,135825,825],{"class":174},[115,135827,51482],{"class":121},[115,135829,1291],{"class":125},[115,135831,135832],{"class":117,"line":1215},[115,135833,1565],{"class":125},[14,135835,135836],{},"加上上述代码会发现：",[20,135838],{"style":126398,"src":135839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135841,135842],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135844,135845],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[106,135847,135848],{"className":126542,"code":135782,"language":126544,"meta":22,"style":22},[112,135849,135850,135854,135860,135870,135882,135894],{"__ignoreMap":22},[115,135851,135852],{"class":117,"line":118},[115,135853,135789],{"class":184},[115,135855,135856,135858],{"class":117,"line":37},[115,135857,130390],{"class":1963},[115,135859,15573],{"class":125},[115,135861,135862,135864,135866,135868],{"class":117,"line":1180},[115,135863,132348],{"class":174},[115,135865,51427],{"class":125},[115,135867,54754],{"class":174},[115,135869,1291],{"class":125},[115,135871,135872,135874,135876,135878,135880],{"class":117,"line":1195},[115,135873,132362],{"class":174},[115,135875,51427],{"class":125},[115,135877,571],{"class":174},[115,135879,51482],{"class":121},[115,135881,1291],{"class":125},[115,135883,135884,135886,135888,135890,135892],{"class":117,"line":1201},[115,135885,132379],{"class":174},[115,135887,51427],{"class":125},[115,135889,825],{"class":174},[115,135891,51482],{"class":121},[115,135893,1291],{"class":125},[115,135895,135896],{"class":117,"line":1215},[115,135897,1565],{"class":125},[14,135899,135900],{},"解决方式2：",[14,135902,135903],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[106,135905,135907],{"className":126542,"code":135906,"language":126544,"meta":22,"style":22},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[112,135908,135909,135915,135925,135937,135949],{"__ignoreMap":22},[115,135910,135911,135913],{"class":117,"line":118},[115,135912,51601],{"class":51290},[115,135914,15573],{"class":125},[115,135916,135917,135919,135921,135923],{"class":117,"line":37},[115,135918,132348],{"class":174},[115,135920,51427],{"class":125},[115,135922,54754],{"class":174},[115,135924,1291],{"class":125},[115,135926,135927,135929,135931,135933,135935],{"class":117,"line":1180},[115,135928,132362],{"class":174},[115,135930,51427],{"class":125},[115,135932,571],{"class":174},[115,135934,51482],{"class":121},[115,135936,1291],{"class":125},[115,135938,135939,135941,135943,135945,135947],{"class":117,"line":1195},[115,135940,132379],{"class":174},[115,135942,51427],{"class":125},[115,135944,825],{"class":174},[115,135946,51482],{"class":121},[115,135948,1291],{"class":125},[115,135950,135951],{"class":117,"line":1201},[115,135952,1565],{"class":125},[86,135954,135956],{"id":135955},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135958,135727],{},[20,135960],{"style":126398,"src":135961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135963,135964],{},"实现结构图：",[20,135966],{"style":126398,"src":135967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135969,135970],{},"巧妙运用浮动元素不会压住文字的特性",[14,135972,135973],{},"代码显示：",[106,135975,135977],{"className":126542,"code":135976,"language":126544,"meta":22,"style":22},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[112,135978,135979,135985,135995,135999,136004,136008,136014,136028],{"__ignoreMap":22},[115,135980,135981,135983],{"class":117,"line":118},[115,135982,130390],{"class":1963},[115,135984,15573],{"class":125},[115,135986,135987,135989,135991,135993],{"class":117,"line":37},[115,135988,131022],{"class":174},[115,135990,51427],{"class":125},[115,135992,23737],{"class":174},[115,135994,1291],{"class":125},[115,135996,135997],{"class":117,"line":1180},[115,135998,1565],{"class":125},[115,136000,136001],{"class":117,"line":1195},[115,136002,136003],{"class":125},"```Css\n",[115,136005,136006],{"class":117,"line":1201},[115,136007,130385],{"class":184},[115,136009,136010,136012],{"class":117,"line":1215},[115,136011,130390],{"class":1963},[115,136013,15573],{"class":125},[115,136015,136016,136018,136020,136022,136024,136026],{"class":117,"line":1221},[115,136017,70460],{"class":174},[115,136019,51427],{"class":125},[115,136021,317],{"class":174},[115,136023,51546],{"class":174},[115,136025,130405],{"class":125},[115,136027,130408],{"class":184},[115,136029,136030],{"class":117,"line":1312},[115,136031,1565],{"class":125},[14,136033,136034],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[106,136036,136039],{"className":136037,"code":136038,"language":5188},[5186],"\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",[112,136040,136038],{"__ignoreMap":22},[20,136042],{"style":126398,"src":136043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136045,136046],{},"最终展示结果：",[106,136048,136049],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,136050,136051,136055,136061,136075],{"__ignoreMap":22},[115,136052,136053],{"class":117,"line":118},[115,136054,130385],{"class":184},[115,136056,136057,136059],{"class":117,"line":37},[115,136058,130390],{"class":1963},[115,136060,15573],{"class":125},[115,136062,136063,136065,136067,136069,136071,136073],{"class":117,"line":1180},[115,136064,70460],{"class":174},[115,136066,51427],{"class":125},[115,136068,317],{"class":174},[115,136070,51546],{"class":174},[115,136072,130405],{"class":125},[115,136074,130408],{"class":184},[115,136076,136077],{"class":117,"line":1195},[115,136078,1565],{"class":125},[20,136080],{"style":126398,"src":136081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[57,136083,136085],{"id":136084},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[86,136087,136089],{"id":136088},"_1341-原理","13.4.1 原理",[20,136091],{"style":126398,"src":136092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[106,136094,136095],{"className":126542,"code":130378,"language":126544,"meta":22,"style":22},[112,136096,136097,136101,136107,136121],{"__ignoreMap":22},[115,136098,136099],{"class":117,"line":118},[115,136100,130385],{"class":184},[115,136102,136103,136105],{"class":117,"line":37},[115,136104,130390],{"class":1963},[115,136106,15573],{"class":125},[115,136108,136109,136111,136113,136115,136117,136119],{"class":117,"line":1180},[115,136110,70460],{"class":174},[115,136112,51427],{"class":125},[115,136114,317],{"class":174},[115,136116,51546],{"class":174},[115,136118,130405],{"class":125},[115,136120,130408],{"class":184},[115,136122,136123],{"class":117,"line":1195},[115,136124,1565],{"class":125},[86,136126,136128],{"id":136127},"_1342-实例","13.4.2 实例",[20,136130],{"style":126398,"src":136131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[106,136133,136134],{"className":126542,"code":131008,"language":126544,"meta":22,"style":22},[112,136135,136136,136142,136152,136156,136162,136172],{"__ignoreMap":22},[115,136137,136138,136140],{"class":117,"line":118},[115,136139,131015],{"class":1963},[115,136141,15573],{"class":125},[115,136143,136144,136146,136148,136150],{"class":117,"line":37},[115,136145,131022],{"class":174},[115,136147,51427],{"class":125},[115,136149,23737],{"class":174},[115,136151,1291],{"class":125},[115,136153,136154],{"class":117,"line":1180},[115,136155,1565],{"class":125},[115,136157,136158,136160],{"class":117,"line":1195},[115,136159,131037],{"class":1963},[115,136161,15573],{"class":125},[115,136163,136164,136166,136168,136170],{"class":117,"line":1201},[115,136165,131022],{"class":174},[115,136167,51427],{"class":125},[115,136169,72512],{"class":174},[115,136171,1291],{"class":125},[115,136173,136174],{"class":117,"line":1215},[115,136175,1565],{"class":125},[57,136177,136179],{"id":136178},"_135-css的初始化","13.5 css的初始化",[14,136181,136182],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136184,136185],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136187,136188],{},"每个网页都必须首先进行 CSS初始化。",[14,136190,136191],{},"这里我们以 京东CSS初始化代码为例。",[14,136193,136194],{},"在网页右键查看网页源代码",[14,136196,136197],{},"找到css的link引入语句",[14,136199,136200],{},"然后ctrl+f 输入body",[14,136202,77216],{},[20,136204],{"style":126398,"src":136205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136207,77239],{},[20,136209],{"style":126398,"src":136210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136212,136213],{},"③打开了网页上传压缩的代码",[20,136215],{"style":126398,"src":136216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136218,136219],{},"④从body前可以查看这个网页的初始化代码",[14,136221,136222],{},[275,136223,136224],{},"Unicode编码字体：",[14,136226,136227],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136229,83197],{},[14,136231,136232],{},"黑体 \\9ED1\\4F53",[14,136234,136235],{},"宋体 \\5B8B\\4F53",[14,136237,136238],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5127,136240,136241],{},"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":22,"searchDepth":37,"depth":37,"links":136243},[136244,136245,136252,136256,136260],{"id":135041,"depth":37,"text":135042},{"id":135163,"depth":37,"text":135164,"children":136246},[136247,136248,136249,136250,136251],{"id":135167,"depth":1180,"text":135168},{"id":135320,"depth":1180,"text":135321},{"id":135439,"depth":1180,"text":135440},{"id":135581,"depth":1180,"text":135582},{"id":135639,"depth":1180,"text":135640},{"id":135700,"depth":37,"text":135701,"children":136253},[136254,136255],{"id":135723,"depth":1180,"text":135724},{"id":135955,"depth":1180,"text":135956},{"id":136084,"depth":37,"text":136085,"children":136257},[136258,136259],{"id":136088,"depth":1180,"text":136089},{"id":136127,"depth":1180,"text":136128},{"id":136178,"depth":37,"text":136179},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135033,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136267,"title":136268,"body":136269,"description":39,"extension":40,"meta":137955,"navigation":42,"path":137956,"seo":137957,"stem":137958,"__hash__":137959},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136270,"toc":137944},[136271,136274,136278,136282,136285,136292,136295,136298,136336,136339,136341,136355,136359,136368,136372,136377,136380,136383,136386,136421,136426,136429,136459,136462,136467,136470,136473,136503,136506,136560,136563,136567,136572,136584,136587,136591,136621,136624,136629,136632,136662,136665,136669,136686,136690,136694,136697,136730,136733,136737,136740,136743,136746,136749,136752,136863,136866,136869,136872,136974,136977,136981,136985,136989,136992,137032,137035,137037,137053,137057,137060,137065,137146,137149,137152,137278,137283,137286,137294,137297,137302,137387,137390,137394,137397,137400,137404,137424,137429,137513,137516,137521,137524,137527,137605,137608,137611,137614,137617,137620,137625,137628,137631,137703,137706,137711,137714,137811,137814,137820,137823,137826,137829,137832,137835,137838,137841,137844,137848,137853,137856,137889,137894,137897,137938,137941],[10,136272,136268],{"id":136273},"_14-html5与css3新特性",[57,136275,136277],{"id":136276},"_141-html5的新特性","14.1 HTML5的新特性",[86,136279,136281],{"id":136280},"_1411-基本标签","14.1.1 基本标签",[14,136283,136284],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136286,136287,136288,136291],{},"这些新特性都有兼容性问题，基本是 ",[275,136289,136290],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136293,136294],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136296,136297],{},"现在使用的是新特性：",[1132,136299,136300,136306,136312,136318,136324,136330],{},[72,136301,136302,136305],{},[112,136303,136304],{},"\u003Cheader>"," 头部标签",[72,136307,136308,136311],{},[112,136309,136310],{},"\u003Cnav>"," 导航标签",[72,136313,136314,136317],{},[112,136315,136316],{},"\u003Carticle>"," 内容标签",[72,136319,136320,136323],{},[112,136321,136322],{},"\u003Csection>"," 定义文档某个区域",[72,136325,136326,136329],{},[112,136327,136328],{},"\u003Caside>"," 侧边栏标签",[72,136331,136332,136335],{},[112,136333,136334],{},"\u003Cfooter>"," 尾部标签",[20,136337],{"style":126398,"src":136338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136340,155],{},[1132,136342,136343,136346,136349,136352],{},[72,136344,136345],{},"这种语义化标准主要是针对搜索引擎的",[72,136347,136348],{},"这些标签页面中可以经常使用",[72,136350,136351],{},"在IE9中，需要把这些元素转换为块级元素",[72,136353,136354],{},"移动端更喜欢使用这些标签",[86,136356,136358],{"id":136357},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136360,136361,136362,136364,136365,136367],{},"音频 ",[275,136363,28175],{}," 和视频 ",[275,136366,28184],{}," 两个标签",[21999,136369,136371],{"id":136370},"_14121-视频标签-video","14.1.2.1 视频标签- video",[69,136373,136374],{},[72,136375,136376],{},"支持格式：",[20,136378],{"style":126398,"src":136379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136381,136382],{},"尽量使用MP4，兼容性好",[14,136384,136385],{},"用MP4就可以",[106,136387,136389],{"className":127289,"code":136388,"language":127291,"meta":22,"style":22},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[112,136390,136391],{"__ignoreMap":22},[115,136392,136393,136395,136397,136399,136401,136404,136406,136409,136412,136415,136417,136419],{"class":117,"line":118},[115,136394,1035],{"class":125},[115,136396,28184],{"class":51290},[115,136398,55229],{"class":1963},[115,136400,171],{"class":125},[115,136402,136403],{"class":230},"\"movie.mp4\"",[115,136405,92413],{"class":1963},[115,136407,136408],{"class":1963}," autoplay",[115,136410,136411],{"class":1963}," muted",[115,136413,136414],{"class":1963}," loop",[115,136416,55304],{"class":125},[115,136418,28184],{"class":51290},[115,136420,51297],{"class":125},[69,136422,136423],{"start":37},[72,136424,136425],{},"兼容写法",[14,136427,136428],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[106,136430,136431],{"className":127289,"code":136388,"language":127291,"meta":22,"style":22},[112,136432,136433],{"__ignoreMap":22},[115,136434,136435,136437,136439,136441,136443,136445,136447,136449,136451,136453,136455,136457],{"class":117,"line":118},[115,136436,1035],{"class":125},[115,136438,28184],{"class":51290},[115,136440,55229],{"class":1963},[115,136442,171],{"class":125},[115,136444,136403],{"class":230},[115,136446,92413],{"class":1963},[115,136448,136408],{"class":1963},[115,136450,136411],{"class":1963},[115,136452,136414],{"class":1963},[115,136454,55304],{"class":125},[115,136456,28184],{"class":51290},[115,136458,51297],{"class":125},[14,136460,136461],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[69,136463,136464],{"start":1180},[72,136465,136466],{},"video常用属性",[20,136468],{"style":126398,"src":136469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136471,136472],{},"poster属性后面是跟的等待加载图片的地址",[106,136474,136475],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,136476,136477],{"__ignoreMap":22},[115,136478,136479,136481,136483,136485,136487,136489,136491,136493,136495,136497,136499,136501],{"class":117,"line":118},[115,136480,1035],{"class":125},[115,136482,20],{"class":51290},[115,136484,55229],{"class":1963},[115,136486,171],{"class":125},[115,136488,134059],{"class":230},[115,136490,55237],{"class":1963},[115,136492,171],{"class":125},[115,136494,134066],{"class":230},[115,136496,134069],{"class":1963},[115,136498,171],{"class":125},[115,136500,134074],{"class":230},[115,136502,51297],{"class":125},[14,136504,136505],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[106,136507,136509],{"className":126542,"code":136508,"language":126544,"meta":22,"style":22},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[112,136510,136511,136516,136522,136546,136551,136556],{"__ignoreMap":22},[115,136512,136513],{"class":117,"line":118},[115,136514,136515],{"class":184},"\u002F* 2D 位移 *\u002F\n",[115,136517,136518,136520],{"class":117,"line":37},[115,136519,51601],{"class":51290},[115,136521,15573],{"class":125},[115,136523,136524,136527,136529,136532,136534,136536,136538,136540,136542,136544],{"class":117,"line":1180},[115,136525,136526],{"class":174},"  transform",[115,136528,51427],{"class":125},[115,136530,136531],{"class":174},"translate",[115,136533,126],{"class":125},[115,136535,436],{"class":174},[115,136537,51482],{"class":121},[115,136539,12436],{"class":125},[115,136541,781],{"class":174},[115,136543,51482],{"class":121},[115,136545,2719],{"class":125},[115,136547,136548],{"class":117,"line":1195},[115,136549,136550],{"class":184},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[115,136552,136553],{"class":117,"line":1201},[115,136554,136555],{"class":184},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[115,136557,136558],{"class":117,"line":1215},[115,136559,1565],{"class":125},[14,136561,136562],{},"muted:自动静音属性",[21999,136564,136566],{"id":136565},"_14122-音频标签audio","14.1.2.2 音频标签audio",[69,136568,136569],{},[72,136570,136571],{},"基本使用",[14,136573,136574,136575,136580,136581],{},"当前 ",[275,136576,136577],{},[112,136578,136579],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[275,136582,136583],{},"mp3格式",[20,136585],{"style":126398,"src":136586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[69,136588,136589],{"start":37},[72,136590,136425],{},[106,136592,136593],{"className":127289,"code":136388,"language":127291,"meta":22,"style":22},[112,136594,136595],{"__ignoreMap":22},[115,136596,136597,136599,136601,136603,136605,136607,136609,136611,136613,136615,136617,136619],{"class":117,"line":118},[115,136598,1035],{"class":125},[115,136600,28184],{"class":51290},[115,136602,55229],{"class":1963},[115,136604,171],{"class":125},[115,136606,136403],{"class":230},[115,136608,92413],{"class":1963},[115,136610,136408],{"class":1963},[115,136612,136411],{"class":1963},[115,136614,136414],{"class":1963},[115,136616,55304],{"class":125},[115,136618,28184],{"class":51290},[115,136620,51297],{"class":125},[14,136622,136623],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[69,136625,136626],{"start":1180},[72,136627,136628],{},"常用属性",[20,136630],{"style":126398,"src":136631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[106,136633,136634],{"className":127289,"code":136388,"language":127291,"meta":22,"style":22},[112,136635,136636],{"__ignoreMap":22},[115,136637,136638,136640,136642,136644,136646,136648,136650,136652,136654,136656,136658,136660],{"class":117,"line":118},[115,136639,1035],{"class":125},[115,136641,28184],{"class":51290},[115,136643,55229],{"class":1963},[115,136645,171],{"class":125},[115,136647,136403],{"class":230},[115,136649,92413],{"class":1963},[115,136651,136408],{"class":1963},[115,136653,136411],{"class":1963},[115,136655,136414],{"class":1963},[115,136657,55304],{"class":125},[115,136659,28184],{"class":51290},[115,136661,51297],{"class":125},[14,136663,136664],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21999,136666,136668],{"id":136667},"_14123-总结","14.1.2.3 总结",[1132,136670,136671,136674,136677,136680,136683],{},[72,136672,136673],{},"音频标签和视频标签使用方式基本一致",[72,136675,136676],{},"浏览器支持情况不同",[72,136678,136679],{},"谷歌浏览器把音频和视频自动播放禁止了",[72,136681,136682],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[72,136684,136685],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[86,136687,136689],{"id":136688},"_1413-表单元素","14.1.3 表单元素",[21999,136691,136693],{"id":136692},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[20,136695],{"style":126398,"src":136696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[106,136698,136700],{"className":127289,"code":136699,"language":127291,"meta":22,"style":22},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[112,136701,136702],{"__ignoreMap":22},[115,136703,136704,136706,136708,136710,136712,136714,136716,136718,136721,136723,136725,136728],{"class":117,"line":118},[115,136705,1035],{"class":125},[115,136707,53811],{"class":51290},[115,136709,53814],{"class":1963},[115,136711,171],{"class":125},[115,136713,62689],{"class":230},[115,136715,14921],{"class":1963},[115,136717,171],{"class":125},[115,136719,136720],{"class":230},"\"username\"",[115,136722,61010],{"class":1963},[115,136724,171],{"class":125},[115,136726,136727],{"class":230},"\"请输入用户名\"",[115,136729,51297],{"class":125},[20,136731],{"style":126398,"src":136732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21999,136734,136736],{"id":136735},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[20,136738],{"style":126398,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136741,136742],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136744,136745],{},"快捷操作：",[20,136747],{"style":126398,"src":136748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136750,136751],{},"例子1：",[106,136753,136755],{"className":127289,"code":136754,"language":127291,"meta":22,"style":22},"\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",[112,136756,136757,136780,136807,136836,136855],{"__ignoreMap":22},[115,136758,136759,136761,136763,136765,136767,136770,136773,136775,136778],{"class":117,"line":118},[115,136760,1035],{"class":125},[115,136762,66615],{"class":51290},[115,136764,66618],{"class":1963},[115,136766,171],{"class":125},[115,136768,136769],{"class":230},"\"\u002Fsubmit\"",[115,136771,136772],{"class":1963}," method",[115,136774,171],{"class":125},[115,136776,136777],{"class":230},"\"post\"",[115,136779,51297],{"class":125},[115,136781,136782,136784,136786,136788,136790,136792,136794,136796,136798,136800,136802,136805],{"class":117,"line":37},[115,136783,52134],{"class":125},[115,136785,53811],{"class":51290},[115,136787,53814],{"class":1963},[115,136789,171],{"class":125},[115,136791,62689],{"class":230},[115,136793,14921],{"class":1963},[115,136795,171],{"class":125},[115,136797,136720],{"class":230},[115,136799,61010],{"class":1963},[115,136801,171],{"class":125},[115,136803,136804],{"class":230},"\"用户名\"",[115,136806,51297],{"class":125},[115,136808,136809,136811,136813,136815,136817,136820,136822,136824,136827,136829,136831,136834],{"class":117,"line":1180},[115,136810,52134],{"class":125},[115,136812,53811],{"class":51290},[115,136814,53814],{"class":1963},[115,136816,171],{"class":125},[115,136818,136819],{"class":230},"\"password\"",[115,136821,14921],{"class":1963},[115,136823,171],{"class":125},[115,136825,136826],{"class":230},"\"pwd\"",[115,136828,61010],{"class":1963},[115,136830,171],{"class":125},[115,136832,136833],{"class":230},"\"密码\"",[115,136835,51297],{"class":125},[115,136837,136838,136840,136842,136844,136846,136848,136851,136853],{"class":117,"line":1195},[115,136839,52134],{"class":125},[115,136841,53877],{"class":51290},[115,136843,53814],{"class":1963},[115,136845,171],{"class":125},[115,136847,66638],{"class":230},[115,136849,136850],{"class":125},">提交\u003C\u002F",[115,136852,53877],{"class":51290},[115,136854,51297],{"class":125},[115,136856,136857,136859,136861],{"class":117,"line":1201},[115,136858,51775],{"class":125},[115,136860,66615],{"class":51290},[115,136862,51297],{"class":125},[20,136864],{"style":126398,"src":136865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136867,136868],{},"value是表单域的内容",[14,136870,136871],{},"例子2：",[106,136873,136874],{"className":127289,"code":136754,"language":127291,"meta":22,"style":22},[112,136875,136876,136896,136922,136948,136966],{"__ignoreMap":22},[115,136877,136878,136880,136882,136884,136886,136888,136890,136892,136894],{"class":117,"line":118},[115,136879,1035],{"class":125},[115,136881,66615],{"class":51290},[115,136883,66618],{"class":1963},[115,136885,171],{"class":125},[115,136887,136769],{"class":230},[115,136889,136772],{"class":1963},[115,136891,171],{"class":125},[115,136893,136777],{"class":230},[115,136895,51297],{"class":125},[115,136897,136898,136900,136902,136904,136906,136908,136910,136912,136914,136916,136918,136920],{"class":117,"line":37},[115,136899,52134],{"class":125},[115,136901,53811],{"class":51290},[115,136903,53814],{"class":1963},[115,136905,171],{"class":125},[115,136907,62689],{"class":230},[115,136909,14921],{"class":1963},[115,136911,171],{"class":125},[115,136913,136720],{"class":230},[115,136915,61010],{"class":1963},[115,136917,171],{"class":125},[115,136919,136804],{"class":230},[115,136921,51297],{"class":125},[115,136923,136924,136926,136928,136930,136932,136934,136936,136938,136940,136942,136944,136946],{"class":117,"line":1180},[115,136925,52134],{"class":125},[115,136927,53811],{"class":51290},[115,136929,53814],{"class":1963},[115,136931,171],{"class":125},[115,136933,136819],{"class":230},[115,136935,14921],{"class":1963},[115,136937,171],{"class":125},[115,136939,136826],{"class":230},[115,136941,61010],{"class":1963},[115,136943,171],{"class":125},[115,136945,136833],{"class":230},[115,136947,51297],{"class":125},[115,136949,136950,136952,136954,136956,136958,136960,136962,136964],{"class":117,"line":1195},[115,136951,52134],{"class":125},[115,136953,53877],{"class":51290},[115,136955,53814],{"class":1963},[115,136957,171],{"class":125},[115,136959,66638],{"class":230},[115,136961,136850],{"class":125},[115,136963,53877],{"class":51290},[115,136965,51297],{"class":125},[115,136967,136968,136970,136972],{"class":117,"line":1201},[115,136969,51775],{"class":125},[115,136971,66615],{"class":51290},[115,136973,51297],{"class":125},[20,136975],{"style":126398,"src":136976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[57,136978,136980],{"id":136979},"_142-css新特性","14.2 CSS新特性",[86,136982,136984],{"id":136983},"_1421-新增选择器","14.2.1 新增选择器",[21999,136986,136988],{"id":136987},"_14211-属性选择器","14.2.1.1 属性选择器",[20,136990],{"style":126398,"src":136991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[106,136993,136995],{"className":126542,"code":136994,"language":126544,"meta":22,"style":22},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[112,136996,136997,137012,137028],{"__ignoreMap":22},[115,136998,136999,137001,137003,137005,137007,137009],{"class":117,"line":118},[115,137000,53811],{"class":51290},[115,137002,1015],{"class":125},[115,137004,103097],{"class":1963},[115,137006,171],{"class":121},[115,137008,62689],{"class":230},[115,137010,137011],{"class":125},"] {\n",[115,137013,137014,137016,137018,137020,137022,137024,137026],{"class":117,"line":37},[115,137015,70886],{"class":174},[115,137017,51427],{"class":125},[115,137019,343],{"class":174},[115,137021,51482],{"class":121},[115,137023,51511],{"class":174},[115,137025,130122],{"class":174},[115,137027,1291],{"class":125},[115,137029,137030],{"class":117,"line":1180},[115,137031,1565],{"class":125},[20,137033],{"style":126398,"src":137034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137036,155],{},[1132,137038,137039,137042,137045,137048],{},[72,137040,137041],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[72,137043,137044],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[72,137046,137047],{},"属性选择器也可以选择出来自定义的属性",[72,137049,137050,137052],{},[275,137051,9026],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21999,137054,137056],{"id":137055},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[20,137058],{"style":126398,"src":137059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[69,137061,137062],{},[72,137063,137064],{},"fist-child",[106,137066,137068],{"className":126542,"code":137067,"language":126544,"meta":22,"style":22},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[112,137069,137070,137075,137090,137110,137128],{"__ignoreMap":22},[115,137071,137072],{"class":117,"line":118},[115,137073,137074],{"class":184},"\u002F* 属性选择器 *\u002F\n",[115,137076,137077,137079,137081,137083,137085,137087],{"class":117,"line":37},[115,137078,53811],{"class":51290},[115,137080,1015],{"class":125},[115,137082,103097],{"class":1963},[115,137084,171],{"class":121},[115,137086,62689],{"class":230},[115,137088,137089],{"class":125},"] { }\n",[115,137091,137092,137094,137096,137098,137101,137104,137107],{"class":117,"line":1180},[115,137093,53811],{"class":51290},[115,137095,1015],{"class":125},[115,137097,14695],{"class":1963},[115,137099,137100],{"class":121},"^=",[115,137102,137103],{"class":230},"\"icon\"",[115,137105,137106],{"class":125},"] { }  ",[115,137108,137109],{"class":184},"\u002F* 以 icon 开头 *\u002F\n",[115,137111,137112,137114,137116,137118,137121,137123,137125],{"class":117,"line":1195},[115,137113,53811],{"class":51290},[115,137115,1015],{"class":125},[115,137117,14695],{"class":1963},[115,137119,137120],{"class":121},"$=",[115,137122,137103],{"class":230},[115,137124,137106],{"class":125},[115,137126,137127],{"class":184},"\u002F* 以 icon 结尾 *\u002F\n",[115,137129,137130,137132,137134,137136,137139,137141,137143],{"class":117,"line":1201},[115,137131,53811],{"class":51290},[115,137133,1015],{"class":125},[115,137135,14695],{"class":1963},[115,137137,137138],{"class":121},"*=",[115,137140,137103],{"class":230},[115,137142,137106],{"class":125},[115,137144,137145],{"class":184},"\u002F* 包含 icon *\u002F\n",[14,137147,137148],{},"ul的第一个儿子文本为红色",[14,137150,137151],{},"一定要在冒号前加空格，不然就是选中所有的了",[106,137153,137155],{"className":126542,"code":137154,"language":126544,"meta":22,"style":22},".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",[112,137156,137157,137163,137173,137177,137181,137186,137199,137212,137228,137245,137262],{"__ignoreMap":22},[115,137158,137159,137161],{"class":117,"line":118},[115,137160,126833],{"class":1963},[115,137162,15573],{"class":125},[115,137164,137165,137167,137169,137171],{"class":117,"line":37},[115,137166,70895],{"class":174},[115,137168,51427],{"class":125},[115,137170,57411],{"class":174},[115,137172,1291],{"class":125},[115,137174,137175],{"class":117,"line":1180},[115,137176,1565],{"class":125},[115,137178,137179],{"class":117,"line":1195},[115,137180,136003],{"class":125},[115,137182,137183],{"class":117,"line":1201},[115,137184,137185],{"class":184},"\u002F* 结构伪类选择器 *\u002F\n",[115,137187,137188,137190,137193,137196],{"class":117,"line":1215},[115,137189,72],{"class":51290},[115,137191,137192],{"class":1963},":first-child",[115,137194,137195],{"class":125}," { }           ",[115,137197,137198],{"class":184},"\u002F* 第一个 *\u002F\n",[115,137200,137201,137203,137206,137209],{"class":117,"line":1221},[115,137202,72],{"class":51290},[115,137204,137205],{"class":1963},":last-child",[115,137207,137208],{"class":125}," { }            ",[115,137210,137211],{"class":184},"\u002F* 最后一个 *\u002F\n",[115,137213,137214,137216,137218,137220,137222,137225],{"class":117,"line":1312},[115,137215,72],{"class":51290},[115,137217,129456],{"class":1963},[115,137219,126],{"class":125},[115,137221,203],{"class":174},[115,137223,137224],{"class":125},") { }          ",[115,137226,137227],{"class":184},"\u002F* 第2个 *\u002F\n",[115,137229,137230,137232,137234,137236,137239,137242],{"class":117,"line":1318},[115,137231,72],{"class":51290},[115,137233,129456],{"class":1963},[115,137235,126],{"class":125},[115,137237,137238],{"class":174},"2n",[115,137240,137241],{"class":125},") { }         ",[115,137243,137244],{"class":184},"\u002F* 偶数 *\u002F\n",[115,137246,137247,137249,137251,137253,137256,137259],{"class":117,"line":1330},[115,137248,72],{"class":51290},[115,137250,129456],{"class":1963},[115,137252,126],{"class":125},[115,137254,137255],{"class":174},"2n+1",[115,137257,137258],{"class":125},") { }       ",[115,137260,137261],{"class":184},"\u002F* 奇数 *\u002F\n",[115,137263,137264,137266,137268,137270,137273,137275],{"class":117,"line":1612},[115,137265,72],{"class":51290},[115,137267,129456],{"class":1963},[115,137269,126],{"class":125},[115,137271,137272],{"class":174},"-n+3",[115,137274,137258],{"class":125},[115,137276,137277],{"class":184},"\u002F* 前3个 *\u002F\n",[51601,137279,137282],{"className":137280},[137281],"example","\n  示例内容\n",[14,137284,137285],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1132,137287,137288],{},[72,137289,137290,137293],{},[112,137291,137292],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137295,137296],{},"也就是说它选择的是熊大",[69,137298,137299],{"start":1215},[72,137300,137301],{},"权重",[106,137303,137305],{"className":126542,"code":137304,"language":126544,"meta":22,"style":22},"\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",[112,137306,137307,137311,137321,137331,137345,137359,137373],{"__ignoreMap":22},[115,137308,137309],{"class":117,"line":118},[115,137310,137185],{"class":184},[115,137312,137313,137315,137317,137319],{"class":117,"line":37},[115,137314,72],{"class":51290},[115,137316,137192],{"class":1963},[115,137318,137195],{"class":125},[115,137320,137198],{"class":184},[115,137322,137323,137325,137327,137329],{"class":117,"line":1180},[115,137324,72],{"class":51290},[115,137326,137205],{"class":1963},[115,137328,137208],{"class":125},[115,137330,137211],{"class":184},[115,137332,137333,137335,137337,137339,137341,137343],{"class":117,"line":1195},[115,137334,72],{"class":51290},[115,137336,129456],{"class":1963},[115,137338,126],{"class":125},[115,137340,203],{"class":174},[115,137342,137224],{"class":125},[115,137344,137227],{"class":184},[115,137346,137347,137349,137351,137353,137355,137357],{"class":117,"line":1201},[115,137348,72],{"class":51290},[115,137350,129456],{"class":1963},[115,137352,126],{"class":125},[115,137354,137238],{"class":174},[115,137356,137241],{"class":125},[115,137358,137244],{"class":184},[115,137360,137361,137363,137365,137367,137369,137371],{"class":117,"line":1215},[115,137362,72],{"class":51290},[115,137364,129456],{"class":1963},[115,137366,126],{"class":125},[115,137368,137255],{"class":174},[115,137370,137258],{"class":125},[115,137372,137261],{"class":184},[115,137374,137375,137377,137379,137381,137383,137385],{"class":117,"line":1221},[115,137376,72],{"class":51290},[115,137378,129456],{"class":1963},[115,137380,126],{"class":125},[115,137382,137272],{"class":174},[115,137384,137258],{"class":125},[115,137386,137277],{"class":184},[14,137388,137389],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21999,137391,137393],{"id":137392},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137395,137396],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[20,137398],{"style":126398,"src":137399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[69,137401,137402],{},[72,137403,155],{},[1132,137405,137406,137409,137412,137415,137418,137421],{},[72,137407,137408],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[72,137410,137411],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[72,137413,137414],{},"语法： element::before {}",[72,137416,137417],{},"before 和 after 必须有 content 属性",[72,137419,137420],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[72,137422,137423],{},"伪元素选择器和标签选择器一样，权重为 1",[69,137425,137426],{"start":37},[72,137427,137428],{},"实例",[106,137430,137431],{"className":126542,"code":137304,"language":126544,"meta":22,"style":22},[112,137432,137433,137437,137447,137457,137471,137485,137499],{"__ignoreMap":22},[115,137434,137435],{"class":117,"line":118},[115,137436,137185],{"class":184},[115,137438,137439,137441,137443,137445],{"class":117,"line":37},[115,137440,72],{"class":51290},[115,137442,137192],{"class":1963},[115,137444,137195],{"class":125},[115,137446,137198],{"class":184},[115,137448,137449,137451,137453,137455],{"class":117,"line":1180},[115,137450,72],{"class":51290},[115,137452,137205],{"class":1963},[115,137454,137208],{"class":125},[115,137456,137211],{"class":184},[115,137458,137459,137461,137463,137465,137467,137469],{"class":117,"line":1195},[115,137460,72],{"class":51290},[115,137462,129456],{"class":1963},[115,137464,126],{"class":125},[115,137466,203],{"class":174},[115,137468,137224],{"class":125},[115,137470,137227],{"class":184},[115,137472,137473,137475,137477,137479,137481,137483],{"class":117,"line":1201},[115,137474,72],{"class":51290},[115,137476,129456],{"class":1963},[115,137478,126],{"class":125},[115,137480,137238],{"class":174},[115,137482,137241],{"class":125},[115,137484,137244],{"class":184},[115,137486,137487,137489,137491,137493,137495,137497],{"class":117,"line":1215},[115,137488,72],{"class":51290},[115,137490,129456],{"class":1963},[115,137492,126],{"class":125},[115,137494,137255],{"class":174},[115,137496,137258],{"class":125},[115,137498,137261],{"class":184},[115,137500,137501,137503,137505,137507,137509,137511],{"class":117,"line":1221},[115,137502,72],{"class":51290},[115,137504,129456],{"class":1963},[115,137506,126],{"class":125},[115,137508,137272],{"class":174},[115,137510,137258],{"class":125},[115,137512,137277],{"class":184},[20,137514],{"style":126398,"src":137515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[69,137517,137518],{"start":1180},[72,137519,137520],{},"使用场景1",[20,137522],{"style":126398,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137525,137526],{},"不需要再加盒子来整红色那部分了",[106,137528,137530],{"className":126542,"code":137529,"language":126544,"meta":22,"style":22},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[112,137531,137532,137537,137546,137557,137567,137571,137580,137591,137601],{"__ignoreMap":22},[115,137533,137534],{"class":117,"line":118},[115,137535,137536],{"class":184},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[115,137538,137539,137541,137544],{"class":117,"line":37},[115,137540,51601],{"class":51290},[115,137542,137543],{"class":1963},"::before",[115,137545,15573],{"class":125},[115,137547,137548,137551,137553,137555],{"class":117,"line":1180},[115,137549,137550],{"class":174},"  content",[115,137552,51427],{"class":125},[115,137554,7653],{"class":230},[115,137556,1291],{"class":125},[115,137558,137559,137561,137563,137565],{"class":117,"line":1195},[115,137560,128158],{"class":174},[115,137562,51427],{"class":125},[115,137564,60859],{"class":174},[115,137566,1291],{"class":125},[115,137568,137569],{"class":117,"line":1201},[115,137570,1565],{"class":125},[115,137572,137573,137575,137578],{"class":117,"line":1215},[115,137574,51601],{"class":51290},[115,137576,137577],{"class":1963},"::after",[115,137579,15573],{"class":125},[115,137581,137582,137584,137586,137589],{"class":117,"line":1221},[115,137583,137550],{"class":174},[115,137585,51427],{"class":125},[115,137587,137588],{"class":230},"\"→\"",[115,137590,1291],{"class":125},[115,137592,137593,137595,137597,137599],{"class":117,"line":1312},[115,137594,70895],{"class":174},[115,137596,51427],{"class":125},[115,137598,62060],{"class":174},[115,137600,1291],{"class":125},[115,137602,137603],{"class":117,"line":1318},[115,137604,1565],{"class":125},[20,137606],{"style":126398,"src":137607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137609,137610],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[20,137612],{"style":126398,"src":137613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137615,137616],{},"但是在引用时需要先转义一下",[14,137618,137619],{},"content='\\e930'",[69,137621,137622],{"start":1195},[72,137623,137624],{},"使用场景2",[14,137626,137627],{},"仿土豆效果",[14,137629,137630],{},"通过使用伪元素选择器可以减少body中盒子的数量",[106,137632,137633],{"className":126542,"code":137529,"language":126544,"meta":22,"style":22},[112,137634,137635,137639,137647,137657,137667,137671,137679,137689,137699],{"__ignoreMap":22},[115,137636,137637],{"class":117,"line":118},[115,137638,137536],{"class":184},[115,137640,137641,137643,137645],{"class":117,"line":37},[115,137642,51601],{"class":51290},[115,137644,137543],{"class":1963},[115,137646,15573],{"class":125},[115,137648,137649,137651,137653,137655],{"class":117,"line":1180},[115,137650,137550],{"class":174},[115,137652,51427],{"class":125},[115,137654,7653],{"class":230},[115,137656,1291],{"class":125},[115,137658,137659,137661,137663,137665],{"class":117,"line":1195},[115,137660,128158],{"class":174},[115,137662,51427],{"class":125},[115,137664,60859],{"class":174},[115,137666,1291],{"class":125},[115,137668,137669],{"class":117,"line":1201},[115,137670,1565],{"class":125},[115,137672,137673,137675,137677],{"class":117,"line":1215},[115,137674,51601],{"class":51290},[115,137676,137577],{"class":1963},[115,137678,15573],{"class":125},[115,137680,137681,137683,137685,137687],{"class":117,"line":1221},[115,137682,137550],{"class":174},[115,137684,51427],{"class":125},[115,137686,137588],{"class":230},[115,137688,1291],{"class":125},[115,137690,137691,137693,137695,137697],{"class":117,"line":1312},[115,137692,70895],{"class":174},[115,137694,51427],{"class":125},[115,137696,62060],{"class":174},[115,137698,1291],{"class":125},[115,137700,137701],{"class":117,"line":1318},[115,137702,1565],{"class":125},[20,137704],{"style":126398,"src":137705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[69,137707,137708],{"start":1201},[72,137709,137710],{},"使用场景3",[14,137712,137713],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[106,137715,137717],{"className":126542,"code":137716,"language":126544,"meta":22,"style":22},".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",[112,137718,137719,137725,137735,137739,137743,137747,137755,137765,137775,137779,137787,137797,137807],{"__ignoreMap":22},[115,137720,137721,137723],{"class":117,"line":118},[115,137722,130390],{"class":1963},[115,137724,15573],{"class":125},[115,137726,137727,137729,137731,137733],{"class":117,"line":37},[115,137728,131022],{"class":174},[115,137730,51427],{"class":125},[115,137732,23737],{"class":174},[115,137734,1291],{"class":125},[115,137736,137737],{"class":117,"line":1180},[115,137738,1565],{"class":125},[115,137740,137741],{"class":117,"line":1195},[115,137742,136003],{"class":125},[115,137744,137745],{"class":117,"line":1201},[115,137746,137536],{"class":184},[115,137748,137749,137751,137753],{"class":117,"line":1215},[115,137750,51601],{"class":51290},[115,137752,137543],{"class":1963},[115,137754,15573],{"class":125},[115,137756,137757,137759,137761,137763],{"class":117,"line":1221},[115,137758,137550],{"class":174},[115,137760,51427],{"class":125},[115,137762,7653],{"class":230},[115,137764,1291],{"class":125},[115,137766,137767,137769,137771,137773],{"class":117,"line":1312},[115,137768,128158],{"class":174},[115,137770,51427],{"class":125},[115,137772,60859],{"class":174},[115,137774,1291],{"class":125},[115,137776,137777],{"class":117,"line":1318},[115,137778,1565],{"class":125},[115,137780,137781,137783,137785],{"class":117,"line":1330},[115,137782,51601],{"class":51290},[115,137784,137577],{"class":1963},[115,137786,15573],{"class":125},[115,137788,137789,137791,137793,137795],{"class":117,"line":1612},[115,137790,137550],{"class":174},[115,137792,51427],{"class":125},[115,137794,137588],{"class":230},[115,137796,1291],{"class":125},[115,137798,137799,137801,137803,137805],{"class":117,"line":1617},[115,137800,70895],{"class":174},[115,137802,51427],{"class":125},[115,137804,62060],{"class":174},[115,137806,1291],{"class":125},[115,137808,137809],{"class":117,"line":1623},[115,137810,1565],{"class":125},[14,137812,137813],{},"div {\nmargin: 0 auto;\n}",[106,137815,137818],{"className":137816,"code":137817,"language":5188},[5186],"\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",[112,137819,137817],{"__ignoreMap":22},[14,137821,137822],{},"如果想让多个元素都发生变化",[14,137824,137825],{},"不能如下操作：",[14,137827,137828],{},"transition: width 2s ease 0.5s;",[14,137830,137831],{},"transition: height 2s ease 0.5s;不对！！！",[14,137833,137834],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137836,137837],{},"使用如下：加逗号隔开",[14,137839,137840],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137842,137843],{},"transition all 2s ease;",[86,137845,137847],{"id":137846},"_1426-过渡练习","14.2.6 过渡练习",[69,137849,137850],{},[72,137851,137852],{},"进度条",[20,137854],{"style":126398,"src":137855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[106,137857,137859],{"className":126542,"code":137858,"language":126544,"meta":22,"style":22},"div {\n  transition: all 0.3s ease;\n}\n",[112,137860,137861,137867,137885],{"__ignoreMap":22},[115,137862,137863,137865],{"class":117,"line":118},[115,137864,51601],{"class":51290},[115,137866,15573],{"class":125},[115,137868,137869,137872,137874,137876,137879,137881,137883],{"class":117,"line":37},[115,137870,137871],{"class":174},"  transition",[115,137873,51427],{"class":125},[115,137875,28122],{"class":174},[115,137877,137878],{"class":174}," 0.3",[115,137880,820],{"class":121},[115,137882,78670],{"class":174},[115,137884,1291],{"class":125},[115,137886,137887],{"class":117,"line":1180},[115,137888,1565],{"class":125},[69,137890,137891],{"start":37},[72,137892,137893],{},"小米logo",[14,137895,137896],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[106,137898,137900],{"className":126542,"code":137899,"language":126544,"meta":22,"style":22},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[112,137901,137902,137907,137913,137929,137934],{"__ignoreMap":22},[115,137903,137904],{"class":117,"line":118},[115,137905,137906],{"class":184},"\u002F* CSS3 过渡 *\u002F\n",[115,137908,137909,137911],{"class":117,"line":37},[115,137910,51601],{"class":51290},[115,137912,15573],{"class":125},[115,137914,137915,137917,137919,137921,137923,137925,137927],{"class":117,"line":1180},[115,137916,137871],{"class":174},[115,137918,51427],{"class":125},[115,137920,28122],{"class":174},[115,137922,137878],{"class":174},[115,137924,820],{"class":121},[115,137926,78670],{"class":174},[115,137928,1291],{"class":125},[115,137930,137931],{"class":117,"line":1195},[115,137932,137933],{"class":184},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[115,137935,137936],{"class":117,"line":1201},[115,137937,1565],{"class":125},[14,137939,137940],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5127,137942,137943],{},"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":22,"searchDepth":37,"depth":37,"links":137945},[137946,137951],{"id":136276,"depth":37,"text":136277,"children":137947},[137948,137949,137950],{"id":136280,"depth":1180,"text":136281},{"id":136357,"depth":1180,"text":136358},{"id":136688,"depth":1180,"text":136689},{"id":136979,"depth":37,"text":136980,"children":137952},[137953,137954],{"id":136983,"depth":1180,"text":136984},{"id":137846,"depth":1180,"text":137847},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136268,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137961,"title":137962,"body":137963,"description":39,"extension":40,"meta":139707,"navigation":42,"path":139708,"seo":139709,"stem":139710,"__hash__":139711},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137964,"toc":139688},[137965,137968,137972,137975,137981,137987,137991,137993,137996,137999,138002,138005,138008,138011,138014,138018,138022,138025,138028,138031,138035,138038,138041,138046,138049,138052,138055,138059,138062,138071,138074,138077,138081,138084,138087,138092,138099,138113,138121,138128,138133,138136,138139,138142,138149,138153,138159,138165,138168,138171,138176,138182,138184,138192,138197,138200,138206,138208,138213,138218,138221,138223,138228,138231,138236,138241,138275,138279,138283,138286,138290,138293,138379,138382,138419,138422,138458,138462,138467,138480,138534,138536,138564,138566,138594,138600,138614,138616,138660,138662,138706,138709,138716,138727,138729,138756,138758,138784,138791,138807,138809,138903,138905,138999,139006,139009,139014,139020,139094,139097,139099,139135,139137,139173,139176,139183,139202,139205,139208,139210,139235,139237,139261,139264,139267,139297,139301,139304,139367,139369,139435,139437,139501,139504,139536,139538,139564,139566,139592,139595,139626,139628,139654,139656,139682,139685],[10,137966,137962],{"id":137967},"_15-品优购项目上篇-搭建与公共模块",[57,137969,137971],{"id":137970},"_151-项目规划","15.1 项目规划",[20,137973],{"style":126398,"src":137974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137976,137977,137980],{},[275,137978,137979],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137982,137983,137986],{},[275,137984,137985],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[57,137988,137990],{"id":137989},"_152-项目介绍","15.2 项目介绍",[14,137992,137979],{},[20,137994],{"style":126398,"src":137995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137997,137998],{},"主页：",[20,138000],{"style":126398,"src":138001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138003,138004],{},"列表页：",[20,138006],{"style":126398,"src":138007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138009,138010],{},"注册页：",[20,138012],{"style":126398,"src":138013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[57,138015,138017],{"id":138016},"_153-项目搭建工作","15.3 项目搭建工作",[86,138019,138021],{"id":138020},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[20,138023],{"style":126398,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138026,138027],{},"经常更换的图片要放到upload文件夹中",[14,138029,138030],{},"不经常换的放到images文件夹中",[86,138032,138034],{"id":138033},"_1532-创建文件如下","15.3.2 创建文件如下",[20,138036],{"style":126398,"src":138037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[20,138039],{"style":126398,"src":138040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138042,138043],{},[275,138044,138045],{},"初始化样式：",[14,138047,138048],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138050,138051],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138053,138054],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[86,138056,138058],{"id":138057},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138060,138061],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138063,138064,138065,138070],{},"这里最典型的应用就是 ",[275,138066,138067],{},[112,138068,138069],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[20,138072],{"style":126398,"src":138073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138075,138076],{},"通过link方法来引入",[86,138078,138080],{"id":138079},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[20,138082],{"style":126398,"src":138083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138085,138086],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[69,138088,138089],{},[72,138090,138091],{},"制作favicon图标",[14,138093,138094,138095,138098],{},"①把品优购图标切成 ",[112,138096,138097],{},"png"," 图片",[14,138100,138101,138102,138104,138105,138108,138109],{},"②把 ",[112,138103,138097],{}," 图片转换为 ",[112,138106,138107],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[27,138110,138111],{"href":138111,"rel":138112},"http:\u002F\u002Fwww.bitbug.net\u002F",[31],[69,138114,138115,138118],{"start":37},[72,138116,138117],{},"favicon图标放到网站根目录下",[72,138119,138120],{},"HTML页面引入favicon",[14,138122,138123,138124,138127],{},"在html 页面里面的 ",[112,138125,138126],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138129,138130],{},[112,138131,138132],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138134,138135],{},"复制这行代码或者在生成这个的网站进行复制",[20,138137],{"style":126398,"src":138138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138140,138141],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138143,138144,138145],{},"例如:",[27,138146,138147],{"href":138147,"rel":138148},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[31],[86,138150,138152],{"id":138151},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138154,138155,138158],{},[275,138156,138157],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138160,138161,138164],{},[275,138162,138163],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138166,138167],{},"页面必须有三个标签用来符合 SEO 优化",[20,138169],{"style":126398,"src":138170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[69,138172,138173],{},[72,138174,138175],{},"title网站标题",[14,138177,138178,138181],{},[275,138179,138180],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138183,68780],{},[1132,138185,138186,138189],{},[72,138187,138188],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[72,138190,138191],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[69,138193,138194],{"start":37},[72,138195,138196],{},"description网站描述",[14,138198,138199],{},"简要说明我们网站主要是做什么的",[14,138201,138202,138205],{},[275,138203,138204],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138207,68780],{},[14,138209,138210],{},[112,138211,138212],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[69,138214,138215],{"start":1180},[72,138216,138217],{},"keywords关键词",[14,138219,138220],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138222,68780],{},[14,138224,138225],{},[112,138226,138227],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138229,138230],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138232,138233],{},[275,138234,138235],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[69,138237,138238],{"start":1195},[72,138239,138240],{},"代码总结",[106,138242,138243],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,138244,138245,138249,138263,138267],{"__ignoreMap":22},[115,138246,138247],{"class":117,"line":118},[115,138248,130653],{"class":184},[115,138250,138251,138253,138255,138257,138259,138261],{"class":117,"line":37},[115,138252,1035],{"class":125},[115,138254,51601],{"class":51290},[115,138256,53476],{"class":1963},[115,138258,171],{"class":125},[115,138260,130666],{"class":230},[115,138262,51297],{"class":125},[115,138264,138265],{"class":117,"line":1180},[115,138266,130673],{"class":125},[115,138268,138269,138271,138273],{"class":117,"line":1195},[115,138270,51775],{"class":125},[115,138272,51601],{"class":51290},[115,138274,51297],{"class":125},[57,138276,138278],{"id":138277},"_154-项目公共部分制作","15.4 项目公共部分制作",[86,138280,138282],{"id":138281},"_1541-常用模块类命名","15.4.1 常用模块类命名",[20,138284],{"style":126398,"src":138285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[86,138287,138289],{"id":138288},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138291,138292],{},"布局思路：",[1132,138294,138295,138298,138301,138323,138356],{},[72,138296,138297],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[72,138299,138300],{},"里面包含版心的盒子",[72,138302,138303,138304],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1132,138305,138306,138314,138320],{},[72,138307,138308,138309,21501,138311,138313],{},"1 号盒子 里面包含一个",[112,138310,1132],{},[112,138312,1132],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[72,138315,138316,138317,138319],{},"里面的内容是水平排列，所以需要给",[112,138318,72],{},"设置浮动",[72,138321,138322],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[72,138324,138325,138326],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1132,138327,138328,138342,138347],{},[72,138329,138330,138331,21501,138333,138335,138336,138338,138339,138341],{},"2 号盒子 里面包含一个",[112,138332,1132],{},[112,138334,1132],{},"包裹",[112,138337,72],{},"，中间的",[112,138340,1046],{},"可以用样式去设置，也可以用字符 |",[72,138343,138344,138345,138319],{},"里面内容水平排列，给",[112,138346,72],{},[72,138348,138349,138350,138352,138353,138355],{},"找到里面所有偶数的 ",[112,138351,72],{}," 设置样式（偶数的 ",[112,138354,72],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[72,138357,138358,138359],{},"需要用到字体图标",[1132,138360,138361,138367,138370,138373,138376],{},[72,138362,138363,138364],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[112,138365,138366],{},"arrow-icon",[72,138368,138369],{},"先要引入字体图片的资源",[72,138371,138372],{},"在样式里面利用 font-face 来进行声明",[72,138374,138375],{},"在伪元素的 content属性设置 图标的编码",[72,138377,138378],{},"给伪元素设置font-family属性",[14,138380,138381],{},"结构实例代码：",[106,138383,138385],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},"div::before {\n  content: \"\";\n  display: block;\n}\n",[112,138386,138387,138395,138405,138415],{"__ignoreMap":22},[115,138388,138389,138391,138393],{"class":117,"line":118},[115,138390,51601],{"class":51290},[115,138392,137543],{"class":1963},[115,138394,15573],{"class":125},[115,138396,138397,138399,138401,138403],{"class":117,"line":37},[115,138398,137550],{"class":174},[115,138400,51427],{"class":125},[115,138402,7653],{"class":230},[115,138404,1291],{"class":125},[115,138406,138407,138409,138411,138413],{"class":117,"line":1180},[115,138408,128158],{"class":174},[115,138410,51427],{"class":125},[115,138412,60859],{"class":174},[115,138414,1291],{"class":125},[115,138416,138417],{"class":117,"line":1195},[115,138418,1565],{"class":125},[14,138420,138421],{},"样式实例代码：",[106,138423,138424],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,138425,138426,138434,138444,138454],{"__ignoreMap":22},[115,138427,138428,138430,138432],{"class":117,"line":118},[115,138429,51601],{"class":51290},[115,138431,137543],{"class":1963},[115,138433,15573],{"class":125},[115,138435,138436,138438,138440,138442],{"class":117,"line":37},[115,138437,137550],{"class":174},[115,138439,51427],{"class":125},[115,138441,7653],{"class":230},[115,138443,1291],{"class":125},[115,138445,138446,138448,138450,138452],{"class":117,"line":1180},[115,138447,128158],{"class":174},[115,138449,51427],{"class":125},[115,138451,60859],{"class":174},[115,138453,1291],{"class":125},[115,138455,138456],{"class":117,"line":1195},[115,138457,1565],{"class":125},[86,138459,138461],{"id":138460},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1132,138463,138464],{},[72,138465,138466],{},"header 盒子必须要有高度",[14,138468,138469,138470,138472,138473],{},"1 号盒子是 ",[112,138471,131554],{}," 标志定位，在正常开发过程中， ",[275,138474,138475,138476,138479],{},"logo的布局其实是有讲究的，需要进行 ",[112,138477,138478],{},"logoSEO","的优化 （★★★）",[1132,138481,138482,138490,138498,138525],{},[72,138483,138484,138486,138487,138489],{},[112,138485,131554],{}," 里面首先放一个 ",[112,138488,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[72,138491,138492,138494,138495,138497],{},[112,138493,10],{}," 里面再放一个链接，可以返回首页的，把 ",[112,138496,131554],{}," 的背景图片给链接即可",[72,138499,138500,138501],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1132,138502,138503,138518],{},[72,138504,138505,138506,138509,138510,138513,138514,138517],{},"方法1：",[112,138507,138508],{},"text-indent"," 移到盒子外面（",[112,138511,138512],{},"text-indent: -9999px",") ，然后 ",[112,138515,138516],{},"overflow:hidden"," ，淘宝的做法",[72,138519,138520,138521,138524],{},"方法2：直接给 ",[112,138522,138523],{},"font-size: 0;"," 就看不到文字了，京东的做法",[72,138526,138527,138528,138530,138531,138533],{},"最后给链接一个 ",[112,138529,51397],{}," 属性，这样鼠标放到 ",[112,138532,131554],{}," 上就可以看到提示文字了",[14,138535,138381],{},[106,138537,138538],{"className":127289,"code":131775,"language":127291,"meta":22,"style":22},[112,138539,138540],{"__ignoreMap":22},[115,138541,138542,138544,138546,138548,138550,138552,138554,138556,138558,138560,138562],{"class":117,"line":118},[115,138543,1035],{"class":125},[115,138545,27],{"class":51290},[115,138547,61047],{"class":1963},[115,138549,171],{"class":125},[115,138551,131790],{"class":230},[115,138553,131793],{"class":1963},[115,138555,171],{"class":125},[115,138557,131798],{"class":230},[115,138559,131801],{"class":125},[115,138561,27],{"class":51290},[115,138563,51297],{"class":125},[14,138565,138421],{},[106,138567,138568],{"className":127289,"code":131775,"language":127291,"meta":22,"style":22},[112,138569,138570],{"__ignoreMap":22},[115,138571,138572,138574,138576,138578,138580,138582,138584,138586,138588,138590,138592],{"class":117,"line":118},[115,138573,1035],{"class":125},[115,138575,27],{"class":51290},[115,138577,61047],{"class":1963},[115,138579,171],{"class":125},[115,138581,131790],{"class":230},[115,138583,131793],{"class":1963},[115,138585,171],{"class":125},[115,138587,131798],{"class":230},[115,138589,131801],{"class":125},[115,138591,27],{"class":51290},[115,138593,51297],{"class":125},[14,138595,138596,138597,138599],{},"2 号盒子是 ",[112,138598,131567],{}," 搜索模块定位",[1132,138601,138602,138605,138608,138611],{},[72,138603,138604],{},"search盒子利用定位的方式放在对应的位置",[72,138606,138607],{},"search盒子设置绝对定位，header盒子设置相对定位",[72,138609,138610],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[72,138612,138613],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138615,138381],{},[106,138617,138618],{"className":126542,"code":131862,"language":126544,"meta":22,"style":22},[112,138619,138620,138642,138646,138656],{"__ignoreMap":22},[115,138621,138622,138624,138626,138628,138630,138632,138634,138636,138638,138640],{"class":117,"line":118},[115,138623,51601],{"class":51290},[115,138625,12436],{"class":125},[115,138627,14],{"class":51290},[115,138629,12436],{"class":125},[115,138631,10],{"class":51290},[115,138633,12436],{"class":125},[115,138635,1132],{"class":51290},[115,138637,12436],{"class":125},[115,138639,72],{"class":51290},[115,138641,15573],{"class":125},[115,138643,138644],{"class":117,"line":37},[115,138645,131891],{"class":184},[115,138647,138648,138650,138652,138654],{"class":117,"line":1180},[115,138649,128158],{"class":174},[115,138651,51427],{"class":125},[115,138653,60859],{"class":174},[115,138655,1291],{"class":125},[115,138657,138658],{"class":117,"line":1195},[115,138659,1565],{"class":125},[14,138661,138421],{},[106,138663,138664],{"className":126542,"code":131862,"language":126544,"meta":22,"style":22},[112,138665,138666,138688,138692,138702],{"__ignoreMap":22},[115,138667,138668,138670,138672,138674,138676,138678,138680,138682,138684,138686],{"class":117,"line":118},[115,138669,51601],{"class":51290},[115,138671,12436],{"class":125},[115,138673,14],{"class":51290},[115,138675,12436],{"class":125},[115,138677,10],{"class":51290},[115,138679,12436],{"class":125},[115,138681,1132],{"class":51290},[115,138683,12436],{"class":125},[115,138685,72],{"class":51290},[115,138687,15573],{"class":125},[115,138689,138690],{"class":117,"line":37},[115,138691,131891],{"class":184},[115,138693,138694,138696,138698,138700],{"class":117,"line":1180},[115,138695,128158],{"class":174},[115,138697,51427],{"class":125},[115,138699,60859],{"class":174},[115,138701,1291],{"class":125},[115,138703,138704],{"class":117,"line":1195},[115,138705,1565],{"class":125},[14,138707,138708],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138710,138711,138712,138715],{},"3 号盒子是 ",[112,138713,138714],{},"hotwords"," 热词模块定位",[1132,138717,138718,138721,138724],{},[72,138719,138720],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[72,138722,138723],{},"给里面所有的a标签设置 左右10px的外边距",[72,138725,138726],{},"给第一个a标签设置文字变红色（#c81623）",[14,138728,138381],{},[106,138730,138732],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},"div {\n  margin: 0 auto;\n}\n",[112,138733,138734,138740,138752],{"__ignoreMap":22},[115,138735,138736,138738],{"class":117,"line":118},[115,138737,51601],{"class":51290},[115,138739,15573],{"class":125},[115,138741,138742,138744,138746,138748,138750],{"class":117,"line":37},[115,138743,70460],{"class":174},[115,138745,51427],{"class":125},[115,138747,317],{"class":174},[115,138749,51546],{"class":174},[115,138751,1291],{"class":125},[115,138753,138754],{"class":117,"line":1180},[115,138755,1565],{"class":125},[14,138757,138421],{},[106,138759,138760],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,138761,138762,138768,138780],{"__ignoreMap":22},[115,138763,138764,138766],{"class":117,"line":118},[115,138765,51601],{"class":51290},[115,138767,15573],{"class":125},[115,138769,138770,138772,138774,138776,138778],{"class":117,"line":37},[115,138771,70460],{"class":174},[115,138773,51427],{"class":125},[115,138775,317],{"class":174},[115,138777,51546],{"class":174},[115,138779,1291],{"class":125},[115,138781,138782],{"class":117,"line":1180},[115,138783,1565],{"class":125},[14,138785,138786,138787,138790],{},"4 号盒子是 ",[112,138788,138789],{},"shopcar"," 购物车模块",[1132,138792,138793,138798,138801,138804],{},[72,138794,123325,138795,138797],{},[112,138796,138789],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[72,138799,138800],{},"count 统计部分用绝对定位做",[72,138802,138803],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[72,138805,138806],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138808,138381],{},[106,138810,138811],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,138812,138813,138817,138831,138835,138849,138853,138867,138871,138885,138889],{"__ignoreMap":22},[115,138814,138815],{"class":117,"line":118},[115,138816,131981],{"class":184},[115,138818,138819,138821,138823,138825,138827,138829],{"class":117,"line":37},[115,138820,131986],{"class":1963},[115,138822,79797],{"class":125},[115,138824,128902],{"class":174},[115,138826,51427],{"class":125},[115,138828,131995],{"class":174},[115,138830,129472],{"class":125},[115,138832,138833],{"class":117,"line":1180},[115,138834,132002],{"class":184},[115,138836,138837,138839,138841,138843,138845,138847],{"class":117,"line":1195},[115,138838,132007],{"class":1963},[115,138840,79797],{"class":125},[115,138842,128902],{"class":174},[115,138844,51427],{"class":125},[115,138846,54754],{"class":174},[115,138848,129472],{"class":125},[115,138850,138851],{"class":117,"line":1201},[115,138852,132022],{"class":184},[115,138854,138855,138857,138859,138861,138863,138865],{"class":117,"line":1215},[115,138856,132027],{"class":1963},[115,138858,79797],{"class":125},[115,138860,128902],{"class":174},[115,138862,51427],{"class":125},[115,138864,54821],{"class":174},[115,138866,129472],{"class":125},[115,138868,138869],{"class":117,"line":1221},[115,138870,132042],{"class":184},[115,138872,138873,138875,138877,138879,138881,138883],{"class":117,"line":1312},[115,138874,132047],{"class":1963},[115,138876,79797],{"class":125},[115,138878,128902],{"class":174},[115,138880,51427],{"class":125},[115,138882,86223],{"class":174},[115,138884,129472],{"class":125},[115,138886,138887],{"class":117,"line":1318},[115,138888,132062],{"class":184},[115,138890,138891,138893,138895,138897,138899,138901],{"class":117,"line":1330},[115,138892,132067],{"class":1963},[115,138894,79797],{"class":125},[115,138896,128902],{"class":174},[115,138898,51427],{"class":125},[115,138900,132076],{"class":174},[115,138902,129472],{"class":125},[14,138904,138421],{},[106,138906,138907],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,138908,138909,138913,138927,138931,138945,138949,138963,138967,138981,138985],{"__ignoreMap":22},[115,138910,138911],{"class":117,"line":118},[115,138912,131981],{"class":184},[115,138914,138915,138917,138919,138921,138923,138925],{"class":117,"line":37},[115,138916,131986],{"class":1963},[115,138918,79797],{"class":125},[115,138920,128902],{"class":174},[115,138922,51427],{"class":125},[115,138924,131995],{"class":174},[115,138926,129472],{"class":125},[115,138928,138929],{"class":117,"line":1180},[115,138930,132002],{"class":184},[115,138932,138933,138935,138937,138939,138941,138943],{"class":117,"line":1195},[115,138934,132007],{"class":1963},[115,138936,79797],{"class":125},[115,138938,128902],{"class":174},[115,138940,51427],{"class":125},[115,138942,54754],{"class":174},[115,138944,129472],{"class":125},[115,138946,138947],{"class":117,"line":1201},[115,138948,132022],{"class":184},[115,138950,138951,138953,138955,138957,138959,138961],{"class":117,"line":1215},[115,138952,132027],{"class":1963},[115,138954,79797],{"class":125},[115,138956,128902],{"class":174},[115,138958,51427],{"class":125},[115,138960,54821],{"class":174},[115,138962,129472],{"class":125},[115,138964,138965],{"class":117,"line":1221},[115,138966,132042],{"class":184},[115,138968,138969,138971,138973,138975,138977,138979],{"class":117,"line":1312},[115,138970,132047],{"class":1963},[115,138972,79797],{"class":125},[115,138974,128902],{"class":174},[115,138976,51427],{"class":125},[115,138978,86223],{"class":174},[115,138980,129472],{"class":125},[115,138982,138983],{"class":117,"line":1318},[115,138984,132062],{"class":184},[115,138986,138987,138989,138991,138993,138995,138997],{"class":117,"line":1330},[115,138988,132067],{"class":1963},[115,138990,79797],{"class":125},[115,138992,128902],{"class":174},[115,138994,51427],{"class":125},[115,138996,132076],{"class":174},[115,138998,129472],{"class":125},[86,139000,139002,139003,139005],{"id":139001},"_1544-nav导航模块制作","15.4.4 ",[112,139004,53703],{},"导航模块制作",[20,139007],{"style":126398,"src":139008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139010,139011,139013],{},[112,139012,53703],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139015,139016,139017],{},"1 号盒子左侧浮动，",[112,139018,139019],{},"dropdown",[1132,139021,139022,139032,139040,139046,139054,139064,139072,139083],{},[72,139023,139024,139025,101008,139028,139031],{},"1号盒子有讲究，根据相关性 里面包含 ",[112,139026,139027],{},".dt",[112,139029,139030],{},".dd"," 两个盒子",[72,139033,139034,139036,139037,139039],{},[112,139035,139027],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[112,139038,139030],{}," 挤到下面去了",[72,139041,139042,139043,139045],{},"给 ",[112,139044,139030],{}," 盒子设置宽度 和 高度，以及背景颜色",[72,139047,139042,139048,139050,139051,120227],{},[112,139049,139030],{}," 盒子里面定义 无序列表 （",[112,139052,139053],{},"ul > li > a",[72,139055,139056,139057,139059,139060,139063],{},"每个 ",[112,139058,72],{}," 都有一个高度（",[112,139061,139062],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[72,139065,139042,139066,139068,139069,120227],{},[112,139067,72],{}," 里面的a设置文字大小（",[112,139070,139071],{},"14px",[72,139073,139042,139074,139076,139077,139079,139080,139082],{},[112,139075,72],{}," 设置 ",[112,139078,127703],{},"，当鼠标移入的时候，让",[112,139081,72],{},"的背景变成白色，让里面的文字变成红色",[72,139084,139085,139087,139088,139090,139091,139093],{},[112,139086,72],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[112,139089,72],{},"的右侧，那么给",[112,139092,72],{},"设置相对定位",[14,139095,139096],{},"一定要注意相关性",[14,139098,138381],{},[106,139100,139101],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,139102,139103,139111,139121,139131],{"__ignoreMap":22},[115,139104,139105,139107,139109],{"class":117,"line":118},[115,139106,51601],{"class":51290},[115,139108,137543],{"class":1963},[115,139110,15573],{"class":125},[115,139112,139113,139115,139117,139119],{"class":117,"line":37},[115,139114,137550],{"class":174},[115,139116,51427],{"class":125},[115,139118,7653],{"class":230},[115,139120,1291],{"class":125},[115,139122,139123,139125,139127,139129],{"class":117,"line":1180},[115,139124,128158],{"class":174},[115,139126,51427],{"class":125},[115,139128,60859],{"class":174},[115,139130,1291],{"class":125},[115,139132,139133],{"class":117,"line":1195},[115,139134,1565],{"class":125},[14,139136,138421],{},[106,139138,139139],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,139140,139141,139149,139159,139169],{"__ignoreMap":22},[115,139142,139143,139145,139147],{"class":117,"line":118},[115,139144,51601],{"class":51290},[115,139146,137543],{"class":1963},[115,139148,15573],{"class":125},[115,139150,139151,139153,139155,139157],{"class":117,"line":37},[115,139152,137550],{"class":174},[115,139154,51427],{"class":125},[115,139156,7653],{"class":230},[115,139158,1291],{"class":125},[115,139160,139161,139163,139165,139167],{"class":117,"line":1180},[115,139162,128158],{"class":174},[115,139164,51427],{"class":125},[115,139166,60859],{"class":174},[115,139168,1291],{"class":125},[115,139170,139171],{"class":117,"line":1195},[115,139172,1565],{"class":125},[14,139174,139175],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139177,139178,139179,139182],{},"2 号盒子左侧浮动，",[112,139180,139181],{},"navitems"," 导航栏组",[1132,139184,139185,139190,139199],{},[72,139186,139187,139188],{},"里面结构是 ",[112,139189,139053],{},[72,139191,139192,139193,139195,139196,139198],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[112,139194,27],{},"左右的",[112,139197,30884],{},"把两侧撑开",[72,139200,139201],{},"让文字垂直居中（行高等于高度）",[20,139203],{"style":126398,"src":139204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139206,139207],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139209,138381],{},[106,139211,139213],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},".box {\n  float: left;\n}\n",[112,139214,139215,139221,139231],{"__ignoreMap":22},[115,139216,139217,139219],{"class":117,"line":118},[115,139218,130390],{"class":1963},[115,139220,15573],{"class":125},[115,139222,139223,139225,139227,139229],{"class":117,"line":37},[115,139224,131022],{"class":174},[115,139226,51427],{"class":125},[115,139228,23737],{"class":174},[115,139230,1291],{"class":125},[115,139232,139233],{"class":117,"line":1180},[115,139234,1565],{"class":125},[14,139236,138421],{},[106,139238,139239],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,139240,139241,139247,139257],{"__ignoreMap":22},[115,139242,139243,139245],{"class":117,"line":118},[115,139244,130390],{"class":1963},[115,139246,15573],{"class":125},[115,139248,139249,139251,139253,139255],{"class":117,"line":37},[115,139250,131022],{"class":174},[115,139252,51427],{"class":125},[115,139254,23737],{"class":174},[115,139256,1291],{"class":125},[115,139258,139259],{"class":117,"line":1180},[115,139260,1565],{"class":125},[14,139262,139263],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[20,139265],{"style":126398,"src":139266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[106,139268,139269],{"className":126542,"code":130699,"language":126544,"meta":22,"style":22},[112,139270,139271,139277,139293],{"__ignoreMap":22},[115,139272,139273,139275],{"class":117,"line":118},[115,139274,51601],{"class":51290},[115,139276,15573],{"class":125},[115,139278,139279,139281,139283,139285,139287,139289,139291],{"class":117,"line":37},[115,139280,70886],{"class":174},[115,139282,51427],{"class":125},[115,139284,343],{"class":174},[115,139286,51482],{"class":121},[115,139288,51511],{"class":174},[115,139290,129934],{"class":174},[115,139292,1291],{"class":125},[115,139294,139295],{"class":117,"line":1180},[115,139296,1565],{"class":125},[86,139298,139300],{"id":139299},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[20,139302],{"style":126398,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1132,139305,139306,139311,139316],{},[72,139307,139308,139310],{},[112,139309,131745],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[72,139312,139313,139315],{},[112,139314,131745],{}," 里面有一个大的版心",[72,139317,139318,139319,139322,139323],{},"版心里面包含 1 号盒子，",[112,139320,139321],{},"mod_service"," 是服务模块，mod 是模块的意思",[1132,139324,139325,139330,139343,139359,139364],{},[72,139326,139042,139327,139329],{},[112,139328,139321],{}," 设置高度（80px）和下边框",[72,139331,139332,139333,139336,139337,139339,139340,139342],{},"在里面定义 ",[112,139334,139335],{},"ul > li"," ,每个",[112,139338,72],{}," 宽度是300px 高度是 50px，给每个",[112,139341,72],{},"设置35px的左内边距",[72,139344,139345,139346,139348,139349,139351,139352,139354,139355,18411,139357,120227],{},"在每个",[112,139347,72],{},"里面，放一个 ",[112,139350,22911],{},"（里面放图标），一个",[112,139353,51601],{},"（里面放",[112,139356,51601],{},[112,139358,14],{},[72,139360,139042,139361,139363],{},[112,139362,22911],{},"设置浮动，让h5与这个div左右排列",[72,139365,139366],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139368,138381],{},[106,139370,139372],{"className":126542,"code":139371,"language":126544,"meta":22,"style":22},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[112,139373,139374,139380,139392,139404,139431],{"__ignoreMap":22},[115,139375,139376,139378],{"class":117,"line":118},[115,139377,134299],{"class":1963},[115,139379,15573],{"class":125},[115,139381,139382,139384,139386,139388,139390],{"class":117,"line":37},[115,139383,70558],{"class":174},[115,139385,51427],{"class":125},[115,139387,825],{"class":174},[115,139389,51482],{"class":121},[115,139391,1291],{"class":125},[115,139393,139394,139396,139398,139400,139402],{"class":117,"line":1180},[115,139395,70778],{"class":174},[115,139397,51427],{"class":125},[115,139399,825],{"class":174},[115,139401,51482],{"class":121},[115,139403,1291],{"class":125},[115,139405,139406,139408,139410,139412,139414,139416,139418,139420,139423,139425,139427,139429],{"class":117,"line":1195},[115,139407,70601],{"class":174},[115,139409,51427],{"class":125},[115,139411,61716],{"class":174},[115,139413,126],{"class":125},[115,139415,134338],{"class":5217},[115,139417,13715],{"class":125},[115,139419,61726],{"class":174},[115,139421,139422],{"class":174}," -10",[115,139424,51482],{"class":121},[115,139426,134357],{"class":174},[115,139428,51482],{"class":121},[115,139430,1291],{"class":125},[115,139432,139433],{"class":117,"line":1201},[115,139434,1565],{"class":125},[14,139436,138421],{},[106,139438,139439],{"className":126542,"code":139371,"language":126544,"meta":22,"style":22},[112,139440,139441,139447,139459,139471,139497],{"__ignoreMap":22},[115,139442,139443,139445],{"class":117,"line":118},[115,139444,134299],{"class":1963},[115,139446,15573],{"class":125},[115,139448,139449,139451,139453,139455,139457],{"class":117,"line":37},[115,139450,70558],{"class":174},[115,139452,51427],{"class":125},[115,139454,825],{"class":174},[115,139456,51482],{"class":121},[115,139458,1291],{"class":125},[115,139460,139461,139463,139465,139467,139469],{"class":117,"line":1180},[115,139462,70778],{"class":174},[115,139464,51427],{"class":125},[115,139466,825],{"class":174},[115,139468,51482],{"class":121},[115,139470,1291],{"class":125},[115,139472,139473,139475,139477,139479,139481,139483,139485,139487,139489,139491,139493,139495],{"class":117,"line":1195},[115,139474,70601],{"class":174},[115,139476,51427],{"class":125},[115,139478,61716],{"class":174},[115,139480,126],{"class":125},[115,139482,134338],{"class":5217},[115,139484,13715],{"class":125},[115,139486,61726],{"class":174},[115,139488,139422],{"class":174},[115,139490,51482],{"class":121},[115,139492,134357],{"class":174},[115,139494,51482],{"class":121},[115,139496,1291],{"class":125},[115,139498,139499],{"class":117,"line":1201},[115,139500,1565],{"class":125},[14,139502,139503],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1132,139505,139506,139509,139515,139521,139533],{},[72,139507,139508],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[72,139510,139511,139512,120227],{},"里面的布局利用 自定义列表来实现（",[112,139513,139514],{},"dl > dt + dd",[72,139516,139042,139517,139520],{},[112,139518,139519],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[72,139522,139042,139523,139526,139527,18411,139529,139532],{},[112,139524,139525],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[112,139528,139525],{},[112,139530,139531],{},"dd","之间有些距离",[72,139534,139535],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139537,138381],{},[106,139539,139540],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,139541,139542,139548,139560],{"__ignoreMap":22},[115,139543,139544,139546],{"class":117,"line":118},[115,139545,51601],{"class":51290},[115,139547,15573],{"class":125},[115,139549,139550,139552,139554,139556,139558],{"class":117,"line":37},[115,139551,70460],{"class":174},[115,139553,51427],{"class":125},[115,139555,317],{"class":174},[115,139557,51546],{"class":174},[115,139559,1291],{"class":125},[115,139561,139562],{"class":117,"line":1180},[115,139563,1565],{"class":125},[14,139565,138421],{},[106,139567,139568],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,139569,139570,139576,139588],{"__ignoreMap":22},[115,139571,139572,139574],{"class":117,"line":118},[115,139573,51601],{"class":51290},[115,139575,15573],{"class":125},[115,139577,139578,139580,139582,139584,139586],{"class":117,"line":37},[115,139579,70460],{"class":174},[115,139581,51427],{"class":125},[115,139583,317],{"class":174},[115,139585,51546],{"class":174},[115,139587,1291],{"class":125},[115,139589,139590],{"class":117,"line":1180},[115,139591,1565],{"class":125},[14,139593,139594],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1132,139596,139597,139606,139609,139620],{},[72,139598,139599,139600,139602,139603,139605],{},"分为上下两块，上面是 ",[112,139601,131762],{}," 友情链接，下面是 ",[112,139604,131755],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[72,139607,139608],{},"把内容分别复制到相应模块中",[72,139610,139042,139611,139613,139614,139616,139617,139619],{},[112,139612,131762],{}," 设置 15px 的下外边距，给",[112,139615,131762],{}," 里面 的 ",[112,139618,27],{}," 标签设置 左右 3px 的外边距",[72,139621,139622,139623,139625],{},"给",[112,139624,131755],{}," 设置 20px 的行高",[14,139627,138381],{},[106,139629,139630],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,139631,139632,139638,139650],{"__ignoreMap":22},[115,139633,139634,139636],{"class":117,"line":118},[115,139635,51601],{"class":51290},[115,139637,15573],{"class":125},[115,139639,139640,139642,139644,139646,139648],{"class":117,"line":37},[115,139641,70460],{"class":174},[115,139643,51427],{"class":125},[115,139645,317],{"class":174},[115,139647,51546],{"class":174},[115,139649,1291],{"class":125},[115,139651,139652],{"class":117,"line":1180},[115,139653,1565],{"class":125},[14,139655,138421],{},[106,139657,139658],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,139659,139660,139666,139678],{"__ignoreMap":22},[115,139661,139662,139664],{"class":117,"line":118},[115,139663,51601],{"class":51290},[115,139665,15573],{"class":125},[115,139667,139668,139670,139672,139674,139676],{"class":117,"line":37},[115,139669,70460],{"class":174},[115,139671,51427],{"class":125},[115,139673,317],{"class":174},[115,139675,51546],{"class":174},[115,139677,1291],{"class":125},[115,139679,139680],{"class":117,"line":1180},[115,139681,1565],{"class":125},[14,139683,139684],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5127,139686,139687],{},"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":22,"searchDepth":37,"depth":37,"links":139689},[139690,139691,139692,139699],{"id":137970,"depth":37,"text":137971},{"id":137989,"depth":37,"text":137990},{"id":138016,"depth":37,"text":138017,"children":139693},[139694,139695,139696,139697,139698],{"id":138020,"depth":1180,"text":138021},{"id":138033,"depth":1180,"text":138034},{"id":138057,"depth":1180,"text":138058},{"id":138079,"depth":1180,"text":138080},{"id":138151,"depth":1180,"text":138152},{"id":138277,"depth":37,"text":138278,"children":139700},[139701,139702,139703,139704,139706],{"id":138281,"depth":1180,"text":138282},{"id":138288,"depth":1180,"text":138289},{"id":138460,"depth":1180,"text":138461},{"id":139001,"depth":1180,"text":139705},"15.4.4 nav导航模块制作",{"id":139299,"depth":1180,"text":139300},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137962,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139713,"title":139714,"body":139715,"description":39,"extension":40,"meta":142117,"navigation":42,"path":142118,"seo":142119,"stem":142120,"__hash__":142121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139716,"toc":142094},[139717,139720,139724,139728,139740,139743,139746,139749,139760,139762,139786,139788,139812,139817,139820,139822,139858,139860,139896,139899,139904,139907,139910,139913,139943,139950,139953,139963,139965,139999,140002,140036,140042,140059,140061,140097,140099,140135,140140,140165,140167,140193,140195,140219,140226,140229,140293,140295,140337,140339,140379,140386,140391,140393,140423,140425,140455,140459,140462,140469,140481,140483,140509,140511,140535,140538,140540,140564,140570,140580,140582,140612,140614,140644,140651,140692,140694,140730,140732,140768,140772,140775,140778,140781,140787,140792,140795,140818,140821,140845,140848,140872,140877,140880,140883,140886,140889,140892,140966,140968,140998,141000,141030,141033,141036,141068,141072,141076,141090,141099,141102,141107,141109,141203,141205,141299,141322,141324,141348,141350,141374,141381,141384,141394,141396,141420,141425,141433,141435,141465,141470,141510,141512,141538,141540,141566,141570,141573,141578,141581,141585,141593,141600,141608,141610,141640,141642,141672,141680,141683,141686,141688,141718,141720,141750,141753,141758,141760,141784,141786,141810,141813,141898,141900,141924,141926,141950,141954,141956,141980,141982,142016,142020,142034,142037,142042,142045,142050,142053,142083,142091],[10,139718,139714],{"id":139719},"_16-品优购项目下篇-主体与页面开发",[57,139721,139723],{"id":139722},"_161-项目主体模块制作","16.1 项目主体模块制作",[86,139725,139727],{"id":139726},"_1611-首页制作","16.1.1 首页制作",[14,139729,139730,139732,139733,139735,139736,139739],{},[275,139731,102048],{}," 主体模块是 ",[275,139734,74048],{}," 里面专有的，注意需要新的样式文件 ",[275,139737,139738],{},"index.css，"," 就不要写在common.css中了",[20,139741],{"style":126398,"src":139742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[20,139744],{"style":126398,"src":139745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139747,139748],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1132,139750,139751,139754,139757],{},[72,139752,139753],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[72,139755,139756],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[72,139758,139759],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139761,138381],{},[106,139763,139764],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,139765,139766,139772,139782],{"__ignoreMap":22},[115,139767,139768,139770],{"class":117,"line":118},[115,139769,130390],{"class":1963},[115,139771,15573],{"class":125},[115,139773,139774,139776,139778,139780],{"class":117,"line":37},[115,139775,131022],{"class":174},[115,139777,51427],{"class":125},[115,139779,23737],{"class":174},[115,139781,1291],{"class":125},[115,139783,139784],{"class":117,"line":1180},[115,139785,1565],{"class":125},[14,139787,138421],{},[106,139789,139790],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,139791,139792,139798,139808],{"__ignoreMap":22},[115,139793,139794,139796],{"class":117,"line":118},[115,139795,130390],{"class":1963},[115,139797,15573],{"class":125},[115,139799,139800,139802,139804,139806],{"class":117,"line":37},[115,139801,131022],{"class":174},[115,139803,51427],{"class":125},[115,139805,23737],{"class":174},[115,139807,1291],{"class":125},[115,139809,139810],{"class":117,"line":1180},[115,139811,1565],{"class":125},[69,139813,139814],{},[72,139815,139816],{},"左侧focus模块制作",[20,139818],{"style":126398,"src":139819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139821,138381],{},[106,139823,139824],{"className":126542,"code":127865,"language":126544,"meta":22,"style":22},[112,139825,139826,139834,139844,139854],{"__ignoreMap":22},[115,139827,139828,139830,139832],{"class":117,"line":118},[115,139829,53811],{"class":51290},[115,139831,61890],{"class":1963},[115,139833,15573],{"class":125},[115,139835,139836,139838,139840,139842],{"class":117,"line":37},[115,139837,127880],{"class":174},[115,139839,51427],{"class":125},[115,139841,54879],{"class":174},[115,139843,1291],{"class":125},[115,139845,139846,139848,139850,139852],{"class":117,"line":1180},[115,139847,70788],{"class":174},[115,139849,51427],{"class":125},[115,139851,54727],{"class":174},[115,139853,1291],{"class":125},[115,139855,139856],{"class":117,"line":1195},[115,139857,1565],{"class":125},[14,139859,138421],{},[106,139861,139862],{"className":126542,"code":127865,"language":126544,"meta":22,"style":22},[112,139863,139864,139872,139882,139892],{"__ignoreMap":22},[115,139865,139866,139868,139870],{"class":117,"line":118},[115,139867,53811],{"class":51290},[115,139869,61890],{"class":1963},[115,139871,15573],{"class":125},[115,139873,139874,139876,139878,139880],{"class":117,"line":37},[115,139875,127880],{"class":174},[115,139877,51427],{"class":125},[115,139879,54879],{"class":174},[115,139881,1291],{"class":125},[115,139883,139884,139886,139888,139890],{"class":117,"line":1180},[115,139885,70788],{"class":174},[115,139887,51427],{"class":125},[115,139889,54727],{"class":174},[115,139891,1291],{"class":125},[115,139893,139894],{"class":117,"line":1195},[115,139895,1565],{"class":125},[14,139897,139898],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[69,139900,139901],{"start":37},[72,139902,139903],{},"右侧newsflash模块制作",[20,139905],{"style":126398,"src":139906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139908,139909],{},"右侧的模块 分为上中下三个盒子",[14,139911,139912],{},"结构代码：",[106,139914,139915],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,139916,139917],{"__ignoreMap":22},[115,139918,139919,139921,139923,139925,139927,139929,139931,139933,139935,139937,139939,139941],{"class":117,"line":118},[115,139920,1035],{"class":125},[115,139922,20],{"class":51290},[115,139924,55229],{"class":1963},[115,139926,171],{"class":125},[115,139928,134059],{"class":230},[115,139930,55237],{"class":1963},[115,139932,171],{"class":125},[115,139934,134066],{"class":230},[115,139936,134069],{"class":1963},[115,139938,171],{"class":125},[115,139940,134074],{"class":230},[115,139942,51297],{"class":125},[14,139944,139945,139946,139949],{},"1 号盒子为 ",[112,139947,139948],{},"news"," 新闻模块 高度为 165px",[20,139951],{"style":126398,"src":139952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139954,139955,139956,139959,139960],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[112,139957,139958],{},"news-hd","，下面是 ",[112,139961,139962],{},"news-bd",[14,139964,139912],{},[106,139966,139967],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,139968,139969,139973,139987,139991],{"__ignoreMap":22},[115,139970,139971],{"class":117,"line":118},[115,139972,130653],{"class":184},[115,139974,139975,139977,139979,139981,139983,139985],{"class":117,"line":37},[115,139976,1035],{"class":125},[115,139978,51601],{"class":51290},[115,139980,53476],{"class":1963},[115,139982,171],{"class":125},[115,139984,130666],{"class":230},[115,139986,51297],{"class":125},[115,139988,139989],{"class":117,"line":1180},[115,139990,130673],{"class":125},[115,139992,139993,139995,139997],{"class":117,"line":1195},[115,139994,51775],{"class":125},[115,139996,51601],{"class":51290},[115,139998,51297],{"class":125},[14,140000,140001],{},"样式代码：",[106,140003,140004],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,140005,140006,140010,140024,140028],{"__ignoreMap":22},[115,140007,140008],{"class":117,"line":118},[115,140009,130653],{"class":184},[115,140011,140012,140014,140016,140018,140020,140022],{"class":117,"line":37},[115,140013,1035],{"class":125},[115,140015,51601],{"class":51290},[115,140017,53476],{"class":1963},[115,140019,171],{"class":125},[115,140021,130666],{"class":230},[115,140023,51297],{"class":125},[115,140025,140026],{"class":117,"line":1180},[115,140027,130673],{"class":125},[115,140029,140030,140032,140034],{"class":117,"line":1195},[115,140031,51775],{"class":125},[115,140033,51601],{"class":51290},[115,140035,51297],{"class":125},[14,140037,140038,140039,140041],{},"上面是",[112,140040,139958],{},"，设置高度是 33px，设置下边框",[1132,140043,140044,140050],{},[72,140045,140046,140047,140049],{},"里面放一个",[112,140048,22911],{}," 标题",[72,140051,140052,140053,140055,140056,140058],{},"放一个a",[112,140054,102683],{},"，内容是 更多，然后让 ",[112,140057,27],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140060,139912],{},[106,140062,140063],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,140064,140065,140073,140083,140093],{"__ignoreMap":22},[115,140066,140067,140069,140071],{"class":117,"line":118},[115,140068,51601],{"class":51290},[115,140070,137543],{"class":1963},[115,140072,15573],{"class":125},[115,140074,140075,140077,140079,140081],{"class":117,"line":37},[115,140076,137550],{"class":174},[115,140078,51427],{"class":125},[115,140080,7653],{"class":230},[115,140082,1291],{"class":125},[115,140084,140085,140087,140089,140091],{"class":117,"line":1180},[115,140086,128158],{"class":174},[115,140088,51427],{"class":125},[115,140090,60859],{"class":174},[115,140092,1291],{"class":125},[115,140094,140095],{"class":117,"line":1195},[115,140096,1565],{"class":125},[14,140098,140001],{},[106,140100,140101],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,140102,140103,140111,140121,140131],{"__ignoreMap":22},[115,140104,140105,140107,140109],{"class":117,"line":118},[115,140106,51601],{"class":51290},[115,140108,137543],{"class":1963},[115,140110,15573],{"class":125},[115,140112,140113,140115,140117,140119],{"class":117,"line":37},[115,140114,137550],{"class":174},[115,140116,51427],{"class":125},[115,140118,7653],{"class":230},[115,140120,1291],{"class":125},[115,140122,140123,140125,140127,140129],{"class":117,"line":1180},[115,140124,128158],{"class":174},[115,140126,51427],{"class":125},[115,140128,60859],{"class":174},[115,140130,1291],{"class":125},[115,140132,140133],{"class":117,"line":1195},[115,140134,1565],{"class":125},[14,140136,140137,140138],{},"下面是",[112,140139,139962],{},[1132,140141,140142,140150],{},[72,140143,140144,140145,101008,140147,140149],{},"里面包含 ",[112,140146,1132],{},[112,140148,72],{}," 还有链接",[72,140151,139622,140152,140154,140155,140157,140158,140161,140162],{},[112,140153,72],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[112,140156,131208],{}," 2.设置 ",[112,140159,140160],{},"white-space: nowrap;"," 3. 设置 ",[112,140163,140164],{},"text-overflow: ellipsis;",[14,140166,139912],{},[106,140168,140170],{"className":126542,"code":140169,"language":126544,"meta":22,"style":22},"div {\n  overflow: hidden;\n}\n",[112,140171,140172,140178,140189],{"__ignoreMap":22},[115,140173,140174,140176],{"class":117,"line":118},[115,140175,51601],{"class":51290},[115,140177,15573],{"class":125},[115,140179,140180,140183,140185,140187],{"class":117,"line":37},[115,140181,140182],{"class":174},"  overflow",[115,140184,51427],{"class":125},[115,140186,61704],{"class":174},[115,140188,1291],{"class":125},[115,140190,140191],{"class":117,"line":1180},[115,140192,1565],{"class":125},[14,140194,140001],{},[106,140196,140197],{"className":126542,"code":140169,"language":126544,"meta":22,"style":22},[112,140198,140199,140205,140215],{"__ignoreMap":22},[115,140200,140201,140203],{"class":117,"line":118},[115,140202,51601],{"class":51290},[115,140204,15573],{"class":125},[115,140206,140207,140209,140211,140213],{"class":117,"line":37},[115,140208,140182],{"class":174},[115,140210,51427],{"class":125},[115,140212,61704],{"class":174},[115,140214,1291],{"class":125},[115,140216,140217],{"class":117,"line":1180},[115,140218,1565],{"class":125},[14,140220,140221,140222,140225],{},"2 号盒子为 ",[112,140223,140224],{},"lifeservice"," 生活服务模块 高度为 209px",[20,140227],{"style":126398,"src":140228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1132,140230,140231,140234,140244,140268,140279],{},[72,140232,140233],{},"设置边框（左右下边框）",[72,140235,140236,140237,140240,140241,140243],{},"里面的内容 是 ",[112,140238,140239],{},"ul > 12*li","，给",[112,140242,72],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[72,140245,140246,140247],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1132,140248,140249,140254,140263],{},[72,140250,140251,140253],{},[112,140252,140224],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[72,140255,140256,140257,140259,140260,140262],{},"可以让 ",[112,140258,140224],{}," 里面的 ",[112,140261,1132],{}," 宽度为 252，就可以装的下 4 个 小 li",[72,140264,140265,140267],{},[112,140266,140224],{}," 盒子 overflow 隐藏多余的部分就可以了",[72,140269,116457,140270,140272,140273,140275,140276,140278],{},[112,140271,72],{}," 里面放一个 ",[112,140274,566],{},"（里面放图标），下面的文本用 ",[112,140277,14],{}," 标签包裹",[72,140280,139042,140281,140283,140284,140286,140287,139076,140289,140292],{},[112,140282,566],{}," 设置 24px宽和28px的高（注意 ",[112,140285,566],{}," 是行内元素， 转成行内块），给 ",[112,140288,72],{},[112,140290,140291],{},"text-align:center"," 让里面内容居中显示",[14,140294,139912],{},[106,140296,140298],{"className":126542,"code":140297,"language":126544,"meta":22,"style":22},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[112,140299,140300,140318,140323,140333],{"__ignoreMap":22},[115,140301,140302,140304,140306,140308,140310,140312,140314,140316],{"class":117,"line":118},[115,140303,115],{"class":51290},[115,140305,12436],{"class":125},[115,140307,27],{"class":51290},[115,140309,12436],{"class":125},[115,140311,23554],{"class":51290},[115,140313,12436],{"class":125},[115,140315,275],{"class":51290},[115,140317,15573],{"class":125},[115,140319,140320],{"class":117,"line":37},[115,140321,140322],{"class":184},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[115,140324,140325,140327,140329,140331],{"class":117,"line":1180},[115,140326,128158],{"class":174},[115,140328,51427],{"class":125},[115,140330,128220],{"class":174},[115,140332,1291],{"class":125},[115,140334,140335],{"class":117,"line":1195},[115,140336,1565],{"class":125},[14,140338,140001],{},[106,140340,140341],{"className":126542,"code":140297,"language":126544,"meta":22,"style":22},[112,140342,140343,140361,140365,140375],{"__ignoreMap":22},[115,140344,140345,140347,140349,140351,140353,140355,140357,140359],{"class":117,"line":118},[115,140346,115],{"class":51290},[115,140348,12436],{"class":125},[115,140350,27],{"class":51290},[115,140352,12436],{"class":125},[115,140354,23554],{"class":51290},[115,140356,12436],{"class":125},[115,140358,275],{"class":51290},[115,140360,15573],{"class":125},[115,140362,140363],{"class":117,"line":37},[115,140364,140322],{"class":184},[115,140366,140367,140369,140371,140373],{"class":117,"line":1180},[115,140368,128158],{"class":174},[115,140370,51427],{"class":125},[115,140372,128220],{"class":174},[115,140374,1291],{"class":125},[115,140376,140377],{"class":117,"line":1195},[115,140378,1565],{"class":125},[14,140380,140381,140382,140385],{},"3 号盒子为 ",[112,140383,140384],{},"bargain"," 特价商品",[1132,140387,140388],{},[72,140389,140390],{},"这个比较简单，直接插入一张图片即可",[14,140392,139912],{},[106,140394,140395],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,140396,140397],{"__ignoreMap":22},[115,140398,140399,140401,140403,140405,140407,140409,140411,140413,140415,140417,140419,140421],{"class":117,"line":118},[115,140400,1035],{"class":125},[115,140402,20],{"class":51290},[115,140404,55229],{"class":1963},[115,140406,171],{"class":125},[115,140408,134059],{"class":230},[115,140410,55237],{"class":1963},[115,140412,171],{"class":125},[115,140414,134066],{"class":230},[115,140416,134069],{"class":1963},[115,140418,171],{"class":125},[115,140420,134074],{"class":230},[115,140422,51297],{"class":125},[14,140424,140001],{},[106,140426,140427],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,140428,140429],{"__ignoreMap":22},[115,140430,140431,140433,140435,140437,140439,140441,140443,140445,140447,140449,140451,140453],{"class":117,"line":118},[115,140432,1035],{"class":125},[115,140434,20],{"class":51290},[115,140436,55229],{"class":1963},[115,140438,171],{"class":125},[115,140440,134059],{"class":230},[115,140442,55237],{"class":1963},[115,140444,171],{"class":125},[115,140446,134066],{"class":230},[115,140448,134069],{"class":1963},[115,140450,171],{"class":125},[115,140452,134074],{"class":230},[115,140454,51297],{"class":125},[86,140456,140458],{"id":140457},"_1612-推荐模块制作","16.1.2 推荐模块制作",[20,140460],{"style":126398,"src":140461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140463,140464,140465,140468],{},"大盒子 ",[112,140466,140467],{},"recom"," 推荐模块 recommend",[1132,140470,140471],{},[72,140472,140473,140474,140476,140477,140480],{},"给这个 ",[112,140475,140467],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[112,140478,140479],{},"#ebebeb","），设置距离上边 12px",[14,140482,139912],{},[106,140484,140486],{"className":126542,"code":140485,"language":126544,"meta":22,"style":22},"div {\n  background-color: #f0f0f0;\n}\n",[112,140487,140488,140494,140505],{"__ignoreMap":22},[115,140489,140490,140492],{"class":117,"line":118},[115,140491,51601],{"class":51290},[115,140493,15573],{"class":125},[115,140495,140496,140498,140500,140503],{"class":117,"line":37},[115,140497,70868],{"class":174},[115,140499,51427],{"class":125},[115,140501,140502],{"class":174},"#f0f0f0",[115,140504,1291],{"class":125},[115,140506,140507],{"class":117,"line":1180},[115,140508,1565],{"class":125},[14,140510,140001],{},[106,140512,140513],{"className":126542,"code":140485,"language":126544,"meta":22,"style":22},[112,140514,140515,140521,140531],{"__ignoreMap":22},[115,140516,140517,140519],{"class":117,"line":118},[115,140518,51601],{"class":51290},[115,140520,15573],{"class":125},[115,140522,140523,140525,140527,140529],{"class":117,"line":37},[115,140524,70868],{"class":174},[115,140526,51427],{"class":125},[115,140528,140502],{"class":174},[115,140530,1291],{"class":125},[115,140532,140533],{"class":117,"line":1180},[115,140534,1565],{"class":125},[14,140536,140537],{},"里面包含 2 个盒子， 浮动即可",[14,140539,139912],{},[106,140541,140542],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,140543,140544,140550,140560],{"__ignoreMap":22},[115,140545,140546,140548],{"class":117,"line":118},[115,140547,130390],{"class":1963},[115,140549,15573],{"class":125},[115,140551,140552,140554,140556,140558],{"class":117,"line":37},[115,140553,131022],{"class":174},[115,140555,51427],{"class":125},[115,140557,23737],{"class":174},[115,140559,1291],{"class":125},[115,140561,140562],{"class":117,"line":1180},[115,140563,1565],{"class":125},[14,140565,140566,140567],{},"1 号盒子 ",[112,140568,140569],{},"recom_hd",[1132,140571,140572,140575],{},[72,140573,140574],{},"设置宽度205px，高度163px",[72,140576,140046,140577,140579],{},[112,140578,20],{},"标签，插入图片即可",[14,140581,139912],{},[106,140583,140584],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,140585,140586],{"__ignoreMap":22},[115,140587,140588,140590,140592,140594,140596,140598,140600,140602,140604,140606,140608,140610],{"class":117,"line":118},[115,140589,1035],{"class":125},[115,140591,20],{"class":51290},[115,140593,55229],{"class":1963},[115,140595,171],{"class":125},[115,140597,134059],{"class":230},[115,140599,55237],{"class":1963},[115,140601,171],{"class":125},[115,140603,134066],{"class":230},[115,140605,134069],{"class":1963},[115,140607,171],{"class":125},[115,140609,134074],{"class":230},[115,140611,51297],{"class":125},[14,140613,140001],{},[106,140615,140616],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,140617,140618],{"__ignoreMap":22},[115,140619,140620,140622,140624,140626,140628,140630,140632,140634,140636,140638,140640,140642],{"class":117,"line":118},[115,140621,1035],{"class":125},[115,140623,20],{"class":51290},[115,140625,55229],{"class":1963},[115,140627,171],{"class":125},[115,140629,134059],{"class":230},[115,140631,55237],{"class":1963},[115,140633,171],{"class":125},[115,140635,134066],{"class":230},[115,140637,134069],{"class":1963},[115,140639,171],{"class":125},[115,140641,134074],{"class":230},[115,140643,51297],{"class":125},[14,140645,140646,140647,140650],{},"2 号盒子 ",[112,140648,140649],{},"recom_bd"," ，注意里面的小竖线",[1132,140652,140653,140664,140667,140672,140677],{},[72,140654,140655,140656,140658,140659,140661,140662],{},"右侧结构里面放 ",[112,140657,1132],{}," 包含 4个 ",[112,140660,72],{},"，每个li里面包含一个",[112,140663,20],{},[72,140665,140666],{},"直接利用切片工具把里面的内容当成一张图片",[72,140668,139042,140669,140671],{},[112,140670,72],{}," 设置浮动",[72,140673,139042,140674,140676],{},[112,140675,20],{}," 设置宽高，宽度 248px，高度 163px",[72,140678,140679,140680,140240,140683,140685,140686,140688,140689],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[112,140681,140682],{},"top 10px",[112,140684,72],{},"设置相对定位（注意，最后一个",[112,140687,72],{},"不用设置伪元素），可以利用 ",[112,140690,140691],{},"nth-child(-n+3){...}",[14,140693,139912],{},[106,140695,140696],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,140697,140698,140706,140716,140726],{"__ignoreMap":22},[115,140699,140700,140702,140704],{"class":117,"line":118},[115,140701,51601],{"class":51290},[115,140703,137543],{"class":1963},[115,140705,15573],{"class":125},[115,140707,140708,140710,140712,140714],{"class":117,"line":37},[115,140709,137550],{"class":174},[115,140711,51427],{"class":125},[115,140713,7653],{"class":230},[115,140715,1291],{"class":125},[115,140717,140718,140720,140722,140724],{"class":117,"line":1180},[115,140719,128158],{"class":174},[115,140721,51427],{"class":125},[115,140723,60859],{"class":174},[115,140725,1291],{"class":125},[115,140727,140728],{"class":117,"line":1195},[115,140729,1565],{"class":125},[14,140731,140001],{},[106,140733,140734],{"className":126542,"code":138384,"language":126544,"meta":22,"style":22},[112,140735,140736,140744,140754,140764],{"__ignoreMap":22},[115,140737,140738,140740,140742],{"class":117,"line":118},[115,140739,51601],{"class":51290},[115,140741,137543],{"class":1963},[115,140743,15573],{"class":125},[115,140745,140746,140748,140750,140752],{"class":117,"line":37},[115,140747,137550],{"class":174},[115,140749,51427],{"class":125},[115,140751,7653],{"class":230},[115,140753,1291],{"class":125},[115,140755,140756,140758,140760,140762],{"class":117,"line":1180},[115,140757,128158],{"class":174},[115,140759,51427],{"class":125},[115,140761,60859],{"class":174},[115,140763,1291],{"class":125},[115,140765,140766],{"class":117,"line":1195},[115,140767,1565],{"class":125},[86,140769,140771],{"id":140770},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[20,140773],{"style":126398,"src":140774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140776,140777],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140779,140780],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140782,140783,140786],{},[112,140784,140785],{},"box_hd"," 制作",[14,140788,140566,140789,140791],{},[112,140790,140785],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[20,140793],{"style":126398,"src":140794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1132,140796,140797,140802,140807,140810],{},[72,140798,140799,140801],{},[112,140800,140785],{}," 给 30px 的高度，2个像素的下边框",[72,140803,140804,140805],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[112,140806,139053],{},[72,140808,140809],{},"左侧盒左浮动，右侧盒子右浮动",[72,140811,140812,140814,140815,140817],{},[112,140813,27],{},"标签之间的距离用左右的",[112,140816,30884],{},"撑开即可",[14,140819,140820],{},"结构代码",[106,140822,140823],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,140824,140825,140831,140841],{"__ignoreMap":22},[115,140826,140827,140829],{"class":117,"line":118},[115,140828,130390],{"class":1963},[115,140830,15573],{"class":125},[115,140832,140833,140835,140837,140839],{"class":117,"line":37},[115,140834,131022],{"class":174},[115,140836,51427],{"class":125},[115,140838,23737],{"class":174},[115,140840,1291],{"class":125},[115,140842,140843],{"class":117,"line":1180},[115,140844,1565],{"class":125},[14,140846,140847],{},"样式代码",[106,140849,140850],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,140851,140852,140858,140868],{"__ignoreMap":22},[115,140853,140854,140856],{"class":117,"line":118},[115,140855,130390],{"class":1963},[115,140857,15573],{"class":125},[115,140859,140860,140862,140864,140866],{"class":117,"line":37},[115,140861,131022],{"class":174},[115,140863,51427],{"class":125},[115,140865,23737],{"class":174},[115,140867,1291],{"class":125},[115,140869,140870],{"class":117,"line":1180},[115,140871,1565],{"class":125},[14,140873,140874,140786],{},[112,140875,140876],{},"box_bd",[14,140878,140879],{},"2 号盒子 box_bd，不要给高度",[20,140881],{"style":126398,"src":140882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140884,140885],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140887,140888],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140890,140891],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1132,140893,140894,140906,140922],{},[72,140895,140896,140898,140899,140902,140903,140905],{},[112,140897,140876],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[112,140900,140901],{},"tab_content","，在",[112,140904,140901],{}," 里面包裹tab选项卡对应的内容",[72,140907,140908,140909,140912,140913,140915,140916,140918,140919,140921],{},"内容被一个大盒子包裹（",[112,140910,140911],{},"tab_list_item","），里面是 ",[112,140914,1132],{}," 包裹 5个 ",[112,140917,72],{},"，每个",[112,140920,72],{},"设置对应的宽度，然后设置浮动",[72,140923,140924,140925,140927,140928,140930,140931],{},"而这5个",[112,140926,72],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[112,140929,72],{},"设置",[1132,140932,140933,140951,140954],{},[72,140934,140935,140936,140938,140939,140941,140942,140944,140945,140947,140948,140950],{},"第一个小 ",[112,140937,72],{}," 分为上下结构，上面是 ",[112,140940,1132],{}," 包裹 ",[112,140943,72],{}," ，",[112,140946,72],{},"里面包裹 ",[112,140949,27],{},"，下面插入一张图片",[72,140952,140953],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[72,140955,140956,140957,140959,140960,140962,140963,140965],{},"后面的小 ",[112,140958,72],{}," 里面先放一个",[112,140961,27],{},"标签，然后在",[112,140964,27],{},"标签里面插入图片即可",[14,140967,140820],{},[106,140969,140970],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,140971,140972],{"__ignoreMap":22},[115,140973,140974,140976,140978,140980,140982,140984,140986,140988,140990,140992,140994,140996],{"class":117,"line":118},[115,140975,1035],{"class":125},[115,140977,20],{"class":51290},[115,140979,55229],{"class":1963},[115,140981,171],{"class":125},[115,140983,134059],{"class":230},[115,140985,55237],{"class":1963},[115,140987,171],{"class":125},[115,140989,134066],{"class":230},[115,140991,134069],{"class":1963},[115,140993,171],{"class":125},[115,140995,134074],{"class":230},[115,140997,51297],{"class":125},[14,140999,140847],{},[106,141001,141002],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,141003,141004],{"__ignoreMap":22},[115,141005,141006,141008,141010,141012,141014,141016,141018,141020,141022,141024,141026,141028],{"class":117,"line":118},[115,141007,1035],{"class":125},[115,141009,20],{"class":51290},[115,141011,55229],{"class":1963},[115,141013,171],{"class":125},[115,141015,134059],{"class":230},[115,141017,55237],{"class":1963},[115,141019,171],{"class":125},[115,141021,134066],{"class":230},[115,141023,134069],{"class":1963},[115,141025,171],{"class":125},[115,141027,134074],{"class":230},[115,141029,51297],{"class":125},[14,141031,141032],{},"tab栏切换需求！！！！！！介绍：",[20,141034],{"style":126398,"src":141035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1132,141037,141038,141046,141052,141055],{},[72,141039,141040,141043,141044],{},[112,141041,141042],{},"tab","栏的布局是 ",[112,141045,139053],{},[72,141047,141048,141049,141051],{},"有多少个",[112,141050,141042],{},"选项卡，那么对应就有多少个内容",[72,141053,141054],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[72,141056,141057,141058,141061,141062,141064,141065,141067],{},"等后面我们学习了",[112,141059,141060],{},"js","之后，我们就会配合",[112,141063,141060],{},"来实现，",[112,141066,141042],{},"栏的切换",[57,141069,141071],{"id":141070},"_162-列表制作","16.2 列表制作",[86,141073,141075],{"id":141074},"_1621-准备工作","16.2.1 准备工作",[1132,141077,141078,141081,141084,141087],{},[72,141079,141080],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[72,141082,141083],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[72,141085,141086],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[72,141088,141089],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[86,141091,141093,141094,101008,141096,141098],{"id":141092},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[112,141095,131547],{},[112,141097,53703],{}," 修改",[20,141100],{"style":126398,"src":141101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1132,141103,141104],{},[72,141105,141106],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141108,139912],{},[106,141110,141111],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,141112,141113,141117,141131,141135,141149,141153,141167,141171,141185,141189],{"__ignoreMap":22},[115,141114,141115],{"class":117,"line":118},[115,141116,131981],{"class":184},[115,141118,141119,141121,141123,141125,141127,141129],{"class":117,"line":37},[115,141120,131986],{"class":1963},[115,141122,79797],{"class":125},[115,141124,128902],{"class":174},[115,141126,51427],{"class":125},[115,141128,131995],{"class":174},[115,141130,129472],{"class":125},[115,141132,141133],{"class":117,"line":1180},[115,141134,132002],{"class":184},[115,141136,141137,141139,141141,141143,141145,141147],{"class":117,"line":1195},[115,141138,132007],{"class":1963},[115,141140,79797],{"class":125},[115,141142,128902],{"class":174},[115,141144,51427],{"class":125},[115,141146,54754],{"class":174},[115,141148,129472],{"class":125},[115,141150,141151],{"class":117,"line":1201},[115,141152,132022],{"class":184},[115,141154,141155,141157,141159,141161,141163,141165],{"class":117,"line":1215},[115,141156,132027],{"class":1963},[115,141158,79797],{"class":125},[115,141160,128902],{"class":174},[115,141162,51427],{"class":125},[115,141164,54821],{"class":174},[115,141166,129472],{"class":125},[115,141168,141169],{"class":117,"line":1221},[115,141170,132042],{"class":184},[115,141172,141173,141175,141177,141179,141181,141183],{"class":117,"line":1312},[115,141174,132047],{"class":1963},[115,141176,79797],{"class":125},[115,141178,128902],{"class":174},[115,141180,51427],{"class":125},[115,141182,86223],{"class":174},[115,141184,129472],{"class":125},[115,141186,141187],{"class":117,"line":1318},[115,141188,132062],{"class":184},[115,141190,141191,141193,141195,141197,141199,141201],{"class":117,"line":1330},[115,141192,132067],{"class":1963},[115,141194,79797],{"class":125},[115,141196,128902],{"class":174},[115,141198,51427],{"class":125},[115,141200,132076],{"class":174},[115,141202,129472],{"class":125},[14,141204,140001],{},[106,141206,141207],{"className":126542,"code":131974,"language":126544,"meta":22,"style":22},[112,141208,141209,141213,141227,141231,141245,141249,141263,141267,141281,141285],{"__ignoreMap":22},[115,141210,141211],{"class":117,"line":118},[115,141212,131981],{"class":184},[115,141214,141215,141217,141219,141221,141223,141225],{"class":117,"line":37},[115,141216,131986],{"class":1963},[115,141218,79797],{"class":125},[115,141220,128902],{"class":174},[115,141222,51427],{"class":125},[115,141224,131995],{"class":174},[115,141226,129472],{"class":125},[115,141228,141229],{"class":117,"line":1180},[115,141230,132002],{"class":184},[115,141232,141233,141235,141237,141239,141241,141243],{"class":117,"line":1195},[115,141234,132007],{"class":1963},[115,141236,79797],{"class":125},[115,141238,128902],{"class":174},[115,141240,51427],{"class":125},[115,141242,54754],{"class":174},[115,141244,129472],{"class":125},[115,141246,141247],{"class":117,"line":1201},[115,141248,132022],{"class":184},[115,141250,141251,141253,141255,141257,141259,141261],{"class":117,"line":1215},[115,141252,132027],{"class":1963},[115,141254,79797],{"class":125},[115,141256,128902],{"class":174},[115,141258,51427],{"class":125},[115,141260,54821],{"class":174},[115,141262,129472],{"class":125},[115,141264,141265],{"class":117,"line":1221},[115,141266,132042],{"class":184},[115,141268,141269,141271,141273,141275,141277,141279],{"class":117,"line":1312},[115,141270,132047],{"class":1963},[115,141272,79797],{"class":125},[115,141274,128902],{"class":174},[115,141276,51427],{"class":125},[115,141278,86223],{"class":174},[115,141280,129472],{"class":125},[115,141282,141283],{"class":117,"line":1318},[115,141284,132062],{"class":184},[115,141286,141287,141289,141291,141293,141295,141297],{"class":117,"line":1330},[115,141288,132067],{"class":1963},[115,141290,79797],{"class":125},[115,141292,128902],{"class":174},[115,141294,51427],{"class":125},[115,141296,132076],{"class":174},[115,141298,129472],{"class":125},[1132,141300,141301,141312],{},[72,141302,141303,141304,141307,141308,101008,141310],{},"1 号盒子左侧浮动 ",[112,141305,141306],{},"sk_list"," 里面包含 ",[112,141309,1132],{},[112,141311,72],{},[72,141313,141314,141315,141307,141318,101008,141320],{},"2 号盒子左侧浮动 ",[112,141316,141317],{},"sk_con",[112,141319,1132],{},[112,141321,72],{},[14,141323,139912],{},[106,141325,141326],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,141327,141328,141334,141344],{"__ignoreMap":22},[115,141329,141330,141332],{"class":117,"line":118},[115,141331,130390],{"class":1963},[115,141333,15573],{"class":125},[115,141335,141336,141338,141340,141342],{"class":117,"line":37},[115,141337,131022],{"class":174},[115,141339,51427],{"class":125},[115,141341,23737],{"class":174},[115,141343,1291],{"class":125},[115,141345,141346],{"class":117,"line":1180},[115,141347,1565],{"class":125},[14,141349,140001],{},[106,141351,141352],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,141353,141354,141360,141370],{"__ignoreMap":22},[115,141355,141356,141358],{"class":117,"line":118},[115,141357,130390],{"class":1963},[115,141359,15573],{"class":125},[115,141361,141362,141364,141366,141368],{"class":117,"line":37},[115,141363,131022],{"class":174},[115,141365,51427],{"class":125},[115,141367,23737],{"class":174},[115,141369,1291],{"class":125},[115,141371,141372],{"class":117,"line":1180},[115,141373,1565],{"class":125},[86,141375,141377,141378],{"id":141376},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[112,141379,141380],{},"sk_container",[20,141382],{"style":126398,"src":141383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1132,141385,141386,141391],{},[72,141387,140566,141388,141390],{},[112,141389,141380],{}," 给宽度 1200，不要给高度",[72,141392,141393],{},"一定不要忘记清除浮动",[14,141395,139912],{},[106,141397,141398],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,141399,141400,141406,141416],{"__ignoreMap":22},[115,141401,141402,141404],{"class":117,"line":118},[115,141403,130390],{"class":1963},[115,141405,15573],{"class":125},[115,141407,141408,141410,141412,141414],{"class":117,"line":37},[115,141409,131022],{"class":174},[115,141411,51427],{"class":125},[115,141413,23737],{"class":174},[115,141415,1291],{"class":125},[115,141417,141418],{"class":117,"line":1180},[115,141419,1565],{"class":125},[69,141421,141422],{},[72,141423,141424],{},"sk_hd制作",[1132,141426,141427],{},[72,141428,140646,141429,141432],{},[112,141430,141431],{},"sk_hd"," ，插入图片即可",[14,141434,139912],{},[106,141436,141437],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,141438,141439],{"__ignoreMap":22},[115,141440,141441,141443,141445,141447,141449,141451,141453,141455,141457,141459,141461,141463],{"class":117,"line":118},[115,141442,1035],{"class":125},[115,141444,20],{"class":51290},[115,141446,55229],{"class":1963},[115,141448,171],{"class":125},[115,141450,134059],{"class":230},[115,141452,55237],{"class":1963},[115,141454,171],{"class":125},[115,141456,134066],{"class":230},[115,141458,134069],{"class":1963},[115,141460,171],{"class":125},[115,141462,134074],{"class":230},[115,141464,51297],{"class":125},[69,141466,141467],{"start":37},[72,141468,141469],{},"sk_bd制作",[1132,141471,141472],{},[72,141473,141474,141475,141478,141479,101008,141481,141483],{},"3 号盒子 ",[112,141476,141477],{},"sk_bd"," ，里面包含很多的 ",[112,141480,1132],{},[112,141482,72],{},[1132,141484,141485,141494],{},[72,141486,141487,141488,141490,141491,141493],{},"当鼠标移入到 ",[112,141489,72],{}," 上面的时候显示红色的边框，在这里先给 ",[112,141492,72],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[72,141495,141496,141497,141499,141500,141502,141503,141506,141507,141509],{},"由于给每个 ",[112,141498,72],{}," 都设置了外边距，导致一行的最后一个 ",[112,141501,72],{}," 掉了下来，在这里我们利用 ",[112,141504,141505],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[112,141508,72],{},"，去掉外边距就好了",[14,141511,139912],{},[106,141513,141514],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,141515,141516,141522,141534],{"__ignoreMap":22},[115,141517,141518,141520],{"class":117,"line":118},[115,141519,51601],{"class":51290},[115,141521,15573],{"class":125},[115,141523,141524,141526,141528,141530,141532],{"class":117,"line":37},[115,141525,70460],{"class":174},[115,141527,51427],{"class":125},[115,141529,317],{"class":174},[115,141531,51546],{"class":174},[115,141533,1291],{"class":125},[115,141535,141536],{"class":117,"line":1180},[115,141537,1565],{"class":125},[14,141539,140001],{},[106,141541,141542],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,141543,141544,141550,141562],{"__ignoreMap":22},[115,141545,141546,141548],{"class":117,"line":118},[115,141547,51601],{"class":51290},[115,141549,15573],{"class":125},[115,141551,141552,141554,141556,141558,141560],{"class":117,"line":37},[115,141553,70460],{"class":174},[115,141555,51427],{"class":125},[115,141557,317],{"class":174},[115,141559,51546],{"class":174},[115,141561,1291],{"class":125},[115,141563,141564],{"class":117,"line":1180},[115,141565,1565],{"class":125},[57,141567,141569],{"id":141568},"_163-注册页面制作","16.3 注册页面制作",[20,141571],{"style":126398,"src":141572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141574,141575,141577],{},[275,141576,9026],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[20,141579],{"style":126398,"src":141580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[86,141582,141584],{"id":141583},"_1631-准备工作","16.3.1 准备工作",[1132,141586,141587,141590],{},[72,141588,141589],{},"创建register.html，引入 base.css，引入favicon图标",[72,141591,141592],{},"创建register.css ，在html页面进行引入",[86,141594,141596,141597,141599],{"id":141595},"_1632-header-头部实现","16.3.2 ",[112,141598,131547],{}," 头部实现",[1132,141601,141602,141605],{},[72,141603,141604],{},"整个内容用 版心 进行包裹",[72,141606,141607],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141609,139912],{},[106,141611,141612],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,141613,141614],{"__ignoreMap":22},[115,141615,141616,141618,141620,141622,141624,141626,141628,141630,141632,141634,141636,141638],{"class":117,"line":118},[115,141617,1035],{"class":125},[115,141619,20],{"class":51290},[115,141621,55229],{"class":1963},[115,141623,171],{"class":125},[115,141625,134059],{"class":230},[115,141627,55237],{"class":1963},[115,141629,171],{"class":125},[115,141631,134066],{"class":230},[115,141633,134069],{"class":1963},[115,141635,171],{"class":125},[115,141637,134074],{"class":230},[115,141639,51297],{"class":125},[14,141641,140001],{},[106,141643,141644],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,141645,141646],{"__ignoreMap":22},[115,141647,141648,141650,141652,141654,141656,141658,141660,141662,141664,141666,141668,141670],{"class":117,"line":118},[115,141649,1035],{"class":125},[115,141651,20],{"class":51290},[115,141653,55229],{"class":1963},[115,141655,171],{"class":125},[115,141657,134059],{"class":230},[115,141659,55237],{"class":1963},[115,141661,171],{"class":125},[115,141663,134066],{"class":230},[115,141665,134069],{"class":1963},[115,141667,171],{"class":125},[115,141669,134074],{"class":230},[115,141671,51297],{"class":125},[86,141673,141675,141676,141679],{"id":141674},"_1633-registerarea-主体模块实现","16.3.3 ",[112,141677,141678],{},"registerarea"," 主体模块实现",[20,141681],{"style":126398,"src":141682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141684,141685],{},"整个大盒子 高度为 522px，设置4个边框",[14,141687,139912],{},[106,141689,141690],{"className":126542,"code":130699,"language":126544,"meta":22,"style":22},[112,141691,141692,141698,141714],{"__ignoreMap":22},[115,141693,141694,141696],{"class":117,"line":118},[115,141695,51601],{"class":51290},[115,141697,15573],{"class":125},[115,141699,141700,141702,141704,141706,141708,141710,141712],{"class":117,"line":37},[115,141701,70886],{"class":174},[115,141703,51427],{"class":125},[115,141705,343],{"class":174},[115,141707,51482],{"class":121},[115,141709,51511],{"class":174},[115,141711,129934],{"class":174},[115,141713,1291],{"class":125},[115,141715,141716],{"class":117,"line":1180},[115,141717,1565],{"class":125},[14,141719,140001],{},[106,141721,141722],{"className":126542,"code":130699,"language":126544,"meta":22,"style":22},[112,141723,141724,141730,141746],{"__ignoreMap":22},[115,141725,141726,141728],{"class":117,"line":118},[115,141727,51601],{"class":51290},[115,141729,15573],{"class":125},[115,141731,141732,141734,141736,141738,141740,141742,141744],{"class":117,"line":37},[115,141733,70886],{"class":174},[115,141735,51427],{"class":125},[115,141737,343],{"class":174},[115,141739,51482],{"class":121},[115,141741,51511],{"class":174},[115,141743,129934],{"class":174},[115,141745,1291],{"class":125},[115,141747,141748],{"class":117,"line":1180},[115,141749,1565],{"class":125},[14,141751,141752],{},"1号盒子 是一个 h3 标签，放标题",[1132,141754,141755],{},[72,141756,141757],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141759,139912],{},[106,141761,141762],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,141763,141764,141770,141780],{"__ignoreMap":22},[115,141765,141766,141768],{"class":117,"line":118},[115,141767,130390],{"class":1963},[115,141769,15573],{"class":125},[115,141771,141772,141774,141776,141778],{"class":117,"line":37},[115,141773,131022],{"class":174},[115,141775,51427],{"class":125},[115,141777,23737],{"class":174},[115,141779,1291],{"class":125},[115,141781,141782],{"class":117,"line":1180},[115,141783,1565],{"class":125},[14,141785,140001],{},[106,141787,141788],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,141789,141790,141796,141806],{"__ignoreMap":22},[115,141791,141792,141794],{"class":117,"line":118},[115,141793,130390],{"class":1963},[115,141795,15573],{"class":125},[115,141797,141798,141800,141802,141804],{"class":117,"line":37},[115,141799,131022],{"class":174},[115,141801,51427],{"class":125},[115,141803,23737],{"class":174},[115,141805,1291],{"class":125},[115,141807,141808],{"class":117,"line":1180},[115,141809,1565],{"class":125},[14,141811,141812],{},"2号盒子 里面放注册的内容",[1132,141814,141815,141818,141827,141841,141854,141857,141860,141878,141892],{},[72,141816,141817],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[72,141819,141820,141821,141823,141824,141826],{},"里面的内容利用 ",[112,141822,1132],{}," 包含 ",[112,141825,72],{}," 来实现的（不需要用表格）",[72,141828,139056,141829,141831,141832,141834,141835,141837,141838,141840],{},[112,141830,72],{}," 里面，左侧放 ",[112,141833,33609],{}," 标签， 中间放",[112,141836,53811],{}," 标签， 右侧放 ",[112,141839,115],{}," 提示信息",[72,141842,141843,141844,141846,141847,141849,141850,141853],{},"左侧 ",[112,141845,33609],{},"里面的文字都是右对齐，我们可以给",[112,141848,33609],{},"设置一个宽度（88px），然后利用",[112,141851,141852],{},"text-align"," 来设置右对齐",[72,141855,141856],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[72,141858,141859],{},"右侧 span修饰一下文字颜色",[72,141861,141862,141863],{},"提示信息的样式优化",[1132,141864,141865,141868,141871],{},[72,141866,141867],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[72,141869,141870],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[72,141872,141873,141874,141877],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[112,141875,141876],{},"vertical-algin"," 来设置 图片与文字对齐方式",[72,141879,141880,141881],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1132,141882,141883,141889],{},[72,141884,141885,141886,141888],{},"设置 ",[112,141887,23554],{}," 的 左右 12px 的内边距，设置一下文字颜色",[72,141890,141891],{},"分别设置 背景颜色",[72,141893,141894,141895,141897],{},"同意协议 和 完成注册 都是用 ",[112,141896,72],{}," 进行包裹",[14,141899,139912],{},[106,141901,141902],{"className":126542,"code":140485,"language":126544,"meta":22,"style":22},[112,141903,141904,141910,141920],{"__ignoreMap":22},[115,141905,141906,141908],{"class":117,"line":118},[115,141907,51601],{"class":51290},[115,141909,15573],{"class":125},[115,141911,141912,141914,141916,141918],{"class":117,"line":37},[115,141913,70868],{"class":174},[115,141915,51427],{"class":125},[115,141917,140502],{"class":174},[115,141919,1291],{"class":125},[115,141921,141922],{"class":117,"line":1180},[115,141923,1565],{"class":125},[14,141925,140001],{},[106,141927,141928],{"className":126542,"code":140485,"language":126544,"meta":22,"style":22},[112,141929,141930,141936,141946],{"__ignoreMap":22},[115,141931,141932,141934],{"class":117,"line":118},[115,141933,51601],{"class":51290},[115,141935,15573],{"class":125},[115,141937,141938,141940,141942,141944],{"class":117,"line":37},[115,141939,70868],{"class":174},[115,141941,51427],{"class":125},[115,141943,140502],{"class":174},[115,141945,1291],{"class":125},[115,141947,141948],{"class":117,"line":1180},[115,141949,1565],{"class":125},[86,141951,141953],{"id":141952},"_1634-底部实现","16.3.4 底部实现",[14,141955,139912],{},[106,141957,141958],{"className":126542,"code":140485,"language":126544,"meta":22,"style":22},[112,141959,141960,141966,141976],{"__ignoreMap":22},[115,141961,141962,141964],{"class":117,"line":118},[115,141963,51601],{"class":51290},[115,141965,15573],{"class":125},[115,141967,141968,141970,141972,141974],{"class":117,"line":37},[115,141969,70868],{"class":174},[115,141971,51427],{"class":125},[115,141973,140502],{"class":174},[115,141975,1291],{"class":125},[115,141977,141978],{"class":117,"line":1180},[115,141979,1565],{"class":125},[14,141981,140001],{},[106,141983,141984],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,141985,141986,141990,142004,142008],{"__ignoreMap":22},[115,141987,141988],{"class":117,"line":118},[115,141989,130653],{"class":184},[115,141991,141992,141994,141996,141998,142000,142002],{"class":117,"line":37},[115,141993,1035],{"class":125},[115,141995,51601],{"class":51290},[115,141997,53476],{"class":1963},[115,141999,171],{"class":125},[115,142001,130666],{"class":230},[115,142003,51297],{"class":125},[115,142005,142006],{"class":117,"line":1180},[115,142007,130673],{"class":125},[115,142009,142010,142012,142014],{"class":117,"line":1195},[115,142011,51775],{"class":125},[115,142013,51601],{"class":51290},[115,142015,51297],{"class":125},[57,142017,142019],{"id":142018},"_164-项目总结","16.4 项目总结",[69,142021,142022,142025,142028,142031],{},[72,142023,142024],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[72,142026,142027],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[72,142029,142030],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[72,142032,142033],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[20,142035],{"style":126398,"src":142036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[69,142038,142039],{"start":1201},[72,142040,142041],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[20,142043],{"style":126398,"src":142044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[69,142046,142047],{"start":1215},[72,142048,142049],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[20,142051],{"style":126398,"src":142052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[106,142054,142055],{"className":127289,"code":136699,"language":127291,"meta":22,"style":22},[112,142056,142057],{"__ignoreMap":22},[115,142058,142059,142061,142063,142065,142067,142069,142071,142073,142075,142077,142079,142081],{"class":117,"line":118},[115,142060,1035],{"class":125},[115,142062,53811],{"class":51290},[115,142064,53814],{"class":1963},[115,142066,171],{"class":125},[115,142068,62689],{"class":230},[115,142070,14921],{"class":1963},[115,142072,171],{"class":125},[115,142074,136720],{"class":230},[115,142076,61010],{"class":1963},[115,142078,171],{"class":125},[115,142080,136727],{"class":230},[115,142082,51297],{"class":125},[69,142084,142085,142088],{"start":1221},[72,142086,142087],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[72,142089,142090],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5127,142092,142093],{},"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":22,"searchDepth":37,"depth":37,"links":142095},[142096,142101,142108,142116],{"id":139722,"depth":37,"text":139723,"children":142097},[142098,142099,142100],{"id":139726,"depth":1180,"text":139727},{"id":140457,"depth":1180,"text":140458},{"id":140770,"depth":1180,"text":140771},{"id":141070,"depth":37,"text":141071,"children":142102},[142103,142104,142106],{"id":141074,"depth":1180,"text":141075},{"id":141092,"depth":1180,"text":142105},"16.2.2 列表页 header 和 nav 修改",{"id":141376,"depth":1180,"text":142107},"16.2.3 列表页主体 sk_container",{"id":141568,"depth":37,"text":141569,"children":142109},[142110,142111,142113,142115],{"id":141583,"depth":1180,"text":141584},{"id":141595,"depth":1180,"text":142112},"16.3.2 header 头部实现",{"id":141674,"depth":1180,"text":142114},"16.3.3 registerarea 主体模块实现",{"id":141952,"depth":1180,"text":141953},{"id":142018,"depth":37,"text":142019},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139714,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142123,"title":142124,"body":142125,"description":39,"extension":40,"meta":142233,"navigation":42,"path":142234,"seo":142235,"stem":142236,"__hash__":142237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142126,"toc":142228},[142127,142130,142134,142137,142140,142149,142158,142162,142167,142174,142192,142195,142198,142201,142204,142207,142210,142213,142216,142219,142222,142225],[10,142128,142124],{"id":142129},"_17-web服务器与网站发布",[57,142131,142133],{"id":142132},"_171-web服务器","17.1 Web服务器",[14,142135,142136],{},"把自己网站上传到服务器上，可以让其他人访问",[20,142138],{"style":126398,"src":142139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142141,142142,142145,142146],{},[275,142143,142144],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[275,142147,142148],{},"Web 服务器等",[14,142150,142151,142152,101008,142155,25741],{},"根据服务器在网络中所在的位置不同，又可分为 ",[275,142153,142154],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[275,142156,142157],{},"远程服务器",[86,142159,142161],{"id":142160},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142163,142164],{},[275,142165,142166],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142168,142169,142170],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[27,142171,142172],{"href":142172,"rel":142173},"http:\u002F\u002Ffree.3v.do\u002F",[31],[1132,142175,142176,142179,142182,142189],{},[72,142177,142178],{},"去免费空间网站注册账号。",[72,142180,142181],{},"记录下主机名、用户名、密码、域名。",[72,142183,142184,142185,142188],{},"利用 ",[112,142186,142187],{},"utftp"," 软件 上传网站到远程服务器",[72,142190,142191],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142193,142194],{},"使用软件上传，对上传软件文件进行解压",[20,142196],{"style":126398,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[20,142199],{"style":126398,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142202,142203],{},"输入刚刚申请的服务器账号信息：",[20,142205],{"style":126398,"src":142206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[20,142208],{"style":126398,"src":142209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[20,142211],{"style":126398,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[20,142214],{"style":126398,"src":142215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142217,142218],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[20,142220],{"style":126398,"src":142221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142223,142224],{},"浏览器输入域名即可访问",[14,142226,142227],{},"首页一定必须是index",{"title":22,"searchDepth":37,"depth":37,"links":142229},[142230],{"id":142132,"depth":37,"text":142133,"children":142231},[142232],{"id":142160,"depth":1180,"text":142161},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142124,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142239,"title":142240,"body":142241,"description":39,"extension":40,"meta":143168,"navigation":42,"path":143169,"seo":143170,"stem":143171,"__hash__":143172},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142242,"toc":143151},[142243,142246,142250,142253,142256,142267,142270,142274,142278,142283,142286,142289,142292,142295,142299,142325,142329,142333,142336,142339,142343,142376,142380,142383,142386,142450,142454,142458,142461,142464,142467,142471,142516,142520,142523,142553,142557,142561,142564,142567,142571,142574,142643,142646,142754,142756,142762,142766,142769,142772,142868,142871,142875,142899,142903,142906,142910,142913,142917,142920,142923,142926,142929,142933,142936,142939,142943,142947,142950,142953,142956,142959,142963,142966,142970,142973,142976,143021,143025,143029,143032,143035,143038,143070,143074,143077,143111,143115,143118,143148],[10,142244,142240],{"id":142245},"_18-2d动画与3d转换",[57,142247,142249],{"id":142248},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142251,142252],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142254,142255],{},"转换（transform）你可以简单理解为变形",[1132,142257,142258,142261,142264],{},[72,142259,142260],{},"移动：translate",[72,142262,142263],{},"旋转：rotate",[72,142265,142266],{},"缩放：scale",[20,142268],{"style":126398,"src":142269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[86,142271,142273],{"id":142272},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21999,142275,142277],{"id":142276},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142279,142280,142281],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[275,142282,133201],{},[20,142284],{"style":126398,"src":142285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142287,142288],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142290,142291],{},"对于行内元素无效",[14,142293,142294],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21999,142296,142298],{"id":142297},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[106,142300,142301],{"className":126542,"code":138731,"language":126544,"meta":22,"style":22},[112,142302,142303,142309,142321],{"__ignoreMap":22},[115,142304,142305,142307],{"class":117,"line":118},[115,142306,51601],{"class":51290},[115,142308,15573],{"class":125},[115,142310,142311,142313,142315,142317,142319],{"class":117,"line":37},[115,142312,70460],{"class":174},[115,142314,51427],{"class":125},[115,142316,317],{"class":174},[115,142318,51546],{"class":174},[115,142320,1291],{"class":125},[115,142322,142323],{"class":117,"line":1180},[115,142324,1565],{"class":125},[86,142326,142328],{"id":142327},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21999,142330,142332],{"id":142331},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142334,142335],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[20,142337],{"style":126398,"src":142338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21999,142340,142342],{"id":142341},"_18122-旋转效果","18.1.2.2 旋转效果",[106,142344,142346],{"className":126542,"code":142345,"language":126544,"meta":22,"style":22},"div {\n  transform: rotate(45deg);\n}\n",[112,142347,142348,142354,142372],{"__ignoreMap":22},[115,142349,142350,142352],{"class":117,"line":118},[115,142351,51601],{"class":51290},[115,142353,15573],{"class":125},[115,142355,142356,142358,142360,142363,142365,142367,142370],{"class":117,"line":37},[115,142357,136526],{"class":174},[115,142359,51427],{"class":125},[115,142361,142362],{"class":174},"rotate",[115,142364,126],{"class":125},[115,142366,654],{"class":174},[115,142368,142369],{"class":121},"deg",[115,142371,2719],{"class":125},[115,142373,142374],{"class":117,"line":1180},[115,142375,1565],{"class":125},[21999,142377,142379],{"id":142378},"_18123-三角做法","18.1.2.3 三角做法",[14,142381,142382],{},"该下标当经过最外层大盒子时会实现向上反转",[20,142384],{"style":126398,"src":142385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[106,142387,142388],{"className":126542,"code":135062,"language":126544,"meta":22,"style":22},[112,142389,142390,142394,142400,142410,142420,142436,142446],{"__ignoreMap":22},[115,142391,142392],{"class":117,"line":118},[115,142393,135069],{"class":184},[115,142395,142396,142398],{"class":117,"line":37},[115,142397,135074],{"class":1963},[115,142399,15573],{"class":125},[115,142401,142402,142404,142406,142408],{"class":117,"line":1180},[115,142403,70558],{"class":174},[115,142405,51427],{"class":125},[115,142407,317],{"class":174},[115,142409,1291],{"class":125},[115,142411,142412,142414,142416,142418],{"class":117,"line":1195},[115,142413,70778],{"class":174},[115,142415,51427],{"class":125},[115,142417,317],{"class":174},[115,142419,1291],{"class":125},[115,142421,142422,142424,142426,142428,142430,142432,142434],{"class":117,"line":1201},[115,142423,70886],{"class":174},[115,142425,51427],{"class":125},[115,142427,571],{"class":174},[115,142429,51482],{"class":121},[115,142431,51511],{"class":174},[115,142433,63981],{"class":174},[115,142435,1291],{"class":125},[115,142437,142438,142440,142442,142444],{"class":117,"line":1215},[115,142439,135117],{"class":174},[115,142441,51427],{"class":125},[115,142443,62359],{"class":174},[115,142445,1291],{"class":125},[115,142447,142448],{"class":117,"line":1221},[115,142449,1565],{"class":125},[86,142451,142453],{"id":142452},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21999,142455,142457],{"id":142456},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142459,142460],{},"设置中心点",[20,142462],{"style":126398,"src":142463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142465,142466],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21999,142468,142470],{"id":142469},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[106,142472,142474],{"className":126542,"code":142473,"language":126544,"meta":22,"style":22},"\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",[112,142475,142476,142481,142487,142502,142507,142512],{"__ignoreMap":22},[115,142477,142478],{"class":117,"line":118},[115,142479,142480],{"class":184},"\u002F* 转换中心点 *\u002F\n",[115,142482,142483,142485],{"class":117,"line":37},[115,142484,51601],{"class":51290},[115,142486,15573],{"class":125},[115,142488,142489,142492,142494,142496,142498,142500],{"class":117,"line":1180},[115,142490,142491],{"class":174},"  transform-origin",[115,142493,51427],{"class":125},[115,142495,51582],{"class":174},[115,142497,17145],{"class":174},[115,142499,130405],{"class":125},[115,142501,135215],{"class":184},[115,142503,142504],{"class":117,"line":1195},[115,142505,142506],{"class":184},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[115,142508,142509],{"class":117,"line":1201},[115,142510,142511],{"class":184},"  \u002F* transform-origin: left top; *\u002F\n",[115,142513,142514],{"class":117,"line":1215},[115,142515,1565],{"class":125},[21999,142517,142519],{"id":142518},"_18133-旋转案例","18.1.3.3 旋转案例",[20,142521],{"style":126398,"src":142522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[106,142524,142525],{"className":126542,"code":142345,"language":126544,"meta":22,"style":22},[112,142526,142527,142533,142549],{"__ignoreMap":22},[115,142528,142529,142531],{"class":117,"line":118},[115,142530,51601],{"class":51290},[115,142532,15573],{"class":125},[115,142534,142535,142537,142539,142541,142543,142545,142547],{"class":117,"line":37},[115,142536,136526],{"class":174},[115,142538,51427],{"class":125},[115,142540,142362],{"class":174},[115,142542,126],{"class":125},[115,142544,654],{"class":174},[115,142546,142369],{"class":121},[115,142548,2719],{"class":125},[115,142550,142551],{"class":117,"line":1180},[115,142552,1565],{"class":125},[86,142554,142556],{"id":142555},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21999,142558,142560],{"id":142559},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142562,142563],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[20,142565],{"style":126398,"src":142566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21999,142568,142570],{"id":142569},"_18142-分页按钮","18.1.4.2 分页按钮",[20,142572],{"style":126398,"src":142573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[106,142575,142577],{"className":126542,"code":142576,"language":126544,"meta":22,"style":22},"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",[112,142578,142579,142585,142601,142605,142609,142614,142620,142634,142639],{"__ignoreMap":22},[115,142580,142581,142583],{"class":117,"line":118},[115,142582,51601],{"class":51290},[115,142584,15573],{"class":125},[115,142586,142587,142589,142591,142594,142596,142599],{"class":117,"line":37},[115,142588,136526],{"class":174},[115,142590,51427],{"class":125},[115,142592,142593],{"class":174},"scale",[115,142595,126],{"class":125},[115,142597,142598],{"class":174},"1.2",[115,142600,2719],{"class":125},[115,142602,142603],{"class":117,"line":1180},[115,142604,1565],{"class":125},[115,142606,142607],{"class":117,"line":1195},[115,142608,136003],{"class":125},[115,142610,142611],{"class":117,"line":1201},[115,142612,142613],{"class":184},"\u002F* 2D 缩放 *\u002F\n",[115,142615,142616,142618],{"class":117,"line":1215},[115,142617,51601],{"class":51290},[115,142619,15573],{"class":125},[115,142621,142622,142624,142626,142628,142630,142632],{"class":117,"line":1221},[115,142623,136526],{"class":174},[115,142625,51427],{"class":125},[115,142627,142593],{"class":174},[115,142629,126],{"class":125},[115,142631,142598],{"class":174},[115,142633,2719],{"class":125},[115,142635,142636],{"class":117,"line":1312},[115,142637,142638],{"class":184},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[115,142640,142641],{"class":117,"line":1318},[115,142642,1565],{"class":125},[14,142644,142645],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[106,142647,142649],{"className":126542,"code":142648,"language":126544,"meta":22,"style":22},"\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",[112,142650,142651,142656,142666,142687,142708,142712,142717,142723,142750],{"__ignoreMap":22},[115,142652,142653],{"class":117,"line":118},[115,142654,142655],{"class":184},"\u002F* 定义动画 *\u002F\n",[115,142657,142658,142661,142664],{"class":117,"line":37},[115,142659,142660],{"class":121},"@keyframes",[115,142662,142663],{"class":5217}," move",[115,142665,15573],{"class":125},[115,142667,142668,142671,142673,142675,142677,142680,142682,142684],{"class":117,"line":1180},[115,142669,142670],{"class":1963},"  0%",[115,142672,79797],{"class":125},[115,142674,48135],{"class":174},[115,142676,51427],{"class":125},[115,142678,142679],{"class":174},"translateX",[115,142681,126],{"class":125},[115,142683,317],{"class":174},[115,142685,142686],{"class":125},"); }\n",[115,142688,142689,142692,142694,142696,142698,142700,142702,142704,142706],{"class":117,"line":1195},[115,142690,142691],{"class":1963},"  100%",[115,142693,79797],{"class":125},[115,142695,48135],{"class":174},[115,142697,51427],{"class":125},[115,142699,142679],{"class":174},[115,142701,126],{"class":125},[115,142703,436],{"class":174},[115,142705,51482],{"class":121},[115,142707,142686],{"class":125},[115,142709,142710],{"class":117,"line":1201},[115,142711,1565],{"class":125},[115,142713,142714],{"class":117,"line":1215},[115,142715,142716],{"class":184},"\u002F* 调用动画 *\u002F\n",[115,142718,142719,142721],{"class":117,"line":1221},[115,142720,51601],{"class":51290},[115,142722,15573],{"class":125},[115,142724,142725,142728,142730,142732,142734,142736,142738,142740,142742,142745,142748],{"class":117,"line":1312},[115,142726,142727],{"class":174},"  animation",[115,142729,51427],{"class":125},[115,142731,135228],{"class":174},[115,142733,25119],{"class":174},[115,142735,820],{"class":121},[115,142737,78670],{"class":174},[115,142739,4093],{"class":174},[115,142741,820],{"class":121},[115,142743,142744],{"class":174}," infinite",[115,142746,142747],{"class":174}," alternate",[115,142749,1291],{"class":125},[115,142751,142752],{"class":117,"line":1318},[115,142753,1565],{"class":125},[14,142755,142645],{},[106,142757,142760],{"className":142758,"code":142759,"language":5188},[5186],"\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",[112,142761,142759],{"__ignoreMap":22},[21999,142763,142765],{"id":142764},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142767,142768],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[20,142770],{"style":126398,"src":142771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[106,142773,142774],{"className":126542,"code":142648,"language":126544,"meta":22,"style":22},[112,142775,142776,142780,142788,142806,142826,142830,142834,142840,142864],{"__ignoreMap":22},[115,142777,142778],{"class":117,"line":118},[115,142779,142655],{"class":184},[115,142781,142782,142784,142786],{"class":117,"line":37},[115,142783,142660],{"class":121},[115,142785,142663],{"class":5217},[115,142787,15573],{"class":125},[115,142789,142790,142792,142794,142796,142798,142800,142802,142804],{"class":117,"line":1180},[115,142791,142670],{"class":1963},[115,142793,79797],{"class":125},[115,142795,48135],{"class":174},[115,142797,51427],{"class":125},[115,142799,142679],{"class":174},[115,142801,126],{"class":125},[115,142803,317],{"class":174},[115,142805,142686],{"class":125},[115,142807,142808,142810,142812,142814,142816,142818,142820,142822,142824],{"class":117,"line":1195},[115,142809,142691],{"class":1963},[115,142811,79797],{"class":125},[115,142813,48135],{"class":174},[115,142815,51427],{"class":125},[115,142817,142679],{"class":174},[115,142819,126],{"class":125},[115,142821,436],{"class":174},[115,142823,51482],{"class":121},[115,142825,142686],{"class":125},[115,142827,142828],{"class":117,"line":1201},[115,142829,1565],{"class":125},[115,142831,142832],{"class":117,"line":1215},[115,142833,142716],{"class":184},[115,142835,142836,142838],{"class":117,"line":1221},[115,142837,51601],{"class":51290},[115,142839,15573],{"class":125},[115,142841,142842,142844,142846,142848,142850,142852,142854,142856,142858,142860,142862],{"class":117,"line":1312},[115,142843,142727],{"class":174},[115,142845,51427],{"class":125},[115,142847,135228],{"class":174},[115,142849,25119],{"class":174},[115,142851,820],{"class":121},[115,142853,78670],{"class":174},[115,142855,4093],{"class":174},[115,142857,820],{"class":121},[115,142859,142744],{"class":174},[115,142861,142747],{"class":174},[115,142863,1291],{"class":125},[115,142865,142866],{"class":117,"line":1318},[115,142867,1565],{"class":125},[14,142869,142870],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[86,142872,142874],{"id":142873},"_1823-知识点回顾","18.2.3 知识点回顾",[106,142876,142877],{"className":126542,"code":128711,"language":126544,"meta":22,"style":22},[112,142878,142879,142885,142895],{"__ignoreMap":22},[115,142880,142881,142883],{"class":117,"line":118},[115,142882,51601],{"class":51290},[115,142884,15573],{"class":125},[115,142886,142887,142889,142891,142893],{"class":117,"line":37},[115,142888,128724],{"class":174},[115,142890,51427],{"class":125},[115,142892,61726],{"class":174},[115,142894,1291],{"class":125},[115,142896,142897],{"class":117,"line":1180},[115,142898,1565],{"class":125},[57,142900,142902],{"id":142901},"_183-3d-转换","18.3 3D 转换",[14,142904,142905],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[86,142907,142909],{"id":142908},"_1831-坐标轴认识","18.3.1 坐标轴认识",[20,142911],{"style":126398,"src":142912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[86,142914,142916],{"id":142915},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[20,142918],{"style":126398,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142921,142922],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142924,142925],{},"translate3d的效果需要搭配透视perspective来使用",[20,142927],{"style":126398,"src":142928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[86,142930,142932],{"id":142931},"_1833-透视-perspective","18.3.3 透视 perspective",[20,142934],{"style":126398,"src":142935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142937,142938],{},"透视写在父盒子上，单位为像素",[86,142940,142942],{"id":142941},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21999,142944,142946],{"id":142945},"_18341-分开解释","18.3.4.1 分开解释",[20,142948],{"style":126398,"src":142949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[20,142951],{"style":126398,"src":142952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[20,142954],{"style":126398,"src":142955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142957,142958],{},"总结来说就是左手原则",[21999,142960,142962],{"id":142961},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[20,142964],{"style":126398,"src":142965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[86,142967,142969],{"id":142968},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[20,142971],{"style":126398,"src":142972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[20,142974],{"style":126398,"src":142975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[106,142977,142979],{"className":126542,"code":142978,"language":126544,"meta":22,"style":22},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[112,142980,142981,142987,143000,143017],{"__ignoreMap":22},[115,142982,142983,142985],{"class":117,"line":118},[115,142984,51601],{"class":51290},[115,142986,15573],{"class":125},[115,142988,142989,142992,142994,142996,142998],{"class":117,"line":37},[115,142990,142991],{"class":174},"  perspective",[115,142993,51427],{"class":125},[115,142995,65064],{"class":174},[115,142997,51482],{"class":121},[115,142999,1291],{"class":125},[115,143001,143002,143004,143006,143009,143011,143013,143015],{"class":117,"line":1180},[115,143003,136526],{"class":174},[115,143005,51427],{"class":125},[115,143007,143008],{"class":174},"rotateX",[115,143010,126],{"class":125},[115,143012,654],{"class":174},[115,143014,142369],{"class":121},[115,143016,2719],{"class":125},[115,143018,143019],{"class":117,"line":1195},[115,143020,1565],{"class":125},[86,143022,143024],{"id":143023},"_1836-案例","18.3.6 案例",[21999,143026,143028],{"id":143027},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[20,143030],{"style":126398,"src":143031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[20,143033],{"style":126398,"src":143034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[20,143036],{"style":126398,"src":143037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[106,143039,143041],{"className":126542,"code":143040,"language":126544,"meta":22,"style":22},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[112,143042,143043,143048,143054,143066],{"__ignoreMap":22},[115,143044,143045],{"class":117,"line":118},[115,143046,143047],{"class":184},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[115,143049,143050,143052],{"class":117,"line":37},[115,143051,133539],{"class":1963},[115,143053,15573],{"class":125},[115,143055,143056,143058,143060,143062,143064],{"class":117,"line":1180},[115,143057,142991],{"class":174},[115,143059,51427],{"class":125},[115,143061,65064],{"class":174},[115,143063,51482],{"class":121},[115,143065,1291],{"class":125},[115,143067,143068],{"class":117,"line":1195},[115,143069,1565],{"class":125},[21999,143071,143073],{"id":143072},"_18362-3d导航栏","18.3.6.2 3D导航栏",[20,143075],{"style":126398,"src":143076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[106,143078,143079],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,143080,143081,143085,143099,143103],{"__ignoreMap":22},[115,143082,143083],{"class":117,"line":118},[115,143084,130653],{"class":184},[115,143086,143087,143089,143091,143093,143095,143097],{"class":117,"line":37},[115,143088,1035],{"class":125},[115,143090,51601],{"class":51290},[115,143092,53476],{"class":1963},[115,143094,171],{"class":125},[115,143096,130666],{"class":230},[115,143098,51297],{"class":125},[115,143100,143101],{"class":117,"line":1180},[115,143102,130673],{"class":125},[115,143104,143105,143107,143109],{"class":117,"line":1195},[115,143106,51775],{"class":125},[115,143108,51601],{"class":51290},[115,143110,51297],{"class":125},[21999,143112,143114],{"id":143113},"_18363-旋转木马","18.3.6.3 旋转木马",[20,143116],{"style":126398,"src":143117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[106,143119,143120],{"className":126542,"code":142345,"language":126544,"meta":22,"style":22},[112,143121,143122,143128,143144],{"__ignoreMap":22},[115,143123,143124,143126],{"class":117,"line":118},[115,143125,51601],{"class":51290},[115,143127,15573],{"class":125},[115,143129,143130,143132,143134,143136,143138,143140,143142],{"class":117,"line":37},[115,143131,136526],{"class":174},[115,143133,51427],{"class":125},[115,143135,142362],{"class":174},[115,143137,126],{"class":125},[115,143139,654],{"class":174},[115,143141,142369],{"class":121},[115,143143,2719],{"class":125},[115,143145,143146],{"class":117,"line":1180},[115,143147,1565],{"class":125},[5127,143149,143150],{},"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":22,"searchDepth":37,"depth":37,"links":143152},[143153,143160],{"id":142248,"depth":37,"text":142249,"children":143154},[143155,143156,143157,143158,143159],{"id":142272,"depth":1180,"text":142273},{"id":142327,"depth":1180,"text":142328},{"id":142452,"depth":1180,"text":142453},{"id":142555,"depth":1180,"text":142556},{"id":142873,"depth":1180,"text":142874},{"id":142901,"depth":37,"text":142902,"children":143161},[143162,143163,143164,143165,143166,143167],{"id":142908,"depth":1180,"text":142909},{"id":142915,"depth":1180,"text":142916},{"id":142931,"depth":1180,"text":142932},{"id":142941,"depth":1180,"text":142942},{"id":142968,"depth":1180,"text":142969},{"id":143023,"depth":1180,"text":143024},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142240,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143174,"title":143175,"body":143176,"description":39,"extension":40,"meta":143379,"navigation":42,"path":143380,"seo":143381,"stem":143382,"__hash__":143383},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143177,"toc":143368},[143178,143181,143185,143188,143191,143195,143198,143201,143204,143208,143211,143215,143218,143222,143225,143229,143243,143247,143272,143275,143278,143295,143299,143303,143306,143309,143313,143316,143319,143337,143341,143344,143358,143362,143365],[10,143179,143175],{"id":143180},"_19-移动端基础-前缀现状与视口",[57,143182,143184],{"id":143183},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[20,143186],{"style":126398,"src":143187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143189,143190],{},"意思就是加个前缀，增加兼容性",[57,143192,143194],{"id":143193},"_192-移动端现状认识","19.2 移动端现状认识",[20,143196],{"style":126398,"src":143197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143199,143200],{},"调试方法：",[20,143202],{"style":126398,"src":143203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[57,143205,143207],{"id":143206},"_193-视口","19.3 视口",[14,143209,143210],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[86,143212,143214],{"id":143213},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[20,143216],{"style":126398,"src":143217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[86,143219,143221],{"id":143220},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[20,143223],{"style":126398,"src":143224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[86,143226,143228],{"id":143227},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1132,143230,143231,143234,143237,143240],{},[72,143232,143233],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[72,143235,143236],{},"理想视口，对设备来讲，是最理想的视口尺寸",[72,143238,143239],{},"需要手动添写meta视口标签通知浏览器操作",[72,143241,143242],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[86,143244,143246],{"id":143245},"_1934-meta视口标签","19.3.4 meta视口标签",[106,143248,143250],{"className":127289,"code":143249,"language":127291,"meta":22,"style":22},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[112,143251,143252],{"__ignoreMap":22},[115,143253,143254,143256,143258,143260,143262,143264,143266,143268,143270],{"class":117,"line":118},[115,143255,1035],{"class":125},[115,143257,51334],{"class":51290},[115,143259,14921],{"class":1963},[115,143261,171],{"class":125},[115,143263,51381],{"class":230},[115,143265,51361],{"class":1963},[115,143267,171],{"class":125},[115,143269,51388],{"class":230},[115,143271,51297],{"class":125},[20,143273],{"style":126398,"src":143274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143276,143277],{},"标准视口设置：",[69,143279,143280,143283,143286,143289,143292],{},[72,143281,143282],{},"视口宽度和设备保持一致",[72,143284,143285],{},"视口的默认缩放比例1.0",[72,143287,143288],{},"不允许用户自行缩放",[72,143290,143291],{},"最大允许的缩放比例1.0",[72,143293,143294],{},"最小允许的缩放比例1.0",[86,143296,143298],{"id":143297},"_1935-二倍图","19.3.5 二倍图",[21999,143300,143302],{"id":143301},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[20,143304],{"style":126398,"src":143305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[20,143307],{"style":126398,"src":143308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21999,143310,143312],{"id":143311},"_19352-多倍图","19.3.5.2 多倍图",[20,143314],{"style":126398,"src":143315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143317,143318],{},"二倍图法，代码如下：",[106,143320,143322],{"className":126542,"code":143321,"language":126544,"meta":22,"style":22},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[112,143323,143324,143329],{"__ignoreMap":22},[115,143325,143326],{"class":117,"line":118},[115,143327,143328],{"class":184},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[115,143330,143331,143334],{"class":117,"line":37},[115,143332,143333],{"class":51290},"background-size",[115,143335,143336],{"class":125},": 50% 50%;\n",[21999,143338,143340],{"id":143339},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[20,143342],{"style":126398,"src":143343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[69,143345,143346,143349,143352,143355],{},[72,143347,143348],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[72,143350,143351],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[72,143353,143354],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[72,143356,143357],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21999,143359,143361],{"id":143360},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[20,143363],{"style":126398,"src":143364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5127,143366,143367],{},"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":22,"searchDepth":37,"depth":37,"links":143369},[143370,143371,143372],{"id":143183,"depth":37,"text":143184},{"id":143193,"depth":37,"text":143194},{"id":143206,"depth":37,"text":143207,"children":143373},[143374,143375,143376,143377,143378],{"id":143213,"depth":1180,"text":143214},{"id":143220,"depth":1180,"text":143221},{"id":143227,"depth":1180,"text":143228},{"id":143245,"depth":1180,"text":143246},{"id":143297,"depth":1180,"text":143298},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143175,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143385,"title":143386,"body":143387,"description":39,"extension":40,"meta":144264,"navigation":42,"path":144265,"seo":144266,"stem":144267,"__hash__":144268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143388,"toc":144248},[143389,143392,143396,143403,143406,143413,143416,143421,143424,143428,143432,143439,143442,143445,143449,143452,143455,143458,143461,143464,143468,143471,143475,143477,143480,143483,143486,143489,143491,143494,143496,143526,143528,143558,143562,143565,143569,143572,143589,143592,143595,143671,143673,143676,143679,143682,143685,143687,143690,143693,143697,143719,143722,143725,143729,143732,143738,143741,143745,143748,143751,143755,143758,143761,143764,143768,143771,143774,143777,143780,143784,143787,143791,143798,143801,143804,143807,143810,143820,143823,143826,143833,143836,143840,143843,143846,143850,143853,143856,143859,143904,143907,143910,143913,143915,144044,144046,144084,144087,144090,144092,144210,144212,144246],[10,143390,143386],{"id":143391},"_20-移动端布局实战上篇",[57,143393,143395],{"id":143394},"_201-移动端主流方案","20.1 移动端主流方案",[69,143397,143398],{},[72,143399,143400],{},[275,143401,143402],{},"单独移动端页面（主流）",[20,143404],{"style":126398,"src":143405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[69,143407,143408],{"start":37},[72,143409,143410],{},[275,143411,143412],{},"响应式兼容PC移动端",[20,143414],{"style":126398,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[69,143417,143418],{"start":1180},[72,143419,143420],{},"两种页面选型布局方式",[20,143422],{"style":126398,"src":143423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[57,143425,143427],{"id":143426},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[86,143429,143431],{"id":143430},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143433,143434,143435],{},"官网地址： ",[27,143436,143437],{"href":143437,"rel":143438},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[31],[20,143440],{"style":126398,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[20,143443],{"style":126398,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[86,143446,143448],{"id":143447},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[20,143450],{"style":126398,"src":143451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[20,143453],{"style":126398,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143456,143457],{},"去除高亮：",[14,143459,143460],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143462,143463],{},"-webkit- tap-highlight-color: transparent;",[57,143465,143467],{"id":143466},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[20,143469],{"style":126398,"src":143470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[57,143472,143474],{"id":143473},"_204-流式布局案例","20.4 流式布局案例",[14,143476,155],{},[14,143478,143479],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143481,143482],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143484,143485],{},"图片格式：",[20,143487],{"style":126398,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143490,135585],{},[20,143492],{"style":126398,"src":143493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143495,139912],{},[106,143497,143498],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,143499,143500],{"__ignoreMap":22},[115,143501,143502,143504,143506,143508,143510,143512,143514,143516,143518,143520,143522,143524],{"class":117,"line":118},[115,143503,1035],{"class":125},[115,143505,20],{"class":51290},[115,143507,55229],{"class":1963},[115,143509,171],{"class":125},[115,143511,134059],{"class":230},[115,143513,55237],{"class":1963},[115,143515,171],{"class":125},[115,143517,134066],{"class":230},[115,143519,134069],{"class":1963},[115,143521,171],{"class":125},[115,143523,134074],{"class":230},[115,143525,51297],{"class":125},[14,143527,140001],{},[106,143529,143530],{"className":127289,"code":134044,"language":127291,"meta":22,"style":22},[112,143531,143532],{"__ignoreMap":22},[115,143533,143534,143536,143538,143540,143542,143544,143546,143548,143550,143552,143554,143556],{"class":117,"line":118},[115,143535,1035],{"class":125},[115,143537,20],{"class":51290},[115,143539,55229],{"class":1963},[115,143541,171],{"class":125},[115,143543,134059],{"class":230},[115,143545,55237],{"class":1963},[115,143547,171],{"class":125},[115,143549,134066],{"class":230},[115,143551,134069],{"class":1963},[115,143553,171],{"class":125},[115,143555,134074],{"class":230},[115,143557,51297],{"class":125},[57,143559,143561],{"id":143560},"_205-flex布局","20.5 flex布局",[20,143563],{"style":126398,"src":143564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[86,143566,143568],{"id":143567},"_2051-布局原理","20.5.1 布局原理",[14,143570,143571],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1132,143573,143574,143577,143580,143583,143586],{},[72,143575,143576],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[72,143578,143579],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[72,143581,143582],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[72,143584,143585],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[72,143587,143588],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143590,143591],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143593,143594],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[106,143596,143598],{"className":126542,"code":143597,"language":126544,"meta":22,"style":22},"\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",[112,143599,143600,143605,143612,143622,143634,143645,143656,143667],{"__ignoreMap":22},[115,143601,143602],{"class":117,"line":118},[115,143603,143604],{"class":184},"\u002F* Flex 弹性布局 *\u002F\n",[115,143606,143607,143610],{"class":117,"line":37},[115,143608,143609],{"class":1963},".container",[115,143611,15573],{"class":125},[115,143613,143614,143616,143618,143620],{"class":117,"line":1180},[115,143615,128158],{"class":174},[115,143617,51427],{"class":125},[115,143619,51467],{"class":174},[115,143621,1291],{"class":125},[115,143623,143624,143627,143629,143632],{"class":117,"line":1195},[115,143625,143626],{"class":174},"  flex-direction",[115,143628,51427],{"class":125},[115,143630,143631],{"class":174},"row",[115,143633,1291],{"class":125},[115,143635,143636,143639,143641,143643],{"class":117,"line":1201},[115,143637,143638],{"class":174},"  justify-content",[115,143640,51427],{"class":125},[115,143642,51658],{"class":174},[115,143644,1291],{"class":125},[115,143646,143647,143650,143652,143654],{"class":117,"line":1215},[115,143648,143649],{"class":174},"  align-items",[115,143651,51427],{"class":125},[115,143653,51582],{"class":174},[115,143655,1291],{"class":125},[115,143657,143658,143661,143663,143665],{"class":117,"line":1221},[115,143659,143660],{"class":174},"  flex-wrap",[115,143662,51427],{"class":125},[115,143664,78600],{"class":174},[115,143666,1291],{"class":125},[115,143668,143669],{"class":117,"line":1312},[115,143670,1565],{"class":125},[14,143672,70443],{},[14,143674,143675],{},".form-item .male-label {",[14,143677,143678],{},"   margin-right: 20px;",[14,143680,143681],{},"   display: inline-flex;",[14,143683,143684],{},"   align-items: center;",[14,143686,1071],{},[20,143688],{"style":126398,"src":143689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[20,143691],{"style":126398,"src":143692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[86,143694,143696],{"id":143695},"_2052-常见父项属性","20.5.2 常见父项属性",[69,143698,143699,143702,143705,143708,143711,143714,143717],{},[72,143700,143701],{},"flex-direction：设置主轴的方向",[72,143703,143704],{},"justify-content：设置主轴上的子元素排列方式",[72,143706,143707],{},"flex-wrap：设置子元素是否换行",[72,143709,143710],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[72,143712,143713],{},"align-items：设置侧轴上的子元素排列方式（单行）",[72,143715,143716],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[72,143718,143701],{},[20,143720],{"style":126398,"src":143721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[20,143723],{"style":126398,"src":143724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[69,143726,143727],{"start":37},[72,143728,143704],{},[20,143730],{"style":126398,"src":143731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143733,143734,143737],{},[112,143735,143736],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143739,143740],{},"跟着主轴走",[69,143742,143743],{"start":1180},[72,143744,143707],{},[20,143746],{"style":126398,"src":143747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143749,143750],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[69,143752,143753],{"start":1195},[72,143754,143710],{},[20,143756],{"style":126398,"src":143757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143759,143760],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143762,143763],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[69,143765,143766],{"start":1201},[72,143767,143713],{},[20,143769],{"style":126398,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143772,143773],{},"align-items与align-content之间的区别：",[14,143775,143776],{},"单找items，多找content",[20,143778],{"style":126398,"src":143779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[69,143781,143782],{"start":1215},[72,143783,143716],{},[20,143785],{"style":126398,"src":143786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[86,143788,143790],{"id":143789},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[69,143792,143793],{},[72,143794,143795],{},[275,143796,143797],{},"flex 属性",[14,143799,143800],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[20,143802],{"style":126398,"src":143803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143805,143806],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143808,143809],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[69,143811,143812],{"start":37},[72,143813,143814,13796,143817],{},[275,143815,143816],{},"align-self",[275,143818,143819],{},"控制子项自己在侧轴上的排列方式",[20,143821],{"style":126398,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143824,143825],{},"单个子盒子在父盒子侧轴上的排列方式",[69,143827,143828],{"start":1180},[72,143829,143830,143832],{},[275,143831,95287],{}," 属性定义项目的排列顺序",[20,143834],{"style":126398,"src":143835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[86,143837,143839],{"id":143838},"_2054-背景线性渐变","20.5.4 背景线性渐变",[20,143841],{"style":126398,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143844,143845],{},"必须要添加浏览器的私有前缀",[86,143847,143849],{"id":143848},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143851,143852],{},"学到最重要的知识：",[14,143854,143855],{},"flex处理这样的布局思路",[20,143857],{"style":126398,"src":143858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[106,143860,143862],{"className":126542,"code":143861,"language":126544,"meta":22,"style":22},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[112,143863,143864,143870,143880,143890,143900],{"__ignoreMap":22},[115,143865,143866,143868],{"class":117,"line":118},[115,143867,143609],{"class":1963},[115,143869,15573],{"class":125},[115,143871,143872,143874,143876,143878],{"class":117,"line":37},[115,143873,128158],{"class":174},[115,143875,51427],{"class":125},[115,143877,51467],{"class":174},[115,143879,1291],{"class":125},[115,143881,143882,143884,143886,143888],{"class":117,"line":1180},[115,143883,143638],{"class":174},[115,143885,51427],{"class":125},[115,143887,51582],{"class":174},[115,143889,1291],{"class":125},[115,143891,143892,143894,143896,143898],{"class":117,"line":1195},[115,143893,143649],{"class":174},[115,143895,51427],{"class":125},[115,143897,51582],{"class":174},[115,143899,1291],{"class":125},[115,143901,143902],{"class":117,"line":1201},[115,143903,1565],{"class":125},[14,143905,143906],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143908,143909],{},"使用属性选择器",[20,143911],{"style":126398,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143914,68879],{},[106,143916,143918],{"className":127289,"code":143917,"language":127291,"meta":22,"style":22},"\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",[112,143919,143920,143925,143939,143944,143964,143969,143988,143993,144012,144017,144036],{"__ignoreMap":22},[115,143921,143922],{"class":117,"line":118},[115,143923,143924],{"class":184},"\u003C!-- 携程网移动端案例结构 -->\n",[115,143926,143927,143929,143931,143933,143935,143937],{"class":117,"line":37},[115,143928,1035],{"class":125},[115,143930,51601],{"class":51290},[115,143932,53476],{"class":1963},[115,143934,171],{"class":125},[115,143936,92313],{"class":230},[115,143938,51297],{"class":125},[115,143940,143941],{"class":117,"line":1180},[115,143942,143943],{"class":184},"  \u003C!-- 搜索栏 -->\n",[115,143945,143946,143948,143950,143952,143954,143957,143960,143962],{"class":117,"line":1195},[115,143947,52134],{"class":125},[115,143949,51601],{"class":51290},[115,143951,53476],{"class":1963},[115,143953,171],{"class":125},[115,143955,143956],{"class":230},"\"search-index\"",[115,143958,143959],{"class":125},">...\u003C\u002F",[115,143961,51601],{"class":51290},[115,143963,51297],{"class":125},[115,143965,143966],{"class":117,"line":1201},[115,143967,143968],{"class":184},"  \u003C!-- 焦点图 -->\n",[115,143970,143971,143973,143975,143977,143979,143982,143984,143986],{"class":117,"line":1215},[115,143972,52134],{"class":125},[115,143974,51601],{"class":51290},[115,143976,53476],{"class":1963},[115,143978,171],{"class":125},[115,143980,143981],{"class":230},"\"focus\"",[115,143983,143959],{"class":125},[115,143985,51601],{"class":51290},[115,143987,51297],{"class":125},[115,143989,143990],{"class":117,"line":1221},[115,143991,143992],{"class":184},"  \u003C!-- 主导航 -->\n",[115,143994,143995,143997,143999,144001,144003,144006,144008,144010],{"class":117,"line":1312},[115,143996,52134],{"class":125},[115,143998,51601],{"class":51290},[115,144000,53476],{"class":1963},[115,144002,171],{"class":125},[115,144004,144005],{"class":230},"\"local-nav\"",[115,144007,143959],{"class":125},[115,144009,51601],{"class":51290},[115,144011,51297],{"class":125},[115,144013,144014],{"class":117,"line":1318},[115,144015,144016],{"class":184},"  \u003C!-- 子导航 -->\n",[115,144018,144019,144021,144023,144025,144027,144030,144032,144034],{"class":117,"line":1330},[115,144020,52134],{"class":125},[115,144022,51601],{"class":51290},[115,144024,53476],{"class":1963},[115,144026,171],{"class":125},[115,144028,144029],{"class":230},"\"nav-common\"",[115,144031,143959],{"class":125},[115,144033,51601],{"class":51290},[115,144035,51297],{"class":125},[115,144037,144038,144040,144042],{"class":117,"line":1612},[115,144039,51775],{"class":125},[115,144041,51601],{"class":51290},[115,144043,51297],{"class":125},[14,144045,70443],{},[106,144047,144048],{"className":126542,"code":136994,"language":126544,"meta":22,"style":22},[112,144049,144050,144064,144080],{"__ignoreMap":22},[115,144051,144052,144054,144056,144058,144060,144062],{"class":117,"line":118},[115,144053,53811],{"class":51290},[115,144055,1015],{"class":125},[115,144057,103097],{"class":1963},[115,144059,171],{"class":121},[115,144061,62689],{"class":230},[115,144063,137011],{"class":125},[115,144065,144066,144068,144070,144072,144074,144076,144078],{"class":117,"line":37},[115,144067,70886],{"class":174},[115,144069,51427],{"class":125},[115,144071,343],{"class":174},[115,144073,51482],{"class":121},[115,144075,51511],{"class":174},[115,144077,130122],{"class":174},[115,144079,1291],{"class":125},[115,144081,144082],{"class":117,"line":1180},[115,144083,1565],{"class":125},[14,144085,144086],{},"总代码和效果展示：",[20,144088],{"style":126398,"src":144089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144091,68879],{},[106,144093,144094],{"className":127289,"code":143917,"language":127291,"meta":22,"style":22},[112,144095,144096,144100,144114,144118,144136,144140,144158,144162,144180,144184,144202],{"__ignoreMap":22},[115,144097,144098],{"class":117,"line":118},[115,144099,143924],{"class":184},[115,144101,144102,144104,144106,144108,144110,144112],{"class":117,"line":37},[115,144103,1035],{"class":125},[115,144105,51601],{"class":51290},[115,144107,53476],{"class":1963},[115,144109,171],{"class":125},[115,144111,92313],{"class":230},[115,144113,51297],{"class":125},[115,144115,144116],{"class":117,"line":1180},[115,144117,143943],{"class":184},[115,144119,144120,144122,144124,144126,144128,144130,144132,144134],{"class":117,"line":1195},[115,144121,52134],{"class":125},[115,144123,51601],{"class":51290},[115,144125,53476],{"class":1963},[115,144127,171],{"class":125},[115,144129,143956],{"class":230},[115,144131,143959],{"class":125},[115,144133,51601],{"class":51290},[115,144135,51297],{"class":125},[115,144137,144138],{"class":117,"line":1201},[115,144139,143968],{"class":184},[115,144141,144142,144144,144146,144148,144150,144152,144154,144156],{"class":117,"line":1215},[115,144143,52134],{"class":125},[115,144145,51601],{"class":51290},[115,144147,53476],{"class":1963},[115,144149,171],{"class":125},[115,144151,143981],{"class":230},[115,144153,143959],{"class":125},[115,144155,51601],{"class":51290},[115,144157,51297],{"class":125},[115,144159,144160],{"class":117,"line":1221},[115,144161,143992],{"class":184},[115,144163,144164,144166,144168,144170,144172,144174,144176,144178],{"class":117,"line":1312},[115,144165,52134],{"class":125},[115,144167,51601],{"class":51290},[115,144169,53476],{"class":1963},[115,144171,171],{"class":125},[115,144173,144005],{"class":230},[115,144175,143959],{"class":125},[115,144177,51601],{"class":51290},[115,144179,51297],{"class":125},[115,144181,144182],{"class":117,"line":1318},[115,144183,144016],{"class":184},[115,144185,144186,144188,144190,144192,144194,144196,144198,144200],{"class":117,"line":1330},[115,144187,52134],{"class":125},[115,144189,51601],{"class":51290},[115,144191,53476],{"class":1963},[115,144193,171],{"class":125},[115,144195,144029],{"class":230},[115,144197,143959],{"class":125},[115,144199,51601],{"class":51290},[115,144201,51297],{"class":125},[115,144203,144204,144206,144208],{"class":117,"line":1612},[115,144205,51775],{"class":125},[115,144207,51601],{"class":51290},[115,144209,51297],{"class":125},[14,144211,70443],{},[106,144213,144214],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,144215,144216,144220,144234,144238],{"__ignoreMap":22},[115,144217,144218],{"class":117,"line":118},[115,144219,130653],{"class":184},[115,144221,144222,144224,144226,144228,144230,144232],{"class":117,"line":37},[115,144223,1035],{"class":125},[115,144225,51601],{"class":51290},[115,144227,53476],{"class":1963},[115,144229,171],{"class":125},[115,144231,130666],{"class":230},[115,144233,51297],{"class":125},[115,144235,144236],{"class":117,"line":1180},[115,144237,130673],{"class":125},[115,144239,144240,144242,144244],{"class":117,"line":1195},[115,144241,51775],{"class":125},[115,144243,51601],{"class":51290},[115,144245,51297],{"class":125},[5127,144247,137943],{},{"title":22,"searchDepth":37,"depth":37,"links":144249},[144250,144251,144255,144256,144257],{"id":143394,"depth":37,"text":143395},{"id":143426,"depth":37,"text":143427,"children":144252},[144253,144254],{"id":143430,"depth":1180,"text":143431},{"id":143447,"depth":1180,"text":143448},{"id":143466,"depth":37,"text":143467},{"id":143473,"depth":37,"text":143474},{"id":143560,"depth":37,"text":143561,"children":144258},[144259,144260,144261,144262,144263],{"id":143567,"depth":1180,"text":143568},{"id":143695,"depth":1180,"text":143696},{"id":143789,"depth":1180,"text":143790},{"id":143838,"depth":1180,"text":143839},{"id":143848,"depth":1180,"text":143849},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143386,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144270,"title":144271,"body":144272,"description":39,"extension":40,"meta":145499,"navigation":42,"path":145500,"seo":145501,"stem":145502,"__hash__":145503},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144273,"toc":145477},[144274,144277,144281,144285,144288,144291,144295,144300,144303,144306,144309,144312,144315,144372,144375,144380,144383,144386,144390,144401,144405,144408,144411,144418,144423,144427,144430,144436,144439,144443,144446,144453,144456,144459,144466,144469,144476,144479,144482,144489,144492,144495,144497,144514,144518,144521,144524,144527,144531,144534,144537,144540,144543,144546,144549,144551,144554,144557,144619,144622,144732,144739,144745,144748,144751,144755,144758,144762,144767,144770,144777,144780,144786,144791,144794,144797,144800,144803,144806,144809,144812,144815,144871,144873,144899,144903,144906,144909,144912,144920,144923,144926,144930,144986,144989,144993,144999,145010,145013,145018,145021,145024,145030,145033,145036,145039,145042,145045,145048,145051,145054,145079,145085,145088,145091,145094,145097,145100,145103,145108,145111,145114,145117,145125,145128,145135,145138,145141,145143,145167,145169,145172,145175,145178,145181,145184,145187,145190,145224,145227,145230,145264,145271,145274,145277,145280,145283,145286,145289,145296,145299,145302,145305,145308,145315,145318,145321,145328,145331,145334,145338,145341,145344,145347,145350,145353,145356,145359,145362,145364,145388,145390,145414,145418,145429,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459,145462,145465,145468,145471,145474],[10,144275,144271],{"id":144276},"_21-移动端布局实战下篇",[57,144278,144280],{"id":144279},"_211-rem适配布局","21.1 rem适配布局",[86,144282,144284],{"id":144283},"_2111-rem单位","21.1.1 rem单位",[20,144286],{"style":126398,"src":144287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144289,144290],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[86,144292,144294],{"id":144293},"_2112-媒体查询","21.1.2 媒体查询",[69,144296,144297],{},[72,144298,144299],{},"参数介绍",[20,144301],{"style":126398,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[20,144304],{"style":126398,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[20,144307],{"style":126398,"src":144308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[20,144310],{"style":126398,"src":144311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[20,144313],{"style":126398,"src":144314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[106,144316,144318],{"className":126542,"code":144317,"language":126544,"meta":22,"style":22},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[112,144319,144320,144325,144344,144351,144364,144368],{"__ignoreMap":22},[115,144321,144322],{"class":117,"line":118},[115,144323,144324],{"class":184},"\u002F* 媒体查询 *\u002F\n",[115,144326,144327,144330,144332,144335,144337,144340,144342],{"class":117,"line":37},[115,144328,144329],{"class":121},"@media",[115,144331,1658],{"class":125},[115,144333,144334],{"class":174},"max-width",[115,144336,51427],{"class":125},[115,144338,144339],{"class":174},"768",[115,144341,51482],{"class":121},[115,144343,12443],{"class":125},[115,144345,144346,144349],{"class":117,"line":1180},[115,144347,144348],{"class":1963},"  .container",[115,144350,15573],{"class":125},[115,144352,144353,144356,144358,144360,144362],{"class":117,"line":1195},[115,144354,144355],{"class":174},"    width",[115,144357,51427],{"class":125},[115,144359,436],{"class":174},[115,144361,453],{"class":121},[115,144363,1291],{"class":125},[115,144365,144366],{"class":117,"line":1201},[115,144367,127338],{"class":125},[115,144369,144370],{"class":117,"line":1215},[115,144371,1565],{"class":125},[14,144373,144374],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[69,144376,144377],{"start":37},[72,144378,144379],{},"引入资源",[20,144381],{"style":126398,"src":144382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144384,144385],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[86,144387,144389],{"id":144388},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1132,144391,144392,144395,144398],{},[72,144393,144394],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[72,144396,144397],{},"媒体查询可以根据不同设备宽度来修改样式",[72,144399,144400],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[57,144402,144404],{"id":144403},"_212-less基础","21.2 Less基础",[14,144406,144407],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144409,144410],{},"Less可以解决该问题，它是css的扩展语言",[14,144412,144413,144414],{},"Less中文网址： ",[27,144415,144416],{"href":144416,"rel":144417},"http:\u002F\u002Flesscss.cn\u002F",[31],[14,144419,144420],{},[275,144421,144422],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[86,144424,144426],{"id":144425},"_2121-less安装","21.2.1 less安装",[14,144428,144429],{},"如果使用vscode，则无需进行下方安装步骤",[14,144431,144432],{},[27,144433,144434],{"href":144434,"rel":144435},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[31],[20,144437],{"style":126398,"src":144438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[86,144440,144442],{"id":144441},"_2122-less使用","21.2.2 less使用",[14,144444,144445],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[69,144447,144448],{},[72,144449,144450],{},[275,144451,144452],{},"Less 变量",[20,144454],{"style":126398,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[20,144457],{"style":126398,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[69,144460,144461],{"start":37},[72,144462,144463],{},[275,144464,144465],{},"Less 编译",[20,144467],{"style":126398,"src":144468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[69,144470,144471],{"start":1180},[72,144472,144473],{},[275,144474,144475],{},"Less 嵌套",[20,144477],{"style":126398,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[20,144480],{"style":126398,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[69,144483,144484],{"start":1195},[72,144485,144486],{},[275,144487,144488],{},"Less 运算",[20,144490],{"style":126398,"src":144491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144493,144494],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144496,155],{},[1132,144498,144499,144502,144505,144508,144511],{},[72,144500,144501],{},"乘号（*）和除号（\u002F）的写法",[72,144503,144504],{},"运算符中间左右有个空格隔开 1px + 5",[72,144506,144507],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[72,144509,144510],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[72,144512,144513],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[57,144515,144517],{"id":144516},"_213-rem-适配方案","21.3 rem 适配方案",[14,144519,144520],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144522,144523],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[20,144525],{"style":126398,"src":144526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[86,144528,144530],{"id":144529},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144532,144533],{},"rem + 媒体查询 + less 技术",[20,144535],{"style":126398,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144538,144539],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144541,144542],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[20,144544],{"style":126398,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144547,144548],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144550,14634],{},[20,144552],{"style":126398,"src":144553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144555,144556],{},"index.html:",[106,144558,144560],{"className":126542,"code":144559,"language":126544,"meta":22,"style":22},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[112,144561,144562,144567,144573,144589,144593,144599,144615],{"__ignoreMap":22},[115,144563,144564],{"class":117,"line":118},[115,144565,144566],{"class":184},"\u002F* rem 适配方案 *\u002F\n",[115,144568,144569,144571],{"class":117,"line":37},[115,144570,50625],{"class":51290},[115,144572,15573],{"class":125},[115,144574,144575,144577,144579,144582,144584,144586],{"class":117,"line":1180},[115,144576,70616],{"class":174},[115,144578,51427],{"class":125},[115,144580,144581],{"class":174},"62.5",[115,144583,453],{"class":121},[115,144585,130405],{"class":125},[115,144587,144588],{"class":184},"\u002F* 1rem = 10px *\u002F\n",[115,144590,144591],{"class":117,"line":1195},[115,144592,1565],{"class":125},[115,144594,144595,144597],{"class":117,"line":1201},[115,144596,130390],{"class":1963},[115,144598,15573],{"class":125},[115,144600,144601,144603,144605,144607,144610,144612],{"class":117,"line":1215},[115,144602,70558],{"class":174},[115,144604,51427],{"class":125},[115,144606,571],{"class":174},[115,144608,144609],{"class":121},"rem",[115,144611,130405],{"class":125},[115,144613,144614],{"class":184},"\u002F* 100px *\u002F\n",[115,144616,144617],{"class":117,"line":1221},[115,144618,1565],{"class":125},[14,144620,144621],{},"common.less",[106,144623,144625],{"className":126542,"code":144624,"language":126544,"meta":22,"style":22},"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",[112,144626,144627,144633,144648,144652,144658,144672,144676,144680,144684,144690,144704,144708,144714,144728],{"__ignoreMap":22},[115,144628,144629,144631],{"class":117,"line":118},[115,144630,50625],{"class":51290},[115,144632,15573],{"class":125},[115,144634,144635,144637,144639,144641,144643,144645],{"class":117,"line":37},[115,144636,70616],{"class":174},[115,144638,51427],{"class":125},[115,144640,144581],{"class":174},[115,144642,453],{"class":121},[115,144644,26068],{"class":125},[115,144646,144647],{"class":184},"\u002F* 10px *\u002F\n",[115,144649,144650],{"class":117,"line":1180},[115,144651,1565],{"class":125},[115,144653,144654,144656],{"class":117,"line":1195},[115,144655,51601],{"class":51290},[115,144657,15573],{"class":125},[115,144659,144660,144662,144664,144666,144668,144670],{"class":117,"line":1201},[115,144661,70558],{"class":174},[115,144663,51427],{"class":125},[115,144665,571],{"class":174},[115,144667,144609],{"class":121},[115,144669,26068],{"class":125},[115,144671,144614],{"class":184},[115,144673,144674],{"class":117,"line":1215},[115,144675,1565],{"class":125},[115,144677,144678],{"class":117,"line":1221},[115,144679,136003],{"class":125},[115,144681,144682],{"class":117,"line":1312},[115,144683,144566],{"class":184},[115,144685,144686,144688],{"class":117,"line":1318},[115,144687,50625],{"class":51290},[115,144689,15573],{"class":125},[115,144691,144692,144694,144696,144698,144700,144702],{"class":117,"line":1330},[115,144693,70616],{"class":174},[115,144695,51427],{"class":125},[115,144697,144581],{"class":174},[115,144699,453],{"class":121},[115,144701,130405],{"class":125},[115,144703,144588],{"class":184},[115,144705,144706],{"class":117,"line":1612},[115,144707,1565],{"class":125},[115,144709,144710,144712],{"class":117,"line":1617},[115,144711,130390],{"class":1963},[115,144713,15573],{"class":125},[115,144715,144716,144718,144720,144722,144724,144726],{"class":117,"line":1623},[115,144717,70558],{"class":174},[115,144719,51427],{"class":125},[115,144721,571],{"class":174},[115,144723,144609],{"class":121},[115,144725,130405],{"class":125},[115,144727,144614],{"class":184},[115,144729,144730],{"class":117,"line":1628},[115,144731,1565],{"class":125},[14,144733,144734,144735,144738],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23554,144736,144737],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[106,144740,144743],{"className":144741,"code":144742,"language":5188},[5186],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[112,144744,144742],{"__ignoreMap":22},[14,144746,144747],{},"less保存时会自动变成.css文件",[14,144749,144750],{},"好好搞懂上述代码写法",[86,144752,144754],{"id":144753},"_2132-样式导入样式","21.3.2 样式导入样式",[20,144756],{"style":126398,"src":144757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[86,144759,144761],{"id":144760},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[69,144763,144764],{},[72,144765,144766],{},"准备工作",[20,144768],{"style":126398,"src":144769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144771,144772,144773],{},"github地址：",[27,144774,144775],{"href":144775,"rel":144776},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[31],[14,144778,144779],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144781,144782,144783],{},"js文件引入到index.html中使用的是",[112,144784,144785],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[69,144787,144788],{"start":37},[72,144789,144790],{},"vscode插件",[20,144792],{"style":126398,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144795,144796],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144798,144799],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[20,144801],{"style":126398,"src":144802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144804,144805],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[20,144807],{"style":126398,"src":144808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144810,144811],{},"修改成75就可以，alt+z为快捷键",[14,144813,144814],{},"index.css：",[106,144816,144817],{"className":126542,"code":144559,"language":126544,"meta":22,"style":22},[112,144818,144819,144823,144829,144843,144847,144853,144867],{"__ignoreMap":22},[115,144820,144821],{"class":117,"line":118},[115,144822,144566],{"class":184},[115,144824,144825,144827],{"class":117,"line":37},[115,144826,50625],{"class":51290},[115,144828,15573],{"class":125},[115,144830,144831,144833,144835,144837,144839,144841],{"class":117,"line":1180},[115,144832,70616],{"class":174},[115,144834,51427],{"class":125},[115,144836,144581],{"class":174},[115,144838,453],{"class":121},[115,144840,130405],{"class":125},[115,144842,144588],{"class":184},[115,144844,144845],{"class":117,"line":1195},[115,144846,1565],{"class":125},[115,144848,144849,144851],{"class":117,"line":1201},[115,144850,130390],{"class":1963},[115,144852,15573],{"class":125},[115,144854,144855,144857,144859,144861,144863,144865],{"class":117,"line":1215},[115,144856,70558],{"class":174},[115,144858,51427],{"class":125},[115,144860,571],{"class":174},[115,144862,144609],{"class":121},[115,144864,130405],{"class":125},[115,144866,144614],{"class":184},[115,144868,144869],{"class":117,"line":1221},[115,144870,1565],{"class":125},[14,144872,144556],{},[106,144874,144875],{"className":126542,"code":126946,"language":126544,"meta":22,"style":22},[112,144876,144877,144883,144895],{"__ignoreMap":22},[115,144878,144879,144881],{"class":117,"line":118},[115,144880,51790],{"class":51290},[115,144882,15573],{"class":125},[115,144884,144885,144887,144889,144891,144893],{"class":117,"line":37},[115,144886,70616],{"class":174},[115,144888,51427],{"class":125},[115,144890,726],{"class":174},[115,144892,51482],{"class":121},[115,144894,1291],{"class":125},[115,144896,144897],{"class":117,"line":1180},[115,144898,1565],{"class":125},[57,144900,144902],{"id":144901},"_214-响应式开发","21.4 响应式开发",[14,144904,144905],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[20,144907],{"style":126398,"src":144908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144910,144911],{},"做法：",[1132,144913,144914,144917],{},[72,144915,144916],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[72,144918,144919],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[20,144921],{"style":126398,"src":144922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144924,144925],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[86,144927,144929],{"id":144928},"_2141-简单代码示范","21.4.1 简单代码示范",[106,144931,144932],{"className":126542,"code":144559,"language":126544,"meta":22,"style":22},[112,144933,144934,144938,144944,144958,144962,144968,144982],{"__ignoreMap":22},[115,144935,144936],{"class":117,"line":118},[115,144937,144566],{"class":184},[115,144939,144940,144942],{"class":117,"line":37},[115,144941,50625],{"class":51290},[115,144943,15573],{"class":125},[115,144945,144946,144948,144950,144952,144954,144956],{"class":117,"line":1180},[115,144947,70616],{"class":174},[115,144949,51427],{"class":125},[115,144951,144581],{"class":174},[115,144953,453],{"class":121},[115,144955,130405],{"class":125},[115,144957,144588],{"class":184},[115,144959,144960],{"class":117,"line":1195},[115,144961,1565],{"class":125},[115,144963,144964,144966],{"class":117,"line":1201},[115,144965,130390],{"class":1963},[115,144967,15573],{"class":125},[115,144969,144970,144972,144974,144976,144978,144980],{"class":117,"line":1215},[115,144971,70558],{"class":174},[115,144973,51427],{"class":125},[115,144975,571],{"class":174},[115,144977,144609],{"class":121},[115,144979,130405],{"class":125},[115,144981,144614],{"class":184},[115,144983,144984],{"class":117,"line":1221},[115,144985,1565],{"class":125},[14,144987,144988],{},"父盒子一般命名为container",[86,144990,144992],{"id":144991},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144994,144995,144996],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[275,144997,144998],{},"使得 Web 开发更加快捷",[1132,145000,145001],{},[72,145002,145003,145004],{},"官网：",[275,145005,145006],{},[27,145007,145008],{"href":145008,"rel":145009},"http:\u002F\u002Fgetbootstrap.com\u002F",[31],[14,145011,145012],{},"可以直接去官网拿现成的东西",[69,145014,145015],{},[72,145016,145017],{},"Bootstrap的使用",[14,145019,145020],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145022,145023],{},"Bootstrap 使用四步曲：",[14,145025,145026,145029],{},[275,145027,145028],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[20,145031],{"style":126398,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145034,145035],{},"打开Bootstrap官网，然后下载",[20,145037],{"style":126398,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[20,145040],{"style":126398,"src":145041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145043,145044],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145046,145047],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145049,145050],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[20,145052],{"style":126398,"src":145053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[106,145055,145057],{"className":126542,"code":145056,"language":126544,"meta":22,"style":22},".center {\n  color: red;\n}\n",[112,145058,145059,145065,145075],{"__ignoreMap":22},[115,145060,145061,145063],{"class":117,"line":118},[115,145062,126833],{"class":1963},[115,145064,15573],{"class":125},[115,145066,145067,145069,145071,145073],{"class":117,"line":37},[115,145068,70895],{"class":174},[115,145070,51427],{"class":125},[115,145072,57411],{"class":174},[115,145074,1291],{"class":125},[115,145076,145077],{"class":117,"line":1180},[115,145078,1565],{"class":125},[14,145080,145081,145084],{},[112,145082,145083],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[20,145086],{"style":126398,"src":145087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[20,145089],{"style":126398,"src":145090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[20,145092],{"style":126398,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145095,145096],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[20,145098],{"style":126398,"src":145099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145101,145102],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[69,145104,145105],{"start":37},[72,145106,145107],{},"布局容器",[20,145109],{"style":126398,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145112,145113],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145115,145116],{},"container-fluid用于移动式布局比较方便",[69,145118,145119],{"start":1180},[72,145120,145121,145122],{},"bootstrap ",[275,145123,145124],{},"栅格系统原理",[20,145126],{"style":126398,"src":145127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[69,145129,145130],{"start":1195},[72,145131,145132],{},[275,145133,145134],{},"栅格选项参数",[20,145136],{"style":126398,"src":145137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145139,145140],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145142,14634],{},[106,145144,145145],{"className":126542,"code":145056,"language":126544,"meta":22,"style":22},[112,145146,145147,145153,145163],{"__ignoreMap":22},[115,145148,145149,145151],{"class":117,"line":118},[115,145150,126833],{"class":1963},[115,145152,15573],{"class":125},[115,145154,145155,145157,145159,145161],{"class":117,"line":37},[115,145156,70895],{"class":174},[115,145158,51427],{"class":125},[115,145160,57411],{"class":174},[115,145162,1291],{"class":125},[115,145164,145165],{"class":117,"line":1180},[115,145166,1565],{"class":125},[14,145168,135585],{},[20,145170],{"style":126398,"src":145171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145173,145174],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145176,145177],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145179,145180],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145182,145183],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145185,145186],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145188,145189],{},"汇总展示说明：",[106,145191,145192],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,145193,145194,145198,145212,145216],{"__ignoreMap":22},[115,145195,145196],{"class":117,"line":118},[115,145197,130653],{"class":184},[115,145199,145200,145202,145204,145206,145208,145210],{"class":117,"line":37},[115,145201,1035],{"class":125},[115,145203,51601],{"class":51290},[115,145205,53476],{"class":1963},[115,145207,171],{"class":125},[115,145209,130666],{"class":230},[115,145211,51297],{"class":125},[115,145213,145214],{"class":117,"line":1180},[115,145215,130673],{"class":125},[115,145217,145218,145220,145222],{"class":117,"line":1195},[115,145219,51775],{"class":125},[115,145221,51601],{"class":51290},[115,145223,51297],{"class":125},[20,145225],{"style":126398,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145228,145229],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[106,145231,145232],{"className":127289,"code":130646,"language":127291,"meta":22,"style":22},[112,145233,145234,145238,145252,145256],{"__ignoreMap":22},[115,145235,145236],{"class":117,"line":118},[115,145237,130653],{"class":184},[115,145239,145240,145242,145244,145246,145248,145250],{"class":117,"line":37},[115,145241,1035],{"class":125},[115,145243,51601],{"class":51290},[115,145245,53476],{"class":1963},[115,145247,171],{"class":125},[115,145249,130666],{"class":230},[115,145251,51297],{"class":125},[115,145253,145254],{"class":117,"line":1180},[115,145255,130673],{"class":125},[115,145257,145258,145260,145262],{"class":117,"line":1195},[115,145259,51775],{"class":125},[115,145261,51601],{"class":51290},[115,145263,51297],{"class":125},[69,145265,145266],{"start":1201},[72,145267,145268],{},[275,145269,145270],{},"列嵌套",[20,145272],{"style":126398,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145275,145276],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145278,145279],{},"没加row内部这样：",[20,145281],{"style":126398,"src":145282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145284,145285],{},"加上row之后内部为：",[20,145287],{"style":126398,"src":145288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[69,145290,145291],{"start":1215},[72,145292,145293],{},[275,145294,145295],{},"列偏移",[20,145297],{"style":126398,"src":145298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145300,145301],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145303,145304],{},"要加偏移量，即偏移份数",[14,145306,145307],{},"偏移的份数=12-两个盒子的份数",[69,145309,145310],{"start":1221},[72,145311,145312],{},[275,145313,145314],{},"列排序",[20,145316],{"style":126398,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145319,145320],{},"pull拉左；push推右",[69,145322,145323],{"start":1312},[72,145324,145325],{},[275,145326,145327],{},"响应式工具",[20,145329],{"style":126398,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145332,145333],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[86,145335,145337],{"id":145336},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145339,145340],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145342,145343],{},"ul {",[14,145345,145346],{},"list-style: none;",[14,145348,145349],{},"margin:0;",[14,145351,145352],{},"padding:0; }",[20,145354],{"style":126398,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[20,145357],{"style":126398,"src":145358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145360,145361],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145363,68879],{},[106,145365,145366],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,145367,145368,145374,145384],{"__ignoreMap":22},[115,145369,145370,145372],{"class":117,"line":118},[115,145371,130390],{"class":1963},[115,145373,15573],{"class":125},[115,145375,145376,145378,145380,145382],{"class":117,"line":37},[115,145377,131022],{"class":174},[115,145379,51427],{"class":125},[115,145381,23737],{"class":174},[115,145383,1291],{"class":125},[115,145385,145386],{"class":117,"line":1180},[115,145387,1565],{"class":125},[14,145389,70443],{},[106,145391,145392],{"className":126542,"code":139212,"language":126544,"meta":22,"style":22},[112,145393,145394,145400,145410],{"__ignoreMap":22},[115,145395,145396,145398],{"class":117,"line":118},[115,145397,130390],{"class":1963},[115,145399,15573],{"class":125},[115,145401,145402,145404,145406,145408],{"class":117,"line":37},[115,145403,131022],{"class":174},[115,145405,51427],{"class":125},[115,145407,23737],{"class":174},[115,145409,1291],{"class":125},[115,145411,145412],{"class":117,"line":1180},[115,145413,1565],{"class":125},[57,145415,145417],{"id":145416},"_215-swiper-插件使用","21.5 swiper 插件使用",[1132,145419,145420,145423,145426],{},[72,145421,145422],{},"下载需要的css和js文件html页面中 引入相关文件",[72,145424,145425],{},"官网找到类似案例，复制html结构，css样式 js 语法",[72,145427,145428],{},"根据需求定制修改模块",[20,145430],{"style":126398,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145433,145434],{},"解压后将这两部分放到项目中",[20,145436],{"style":126398,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145439,145440],{},"这个插件可以帮助我们实现轮播图效果",[14,145442,145443],{},"用法：",[20,145445],{"style":126398,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145448,145449],{},"找到自己喜欢的",[20,145451],{"style":126398,"src":145452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145454,145455],{},"右键，查看网页源代码",[20,145457],{"style":126398,"src":145458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145460,145461],{},"复制人家的结构内容",[14,145463,145464],{},"然后去看API文档：",[20,145466],{"style":126398,"src":145467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145469,145470],{},"可以看看如何修改样式",[14,145472,145473],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5127,145475,145476],{},"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":22,"searchDepth":37,"depth":37,"links":145478},[145479,145484,145488,145493,145498],{"id":144279,"depth":37,"text":144280,"children":145480},[145481,145482,145483],{"id":144283,"depth":1180,"text":144284},{"id":144293,"depth":1180,"text":144294},{"id":144388,"depth":1180,"text":144389},{"id":144403,"depth":37,"text":144404,"children":145485},[145486,145487],{"id":144425,"depth":1180,"text":144426},{"id":144441,"depth":1180,"text":144442},{"id":144516,"depth":37,"text":144517,"children":145489},[145490,145491,145492],{"id":144529,"depth":1180,"text":144530},{"id":144753,"depth":1180,"text":144754},{"id":144760,"depth":1180,"text":144761},{"id":144901,"depth":37,"text":144902,"children":145494},[145495,145496,145497],{"id":144928,"depth":1180,"text":144929},{"id":144991,"depth":1180,"text":144992},{"id":145336,"depth":1180,"text":145337},{"id":145416,"depth":37,"text":145417},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144271,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145505,"title":145506,"body":145507,"description":39,"extension":40,"meta":145727,"navigation":42,"path":145728,"seo":145729,"stem":145730,"__hash__":145731},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145508,"toc":145723},[145509,145512,145516,145519,145534,145539,145542,145547,145582,145587,145599,145604,145617,145622,145639,145644,145664,145669,145687,145690,145693,145696,145699,145703,145706,145709,145712,145715,145718,145721],[10,145510,145506],{"id":145511},"_22-代码提交与新型相对单位",[57,145513,145515],{"id":145514},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145517,145518],{},"法1：",[69,145520,145521,145528,145531],{},[72,145522,145523,145524],{},"登录网站注册：",[27,145525,145526],{"href":145526,"rel":145527},"https:\u002F\u002Fgitee.com\u002F",[31],[72,145529,145530],{},"码云创建新的仓库",[72,145532,145533],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1132,145535,145536],{},[72,145537,145538],{},"在网站根目录右键-- Git Bash Here",[20,145540],{"style":126398,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1132,145543,145544],{},[72,145545,145546],{},"如果是第一次利用git提交，请配置好全局选项",[106,145548,145550],{"className":117286,"code":145549,"language":117288,"meta":22,"style":22},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[112,145551,145552,145568],{"__ignoreMap":22},[115,145553,145554,145557,145559,145562,145565],{"class":117,"line":118},[115,145555,145556],{"class":1963},"git",[115,145558,119709],{"class":230},[115,145560,145561],{"class":174}," --global",[115,145563,145564],{"class":230}," user.name",[115,145566,145567],{"class":230}," \"你的名字\"\n",[115,145569,145570,145572,145574,145576,145579],{"class":117,"line":37},[115,145571,145556],{"class":1963},[115,145573,119709],{"class":230},[115,145575,145561],{"class":174},[115,145577,145578],{"class":230}," user.email",[115,145580,145581],{"class":230}," \"你的邮箱\"\n",[1132,145583,145584],{},[72,145585,145586],{},"初始化仓库",[106,145588,145590],{"className":117286,"code":145589,"language":117288,"meta":22,"style":22},"git init\n",[112,145591,145592],{"__ignoreMap":22},[115,145593,145594,145596],{"class":117,"line":118},[115,145595,145556],{"class":1963},[115,145597,145598],{"class":230}," init\n",[1132,145600,145601],{},[72,145602,145603],{},"把本地文件放到暂存区",[106,145605,145607],{"className":117286,"code":145606,"language":117288,"meta":22,"style":22},"git add .\n",[112,145608,145609],{"__ignoreMap":22},[115,145610,145611,145613,145615],{"class":117,"line":118},[115,145612,145556],{"class":1963},[115,145614,5210],{"class":230},[115,145616,28742],{"class":230},[1132,145618,145619],{},[72,145620,145621],{},"把本地文件放到本地仓库里面",[106,145623,145625],{"className":117286,"code":145624,"language":117288,"meta":22,"style":22},"git commit -m \"first commit\"\n",[112,145626,145627],{"__ignoreMap":22},[115,145628,145629,145631,145634,145636],{"class":117,"line":118},[115,145630,145556],{"class":1963},[115,145632,145633],{"class":230}," commit",[115,145635,100872],{"class":174},[115,145637,145638],{"class":230}," \"first commit\"\n",[1132,145640,145641],{},[72,145642,145643],{},"链接远程仓库",[106,145645,145647],{"className":117286,"code":145646,"language":117288,"meta":22,"style":22},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[112,145648,145649],{"__ignoreMap":22},[115,145650,145651,145653,145656,145658,145661],{"class":117,"line":118},[115,145652,145556],{"class":1963},[115,145654,145655],{"class":230}," remote",[115,145657,5210],{"class":230},[115,145659,145660],{"class":230}," origin",[115,145662,145663],{"class":230}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1132,145665,145666],{},[72,145667,145668],{},"把本地仓库的文件推送到远程仓库 push",[106,145670,145672],{"className":117286,"code":145671,"language":117288,"meta":22,"style":22},"git push -u origin master\n",[112,145673,145674],{"__ignoreMap":22},[115,145675,145676,145678,145680,145682,145684],{"class":117,"line":118},[115,145677,145556],{"class":1963},[115,145679,29017],{"class":230},[115,145681,28291],{"class":174},[115,145683,145660],{"class":230},[115,145685,145686],{"class":230}," master\n",[20,145688],{"style":126398,"src":145689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145691,145692],{},"上方方法暂未实现，后边学完git后在整",[14,145694,145695],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[20,145697],{"style":126398,"src":145698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[57,145700,145702],{"id":145701},"_222-新型相对单位","22.2 新型相对单位",[20,145704],{"style":126398,"src":145705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[20,145707],{"style":126398,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145710,145711],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145713,145714],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[20,145716],{"style":126398,"src":145717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145719,145720],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5127,145722,23958],{},{"title":22,"searchDepth":37,"depth":37,"links":145724},[145725,145726],{"id":145514,"depth":37,"text":145515},{"id":145701,"depth":37,"text":145702},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145506,"description":39},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145733,"title":145734,"body":145735,"description":145739,"extension":40,"meta":145740,"navigation":42,"path":145741,"seo":145742,"stem":145743,"__hash__":145744},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145736,"toc":145737},[],{"title":22,"searchDepth":37,"depth":37,"links":145738},[],"自己正经开始学编程的第一门语言！",{"category":92829},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145734,"description":145739},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145746,"title":145747,"body":145748,"description":39,"extension":40,"meta":146895,"navigation":42,"path":146896,"seo":146897,"stem":146898,"__hash__":146899},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145749,"toc":146871},[145750,145753,145757,145760,145763,145788,145791,145797,145801,145804,145831,145834,145874,145877,145889,145892,145898,145902,145906,145933,145950,145957,145961,145964,145990,145993,145997,146000,146040,146043,146060,146066,146070,146075,146119,146122,146140,146143,146211,146215,146222,146225,146240,146243,146252,146255,146266,146269,146278,146281,146298,146301,146316,146320,146324,146327,146329,146349,146353,146356,146359,146370,146373,146379,146383,146389,146416,146419,146431,146434,146445,146448,146454,146458,146464,146514,146517,146559,146562,146595,146598,146632,146636,146639,146659,146662,146698,146701,146714,146718,146722,146728,146731,146744,146748,146751,146757,146760,146764,146767,146770,146819,146823,146839,146845,146852,146858,146868],[10,145751,145747],{"id":145752},"_1-python环境与第一个程序",[57,145754,145756],{"id":145755},"_11-什么是python","1.1 什么是Python",[14,145758,145759],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145761,145762],{},"理解 Python 时抓住三个关键词：",[69,145764,145765,145768,145771],{},[72,145766,145767],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[72,145769,145770],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[72,145772,145773,145774,338,145777,338,145780,338,145783,338,145785,28386],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[112,145775,145776],{},"os",[112,145778,145779],{},"sys",[112,145781,145782],{},"json",[112,145784,57850],{},[112,145786,145787],{},"datetime",[14,145789,145790],{},"Python 程序的运行链路：",[106,145792,145795],{"className":145793,"code":145794,"language":5188,"meta":22},[5186],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[112,145796,145794],{"__ignoreMap":22},[57,145798,145800],{"id":145799},"_12-python解释器","1.2 Python解释器",[14,145802,145803],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[106,145805,145807],{"className":23823,"code":145806,"language":23825,"meta":22,"style":22},"python --version\npython3 --version\npython\npython3\n",[112,145808,145809,145815,145821,145826],{"__ignoreMap":22},[115,145810,145811,145813],{"class":117,"line":118},[115,145812,30381],{"class":1963},[115,145814,26294],{"class":174},[115,145816,145817,145819],{"class":117,"line":37},[115,145818,100869],{"class":1963},[115,145820,26294],{"class":174},[115,145822,145823],{"class":117,"line":1180},[115,145824,145825],{"class":1963},"python\n",[115,145827,145828],{"class":117,"line":1195},[115,145829,145830],{"class":1963},"python3\n",[14,145832,145833],{},"进入交互模式后，可以直接输入表达式：",[106,145835,145837],{"className":30379,"code":145836,"language":30381,"meta":22,"style":22},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[112,145838,145839,145850,145855,145869],{"__ignoreMap":22},[115,145840,145841,145844,145846,145848],{"class":117,"line":118},[115,145842,145843],{"class":121},">>>",[115,145845,25119],{"class":174},[115,145847,45567],{"class":121},[115,145849,47724],{"class":174},[115,145851,145852],{"class":117,"line":37},[115,145853,145854],{"class":174},"3\n",[115,145856,145857,145859,145862,145864,145867],{"class":117,"line":1180},[115,145858,145843],{"class":121},[115,145860,145861],{"class":174}," print",[115,145863,126],{"class":125},[115,145865,145866],{"class":230},"\"hello python\"",[115,145868,132],{"class":125},[115,145870,145871],{"class":117,"line":1195},[115,145872,145873],{"class":125},"hello python\n",[14,145875,145876],{},"退出交互模式：",[106,145878,145880],{"className":30379,"code":145879,"language":30381,"meta":22,"style":22},"exit()\n",[112,145881,145882],{"__ignoreMap":22},[115,145883,145884,145887],{"class":117,"line":118},[115,145885,145886],{"class":174},"exit",[115,145888,1976],{"class":125},[14,145890,145891],{},"或使用快捷键：",[106,145893,145896],{"className":145894,"code":145895,"language":5188,"meta":22},[5186],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[112,145897,145895],{"__ignoreMap":22},[57,145899,145901],{"id":145900},"_13-安装python","1.3 安装Python",[86,145903,145905],{"id":145904},"_131-windows安装","1.3.1 Windows安装",[69,145907,145908,145915,145918,145924,145930],{},[72,145909,145910,145911],{},"打开 Python 官网：",[27,145912,145913],{"href":145913,"rel":145914},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[31],[72,145916,145917],{},"下载 Windows Installer。",[72,145919,145920,145921,28386],{},"安装时勾选 ",[112,145922,145923],{},"Add Python to PATH",[72,145925,145926,145927,28386],{},"点击 ",[112,145928,145929],{},"Install Now",[72,145931,145932],{},"安装完成后打开命令提示符验证：",[106,145934,145936],{"className":23823,"code":145935,"language":23825,"meta":22,"style":22},"python --version\npip --version\n",[112,145937,145938,145944],{"__ignoreMap":22},[115,145939,145940,145942],{"class":117,"line":118},[115,145941,30381],{"class":1963},[115,145943,26294],{"class":174},[115,145945,145946,145948],{"class":117,"line":37},[115,145947,23832],{"class":1963},[115,145949,26294],{"class":174},[14,145951,145952,145953,145956],{},"如果提示 ",[112,145954,145955],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[86,145958,145960],{"id":145959},"_132-macos安装","1.3.2 macOS安装",[14,145962,145963],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[106,145965,145967],{"className":23823,"code":145966,"language":23825,"meta":22,"style":22},"brew install python\npython3 --version\npip3 --version\n",[112,145968,145969,145978,145984],{"__ignoreMap":22},[115,145970,145971,145974,145976],{"class":117,"line":118},[115,145972,145973],{"class":1963},"brew",[115,145975,23835],{"class":230},[115,145977,124308],{"class":230},[115,145979,145980,145982],{"class":117,"line":37},[115,145981,100869],{"class":1963},[115,145983,26294],{"class":174},[115,145985,145986,145988],{"class":117,"line":1180},[115,145987,119690],{"class":1963},[115,145989,26294],{"class":174},[14,145991,145992],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[86,145994,145996],{"id":145995},"_133-linux安装","1.3.3 Linux安装",[14,145998,145999],{},"Ubuntu\u002FDebian：",[106,146001,146003],{"className":23823,"code":146002,"language":23825,"meta":22,"style":22},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[112,146004,146005,146013,146028,146034],{"__ignoreMap":22},[115,146006,146007,146009,146011],{"class":117,"line":118},[115,146008,24577],{"class":1963},[115,146010,117307],{"class":230},[115,146012,26243],{"class":230},[115,146014,146015,146017,146019,146021,146023,146025],{"class":117,"line":37},[115,146016,24577],{"class":1963},[115,146018,117307],{"class":230},[115,146020,23835],{"class":230},[115,146022,104393],{"class":230},[115,146024,100788],{"class":230},[115,146026,146027],{"class":230}," python3-venv\n",[115,146029,146030,146032],{"class":117,"line":1180},[115,146031,100869],{"class":1963},[115,146033,26294],{"class":174},[115,146035,146036,146038],{"class":117,"line":1195},[115,146037,119690],{"class":1963},[115,146039,26294],{"class":174},[14,146041,146042],{},"Fedora：",[106,146044,146046],{"className":23823,"code":146045,"language":23825,"meta":22,"style":22},"sudo dnf install python3 python3-pip\n",[112,146047,146048],{"__ignoreMap":22},[115,146049,146050,146052,146054,146056,146058],{"class":117,"line":118},[115,146051,24577],{"class":1963},[115,146053,26316],{"class":230},[115,146055,23835],{"class":230},[115,146057,104393],{"class":230},[115,146059,119755],{"class":230},[14,146061,146062,146063,146065],{},"Linux 上通常使用 ",[112,146064,100869],{}," 命令，避免和系统旧版本 Python 冲突。",[57,146067,146069],{"id":146068},"_14-pip包管理器","1.4 pip包管理器",[14,146071,146072,146074],{},[112,146073,23832],{}," 用来安装第三方库。",[106,146076,146078],{"className":23823,"code":146077,"language":23825,"meta":22,"style":22},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[112,146079,146080,146089,146098,146106,146112],{"__ignoreMap":22},[115,146081,146082,146084,146086],{"class":117,"line":118},[115,146083,23832],{"class":1963},[115,146085,23835],{"class":230},[115,146087,146088],{"class":230}," requests\n",[115,146090,146091,146093,146096],{"class":117,"line":37},[115,146092,23832],{"class":1963},[115,146094,146095],{"class":230}," uninstall",[115,146097,146088],{"class":230},[115,146099,146100,146102,146104],{"class":117,"line":1180},[115,146101,23832],{"class":1963},[115,146103,117564],{"class":230},[115,146105,146088],{"class":230},[115,146107,146108,146110],{"class":117,"line":1195},[115,146109,23832],{"class":1963},[115,146111,118945],{"class":230},[115,146113,146114,146116],{"class":117,"line":1201},[115,146115,23832],{"class":1963},[115,146117,146118],{"class":230}," freeze\n",[14,146120,146121],{},"国内网络较慢时可以临时使用镜像：",[106,146123,146125],{"className":23823,"code":146124,"language":23825,"meta":22,"style":22},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[112,146126,146127],{"__ignoreMap":22},[115,146128,146129,146131,146133,146136,146138],{"class":117,"line":118},[115,146130,23832],{"class":1963},[115,146132,23835],{"class":230},[115,146134,146135],{"class":230}," requests",[115,146137,26431],{"class":174},[115,146139,119718],{"class":230},[14,146141,146142],{},"常见第三方库：",[263,146144,146145,146154],{},[266,146146,146147],{},[269,146148,146149,146152],{},[272,146150,146151],{},"库",[272,146153,102686],{},[310,146155,146156,146164,146171,146179,146187,146195,146203],{},[269,146157,146158,146161],{},[315,146159,146160],{},"requests",[315,146162,146163],{},"网络请求",[269,146165,146166,146168],{},[315,146167,100616],{},[315,146169,146170],{},"数值计算",[269,146172,146173,146176],{},[315,146174,146175],{},"pandas",[315,146177,146178],{},"表格数据处理",[269,146180,146181,146184],{},[315,146182,146183],{},"matplotlib",[315,146185,146186],{},"绘图",[269,146188,146189,146192],{},[315,146190,146191],{},"pyecharts",[315,146193,146194],{},"ECharts 图表",[269,146196,146197,146200],{},[315,146198,146199],{},"flask",[315,146201,146202],{},"Web 后端",[269,146204,146205,146208],{},[315,146206,146207],{},"pytest",[315,146209,146210],{},"自动化测试",[57,146212,146214],{"id":146213},"_15-虚拟环境","1.5 虚拟环境",[14,146216,146217,146218,146221],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[112,146219,146220],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146223,146224],{},"创建虚拟环境：",[106,146226,146228],{"className":23823,"code":146227,"language":23825,"meta":22,"style":22},"python -m venv .venv\n",[112,146229,146230],{"__ignoreMap":22},[115,146231,146232,146234,146236,146238],{"class":117,"line":118},[115,146233,30381],{"class":1963},[115,146235,100872],{"class":174},[115,146237,100875],{"class":230},[115,146239,100878],{"class":230},[14,146241,146242],{},"Windows 激活：",[106,146244,146246],{"className":23823,"code":146245,"language":23825,"meta":22,"style":22},".venv\\Scripts\\activate\n",[112,146247,146248],{"__ignoreMap":22},[115,146249,146250],{"class":117,"line":118},[115,146251,146245],{"class":1963},[14,146253,146254],{},"macOS\u002FLinux 激活：",[106,146256,146258],{"className":23823,"code":146257,"language":23825,"meta":22,"style":22},"source .venv\u002Fbin\u002Factivate\n",[112,146259,146260],{"__ignoreMap":22},[115,146261,146262,146264],{"class":117,"line":118},[115,146263,100883],{"class":174},[115,146265,100886],{"class":230},[14,146267,146268],{},"退出虚拟环境：",[106,146270,146272],{"className":23823,"code":146271,"language":23825,"meta":22,"style":22},"deactivate\n",[112,146273,146274],{"__ignoreMap":22},[115,146275,146276],{"class":117,"line":118},[115,146277,146271],{"class":1963},[14,146279,146280],{},"保存依赖：",[106,146282,146284],{"className":23823,"code":146283,"language":23825,"meta":22,"style":22},"pip freeze > requirements.txt\n",[112,146285,146286],{"__ignoreMap":22},[115,146287,146288,146290,146293,146295],{"class":117,"line":118},[115,146289,23832],{"class":1963},[115,146291,146292],{"class":230}," freeze",[115,146294,26223],{"class":121},[115,146296,146297],{"class":230}," requirements.txt\n",[14,146299,146300],{},"安装依赖：",[106,146302,146304],{"className":23823,"code":146303,"language":23825,"meta":22,"style":22},"pip install -r requirements.txt\n",[112,146305,146306],{"__ignoreMap":22},[115,146307,146308,146310,146312,146314],{"class":117,"line":118},[115,146309,23832],{"class":1963},[115,146311,23835],{"class":230},[115,146313,119629],{"class":174},[115,146315,146297],{"class":230},[57,146317,146319],{"id":146318},"_16-开发工具","1.6 开发工具",[86,146321,146323],{"id":146322},"_161-pycharm","1.6.1 PyCharm",[14,146325,146326],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146328,122052],{},[69,146330,146331,146334,146337,146343,146346],{},[72,146332,146333],{},"New Project：创建项目。",[72,146335,146336],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[72,146338,146339,146340,125973],{},"New Python File：创建 ",[112,146341,146342],{},".py",[72,146344,146345],{},"Run：运行当前文件。",[72,146347,146348],{},"Debug：断点调试。",[86,146350,146352],{"id":146351},"_162-vs-code","1.6.2 VS Code",[14,146354,146355],{},"VS Code 轻量，适合后续多语言开发。",[14,146357,146358],{},"建议安装插件：",[69,146360,146361,146364,146367],{},[72,146362,146363],{},"Python。",[72,146365,146366],{},"Pylance。",[72,146368,146369],{},"Jupyter。",[14,146371,146372],{},"选择解释器：",[106,146374,146377],{"className":146375,"code":146376,"language":5188,"meta":22},[5186],"Ctrl + Shift + P -> Python: Select Interpreter\n",[112,146378,146376],{"__ignoreMap":22},[57,146380,146382],{"id":146381},"_17-第一个python程序","1.7 第一个Python程序",[14,146384,146385,146386,24619],{},"创建文件 ",[112,146387,146388],{},"hello.py",[106,146390,146392],{"className":30379,"code":146391,"language":30381,"meta":22,"style":22},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[112,146393,146394,146405],{"__ignoreMap":22},[115,146395,146396,146398,146400,146403],{"class":117,"line":118},[115,146397,30416],{"class":174},[115,146399,126],{"class":125},[115,146401,146402],{"class":230},"\"Hello World\"",[115,146404,132],{"class":125},[115,146406,146407,146409,146411,146414],{"class":117,"line":37},[115,146408,30416],{"class":174},[115,146410,126],{"class":125},[115,146412,146413],{"class":230},"\"你好，Python\"",[115,146415,132],{"class":125},[14,146417,146418],{},"在终端运行：",[106,146420,146422],{"className":23823,"code":146421,"language":23825,"meta":22,"style":22},"python hello.py\n",[112,146423,146424],{"__ignoreMap":22},[115,146425,146426,146428],{"class":117,"line":118},[115,146427,30381],{"class":1963},[115,146429,146430],{"class":230}," hello.py\n",[14,146432,146433],{},"或：",[106,146435,146437],{"className":23823,"code":146436,"language":23825,"meta":22,"style":22},"python3 hello.py\n",[112,146438,146439],{"__ignoreMap":22},[115,146440,146441,146443],{"class":117,"line":118},[115,146442,100869],{"class":1963},[115,146444,146430],{"class":230},[14,146446,146447],{},"输出：",[106,146449,146452],{"className":146450,"code":146451,"language":5188,"meta":22},[5186],"Hello World\n你好，Python\n",[112,146453,146451],{"__ignoreMap":22},[57,146455,146457],{"id":146456},"_18-print函数","1.8 print函数",[14,146459,146460,146463],{},[112,146461,146462],{},"print()"," 用来输出内容。",[106,146465,146467],{"className":30379,"code":146466,"language":30381,"meta":22,"style":22},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[112,146468,146469,146479,146489,146499],{"__ignoreMap":22},[115,146470,146471,146473,146475,146477],{"class":117,"line":118},[115,146472,30416],{"class":174},[115,146474,126],{"class":125},[115,146476,5845],{"class":230},[115,146478,132],{"class":125},[115,146480,146481,146483,146485,146487],{"class":117,"line":37},[115,146482,30416],{"class":174},[115,146484,126],{"class":125},[115,146486,436],{"class":174},[115,146488,132],{"class":125},[115,146490,146491,146493,146495,146497],{"class":117,"line":1180},[115,146492,30416],{"class":174},[115,146494,126],{"class":125},[115,146496,175],{"class":174},[115,146498,132],{"class":125},[115,146500,146501,146503,146505,146508,146510,146512],{"class":117,"line":1195},[115,146502,30416],{"class":174},[115,146504,126],{"class":125},[115,146506,146507],{"class":230},"\"年龄:\"",[115,146509,12436],{"class":125},[115,146511,775],{"class":174},[115,146513,132],{"class":125},[14,146515,146516],{},"多个内容用逗号隔开，默认中间加空格：",[106,146518,146520],{"className":30379,"code":146519,"language":30381,"meta":22,"style":22},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[112,146521,146522,146532,146542],{"__ignoreMap":22},[115,146523,146524,146527,146529],{"class":117,"line":118},[115,146525,146526],{"class":125},"name ",[115,146528,171],{"class":121},[115,146530,146531],{"class":230}," \"张三\"\n",[115,146533,146534,146537,146539],{"class":117,"line":37},[115,146535,146536],{"class":125},"age ",[115,146538,171],{"class":121},[115,146540,146541],{"class":174}," 18\n",[115,146543,146544,146546,146548,146551,146554,146556],{"class":117,"line":1180},[115,146545,30416],{"class":174},[115,146547,126],{"class":125},[115,146549,146550],{"class":230},"\"姓名:\"",[115,146552,146553],{"class":125},", name, ",[115,146555,146507],{"class":230},[115,146557,146558],{"class":125},", age)\n",[14,146560,146561],{},"修改分隔符：",[106,146563,146565],{"className":30379,"code":146564,"language":30381,"meta":22,"style":22},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[112,146566,146567],{"__ignoreMap":22},[115,146568,146569,146571,146573,146576,146578,146580,146582,146584,146586,146589,146591,146593],{"class":117,"line":118},[115,146570,30416],{"class":174},[115,146572,126],{"class":125},[115,146574,146575],{"class":230},"\"2024\"",[115,146577,12436],{"class":125},[115,146579,54306],{"class":230},[115,146581,12436],{"class":125},[115,146583,54306],{"class":230},[115,146585,12436],{"class":125},[115,146587,146588],{"class":5217},"sep",[115,146590,171],{"class":121},[115,146592,32484],{"class":230},[115,146594,132],{"class":125},[14,146596,146597],{},"修改结尾符：",[106,146599,146601],{"className":30379,"code":146600,"language":30381,"meta":22,"style":22},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[112,146602,146603,146621],{"__ignoreMap":22},[115,146604,146605,146607,146609,146611,146613,146615,146617,146619],{"class":117,"line":118},[115,146606,30416],{"class":174},[115,146608,126],{"class":125},[115,146610,5845],{"class":230},[115,146612,12436],{"class":125},[115,146614,45802],{"class":5217},[115,146616,171],{"class":121},[115,146618,4359],{"class":230},[115,146620,132],{"class":125},[115,146622,146623,146625,146627,146630],{"class":117,"line":37},[115,146624,30416],{"class":174},[115,146626,126],{"class":125},[115,146628,146629],{"class":230},"\"python\"",[115,146631,132],{"class":125},[57,146633,146635],{"id":146634},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146637,146638],{},"交互运行适合临时验证：",[106,146640,146642],{"className":30379,"code":146641,"language":30381,"meta":22,"style":22},">>> 10 * 3\n30\n",[112,146643,146644,146654],{"__ignoreMap":22},[115,146645,146646,146648,146650,146652],{"class":117,"line":118},[115,146647,145843],{"class":121},[115,146649,2038],{"class":174},[115,146651,6519],{"class":121},[115,146653,120026],{"class":174},[115,146655,146656],{"class":117,"line":37},[115,146657,146658],{"class":174},"30\n",[14,146660,146661],{},"脚本运行适合保存程序：",[106,146663,146665],{"className":30379,"code":146664,"language":30381,"meta":22,"style":22},"price = 8\ncount = 5\nprint(price * count)\n",[112,146666,146667,146677,146686],{"__ignoreMap":22},[115,146668,146669,146672,146674],{"class":117,"line":118},[115,146670,146671],{"class":125},"price ",[115,146673,171],{"class":121},[115,146675,146676],{"class":174}," 8\n",[115,146678,146679,146682,146684],{"class":117,"line":37},[115,146680,146681],{"class":125},"count ",[115,146683,171],{"class":121},[115,146685,54417],{"class":174},[115,146687,146688,146690,146693,146695],{"class":117,"line":1180},[115,146689,30416],{"class":174},[115,146691,146692],{"class":125},"(price ",[115,146694,580],{"class":121},[115,146696,146697],{"class":125}," count)\n",[14,146699,146700],{},"实际学习中推荐：",[69,146702,146703,146706,146711],{},[72,146704,146705],{},"临时试一个语法，用交互模式。",[72,146707,146708,146709,125973],{},"写完整练习，用 ",[112,146710,146342],{},[72,146712,146713],{},"写项目，用独立目录和虚拟环境。",[57,146715,146717],{"id":146716},"_110-常见错误","1.10 常见错误",[86,146719,146721],{"id":146720},"_1101-命令找不到","1.10.1 命令找不到",[106,146723,146726],{"className":146724,"code":146725,"language":5188,"meta":22},[5186],"python: command not found\n",[112,146727,146725],{"__ignoreMap":22},[14,146729,146730],{},"原因：",[69,146732,146733,146736,146739],{},[72,146734,146735],{},"没安装 Python。",[72,146737,146738],{},"PATH 没配置。",[72,146740,146741,146742,28386],{},"Linux\u002FmacOS 应该使用 ",[112,146743,100869],{},[86,146745,146747],{"id":146746},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146749,146750],{},"不要把文件命名为：",[106,146752,146755],{"className":146753,"code":146754,"language":5188,"meta":22},[5186],"random.py\njson.py\ntime.py\nrequests.py\n",[112,146756,146754],{"__ignoreMap":22},[14,146758,146759],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[86,146761,146763],{"id":146762},"_1103-中文乱码","1.10.3 中文乱码",[14,146765,146766],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146768,146769],{},"如果读写文件出现乱码，要明确指定编码：",[106,146771,146773],{"className":30379,"code":146772,"language":30381,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[112,146774,146775,146809],{"__ignoreMap":22},[115,146776,146777,146779,146782,146784,146787,146789,146792,146794,146797,146799,146802,146804,146806],{"class":117,"line":118},[115,146778,107823],{"class":121},[115,146780,146781],{"class":174}," open",[115,146783,126],{"class":125},[115,146785,146786],{"class":230},"\"data.txt\"",[115,146788,12436],{"class":125},[115,146790,146791],{"class":230},"\"r\"",[115,146793,12436],{"class":125},[115,146795,146796],{"class":5217},"encoding",[115,146798,171],{"class":121},[115,146800,146801],{"class":230},"\"utf-8\"",[115,146803,13715],{"class":125},[115,146805,31384],{"class":121},[115,146807,146808],{"class":125}," f:\n",[115,146810,146811,146814,146816],{"class":117,"line":37},[115,146812,146813],{"class":125},"    content ",[115,146815,171],{"class":121},[115,146817,146818],{"class":125}," f.read()\n",[57,146820,146822],{"id":146821},"_111-本章练习","1.11 本章练习",[69,146824,146825,146828,146834],{},[72,146826,146827],{},"安装 Python，并在终端输出版本号。",[72,146829,146830,146831,146833],{},"新建 ",[112,146832,146388],{},"，输出自己的姓名、年龄、学习目标。",[72,146835,104356,146836,146838],{},[112,146837,146462],{}," 输出下面格式：",[106,146840,146843],{"className":146841,"code":146842,"language":5188,"meta":22},[5186],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[112,146844,146842],{"__ignoreMap":22},[69,146846,146847],{"start":1195},[72,146848,104356,146849,146851],{},[112,146850,146588],{}," 输出日期：",[106,146853,146856],{"className":146854,"code":146855,"language":5188,"meta":22},[5186],"2024-10-10\n",[112,146857,146855],{"__ignoreMap":22},[69,146859,146860],{"start":1201},[72,146861,104356,146862,146864,146865,146867],{},[112,146863,45802],{}," 让两次 ",[112,146866,146462],{}," 输出在同一行。",[5127,146869,146870],{},"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":22,"searchDepth":37,"depth":37,"links":146872},[146873,146874,146875,146880,146881,146882,146886,146887,146888,146889,146894],{"id":145755,"depth":37,"text":145756},{"id":145799,"depth":37,"text":145800},{"id":145900,"depth":37,"text":145901,"children":146876},[146877,146878,146879],{"id":145904,"depth":1180,"text":145905},{"id":145959,"depth":1180,"text":145960},{"id":145995,"depth":1180,"text":145996},{"id":146068,"depth":37,"text":146069},{"id":146213,"depth":37,"text":146214},{"id":146318,"depth":37,"text":146319,"children":146883},[146884,146885],{"id":146322,"depth":1180,"text":146323},{"id":146351,"depth":1180,"text":146352},{"id":146381,"depth":37,"text":146382},{"id":146456,"depth":37,"text":146457},{"id":146634,"depth":37,"text":146635},{"id":146716,"depth":37,"text":146717,"children":146890},[146891,146892,146893],{"id":146720,"depth":1180,"text":146721},{"id":146746,"depth":1180,"text":146747},{"id":146762,"depth":1180,"text":146763},{"id":146821,"depth":37,"text":146822},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145747,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146901,"title":146902,"body":146903,"description":39,"extension":40,"meta":149307,"navigation":42,"path":149308,"seo":149309,"stem":149310,"__hash__":149311},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146904,"toc":149292},[146905,146908,146912,146915,146918,146935,146938,146980,146983,146987,146990,146993,147030,147033,147067,147070,147162,147166,147180,147183,147210,147213,147217,147320,147327,147330,147347,147351,147358,147547,147550,147623,147627,147630,147714,147717,147749,147753,147957,147960,147964,147970,148072,148075,148331,148335,148338,148341,148355,148357,148543,148547,148909,148915,148919,148922,149046,149049,149228,149231,149235,149268,149272,149289],[10,146906,146902],{"id":146907},"_10-json与pyecharts折线图",[57,146909,146911],{"id":146910},"_101-数据可视化","10.1 数据可视化",[14,146913,146914],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146916,146917],{},"常见图表：",[69,146919,146920,146923,146926,146929,146932],{},[72,146921,146922],{},"折线图：看趋势。",[72,146924,146925],{},"柱状图：看分类对比。",[72,146927,146928],{},"饼图：看占比。",[72,146930,146931],{},"地图：看地域分布。",[72,146933,146934],{},"散点图：看两个变量之间的关系。",[14,146936,146937],{},"Python 可视化常用库：",[263,146939,146940,146948],{},[266,146941,146942],{},[269,146943,146944,146946],{},[272,146945,146151],{},[272,146947,23741],{},[310,146949,146950,146957,146965,146972],{},[269,146951,146952,146954],{},[315,146953,146183],{},[315,146955,146956],{},"基础、经典、可定制",[269,146958,146959,146962],{},[315,146960,146961],{},"seaborn",[315,146963,146964],{},"统计图表更美观",[269,146966,146967,146969],{},[315,146968,146191],{},[315,146970,146971],{},"生成交互式网页图表",[269,146973,146974,146977],{},[315,146975,146976],{},"plotly",[315,146978,146979],{},"交互图表能力强",[14,146981,146982],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[57,146984,146986],{"id":146985},"_102-json回顾","10.2 JSON回顾",[14,146988,146989],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146991,146992],{},"Python 字典：",[106,146994,146996],{"className":30379,"code":146995,"language":30381,"meta":22,"style":22},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[112,146997,146998,147006,147017,147026],{"__ignoreMap":22},[115,146999,147000,147002,147004],{"class":117,"line":118},[115,147001,101648],{"class":125},[115,147003,171],{"class":121},[115,147005,15573],{"class":125},[115,147007,147008,147011,147013,147015],{"class":117,"line":37},[115,147009,147010],{"class":230},"    \"name\"",[115,147012,51427],{"class":125},[115,147014,69259],{"class":230},[115,147016,31467],{"class":125},[115,147018,147019,147022,147024],{"class":117,"line":1180},[115,147020,147021],{"class":230},"    \"value\"",[115,147023,51427],{"class":125},[115,147025,97448],{"class":174},[115,147027,147028],{"class":117,"line":1195},[115,147029,1565],{"class":125},[14,147031,147032],{},"JSON 字符串：",[106,147034,147037],{"className":147035,"code":147036,"language":145782,"meta":22,"style":22},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[112,147038,147039,147043,147054,147063],{"__ignoreMap":22},[115,147040,147041],{"class":117,"line":118},[115,147042,1546],{"class":125},[115,147044,147045,147048,147050,147052],{"class":117,"line":37},[115,147046,147047],{"class":174},"  \"name\"",[115,147049,51427],{"class":125},[115,147051,69259],{"class":230},[115,147053,31467],{"class":125},[115,147055,147056,147059,147061],{"class":117,"line":1180},[115,147057,147058],{"class":174},"  \"value\"",[115,147060,51427],{"class":125},[115,147062,97448],{"class":174},[115,147064,147065],{"class":117,"line":1195},[115,147066,1565],{"class":125},[14,147068,147069],{},"Python 与 JSON 的转换：",[106,147071,147073],{"className":30379,"code":147072,"language":30381,"meta":22,"style":22},"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",[112,147074,147075,147082,147086,147111,147115,147134,147141,147145,147155],{"__ignoreMap":22},[115,147076,147077,147079],{"class":117,"line":118},[115,147078,30393],{"class":121},[115,147080,147081],{"class":125}," json\n",[115,147083,147084],{"class":117,"line":37},[115,147085,2400],{"emptyLinePlaceholder":42},[115,147087,147088,147090,147092,147094,147096,147098,147100,147102,147105,147107,147109],{"class":117,"line":1180},[115,147089,101648],{"class":125},[115,147091,171],{"class":121},[115,147093,4448],{"class":125},[115,147095,62669],{"class":230},[115,147097,51427],{"class":125},[115,147099,69259],{"class":230},[115,147101,12436],{"class":125},[115,147103,147104],{"class":230},"\"value\"",[115,147106,51427],{"class":125},[115,147108,436],{"class":174},[115,147110,1565],{"class":125},[115,147112,147113],{"class":117,"line":1195},[115,147114,2400],{"emptyLinePlaceholder":42},[115,147116,147117,147120,147122,147125,147128,147130,147132],{"class":117,"line":1201},[115,147118,147119],{"class":125},"json_text ",[115,147121,171],{"class":121},[115,147123,147124],{"class":125}," json.dumps(data, ",[115,147126,147127],{"class":5217},"ensure_ascii",[115,147129,171],{"class":121},[115,147131,33988],{"class":174},[115,147133,132],{"class":125},[115,147135,147136,147138],{"class":117,"line":1215},[115,147137,30416],{"class":174},[115,147139,147140],{"class":125},"(json_text)\n",[115,147142,147143],{"class":117,"line":1221},[115,147144,2400],{"emptyLinePlaceholder":42},[115,147146,147147,147150,147152],{"class":117,"line":1312},[115,147148,147149],{"class":125},"new_data ",[115,147151,171],{"class":121},[115,147153,147154],{"class":125}," json.loads(json_text)\n",[115,147156,147157,147159],{"class":117,"line":1318},[115,147158,30416],{"class":174},[115,147160,147161],{"class":125},"(new_data)\n",[57,147163,147165],{"id":147164},"_103-安装pyecharts","10.3 安装pyecharts",[106,147167,147169],{"className":23823,"code":147168,"language":23825,"meta":22,"style":22},"pip install pyecharts\n",[112,147170,147171],{"__ignoreMap":22},[115,147172,147173,147175,147177],{"class":117,"line":118},[115,147174,23832],{"class":1963},[115,147176,23835],{"class":230},[115,147178,147179],{"class":230}," pyecharts\n",[14,147181,147182],{},"验证：",[106,147184,147186],{"className":30379,"code":147185,"language":30381,"meta":22,"style":22},"import pyecharts\n\nprint(pyecharts.__version__)\n",[112,147187,147188,147194,147198],{"__ignoreMap":22},[115,147189,147190,147192],{"class":117,"line":118},[115,147191,30393],{"class":121},[115,147193,147179],{"class":125},[115,147195,147196],{"class":117,"line":37},[115,147197,2400],{"emptyLinePlaceholder":42},[115,147199,147200,147202,147205,147208],{"class":117,"line":1180},[115,147201,30416],{"class":174},[115,147203,147204],{"class":125},"(pyecharts.",[115,147206,147207],{"class":174},"__version__",[115,147209,132],{"class":125},[14,147211,147212],{},"如果使用虚拟环境，要先激活环境再安装。",[57,147214,147216],{"id":147215},"_104-第一个折线图","10.4 第一个折线图",[106,147218,147220],{"className":30379,"code":147219,"language":30381,"meta":22,"style":22},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[112,147221,147222,147234,147238,147248,147278,147310],{"__ignoreMap":22},[115,147223,147224,147226,147229,147231],{"class":117,"line":118},[115,147225,30738],{"class":121},[115,147227,147228],{"class":125}," pyecharts.charts ",[115,147230,30393],{"class":121},[115,147232,147233],{"class":125}," Line\n",[115,147235,147236],{"class":117,"line":37},[115,147237,2400],{"emptyLinePlaceholder":42},[115,147239,147240,147243,147245],{"class":117,"line":1180},[115,147241,147242],{"class":125},"line ",[115,147244,171],{"class":121},[115,147246,147247],{"class":125}," Line()\n",[115,147249,147250,147253,147256,147258,147261,147263,147266,147268,147271,147273,147276],{"class":117,"line":1195},[115,147251,147252],{"class":125},"line.add_xaxis([",[115,147254,147255],{"class":230},"\"周一\"",[115,147257,12436],{"class":125},[115,147259,147260],{"class":230},"\"周二\"",[115,147262,12436],{"class":125},[115,147264,147265],{"class":230},"\"周三\"",[115,147267,12436],{"class":125},[115,147269,147270],{"class":230},"\"周四\"",[115,147272,12436],{"class":125},[115,147274,147275],{"class":230},"\"周五\"",[115,147277,4657],{"class":125},[115,147279,147280,147283,147286,147288,147290,147292,147294,147296,147298,147300,147303,147305,147308],{"class":117,"line":1201},[115,147281,147282],{"class":125},"line.add_yaxis(",[115,147284,147285],{"class":230},"\"销售额\"",[115,147287,77508],{"class":125},[115,147289,436],{"class":174},[115,147291,12436],{"class":125},[115,147293,942],{"class":174},[115,147295,12436],{"class":125},[115,147297,987],{"class":174},[115,147299,12436],{"class":125},[115,147301,147302],{"class":174},"150",[115,147304,12436],{"class":125},[115,147306,147307],{"class":174},"180",[115,147309,4657],{"class":125},[115,147311,147312,147315,147318],{"class":117,"line":1215},[115,147313,147314],{"class":125},"line.render(",[115,147316,147317],{"class":230},"\"line.html\"",[115,147319,132],{"class":125},[14,147321,147322,147323,147326],{},"运行后会生成 ",[112,147324,147325],{},"line.html","，用浏览器打开即可看到图表。",[14,147328,147329],{},"核心步骤：",[69,147331,147332,147335,147338,147341,147344],{},[72,147333,147334],{},"导入图表类。",[72,147336,147337],{},"创建图表对象。",[72,147339,147340],{},"添加 x 轴数据。",[72,147342,147343],{},"添加 y 轴数据。",[72,147345,147346],{},"渲染为 HTML。",[57,147348,147350],{"id":147349},"_105-全局配置","10.5 全局配置",[14,147352,147353,147354,147357],{},"常用配置在 ",[112,147355,147356],{},"pyecharts.options"," 中。",[106,147359,147361],{"className":30379,"code":147360,"language":30381,"meta":22,"style":22},"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",[112,147362,147363,147380,147390,147394,147402,147426,147454,147459,147478,147497,147515,147535,147539],{"__ignoreMap":22},[115,147364,147365,147367,147370,147372,147375,147377],{"class":117,"line":118},[115,147366,30738],{"class":121},[115,147368,147369],{"class":125}," pyecharts ",[115,147371,30393],{"class":121},[115,147373,147374],{"class":125}," options ",[115,147376,31384],{"class":121},[115,147378,147379],{"class":125}," opts\n",[115,147381,147382,147384,147386,147388],{"class":117,"line":37},[115,147383,30738],{"class":121},[115,147385,147228],{"class":125},[115,147387,30393],{"class":121},[115,147389,147233],{"class":125},[115,147391,147392],{"class":117,"line":1180},[115,147393,2400],{"emptyLinePlaceholder":42},[115,147395,147396,147398,147400],{"class":117,"line":1195},[115,147397,147242],{"class":125},[115,147399,171],{"class":121},[115,147401,147247],{"class":125},[115,147403,147404,147406,147408,147410,147412,147414,147416,147418,147420,147422,147424],{"class":117,"line":1201},[115,147405,147252],{"class":125},[115,147407,147255],{"class":230},[115,147409,12436],{"class":125},[115,147411,147260],{"class":230},[115,147413,12436],{"class":125},[115,147415,147265],{"class":230},[115,147417,12436],{"class":125},[115,147419,147270],{"class":230},[115,147421,12436],{"class":125},[115,147423,147275],{"class":230},[115,147425,4657],{"class":125},[115,147427,147428,147430,147432,147434,147436,147438,147440,147442,147444,147446,147448,147450,147452],{"class":117,"line":1215},[115,147429,147282],{"class":125},[115,147431,147285],{"class":230},[115,147433,77508],{"class":125},[115,147435,436],{"class":174},[115,147437,12436],{"class":125},[115,147439,942],{"class":174},[115,147441,12436],{"class":125},[115,147443,987],{"class":174},[115,147445,12436],{"class":125},[115,147447,147302],{"class":174},[115,147449,12436],{"class":125},[115,147451,147307],{"class":174},[115,147453,4657],{"class":125},[115,147455,147456],{"class":117,"line":1221},[115,147457,147458],{"class":125},"line.set_global_opts(\n",[115,147460,147461,147464,147466,147469,147471,147473,147476],{"class":117,"line":1312},[115,147462,147463],{"class":5217},"    title_opts",[115,147465,171],{"class":121},[115,147467,147468],{"class":125},"opts.TitleOpts(",[115,147470,51397],{"class":5217},[115,147472,171],{"class":121},[115,147474,147475],{"class":230},"\"一周销售额\"",[115,147477,38048],{"class":125},[115,147479,147480,147483,147485,147488,147490,147492,147495],{"class":117,"line":1318},[115,147481,147482],{"class":5217},"    xaxis_opts",[115,147484,171],{"class":121},[115,147486,147487],{"class":125},"opts.AxisOpts(",[115,147489,79800],{"class":5217},[115,147491,171],{"class":121},[115,147493,147494],{"class":230},"\"日期\"",[115,147496,38048],{"class":125},[115,147498,147499,147502,147504,147506,147508,147510,147513],{"class":117,"line":1330},[115,147500,147501],{"class":5217},"    yaxis_opts",[115,147503,171],{"class":121},[115,147505,147487],{"class":125},[115,147507,79800],{"class":5217},[115,147509,171],{"class":121},[115,147511,147512],{"class":230},"\"金额\"",[115,147514,38048],{"class":125},[115,147516,147517,147520,147522,147525,147528,147530,147533],{"class":117,"line":1612},[115,147518,147519],{"class":5217},"    tooltip_opts",[115,147521,171],{"class":121},[115,147523,147524],{"class":125},"opts.TooltipOpts(",[115,147526,147527],{"class":5217},"trigger",[115,147529,171],{"class":121},[115,147531,147532],{"class":230},"\"axis\"",[115,147534,38048],{"class":125},[115,147536,147537],{"class":117,"line":1617},[115,147538,132],{"class":125},[115,147540,147541,147543,147545],{"class":117,"line":1623},[115,147542,147314],{"class":125},[115,147544,147317],{"class":230},[115,147546,132],{"class":125},[14,147548,147549],{},"常见全局配置：",[263,147551,147552,147561],{},[266,147553,147554],{},[269,147555,147556,147559],{},[272,147557,147558],{},"配置",[272,147560,102686],{},[310,147562,147563,147573,147583,147593,147603,147613],{},[269,147564,147565,147570],{},[315,147566,147567],{},[112,147568,147569],{},"TitleOpts",[315,147571,147572],{},"标题",[269,147574,147575,147580],{},[315,147576,147577],{},[112,147578,147579],{},"LegendOpts",[315,147581,147582],{},"图例",[269,147584,147585,147590],{},[315,147586,147587],{},[112,147588,147589],{},"TooltipOpts",[315,147591,147592],{},"提示框",[269,147594,147595,147600],{},[315,147596,147597],{},[112,147598,147599],{},"AxisOpts",[315,147601,147602],{},"坐标轴",[269,147604,147605,147610],{},[315,147606,147607],{},[112,147608,147609],{},"VisualMapOpts",[315,147611,147612],{},"视觉映射",[269,147614,147615,147620],{},[315,147616,147617],{},[112,147618,147619],{},"DataZoomOpts",[315,147621,147622],{},"区域缩放",[57,147624,147626],{"id":147625},"_106-系列配置","10.6 系列配置",[14,147628,147629],{},"系列配置作用于某一组数据。",[106,147631,147633],{"className":30379,"code":147632,"language":30381,"meta":22,"style":22},"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",[112,147634,147635,147640,147651,147680,147691,147710],{"__ignoreMap":22},[115,147636,147637],{"class":117,"line":118},[115,147638,147639],{"class":125},"line.add_yaxis(\n",[115,147641,147642,147645,147647,147649],{"class":117,"line":37},[115,147643,147644],{"class":5217},"    series_name",[115,147646,171],{"class":121},[115,147648,147285],{"class":230},[115,147650,31467],{"class":125},[115,147652,147653,147656,147658,147660,147662,147664,147666,147668,147670,147672,147674,147676,147678],{"class":117,"line":1180},[115,147654,147655],{"class":5217},"    y_axis",[115,147657,171],{"class":121},[115,147659,1015],{"class":125},[115,147661,436],{"class":174},[115,147663,12436],{"class":125},[115,147665,942],{"class":174},[115,147667,12436],{"class":125},[115,147669,987],{"class":174},[115,147671,12436],{"class":125},[115,147673,147302],{"class":174},[115,147675,12436],{"class":125},[115,147677,147307],{"class":174},[115,147679,87826],{"class":125},[115,147681,147682,147685,147687,147689],{"class":117,"line":1195},[115,147683,147684],{"class":5217},"    is_smooth",[115,147686,171],{"class":121},[115,147688,31477],{"class":174},[115,147690,31467],{"class":125},[115,147692,147693,147696,147698,147701,147704,147706,147708],{"class":117,"line":1201},[115,147694,147695],{"class":5217},"    label_opts",[115,147697,171],{"class":121},[115,147699,147700],{"class":125},"opts.LabelOpts(",[115,147702,147703],{"class":5217},"is_show",[115,147705,171],{"class":121},[115,147707,31477],{"class":174},[115,147709,38048],{"class":125},[115,147711,147712],{"class":117,"line":1215},[115,147713,132],{"class":125},[14,147715,147716],{},"常用参数：",[69,147718,147719,147725,147731,147737,147743],{},[72,147720,147721,147724],{},[112,147722,147723],{},"series_name","：系列名称。",[72,147726,147727,147730],{},[112,147728,147729],{},"y_axis","：y 轴数据。",[72,147732,147733,147736],{},[112,147734,147735],{},"is_smooth","：是否平滑曲线。",[72,147738,147739,147742],{},[112,147740,147741],{},"label_opts","：标签配置。",[72,147744,147745,147748],{},[112,147746,147747],{},"symbol_size","：标记点大小。",[57,147750,147752],{"id":147751},"_107-多条折线","10.7 多条折线",[106,147754,147756],{"className":30379,"code":147755,"language":30381,"meta":22,"style":22},"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",[112,147757,147758,147772,147782,147786,147815,147819,147827,147832,147870,147907,147911,147928,147944,147948],{"__ignoreMap":22},[115,147759,147760,147762,147764,147766,147768,147770],{"class":117,"line":118},[115,147761,30738],{"class":121},[115,147763,147369],{"class":125},[115,147765,30393],{"class":121},[115,147767,147374],{"class":125},[115,147769,31384],{"class":121},[115,147771,147379],{"class":125},[115,147773,147774,147776,147778,147780],{"class":117,"line":37},[115,147775,30738],{"class":121},[115,147777,147228],{"class":125},[115,147779,30393],{"class":121},[115,147781,147233],{"class":125},[115,147783,147784],{"class":117,"line":1180},[115,147785,2400],{"emptyLinePlaceholder":42},[115,147787,147788,147791,147793,147795,147797,147799,147801,147803,147805,147807,147809,147811,147813],{"class":117,"line":1195},[115,147789,147790],{"class":125},"dates ",[115,147792,171],{"class":121},[115,147794,52216],{"class":125},[115,147796,147255],{"class":230},[115,147798,12436],{"class":125},[115,147800,147260],{"class":230},[115,147802,12436],{"class":125},[115,147804,147265],{"class":230},[115,147806,12436],{"class":125},[115,147808,147270],{"class":230},[115,147810,12436],{"class":125},[115,147812,147275],{"class":230},[115,147814,33247],{"class":125},[115,147816,147817],{"class":117,"line":1201},[115,147818,2400],{"emptyLinePlaceholder":42},[115,147820,147821,147823,147825],{"class":117,"line":1215},[115,147822,147242],{"class":125},[115,147824,171],{"class":121},[115,147826,147247],{"class":125},[115,147828,147829],{"class":117,"line":1221},[115,147830,147831],{"class":125},"line.add_xaxis(dates)\n",[115,147833,147834,147836,147839,147841,147843,147845,147848,147850,147852,147854,147856,147858,147860,147862,147864,147866,147868],{"class":117,"line":1312},[115,147835,147282],{"class":125},[115,147837,147838],{"class":230},"\"线上销售\"",[115,147840,77508],{"class":125},[115,147842,436],{"class":174},[115,147844,12436],{"class":125},[115,147846,147847],{"class":174},"130",[115,147849,12436],{"class":125},[115,147851,942],{"class":174},[115,147853,12436],{"class":125},[115,147855,21049],{"class":174},[115,147857,12436],{"class":125},[115,147859,1722],{"class":174},[115,147861,112192],{"class":125},[115,147863,147735],{"class":5217},[115,147865,171],{"class":121},[115,147867,31477],{"class":174},[115,147869,132],{"class":125},[115,147871,147872,147874,147877,147879,147881,147883,147885,147887,147889,147891,147893,147895,147897,147899,147901,147903,147905],{"class":117,"line":1318},[115,147873,147282],{"class":125},[115,147875,147876],{"class":230},"\"线下销售\"",[115,147878,77508],{"class":125},[115,147880,737],{"class":174},[115,147882,12436],{"class":125},[115,147884,987],{"class":174},[115,147886,12436],{"class":125},[115,147888,436],{"class":174},[115,147890,12436],{"class":125},[115,147892,942],{"class":174},[115,147894,12436],{"class":125},[115,147896,147302],{"class":174},[115,147898,112192],{"class":125},[115,147900,147735],{"class":5217},[115,147902,171],{"class":121},[115,147904,31477],{"class":174},[115,147906,132],{"class":125},[115,147908,147909],{"class":117,"line":1330},[115,147910,147458],{"class":125},[115,147912,147913,147915,147917,147919,147921,147923,147926],{"class":117,"line":1612},[115,147914,147463],{"class":5217},[115,147916,171],{"class":121},[115,147918,147468],{"class":125},[115,147920,51397],{"class":5217},[115,147922,171],{"class":121},[115,147924,147925],{"class":230},"\"线上线下销售趋势\"",[115,147927,38048],{"class":125},[115,147929,147930,147932,147934,147936,147938,147940,147942],{"class":117,"line":1617},[115,147931,147519],{"class":5217},[115,147933,171],{"class":121},[115,147935,147524],{"class":125},[115,147937,147527],{"class":5217},[115,147939,171],{"class":121},[115,147941,147532],{"class":230},[115,147943,38048],{"class":125},[115,147945,147946],{"class":117,"line":1623},[115,147947,132],{"class":125},[115,147949,147950,147952,147955],{"class":117,"line":1628},[115,147951,147314],{"class":125},[115,147953,147954],{"class":230},"\"sales.html\"",[115,147956,132],{"class":125},[14,147958,147959],{},"多条折线适合比较不同指标或不同地区。",[57,147961,147963],{"id":147962},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147965,147966,147967,24619],{},"假设 ",[112,147968,147969],{},"sales.json",[106,147971,147973],{"className":147035,"code":147972,"language":145782,"meta":22,"style":22},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[112,147974,147975,147980,148012,148040,148068],{"__ignoreMap":22},[115,147976,147977],{"class":117,"line":118},[115,147978,147979],{"class":125},"[\n",[115,147981,147982,147985,147988,147990,147992,147994,147997,147999,148001,148003,148006,148008,148010],{"class":117,"line":37},[115,147983,147984],{"class":125},"  {",[115,147986,147987],{"class":174},"\"date\"",[115,147989,51427],{"class":125},[115,147991,147255],{"class":230},[115,147993,12436],{"class":125},[115,147995,147996],{"class":174},"\"online\"",[115,147998,51427],{"class":125},[115,148000,436],{"class":174},[115,148002,12436],{"class":125},[115,148004,148005],{"class":174},"\"offline\"",[115,148007,51427],{"class":125},[115,148009,737],{"class":174},[115,148011,4930],{"class":125},[115,148013,148014,148016,148018,148020,148022,148024,148026,148028,148030,148032,148034,148036,148038],{"class":117,"line":1180},[115,148015,147984],{"class":125},[115,148017,147987],{"class":174},[115,148019,51427],{"class":125},[115,148021,147260],{"class":230},[115,148023,12436],{"class":125},[115,148025,147996],{"class":174},[115,148027,51427],{"class":125},[115,148029,147847],{"class":174},[115,148031,12436],{"class":125},[115,148033,148005],{"class":174},[115,148035,51427],{"class":125},[115,148037,987],{"class":174},[115,148039,4930],{"class":125},[115,148041,148042,148044,148046,148048,148050,148052,148054,148056,148058,148060,148062,148064,148066],{"class":117,"line":1195},[115,148043,147984],{"class":125},[115,148045,147987],{"class":174},[115,148047,51427],{"class":125},[115,148049,147265],{"class":230},[115,148051,12436],{"class":125},[115,148053,147996],{"class":174},[115,148055,51427],{"class":125},[115,148057,942],{"class":174},[115,148059,12436],{"class":125},[115,148061,148005],{"class":174},[115,148063,51427],{"class":125},[115,148065,436],{"class":174},[115,148067,1565],{"class":125},[115,148069,148070],{"class":117,"line":1201},[115,148071,33247],{"class":125},[14,148073,148074],{},"读取并绘图：",[106,148076,148078],{"className":30379,"code":148077,"language":30381,"meta":22,"style":22},"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",[112,148079,148080,148086,148100,148110,148114,148146,148159,148163,148171,148180,148189,148193,148205,148214,148223,148232,148236,148244,148248,148265,148282,148286,148303,148319,148323],{"__ignoreMap":22},[115,148081,148082,148084],{"class":117,"line":118},[115,148083,30393],{"class":121},[115,148085,147081],{"class":125},[115,148087,148088,148090,148092,148094,148096,148098],{"class":117,"line":37},[115,148089,30738],{"class":121},[115,148091,147369],{"class":125},[115,148093,30393],{"class":121},[115,148095,147374],{"class":125},[115,148097,31384],{"class":121},[115,148099,147379],{"class":125},[115,148101,148102,148104,148106,148108],{"class":117,"line":1180},[115,148103,30738],{"class":121},[115,148105,147228],{"class":125},[115,148107,30393],{"class":121},[115,148109,147233],{"class":125},[115,148111,148112],{"class":117,"line":1195},[115,148113,2400],{"emptyLinePlaceholder":42},[115,148115,148116,148118,148120,148122,148125,148127,148129,148131,148133,148135,148137,148139,148141,148144],{"class":117,"line":1201},[115,148117,107823],{"class":121},[115,148119,146781],{"class":174},[115,148121,126],{"class":125},[115,148123,148124],{"class":230},"\"sales.json\"",[115,148126,12436],{"class":125},[115,148128,146791],{"class":230},[115,148130,12436],{"class":125},[115,148132,146796],{"class":5217},[115,148134,171],{"class":121},[115,148136,146801],{"class":230},[115,148138,13715],{"class":125},[115,148140,31384],{"class":121},[115,148142,148143],{"class":5217}," file",[115,148145,3739],{"class":125},[115,148147,148148,148150,148152,148155,148157],{"class":117,"line":1215},[115,148149,101411],{"class":125},[115,148151,171],{"class":121},[115,148153,148154],{"class":125}," json.load(",[115,148156,45355],{"class":5217},[115,148158,132],{"class":125},[115,148160,148161],{"class":117,"line":1221},[115,148162,2400],{"emptyLinePlaceholder":42},[115,148164,148165,148167,148169],{"class":117,"line":1312},[115,148166,147790],{"class":125},[115,148168,171],{"class":121},[115,148170,51828],{"class":125},[115,148172,148173,148176,148178],{"class":117,"line":1318},[115,148174,148175],{"class":125},"online_sales ",[115,148177,171],{"class":121},[115,148179,51828],{"class":125},[115,148181,148182,148185,148187],{"class":117,"line":1330},[115,148183,148184],{"class":125},"offline_sales ",[115,148186,171],{"class":121},[115,148188,51828],{"class":125},[115,148190,148191],{"class":117,"line":1612},[115,148192,2400],{"emptyLinePlaceholder":42},[115,148194,148195,148197,148200,148202],{"class":117,"line":1617},[115,148196,3025],{"class":121},[115,148198,148199],{"class":125}," item ",[115,148201,26044],{"class":121},[115,148203,148204],{"class":125}," data:\n",[115,148206,148207,148210,148212],{"class":117,"line":1623},[115,148208,148209],{"class":125},"    dates.append(item[",[115,148211,147987],{"class":230},[115,148213,4657],{"class":125},[115,148215,148216,148219,148221],{"class":117,"line":1628},[115,148217,148218],{"class":125},"    online_sales.append(item[",[115,148220,147996],{"class":230},[115,148222,4657],{"class":125},[115,148224,148225,148228,148230],{"class":117,"line":1642},[115,148226,148227],{"class":125},"    offline_sales.append(item[",[115,148229,148005],{"class":230},[115,148231,4657],{"class":125},[115,148233,148234],{"class":117,"line":1647},[115,148235,2400],{"emptyLinePlaceholder":42},[115,148237,148238,148240,148242],{"class":117,"line":1653},[115,148239,147242],{"class":125},[115,148241,171],{"class":121},[115,148243,147247],{"class":125},[115,148245,148246],{"class":117,"line":1674},[115,148247,147831],{"class":125},[115,148249,148250,148252,148254,148257,148259,148261,148263],{"class":117,"line":1679},[115,148251,147282],{"class":125},[115,148253,147838],{"class":230},[115,148255,148256],{"class":125},", online_sales, ",[115,148258,147735],{"class":5217},[115,148260,171],{"class":121},[115,148262,31477],{"class":174},[115,148264,132],{"class":125},[115,148266,148267,148269,148271,148274,148276,148278,148280],{"class":117,"line":1693},[115,148268,147282],{"class":125},[115,148270,147876],{"class":230},[115,148272,148273],{"class":125},", offline_sales, ",[115,148275,147735],{"class":5217},[115,148277,171],{"class":121},[115,148279,31477],{"class":174},[115,148281,132],{"class":125},[115,148283,148284],{"class":117,"line":1698},[115,148285,147458],{"class":125},[115,148287,148288,148290,148292,148294,148296,148298,148301],{"class":117,"line":1727},[115,148289,147463],{"class":5217},[115,148291,171],{"class":121},[115,148293,147468],{"class":125},[115,148295,51397],{"class":5217},[115,148297,171],{"class":121},[115,148299,148300],{"class":230},"\"销售趋势\"",[115,148302,38048],{"class":125},[115,148304,148305,148307,148309,148311,148313,148315,148317],{"class":117,"line":1732},[115,148306,147519],{"class":5217},[115,148308,171],{"class":121},[115,148310,147524],{"class":125},[115,148312,147527],{"class":5217},[115,148314,171],{"class":121},[115,148316,147532],{"class":230},[115,148318,38048],{"class":125},[115,148320,148321],{"class":117,"line":1749},[115,148322,132],{"class":125},[115,148324,148325,148327,148329],{"class":117,"line":1754},[115,148326,147314],{"class":125},[115,148328,147954],{"class":230},[115,148330,132],{"class":125},[57,148332,148334],{"id":148333},"_109-数据清洗","10.9 数据清洗",[14,148336,148337],{},"真实数据经常不整齐，需要清洗。",[14,148339,148340],{},"常见问题：",[69,148342,148343,148346,148349,148352],{},[72,148344,148345],{},"数字是字符串。",[72,148347,148348],{},"字段缺失。",[72,148350,148351],{},"空值。",[72,148353,148354],{},"日期格式不统一。",[14,148356,15136],{},[106,148358,148360],{"className":30379,"code":148359,"language":30381,"meta":22,"style":22},"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",[112,148361,148362,148371,148394,148414,148435,148439,148443,148451,148460,148464,148475,148489,148498,148503,148507,148515,148525,148529,148536],{"__ignoreMap":22},[115,148363,148364,148367,148369],{"class":117,"line":118},[115,148365,148366],{"class":125},"raw_data ",[115,148368,171],{"class":121},[115,148370,55437],{"class":125},[115,148372,148373,148376,148378,148380,148382,148384,148387,148389,148392],{"class":117,"line":37},[115,148374,148375],{"class":125},"    {",[115,148377,147987],{"class":230},[115,148379,51427],{"class":125},[115,148381,147255],{"class":230},[115,148383,12436],{"class":125},[115,148385,148386],{"class":230},"\"sales\"",[115,148388,51427],{"class":125},[115,148390,148391],{"class":230},"\"100\"",[115,148393,4930],{"class":125},[115,148395,148396,148398,148400,148402,148404,148406,148408,148410,148412],{"class":117,"line":1180},[115,148397,148375],{"class":125},[115,148399,147987],{"class":230},[115,148401,51427],{"class":125},[115,148403,147260],{"class":230},[115,148405,12436],{"class":125},[115,148407,148386],{"class":230},[115,148409,51427],{"class":125},[115,148411,7653],{"class":230},[115,148413,4930],{"class":125},[115,148415,148416,148418,148420,148422,148424,148426,148428,148430,148433],{"class":117,"line":1195},[115,148417,148375],{"class":125},[115,148419,147987],{"class":230},[115,148421,51427],{"class":125},[115,148423,147265],{"class":230},[115,148425,12436],{"class":125},[115,148427,148386],{"class":230},[115,148429,51427],{"class":125},[115,148431,148432],{"class":230},"\"120\"",[115,148434,4930],{"class":125},[115,148436,148437],{"class":117,"line":1201},[115,148438,33247],{"class":125},[115,148440,148441],{"class":117,"line":1215},[115,148442,2400],{"emptyLinePlaceholder":42},[115,148444,148445,148447,148449],{"class":117,"line":1221},[115,148446,147790],{"class":125},[115,148448,171],{"class":121},[115,148450,51828],{"class":125},[115,148452,148453,148456,148458],{"class":117,"line":1312},[115,148454,148455],{"class":125},"sales ",[115,148457,171],{"class":121},[115,148459,51828],{"class":125},[115,148461,148462],{"class":117,"line":1318},[115,148463,2400],{"emptyLinePlaceholder":42},[115,148465,148466,148468,148470,148472],{"class":117,"line":1330},[115,148467,3025],{"class":121},[115,148469,148199],{"class":125},[115,148471,26044],{"class":121},[115,148473,148474],{"class":125}," raw_data:\n",[115,148476,148477,148480,148482,148485,148487],{"class":117,"line":1612},[115,148478,148479],{"class":125},"    value ",[115,148481,171],{"class":121},[115,148483,148484],{"class":125}," item.get(",[115,148486,148386],{"class":230},[115,148488,132],{"class":125},[115,148490,148491,148493,148495],{"class":117,"line":1617},[115,148492,3101],{"class":121},[115,148494,38931],{"class":121},[115,148496,148497],{"class":125}," value:\n",[115,148499,148500],{"class":117,"line":1623},[115,148501,148502],{"class":121},"        continue\n",[115,148504,148505],{"class":117,"line":1628},[115,148506,2400],{"emptyLinePlaceholder":42},[115,148508,148509,148511,148513],{"class":117,"line":1642},[115,148510,148209],{"class":125},[115,148512,147987],{"class":230},[115,148514,4657],{"class":125},[115,148516,148517,148520,148522],{"class":117,"line":1647},[115,148518,148519],{"class":125},"    sales.append(",[115,148521,129],{"class":174},[115,148523,148524],{"class":125},"(value))\n",[115,148526,148527],{"class":117,"line":1653},[115,148528,2400],{"emptyLinePlaceholder":42},[115,148530,148531,148533],{"class":117,"line":1674},[115,148532,30416],{"class":174},[115,148534,148535],{"class":125},"(dates)\n",[115,148537,148538,148540],{"class":117,"line":1679},[115,148539,30416],{"class":174},[115,148541,148542],{"class":125},"(sales)\n",[57,148544,148546],{"id":148545},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[106,148548,148550],{"className":30379,"code":148549,"language":30381,"meta":22,"style":22},"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",[112,148551,148552,148566,148576,148580,148588,148609,148631,148653,148675,148697,148701,148705,148727,148748,148752,148760,148764,148768,148778,148787,148797,148813,148817,148821,148838,148854,148870,148886,148896,148900],{"__ignoreMap":22},[115,148553,148554,148556,148558,148560,148562,148564],{"class":117,"line":118},[115,148555,30738],{"class":121},[115,148557,147369],{"class":125},[115,148559,30393],{"class":121},[115,148561,147374],{"class":125},[115,148563,31384],{"class":121},[115,148565,147379],{"class":125},[115,148567,148568,148570,148572,148574],{"class":117,"line":37},[115,148569,30738],{"class":121},[115,148571,147228],{"class":125},[115,148573,30393],{"class":121},[115,148575,147233],{"class":125},[115,148577,148578],{"class":117,"line":1180},[115,148579,2400],{"emptyLinePlaceholder":42},[115,148581,148582,148584,148586],{"class":117,"line":1195},[115,148583,148455],{"class":125},[115,148585,171],{"class":121},[115,148587,55437],{"class":125},[115,148589,148590,148592,148594,148596,148599,148601,148603,148605,148607],{"class":117,"line":1201},[115,148591,148375],{"class":125},[115,148593,147987],{"class":230},[115,148595,51427],{"class":125},[115,148597,148598],{"class":230},"\"2024-10-01\"",[115,148600,12436],{"class":125},[115,148602,84074],{"class":230},[115,148604,51427],{"class":125},[115,148606,92013],{"class":174},[115,148608,4930],{"class":125},[115,148610,148611,148613,148615,148617,148620,148622,148624,148626,148629],{"class":117,"line":1215},[115,148612,148375],{"class":125},[115,148614,147987],{"class":230},[115,148616,51427],{"class":125},[115,148618,148619],{"class":230},"\"2024-10-02\"",[115,148621,12436],{"class":125},[115,148623,84074],{"class":230},[115,148625,51427],{"class":125},[115,148627,148628],{"class":174},"1800",[115,148630,4930],{"class":125},[115,148632,148633,148635,148637,148639,148642,148644,148646,148648,148651],{"class":117,"line":1221},[115,148634,148375],{"class":125},[115,148636,147987],{"class":230},[115,148638,51427],{"class":125},[115,148640,148641],{"class":230},"\"2024-10-03\"",[115,148643,12436],{"class":125},[115,148645,84074],{"class":230},[115,148647,51427],{"class":125},[115,148649,148650],{"class":174},"1500",[115,148652,4930],{"class":125},[115,148654,148655,148657,148659,148661,148664,148666,148668,148670,148673],{"class":117,"line":1312},[115,148656,148375],{"class":125},[115,148658,147987],{"class":230},[115,148660,51427],{"class":125},[115,148662,148663],{"class":230},"\"2024-10-04\"",[115,148665,12436],{"class":125},[115,148667,84074],{"class":230},[115,148669,51427],{"class":125},[115,148671,148672],{"class":174},"2100",[115,148674,4930],{"class":125},[115,148676,148677,148679,148681,148683,148686,148688,148690,148692,148695],{"class":117,"line":1318},[115,148678,148375],{"class":125},[115,148680,147987],{"class":230},[115,148682,51427],{"class":125},[115,148684,148685],{"class":230},"\"2024-10-05\"",[115,148687,12436],{"class":125},[115,148689,84074],{"class":230},[115,148691,51427],{"class":125},[115,148693,148694],{"class":174},"2600",[115,148696,4930],{"class":125},[115,148698,148699],{"class":117,"line":1330},[115,148700,33247],{"class":125},[115,148702,148703],{"class":117,"line":1612},[115,148704,2400],{"emptyLinePlaceholder":42},[115,148706,148707,148709,148711,148714,148716,148718,148720,148722,148724],{"class":117,"line":1617},[115,148708,147790],{"class":125},[115,148710,171],{"class":121},[115,148712,148713],{"class":125}," [item[",[115,148715,147987],{"class":230},[115,148717,4443],{"class":125},[115,148719,3025],{"class":121},[115,148721,148199],{"class":125},[115,148723,26044],{"class":121},[115,148725,148726],{"class":125}," sales]\n",[115,148728,148729,148732,148734,148736,148738,148740,148742,148744,148746],{"class":117,"line":1623},[115,148730,148731],{"class":125},"amounts ",[115,148733,171],{"class":121},[115,148735,148713],{"class":125},[115,148737,84074],{"class":230},[115,148739,4443],{"class":125},[115,148741,3025],{"class":121},[115,148743,148199],{"class":125},[115,148745,26044],{"class":121},[115,148747,148726],{"class":125},[115,148749,148750],{"class":117,"line":1628},[115,148751,2400],{"emptyLinePlaceholder":42},[115,148753,148754,148756,148758],{"class":117,"line":1642},[115,148755,147242],{"class":125},[115,148757,171],{"class":121},[115,148759,147247],{"class":125},[115,148761,148762],{"class":117,"line":1647},[115,148763,147831],{"class":125},[115,148765,148766],{"class":117,"line":1653},[115,148767,147639],{"class":125},[115,148769,148770,148772,148774,148776],{"class":117,"line":1674},[115,148771,147644],{"class":5217},[115,148773,171],{"class":121},[115,148775,147285],{"class":230},[115,148777,31467],{"class":125},[115,148779,148780,148782,148784],{"class":117,"line":1679},[115,148781,147655],{"class":5217},[115,148783,171],{"class":121},[115,148785,148786],{"class":125},"amounts,\n",[115,148788,148789,148791,148793,148795],{"class":117,"line":1693},[115,148790,147684],{"class":5217},[115,148792,171],{"class":121},[115,148794,31477],{"class":174},[115,148796,31467],{"class":125},[115,148798,148799,148801,148803,148805,148807,148809,148811],{"class":117,"line":1698},[115,148800,147695],{"class":5217},[115,148802,171],{"class":121},[115,148804,147700],{"class":125},[115,148806,147703],{"class":5217},[115,148808,171],{"class":121},[115,148810,31477],{"class":174},[115,148812,38048],{"class":125},[115,148814,148815],{"class":117,"line":1727},[115,148816,132],{"class":125},[115,148818,148819],{"class":117,"line":1732},[115,148820,147458],{"class":125},[115,148822,148823,148825,148827,148829,148831,148833,148836],{"class":117,"line":1749},[115,148824,147463],{"class":5217},[115,148826,171],{"class":121},[115,148828,147468],{"class":125},[115,148830,51397],{"class":5217},[115,148832,171],{"class":121},[115,148834,148835],{"class":230},"\"每日销售额\"",[115,148837,38048],{"class":125},[115,148839,148840,148842,148844,148846,148848,148850,148852],{"class":117,"line":1754},[115,148841,147482],{"class":5217},[115,148843,171],{"class":121},[115,148845,147487],{"class":125},[115,148847,79800],{"class":5217},[115,148849,171],{"class":121},[115,148851,147494],{"class":230},[115,148853,38048],{"class":125},[115,148855,148856,148858,148860,148862,148864,148866,148868],{"class":117,"line":1759},[115,148857,147501],{"class":5217},[115,148859,171],{"class":121},[115,148861,147487],{"class":125},[115,148863,79800],{"class":5217},[115,148865,171],{"class":121},[115,148867,147512],{"class":230},[115,148869,38048],{"class":125},[115,148871,148872,148874,148876,148878,148880,148882,148884],{"class":117,"line":1764},[115,148873,147519],{"class":5217},[115,148875,171],{"class":121},[115,148877,147524],{"class":125},[115,148879,147527],{"class":5217},[115,148881,171],{"class":121},[115,148883,147532],{"class":230},[115,148885,38048],{"class":125},[115,148887,148888,148891,148893],{"class":117,"line":1778},[115,148889,148890],{"class":5217},"    datazoom_opts",[115,148892,171],{"class":121},[115,148894,148895],{"class":125},"[opts.DataZoomOpts()],\n",[115,148897,148898],{"class":117,"line":1783},[115,148899,132],{"class":125},[115,148901,148902,148904,148907],{"class":117,"line":2577},[115,148903,147314],{"class":125},[115,148905,148906],{"class":230},"\"daily_sales.html\"",[115,148908,132],{"class":125},[14,148910,148911,148914],{},[112,148912,148913],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[57,148916,148918],{"id":148917},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148920,148921],{},"如果数据结构如下：",[106,148923,148925],{"className":30379,"code":148924,"language":30381,"meta":22,"style":22},"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",[112,148926,148927,148935,148943,148965,148986,148991,148998,149018,149038,149042],{"__ignoreMap":22},[115,148928,148929,148931,148933],{"class":117,"line":118},[115,148930,101648],{"class":125},[115,148932,171],{"class":121},[115,148934,15573],{"class":125},[115,148936,148937,148940],{"class":117,"line":37},[115,148938,148939],{"class":230},"    \"北京\"",[115,148941,148942],{"class":125},": [\n",[115,148944,148945,148947,148949,148951,148954,148956,148959,148961,148963],{"class":117,"line":1180},[115,148946,4917],{"class":125},[115,148948,147987],{"class":230},[115,148950,51427],{"class":125},[115,148952,148953],{"class":230},"\"2024-01-01\"",[115,148955,12436],{"class":125},[115,148957,148958],{"class":230},"\"confirm\"",[115,148960,51427],{"class":125},[115,148962,571],{"class":174},[115,148964,4930],{"class":125},[115,148966,148967,148969,148971,148973,148976,148978,148980,148982,148984],{"class":117,"line":1195},[115,148968,4917],{"class":125},[115,148970,147987],{"class":230},[115,148972,51427],{"class":125},[115,148974,148975],{"class":230},"\"2024-01-02\"",[115,148977,12436],{"class":125},[115,148979,148958],{"class":230},[115,148981,51427],{"class":125},[115,148983,623],{"class":174},[115,148985,4930],{"class":125},[115,148987,148988],{"class":117,"line":1201},[115,148989,148990],{"class":125},"    ],\n",[115,148992,148993,148996],{"class":117,"line":1215},[115,148994,148995],{"class":230},"    \"上海\"",[115,148997,148942],{"class":125},[115,148999,149000,149002,149004,149006,149008,149010,149012,149014,149016],{"class":117,"line":1221},[115,149001,4917],{"class":125},[115,149003,147987],{"class":230},[115,149005,51427],{"class":125},[115,149007,148953],{"class":230},[115,149009,12436],{"class":125},[115,149011,148958],{"class":230},[115,149013,51427],{"class":125},[115,149015,520],{"class":174},[115,149017,4930],{"class":125},[115,149019,149020,149022,149024,149026,149028,149030,149032,149034,149036],{"class":117,"line":1312},[115,149021,4917],{"class":125},[115,149023,147987],{"class":230},[115,149025,51427],{"class":125},[115,149027,148975],{"class":230},[115,149029,12436],{"class":125},[115,149031,148958],{"class":230},[115,149033,51427],{"class":125},[115,149035,648],{"class":174},[115,149037,4930],{"class":125},[115,149039,149040],{"class":117,"line":1318},[115,149041,148990],{"class":125},[115,149043,149044],{"class":117,"line":1330},[115,149045,1565],{"class":125},[14,149047,149048],{},"绘制多地区趋势：",[106,149050,149052],{"className":30379,"code":149051,"language":30381,"meta":22,"style":22},"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",[112,149053,149054,149068,149078,149082,149107,149111,149119,149123,149127,149139,149161,149174,149178,149182,149199,149215,149219],{"__ignoreMap":22},[115,149055,149056,149058,149060,149062,149064,149066],{"class":117,"line":118},[115,149057,30738],{"class":121},[115,149059,147369],{"class":125},[115,149061,30393],{"class":121},[115,149063,147374],{"class":125},[115,149065,31384],{"class":121},[115,149067,147379],{"class":125},[115,149069,149070,149072,149074,149076],{"class":117,"line":37},[115,149071,30738],{"class":121},[115,149073,147228],{"class":125},[115,149075,30393],{"class":121},[115,149077,147233],{"class":125},[115,149079,149080],{"class":117,"line":1180},[115,149081,2400],{"emptyLinePlaceholder":42},[115,149083,149084,149086,149088,149090,149092,149094,149096,149098,149100,149103,149105],{"class":117,"line":1195},[115,149085,147790],{"class":125},[115,149087,171],{"class":121},[115,149089,148713],{"class":125},[115,149091,147987],{"class":230},[115,149093,4443],{"class":125},[115,149095,3025],{"class":121},[115,149097,148199],{"class":125},[115,149099,26044],{"class":121},[115,149101,149102],{"class":125}," data[",[115,149104,69259],{"class":230},[115,149106,77517],{"class":125},[115,149108,149109],{"class":117,"line":1201},[115,149110,2400],{"emptyLinePlaceholder":42},[115,149112,149113,149115,149117],{"class":117,"line":1215},[115,149114,147242],{"class":125},[115,149116,171],{"class":121},[115,149118,147247],{"class":125},[115,149120,149121],{"class":117,"line":1221},[115,149122,147831],{"class":125},[115,149124,149125],{"class":117,"line":1312},[115,149126,2400],{"emptyLinePlaceholder":42},[115,149128,149129,149131,149134,149136],{"class":117,"line":1318},[115,149130,3025],{"class":121},[115,149132,149133],{"class":125}," city, records ",[115,149135,26044],{"class":121},[115,149137,149138],{"class":125}," data.items():\n",[115,149140,149141,149144,149146,149148,149150,149152,149154,149156,149158],{"class":117,"line":1330},[115,149142,149143],{"class":125},"    values ",[115,149145,171],{"class":121},[115,149147,148713],{"class":125},[115,149149,148958],{"class":230},[115,149151,4443],{"class":125},[115,149153,3025],{"class":121},[115,149155,148199],{"class":125},[115,149157,26044],{"class":121},[115,149159,149160],{"class":125}," records]\n",[115,149162,149163,149166,149168,149170,149172],{"class":117,"line":1612},[115,149164,149165],{"class":125},"    line.add_yaxis(city, values, ",[115,149167,147735],{"class":5217},[115,149169,171],{"class":121},[115,149171,31477],{"class":174},[115,149173,132],{"class":125},[115,149175,149176],{"class":117,"line":1617},[115,149177,2400],{"emptyLinePlaceholder":42},[115,149179,149180],{"class":117,"line":1623},[115,149181,147458],{"class":125},[115,149183,149184,149186,149188,149190,149192,149194,149197],{"class":117,"line":1628},[115,149185,147463],{"class":5217},[115,149187,171],{"class":121},[115,149189,147468],{"class":125},[115,149191,51397],{"class":5217},[115,149193,171],{"class":121},[115,149195,149196],{"class":230},"\"多地区趋势图\"",[115,149198,38048],{"class":125},[115,149200,149201,149203,149205,149207,149209,149211,149213],{"class":117,"line":1642},[115,149202,147519],{"class":5217},[115,149204,171],{"class":121},[115,149206,147524],{"class":125},[115,149208,147527],{"class":5217},[115,149210,171],{"class":121},[115,149212,147532],{"class":230},[115,149214,38048],{"class":125},[115,149216,149217],{"class":117,"line":1647},[115,149218,132],{"class":125},[115,149220,149221,149223,149226],{"class":117,"line":1653},[115,149222,147314],{"class":125},[115,149224,149225],{"class":230},"\"trend.html\"",[115,149227,132],{"class":125},[14,149229,149230],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[57,149232,149234],{"id":149233},"_1012-易错点","10.12 易错点",[69,149236,149237,149243,149249,149259,149265],{},[72,149238,149239,149242],{},[112,149240,149241],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[72,149244,149245,149248],{},[112,149246,149247],{},"render()"," 生成的是 HTML，不是图片。",[72,149250,149251,149252,149255,149256,28386],{},"JSON 字符串用 ",[112,149253,149254],{},"json.loads()","，JSON 文件用 ",[112,149257,149258],{},"json.load()",[72,149260,149261,149262,28386],{},"中文 JSON 保存时加 ",[112,149263,149264],{},"ensure_ascii=False",[72,149266,149267],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[57,149269,149271],{"id":149270},"_1013-本章练习","10.13 本章练习",[69,149273,149274,149277,149280,149283,149286],{},[72,149275,149276],{},"安装 pyecharts 并生成第一个折线图。",[72,149278,149279],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[72,149281,149282],{},"绘制两条折线，对比线上和线下销售额。",[72,149284,149285],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[72,149287,149288],{},"对含有空值的销售数据进行清洗后再绘图。",[5127,149290,149291],{},"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":22,"searchDepth":37,"depth":37,"links":149293},[149294,149295,149296,149297,149298,149299,149300,149301,149302,149303,149304,149305,149306],{"id":146910,"depth":37,"text":146911},{"id":146985,"depth":37,"text":146986},{"id":147164,"depth":37,"text":147165},{"id":147215,"depth":37,"text":147216},{"id":147349,"depth":37,"text":147350},{"id":147625,"depth":37,"text":147626},{"id":147751,"depth":37,"text":147752},{"id":147962,"depth":37,"text":147963},{"id":148333,"depth":37,"text":148334},{"id":148545,"depth":37,"text":148546},{"id":148917,"depth":37,"text":148918},{"id":149233,"depth":37,"text":149234},{"id":149270,"depth":37,"text":149271},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146902,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149313,"title":149314,"body":149315,"description":39,"extension":40,"meta":151675,"navigation":42,"path":151676,"seo":151677,"stem":151678,"__hash__":151679},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149316,"toc":151652},[149317,149320,149324,149327,149330,149406,149409,149500,149503,149507,149510,149554,149567,149571,149574,149641,149644,149648,149651,149735,149743,149747,149752,149893,149896,149907,149913,149919,150033,150037,150040,150043,150296,150299,150303,150306,150410,150413,150417,150568,150572,150579,150692,150696,150699,150805,150808,150812,150815,150846,150849,150954,150957,150961,150965,150975,151043,151047,151054,151118,151121,151125,151131,151227,151236,151240,151564,151573,151577,151605,151609,151649],[10,149318,149314],{"id":149319},"_11-面向对象基础",[57,149321,149323],{"id":149322},"_111-什么是面向对象","11.1 什么是面向对象",[14,149325,149326],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149328,149329],{},"面向过程：",[106,149331,149333],{"className":30379,"code":149332,"language":30381,"meta":22,"style":22},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[112,149334,149335,149344,149352,149356,149366,149397,149401],{"__ignoreMap":22},[115,149336,149337,149339,149341],{"class":117,"line":118},[115,149338,146526],{"class":125},[115,149340,171],{"class":121},[115,149342,149343],{"class":230}," \"小明\"\n",[115,149345,149346,149348,149350],{"class":117,"line":37},[115,149347,146536],{"class":125},[115,149349,171],{"class":121},[115,149351,146541],{"class":174},[115,149353,149354],{"class":117,"line":1180},[115,149355,2400],{"emptyLinePlaceholder":42},[115,149357,149358,149360,149363],{"class":117,"line":1195},[115,149359,31948],{"class":121},[115,149361,149362],{"class":1963}," introduce",[115,149364,149365],{"class":125},"(name, age):\n",[115,149367,149368,149370,149372,149374,149377,149379,149381,149383,149386,149388,149390,149392,149395],{"class":117,"line":1201},[115,149369,31300],{"class":174},[115,149371,126],{"class":125},[115,149373,178],{"class":121},[115,149375,149376],{"class":230},"\"我叫",[115,149378,1021],{"class":174},[115,149380,79800],{"class":125},[115,149382,1071],{"class":174},[115,149384,149385],{"class":230},"，今年",[115,149387,1021],{"class":174},[115,149389,70211],{"class":125},[115,149391,1071],{"class":174},[115,149393,149394],{"class":230},"岁\"",[115,149396,132],{"class":125},[115,149398,149399],{"class":117,"line":1215},[115,149400,2400],{"emptyLinePlaceholder":42},[115,149402,149403],{"class":117,"line":1221},[115,149404,149405],{"class":125},"introduce(name, age)\n",[14,149407,149408],{},"面向对象：",[106,149410,149412],{"className":30379,"code":149411,"language":30381,"meta":22,"style":22},"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",[112,149413,149414,149422,149430,149459,149463,149467,149477,149486,149495],{"__ignoreMap":22},[115,149415,149416,149418,149420],{"class":117,"line":118},[115,149417,14695],{"class":121},[115,149419,7899],{"class":1963},[115,149421,3739],{"class":125},[115,149423,149424,149426,149428],{"class":117,"line":37},[115,149425,30802],{"class":121},[115,149427,149362],{"class":1963},[115,149429,30808],{"class":125},[115,149431,149432,149434,149436,149438,149440,149443,149445,149447,149449,149451,149453,149455,149457],{"class":117,"line":1180},[115,149433,32452],{"class":174},[115,149435,126],{"class":125},[115,149437,178],{"class":121},[115,149439,149376],{"class":230},[115,149441,149442],{"class":174},"{self",[115,149444,80291],{"class":125},[115,149446,1071],{"class":174},[115,149448,149385],{"class":230},[115,149450,149442],{"class":174},[115,149452,80303],{"class":125},[115,149454,1071],{"class":174},[115,149456,149394],{"class":230},[115,149458,132],{"class":125},[115,149460,149461],{"class":117,"line":1195},[115,149462,2400],{"emptyLinePlaceholder":42},[115,149464,149465],{"class":117,"line":1201},[115,149466,2400],{"emptyLinePlaceholder":42},[115,149468,149469,149472,149474],{"class":117,"line":1215},[115,149470,149471],{"class":125},"student ",[115,149473,171],{"class":121},[115,149475,149476],{"class":125}," Student()\n",[115,149478,149479,149482,149484],{"class":117,"line":1221},[115,149480,149481],{"class":125},"student.name ",[115,149483,171],{"class":121},[115,149485,149343],{"class":230},[115,149487,149488,149491,149493],{"class":117,"line":1312},[115,149489,149490],{"class":125},"student.age ",[115,149492,171],{"class":121},[115,149494,146541],{"class":174},[115,149496,149497],{"class":117,"line":1318},[115,149498,149499],{"class":125},"student.introduce()\n",[14,149501,149502],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[57,149504,149506],{"id":149505},"_112-类和对象","11.2 类和对象",[14,149508,149509],{},"类是模板，对象是根据模板创建出来的具体实例。",[106,149511,149513],{"className":30379,"code":149512,"language":30381,"meta":22,"style":22},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[112,149514,149515,149523,149528,149532,149536,149545],{"__ignoreMap":22},[115,149516,149517,149519,149521],{"class":117,"line":118},[115,149518,14695],{"class":121},[115,149520,7899],{"class":1963},[115,149522,3739],{"class":125},[115,149524,149525],{"class":117,"line":37},[115,149526,149527],{"class":121},"    pass\n",[115,149529,149530],{"class":117,"line":1180},[115,149531,2400],{"emptyLinePlaceholder":42},[115,149533,149534],{"class":117,"line":1195},[115,149535,2400],{"emptyLinePlaceholder":42},[115,149537,149538,149541,149543],{"class":117,"line":1201},[115,149539,149540],{"class":125},"student1 ",[115,149542,171],{"class":121},[115,149544,149476],{"class":125},[115,149546,149547,149550,149552],{"class":117,"line":1215},[115,149548,149549],{"class":125},"student2 ",[115,149551,171],{"class":121},[115,149553,149476],{"class":125},[14,149555,149556,149559,149560,101008,149563,149566],{},[112,149557,149558],{},"Student"," 是类，",[112,149561,149562],{},"student1",[112,149564,149565],{},"student2"," 是对象。",[57,149568,149570],{"id":149569},"_113-属性","11.3 属性",[14,149572,149573],{},"属性是对象保存的数据。",[106,149575,149577],{"className":30379,"code":149576,"language":30381,"meta":22,"style":22},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[112,149578,149579,149587,149591,149595,149599,149607,149615,149623,149627,149634],{"__ignoreMap":22},[115,149580,149581,149583,149585],{"class":117,"line":118},[115,149582,14695],{"class":121},[115,149584,7899],{"class":1963},[115,149586,3739],{"class":125},[115,149588,149589],{"class":117,"line":37},[115,149590,149527],{"class":121},[115,149592,149593],{"class":117,"line":1180},[115,149594,2400],{"emptyLinePlaceholder":42},[115,149596,149597],{"class":117,"line":1195},[115,149598,2400],{"emptyLinePlaceholder":42},[115,149600,149601,149603,149605],{"class":117,"line":1201},[115,149602,149471],{"class":125},[115,149604,171],{"class":121},[115,149606,149476],{"class":125},[115,149608,149609,149611,149613],{"class":117,"line":1215},[115,149610,149481],{"class":125},[115,149612,171],{"class":121},[115,149614,149343],{"class":230},[115,149616,149617,149619,149621],{"class":117,"line":1221},[115,149618,149490],{"class":125},[115,149620,171],{"class":121},[115,149622,146541],{"class":174},[115,149624,149625],{"class":117,"line":1312},[115,149626,2400],{"emptyLinePlaceholder":42},[115,149628,149629,149631],{"class":117,"line":1318},[115,149630,30416],{"class":174},[115,149632,149633],{"class":125},"(student.name)\n",[115,149635,149636,149638],{"class":117,"line":1330},[115,149637,30416],{"class":174},[115,149639,149640],{"class":125},"(student.age)\n",[14,149642,149643],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[57,149645,149647],{"id":149646},"_114-方法","11.4 方法",[14,149649,149650],{},"类中的函数叫方法。",[106,149652,149653],{"className":30379,"code":149411,"language":30381,"meta":22,"style":22},[112,149654,149655,149663,149671,149699,149703,149707,149715,149723,149731],{"__ignoreMap":22},[115,149656,149657,149659,149661],{"class":117,"line":118},[115,149658,14695],{"class":121},[115,149660,7899],{"class":1963},[115,149662,3739],{"class":125},[115,149664,149665,149667,149669],{"class":117,"line":37},[115,149666,30802],{"class":121},[115,149668,149362],{"class":1963},[115,149670,30808],{"class":125},[115,149672,149673,149675,149677,149679,149681,149683,149685,149687,149689,149691,149693,149695,149697],{"class":117,"line":1180},[115,149674,32452],{"class":174},[115,149676,126],{"class":125},[115,149678,178],{"class":121},[115,149680,149376],{"class":230},[115,149682,149442],{"class":174},[115,149684,80291],{"class":125},[115,149686,1071],{"class":174},[115,149688,149385],{"class":230},[115,149690,149442],{"class":174},[115,149692,80303],{"class":125},[115,149694,1071],{"class":174},[115,149696,149394],{"class":230},[115,149698,132],{"class":125},[115,149700,149701],{"class":117,"line":1195},[115,149702,2400],{"emptyLinePlaceholder":42},[115,149704,149705],{"class":117,"line":1201},[115,149706,2400],{"emptyLinePlaceholder":42},[115,149708,149709,149711,149713],{"class":117,"line":1215},[115,149710,149471],{"class":125},[115,149712,171],{"class":121},[115,149714,149476],{"class":125},[115,149716,149717,149719,149721],{"class":117,"line":1221},[115,149718,149481],{"class":125},[115,149720,171],{"class":121},[115,149722,149343],{"class":230},[115,149724,149725,149727,149729],{"class":117,"line":1312},[115,149726,149490],{"class":125},[115,149728,171],{"class":121},[115,149730,146541],{"class":174},[115,149732,149733],{"class":117,"line":1318},[115,149734,149499],{"class":125},[14,149736,149737,149739,149740,149742],{},[112,149738,30824],{}," 表示当前对象。调用方法时不需要手动传入 ",[112,149741,30824],{},"，Python 会自动传。",[57,149744,149746],{"id":149745},"_115-构造方法__init__","11.5 构造方法__init__",[14,149748,149749,149751],{},[112,149750,30830],{}," 在对象创建时自动执行，用于初始化属性。",[106,149753,149755],{"className":30379,"code":149754,"language":30381,"meta":22,"style":22},"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",[112,149756,149757,149765,149774,149786,149798,149809,149813,149821,149859,149863,149867,149889],{"__ignoreMap":22},[115,149758,149759,149761,149763],{"class":117,"line":118},[115,149760,14695],{"class":121},[115,149762,7899],{"class":1963},[115,149764,3739],{"class":125},[115,149766,149767,149769,149771],{"class":117,"line":37},[115,149768,30802],{"class":121},[115,149770,30805],{"class":174},[115,149772,149773],{"class":125},"(self, name, age, score):\n",[115,149775,149776,149778,149781,149783],{"class":117,"line":1180},[115,149777,30846],{"class":174},[115,149779,149780],{"class":125},".name ",[115,149782,171],{"class":121},[115,149784,149785],{"class":125}," name\n",[115,149787,149788,149790,149793,149795],{"class":117,"line":1195},[115,149789,30846],{"class":174},[115,149791,149792],{"class":125},".age ",[115,149794,171],{"class":121},[115,149796,149797],{"class":125}," age\n",[115,149799,149800,149802,149805,149807],{"class":117,"line":1201},[115,149801,30846],{"class":174},[115,149803,149804],{"class":125},".score ",[115,149806,171],{"class":121},[115,149808,1579],{"class":125},[115,149810,149811],{"class":117,"line":1215},[115,149812,2400],{"emptyLinePlaceholder":42},[115,149814,149815,149817,149819],{"class":117,"line":1221},[115,149816,30802],{"class":121},[115,149818,149362],{"class":1963},[115,149820,30808],{"class":125},[115,149822,149823,149825,149827,149829,149831,149833,149835,149837,149839,149841,149843,149845,149848,149850,149853,149855,149857],{"class":117,"line":1312},[115,149824,32452],{"class":174},[115,149826,126],{"class":125},[115,149828,178],{"class":121},[115,149830,149376],{"class":230},[115,149832,149442],{"class":174},[115,149834,80291],{"class":125},[115,149836,1071],{"class":174},[115,149838,149385],{"class":230},[115,149840,149442],{"class":174},[115,149842,80303],{"class":125},[115,149844,1071],{"class":174},[115,149846,149847],{"class":230},"岁，成绩",[115,149849,149442],{"class":174},[115,149851,149852],{"class":125},".score",[115,149854,1071],{"class":174},[115,149856,376],{"class":230},[115,149858,132],{"class":125},[115,149860,149861],{"class":117,"line":1318},[115,149862,2400],{"emptyLinePlaceholder":42},[115,149864,149865],{"class":117,"line":1330},[115,149866,2400],{"emptyLinePlaceholder":42},[115,149868,149869,149871,149873,149876,149879,149881,149883,149885,149887],{"class":117,"line":1612},[115,149870,149471],{"class":125},[115,149872,171],{"class":121},[115,149874,149875],{"class":125}," Student(",[115,149877,149878],{"class":230},"\"小明\"",[115,149880,12436],{"class":125},[115,149882,775],{"class":174},[115,149884,12436],{"class":125},[115,149886,1114],{"class":174},[115,149888,132],{"class":125},[115,149890,149891],{"class":117,"line":1617},[115,149892,149499],{"class":125},[14,149894,149895],{},"构造方法的好处：",[69,149897,149898,149901,149904],{},[72,149899,149900],{},"创建对象时必须提供必要数据。",[72,149902,149903],{},"属性初始化集中，不容易漏。",[72,149905,149906],{},"对象状态更完整。",[57,149908,149910,149911],{"id":149909},"_116-str","11.6 ",[275,149912,1300],{},[14,149914,149915,149916,28386],{},"直接打印对象时，默认输出不直观。可以定义 ",[112,149917,149918],{},"__str__",[106,149920,149922],{"className":30379,"code":149921,"language":30381,"meta":22,"style":22},"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",[112,149923,149924,149932,149941,149951,149961,149965,149974,150002,150006,150010,150026],{"__ignoreMap":22},[115,149925,149926,149928,149930],{"class":117,"line":118},[115,149927,14695],{"class":121},[115,149929,7899],{"class":1963},[115,149931,3739],{"class":125},[115,149933,149934,149936,149938],{"class":117,"line":37},[115,149935,30802],{"class":121},[115,149937,30805],{"class":174},[115,149939,149940],{"class":125},"(self, name, age):\n",[115,149942,149943,149945,149947,149949],{"class":117,"line":1180},[115,149944,30846],{"class":174},[115,149946,149780],{"class":125},[115,149948,171],{"class":121},[115,149950,149785],{"class":125},[115,149952,149953,149955,149957,149959],{"class":117,"line":1195},[115,149954,30846],{"class":174},[115,149956,149792],{"class":125},[115,149958,171],{"class":121},[115,149960,149797],{"class":125},[115,149962,149963],{"class":117,"line":1201},[115,149964,2400],{"emptyLinePlaceholder":42},[115,149966,149967,149969,149972],{"class":117,"line":1215},[115,149968,30802],{"class":121},[115,149970,149971],{"class":174}," __str__",[115,149973,30808],{"class":125},[115,149975,149976,149978,149981,149984,149986,149988,149990,149993,149995,149997,149999],{"class":117,"line":1221},[115,149977,14753],{"class":121},[115,149979,149980],{"class":121}," f",[115,149982,149983],{"class":230},"\"Student(name=",[115,149985,149442],{"class":174},[115,149987,80291],{"class":125},[115,149989,1071],{"class":174},[115,149991,149992],{"class":230},", age=",[115,149994,149442],{"class":174},[115,149996,80303],{"class":125},[115,149998,1071],{"class":174},[115,150000,150001],{"class":230},")\"\n",[115,150003,150004],{"class":117,"line":1312},[115,150005,2400],{"emptyLinePlaceholder":42},[115,150007,150008],{"class":117,"line":1318},[115,150009,2400],{"emptyLinePlaceholder":42},[115,150011,150012,150014,150016,150018,150020,150022,150024],{"class":117,"line":1330},[115,150013,149471],{"class":125},[115,150015,171],{"class":121},[115,150017,149875],{"class":125},[115,150019,149878],{"class":230},[115,150021,12436],{"class":125},[115,150023,775],{"class":174},[115,150025,132],{"class":125},[115,150027,150028,150030],{"class":117,"line":1612},[115,150029,30416],{"class":174},[115,150031,150032],{"class":125},"(student)\n",[57,150034,150036],{"id":150035},"_117-封装","11.7 封装",[14,150038,150039],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150041,150042],{},"Python 中以双下划线开头的属性通常视为私有属性。",[106,150044,150046],{"className":30379,"code":150045,"language":30381,"meta":22,"style":22},"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",[112,150047,150048,150057,150066,150078,150090,150094,150103,150112,150116,150126,150139,150150,150155,150166,150170,150179,150191,150202,150206,150219,150230,150234,150245,150249,150253,150271,150280,150289],{"__ignoreMap":22},[115,150049,150050,150052,150055],{"class":117,"line":118},[115,150051,14695],{"class":121},[115,150053,150054],{"class":1963}," Account",[115,150056,3739],{"class":125},[115,150058,150059,150061,150063],{"class":117,"line":37},[115,150060,30802],{"class":121},[115,150062,30805],{"class":174},[115,150064,150065],{"class":125},"(self, owner, balance):\n",[115,150067,150068,150070,150073,150075],{"class":117,"line":1180},[115,150069,30846],{"class":174},[115,150071,150072],{"class":125},".owner ",[115,150074,171],{"class":121},[115,150076,150077],{"class":125}," owner\n",[115,150079,150080,150082,150085,150087],{"class":117,"line":1195},[115,150081,30846],{"class":174},[115,150083,150084],{"class":125},".__balance ",[115,150086,171],{"class":121},[115,150088,150089],{"class":125}," balance\n",[115,150091,150092],{"class":117,"line":1201},[115,150093,2400],{"emptyLinePlaceholder":42},[115,150095,150096,150098,150101],{"class":117,"line":1215},[115,150097,30802],{"class":121},[115,150099,150100],{"class":1963}," get_balance",[115,150102,30808],{"class":125},[115,150104,150105,150107,150109],{"class":117,"line":1221},[115,150106,14753],{"class":121},[115,150108,38874],{"class":174},[115,150110,150111],{"class":125},".__balance\n",[115,150113,150114],{"class":117,"line":1312},[115,150115,2400],{"emptyLinePlaceholder":42},[115,150117,150118,150120,150123],{"class":117,"line":1318},[115,150119,30802],{"class":121},[115,150121,150122],{"class":1963}," deposit",[115,150124,150125],{"class":125},"(self, money):\n",[115,150127,150128,150130,150133,150135,150137],{"class":117,"line":1330},[115,150129,2497],{"class":121},[115,150131,150132],{"class":125}," money ",[115,150134,1588],{"class":121},[115,150136,4093],{"class":174},[115,150138,3739],{"class":125},[115,150140,150141,150143,150145,150148],{"class":117,"line":1612},[115,150142,34651],{"class":174},[115,150144,126],{"class":125},[115,150146,150147],{"class":230},"\"存款金额必须大于0\"",[115,150149,132],{"class":125},[115,150151,150152],{"class":117,"line":1617},[115,150153,150154],{"class":121},"            return\n",[115,150156,150157,150159,150161,150163],{"class":117,"line":1623},[115,150158,30846],{"class":174},[115,150160,150084],{"class":125},[115,150162,9478],{"class":121},[115,150164,150165],{"class":125}," money\n",[115,150167,150168],{"class":117,"line":1628},[115,150169,2400],{"emptyLinePlaceholder":42},[115,150171,150172,150174,150177],{"class":117,"line":1642},[115,150173,30802],{"class":121},[115,150175,150176],{"class":1963}," withdraw",[115,150178,150125],{"class":125},[115,150180,150181,150183,150185,150187,150189],{"class":117,"line":1647},[115,150182,2497],{"class":121},[115,150184,150132],{"class":125},[115,150186,1588],{"class":121},[115,150188,4093],{"class":174},[115,150190,3739],{"class":125},[115,150192,150193,150195,150197,150200],{"class":117,"line":1653},[115,150194,34651],{"class":174},[115,150196,126],{"class":125},[115,150198,150199],{"class":230},"\"取款金额必须大于0\"",[115,150201,132],{"class":125},[115,150203,150204],{"class":117,"line":1674},[115,150205,150154],{"class":121},[115,150207,150208,150210,150212,150214,150216],{"class":117,"line":1679},[115,150209,2497],{"class":121},[115,150211,150132],{"class":125},[115,150213,1085],{"class":121},[115,150215,38874],{"class":174},[115,150217,150218],{"class":125},".__balance:\n",[115,150220,150221,150223,150225,150228],{"class":117,"line":1693},[115,150222,34651],{"class":174},[115,150224,126],{"class":125},[115,150226,150227],{"class":230},"\"余额不足\"",[115,150229,132],{"class":125},[115,150231,150232],{"class":117,"line":1698},[115,150233,150154],{"class":121},[115,150235,150236,150238,150240,150243],{"class":117,"line":1727},[115,150237,30846],{"class":174},[115,150239,150084],{"class":125},[115,150241,150242],{"class":121},"-=",[115,150244,150165],{"class":125},[115,150246,150247],{"class":117,"line":1732},[115,150248,2400],{"emptyLinePlaceholder":42},[115,150250,150251],{"class":117,"line":1749},[115,150252,2400],{"emptyLinePlaceholder":42},[115,150254,150255,150258,150260,150263,150265,150267,150269],{"class":117,"line":1754},[115,150256,150257],{"class":125},"account ",[115,150259,171],{"class":121},[115,150261,150262],{"class":125}," Account(",[115,150264,149878],{"class":230},[115,150266,12436],{"class":125},[115,150268,6411],{"class":174},[115,150270,132],{"class":125},[115,150272,150273,150276,150278],{"class":117,"line":1759},[115,150274,150275],{"class":125},"account.deposit(",[115,150277,1722],{"class":174},[115,150279,132],{"class":125},[115,150281,150282,150285,150287],{"class":117,"line":1764},[115,150283,150284],{"class":125},"account.withdraw(",[115,150286,436],{"class":174},[115,150288,132],{"class":125},[115,150290,150291,150293],{"class":117,"line":1778},[115,150292,30416],{"class":174},[115,150294,150295],{"class":125},"(account.get_balance())\n",[14,150297,150298],{},"封装的意义是避免外部随意修改内部状态。",[57,150300,150302],{"id":150301},"_118-继承","11.8 继承",[14,150304,150305],{},"继承可以让子类复用父类的属性和方法。",[106,150307,150309],{"className":30379,"code":150308,"language":30381,"meta":22,"style":22},"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",[112,150310,150311,150320,150329,150340,150344,150348,150362,150371,150382,150386,150390,150400,150405],{"__ignoreMap":22},[115,150312,150313,150315,150318],{"class":117,"line":118},[115,150314,14695],{"class":121},[115,150316,150317],{"class":1963}," Animal",[115,150319,3739],{"class":125},[115,150321,150322,150324,150327],{"class":117,"line":37},[115,150323,30802],{"class":121},[115,150325,150326],{"class":1963}," eat",[115,150328,30808],{"class":125},[115,150330,150331,150333,150335,150338],{"class":117,"line":1180},[115,150332,32452],{"class":174},[115,150334,126],{"class":125},[115,150336,150337],{"class":230},"\"吃东西\"",[115,150339,132],{"class":125},[115,150341,150342],{"class":117,"line":1195},[115,150343,2400],{"emptyLinePlaceholder":42},[115,150345,150346],{"class":117,"line":1201},[115,150347,2400],{"emptyLinePlaceholder":42},[115,150349,150350,150352,150355,150357,150360],{"class":117,"line":1215},[115,150351,14695],{"class":121},[115,150353,150354],{"class":1963}," Dog",[115,150356,126],{"class":125},[115,150358,150359],{"class":1963},"Animal",[115,150361,30787],{"class":125},[115,150363,150364,150366,150369],{"class":117,"line":1221},[115,150365,30802],{"class":121},[115,150367,150368],{"class":1963}," bark",[115,150370,30808],{"class":125},[115,150372,150373,150375,150377,150380],{"class":117,"line":1312},[115,150374,32452],{"class":174},[115,150376,126],{"class":125},[115,150378,150379],{"class":230},"\"汪汪\"",[115,150381,132],{"class":125},[115,150383,150384],{"class":117,"line":1318},[115,150385,2400],{"emptyLinePlaceholder":42},[115,150387,150388],{"class":117,"line":1330},[115,150389,2400],{"emptyLinePlaceholder":42},[115,150391,150392,150395,150397],{"class":117,"line":1612},[115,150393,150394],{"class":125},"dog ",[115,150396,171],{"class":121},[115,150398,150399],{"class":125}," Dog()\n",[115,150401,150402],{"class":117,"line":1617},[115,150403,150404],{"class":125},"dog.eat()\n",[115,150406,150407],{"class":117,"line":1623},[115,150408,150409],{"class":125},"dog.bark()\n",[14,150411,150412],{},"子类可以扩展新方法，也可以重写父类方法。",[57,150414,150416],{"id":150415},"_119-方法重写","11.9 方法重写",[106,150418,150420],{"className":30379,"code":150419,"language":30381,"meta":22,"style":22},"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",[112,150421,150422,150430,150439,150450,150454,150458,150470,150478,150488,150492,150496,150509,150517,150528,150532,150536,150544,150554,150558,150563],{"__ignoreMap":22},[115,150423,150424,150426,150428],{"class":117,"line":118},[115,150425,14695],{"class":121},[115,150427,150317],{"class":1963},[115,150429,3739],{"class":125},[115,150431,150432,150434,150437],{"class":117,"line":37},[115,150433,30802],{"class":121},[115,150435,150436],{"class":1963}," speak",[115,150438,30808],{"class":125},[115,150440,150441,150443,150445,150448],{"class":117,"line":1180},[115,150442,32452],{"class":174},[115,150444,126],{"class":125},[115,150446,150447],{"class":230},"\"动物叫\"",[115,150449,132],{"class":125},[115,150451,150452],{"class":117,"line":1195},[115,150453,2400],{"emptyLinePlaceholder":42},[115,150455,150456],{"class":117,"line":1201},[115,150457,2400],{"emptyLinePlaceholder":42},[115,150459,150460,150462,150464,150466,150468],{"class":117,"line":1215},[115,150461,14695],{"class":121},[115,150463,150354],{"class":1963},[115,150465,126],{"class":125},[115,150467,150359],{"class":1963},[115,150469,30787],{"class":125},[115,150471,150472,150474,150476],{"class":117,"line":1221},[115,150473,30802],{"class":121},[115,150475,150436],{"class":1963},[115,150477,30808],{"class":125},[115,150479,150480,150482,150484,150486],{"class":117,"line":1312},[115,150481,32452],{"class":174},[115,150483,126],{"class":125},[115,150485,150379],{"class":230},[115,150487,132],{"class":125},[115,150489,150490],{"class":117,"line":1318},[115,150491,2400],{"emptyLinePlaceholder":42},[115,150493,150494],{"class":117,"line":1330},[115,150495,2400],{"emptyLinePlaceholder":42},[115,150497,150498,150500,150503,150505,150507],{"class":117,"line":1612},[115,150499,14695],{"class":121},[115,150501,150502],{"class":1963}," Cat",[115,150504,126],{"class":125},[115,150506,150359],{"class":1963},[115,150508,30787],{"class":125},[115,150510,150511,150513,150515],{"class":117,"line":1617},[115,150512,30802],{"class":121},[115,150514,150436],{"class":1963},[115,150516,30808],{"class":125},[115,150518,150519,150521,150523,150526],{"class":117,"line":1623},[115,150520,32452],{"class":174},[115,150522,126],{"class":125},[115,150524,150525],{"class":230},"\"喵喵\"",[115,150527,132],{"class":125},[115,150529,150530],{"class":117,"line":1628},[115,150531,2400],{"emptyLinePlaceholder":42},[115,150533,150534],{"class":117,"line":1642},[115,150535,2400],{"emptyLinePlaceholder":42},[115,150537,150538,150540,150542],{"class":117,"line":1647},[115,150539,150394],{"class":125},[115,150541,171],{"class":121},[115,150543,150399],{"class":125},[115,150545,150546,150549,150551],{"class":117,"line":1653},[115,150547,150548],{"class":125},"cat ",[115,150550,171],{"class":121},[115,150552,150553],{"class":125}," Cat()\n",[115,150555,150556],{"class":117,"line":1674},[115,150557,2400],{"emptyLinePlaceholder":42},[115,150559,150560],{"class":117,"line":1679},[115,150561,150562],{"class":125},"dog.speak()\n",[115,150564,150565],{"class":117,"line":1693},[115,150566,150567],{"class":125},"cat.speak()\n",[57,150569,150571],{"id":150570},"_1110-super","11.10 super",[14,150573,150574,150575,150578],{},"子类可以通过 ",[112,150576,150577],{},"super()"," 调用父类方法。",[106,150580,150582],{"className":30379,"code":150581,"language":30381,"meta":22,"style":22},"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",[112,150583,150584,150592,150601,150611,150615,150619,150631,150640,150651,150661,150665,150669,150685],{"__ignoreMap":22},[115,150585,150586,150588,150590],{"class":117,"line":118},[115,150587,14695],{"class":121},[115,150589,15570],{"class":1963},[115,150591,3739],{"class":125},[115,150593,150594,150596,150598],{"class":117,"line":37},[115,150595,30802],{"class":121},[115,150597,30805],{"class":174},[115,150599,150600],{"class":125},"(self, name):\n",[115,150602,150603,150605,150607,150609],{"class":117,"line":1180},[115,150604,30846],{"class":174},[115,150606,149780],{"class":125},[115,150608,171],{"class":121},[115,150610,149785],{"class":125},[115,150612,150613],{"class":117,"line":1195},[115,150614,2400],{"emptyLinePlaceholder":42},[115,150616,150617],{"class":117,"line":1201},[115,150618,2400],{"emptyLinePlaceholder":42},[115,150620,150621,150623,150625,150627,150629],{"class":117,"line":1215},[115,150622,14695],{"class":121},[115,150624,7899],{"class":1963},[115,150626,126],{"class":125},[115,150628,19047],{"class":1963},[115,150630,30787],{"class":125},[115,150632,150633,150635,150637],{"class":117,"line":1221},[115,150634,30802],{"class":121},[115,150636,30805],{"class":174},[115,150638,150639],{"class":125},"(self, name, score):\n",[115,150641,150642,150644,150646,150648],{"class":117,"line":1312},[115,150643,30818],{"class":174},[115,150645,17262],{"class":125},[115,150647,30830],{"class":174},[115,150649,150650],{"class":125},"(name)\n",[115,150652,150653,150655,150657,150659],{"class":117,"line":1318},[115,150654,30846],{"class":174},[115,150656,149804],{"class":125},[115,150658,171],{"class":121},[115,150660,1579],{"class":125},[115,150662,150663],{"class":117,"line":1330},[115,150664,2400],{"emptyLinePlaceholder":42},[115,150666,150667],{"class":117,"line":1612},[115,150668,2400],{"emptyLinePlaceholder":42},[115,150670,150671,150673,150675,150677,150679,150681,150683],{"class":117,"line":1617},[115,150672,149471],{"class":125},[115,150674,171],{"class":121},[115,150676,149875],{"class":125},[115,150678,149878],{"class":230},[115,150680,12436],{"class":125},[115,150682,1114],{"class":174},[115,150684,132],{"class":125},[115,150686,150687,150689],{"class":117,"line":1623},[115,150688,30416],{"class":174},[115,150690,150691],{"class":125},"(student.name, student.score)\n",[57,150693,150695],{"id":150694},"_1111-多态","11.11 多态",[14,150697,150698],{},"多态指不同对象响应同一个方法，表现出不同结果。",[106,150700,150702],{"className":30379,"code":150701,"language":30381,"meta":22,"style":22},"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",[112,150703,150704,150712,150720,150730,150734,150738,150746,150754,150764,150768,150772,150782,150787,150791,150795,150800],{"__ignoreMap":22},[115,150705,150706,150708,150710],{"class":117,"line":118},[115,150707,14695],{"class":121},[115,150709,150354],{"class":1963},[115,150711,3739],{"class":125},[115,150713,150714,150716,150718],{"class":117,"line":37},[115,150715,30802],{"class":121},[115,150717,150436],{"class":1963},[115,150719,30808],{"class":125},[115,150721,150722,150724,150726,150728],{"class":117,"line":1180},[115,150723,32452],{"class":174},[115,150725,126],{"class":125},[115,150727,150379],{"class":230},[115,150729,132],{"class":125},[115,150731,150732],{"class":117,"line":1195},[115,150733,2400],{"emptyLinePlaceholder":42},[115,150735,150736],{"class":117,"line":1201},[115,150737,2400],{"emptyLinePlaceholder":42},[115,150739,150740,150742,150744],{"class":117,"line":1215},[115,150741,14695],{"class":121},[115,150743,150502],{"class":1963},[115,150745,3739],{"class":125},[115,150747,150748,150750,150752],{"class":117,"line":1221},[115,150749,30802],{"class":121},[115,150751,150436],{"class":1963},[115,150753,30808],{"class":125},[115,150755,150756,150758,150760,150762],{"class":117,"line":1312},[115,150757,32452],{"class":174},[115,150759,126],{"class":125},[115,150761,150525],{"class":230},[115,150763,132],{"class":125},[115,150765,150766],{"class":117,"line":1318},[115,150767,2400],{"emptyLinePlaceholder":42},[115,150769,150770],{"class":117,"line":1330},[115,150771,2400],{"emptyLinePlaceholder":42},[115,150773,150774,150776,150779],{"class":117,"line":1612},[115,150775,31948],{"class":121},[115,150777,150778],{"class":1963}," make_sound",[115,150780,150781],{"class":125},"(animal):\n",[115,150783,150784],{"class":117,"line":1617},[115,150785,150786],{"class":125},"    animal.speak()\n",[115,150788,150789],{"class":117,"line":1623},[115,150790,2400],{"emptyLinePlaceholder":42},[115,150792,150793],{"class":117,"line":1628},[115,150794,2400],{"emptyLinePlaceholder":42},[115,150796,150797],{"class":117,"line":1642},[115,150798,150799],{"class":125},"make_sound(Dog())\n",[115,150801,150802],{"class":117,"line":1647},[115,150803,150804],{"class":125},"make_sound(Cat())\n",[14,150806,150807],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[57,150809,150811],{"id":150810},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150813,150814],{},"实例属性属于对象：",[106,150816,150818],{"className":30379,"code":150817,"language":30381,"meta":22,"style":22},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[112,150819,150820,150828,150836],{"__ignoreMap":22},[115,150821,150822,150824,150826],{"class":117,"line":118},[115,150823,14695],{"class":121},[115,150825,7899],{"class":1963},[115,150827,3739],{"class":125},[115,150829,150830,150832,150834],{"class":117,"line":37},[115,150831,30802],{"class":121},[115,150833,30805],{"class":174},[115,150835,150600],{"class":125},[115,150837,150838,150840,150842,150844],{"class":117,"line":1180},[115,150839,30846],{"class":174},[115,150841,149780],{"class":125},[115,150843,171],{"class":121},[115,150845,149785],{"class":125},[14,150847,150848],{},"类属性属于类，所有对象共享：",[106,150850,150852],{"className":30379,"code":150851,"language":30381,"meta":22,"style":22},"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",[112,150853,150854,150862,150872,150876,150884,150894,150898,150902,150915,150929,150933,150940,150947],{"__ignoreMap":22},[115,150855,150856,150858,150860],{"class":117,"line":118},[115,150857,14695],{"class":121},[115,150859,7899],{"class":1963},[115,150861,3739],{"class":125},[115,150863,150864,150867,150869],{"class":117,"line":37},[115,150865,150866],{"class":125},"    school ",[115,150868,171],{"class":121},[115,150870,150871],{"class":230}," \"黑马学校\"\n",[115,150873,150874],{"class":117,"line":1180},[115,150875,2400],{"emptyLinePlaceholder":42},[115,150877,150878,150880,150882],{"class":117,"line":1195},[115,150879,30802],{"class":121},[115,150881,30805],{"class":174},[115,150883,150600],{"class":125},[115,150885,150886,150888,150890,150892],{"class":117,"line":1201},[115,150887,30846],{"class":174},[115,150889,149780],{"class":125},[115,150891,171],{"class":121},[115,150893,149785],{"class":125},[115,150895,150896],{"class":117,"line":1215},[115,150897,2400],{"emptyLinePlaceholder":42},[115,150899,150900],{"class":117,"line":1221},[115,150901,2400],{"emptyLinePlaceholder":42},[115,150903,150904,150907,150909,150911,150913],{"class":117,"line":1312},[115,150905,150906],{"class":125},"s1 ",[115,150908,171],{"class":121},[115,150910,149875],{"class":125},[115,150912,149878],{"class":230},[115,150914,132],{"class":125},[115,150916,150917,150920,150922,150924,150927],{"class":117,"line":1318},[115,150918,150919],{"class":125},"s2 ",[115,150921,171],{"class":121},[115,150923,149875],{"class":125},[115,150925,150926],{"class":230},"\"小红\"",[115,150928,132],{"class":125},[115,150930,150931],{"class":117,"line":1330},[115,150932,2400],{"emptyLinePlaceholder":42},[115,150934,150935,150937],{"class":117,"line":1612},[115,150936,30416],{"class":174},[115,150938,150939],{"class":125},"(s1.school)\n",[115,150941,150942,150944],{"class":117,"line":1617},[115,150943,30416],{"class":174},[115,150945,150946],{"class":125},"(s2.school)\n",[115,150948,150949,150951],{"class":117,"line":1623},[115,150950,30416],{"class":174},[115,150952,150953],{"class":125},"(Student.school)\n",[14,150955,150956],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[57,150958,150960],{"id":150959},"_1113-类方法和静态方法","11.13 类方法和静态方法",[86,150962,150964],{"id":150963},"_11131-类方法","11.13.1 类方法",[14,150966,150967,150968,150971,150972,28386],{},"类方法使用 ",[112,150969,150970],{},"@classmethod","，第一个参数通常是 ",[112,150973,150974],{},"cls",[106,150976,150978],{"className":30379,"code":150977,"language":30381,"meta":22,"style":22},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[112,150979,150980,150988,150996,151000,151008,151018,151028,151032,151036],{"__ignoreMap":22},[115,150981,150982,150984,150986],{"class":117,"line":118},[115,150983,14695],{"class":121},[115,150985,7899],{"class":1963},[115,150987,3739],{"class":125},[115,150989,150990,150992,150994],{"class":117,"line":37},[115,150991,150866],{"class":125},[115,150993,171],{"class":121},[115,150995,150871],{"class":230},[115,150997,150998],{"class":117,"line":1180},[115,150999,2400],{"emptyLinePlaceholder":42},[115,151001,151002,151005],{"class":117,"line":1195},[115,151003,151004],{"class":1963},"    @",[115,151006,151007],{"class":174},"classmethod\n",[115,151009,151010,151012,151015],{"class":117,"line":1201},[115,151011,30802],{"class":121},[115,151013,151014],{"class":1963}," get_school",[115,151016,151017],{"class":125},"(cls):\n",[115,151019,151020,151022,151025],{"class":117,"line":1215},[115,151021,14753],{"class":121},[115,151023,151024],{"class":174}," cls",[115,151026,151027],{"class":125},".school\n",[115,151029,151030],{"class":117,"line":1221},[115,151031,2400],{"emptyLinePlaceholder":42},[115,151033,151034],{"class":117,"line":1312},[115,151035,2400],{"emptyLinePlaceholder":42},[115,151037,151038,151040],{"class":117,"line":1318},[115,151039,30416],{"class":174},[115,151041,151042],{"class":125},"(Student.get_school())\n",[86,151044,151046],{"id":151045},"_11132-静态方法","11.13.2 静态方法",[14,151048,151049,151050,151053],{},"静态方法使用 ",[112,151051,151052],{},"@staticmethod","，不需要访问实例和类。",[106,151055,151057],{"className":30379,"code":151056,"language":30381,"meta":22,"style":22},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[112,151058,151059,151068,151075,151084,151095,151099,151103],{"__ignoreMap":22},[115,151060,151061,151063,151066],{"class":117,"line":118},[115,151062,14695],{"class":121},[115,151064,151065],{"class":1963}," MathUtils",[115,151067,3739],{"class":125},[115,151069,151070,151072],{"class":117,"line":37},[115,151071,151004],{"class":1963},[115,151073,151074],{"class":174},"staticmethod\n",[115,151076,151077,151079,151081],{"class":117,"line":1180},[115,151078,30802],{"class":121},[115,151080,5210],{"class":1963},[115,151082,151083],{"class":125},"(a, b):\n",[115,151085,151086,151088,151090,151092],{"class":117,"line":1195},[115,151087,14753],{"class":121},[115,151089,10870],{"class":125},[115,151091,606],{"class":121},[115,151093,151094],{"class":125}," b\n",[115,151096,151097],{"class":117,"line":1201},[115,151098,2400],{"emptyLinePlaceholder":42},[115,151100,151101],{"class":117,"line":1215},[115,151102,2400],{"emptyLinePlaceholder":42},[115,151104,151105,151107,151110,151112,151114,151116],{"class":117,"line":1221},[115,151106,30416],{"class":174},[115,151108,151109],{"class":125},"(MathUtils.add(",[115,151111,343],{"class":174},[115,151113,12436],{"class":125},[115,151115,203],{"class":174},[115,151117,30498],{"class":125},[14,151119,151120],{},"静态方法本质上是放在类命名空间里的普通函数。",[57,151122,151124],{"id":151123},"_1114-dataclass","11.14 dataclass",[14,151126,151127,151130],{},[112,151128,151129],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[106,151132,151134],{"className":30379,"code":151133,"language":30381,"meta":22,"style":22},"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",[112,151135,151136,151148,151152,151156,151161,151169,151177,151185,151193,151197,151201,151221],{"__ignoreMap":22},[115,151137,151138,151140,151143,151145],{"class":117,"line":118},[115,151139,30738],{"class":121},[115,151141,151142],{"class":125}," dataclasses ",[115,151144,30393],{"class":121},[115,151146,151147],{"class":125}," dataclass\n",[115,151149,151150],{"class":117,"line":37},[115,151151,2400],{"emptyLinePlaceholder":42},[115,151153,151154],{"class":117,"line":1180},[115,151155,2400],{"emptyLinePlaceholder":42},[115,151157,151158],{"class":117,"line":1195},[115,151159,151160],{"class":1963},"@dataclass\n",[115,151162,151163,151165,151167],{"class":117,"line":1201},[115,151164,14695],{"class":121},[115,151166,7899],{"class":1963},[115,151168,3739],{"class":125},[115,151170,151171,151174],{"class":117,"line":1215},[115,151172,151173],{"class":125},"    name: ",[115,151175,151176],{"class":174},"str\n",[115,151178,151179,151182],{"class":117,"line":1221},[115,151180,151181],{"class":125},"    age: ",[115,151183,151184],{"class":174},"int\n",[115,151186,151187,151190],{"class":117,"line":1312},[115,151188,151189],{"class":125},"    score: ",[115,151191,151192],{"class":174},"float\n",[115,151194,151195],{"class":117,"line":1318},[115,151196,2400],{"emptyLinePlaceholder":42},[115,151198,151199],{"class":117,"line":1330},[115,151200,2400],{"emptyLinePlaceholder":42},[115,151202,151203,151205,151207,151209,151211,151213,151215,151217,151219],{"class":117,"line":1612},[115,151204,149471],{"class":125},[115,151206,171],{"class":121},[115,151208,149875],{"class":125},[115,151210,149878],{"class":230},[115,151212,12436],{"class":125},[115,151214,775],{"class":174},[115,151216,12436],{"class":125},[115,151218,1114],{"class":174},[115,151220,132],{"class":125},[115,151222,151223,151225],{"class":117,"line":1617},[115,151224,30416],{"class":174},[115,151226,150032],{"class":125},[14,151228,151229,151230,338,151232,151235],{},"它会自动生成 ",[112,151231,30830],{},[112,151233,151234],{},"__repr__"," 等方法。适合数据模型类。",[57,151237,151239],{"id":151238},"_1115-小案例学生类","11.15 小案例：学生类",[106,151241,151243],{"className":30379,"code":151242,"language":30381,"meta":22,"style":22},"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",[112,151244,151245,151253,151262,151274,151284,151294,151304,151308,151317,151330,151334,151343,151349,151361,151373,151385,151397,151401,151405,151411,151421,151430,151440,151448,151456,151465,151469,151473,151481,151517,151521,151525,151550,151557],{"__ignoreMap":22},[115,151246,151247,151249,151251],{"class":117,"line":118},[115,151248,14695],{"class":121},[115,151250,7899],{"class":1963},[115,151252,3739],{"class":125},[115,151254,151255,151257,151259],{"class":117,"line":37},[115,151256,30802],{"class":121},[115,151258,30805],{"class":174},[115,151260,151261],{"class":125},"(self, student_id, name, age, score):\n",[115,151263,151264,151266,151269,151271],{"class":117,"line":1180},[115,151265,30846],{"class":174},[115,151267,151268],{"class":125},".student_id ",[115,151270,171],{"class":121},[115,151272,151273],{"class":125}," student_id\n",[115,151275,151276,151278,151280,151282],{"class":117,"line":1195},[115,151277,30846],{"class":174},[115,151279,149780],{"class":125},[115,151281,171],{"class":121},[115,151283,149785],{"class":125},[115,151285,151286,151288,151290,151292],{"class":117,"line":1201},[115,151287,30846],{"class":174},[115,151289,149792],{"class":125},[115,151291,171],{"class":121},[115,151293,149797],{"class":125},[115,151295,151296,151298,151300,151302],{"class":117,"line":1215},[115,151297,30846],{"class":174},[115,151299,149804],{"class":125},[115,151301,171],{"class":121},[115,151303,1579],{"class":125},[115,151305,151306],{"class":117,"line":1221},[115,151307,2400],{"emptyLinePlaceholder":42},[115,151309,151310,151312,151315],{"class":117,"line":1312},[115,151311,30802],{"class":121},[115,151313,151314],{"class":1963}," is_passed",[115,151316,30808],{"class":125},[115,151318,151319,151321,151323,151325,151327],{"class":117,"line":1318},[115,151320,14753],{"class":121},[115,151322,38874],{"class":174},[115,151324,149804],{"class":125},[115,151326,1710],{"class":121},[115,151328,151329],{"class":174}," 60\n",[115,151331,151332],{"class":117,"line":1330},[115,151333,2400],{"emptyLinePlaceholder":42},[115,151335,151336,151338,151341],{"class":117,"line":1612},[115,151337,30802],{"class":121},[115,151339,151340],{"class":1963}," to_dict",[115,151342,30808],{"class":125},[115,151344,151345,151347],{"class":117,"line":1617},[115,151346,14753],{"class":121},[115,151348,15573],{"class":125},[115,151350,151351,151354,151356,151358],{"class":117,"line":1623},[115,151352,151353],{"class":230},"            \"student_id\"",[115,151355,51427],{"class":125},[115,151357,30824],{"class":174},[115,151359,151360],{"class":125},".student_id,\n",[115,151362,151363,151366,151368,151370],{"class":117,"line":1628},[115,151364,151365],{"class":230},"            \"name\"",[115,151367,51427],{"class":125},[115,151369,30824],{"class":174},[115,151371,151372],{"class":125},".name,\n",[115,151374,151375,151378,151380,151382],{"class":117,"line":1642},[115,151376,151377],{"class":230},"            \"age\"",[115,151379,51427],{"class":125},[115,151381,30824],{"class":174},[115,151383,151384],{"class":125},".age,\n",[115,151386,151387,151390,151392,151394],{"class":117,"line":1647},[115,151388,151389],{"class":230},"            \"score\"",[115,151391,51427],{"class":125},[115,151393,30824],{"class":174},[115,151395,151396],{"class":125},".score,\n",[115,151398,151399],{"class":117,"line":1653},[115,151400,2529],{"class":125},[115,151402,151403],{"class":117,"line":1674},[115,151404,2400],{"emptyLinePlaceholder":42},[115,151406,151407,151409],{"class":117,"line":1679},[115,151408,151004],{"class":1963},[115,151410,151007],{"class":174},[115,151412,151413,151415,151418],{"class":117,"line":1693},[115,151414,30802],{"class":121},[115,151416,151417],{"class":1963}," from_dict",[115,151419,151420],{"class":125},"(cls, data):\n",[115,151422,151423,151425,151427],{"class":117,"line":1698},[115,151424,14753],{"class":121},[115,151426,151024],{"class":174},[115,151428,151429],{"class":125},"(\n",[115,151431,151432,151435,151438],{"class":117,"line":1727},[115,151433,151434],{"class":125},"            data[",[115,151436,151437],{"class":230},"\"student_id\"",[115,151439,87826],{"class":125},[115,151441,151442,151444,151446],{"class":117,"line":1732},[115,151443,151434],{"class":125},[115,151445,62669],{"class":230},[115,151447,87826],{"class":125},[115,151449,151450,151452,151454],{"class":117,"line":1749},[115,151451,151434],{"class":125},[115,151453,69114],{"class":230},[115,151455,87826],{"class":125},[115,151457,151458,151460,151463],{"class":117,"line":1754},[115,151459,151434],{"class":125},[115,151461,151462],{"class":230},"\"score\"",[115,151464,87826],{"class":125},[115,151466,151467],{"class":117,"line":1759},[115,151468,38127],{"class":125},[115,151470,151471],{"class":117,"line":1764},[115,151472,2400],{"emptyLinePlaceholder":42},[115,151474,151475,151477,151479],{"class":117,"line":1778},[115,151476,30802],{"class":121},[115,151478,149971],{"class":174},[115,151480,30808],{"class":125},[115,151482,151483,151485,151487,151489,151491,151494,151496,151499,151501,151503,151505,151507,151509,151511,151513,151515],{"class":117,"line":1783},[115,151484,14753],{"class":121},[115,151486,149980],{"class":121},[115,151488,376],{"class":230},[115,151490,149442],{"class":174},[115,151492,151493],{"class":125},".student_id",[115,151495,1071],{"class":174},[115,151497,151498],{"class":174}," {self",[115,151500,80291],{"class":125},[115,151502,1071],{"class":174},[115,151504,151498],{"class":174},[115,151506,80303],{"class":125},[115,151508,1071],{"class":174},[115,151510,151498],{"class":174},[115,151512,149852],{"class":125},[115,151514,1071],{"class":174},[115,151516,25134],{"class":230},[115,151518,151519],{"class":117,"line":2577},[115,151520,2400],{"emptyLinePlaceholder":42},[115,151522,151523],{"class":117,"line":2591},[115,151524,2400],{"emptyLinePlaceholder":42},[115,151526,151527,151529,151531,151533,151536,151538,151540,151542,151544,151546,151548],{"class":117,"line":2599},[115,151528,149471],{"class":125},[115,151530,171],{"class":121},[115,151532,149875],{"class":125},[115,151534,151535],{"class":230},"\"001\"",[115,151537,12436],{"class":125},[115,151539,149878],{"class":230},[115,151541,12436],{"class":125},[115,151543,775],{"class":174},[115,151545,12436],{"class":125},[115,151547,1114],{"class":174},[115,151549,132],{"class":125},[115,151551,151552,151554],{"class":117,"line":2604},[115,151553,30416],{"class":174},[115,151555,151556],{"class":125},"(student.is_passed())\n",[115,151558,151559,151561],{"class":117,"line":2610},[115,151560,30416],{"class":174},[115,151562,151563],{"class":125},"(student.to_dict())\n",[14,151565,151566,101008,151569,151572],{},[112,151567,151568],{},"to_dict()",[112,151570,151571],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[57,151574,151576],{"id":151575},"_1116-易错点","11.16 易错点",[69,151578,151579,151585,151591,151596,151599,151602],{},[72,151580,151581,151582,28386],{},"类名推荐使用大驼峰，如 ",[112,151583,151584],{},"StudentManager",[72,151586,151587,151588,151590],{},"方法第一个参数必须写 ",[112,151589,30824],{},"，调用时不用传。",[72,151592,151593,151595],{},[112,151594,30830],{}," 不是普通方法，它在创建对象时自动执行。",[72,151597,151598],{},"私有属性不是绝对安全，只是约定和名称改写。",[72,151600,151601],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[72,151603,151604],{},"类中方法太多时，说明职责可能过重。",[57,151606,151608],{"id":151607},"_1117-本章练习","11.17 本章练习",[69,151610,151611,151617,151623,151628,151641],{},[72,151612,151613,151614,151616],{},"定义 ",[112,151615,149558],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[72,151618,151613,151619,151622],{},[112,151620,151621],{},"Account"," 类，实现存款、取款、查询余额。",[72,151624,151613,151625,151627],{},[112,151626,17227],{}," 类，计算圆的周长和面积。",[72,151629,151613,151630,338,151633,151636,151637,151640],{},[112,151631,151632],{},"Dog",[112,151634,151635],{},"Cat"," 类，并用同一个函数调用它们的 ",[112,151638,151639],{},"speak()"," 方法。",[72,151642,104356,151643,151645,151646,28386],{},[112,151644,151129],{}," 定义一个商品类 ",[112,151647,151648],{},"Product",[5127,151650,151651],{},"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":22,"searchDepth":37,"depth":37,"links":151653},[151654,151655,151656,151657,151658,151659,151661,151662,151663,151664,151665,151666,151667,151671,151672,151673,151674],{"id":149322,"depth":37,"text":149323},{"id":149505,"depth":37,"text":149506},{"id":149569,"depth":37,"text":149570},{"id":149646,"depth":37,"text":149647},{"id":149745,"depth":37,"text":149746},{"id":149909,"depth":37,"text":151660},"11.6 str",{"id":150035,"depth":37,"text":150036},{"id":150301,"depth":37,"text":150302},{"id":150415,"depth":37,"text":150416},{"id":150570,"depth":37,"text":150571},{"id":150694,"depth":37,"text":150695},{"id":150810,"depth":37,"text":150811},{"id":150959,"depth":37,"text":150960,"children":151668},[151669,151670],{"id":150963,"depth":1180,"text":150964},{"id":151045,"depth":1180,"text":151046},{"id":151123,"depth":37,"text":151124},{"id":151238,"depth":37,"text":151239},{"id":151575,"depth":37,"text":151576},{"id":151607,"depth":37,"text":151608},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149314,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151681,"title":151682,"body":151683,"description":39,"extension":40,"meta":154996,"navigation":42,"path":154997,"seo":154998,"stem":154999,"__hash__":155000},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151684,"toc":154972},[151685,151688,151692,151695,151698,151727,151730,151738,151742,151746,151749,151772,151775,151781,151785,153231,153234,153255,153259,153262,153274,153277,153461,153464,153590,153593,153597,153601,153737,153741,153827,153831,153913,153917,153954,153958,154147,154151,154154,154384,154388,154391,154572,154575,154579,154582,154588,154591,154617,154621,154624,154638,154641,154666,154669,154683,154686,154703,154706,154723,154726,154743,154747,154773,154777,154800,154804,154807,154809,154815,154817,154838,154841,154847,154853,154857,154860,154936,154939,154943,154969],[10,151686,151682],{"id":151687},"_12-综合案例与复习路线",[57,151689,151691],{"id":151690},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151693,151694],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151696,151697],{},"一个合格的入门综合项目最好覆盖：",[69,151699,151700,151703,151706,151709,151712,151715,151718,151721,151724],{},[72,151701,151702],{},"输入输出。",[72,151704,151705],{},"判断和循环。",[72,151707,151708],{},"函数拆分。",[72,151710,151711],{},"列表、字典等容器。",[72,151713,151714],{},"文件持久化。",[72,151716,151717],{},"异常处理。",[72,151719,151720],{},"模块拆分。",[72,151722,151723],{},"可选：面向对象。",[72,151725,151726],{},"可选：数据可视化。",[14,151728,151729],{},"本章整理两个方向：",[69,151731,151732,151735],{},[72,151733,151734],{},"学生管理系统。",[72,151736,151737],{},"销售数据统计和可视化。",[57,151739,151741],{"id":151740},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[86,151743,151745],{"id":151744},"_1221-需求","12.2.1 需求",[14,151747,151748],{},"实现一个命令行学生管理系统：",[69,151750,151751,151754,151757,151760,151763,151766,151769],{},[72,151752,151753],{},"添加学生。",[72,151755,151756],{},"删除学生。",[72,151758,151759],{},"修改学生。",[72,151761,151762],{},"查询学生。",[72,151764,151765],{},"显示所有学生。",[72,151767,151768],{},"保存到 JSON 文件。",[72,151770,151771],{},"程序启动时自动读取 JSON 文件。",[14,151773,151774],{},"学生字段：",[106,151776,151779],{"className":151777,"code":151778,"language":5188,"meta":22},[5186],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[112,151780,151778],{"__ignoreMap":22},[57,151782,151784],{"id":151783},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[106,151786,151788],{"className":30379,"code":151787,"language":30381,"meta":22,"style":22},"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",[112,151789,151790,151796,151806,151810,151824,151828,151832,151841,151853,151859,151863,151869,151900,151910,151917,151928,151934,151938,151942,151952,151983,152009,152013,152017,152026,152037,152048,152059,152070,152081,152092,152103,152107,152111,152121,152133,152149,152156,152163,152167,152171,152181,152189,152196,152209,152219,152230,152234,152238,152247,152255,152261,152273,152281,152292,152296,152300,152309,152325,152329,152336,152347,152352,152356,152372,152387,152402,152406,152411,152419,152427,152435,152443,152447,152452,152463,152467,152471,152480,152495,152505,152509,152521,152532,152536,152540,152545,152549,152560,152564,152568,152577,152592,152600,152604,152616,152626,152630,152634,152649,152662,152675,152679,152692,152704,152716,152720,152724,152735,152739,152743,152752,152767,152775,152779,152791,152801,152805,152809,152814,152818,152822,152832,152838,152860,152879,152898,152917,152922,152926,152930,152939,152947,152958,152962,152966,152992,153002,153007,153011,153015,153023,153033,153037,153045,153050,153066,153070,153084,153089,153103,153108,153121,153126,153139,153144,153157,153162,153175,153186,153190,153196,153207,153211,153215,153227],{"__ignoreMap":22},[115,151791,151792,151794],{"class":117,"line":118},[115,151793,30393],{"class":121},[115,151795,147081],{"class":125},[115,151797,151798,151800,151802,151804],{"class":117,"line":37},[115,151799,30738],{"class":121},[115,151801,108301],{"class":125},[115,151803,30393],{"class":121},[115,151805,108306],{"class":125},[115,151807,151808],{"class":117,"line":1180},[115,151809,2400],{"emptyLinePlaceholder":42},[115,151811,151812,151815,151817,151819,151822],{"class":117,"line":1195},[115,151813,151814],{"class":174},"DATA_FILE",[115,151816,13565],{"class":121},[115,151818,108535],{"class":125},[115,151820,151821],{"class":230},"\"students.json\"",[115,151823,132],{"class":125},[115,151825,151826],{"class":117,"line":1201},[115,151827,2400],{"emptyLinePlaceholder":42},[115,151829,151830],{"class":117,"line":1215},[115,151831,2400],{"emptyLinePlaceholder":42},[115,151833,151834,151836,151839],{"class":117,"line":1221},[115,151835,31948],{"class":121},[115,151837,151838],{"class":1963}," load_students",[115,151840,31954],{"class":125},[115,151842,151843,151845,151847,151850],{"class":117,"line":1312},[115,151844,3101],{"class":121},[115,151846,38931],{"class":121},[115,151848,151849],{"class":174}," DATA_FILE",[115,151851,151852],{"class":125},".exists():\n",[115,151854,151855,151857],{"class":117,"line":1318},[115,151856,14753],{"class":121},[115,151858,51828],{"class":125},[115,151860,151861],{"class":117,"line":1330},[115,151862,2400],{"emptyLinePlaceholder":42},[115,151864,151865,151867],{"class":117,"line":1612},[115,151866,125774],{"class":121},[115,151868,3739],{"class":125},[115,151870,151871,151874,151876,151878,151880,151882,151884,151886,151888,151890,151892,151894,151896,151898],{"class":117,"line":1617},[115,151872,151873],{"class":121},"        with",[115,151875,146781],{"class":174},[115,151877,126],{"class":125},[115,151879,151814],{"class":174},[115,151881,12436],{"class":125},[115,151883,146791],{"class":230},[115,151885,12436],{"class":125},[115,151887,146796],{"class":5217},[115,151889,171],{"class":121},[115,151891,146801],{"class":230},[115,151893,13715],{"class":125},[115,151895,31384],{"class":121},[115,151897,148143],{"class":5217},[115,151899,3739],{"class":125},[115,151901,151902,151904,151906,151908],{"class":117,"line":1623},[115,151903,15733],{"class":121},[115,151905,148154],{"class":125},[115,151907,45355],{"class":5217},[115,151909,132],{"class":125},[115,151911,151912,151914],{"class":117,"line":1628},[115,151913,125802],{"class":121},[115,151915,151916],{"class":125}," json.JSONDecodeError:\n",[115,151918,151919,151921,151923,151926],{"class":117,"line":1642},[115,151920,32452],{"class":174},[115,151922,126],{"class":125},[115,151924,151925],{"class":230},"\"数据文件格式错误，已使用空数据启动\"",[115,151927,132],{"class":125},[115,151929,151930,151932],{"class":117,"line":1647},[115,151931,14753],{"class":121},[115,151933,51828],{"class":125},[115,151935,151936],{"class":117,"line":1653},[115,151937,2400],{"emptyLinePlaceholder":42},[115,151939,151940],{"class":117,"line":1674},[115,151941,2400],{"emptyLinePlaceholder":42},[115,151943,151944,151946,151949],{"class":117,"line":1679},[115,151945,31948],{"class":121},[115,151947,151948],{"class":1963}," save_students",[115,151950,151951],{"class":125},"(students):\n",[115,151953,151954,151956,151958,151960,151962,151964,151967,151969,151971,151973,151975,151977,151979,151981],{"class":117,"line":1693},[115,151955,34179],{"class":121},[115,151957,146781],{"class":174},[115,151959,126],{"class":125},[115,151961,151814],{"class":174},[115,151963,12436],{"class":125},[115,151965,151966],{"class":230},"\"w\"",[115,151968,12436],{"class":125},[115,151970,146796],{"class":5217},[115,151972,171],{"class":121},[115,151974,146801],{"class":230},[115,151976,13715],{"class":125},[115,151978,31384],{"class":121},[115,151980,148143],{"class":5217},[115,151982,3739],{"class":125},[115,151984,151985,151988,151990,151992,151994,151996,151998,152000,152003,152005,152007],{"class":117,"line":1698},[115,151986,151987],{"class":125},"        json.dump(students, ",[115,151989,45355],{"class":5217},[115,151991,12436],{"class":125},[115,151993,147127],{"class":5217},[115,151995,171],{"class":121},[115,151997,33988],{"class":174},[115,151999,12436],{"class":125},[115,152001,152002],{"class":5217},"indent",[115,152004,171],{"class":121},[115,152006,203],{"class":174},[115,152008,132],{"class":125},[115,152010,152011],{"class":117,"line":1727},[115,152012,2400],{"emptyLinePlaceholder":42},[115,152014,152015],{"class":117,"line":1732},[115,152016,2400],{"emptyLinePlaceholder":42},[115,152018,152019,152021,152024],{"class":117,"line":1749},[115,152020,31948],{"class":121},[115,152022,152023],{"class":1963}," show_menu",[115,152025,31954],{"class":125},[115,152027,152028,152030,152032,152035],{"class":117,"line":1754},[115,152029,31300],{"class":174},[115,152031,126],{"class":125},[115,152033,152034],{"class":230},"\"====== 学生管理系统 ======\"",[115,152036,132],{"class":125},[115,152038,152039,152041,152043,152046],{"class":117,"line":1759},[115,152040,31300],{"class":174},[115,152042,126],{"class":125},[115,152044,152045],{"class":230},"\"1. 添加学生\"",[115,152047,132],{"class":125},[115,152049,152050,152052,152054,152057],{"class":117,"line":1764},[115,152051,31300],{"class":174},[115,152053,126],{"class":125},[115,152055,152056],{"class":230},"\"2. 删除学生\"",[115,152058,132],{"class":125},[115,152060,152061,152063,152065,152068],{"class":117,"line":1778},[115,152062,31300],{"class":174},[115,152064,126],{"class":125},[115,152066,152067],{"class":230},"\"3. 修改学生\"",[115,152069,132],{"class":125},[115,152071,152072,152074,152076,152079],{"class":117,"line":1783},[115,152073,31300],{"class":174},[115,152075,126],{"class":125},[115,152077,152078],{"class":230},"\"4. 查询学生\"",[115,152080,132],{"class":125},[115,152082,152083,152085,152087,152090],{"class":117,"line":2577},[115,152084,31300],{"class":174},[115,152086,126],{"class":125},[115,152088,152089],{"class":230},"\"5. 显示所有学生\"",[115,152091,132],{"class":125},[115,152093,152094,152096,152098,152101],{"class":117,"line":2591},[115,152095,31300],{"class":174},[115,152097,126],{"class":125},[115,152099,152100],{"class":230},"\"0. 退出系统\"",[115,152102,132],{"class":125},[115,152104,152105],{"class":117,"line":2599},[115,152106,2400],{"emptyLinePlaceholder":42},[115,152108,152109],{"class":117,"line":2604},[115,152110,2400],{"emptyLinePlaceholder":42},[115,152112,152113,152115,152118],{"class":117,"line":2610},[115,152114,31948],{"class":121},[115,152116,152117],{"class":1963}," find_student",[115,152119,152120],{"class":125},"(students, student_id):\n",[115,152122,152123,152125,152128,152130],{"class":117,"line":2616},[115,152124,3201],{"class":121},[115,152126,152127],{"class":125}," student ",[115,152129,26044],{"class":121},[115,152131,152132],{"class":125}," students:\n",[115,152134,152135,152137,152140,152142,152144,152146],{"class":117,"line":2621},[115,152136,2497],{"class":121},[115,152138,152139],{"class":125}," student[",[115,152141,151437],{"class":230},[115,152143,4443],{"class":125},[115,152145,2949],{"class":121},[115,152147,152148],{"class":125}," student_id:\n",[115,152150,152151,152153],{"class":117,"line":7949},[115,152152,15733],{"class":121},[115,152154,152155],{"class":125}," student\n",[115,152157,152158,152160],{"class":117,"line":7973},[115,152159,4090],{"class":121},[115,152161,152162],{"class":174}," None\n",[115,152164,152165],{"class":117,"line":7978},[115,152166,2400],{"emptyLinePlaceholder":42},[115,152168,152169],{"class":117,"line":7984},[115,152170,2400],{"emptyLinePlaceholder":42},[115,152172,152173,152175,152178],{"class":117,"line":8011},[115,152174,31948],{"class":121},[115,152176,152177],{"class":1963}," input_int",[115,152179,152180],{"class":125},"(prompt):\n",[115,152182,152183,152185,152187],{"class":117,"line":8016},[115,152184,2251],{"class":121},[115,152186,95282],{"class":174},[115,152188,3739],{"class":125},[115,152190,152191,152194],{"class":117,"line":8022},[115,152192,152193],{"class":121},"        try",[115,152195,3739],{"class":125},[115,152197,152198,152200,152202,152204,152206],{"class":117,"line":8034},[115,152199,15733],{"class":121},[115,152201,2382],{"class":174},[115,152203,126],{"class":125},[115,152205,53811],{"class":174},[115,152207,152208],{"class":125},"(prompt))\n",[115,152210,152211,152214,152217],{"class":117,"line":8046},[115,152212,152213],{"class":121},"        except",[115,152215,152216],{"class":174}," ValueError",[115,152218,3739],{"class":125},[115,152220,152221,152223,152225,152228],{"class":117,"line":8058},[115,152222,34651],{"class":174},[115,152224,126],{"class":125},[115,152226,152227],{"class":230},"\"请输入整数\"",[115,152229,132],{"class":125},[115,152231,152232],{"class":117,"line":9717},[115,152233,2400],{"emptyLinePlaceholder":42},[115,152235,152236],{"class":117,"line":9742},[115,152237,2400],{"emptyLinePlaceholder":42},[115,152239,152240,152242,152245],{"class":117,"line":9765},[115,152241,31948],{"class":121},[115,152243,152244],{"class":1963}," input_float",[115,152246,152180],{"class":125},[115,152248,152249,152251,152253],{"class":117,"line":9789},[115,152250,2251],{"class":121},[115,152252,95282],{"class":174},[115,152254,3739],{"class":125},[115,152256,152257,152259],{"class":117,"line":9794},[115,152258,152193],{"class":121},[115,152260,3739],{"class":125},[115,152262,152263,152265,152267,152269,152271],{"class":117,"line":9799},[115,152264,15733],{"class":121},[115,152266,109787],{"class":174},[115,152268,126],{"class":125},[115,152270,53811],{"class":174},[115,152272,152208],{"class":125},[115,152274,152275,152277,152279],{"class":117,"line":9804},[115,152276,152213],{"class":121},[115,152278,152216],{"class":174},[115,152280,3739],{"class":125},[115,152282,152283,152285,152287,152290],{"class":117,"line":9813},[115,152284,34651],{"class":174},[115,152286,126],{"class":125},[115,152288,152289],{"class":230},"\"请输入数字\"",[115,152291,132],{"class":125},[115,152293,152294],{"class":117,"line":9818},[115,152295,2400],{"emptyLinePlaceholder":42},[115,152297,152298],{"class":117,"line":9824},[115,152299,2400],{"emptyLinePlaceholder":42},[115,152301,152302,152304,152307],{"class":117,"line":9845},[115,152303,31948],{"class":121},[115,152305,152306],{"class":1963}," add_student",[115,152308,151951],{"class":125},[115,152310,152311,152314,152316,152318,152320,152323],{"class":117,"line":9851},[115,152312,152313],{"class":125},"    student_id ",[115,152315,171],{"class":121},[115,152317,60595],{"class":174},[115,152319,126],{"class":125},[115,152321,152322],{"class":230},"\"请输入学号:\"",[115,152324,132],{"class":125},[115,152326,152327],{"class":117,"line":9865},[115,152328,2400],{"emptyLinePlaceholder":42},[115,152330,152331,152333],{"class":117,"line":9871},[115,152332,3101],{"class":121},[115,152334,152335],{"class":125}," find_student(students, student_id):\n",[115,152337,152338,152340,152342,152345],{"class":117,"line":9898},[115,152339,32452],{"class":174},[115,152341,126],{"class":125},[115,152343,152344],{"class":230},"\"学号已存在\"",[115,152346,132],{"class":125},[115,152348,152349],{"class":117,"line":9907},[115,152350,152351],{"class":121},"        return\n",[115,152353,152354],{"class":117,"line":9913},[115,152355,2400],{"emptyLinePlaceholder":42},[115,152357,152358,152361,152363,152365,152367,152370],{"class":117,"line":9921},[115,152359,152360],{"class":125},"    name ",[115,152362,171],{"class":121},[115,152364,60595],{"class":174},[115,152366,126],{"class":125},[115,152368,152369],{"class":230},"\"请输入姓名:\"",[115,152371,132],{"class":125},[115,152373,152374,152377,152379,152382,152385],{"class":117,"line":9926},[115,152375,152376],{"class":125},"    age ",[115,152378,171],{"class":121},[115,152380,152381],{"class":125}," input_int(",[115,152383,152384],{"class":230},"\"请输入年龄:\"",[115,152386,132],{"class":125},[115,152388,152389,152392,152394,152397,152400],{"class":117,"line":16605},[115,152390,152391],{"class":125},"    score ",[115,152393,171],{"class":121},[115,152395,152396],{"class":125}," input_float(",[115,152398,152399],{"class":230},"\"请输入成绩:\"",[115,152401,132],{"class":125},[115,152403,152404],{"class":117,"line":16611},[115,152405,2400],{"emptyLinePlaceholder":42},[115,152407,152408],{"class":117,"line":16634},[115,152409,152410],{"class":125},"    students.append({\n",[115,152412,152413,152416],{"class":117,"line":16640},[115,152414,152415],{"class":230},"        \"student_id\"",[115,152417,152418],{"class":125},": student_id,\n",[115,152420,152421,152424],{"class":117,"line":16663},[115,152422,152423],{"class":230},"        \"name\"",[115,152425,152426],{"class":125},": name,\n",[115,152428,152429,152432],{"class":117,"line":16677},[115,152430,152431],{"class":230},"        \"age\"",[115,152433,152434],{"class":125},": age,\n",[115,152436,152437,152440],{"class":117,"line":16697},[115,152438,152439],{"class":230},"        \"score\"",[115,152441,152442],{"class":125},": score,\n",[115,152444,152445],{"class":117,"line":16703},[115,152446,33462],{"class":125},[115,152448,152449],{"class":117,"line":16714},[115,152450,152451],{"class":125},"    save_students(students)\n",[115,152453,152454,152456,152458,152461],{"class":117,"line":16737},[115,152455,31300],{"class":174},[115,152457,126],{"class":125},[115,152459,152460],{"class":230},"\"添加成功\"",[115,152462,132],{"class":125},[115,152464,152465],{"class":117,"line":16759},[115,152466,2400],{"emptyLinePlaceholder":42},[115,152468,152469],{"class":117,"line":16764},[115,152470,2400],{"emptyLinePlaceholder":42},[115,152472,152473,152475,152478],{"class":117,"line":16770},[115,152474,31948],{"class":121},[115,152476,152477],{"class":1963}," delete_student",[115,152479,151951],{"class":125},[115,152481,152482,152484,152486,152488,152490,152493],{"class":117,"line":16784},[115,152483,152313],{"class":125},[115,152485,171],{"class":121},[115,152487,60595],{"class":174},[115,152489,126],{"class":125},[115,152491,152492],{"class":230},"\"请输入要删除的学号:\"",[115,152494,132],{"class":125},[115,152496,152497,152500,152502],{"class":117,"line":16797},[115,152498,152499],{"class":125},"    student ",[115,152501,171],{"class":121},[115,152503,152504],{"class":125}," find_student(students, student_id)\n",[115,152506,152507],{"class":117,"line":16802},[115,152508,2400],{"emptyLinePlaceholder":42},[115,152510,152511,152513,152515,152517,152519],{"class":117,"line":16816},[115,152512,3101],{"class":121},[115,152514,152127],{"class":125},[115,152516,38928],{"class":121},[115,152518,38934],{"class":174},[115,152520,3739],{"class":125},[115,152522,152523,152525,152527,152530],{"class":117,"line":16821},[115,152524,32452],{"class":174},[115,152526,126],{"class":125},[115,152528,152529],{"class":230},"\"学生不存在\"",[115,152531,132],{"class":125},[115,152533,152534],{"class":117,"line":16827},[115,152535,152351],{"class":121},[115,152537,152538],{"class":117,"line":16832},[115,152539,2400],{"emptyLinePlaceholder":42},[115,152541,152542],{"class":117,"line":16846},[115,152543,152544],{"class":125},"    students.remove(student)\n",[115,152546,152547],{"class":117,"line":16851},[115,152548,152451],{"class":125},[115,152550,152551,152553,152555,152558],{"class":117,"line":16856},[115,152552,31300],{"class":174},[115,152554,126],{"class":125},[115,152556,152557],{"class":230},"\"删除成功\"",[115,152559,132],{"class":125},[115,152561,152562],{"class":117,"line":16870},[115,152563,2400],{"emptyLinePlaceholder":42},[115,152565,152566],{"class":117,"line":16882},[115,152567,2400],{"emptyLinePlaceholder":42},[115,152569,152570,152572,152575],{"class":117,"line":16887},[115,152571,31948],{"class":121},[115,152573,152574],{"class":1963}," update_student",[115,152576,151951],{"class":125},[115,152578,152579,152581,152583,152585,152587,152590],{"class":117,"line":16900},[115,152580,152313],{"class":125},[115,152582,171],{"class":121},[115,152584,60595],{"class":174},[115,152586,126],{"class":125},[115,152588,152589],{"class":230},"\"请输入要修改的学号:\"",[115,152591,132],{"class":125},[115,152593,152594,152596,152598],{"class":117,"line":16905},[115,152595,152499],{"class":125},[115,152597,171],{"class":121},[115,152599,152504],{"class":125},[115,152601,152602],{"class":117,"line":16910},[115,152603,2400],{"emptyLinePlaceholder":42},[115,152605,152606,152608,152610,152612,152614],{"class":117,"line":16915},[115,152607,3101],{"class":121},[115,152609,152127],{"class":125},[115,152611,38928],{"class":121},[115,152613,38934],{"class":174},[115,152615,3739],{"class":125},[115,152617,152618,152620,152622,152624],{"class":117,"line":16928},[115,152619,32452],{"class":174},[115,152621,126],{"class":125},[115,152623,152529],{"class":230},[115,152625,132],{"class":125},[115,152627,152628],{"class":117,"line":16933},[115,152629,152351],{"class":121},[115,152631,152632],{"class":117,"line":32634},[115,152633,2400],{"emptyLinePlaceholder":42},[115,152635,152636,152638,152640,152642,152644,152647],{"class":117,"line":32640},[115,152637,152360],{"class":125},[115,152639,171],{"class":121},[115,152641,60595],{"class":174},[115,152643,126],{"class":125},[115,152645,152646],{"class":230},"\"请输入新姓名:\"",[115,152648,132],{"class":125},[115,152650,152651,152653,152655,152657,152660],{"class":117,"line":32646},[115,152652,152376],{"class":125},[115,152654,171],{"class":121},[115,152656,152381],{"class":125},[115,152658,152659],{"class":230},"\"请输入新年龄:\"",[115,152661,132],{"class":125},[115,152663,152664,152666,152668,152670,152673],{"class":117,"line":32652},[115,152665,152391],{"class":125},[115,152667,171],{"class":121},[115,152669,152396],{"class":125},[115,152671,152672],{"class":230},"\"请输入新成绩:\"",[115,152674,132],{"class":125},[115,152676,152677],{"class":117,"line":32658},[115,152678,2400],{"emptyLinePlaceholder":42},[115,152680,152681,152684,152686,152688,152690],{"class":117,"line":32669},[115,152682,152683],{"class":125},"    student[",[115,152685,62669],{"class":230},[115,152687,4443],{"class":125},[115,152689,171],{"class":121},[115,152691,149785],{"class":125},[115,152693,152694,152696,152698,152700,152702],{"class":117,"line":32675},[115,152695,152683],{"class":125},[115,152697,69114],{"class":230},[115,152699,4443],{"class":125},[115,152701,171],{"class":121},[115,152703,149797],{"class":125},[115,152705,152706,152708,152710,152712,152714],{"class":117,"line":32695},[115,152707,152683],{"class":125},[115,152709,151462],{"class":230},[115,152711,4443],{"class":125},[115,152713,171],{"class":121},[115,152715,1579],{"class":125},[115,152717,152718],{"class":117,"line":32701},[115,152719,2400],{"emptyLinePlaceholder":42},[115,152721,152722],{"class":117,"line":32712},[115,152723,152451],{"class":125},[115,152725,152726,152728,152730,152733],{"class":117,"line":32718},[115,152727,31300],{"class":174},[115,152729,126],{"class":125},[115,152731,152732],{"class":230},"\"修改成功\"",[115,152734,132],{"class":125},[115,152736,152737],{"class":117,"line":32724},[115,152738,2400],{"emptyLinePlaceholder":42},[115,152740,152741],{"class":117,"line":32730},[115,152742,2400],{"emptyLinePlaceholder":42},[115,152744,152745,152747,152750],{"class":117,"line":32736},[115,152746,31948],{"class":121},[115,152748,152749],{"class":1963}," query_student",[115,152751,151951],{"class":125},[115,152753,152754,152756,152758,152760,152762,152765],{"class":117,"line":32742},[115,152755,152313],{"class":125},[115,152757,171],{"class":121},[115,152759,60595],{"class":174},[115,152761,126],{"class":125},[115,152763,152764],{"class":230},"\"请输入要查询的学号:\"",[115,152766,132],{"class":125},[115,152768,152769,152771,152773],{"class":117,"line":32748},[115,152770,152499],{"class":125},[115,152772,171],{"class":121},[115,152774,152504],{"class":125},[115,152776,152777],{"class":117,"line":32754},[115,152778,2400],{"emptyLinePlaceholder":42},[115,152780,152781,152783,152785,152787,152789],{"class":117,"line":32774},[115,152782,3101],{"class":121},[115,152784,152127],{"class":125},[115,152786,38928],{"class":121},[115,152788,38934],{"class":174},[115,152790,3739],{"class":125},[115,152792,152793,152795,152797,152799],{"class":117,"line":32780},[115,152794,32452],{"class":174},[115,152796,126],{"class":125},[115,152798,152529],{"class":230},[115,152800,132],{"class":125},[115,152802,152803],{"class":117,"line":32796},[115,152804,152351],{"class":121},[115,152806,152807],{"class":117,"line":32802},[115,152808,2400],{"emptyLinePlaceholder":42},[115,152810,152811],{"class":117,"line":32816},[115,152812,152813],{"class":125},"    print_student(student)\n",[115,152815,152816],{"class":117,"line":32822},[115,152817,2400],{"emptyLinePlaceholder":42},[115,152819,152820],{"class":117,"line":32837},[115,152821,2400],{"emptyLinePlaceholder":42},[115,152823,152824,152826,152829],{"class":117,"line":32843},[115,152825,31948],{"class":121},[115,152827,152828],{"class":1963}," print_student",[115,152830,152831],{"class":125},"(student):\n",[115,152833,152834,152836],{"class":117,"line":32852},[115,152835,31300],{"class":174},[115,152837,151429],{"class":125},[115,152839,152840,152843,152845,152847,152850,152853,152855,152858],{"class":117,"line":32858},[115,152841,152842],{"class":121},"        f",[115,152844,376],{"class":230},[115,152846,1021],{"class":174},[115,152848,152849],{"class":125},"student[",[115,152851,152852],{"class":230},"'student_id'",[115,152854,1065],{"class":125},[115,152856,152857],{"class":174},"}\\t",[115,152859,25134],{"class":230},[115,152861,152862,152864,152866,152868,152870,152873,152875,152877],{"class":117,"line":32867},[115,152863,152842],{"class":121},[115,152865,376],{"class":230},[115,152867,1021],{"class":174},[115,152869,152849],{"class":125},[115,152871,152872],{"class":230},"'name'",[115,152874,1065],{"class":125},[115,152876,152857],{"class":174},[115,152878,25134],{"class":230},[115,152880,152881,152883,152885,152887,152889,152892,152894,152896],{"class":117,"line":32873},[115,152882,152842],{"class":121},[115,152884,376],{"class":230},[115,152886,1021],{"class":174},[115,152888,152849],{"class":125},[115,152890,152891],{"class":230},"'age'",[115,152893,1065],{"class":125},[115,152895,152857],{"class":174},[115,152897,25134],{"class":230},[115,152899,152900,152902,152904,152906,152908,152911,152913,152915],{"class":117,"line":32879},[115,152901,152842],{"class":121},[115,152903,376],{"class":230},[115,152905,1021],{"class":174},[115,152907,152849],{"class":125},[115,152909,152910],{"class":230},"'score'",[115,152912,1065],{"class":125},[115,152914,1071],{"class":174},[115,152916,25134],{"class":230},[115,152918,152919],{"class":117,"line":32888},[115,152920,152921],{"class":125},"    )\n",[115,152923,152924],{"class":117,"line":32894},[115,152925,2400],{"emptyLinePlaceholder":42},[115,152927,152928],{"class":117,"line":32905},[115,152929,2400],{"emptyLinePlaceholder":42},[115,152931,152932,152934,152937],{"class":117,"line":32911},[115,152933,31948],{"class":121},[115,152935,152936],{"class":1963}," show_all_students",[115,152938,151951],{"class":125},[115,152940,152941,152943,152945],{"class":117,"line":32930},[115,152942,3101],{"class":121},[115,152944,38931],{"class":121},[115,152946,152132],{"class":125},[115,152948,152949,152951,152953,152956],{"class":117,"line":32936},[115,152950,32452],{"class":174},[115,152952,126],{"class":125},[115,152954,152955],{"class":230},"\"暂无学生\"",[115,152957,132],{"class":125},[115,152959,152960],{"class":117,"line":32947},[115,152961,152351],{"class":121},[115,152963,152964],{"class":117,"line":32953},[115,152965,2400],{"emptyLinePlaceholder":42},[115,152967,152968,152970,152972,152975,152977,152980,152982,152985,152987,152990],{"class":117,"line":32973},[115,152969,31300],{"class":174},[115,152971,126],{"class":125},[115,152973,152974],{"class":230},"\"学号",[115,152976,1231],{"class":174},[115,152978,152979],{"class":230},"姓名",[115,152981,1231],{"class":174},[115,152983,152984],{"class":230},"年龄",[115,152986,1231],{"class":174},[115,152988,152989],{"class":230},"成绩\"",[115,152991,132],{"class":125},[115,152993,152994,152996,152998,153000],{"class":117,"line":32989},[115,152995,3201],{"class":121},[115,152997,152127],{"class":125},[115,152999,26044],{"class":121},[115,153001,152132],{"class":125},[115,153003,153004],{"class":117,"line":32995},[115,153005,153006],{"class":125},"        print_student(student)\n",[115,153008,153009],{"class":117,"line":33009},[115,153010,2400],{"emptyLinePlaceholder":42},[115,153012,153013],{"class":117,"line":33015},[115,153014,2400],{"emptyLinePlaceholder":42},[115,153016,153017,153019,153021],{"class":117,"line":33021},[115,153018,31948],{"class":121},[115,153020,1973],{"class":1963},[115,153022,31954],{"class":125},[115,153024,153025,153028,153030],{"class":117,"line":33032},[115,153026,153027],{"class":125},"    students ",[115,153029,171],{"class":121},[115,153031,153032],{"class":125}," load_students()\n",[115,153034,153035],{"class":117,"line":33038},[115,153036,2400],{"emptyLinePlaceholder":42},[115,153038,153039,153041,153043],{"class":117,"line":33044},[115,153040,2251],{"class":121},[115,153042,95282],{"class":174},[115,153044,3739],{"class":125},[115,153046,153047],{"class":117,"line":33054},[115,153048,153049],{"class":125},"        show_menu()\n",[115,153051,153052,153055,153057,153059,153061,153064],{"class":117,"line":33060},[115,153053,153054],{"class":125},"        choice ",[115,153056,171],{"class":121},[115,153058,60595],{"class":174},[115,153060,126],{"class":125},[115,153062,153063],{"class":230},"\"请输入操作:\"",[115,153065,132],{"class":125},[115,153067,153068],{"class":117,"line":33071},[115,153069,2400],{"emptyLinePlaceholder":42},[115,153071,153072,153074,153077,153079,153082],{"class":117,"line":33077},[115,153073,2497],{"class":121},[115,153075,153076],{"class":125}," choice ",[115,153078,2949],{"class":121},[115,153080,153081],{"class":230}," \"1\"",[115,153083,3739],{"class":125},[115,153085,153086],{"class":117,"line":33087},[115,153087,153088],{"class":125},"            add_student(students)\n",[115,153090,153091,153094,153096,153098,153101],{"class":117,"line":33092},[115,153092,153093],{"class":121},"        elif",[115,153095,153076],{"class":125},[115,153097,2949],{"class":121},[115,153099,153100],{"class":230}," \"2\"",[115,153102,3739],{"class":125},[115,153104,153105],{"class":117,"line":33098},[115,153106,153107],{"class":125},"            delete_student(students)\n",[115,153109,153110,153112,153114,153116,153119],{"class":117,"line":33147},[115,153111,153093],{"class":121},[115,153113,153076],{"class":125},[115,153115,2949],{"class":121},[115,153117,153118],{"class":230}," \"3\"",[115,153120,3739],{"class":125},[115,153122,153123],{"class":117,"line":33194},[115,153124,153125],{"class":125},"            update_student(students)\n",[115,153127,153128,153130,153132,153134,153137],{"class":117,"line":33199},[115,153129,153093],{"class":121},[115,153131,153076],{"class":125},[115,153133,2949],{"class":121},[115,153135,153136],{"class":230}," \"4\"",[115,153138,3739],{"class":125},[115,153140,153141],{"class":117,"line":33205},[115,153142,153143],{"class":125},"            query_student(students)\n",[115,153145,153146,153148,153150,153152,153155],{"class":117,"line":33224},[115,153147,153093],{"class":121},[115,153149,153076],{"class":125},[115,153151,2949],{"class":121},[115,153153,153154],{"class":230}," \"5\"",[115,153156,3739],{"class":125},[115,153158,153159],{"class":117,"line":33230},[115,153160,153161],{"class":125},"            show_all_students(students)\n",[115,153163,153164,153166,153168,153170,153173],{"class":117,"line":33250},[115,153165,153093],{"class":121},[115,153167,153076],{"class":125},[115,153169,2949],{"class":121},[115,153171,153172],{"class":230}," \"0\"",[115,153174,3739],{"class":125},[115,153176,153177,153179,153181,153184],{"class":117,"line":33256},[115,153178,34651],{"class":174},[115,153180,126],{"class":125},[115,153182,153183],{"class":230},"\"退出系统\"",[115,153185,132],{"class":125},[115,153187,153188],{"class":117,"line":33262},[115,153189,115088],{"class":121},[115,153191,153192,153194],{"class":117,"line":33272},[115,153193,2534],{"class":121},[115,153195,3739],{"class":125},[115,153197,153198,153200,153202,153205],{"class":117,"line":33277},[115,153199,34651],{"class":174},[115,153201,126],{"class":125},[115,153203,153204],{"class":230},"\"输入错误\"",[115,153206,132],{"class":125},[115,153208,153209],{"class":117,"line":33283},[115,153210,2400],{"emptyLinePlaceholder":42},[115,153212,153213],{"class":117,"line":33299},[115,153214,2400],{"emptyLinePlaceholder":42},[115,153216,153217,153219,153221,153223,153225],{"class":117,"line":33344},[115,153218,1531],{"class":121},[115,153220,31221],{"class":174},[115,153222,101549],{"class":121},[115,153224,101552],{"class":230},[115,153226,3739],{"class":125},[115,153228,153229],{"class":117,"line":33350},[115,153230,101559],{"class":125},[14,153232,153233],{},"这个项目串联了：",[69,153235,153236,153239,153242,153245,153248,153250],{},[72,153237,153238],{},"菜单循环。",[72,153240,153241],{},"函数封装。",[72,153243,153244],{},"列表字典。",[72,153246,153247],{},"JSON 读写。",[72,153249,151717],{},[72,153251,153252,28386],{},[112,153253,153254],{},"if __name__ == \"__main__\"",[57,153256,153258],{"id":153257},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153260,153261],{},"可以进一步拆成两个类：",[69,153263,153264,153269],{},[72,153265,153266,153268],{},[112,153267,149558],{},"：表示单个学生。",[72,153270,153271,153273],{},[112,153272,151584],{},"：负责学生增删改查和文件保存。",[14,153275,153276],{},"示意代码：",[106,153278,153280],{"className":30379,"code":153279,"language":30381,"meta":22,"style":22},"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",[112,153281,153282,153292,153296,153300,153304,153312,153319,153325,153331,153337,153341,153349,153355,153365,153375,153385,153395,153399,153403,153409,153417,153425,153433,153441,153449,153457],{"__ignoreMap":22},[115,153283,153284,153286,153288,153290],{"class":117,"line":118},[115,153285,30738],{"class":121},[115,153287,151142],{"class":125},[115,153289,30393],{"class":121},[115,153291,151147],{"class":125},[115,153293,153294],{"class":117,"line":37},[115,153295,2400],{"emptyLinePlaceholder":42},[115,153297,153298],{"class":117,"line":1180},[115,153299,2400],{"emptyLinePlaceholder":42},[115,153301,153302],{"class":117,"line":1195},[115,153303,151160],{"class":1963},[115,153305,153306,153308,153310],{"class":117,"line":1201},[115,153307,14695],{"class":121},[115,153309,7899],{"class":1963},[115,153311,3739],{"class":125},[115,153313,153314,153317],{"class":117,"line":1215},[115,153315,153316],{"class":125},"    student_id: ",[115,153318,151176],{"class":174},[115,153320,153321,153323],{"class":117,"line":1221},[115,153322,151173],{"class":125},[115,153324,151176],{"class":174},[115,153326,153327,153329],{"class":117,"line":1312},[115,153328,151181],{"class":125},[115,153330,151184],{"class":174},[115,153332,153333,153335],{"class":117,"line":1318},[115,153334,151189],{"class":125},[115,153336,151192],{"class":174},[115,153338,153339],{"class":117,"line":1330},[115,153340,2400],{"emptyLinePlaceholder":42},[115,153342,153343,153345,153347],{"class":117,"line":1612},[115,153344,30802],{"class":121},[115,153346,151340],{"class":1963},[115,153348,30808],{"class":125},[115,153350,153351,153353],{"class":117,"line":1617},[115,153352,14753],{"class":121},[115,153354,15573],{"class":125},[115,153356,153357,153359,153361,153363],{"class":117,"line":1623},[115,153358,151353],{"class":230},[115,153360,51427],{"class":125},[115,153362,30824],{"class":174},[115,153364,151360],{"class":125},[115,153366,153367,153369,153371,153373],{"class":117,"line":1628},[115,153368,151365],{"class":230},[115,153370,51427],{"class":125},[115,153372,30824],{"class":174},[115,153374,151372],{"class":125},[115,153376,153377,153379,153381,153383],{"class":117,"line":1642},[115,153378,151377],{"class":230},[115,153380,51427],{"class":125},[115,153382,30824],{"class":174},[115,153384,151384],{"class":125},[115,153386,153387,153389,153391,153393],{"class":117,"line":1647},[115,153388,151389],{"class":230},[115,153390,51427],{"class":125},[115,153392,30824],{"class":174},[115,153394,151396],{"class":125},[115,153396,153397],{"class":117,"line":1653},[115,153398,2529],{"class":125},[115,153400,153401],{"class":117,"line":1674},[115,153402,2400],{"emptyLinePlaceholder":42},[115,153404,153405,153407],{"class":117,"line":1679},[115,153406,151004],{"class":1963},[115,153408,151007],{"class":174},[115,153410,153411,153413,153415],{"class":117,"line":1693},[115,153412,30802],{"class":121},[115,153414,151417],{"class":1963},[115,153416,151420],{"class":125},[115,153418,153419,153421,153423],{"class":117,"line":1698},[115,153420,14753],{"class":121},[115,153422,151024],{"class":174},[115,153424,151429],{"class":125},[115,153426,153427,153429,153431],{"class":117,"line":1727},[115,153428,151434],{"class":125},[115,153430,151437],{"class":230},[115,153432,87826],{"class":125},[115,153434,153435,153437,153439],{"class":117,"line":1732},[115,153436,151434],{"class":125},[115,153438,62669],{"class":230},[115,153440,87826],{"class":125},[115,153442,153443,153445,153447],{"class":117,"line":1749},[115,153444,151434],{"class":125},[115,153446,69114],{"class":230},[115,153448,87826],{"class":125},[115,153450,153451,153453,153455],{"class":117,"line":1754},[115,153452,151434],{"class":125},[115,153454,151462],{"class":230},[115,153456,87826],{"class":125},[115,153458,153459],{"class":117,"line":1759},[115,153460,38127],{"class":125},[14,153462,153463],{},"管理器示意：",[106,153465,153467],{"className":30379,"code":153466,"language":30381,"meta":22,"style":22},"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",[112,153468,153469,153478,153486,153497,153501,153511,153524,153535,153542,153548,153552,153561,153570,153576,153583],{"__ignoreMap":22},[115,153470,153471,153473,153476],{"class":117,"line":118},[115,153472,14695],{"class":121},[115,153474,153475],{"class":1963}," StudentManager",[115,153477,3739],{"class":125},[115,153479,153480,153482,153484],{"class":117,"line":37},[115,153481,30802],{"class":121},[115,153483,30805],{"class":174},[115,153485,30808],{"class":125},[115,153487,153488,153490,153493,153495],{"class":117,"line":1180},[115,153489,30846],{"class":174},[115,153491,153492],{"class":125},".students ",[115,153494,171],{"class":121},[115,153496,51828],{"class":125},[115,153498,153499],{"class":117,"line":1195},[115,153500,2400],{"emptyLinePlaceholder":42},[115,153502,153503,153505,153508],{"class":117,"line":1201},[115,153504,30802],{"class":121},[115,153506,153507],{"class":1963}," find_by_id",[115,153509,153510],{"class":125},"(self, student_id):\n",[115,153512,153513,153515,153517,153519,153521],{"class":117,"line":1215},[115,153514,3403],{"class":121},[115,153516,152127],{"class":125},[115,153518,26044],{"class":121},[115,153520,38874],{"class":174},[115,153522,153523],{"class":125},".students:\n",[115,153525,153526,153528,153531,153533],{"class":117,"line":1221},[115,153527,4642],{"class":121},[115,153529,153530],{"class":125}," student.student_id ",[115,153532,2949],{"class":121},[115,153534,152148],{"class":125},[115,153536,153537,153540],{"class":117,"line":1312},[115,153538,153539],{"class":121},"                return",[115,153541,152155],{"class":125},[115,153543,153544,153546],{"class":117,"line":1318},[115,153545,14753],{"class":121},[115,153547,152162],{"class":174},[115,153549,153550],{"class":117,"line":1330},[115,153551,2400],{"emptyLinePlaceholder":42},[115,153553,153554,153556,153558],{"class":117,"line":1612},[115,153555,30802],{"class":121},[115,153557,5210],{"class":1963},[115,153559,153560],{"class":125},"(self, student):\n",[115,153562,153563,153565,153567],{"class":117,"line":1617},[115,153564,2497],{"class":121},[115,153566,38874],{"class":174},[115,153568,153569],{"class":125},".find_by_id(student.student_id):\n",[115,153571,153572,153574],{"class":117,"line":1623},[115,153573,15733],{"class":121},[115,153575,125797],{"class":174},[115,153577,153578,153580],{"class":117,"line":1628},[115,153579,30846],{"class":174},[115,153581,153582],{"class":125},".students.append(student)\n",[115,153584,153585,153587],{"class":117,"line":1642},[115,153586,14753],{"class":121},[115,153588,153589],{"class":174}," True\n",[14,153591,153592],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[57,153594,153596],{"id":153595},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[86,153598,153600],{"id":153599},"_1251-数据结构","12.5.1 数据结构",[106,153602,153604],{"className":30379,"code":153603,"language":30381,"meta":22,"style":22},"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",[112,153605,153606,153614,153645,153675,153704,153733],{"__ignoreMap":22},[115,153607,153608,153610,153612],{"class":117,"line":118},[115,153609,148455],{"class":125},[115,153611,171],{"class":121},[115,153613,55437],{"class":125},[115,153615,153616,153618,153620,153622,153624,153626,153629,153631,153634,153636,153638,153640,153643],{"class":117,"line":37},[115,153617,148375],{"class":125},[115,153619,147987],{"class":230},[115,153621,51427],{"class":125},[115,153623,148598],{"class":230},[115,153625,12436],{"class":125},[115,153627,153628],{"class":230},"\"category\"",[115,153630,51427],{"class":125},[115,153632,153633],{"class":230},"\"手机\"",[115,153635,12436],{"class":125},[115,153637,84074],{"class":230},[115,153639,51427],{"class":125},[115,153641,153642],{"class":174},"12000",[115,153644,4930],{"class":125},[115,153646,153647,153649,153651,153653,153655,153657,153659,153661,153664,153666,153668,153670,153673],{"class":117,"line":1180},[115,153648,148375],{"class":125},[115,153650,147987],{"class":230},[115,153652,51427],{"class":125},[115,153654,148598],{"class":230},[115,153656,12436],{"class":125},[115,153658,153628],{"class":230},[115,153660,51427],{"class":125},[115,153662,153663],{"class":230},"\"电脑\"",[115,153665,12436],{"class":125},[115,153667,84074],{"class":230},[115,153669,51427],{"class":125},[115,153671,153672],{"class":174},"18000",[115,153674,4930],{"class":125},[115,153676,153677,153679,153681,153683,153685,153687,153689,153691,153693,153695,153697,153699,153702],{"class":117,"line":1195},[115,153678,148375],{"class":125},[115,153680,147987],{"class":230},[115,153682,51427],{"class":125},[115,153684,148619],{"class":230},[115,153686,12436],{"class":125},[115,153688,153628],{"class":230},[115,153690,51427],{"class":125},[115,153692,153633],{"class":230},[115,153694,12436],{"class":125},[115,153696,84074],{"class":230},[115,153698,51427],{"class":125},[115,153700,153701],{"class":174},"15000",[115,153703,4930],{"class":125},[115,153705,153706,153708,153710,153712,153714,153716,153718,153720,153722,153724,153726,153728,153731],{"class":117,"line":1201},[115,153707,148375],{"class":125},[115,153709,147987],{"class":230},[115,153711,51427],{"class":125},[115,153713,148619],{"class":230},[115,153715,12436],{"class":125},[115,153717,153628],{"class":230},[115,153719,51427],{"class":125},[115,153721,153663],{"class":230},[115,153723,12436],{"class":125},[115,153725,84074],{"class":230},[115,153727,51427],{"class":125},[115,153729,153730],{"class":174},"16000",[115,153732,4930],{"class":125},[115,153734,153735],{"class":117,"line":1215},[115,153736,33247],{"class":125},[86,153738,153740],{"id":153739},"_1252-按日期统计","12.5.2 按日期统计",[106,153742,153744],{"className":30379,"code":153743,"language":30381,"meta":22,"style":22},"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",[112,153745,153746,153755,153759,153770,153784,153797,153816,153820],{"__ignoreMap":22},[115,153747,153748,153751,153753],{"class":117,"line":118},[115,153749,153750],{"class":125},"daily_total ",[115,153752,171],{"class":121},[115,153754,87858],{"class":125},[115,153756,153757],{"class":117,"line":37},[115,153758,2400],{"emptyLinePlaceholder":42},[115,153760,153761,153763,153765,153767],{"class":117,"line":1180},[115,153762,3025],{"class":121},[115,153764,148199],{"class":125},[115,153766,26044],{"class":121},[115,153768,153769],{"class":125}," sales:\n",[115,153771,153772,153775,153777,153780,153782],{"class":117,"line":1195},[115,153773,153774],{"class":125},"    date ",[115,153776,171],{"class":121},[115,153778,153779],{"class":125}," item[",[115,153781,147987],{"class":230},[115,153783,33247],{"class":125},[115,153785,153786,153789,153791,153793,153795],{"class":117,"line":1201},[115,153787,153788],{"class":125},"    amount ",[115,153790,171],{"class":121},[115,153792,153779],{"class":125},[115,153794,84074],{"class":230},[115,153796,33247],{"class":125},[115,153798,153799,153802,153804,153807,153809,153811,153813],{"class":117,"line":1215},[115,153800,153801],{"class":125},"    daily_total[date] ",[115,153803,171],{"class":121},[115,153805,153806],{"class":125}," daily_total.get(date, ",[115,153808,317],{"class":174},[115,153810,13715],{"class":125},[115,153812,606],{"class":121},[115,153814,153815],{"class":125}," amount\n",[115,153817,153818],{"class":117,"line":1221},[115,153819,2400],{"emptyLinePlaceholder":42},[115,153821,153822,153824],{"class":117,"line":1312},[115,153823,30416],{"class":174},[115,153825,153826],{"class":125},"(daily_total)\n",[86,153828,153830],{"id":153829},"_1253-按类别统计","12.5.3 按类别统计",[106,153832,153834],{"className":30379,"code":153833,"language":30381,"meta":22,"style":22},"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",[112,153835,153836,153845,153849,153859,153872,153884,153902,153906],{"__ignoreMap":22},[115,153837,153838,153841,153843],{"class":117,"line":118},[115,153839,153840],{"class":125},"category_total ",[115,153842,171],{"class":121},[115,153844,87858],{"class":125},[115,153846,153847],{"class":117,"line":37},[115,153848,2400],{"emptyLinePlaceholder":42},[115,153850,153851,153853,153855,153857],{"class":117,"line":1180},[115,153852,3025],{"class":121},[115,153854,148199],{"class":125},[115,153856,26044],{"class":121},[115,153858,153769],{"class":125},[115,153860,153861,153864,153866,153868,153870],{"class":117,"line":1195},[115,153862,153863],{"class":125},"    category ",[115,153865,171],{"class":121},[115,153867,153779],{"class":125},[115,153869,153628],{"class":230},[115,153871,33247],{"class":125},[115,153873,153874,153876,153878,153880,153882],{"class":117,"line":1201},[115,153875,153788],{"class":125},[115,153877,171],{"class":121},[115,153879,153779],{"class":125},[115,153881,84074],{"class":230},[115,153883,33247],{"class":125},[115,153885,153886,153889,153891,153894,153896,153898,153900],{"class":117,"line":1215},[115,153887,153888],{"class":125},"    category_total[category] ",[115,153890,171],{"class":121},[115,153892,153893],{"class":125}," category_total.get(category, ",[115,153895,317],{"class":174},[115,153897,13715],{"class":125},[115,153899,606],{"class":121},[115,153901,153815],{"class":125},[115,153903,153904],{"class":117,"line":1221},[115,153905,2400],{"emptyLinePlaceholder":42},[115,153907,153908,153910],{"class":117,"line":1312},[115,153909,30416],{"class":174},[115,153911,153912],{"class":125},"(category_total)\n",[86,153914,153916],{"id":153915},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[106,153918,153920],{"className":30379,"code":153919,"language":30381,"meta":22,"style":22},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[112,153921,153922,153947],{"__ignoreMap":22},[115,153923,153924,153927,153929,153931,153934,153937,153940,153943,153945],{"class":117,"line":118},[115,153925,153926],{"class":125},"top_date, top_amount ",[115,153928,171],{"class":121},[115,153930,5952],{"class":174},[115,153932,153933],{"class":125},"(daily_total.items(), ",[115,153935,153936],{"class":5217},"key",[115,153938,153939],{"class":121},"=lambda",[115,153941,153942],{"class":125}," item: item[",[115,153944,343],{"class":174},[115,153946,4657],{"class":125},[115,153948,153949,153951],{"class":117,"line":37},[115,153950,30416],{"class":174},[115,153952,153953],{"class":125},"(top_date, top_amount)\n",[57,153955,153957],{"id":153956},"_126-绘制柱状图","12.6 绘制柱状图",[106,153959,153961],{"className":30379,"code":153960,"language":30381,"meta":22,"style":22},"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",[112,153962,153963,153977,153988,153992,154000,154012,154024,154035,154039,154043,154053,154064,154078,154083,154100,154117,154133,154137],{"__ignoreMap":22},[115,153964,153965,153967,153969,153971,153973,153975],{"class":117,"line":118},[115,153966,30738],{"class":121},[115,153968,147369],{"class":125},[115,153970,30393],{"class":121},[115,153972,147374],{"class":125},[115,153974,31384],{"class":121},[115,153976,147379],{"class":125},[115,153978,153979,153981,153983,153985],{"class":117,"line":37},[115,153980,30738],{"class":121},[115,153982,147228],{"class":125},[115,153984,30393],{"class":121},[115,153986,153987],{"class":125}," Bar\n",[115,153989,153990],{"class":117,"line":1180},[115,153991,2400],{"emptyLinePlaceholder":42},[115,153993,153994,153996,153998],{"class":117,"line":1195},[115,153995,153840],{"class":125},[115,153997,171],{"class":121},[115,153999,15573],{"class":125},[115,154001,154002,154005,154007,154010],{"class":117,"line":1201},[115,154003,154004],{"class":230},"    \"手机\"",[115,154006,51427],{"class":125},[115,154008,154009],{"class":174},"27000",[115,154011,31467],{"class":125},[115,154013,154014,154017,154019,154022],{"class":117,"line":1215},[115,154015,154016],{"class":230},"    \"电脑\"",[115,154018,51427],{"class":125},[115,154020,154021],{"class":174},"34000",[115,154023,31467],{"class":125},[115,154025,154026,154029,154031,154033],{"class":117,"line":1221},[115,154027,154028],{"class":230},"    \"耳机\"",[115,154030,51427],{"class":125},[115,154032,124389],{"class":174},[115,154034,31467],{"class":125},[115,154036,154037],{"class":117,"line":1312},[115,154038,1565],{"class":125},[115,154040,154041],{"class":117,"line":1318},[115,154042,2400],{"emptyLinePlaceholder":42},[115,154044,154045,154048,154050],{"class":117,"line":1330},[115,154046,154047],{"class":125},"bar ",[115,154049,171],{"class":121},[115,154051,154052],{"class":125}," Bar()\n",[115,154054,154055,154058,154061],{"class":117,"line":1612},[115,154056,154057],{"class":125},"bar.add_xaxis(",[115,154059,154060],{"class":174},"list",[115,154062,154063],{"class":125},"(category_total.keys()))\n",[115,154065,154066,154069,154071,154073,154075],{"class":117,"line":1617},[115,154067,154068],{"class":125},"bar.add_yaxis(",[115,154070,147285],{"class":230},[115,154072,12436],{"class":125},[115,154074,154060],{"class":174},[115,154076,154077],{"class":125},"(category_total.values()))\n",[115,154079,154080],{"class":117,"line":1623},[115,154081,154082],{"class":125},"bar.set_global_opts(\n",[115,154084,154085,154087,154089,154091,154093,154095,154098],{"class":117,"line":1628},[115,154086,147463],{"class":5217},[115,154088,171],{"class":121},[115,154090,147468],{"class":125},[115,154092,51397],{"class":5217},[115,154094,171],{"class":121},[115,154096,154097],{"class":230},"\"品类销售额\"",[115,154099,38048],{"class":125},[115,154101,154102,154104,154106,154108,154110,154112,154115],{"class":117,"line":1642},[115,154103,147482],{"class":5217},[115,154105,171],{"class":121},[115,154107,147487],{"class":125},[115,154109,79800],{"class":5217},[115,154111,171],{"class":121},[115,154113,154114],{"class":230},"\"品类\"",[115,154116,38048],{"class":125},[115,154118,154119,154121,154123,154125,154127,154129,154131],{"class":117,"line":1647},[115,154120,147501],{"class":5217},[115,154122,171],{"class":121},[115,154124,147487],{"class":125},[115,154126,79800],{"class":5217},[115,154128,171],{"class":121},[115,154130,147285],{"class":230},[115,154132,38048],{"class":125},[115,154134,154135],{"class":117,"line":1653},[115,154136,132],{"class":125},[115,154138,154139,154142,154145],{"class":117,"line":1674},[115,154140,154141],{"class":125},"bar.render(",[115,154143,154144],{"class":230},"\"category_sales.html\"",[115,154146,132],{"class":125},[57,154148,154150],{"id":154149},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154152,154153],{},"时间线适合展示不同日期、月份、年份的数据变化。",[106,154155,154157],{"className":30379,"code":154156,"language":30381,"meta":22,"style":22},"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",[112,154158,154159,154173,154184,154188,154196,154220,154243,154268,154272,154276,154286,154290,154301,154310,154320,154334,154365,154370,154374],{"__ignoreMap":22},[115,154160,154161,154163,154165,154167,154169,154171],{"class":117,"line":118},[115,154162,30738],{"class":121},[115,154164,147369],{"class":125},[115,154166,30393],{"class":121},[115,154168,147374],{"class":125},[115,154170,31384],{"class":121},[115,154172,147379],{"class":125},[115,154174,154175,154177,154179,154181],{"class":117,"line":37},[115,154176,30738],{"class":121},[115,154178,147228],{"class":125},[115,154180,30393],{"class":121},[115,154182,154183],{"class":125}," Bar, Timeline\n",[115,154185,154186],{"class":117,"line":1180},[115,154187,2400],{"emptyLinePlaceholder":42},[115,154189,154190,154192,154194],{"class":117,"line":1195},[115,154191,101648],{"class":125},[115,154193,171],{"class":121},[115,154195,15573],{"class":125},[115,154197,154198,154201,154204,154206,154208,154210,154212,154214,154216,154218],{"class":117,"line":1201},[115,154199,154200],{"class":230},"    \"2024-10-01\"",[115,154202,154203],{"class":125},": {",[115,154205,153633],{"class":230},[115,154207,51427],{"class":125},[115,154209,153642],{"class":174},[115,154211,12436],{"class":125},[115,154213,153663],{"class":230},[115,154215,51427],{"class":125},[115,154217,153672],{"class":174},[115,154219,4930],{"class":125},[115,154221,154222,154225,154227,154229,154231,154233,154235,154237,154239,154241],{"class":117,"line":1215},[115,154223,154224],{"class":230},"    \"2024-10-02\"",[115,154226,154203],{"class":125},[115,154228,153633],{"class":230},[115,154230,51427],{"class":125},[115,154232,153701],{"class":174},[115,154234,12436],{"class":125},[115,154236,153663],{"class":230},[115,154238,51427],{"class":125},[115,154240,153730],{"class":174},[115,154242,4930],{"class":125},[115,154244,154245,154248,154250,154252,154254,154257,154259,154261,154263,154266],{"class":117,"line":1221},[115,154246,154247],{"class":230},"    \"2024-10-03\"",[115,154249,154203],{"class":125},[115,154251,153633],{"class":230},[115,154253,51427],{"class":125},[115,154255,154256],{"class":174},"17000",[115,154258,12436],{"class":125},[115,154260,153663],{"class":230},[115,154262,51427],{"class":125},[115,154264,154265],{"class":174},"19000",[115,154267,4930],{"class":125},[115,154269,154270],{"class":117,"line":1312},[115,154271,1565],{"class":125},[115,154273,154274],{"class":117,"line":1318},[115,154275,2400],{"emptyLinePlaceholder":42},[115,154277,154278,154281,154283],{"class":117,"line":1330},[115,154279,154280],{"class":125},"timeline ",[115,154282,171],{"class":121},[115,154284,154285],{"class":125}," Timeline()\n",[115,154287,154288],{"class":117,"line":1612},[115,154289,2400],{"emptyLinePlaceholder":42},[115,154291,154292,154294,154297,154299],{"class":117,"line":1617},[115,154293,3025],{"class":121},[115,154295,154296],{"class":125}," date, category_data ",[115,154298,26044],{"class":121},[115,154300,149138],{"class":125},[115,154302,154303,154306,154308],{"class":117,"line":1623},[115,154304,154305],{"class":125},"    bar ",[115,154307,171],{"class":121},[115,154309,154052],{"class":125},[115,154311,154312,154315,154317],{"class":117,"line":1628},[115,154313,154314],{"class":125},"    bar.add_xaxis(",[115,154316,154060],{"class":174},[115,154318,154319],{"class":125},"(category_data.keys()))\n",[115,154321,154322,154325,154327,154329,154331],{"class":117,"line":1642},[115,154323,154324],{"class":125},"    bar.add_yaxis(",[115,154326,147285],{"class":230},[115,154328,12436],{"class":125},[115,154330,154060],{"class":174},[115,154332,154333],{"class":125},"(category_data.values()))\n",[115,154335,154336,154339,154342,154344,154346,154348,154350,154352,154354,154356,154358,154360,154363],{"class":117,"line":1647},[115,154337,154338],{"class":125},"    bar.set_global_opts(",[115,154340,154341],{"class":5217},"title_opts",[115,154343,171],{"class":121},[115,154345,147468],{"class":125},[115,154347,51397],{"class":5217},[115,154349,171],{"class":121},[115,154351,178],{"class":121},[115,154353,376],{"class":230},[115,154355,1021],{"class":174},[115,154357,73916],{"class":125},[115,154359,1071],{"class":174},[115,154361,154362],{"class":230},"销售额\"",[115,154364,30498],{"class":125},[115,154366,154367],{"class":117,"line":1653},[115,154368,154369],{"class":125},"    timeline.add(bar, date)\n",[115,154371,154372],{"class":117,"line":1674},[115,154373,2400],{"emptyLinePlaceholder":42},[115,154375,154376,154379,154382],{"class":117,"line":1679},[115,154377,154378],{"class":125},"timeline.render(",[115,154380,154381],{"class":230},"\"timeline_sales.html\"",[115,154383,132],{"class":125},[57,154385,154387],{"id":154386},"_128-绘制地图","12.8 绘制地图",[14,154389,154390],{},"地图适合展示地区数据。",[106,154392,154394],{"className":30379,"code":154393,"language":30381,"meta":22,"style":22},"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",[112,154395,154396,154410,154421,154425,154433,154446,154458,154471,154484,154488,154492,154502,154517,154522,154539,154558,154562],{"__ignoreMap":22},[115,154397,154398,154400,154402,154404,154406,154408],{"class":117,"line":118},[115,154399,30738],{"class":121},[115,154401,147369],{"class":125},[115,154403,30393],{"class":121},[115,154405,147374],{"class":125},[115,154407,31384],{"class":121},[115,154409,147379],{"class":125},[115,154411,154412,154414,154416,154418],{"class":117,"line":37},[115,154413,30738],{"class":121},[115,154415,147228],{"class":125},[115,154417,30393],{"class":121},[115,154419,154420],{"class":125}," Map\n",[115,154422,154423],{"class":117,"line":1180},[115,154424,2400],{"emptyLinePlaceholder":42},[115,154426,154427,154429,154431],{"class":117,"line":1195},[115,154428,101648],{"class":125},[115,154430,171],{"class":121},[115,154432,55437],{"class":125},[115,154434,154435,154438,154440,154442,154444],{"class":117,"line":1201},[115,154436,154437],{"class":125},"    (",[115,154439,69259],{"class":230},[115,154441,12436],{"class":125},[115,154443,942],{"class":174},[115,154445,38048],{"class":125},[115,154447,154448,154450,154452,154454,154456],{"class":117,"line":1215},[115,154449,154437],{"class":125},[115,154451,69279],{"class":230},[115,154453,12436],{"class":125},[115,154455,147302],{"class":174},[115,154457,38048],{"class":125},[115,154459,154460,154462,154465,154467,154469],{"class":117,"line":1221},[115,154461,154437],{"class":125},[115,154463,154464],{"class":230},"\"广东\"",[115,154466,12436],{"class":125},[115,154468,1722],{"class":174},[115,154470,38048],{"class":125},[115,154472,154473,154475,154478,154480,154482],{"class":117,"line":1312},[115,154474,154437],{"class":125},[115,154476,154477],{"class":230},"\"浙江\"",[115,154479,12436],{"class":125},[115,154481,147307],{"class":174},[115,154483,38048],{"class":125},[115,154485,154486],{"class":117,"line":1318},[115,154487,33247],{"class":125},[115,154489,154490],{"class":117,"line":1330},[115,154491,2400],{"emptyLinePlaceholder":42},[115,154493,154494,154497,154499],{"class":117,"line":1612},[115,154495,154496],{"class":125},"map_chart ",[115,154498,171],{"class":121},[115,154500,154501],{"class":125}," Map()\n",[115,154503,154504,154507,154509,154512,154515],{"class":117,"line":1617},[115,154505,154506],{"class":125},"map_chart.add(",[115,154508,147285],{"class":230},[115,154510,154511],{"class":125},", data, ",[115,154513,154514],{"class":230},"\"china\"",[115,154516,132],{"class":125},[115,154518,154519],{"class":117,"line":1623},[115,154520,154521],{"class":125},"map_chart.set_global_opts(\n",[115,154523,154524,154526,154528,154530,154532,154534,154537],{"class":117,"line":1628},[115,154525,147463],{"class":5217},[115,154527,171],{"class":121},[115,154529,147468],{"class":125},[115,154531,51397],{"class":5217},[115,154533,171],{"class":121},[115,154535,154536],{"class":230},"\"地区销售额\"",[115,154538,38048],{"class":125},[115,154540,154541,154544,154546,154549,154552,154554,154556],{"class":117,"line":1642},[115,154542,154543],{"class":5217},"    visualmap_opts",[115,154545,171],{"class":121},[115,154547,154548],{"class":125},"opts.VisualMapOpts(",[115,154550,154551],{"class":5217},"max_",[115,154553,171],{"class":121},[115,154555,1722],{"class":174},[115,154557,38048],{"class":125},[115,154559,154560],{"class":117,"line":1647},[115,154561,132],{"class":125},[115,154563,154564,154567,154570],{"class":117,"line":1653},[115,154565,154566],{"class":125},"map_chart.render(",[115,154568,154569],{"class":230},"\"map_sales.html\"",[115,154571,132],{"class":125},[14,154573,154574],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[57,154576,154578],{"id":154577},"_129-项目拆分建议","12.9 项目拆分建议",[14,154580,154581],{},"当代码超过一个文件时，可以这样组织：",[106,154583,154586],{"className":154584,"code":154585,"language":5188,"meta":22},[5186],"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",[112,154587,154585],{"__ignoreMap":22},[14,154589,154590],{},"职责：",[69,154592,154593,154599,154605,154611],{},[72,154594,154595,154598],{},[112,154596,154597],{},"main.py","：程序入口。",[72,154600,154601,154604],{},[112,154602,154603],{},"file_utils.py","：读写 JSON。",[72,154606,154607,154610],{},[112,154608,154609],{},"sales_service.py","：统计销售数据。",[72,154612,154613,154616],{},[112,154614,154615],{},"chart_builder.py","：生成图表。",[57,154618,154620],{"id":154619},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154622,154623],{},"语法基础：",[69,154625,154626,154629,154632,154635],{},[72,154627,154628],{},"会写变量、注释、输入输出。",[72,154630,154631],{},"会使用 int、float、str、bool。",[72,154633,154634],{},"会做类型转换。",[72,154636,154637],{},"会使用 f-string 格式化输出。",[14,154639,154640],{},"流程控制：",[69,154642,154643,154649,154655,154663],{},[72,154644,154645,154646,28386],{},"会写 ",[112,154647,154648],{},"if elif else",[72,154650,154645,154651,101008,154653,28386],{},[112,154652,108653],{},[112,154654,3025],{},[72,154656,154657,154658,101008,154660,28386],{},"理解 ",[112,154659,2053],{},[112,154661,154662],{},"continue",[72,154664,154665],{},"能写嵌套循环。",[14,154667,154668],{},"函数：",[69,154670,154671,154674,154677,154680],{},[72,154672,154673],{},"会定义和调用函数。",[72,154675,154676],{},"理解参数和返回值。",[72,154678,154679],{},"知道局部变量和全局变量。",[72,154681,154682],{},"会使用默认参数、关键字参数、不定长参数。",[14,154684,154685],{},"容器：",[69,154687,154688,154691,154694,154697,154700],{},[72,154689,154690],{},"会使用列表增删改查。",[72,154692,154693],{},"会遍历列表、字典。",[72,154695,154696],{},"会使用切片。",[72,154698,154699],{},"会用集合去重。",[72,154701,154702],{},"会处理列表嵌套字典。",[14,154704,154705],{},"文件和模块：",[69,154707,154708,154711,154714,154717,154720],{},[72,154709,154710],{},"会读写文本文件。",[72,154712,154713],{},"会读写 JSON。",[72,154715,154716],{},"会捕获常见异常。",[72,154718,154719],{},"会导入模块和第三方包。",[72,154721,154722],{},"会创建简单包结构。",[14,154724,154725],{},"项目能力：",[69,154727,154728,154731,154734,154737,154740],{},[72,154729,154730],{},"能把代码拆成函数。",[72,154732,154733],{},"能把数据保存到文件。",[72,154735,154736],{},"能处理用户输入错误。",[72,154738,154739],{},"能写一个完整菜单程序。",[72,154741,154742],{},"能用 pyecharts 生成图表。",[57,154744,154746],{"id":154745},"_1211-推荐练习顺序","12.11 推荐练习顺序",[69,154748,154749,154752,154755,154758,154761,154764,154767,154770],{},[72,154750,154751],{},"猜数字游戏。",[72,154753,154754],{},"ATM 菜单程序。",[72,154756,154757],{},"学生成绩统计。",[72,154759,154760],{},"学生管理系统函数版。",[72,154762,154763],{},"学生管理系统文件持久化版。",[72,154765,154766],{},"学生管理系统面向对象版。",[72,154768,154769],{},"销售数据统计。",[72,154771,154772],{},"销售数据可视化。",[57,154774,154776],{"id":154775},"_1212-常见学习误区","12.12 常见学习误区",[69,154778,154779,154782,154785,154788,154791,154794,154797],{},[72,154780,154781],{},"只看视频不敲代码。",[72,154783,154784],{},"一报错就复制错误去搜，不先读报错位置。",[72,154786,154787],{},"变量名随便写，后续自己看不懂。",[72,154789,154790],{},"所有代码都写在一个文件一个函数里。",[72,154792,154793],{},"不保存练习代码，复习时没有材料。",[72,154795,154796],{},"还没掌握列表字典就急着学框架。",[72,154798,154799],{},"不会读官方文档，只依赖教程。",[57,154801,154803],{"id":154802},"_1213-如何读报错","12.13 如何读报错",[14,154805,154806],{},"报错通常从下往上看最后几行。",[14,154808,15136],{},[106,154810,154813],{"className":154811,"code":154812,"language":5188,"meta":22},[5186],"ValueError: invalid literal for int() with base 10: 'abc'\n",[112,154814,154812],{"__ignoreMap":22},[14,154816,24600],{},[69,154818,154819,154825,154835],{},[72,154820,154821,154822,28386],{},"异常类型是 ",[112,154823,154824],{},"ValueError",[72,154826,107335,154827,154830,154831,154834],{},[112,154828,154829],{},"int()"," 无法把 ",[112,154832,154833],{},"'abc'"," 转成整数。",[72,154836,154837],{},"应该检查输入内容或增加异常处理。",[14,154839,154840],{},"再看文件名和行号：",[106,154842,154845],{"className":154843,"code":154844,"language":5188,"meta":22},[5186],"File \"main.py\", line 10, in \u003Cmodule>\n",[112,154846,154844],{"__ignoreMap":22},[14,154848,154849,154850,154852],{},"表示错误发生在 ",[112,154851,154597],{}," 第 10 行。",[57,154854,154856],{"id":154855},"_1214-后续学习方向","12.14 后续学习方向",[14,154858,154859],{},"Python 基础完成后，可以按兴趣选择方向：",[69,154861,154862,154874,154883,154895,154906,154915,154925],{},[72,154863,154864,154865,338,154868,338,154871,28386],{},"自动化办公：",[112,154866,154867],{},"openpyxl",[112,154869,154870],{},"python-docx",[112,154872,154873],{},"pdfplumber",[72,154875,154876,154877,338,154879,338,154881,28386],{},"数据分析：",[112,154878,100616],{},[112,154880,146175],{},[112,154882,146183],{},[72,154884,154885,154886,338,154889,338,154892,28386],{},"Web 后端：",[112,154887,154888],{},"Flask",[112,154890,154891],{},"FastAPI",[112,154893,154894],{},"Django",[72,154896,154897,154898,338,154900,338,154903,28386],{},"爬虫：",[112,154899,146160],{},[112,154901,154902],{},"BeautifulSoup",[112,154904,154905],{},"Scrapy",[72,154907,154908,154909,338,154911,154914],{},"测试开发：",[112,154910,146207],{},[112,154912,154913],{},"selenium","、接口测试。",[72,154916,154917,154918,338,154920,338,154922,28386],{},"人工智能：",[112,154919,100616],{},[112,154921,146175],{},[112,154923,154924],{},"pytorch",[72,154926,154927,154928,338,154930,338,154933,28386],{},"运维脚本：",[112,154929,145776],{},[112,154931,154932],{},"subprocess",[112,154934,154935],{},"paramiko",[14,154937,154938],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[57,154940,154942],{"id":154941},"_1215-结课练习","12.15 结课练习",[69,154944,154945,154948,154951,154954,154957,154960,154963,154966],{},[72,154946,154947],{},"完成函数版学生管理系统。",[72,154949,154950],{},"给学生管理系统增加 JSON 持久化。",[72,154952,154953],{},"给学生管理系统增加异常处理。",[72,154955,154956],{},"把学生管理系统改成面向对象版。",[72,154958,154959],{},"使用 pyecharts 绘制学生成绩柱状图。",[72,154961,154962],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[72,154964,154965],{},"按品类统计销售额并绘制柱状图。",[72,154967,154968],{},"写一份自己的 Python 学习路线图。",[5127,154970,154971],{},"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":22,"searchDepth":37,"depth":37,"links":154973},[154974,154975,154978,154979,154980,154986,154987,154988,154989,154990,154991,154992,154993,154994,154995],{"id":151690,"depth":37,"text":151691},{"id":151740,"depth":37,"text":151741,"children":154976},[154977],{"id":151744,"depth":1180,"text":151745},{"id":151783,"depth":37,"text":151784},{"id":153257,"depth":37,"text":153258},{"id":153595,"depth":37,"text":153596,"children":154981},[154982,154983,154984,154985],{"id":153599,"depth":1180,"text":153600},{"id":153739,"depth":1180,"text":153740},{"id":153829,"depth":1180,"text":153830},{"id":153915,"depth":1180,"text":153916},{"id":153956,"depth":37,"text":153957},{"id":154149,"depth":37,"text":154150},{"id":154386,"depth":37,"text":154387},{"id":154577,"depth":37,"text":154578},{"id":154619,"depth":37,"text":154620},{"id":154745,"depth":37,"text":154746},{"id":154775,"depth":37,"text":154776},{"id":154802,"depth":37,"text":154803},{"id":154855,"depth":37,"text":154856},{"id":154941,"depth":37,"text":154942},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151682,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155002,"title":155003,"body":155004,"description":39,"extension":40,"meta":157473,"navigation":42,"path":157474,"seo":157475,"stem":157476,"__hash__":157477},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155005,"toc":157448},[155006,155009,155013,155016,155019,155039,155042,155065,155068,155071,155093,155096,155118,155122,155125,155165,155168,155289,155293,155296,155336,155339,155363,155366,155370,155373,155387,155420,155423,155458,155461,155484,155487,155520,155523,155525,155531,155606,155609,155615,155632,155672,155676,155679,155725,155727,155765,155768,155803,155806,155841,155844,155876,155879,155898,155902,155906,156019,156021,156096,156100,156146,156149,156175,156184,156188,156191,156254,156262,156290,156294,156334,156399,156403,156406,156445,156448,156493,156496,156557,156561,156588,156591,156619,156622,156626,156630,156695,156698,156736,156739,156771,156775,156874,156878,156881,156954,156957,157005,157009,157015,157055,157058,157105,157108,157157,157161,157163,157177,157179,157360,157364,157391,157411,157418,157422,157439,157445],[10,155007,155003],{"id":155008},"_2-基础语法变量与字符串",[57,155010,155012],{"id":155011},"_21-注释","2.1 注释",[14,155014,155015],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155017,155018],{},"单行注释：",[106,155020,155022],{"className":30379,"code":155021,"language":30381,"meta":22,"style":22},"# 这是单行注释\nprint(\"hello\")\n",[112,155023,155024,155029],{"__ignoreMap":22},[115,155025,155026],{"class":117,"line":118},[115,155027,155028],{"class":184},"# 这是单行注释\n",[115,155030,155031,155033,155035,155037],{"class":117,"line":37},[115,155032,30416],{"class":174},[115,155034,126],{"class":125},[115,155036,5845],{"class":230},[115,155038,132],{"class":125},[14,155040,155041],{},"多行说明常用三引号：",[106,155043,155045],{"className":30379,"code":155044,"language":30381,"meta":22,"style":22},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[112,155046,155047,155051,155056,155061],{"__ignoreMap":22},[115,155048,155049],{"class":117,"line":118},[115,155050,95688],{"class":230},[115,155052,155053],{"class":117,"line":37},[115,155054,155055],{"class":230},"这是多行说明。\n",[115,155057,155058],{"class":117,"line":1180},[115,155059,155060],{"class":230},"常用于文件顶部说明、函数说明等。\n",[115,155062,155063],{"class":117,"line":1195},[115,155064,95688],{"class":230},[14,155066,155067],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155069,155070],{},"不好：",[106,155072,155074],{"className":30379,"code":155073,"language":30381,"meta":22,"style":22},"# age 加 1\nage = age + 1\n",[112,155075,155076,155081],{"__ignoreMap":22},[115,155077,155078],{"class":117,"line":118},[115,155079,155080],{"class":184},"# age 加 1\n",[115,155082,155083,155085,155087,155089,155091],{"class":117,"line":37},[115,155084,146536],{"class":125},[115,155086,171],{"class":121},[115,155088,15708],{"class":125},[115,155090,606],{"class":121},[115,155092,55689],{"class":174},[14,155094,155095],{},"较好：",[106,155097,155099],{"className":30379,"code":155098,"language":30381,"meta":22,"style":22},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[112,155100,155101,155106],{"__ignoreMap":22},[115,155102,155103],{"class":117,"line":118},[115,155104,155105],{"class":184},"# 用户过完生日后，年龄增加一岁\n",[115,155107,155108,155110,155112,155114,155116],{"class":117,"line":37},[115,155109,146536],{"class":125},[115,155111,171],{"class":121},[115,155113,15708],{"class":125},[115,155115,606],{"class":121},[115,155117,55689],{"class":174},[57,155119,155121],{"id":155120},"_22-字面量","2.2 字面量",[14,155123,155124],{},"字面量就是代码中直接写出来的数据。",[106,155126,155128],{"className":30379,"code":155127,"language":30381,"meta":22,"style":22},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[112,155129,155130,155137,155144,155151,155158],{"__ignoreMap":22},[115,155131,155132,155134],{"class":117,"line":118},[115,155133,436],{"class":174},[115,155135,155136],{"class":184},"          # 整数\n",[115,155138,155139,155141],{"class":117,"line":37},[115,155140,175],{"class":174},[115,155142,155143],{"class":184},"         # 小数\n",[115,155145,155146,155148],{"class":117,"line":1180},[115,155147,5845],{"class":230},[115,155149,155150],{"class":184},"      # 字符串\n",[115,155152,155153,155155],{"class":117,"line":1195},[115,155154,31477],{"class":174},[115,155156,155157],{"class":184},"         # 布尔值\n",[115,155159,155160,155162],{"class":117,"line":1201},[115,155161,95676],{"class":174},[115,155163,155164],{"class":184},"         # 空值\n",[14,155166,155167],{},"常见字面量类型：",[263,155169,155170,155180],{},[266,155171,155172],{},[269,155173,155174,155176,155178],{},[272,155175,23738],{},[272,155177,27493],{},[272,155179,25870],{},[310,155181,155182,155193,155204,155215,155227,155239,155251,155264,155276],{},[269,155183,155184,155186,155190],{},[315,155185,129],{},[315,155187,155188],{},[112,155189,436],{},[315,155191,155192],{},"整数",[269,155194,155195,155197,155201],{},[315,155196,165],{},[315,155198,155199],{},[112,155200,175],{},[315,155202,155203],{},"浮点数",[269,155205,155206,155208,155212],{},[315,155207,1300],{},[315,155209,155210],{},[112,155211,5845],{},[315,155213,155214],{},"字符串",[269,155216,155217,155219,155225],{},[315,155218,1355],{},[315,155220,155221,338,155223],{},[112,155222,31477],{},[112,155224,33988],{},[315,155226,66005],{},[269,155228,155229,155232,155236],{},[315,155230,155231],{},"NoneType",[315,155233,155234],{},[112,155235,95676],{},[315,155237,155238],{},"空值",[269,155240,155241,155243,155248],{},[315,155242,154060],{},[315,155244,155245],{},[112,155246,155247],{},"[1, 2, 3]",[315,155249,155250],{},"列表",[269,155252,155253,155256,155261],{},[315,155254,155255],{},"tuple",[315,155257,155258],{},[112,155259,155260],{},"(1, 2, 3)",[315,155262,155263],{},"元组",[269,155265,155266,155268,155273],{},[315,155267,114536],{},[315,155269,155270],{},[112,155271,155272],{},"{\"name\": \"张三\"}",[315,155274,155275],{},"字典",[269,155277,155278,155281,155286],{},[315,155279,155280],{},"set",[315,155282,155283],{},[112,155284,155285],{},"{1, 2, 3}",[315,155287,155288],{},"集合",[57,155290,155292],{"id":155291},"_23-变量","2.3 变量",[14,155294,155295],{},"变量是保存数据的名字。",[106,155297,155299],{"className":30379,"code":155298,"language":30381,"meta":22,"style":22},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[112,155300,155301,155309,155317,155327],{"__ignoreMap":22},[115,155302,155303,155305,155307],{"class":117,"line":118},[115,155304,146526],{"class":125},[115,155306,171],{"class":121},[115,155308,149343],{"class":230},[115,155310,155311,155313,155315],{"class":117,"line":37},[115,155312,146536],{"class":125},[115,155314,171],{"class":121},[115,155316,146541],{"class":174},[115,155318,155319,155322,155324],{"class":117,"line":1180},[115,155320,155321],{"class":125},"height ",[115,155323,171],{"class":121},[115,155325,155326],{"class":174}," 1.75\n",[115,155328,155329,155332,155334],{"class":117,"line":1195},[115,155330,155331],{"class":125},"is_student ",[115,155333,171],{"class":121},[115,155335,153589],{"class":174},[14,155337,155338],{},"Python 的变量不需要提前声明类型：",[106,155340,155342],{"className":30379,"code":155341,"language":30381,"meta":22,"style":22},"score = 100\nscore = \"满分\"\n",[112,155343,155344,155354],{"__ignoreMap":22},[115,155345,155346,155349,155351],{"class":117,"line":118},[115,155347,155348],{"class":125},"score ",[115,155350,171],{"class":121},[115,155352,155353],{"class":174}," 100\n",[115,155355,155356,155358,155360],{"class":117,"line":37},[115,155357,155348],{"class":125},[115,155359,171],{"class":121},[115,155361,155362],{"class":230}," \"满分\"\n",[14,155364,155365],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[57,155367,155369],{"id":155368},"_24-变量命名规则","2.4 变量命名规则",[14,155371,155372],{},"硬性规则：",[69,155374,155375,155378,155381,155384],{},[72,155376,155377],{},"只能由字母、数字、下划线组成。",[72,155379,155380],{},"不能以数字开头。",[72,155382,155383],{},"不能使用 Python 关键字。",[72,155385,155386],{},"区分大小写。",[106,155388,155390],{"className":30379,"code":155389,"language":30381,"meta":22,"style":22},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[112,155391,155392,155401,155410],{"__ignoreMap":22},[115,155393,155394,155397,155399],{"class":117,"line":118},[115,155395,155396],{"class":125},"user_name ",[115,155398,171],{"class":121},[115,155400,146531],{"class":230},[115,155402,155403,155406,155408],{"class":117,"line":37},[115,155404,155405],{"class":125},"age2 ",[115,155407,171],{"class":121},[115,155409,146541],{"class":174},[115,155411,155412,155415,155417],{"class":117,"line":1180},[115,155413,155414],{"class":125},"_token ",[115,155416,171],{"class":121},[115,155418,155419],{"class":230}," \"abc\"\n",[14,155421,155422],{},"错误写法：",[106,155424,155426],{"className":30379,"code":155425,"language":30381,"meta":22,"style":22},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[112,155427,155428,155437,155449],{"__ignoreMap":22},[115,155429,155430,155433,155435],{"class":117,"line":118},[115,155431,155432],{"class":77393},"2age",[115,155434,13565],{"class":121},[115,155436,146541],{"class":174},[115,155438,155439,155441,155443,155445,155447],{"class":117,"line":37},[115,155440,131574],{"class":125},[115,155442,657],{"class":121},[115,155444,146526],{"class":125},[115,155446,171],{"class":121},[115,155448,146531],{"class":230},[115,155450,155451,155453,155455],{"class":117,"line":1180},[115,155452,14695],{"class":121},[115,155454,13565],{"class":121},[115,155456,155457],{"class":230}," \"一班\"\n",[14,155459,155460],{},"查看关键字：",[106,155462,155464],{"className":30379,"code":155463,"language":30381,"meta":22,"style":22},"import keyword\n\nprint(keyword.kwlist)\n",[112,155465,155466,155473,155477],{"__ignoreMap":22},[115,155467,155468,155470],{"class":117,"line":118},[115,155469,30393],{"class":121},[115,155471,155472],{"class":125}," keyword\n",[115,155474,155475],{"class":117,"line":37},[115,155476,2400],{"emptyLinePlaceholder":42},[115,155478,155479,155481],{"class":117,"line":1180},[115,155480,30416],{"class":174},[115,155482,155483],{"class":125},"(keyword.kwlist)\n",[14,155485,155486],{},"推荐命名风格：",[106,155488,155490],{"className":30379,"code":155489,"language":30381,"meta":22,"style":22},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[112,155491,155492,155501,155511],{"__ignoreMap":22},[115,155493,155494,155497,155499],{"class":117,"line":118},[115,155495,155496],{"class":125},"student_name ",[115,155498,171],{"class":121},[115,155500,149343],{"class":230},[115,155502,155503,155506,155508],{"class":117,"line":37},[115,155504,155505],{"class":125},"total_price ",[115,155507,171],{"class":121},[115,155509,155510],{"class":174}," 99.8\n",[115,155512,155513,155516,155518],{"class":117,"line":1180},[115,155514,155515],{"class":125},"is_finished ",[115,155517,171],{"class":121},[115,155519,125797],{"class":174},[14,155521,155522],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[57,155524,50722],{"id":50721},[14,155526,104356,155527,155530],{},[112,155528,155529],{},"type()"," 查看数据类型：",[106,155532,155534],{"className":30379,"code":155533,"language":30381,"meta":22,"style":22},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[112,155535,155536,155550,155564,155578,155592],{"__ignoreMap":22},[115,155537,155538,155540,155542,155544,155546,155548],{"class":117,"line":118},[115,155539,30416],{"class":174},[115,155541,126],{"class":125},[115,155543,103097],{"class":174},[115,155545,126],{"class":125},[115,155547,436],{"class":174},[115,155549,30498],{"class":125},[115,155551,155552,155554,155556,155558,155560,155562],{"class":117,"line":37},[115,155553,30416],{"class":174},[115,155555,126],{"class":125},[115,155557,103097],{"class":174},[115,155559,126],{"class":125},[115,155561,175],{"class":174},[115,155563,30498],{"class":125},[115,155565,155566,155568,155570,155572,155574,155576],{"class":117,"line":1180},[115,155567,30416],{"class":174},[115,155569,126],{"class":125},[115,155571,103097],{"class":174},[115,155573,126],{"class":125},[115,155575,5845],{"class":230},[115,155577,30498],{"class":125},[115,155579,155580,155582,155584,155586,155588,155590],{"class":117,"line":1195},[115,155581,30416],{"class":174},[115,155583,126],{"class":125},[115,155585,103097],{"class":174},[115,155587,126],{"class":125},[115,155589,31477],{"class":174},[115,155591,30498],{"class":125},[115,155593,155594,155596,155598,155600,155602,155604],{"class":117,"line":1201},[115,155595,30416],{"class":174},[115,155597,126],{"class":125},[115,155599,103097],{"class":174},[115,155601,126],{"class":125},[115,155603,95676],{"class":174},[115,155605,30498],{"class":125},[14,155607,155608],{},"输出类似：",[106,155610,155613],{"className":155611,"code":155612,"language":5188,"meta":22},[5186],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[112,155614,155612],{"__ignoreMap":22},[14,155616,9026,155617,107273,155619,155621,155622,155624,155625,21501,155627,155624,155629,155631],{},[112,155618,1355],{},[112,155620,129],{}," 的子类，",[112,155623,31477],{}," 可以当作 ",[112,155626,343],{},[112,155628,33988],{},[112,155630,317],{},"，但业务代码中不要滥用。",[106,155633,155635],{"className":30379,"code":155634,"language":30381,"meta":22,"style":22},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[112,155636,155637,155655],{"__ignoreMap":22},[115,155638,155639,155641,155643,155645,155647,155649,155652],{"class":117,"line":118},[115,155640,30416],{"class":174},[115,155642,126],{"class":125},[115,155644,31477],{"class":174},[115,155646,45567],{"class":121},[115,155648,25119],{"class":174},[115,155650,155651],{"class":125},")   ",[115,155653,155654],{"class":184},"# 2\n",[115,155656,155657,155659,155661,155663,155665,155667,155669],{"class":117,"line":37},[115,155658,30416],{"class":174},[115,155660,126],{"class":125},[115,155662,33988],{"class":174},[115,155664,45567],{"class":121},[115,155666,25119],{"class":174},[115,155668,45809],{"class":125},[115,155670,155671],{"class":184},"# 1\n",[57,155673,155675],{"id":155674},"_26-类型转换","2.6 类型转换",[14,155677,155678],{},"常用转换函数：",[106,155680,155682],{"className":30379,"code":155681,"language":30381,"meta":22,"style":22},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[112,155683,155684,155694,155705,155715],{"__ignoreMap":22},[115,155685,155686,155688,155690,155692],{"class":117,"line":118},[115,155687,129],{"class":174},[115,155689,126],{"class":125},[115,155691,54306],{"class":230},[115,155693,132],{"class":125},[115,155695,155696,155698,155700,155703],{"class":117,"line":37},[115,155697,165],{"class":174},[115,155699,126],{"class":125},[115,155701,155702],{"class":230},"\"3.14\"",[115,155704,132],{"class":125},[115,155706,155707,155709,155711,155713],{"class":117,"line":1180},[115,155708,1300],{"class":174},[115,155710,126],{"class":125},[115,155712,436],{"class":174},[115,155714,132],{"class":125},[115,155716,155717,155719,155721,155723],{"class":117,"line":1195},[115,155718,1355],{"class":174},[115,155720,126],{"class":125},[115,155722,343],{"class":174},[115,155724,132],{"class":125},[14,155726,15136],{},[106,155728,155730],{"className":30379,"code":155729,"language":30381,"meta":22,"style":22},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[112,155731,155732,155741,155752],{"__ignoreMap":22},[115,155733,155734,155736,155738],{"class":117,"line":118},[115,155735,146536],{"class":125},[115,155737,171],{"class":121},[115,155739,155740],{"class":230}," \"18\"\n",[115,155742,155743,155745,155747,155749],{"class":117,"line":37},[115,155744,146536],{"class":125},[115,155746,171],{"class":121},[115,155748,2382],{"class":174},[115,155750,155751],{"class":125},"(age)\n",[115,155753,155754,155756,155759,155761,155763],{"class":117,"line":1180},[115,155755,30416],{"class":174},[115,155757,155758],{"class":125},"(age ",[115,155760,606],{"class":121},[115,155762,25119],{"class":174},[115,155764,132],{"class":125},[14,155766,155767],{},"输入得到的内容永远是字符串：",[106,155769,155771],{"className":30379,"code":155770,"language":30381,"meta":22,"style":22},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[112,155772,155773,155789],{"__ignoreMap":22},[115,155774,155775,155778,155780,155782,155784,155787],{"class":117,"line":118},[115,155776,155777],{"class":125},"num ",[115,155779,171],{"class":121},[115,155781,60595],{"class":174},[115,155783,126],{"class":125},[115,155785,155786],{"class":230},"\"请输入数字:\"",[115,155788,132],{"class":125},[115,155790,155791,155793,155795,155797,155800],{"class":117,"line":37},[115,155792,30416],{"class":174},[115,155794,126],{"class":125},[115,155796,103097],{"class":174},[115,155798,155799],{"class":125},"(num))  ",[115,155801,155802],{"class":184},"# str\n",[14,155804,155805],{},"如果要做数学运算，必须转换：",[106,155807,155809],{"className":30379,"code":155808,"language":30381,"meta":22,"style":22},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[112,155810,155811,155829],{"__ignoreMap":22},[115,155812,155813,155815,155817,155819,155821,155823,155825,155827],{"class":117,"line":118},[115,155814,155777],{"class":125},[115,155816,171],{"class":121},[115,155818,2382],{"class":174},[115,155820,126],{"class":125},[115,155822,53811],{"class":174},[115,155824,126],{"class":125},[115,155826,155786],{"class":230},[115,155828,30498],{"class":125},[115,155830,155831,155833,155835,155837,155839],{"class":117,"line":37},[115,155832,30416],{"class":174},[115,155834,45620],{"class":125},[115,155836,606],{"class":121},[115,155838,2038],{"class":174},[115,155840,132],{"class":125},[14,155842,155843],{},"常见错误：",[106,155845,155847],{"className":30379,"code":155846,"language":30381,"meta":22,"style":22},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[112,155848,155849,155862],{"__ignoreMap":22},[115,155850,155851,155853,155855,155857,155859],{"class":117,"line":118},[115,155852,129],{"class":174},[115,155854,126],{"class":125},[115,155856,155702],{"class":230},[115,155858,155651],{"class":125},[115,155860,155861],{"class":184},"# 错误\n",[115,155863,155864,155866,155868,155871,155874],{"class":117,"line":37},[115,155865,129],{"class":174},[115,155867,126],{"class":125},[115,155869,155870],{"class":230},"\"abc\"",[115,155872,155873],{"class":125},")    ",[115,155875,155861],{"class":184},[14,155877,155878],{},"正确写法：",[106,155880,155882],{"className":30379,"code":155881,"language":30381,"meta":22,"style":22},"num = float(\"3.14\")\n",[112,155883,155884],{"__ignoreMap":22},[115,155885,155886,155888,155890,155892,155894,155896],{"class":117,"line":118},[115,155887,155777],{"class":125},[115,155889,171],{"class":121},[115,155891,109787],{"class":174},[115,155893,126],{"class":125},[115,155895,155702],{"class":230},[115,155897,132],{"class":125},[57,155899,155901],{"id":155900},"_27-运算符","2.7 运算符",[86,155903,155905],{"id":155904},"_271-算术运算符","2.7.1 算术运算符",[263,155907,155908,155919],{},[266,155909,155910],{},[269,155911,155912,155915,155917],{},[272,155913,155914],{},"运算符",[272,155916,25870],{},[272,155918,27493],{},[310,155920,155921,155935,155949,155963,155977,155991,156005],{},[269,155922,155923,155927,155930],{},[315,155924,155925],{},[112,155926,606],{},[315,155928,155929],{},"加法",[315,155931,155932],{},[112,155933,155934],{},"1 + 2",[269,155936,155937,155941,155944],{},[315,155938,155939],{},[112,155940,657],{},[315,155942,155943],{},"减法",[315,155945,155946],{},[112,155947,155948],{},"5 - 3",[269,155950,155951,155955,155958],{},[315,155952,155953],{},[112,155954,580],{},[315,155956,155957],{},"乘法",[315,155959,155960],{},[112,155961,155962],{},"2 * 3",[269,155964,155965,155969,155972],{},[315,155966,155967],{},[112,155968,709],{},[315,155970,155971],{},"除法，结果是浮点数",[315,155973,155974],{},[112,155975,155976],{},"5 \u002F 2",[269,155978,155979,155983,155986],{},[315,155980,155981],{},[112,155982,33330],{},[315,155984,155985],{},"整除",[315,155987,155988],{},[112,155989,155990],{},"5 \u002F\u002F 2",[269,155992,155993,155997,156000],{},[315,155994,155995],{},[112,155996,453],{},[315,155998,155999],{},"取余",[315,156001,156002],{},[112,156003,156004],{},"5 % 2",[269,156006,156007,156011,156014],{},[315,156008,156009],{},[112,156010,10662],{},[315,156012,156013],{},"幂运算",[315,156015,156016],{},[112,156017,156018],{},"2 ** 3",[14,156020,15136],{},[106,156022,156024],{"className":30379,"code":156023,"language":30381,"meta":22,"style":22},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[112,156025,156026,156044,156061,156078],{"__ignoreMap":22},[115,156027,156028,156030,156032,156034,156037,156039,156041],{"class":117,"line":118},[115,156029,30416],{"class":174},[115,156031,126],{"class":125},[115,156033,444],{"class":174},[115,156035,156036],{"class":121}," \u002F",[115,156038,14756],{"class":174},[115,156040,155651],{"class":125},[115,156042,156043],{"class":184},"# 2.5\n",[115,156045,156046,156048,156050,156052,156055,156057,156059],{"class":117,"line":37},[115,156047,30416],{"class":174},[115,156049,126],{"class":125},[115,156051,444],{"class":174},[115,156053,156054],{"class":121}," \u002F\u002F",[115,156056,14756],{"class":174},[115,156058,45809],{"class":125},[115,156060,155654],{"class":184},[115,156062,156063,156065,156067,156069,156072,156074,156076],{"class":117,"line":1180},[115,156064,30416],{"class":174},[115,156066,126],{"class":125},[115,156068,444],{"class":174},[115,156070,156071],{"class":121}," %",[115,156073,14756],{"class":174},[115,156075,155651],{"class":125},[115,156077,155671],{"class":184},[115,156079,156080,156082,156084,156086,156089,156091,156093],{"class":117,"line":1195},[115,156081,30416],{"class":174},[115,156083,126],{"class":125},[115,156085,203],{"class":174},[115,156087,156088],{"class":121}," **",[115,156090,78060],{"class":174},[115,156092,45809],{"class":125},[115,156094,156095],{"class":184},"# 8\n",[86,156097,156099],{"id":156098},"_272-赋值运算符","2.7.2 赋值运算符",[106,156101,156103],{"className":30379,"code":156102,"language":30381,"meta":22,"style":22},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[112,156104,156105,156113,156121,156129,156137],{"__ignoreMap":22},[115,156106,156107,156109,156111],{"class":117,"line":118},[115,156108,155777],{"class":125},[115,156110,171],{"class":121},[115,156112,58418],{"class":174},[115,156114,156115,156117,156119],{"class":117,"line":37},[115,156116,155777],{"class":125},[115,156118,9478],{"class":121},[115,156120,54417],{"class":174},[115,156122,156123,156125,156127],{"class":117,"line":1180},[115,156124,155777],{"class":125},[115,156126,150242],{"class":121},[115,156128,47724],{"class":174},[115,156130,156131,156133,156135],{"class":117,"line":1195},[115,156132,155777],{"class":125},[115,156134,137138],{"class":121},[115,156136,120026],{"class":174},[115,156138,156139,156141,156144],{"class":117,"line":1201},[115,156140,155777],{"class":125},[115,156142,156143],{"class":121},"\u002F=",[115,156145,47724],{"class":174},[14,156147,156148],{},"等价关系：",[106,156150,156152],{"className":30379,"code":156151,"language":30381,"meta":22,"style":22},"num += 1\nnum = num + 1\n",[112,156153,156154,156162],{"__ignoreMap":22},[115,156155,156156,156158,156160],{"class":117,"line":118},[115,156157,155777],{"class":125},[115,156159,9478],{"class":121},[115,156161,55689],{"class":174},[115,156163,156164,156166,156168,156171,156173],{"class":117,"line":37},[115,156165,155777],{"class":125},[115,156167,171],{"class":121},[115,156169,156170],{"class":125}," num ",[115,156172,606],{"class":121},[115,156174,55689],{"class":174},[14,156176,156177,156178,101008,156181,28386],{},"Python 没有 ",[112,156179,156180],{},"num++",[112,156182,156183],{},"num--",[86,156185,156187],{"id":156186},"_273-比较运算符","2.7.3 比较运算符",[14,156189,156190],{},"比较运算结果是布尔值。",[106,156192,156194],{"className":30379,"code":156193,"language":30381,"meta":22,"style":22},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[112,156195,156196,156210,156225,156239],{"__ignoreMap":22},[115,156197,156198,156200,156202,156204,156206,156208],{"class":117,"line":118},[115,156199,30416],{"class":174},[115,156201,126],{"class":125},[115,156203,571],{"class":174},[115,156205,26223],{"class":121},[115,156207,2148],{"class":174},[115,156209,132],{"class":125},[115,156211,156212,156214,156216,156218,156221,156223],{"class":117,"line":37},[115,156213,30416],{"class":174},[115,156215,126],{"class":125},[115,156217,571],{"class":174},[115,156219,156220],{"class":121}," >=",[115,156222,2038],{"class":174},[115,156224,132],{"class":125},[115,156226,156227,156229,156231,156233,156235,156237],{"class":117,"line":1180},[115,156228,30416],{"class":174},[115,156230,126],{"class":125},[115,156232,571],{"class":174},[115,156234,101549],{"class":121},[115,156236,2083],{"class":174},[115,156238,132],{"class":125},[115,156240,156241,156243,156245,156247,156250,156252],{"class":117,"line":1195},[115,156242,30416],{"class":174},[115,156244,126],{"class":125},[115,156246,571],{"class":174},[115,156248,156249],{"class":121}," !=",[115,156251,2083],{"class":174},[115,156253,132],{"class":125},[14,156255,156256,156257,156259,156260,28386],{},"注意：判断相等用 ",[112,156258,2949],{},"，赋值用 ",[112,156261,171],{},[106,156263,156265],{"className":30379,"code":156264,"language":30381,"meta":22,"style":22},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[112,156266,156267,156279],{"__ignoreMap":22},[115,156268,156269,156271,156273,156276],{"class":117,"line":118},[115,156270,146536],{"class":125},[115,156272,171],{"class":121},[115,156274,156275],{"class":174}," 18",[115,156277,156278],{"class":184},"       # 赋值\n",[115,156280,156281,156283,156285,156287],{"class":117,"line":37},[115,156282,146536],{"class":125},[115,156284,2949],{"class":121},[115,156286,156275],{"class":174},[115,156288,156289],{"class":184},"      # 判断是否相等\n",[86,156291,156293],{"id":156292},"_274-逻辑运算符","2.7.4 逻辑运算符",[263,156295,156296,156304],{},[266,156297,156298],{},[269,156299,156300,156302],{},[272,156301,155914],{},[272,156303,25870],{},[310,156305,156306,156315,156324],{},[269,156307,156308,156312],{},[315,156309,156310],{},[112,156311,30463],{},[315,156313,156314],{},"并且",[269,156316,156317,156321],{},[315,156318,156319],{},[112,156320,115080],{},[315,156322,156323],{},"或者",[269,156325,156326,156331],{},[315,156327,156328],{},[112,156329,156330],{},"not",[315,156332,156333],{},"取反",[106,156335,156337],{"className":30379,"code":156336,"language":30381,"meta":22,"style":22},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[112,156338,156339,156347,156356,156360,156375,156389],{"__ignoreMap":22},[115,156340,156341,156343,156345],{"class":117,"line":118},[115,156342,146536],{"class":125},[115,156344,171],{"class":121},[115,156346,88055],{"class":174},[115,156348,156349,156352,156354],{"class":117,"line":37},[115,156350,156351],{"class":125},"has_ticket ",[115,156353,171],{"class":121},[115,156355,153589],{"class":174},[115,156357,156358],{"class":117,"line":1180},[115,156359,2400],{"emptyLinePlaceholder":42},[115,156361,156362,156364,156366,156368,156370,156372],{"class":117,"line":1195},[115,156363,30416],{"class":174},[115,156365,155758],{"class":125},[115,156367,1710],{"class":121},[115,156369,156275],{"class":174},[115,156371,120419],{"class":121},[115,156373,156374],{"class":125}," has_ticket)\n",[115,156376,156377,156379,156381,156383,156385,156387],{"class":117,"line":1201},[115,156378,30416],{"class":174},[115,156380,155758],{"class":125},[115,156382,1035],{"class":121},[115,156384,156275],{"class":174},[115,156386,114191],{"class":121},[115,156388,156374],{"class":125},[115,156390,156391,156393,156395,156397],{"class":117,"line":1215},[115,156392,30416],{"class":174},[115,156394,126],{"class":125},[115,156396,156330],{"class":121},[115,156398,156374],{"class":125},[57,156400,156402],{"id":156401},"_28-字符串定义","2.8 字符串定义",[14,156404,156405],{},"三种常见写法：",[106,156407,156409],{"className":30379,"code":156408,"language":30381,"meta":22,"style":22},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[112,156410,156411,156421,156430,156440],{"__ignoreMap":22},[115,156412,156413,156416,156418],{"class":117,"line":118},[115,156414,156415],{"class":125},"name1 ",[115,156417,171],{"class":121},[115,156419,156420],{"class":230}," '小明'\n",[115,156422,156423,156426,156428],{"class":117,"line":37},[115,156424,156425],{"class":125},"name2 ",[115,156427,171],{"class":121},[115,156429,149343],{"class":230},[115,156431,156432,156435,156437],{"class":117,"line":1180},[115,156433,156434],{"class":125},"text ",[115,156436,171],{"class":121},[115,156438,156439],{"class":230}," \"\"\"这是多行字符串\n",[115,156441,156442],{"class":117,"line":1195},[115,156443,156444],{"class":230},"可以换行\"\"\"\n",[14,156446,156447],{},"字符串中包含引号：",[106,156449,156451],{"className":30379,"code":156450,"language":30381,"meta":22,"style":22},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[112,156452,156453,156463,156473],{"__ignoreMap":22},[115,156454,156455,156458,156460],{"class":117,"line":118},[115,156456,156457],{"class":125},"msg ",[115,156459,171],{"class":121},[115,156461,156462],{"class":230}," \"他说:'你好'\"\n",[115,156464,156465,156468,156470],{"class":117,"line":37},[115,156466,156467],{"class":125},"msg2 ",[115,156469,171],{"class":121},[115,156471,156472],{"class":230}," '他说:\"你好\"'\n",[115,156474,156475,156478,156480,156483,156486,156489,156491],{"class":117,"line":1180},[115,156476,156477],{"class":125},"msg3 ",[115,156479,171],{"class":121},[115,156481,156482],{"class":230}," \"他说:",[115,156484,156485],{"class":174},"\\\"",[115,156487,156488],{"class":230},"你好",[115,156490,156485],{"class":174},[115,156492,25134],{"class":230},[14,156494,156495],{},"常见转义字符：",[263,156497,156498,156507],{},[266,156499,156500],{},[269,156501,156502,156505],{},[272,156503,156504],{},"写法",[272,156506,100690],{},[310,156508,156509,156519,156528,156538,156547],{},[269,156510,156511,156516],{},[315,156512,156513],{},[112,156514,156515],{},"\\n",[315,156517,156518],{},"换行",[269,156520,156521,156525],{},[315,156522,156523],{},[112,156524,1231],{},[315,156526,156527],{},"制表符",[269,156529,156530,156535],{},[315,156531,156532],{},[112,156533,156534],{},"\\\\",[315,156536,156537],{},"反斜杠",[269,156539,156540,156544],{},[315,156541,156542],{},[112,156543,156485],{},[315,156545,156546],{},"双引号",[269,156548,156549,156554],{},[315,156550,156551],{},[112,156552,156553],{},"\\'",[315,156555,156556],{},"单引号",[57,156558,156560],{"id":156559},"_29-字符串拼接","2.9 字符串拼接",[106,156562,156564],{"className":30379,"code":156563,"language":30381,"meta":22,"style":22},"name = \"小明\"\nprint(\"你好，\" + name)\n",[112,156565,156566,156574],{"__ignoreMap":22},[115,156567,156568,156570,156572],{"class":117,"line":118},[115,156569,146526],{"class":125},[115,156571,171],{"class":121},[115,156573,149343],{"class":230},[115,156575,156576,156578,156580,156583,156585],{"class":117,"line":37},[115,156577,30416],{"class":174},[115,156579,126],{"class":125},[115,156581,156582],{"class":230},"\"你好，\"",[115,156584,45567],{"class":121},[115,156586,156587],{"class":125}," name)\n",[14,156589,156590],{},"字符串只能和字符串拼接：",[106,156592,156594],{"className":30379,"code":156593,"language":30381,"meta":22,"style":22},"age = 18\nprint(\"年龄:\" + str(age))\n",[112,156595,156596,156604],{"__ignoreMap":22},[115,156597,156598,156600,156602],{"class":117,"line":118},[115,156599,146536],{"class":125},[115,156601,171],{"class":121},[115,156603,146541],{"class":174},[115,156605,156606,156608,156610,156612,156614,156616],{"class":117,"line":37},[115,156607,30416],{"class":174},[115,156609,126],{"class":125},[115,156611,146507],{"class":230},[115,156613,45567],{"class":121},[115,156615,73909],{"class":174},[115,156617,156618],{"class":125},"(age))\n",[14,156620,156621],{},"更推荐使用格式化字符串。",[57,156623,156625],{"id":156624},"_210-字符串格式化","2.10 字符串格式化",[86,156627,156629],{"id":156628},"_2101-百分号格式化","2.10.1 百分号格式化",[106,156631,156633],{"className":30379,"code":156632,"language":30381,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[112,156634,156635,156643,156651,156660,156664],{"__ignoreMap":22},[115,156636,156637,156639,156641],{"class":117,"line":118},[115,156638,146526],{"class":125},[115,156640,171],{"class":121},[115,156642,149343],{"class":230},[115,156644,156645,156647,156649],{"class":117,"line":37},[115,156646,146536],{"class":125},[115,156648,171],{"class":121},[115,156650,146541],{"class":174},[115,156652,156653,156655,156657],{"class":117,"line":1180},[115,156654,155348],{"class":125},[115,156656,171],{"class":121},[115,156658,156659],{"class":174}," 95.5\n",[115,156661,156662],{"class":117,"line":1195},[115,156663,2400],{"emptyLinePlaceholder":42},[115,156665,156666,156668,156670,156673,156676,156679,156682,156685,156688,156690,156692],{"class":117,"line":1201},[115,156667,30416],{"class":174},[115,156669,126],{"class":125},[115,156671,156672],{"class":230},"\"姓名:",[115,156674,156675],{"class":174},"%s",[115,156677,156678],{"class":230}," 年龄:",[115,156680,156681],{"class":174},"%d",[115,156683,156684],{"class":230}," 分数:",[115,156686,156687],{"class":174},"%.1f",[115,156689,376],{"class":230},[115,156691,156071],{"class":121},[115,156693,156694],{"class":125}," (name, age, score))\n",[14,156696,156697],{},"常用占位符：",[263,156699,156700,156709],{},[266,156701,156702],{},[269,156703,156704,156707],{},[272,156705,156706],{},"占位符",[272,156708,25870],{},[310,156710,156711,156719,156727],{},[269,156712,156713,156717],{},[315,156714,156715],{},[112,156716,156675],{},[315,156718,155214],{},[269,156720,156721,156725],{},[315,156722,156723],{},[112,156724,156681],{},[315,156726,155192],{},[269,156728,156729,156734],{},[315,156730,156731],{},[112,156732,156733],{},"%f",[315,156735,155203],{},[14,156737,156738],{},"精度控制：",[106,156740,156742],{"className":30379,"code":156741,"language":30381,"meta":22,"style":22},"price = 12.3456\nprint(\"%.2f\" % price)\n",[112,156743,156744,156753],{"__ignoreMap":22},[115,156745,156746,156748,156750],{"class":117,"line":118},[115,156747,146671],{"class":125},[115,156749,171],{"class":121},[115,156751,156752],{"class":174}," 12.3456\n",[115,156754,156755,156757,156759,156761,156764,156766,156768],{"class":117,"line":37},[115,156756,30416],{"class":174},[115,156758,126],{"class":125},[115,156760,376],{"class":230},[115,156762,156763],{"class":174},"%.2f",[115,156765,376],{"class":230},[115,156767,156071],{"class":121},[115,156769,156770],{"class":125}," price)\n",[86,156772,156774],{"id":156773},"_2102-format方法","2.10.2 format方法",[106,156776,156778],{"className":30379,"code":156777,"language":30381,"meta":22,"style":22},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[112,156779,156780,156788,156796,156800,156819,156839],{"__ignoreMap":22},[115,156781,156782,156784,156786],{"class":117,"line":118},[115,156783,146526],{"class":125},[115,156785,171],{"class":121},[115,156787,149343],{"class":230},[115,156789,156790,156792,156794],{"class":117,"line":37},[115,156791,146536],{"class":125},[115,156793,171],{"class":121},[115,156795,146541],{"class":174},[115,156797,156798],{"class":117,"line":1180},[115,156799,2400],{"emptyLinePlaceholder":42},[115,156801,156802,156804,156806,156808,156810,156812,156814,156816],{"class":117,"line":1195},[115,156803,30416],{"class":174},[115,156805,126],{"class":125},[115,156807,156672],{"class":230},[115,156809,32460],{"class":174},[115,156811,156678],{"class":230},[115,156813,32460],{"class":174},[115,156815,376],{"class":230},[115,156817,156818],{"class":125},".format(name, age))\n",[115,156820,156821,156823,156825,156827,156830,156832,156835,156837],{"class":117,"line":1201},[115,156822,30416],{"class":174},[115,156824,126],{"class":125},[115,156826,156672],{"class":230},[115,156828,156829],{"class":174},"{0}",[115,156831,156678],{"class":230},[115,156833,156834],{"class":174},"{1}",[115,156836,376],{"class":230},[115,156838,156818],{"class":125},[115,156840,156841,156843,156845,156847,156850,156852,156855,156857,156860,156862,156864,156867,156869,156871],{"class":117,"line":1215},[115,156842,30416],{"class":174},[115,156844,126],{"class":125},[115,156846,156672],{"class":230},[115,156848,156849],{"class":174},"{name}",[115,156851,156678],{"class":230},[115,156853,156854],{"class":174},"{age}",[115,156856,376],{"class":230},[115,156858,156859],{"class":125},".format(",[115,156861,79800],{"class":5217},[115,156863,171],{"class":121},[115,156865,156866],{"class":125},"name, ",[115,156868,70211],{"class":5217},[115,156870,171],{"class":121},[115,156872,156873],{"class":125},"age))\n",[86,156875,156877],{"id":156876},"_2103-f-string","2.10.3 f-string",[14,156879,156880],{},"推荐写法：",[106,156882,156884],{"className":30379,"code":156883,"language":30381,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[112,156885,156886,156894,156902,156910,156914],{"__ignoreMap":22},[115,156887,156888,156890,156892],{"class":117,"line":118},[115,156889,146526],{"class":125},[115,156891,171],{"class":121},[115,156893,149343],{"class":230},[115,156895,156896,156898,156900],{"class":117,"line":37},[115,156897,146536],{"class":125},[115,156899,171],{"class":121},[115,156901,146541],{"class":174},[115,156903,156904,156906,156908],{"class":117,"line":1180},[115,156905,155348],{"class":125},[115,156907,171],{"class":121},[115,156909,156659],{"class":174},[115,156911,156912],{"class":117,"line":1195},[115,156913,2400],{"emptyLinePlaceholder":42},[115,156915,156916,156918,156920,156922,156924,156926,156928,156930,156932,156934,156936,156938,156940,156942,156945,156948,156950,156952],{"class":117,"line":1201},[115,156917,30416],{"class":174},[115,156919,126],{"class":125},[115,156921,178],{"class":121},[115,156923,156672],{"class":230},[115,156925,1021],{"class":174},[115,156927,79800],{"class":125},[115,156929,1071],{"class":174},[115,156931,156678],{"class":230},[115,156933,1021],{"class":174},[115,156935,70211],{"class":125},[115,156937,1071],{"class":174},[115,156939,156684],{"class":230},[115,156941,1021],{"class":174},[115,156943,156944],{"class":125},"score",[115,156946,156947],{"class":121},":.1f",[115,156949,1071],{"class":174},[115,156951,376],{"class":230},[115,156953,132],{"class":125},[14,156955,156956],{},"表达式也可以放进去：",[106,156958,156960],{"className":30379,"code":156959,"language":30381,"meta":22,"style":22},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[112,156961,156962,156970,156978],{"__ignoreMap":22},[115,156963,156964,156966,156968],{"class":117,"line":118},[115,156965,146671],{"class":125},[115,156967,171],{"class":121},[115,156969,146676],{"class":174},[115,156971,156972,156974,156976],{"class":117,"line":37},[115,156973,146681],{"class":125},[115,156975,171],{"class":121},[115,156977,54417],{"class":174},[115,156979,156980,156982,156984,156986,156989,156991,156993,156995,156998,157000,157003],{"class":117,"line":1180},[115,156981,30416],{"class":174},[115,156983,126],{"class":125},[115,156985,178],{"class":121},[115,156987,156988],{"class":230},"\"总价:",[115,156990,1021],{"class":174},[115,156992,146671],{"class":125},[115,156994,580],{"class":121},[115,156996,156997],{"class":125}," count",[115,156999,1071],{"class":174},[115,157001,157002],{"class":230},"元\"",[115,157004,132],{"class":125},[57,157006,157008],{"id":157007},"_211-input输入","2.11 input输入",[14,157010,157011,157014],{},[112,157012,157013],{},"input()"," 会暂停程序，等待用户输入。",[106,157016,157018],{"className":30379,"code":157017,"language":30381,"meta":22,"style":22},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[112,157019,157020,157034],{"__ignoreMap":22},[115,157021,157022,157024,157026,157028,157030,157032],{"class":117,"line":118},[115,157023,146526],{"class":125},[115,157025,171],{"class":121},[115,157027,60595],{"class":174},[115,157029,126],{"class":125},[115,157031,152369],{"class":230},[115,157033,132],{"class":125},[115,157035,157036,157038,157040,157042,157045,157047,157049,157051,157053],{"class":117,"line":37},[115,157037,30416],{"class":174},[115,157039,126],{"class":125},[115,157041,178],{"class":121},[115,157043,157044],{"class":230},"\"你好，",[115,157046,1021],{"class":174},[115,157048,79800],{"class":125},[115,157050,1071],{"class":174},[115,157052,376],{"class":230},[115,157054,132],{"class":125},[14,157056,157057],{},"输入整数：",[106,157059,157061],{"className":30379,"code":157060,"language":30381,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[112,157062,157063,157081],{"__ignoreMap":22},[115,157064,157065,157067,157069,157071,157073,157075,157077,157079],{"class":117,"line":118},[115,157066,146536],{"class":125},[115,157068,171],{"class":121},[115,157070,2382],{"class":174},[115,157072,126],{"class":125},[115,157074,53811],{"class":174},[115,157076,126],{"class":125},[115,157078,152384],{"class":230},[115,157080,30498],{"class":125},[115,157082,157083,157085,157087,157089,157092,157094,157096,157098,157101,157103],{"class":117,"line":37},[115,157084,30416],{"class":174},[115,157086,126],{"class":125},[115,157088,178],{"class":121},[115,157090,157091],{"class":230},"\"明年你",[115,157093,1021],{"class":174},[115,157095,146536],{"class":125},[115,157097,606],{"class":121},[115,157099,157100],{"class":174}," 1}",[115,157102,149394],{"class":230},[115,157104,132],{"class":125},[14,157106,157107],{},"输入小数：",[106,157109,157111],{"className":30379,"code":157110,"language":30381,"meta":22,"style":22},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[112,157112,157113,157132],{"__ignoreMap":22},[115,157114,157115,157117,157119,157121,157123,157125,157127,157130],{"class":117,"line":118},[115,157116,155321],{"class":125},[115,157118,171],{"class":121},[115,157120,109787],{"class":174},[115,157122,126],{"class":125},[115,157124,53811],{"class":174},[115,157126,126],{"class":125},[115,157128,157129],{"class":230},"\"请输入身高:\"",[115,157131,30498],{"class":125},[115,157133,157134,157136,157138,157140,157143,157145,157147,157150,157152,157155],{"class":117,"line":37},[115,157135,30416],{"class":174},[115,157137,126],{"class":125},[115,157139,178],{"class":121},[115,157141,157142],{"class":230},"\"身高:",[115,157144,1021],{"class":174},[115,157146,24982],{"class":125},[115,157148,157149],{"class":121},":.2f",[115,157151,1071],{"class":174},[115,157153,157154],{"class":230},"米\"",[115,157156,132],{"class":125},[57,157158,157160],{"id":157159},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157162,123282],{},[69,157164,157165,157168,157171,157174],{},[72,157166,157167],{},"输入商品单价。",[72,157169,157170],{},"输入购买数量。",[72,157172,157173],{},"输入折扣，例如 0.8 表示八折。",[72,157175,157176],{},"输出最终金额，保留两位小数。",[14,157178,10036],{},[106,157180,157182],{"className":30379,"code":157181,"language":30381,"meta":22,"style":22},"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",[112,157183,157184,157203,157222,157242,157246,157266,157270,157293,157314,157336],{"__ignoreMap":22},[115,157185,157186,157188,157190,157192,157194,157196,157198,157201],{"class":117,"line":118},[115,157187,146671],{"class":125},[115,157189,171],{"class":121},[115,157191,109787],{"class":174},[115,157193,126],{"class":125},[115,157195,53811],{"class":174},[115,157197,126],{"class":125},[115,157199,157200],{"class":230},"\"请输入商品单价:\"",[115,157202,30498],{"class":125},[115,157204,157205,157207,157209,157211,157213,157215,157217,157220],{"class":117,"line":37},[115,157206,146681],{"class":125},[115,157208,171],{"class":121},[115,157210,2382],{"class":174},[115,157212,126],{"class":125},[115,157214,53811],{"class":174},[115,157216,126],{"class":125},[115,157218,157219],{"class":230},"\"请输入购买数量:\"",[115,157221,30498],{"class":125},[115,157223,157224,157227,157229,157231,157233,157235,157237,157240],{"class":117,"line":1180},[115,157225,157226],{"class":125},"discount ",[115,157228,171],{"class":121},[115,157230,109787],{"class":174},[115,157232,126],{"class":125},[115,157234,53811],{"class":174},[115,157236,126],{"class":125},[115,157238,157239],{"class":230},"\"请输入折扣:\"",[115,157241,30498],{"class":125},[115,157243,157244],{"class":117,"line":1195},[115,157245,2400],{"emptyLinePlaceholder":42},[115,157247,157248,157251,157253,157256,157258,157261,157263],{"class":117,"line":1201},[115,157249,157250],{"class":125},"total ",[115,157252,171],{"class":121},[115,157254,157255],{"class":125}," price ",[115,157257,580],{"class":121},[115,157259,157260],{"class":125}," count ",[115,157262,580],{"class":121},[115,157264,157265],{"class":125}," discount\n",[115,157267,157268],{"class":117,"line":1215},[115,157269,2400],{"emptyLinePlaceholder":42},[115,157271,157272,157274,157276,157278,157281,157283,157285,157287,157289,157291],{"class":117,"line":1221},[115,157273,30416],{"class":174},[115,157275,126],{"class":125},[115,157277,178],{"class":121},[115,157279,157280],{"class":230},"\"商品单价:",[115,157282,1021],{"class":174},[115,157284,79805],{"class":125},[115,157286,157149],{"class":121},[115,157288,1071],{"class":174},[115,157290,376],{"class":230},[115,157292,132],{"class":125},[115,157294,157295,157297,157299,157301,157304,157306,157308,157310,157312],{"class":117,"line":1312},[115,157296,30416],{"class":174},[115,157298,126],{"class":125},[115,157300,178],{"class":121},[115,157302,157303],{"class":230},"\"购买数量:",[115,157305,1021],{"class":174},[115,157307,84424],{"class":125},[115,157309,1071],{"class":174},[115,157311,376],{"class":230},[115,157313,132],{"class":125},[115,157315,157316,157318,157320,157322,157325,157327,157330,157332,157334],{"class":117,"line":1318},[115,157317,30416],{"class":174},[115,157319,126],{"class":125},[115,157321,178],{"class":121},[115,157323,157324],{"class":230},"\"折扣:",[115,157326,1021],{"class":174},[115,157328,157329],{"class":125},"discount",[115,157331,1071],{"class":174},[115,157333,376],{"class":230},[115,157335,132],{"class":125},[115,157337,157338,157340,157342,157344,157347,157349,157352,157354,157356,157358],{"class":117,"line":1330},[115,157339,30416],{"class":174},[115,157341,126],{"class":125},[115,157343,178],{"class":121},[115,157345,157346],{"class":230},"\"应付金额:",[115,157348,1021],{"class":174},[115,157350,157351],{"class":125},"total",[115,157353,157149],{"class":121},[115,157355,1071],{"class":174},[115,157357,157002],{"class":230},[115,157359,132],{"class":125},[57,157361,157363],{"id":157362},"_213-易错点","2.13 易错点",[69,157365,157366,157371,157377,157385,157388],{},[72,157367,157368,157370],{},[112,157369,157013],{}," 的结果是字符串，做运算前要转换。",[72,157372,157373,157374,28386],{},"字符串拼接时，数字要先 ",[112,157375,157376],{},"str()",[72,157378,157379,157381,157382,157384],{},[112,157380,171],{}," 是赋值，",[112,157383,2949],{}," 是比较。",[72,157386,157387],{},"Python 没有自增自减运算符。",[72,157389,157390],{},"浮点数计算可能有精度误差：",[106,157392,157394],{"className":30379,"code":157393,"language":30381,"meta":22,"style":22},"print(0.1 + 0.2)\n",[112,157395,157396],{"__ignoreMap":22},[115,157397,157398,157400,157402,157404,157406,157409],{"class":117,"line":118},[115,157399,30416],{"class":174},[115,157401,126],{"class":125},[115,157403,86200],{"class":174},[115,157405,45567],{"class":121},[115,157407,157408],{"class":174}," 0.2",[115,157410,132],{"class":125},[14,157412,157413,157414,157417],{},"金额计算如果要求严格，可以后续学习 ",[112,157415,157416],{},"decimal"," 模块。",[57,157419,157421],{"id":157420},"_214-本章练习","2.14 本章练习",[69,157423,157424,157427,157430,157433,157436],{},[72,157425,157426],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[72,157428,157429],{},"输入圆的半径，计算面积，保留两位小数。",[72,157431,157432],{},"输入工资和奖金，计算总收入。",[72,157434,157435],{},"输入摄氏温度，转换为华氏温度。",[72,157437,157438],{},"写一个 BMI 计算程序：",[106,157440,157443],{"className":157441,"code":157442,"language":5188,"meta":22},[5186],"BMI = 体重kg \u002F 身高m ** 2\n",[112,157444,157442],{"__ignoreMap":22},[5127,157446,157447],{},"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":22,"searchDepth":37,"depth":37,"links":157449},[157450,157451,157452,157453,157454,157455,157456,157462,157463,157464,157469,157470,157471,157472],{"id":155011,"depth":37,"text":155012},{"id":155120,"depth":37,"text":155121},{"id":155291,"depth":37,"text":155292},{"id":155368,"depth":37,"text":155369},{"id":50721,"depth":37,"text":50722},{"id":155674,"depth":37,"text":155675},{"id":155900,"depth":37,"text":155901,"children":157457},[157458,157459,157460,157461],{"id":155904,"depth":1180,"text":155905},{"id":156098,"depth":1180,"text":156099},{"id":156186,"depth":1180,"text":156187},{"id":156292,"depth":1180,"text":156293},{"id":156401,"depth":37,"text":156402},{"id":156559,"depth":37,"text":156560},{"id":156624,"depth":37,"text":156625,"children":157465},[157466,157467,157468],{"id":156628,"depth":1180,"text":156629},{"id":156773,"depth":1180,"text":156774},{"id":156876,"depth":1180,"text":156877},{"id":157007,"depth":37,"text":157008},{"id":157159,"depth":37,"text":157160},{"id":157362,"depth":37,"text":157363},{"id":157420,"depth":37,"text":157421},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155003,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157479,"title":157480,"body":157481,"description":39,"extension":40,"meta":159117,"navigation":42,"path":159118,"seo":159119,"stem":159120,"__hash__":159121},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157482,"toc":159098},[157483,157486,157490,157493,157508,157511,157539,157543,157593,157595,157611,157614,157640,157643,157647,157714,157717,157733,157737,157740,157858,157861,157868,157917,157923,157927,157930,158043,158046,158050,158054,158057,158107,158111,158114,158164,158168,158171,158209,158213,158216,158262,158265,158300,158304,158309,158312,158358,158360,158427,158431,158437,158548,158557,158561,158563,158574,158576,158742,158746,158748,158762,158764,158978,158982,159001,159018,159021,159067,159071,159095],[10,157484,157480],{"id":157485},"_3-判断语句",[57,157487,157489],{"id":157488},"_31-布尔值","3.1 布尔值",[14,157491,157492],{},"判断语句依赖布尔值：",[106,157494,157496],{"className":30379,"code":157495,"language":30381,"meta":22,"style":22},"True\nFalse\n",[112,157497,157498,157503],{"__ignoreMap":22},[115,157499,157500],{"class":117,"line":118},[115,157501,157502],{"class":174},"True\n",[115,157504,157505],{"class":117,"line":37},[115,157506,157507],{"class":174},"False\n",[14,157509,157510],{},"比较表达式会产生布尔值：",[106,157512,157514],{"className":30379,"code":157513,"language":30381,"meta":22,"style":22},"age = 18\nprint(age >= 18)  # True\n",[112,157515,157516,157524],{"__ignoreMap":22},[115,157517,157518,157520,157522],{"class":117,"line":118},[115,157519,146536],{"class":125},[115,157521,171],{"class":121},[115,157523,146541],{"class":174},[115,157525,157526,157528,157530,157532,157534,157536],{"class":117,"line":37},[115,157527,30416],{"class":174},[115,157529,155758],{"class":125},[115,157531,1710],{"class":121},[115,157533,156275],{"class":174},[115,157535,45809],{"class":125},[115,157537,157538],{"class":184},"# True\n",[57,157540,157542],{"id":157541},"_32-if基础语法","3.2 if基础语法",[106,157544,157546],{"className":30379,"code":157545,"language":30381,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[112,157547,157548,157566,157570,157582],{"__ignoreMap":22},[115,157549,157550,157552,157554,157556,157558,157560,157562,157564],{"class":117,"line":118},[115,157551,146536],{"class":125},[115,157553,171],{"class":121},[115,157555,2382],{"class":174},[115,157557,126],{"class":125},[115,157559,53811],{"class":174},[115,157561,126],{"class":125},[115,157563,152384],{"class":230},[115,157565,30498],{"class":125},[115,157567,157568],{"class":117,"line":37},[115,157569,2400],{"emptyLinePlaceholder":42},[115,157571,157572,157574,157576,157578,157580],{"class":117,"line":1180},[115,157573,1531],{"class":121},[115,157575,15708],{"class":125},[115,157577,1710],{"class":121},[115,157579,156275],{"class":174},[115,157581,3739],{"class":125},[115,157583,157584,157586,157588,157591],{"class":117,"line":1195},[115,157585,31300],{"class":174},[115,157587,126],{"class":125},[115,157589,157590],{"class":230},"\"可以进入网吧\"",[115,157592,132],{"class":125},[14,157594,9026],{},[69,157596,157597,157602,157605,157608],{},[72,157598,157599,157601],{},[112,157600,1531],{}," 后面是条件表达式。",[72,157603,157604],{},"条件后面必须写冒号。",[72,157606,157607],{},"条件成立时执行缩进代码块。",[72,157609,157610],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157612,157613],{},"错误示例：",[106,157615,157617],{"className":30379,"code":157616,"language":30381,"meta":22,"style":22},"if age >= 18\n    print(\"可以进入\")\n",[112,157618,157619,157629],{"__ignoreMap":22},[115,157620,157621,157623,157625,157627],{"class":117,"line":118},[115,157622,1531],{"class":121},[115,157624,15708],{"class":125},[115,157626,1710],{"class":121},[115,157628,146541],{"class":174},[115,157630,157631,157633,157635,157638],{"class":117,"line":37},[115,157632,31300],{"class":174},[115,157634,126],{"class":125},[115,157636,157637],{"class":230},"\"可以进入\"",[115,157639,132],{"class":125},[14,157641,157642],{},"缺少冒号。",[57,157644,157646],{"id":157645},"_33-if-else","3.3 if else",[106,157648,157650],{"className":30379,"code":157649,"language":30381,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[112,157651,157652,157670,157674,157686,157697,157703],{"__ignoreMap":22},[115,157653,157654,157656,157658,157660,157662,157664,157666,157668],{"class":117,"line":118},[115,157655,146536],{"class":125},[115,157657,171],{"class":121},[115,157659,2382],{"class":174},[115,157661,126],{"class":125},[115,157663,53811],{"class":174},[115,157665,126],{"class":125},[115,157667,152384],{"class":230},[115,157669,30498],{"class":125},[115,157671,157672],{"class":117,"line":37},[115,157673,2400],{"emptyLinePlaceholder":42},[115,157675,157676,157678,157680,157682,157684],{"class":117,"line":1180},[115,157677,1531],{"class":121},[115,157679,15708],{"class":125},[115,157681,1710],{"class":121},[115,157683,156275],{"class":174},[115,157685,3739],{"class":125},[115,157687,157688,157690,157692,157695],{"class":117,"line":1195},[115,157689,31300],{"class":174},[115,157691,126],{"class":125},[115,157693,157694],{"class":230},"\"成年人\"",[115,157696,132],{"class":125},[115,157698,157699,157701],{"class":117,"line":1201},[115,157700,1701],{"class":121},[115,157702,3739],{"class":125},[115,157704,157705,157707,157709,157712],{"class":117,"line":1215},[115,157706,31300],{"class":174},[115,157708,126],{"class":125},[115,157710,157711],{"class":230},"\"未成年人\"",[115,157713,132],{"class":125},[14,157715,157716],{},"执行逻辑：",[69,157718,157719,157725,157730],{},[72,157720,157721,157722,157724],{},"条件成立，执行 ",[112,157723,1531],{}," 代码块。",[72,157726,157727,157728,157724],{},"条件不成立，执行 ",[112,157729,1701],{},[72,157731,157732],{},"两个代码块只会执行其中一个。",[57,157734,157736],{"id":157735},"_34-if-elif-else","3.4 if elif else",[14,157738,157739],{},"多条件判断：",[106,157741,157743],{"className":30379,"code":157742,"language":30381,"meta":22,"style":22},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[112,157744,157745,157763,157767,157781,157792,157806,157817,157830,157841,157847],{"__ignoreMap":22},[115,157746,157747,157749,157751,157753,157755,157757,157759,157761],{"class":117,"line":118},[115,157748,155348],{"class":125},[115,157750,171],{"class":121},[115,157752,2382],{"class":174},[115,157754,126],{"class":125},[115,157756,53811],{"class":174},[115,157758,126],{"class":125},[115,157760,152399],{"class":230},[115,157762,30498],{"class":125},[115,157764,157765],{"class":117,"line":37},[115,157766,2400],{"emptyLinePlaceholder":42},[115,157768,157769,157771,157774,157776,157779],{"class":117,"line":1180},[115,157770,1531],{"class":121},[115,157772,157773],{"class":125}," score ",[115,157775,1710],{"class":121},[115,157777,157778],{"class":174}," 90",[115,157780,3739],{"class":125},[115,157782,157783,157785,157787,157790],{"class":117,"line":1195},[115,157784,31300],{"class":174},[115,157786,126],{"class":125},[115,157788,157789],{"class":230},"\"优秀\"",[115,157791,132],{"class":125},[115,157793,157794,157797,157799,157801,157804],{"class":117,"line":1201},[115,157795,157796],{"class":121},"elif",[115,157798,157773],{"class":125},[115,157800,1710],{"class":121},[115,157802,157803],{"class":174}," 80",[115,157805,3739],{"class":125},[115,157807,157808,157810,157812,157815],{"class":117,"line":1215},[115,157809,31300],{"class":174},[115,157811,126],{"class":125},[115,157813,157814],{"class":230},"\"良好\"",[115,157816,132],{"class":125},[115,157818,157819,157821,157823,157825,157828],{"class":117,"line":1221},[115,157820,157796],{"class":121},[115,157822,157773],{"class":125},[115,157824,1710],{"class":121},[115,157826,157827],{"class":174}," 60",[115,157829,3739],{"class":125},[115,157831,157832,157834,157836,157839],{"class":117,"line":1312},[115,157833,31300],{"class":174},[115,157835,126],{"class":125},[115,157837,157838],{"class":230},"\"及格\"",[115,157840,132],{"class":125},[115,157842,157843,157845],{"class":117,"line":1318},[115,157844,1701],{"class":121},[115,157846,3739],{"class":125},[115,157848,157849,157851,157853,157856],{"class":117,"line":1330},[115,157850,31300],{"class":174},[115,157852,126],{"class":125},[115,157854,157855],{"class":230},"\"不及格\"",[115,157857,132],{"class":125},[14,157859,157860],{},"注意判断顺序很重要。",[14,157862,157863,157864,157867],{},"如果把 ",[112,157865,157866],{},"score >= 60"," 放在最前面：",[106,157869,157871],{"className":30379,"code":157870,"language":30381,"meta":22,"style":22},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[112,157872,157873,157885,157895,157907],{"__ignoreMap":22},[115,157874,157875,157877,157879,157881,157883],{"class":117,"line":118},[115,157876,1531],{"class":121},[115,157878,157773],{"class":125},[115,157880,1710],{"class":121},[115,157882,157827],{"class":174},[115,157884,3739],{"class":125},[115,157886,157887,157889,157891,157893],{"class":117,"line":37},[115,157888,31300],{"class":174},[115,157890,126],{"class":125},[115,157892,157838],{"class":230},[115,157894,132],{"class":125},[115,157896,157897,157899,157901,157903,157905],{"class":117,"line":1180},[115,157898,157796],{"class":121},[115,157900,157773],{"class":125},[115,157902,1710],{"class":121},[115,157904,157778],{"class":174},[115,157906,3739],{"class":125},[115,157908,157909,157911,157913,157915],{"class":117,"line":1195},[115,157910,31300],{"class":174},[115,157912,126],{"class":125},[115,157914,157789],{"class":230},[115,157916,132],{"class":125},[14,157918,157919,157920,157922],{},"成绩 95 会先满足 ",[112,157921,157866],{},"，后面的优秀分支就不会执行。",[57,157924,157926],{"id":157925},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157928,157929],{},"嵌套判断就是在一个判断内部再写判断。",[106,157931,157933],{"className":30379,"code":157932,"language":30381,"meta":22,"style":22},"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",[112,157934,157935,157953,157968,157972,157984,157998,158008,158015,158026,158032],{"__ignoreMap":22},[115,157936,157937,157939,157941,157943,157945,157947,157949,157951],{"class":117,"line":118},[115,157938,146536],{"class":125},[115,157940,171],{"class":121},[115,157942,2382],{"class":174},[115,157944,126],{"class":125},[115,157946,53811],{"class":174},[115,157948,126],{"class":125},[115,157950,152384],{"class":230},[115,157952,30498],{"class":125},[115,157954,157955,157957,157959,157961,157963,157966],{"class":117,"line":37},[115,157956,156351],{"class":125},[115,157958,171],{"class":121},[115,157960,60595],{"class":174},[115,157962,126],{"class":125},[115,157964,157965],{"class":230},"\"是否有票(y\u002Fn):\"",[115,157967,132],{"class":125},[115,157969,157970],{"class":117,"line":1180},[115,157971,2400],{"emptyLinePlaceholder":42},[115,157973,157974,157976,157978,157980,157982],{"class":117,"line":1195},[115,157975,1531],{"class":121},[115,157977,15708],{"class":125},[115,157979,1710],{"class":121},[115,157981,156275],{"class":174},[115,157983,3739],{"class":125},[115,157985,157986,157988,157991,157993,157996],{"class":117,"line":1201},[115,157987,3101],{"class":121},[115,157989,157990],{"class":125}," has_ticket ",[115,157992,2949],{"class":121},[115,157994,157995],{"class":230}," \"y\"",[115,157997,3739],{"class":125},[115,157999,158000,158002,158004,158006],{"class":117,"line":1215},[115,158001,32452],{"class":174},[115,158003,126],{"class":125},[115,158005,157637],{"class":230},[115,158007,132],{"class":125},[115,158009,158010,158013],{"class":117,"line":1221},[115,158011,158012],{"class":121},"    else",[115,158014,3739],{"class":125},[115,158016,158017,158019,158021,158024],{"class":117,"line":1312},[115,158018,32452],{"class":174},[115,158020,126],{"class":125},[115,158022,158023],{"class":230},"\"请先买票\"",[115,158025,132],{"class":125},[115,158027,158028,158030],{"class":117,"line":1318},[115,158029,1701],{"class":121},[115,158031,3739],{"class":125},[115,158033,158034,158036,158038,158041],{"class":117,"line":1330},[115,158035,31300],{"class":174},[115,158037,126],{"class":125},[115,158039,158040],{"class":230},"\"未成年人禁止进入\"",[115,158042,132],{"class":125},[14,158044,158045],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[57,158047,158049],{"id":158048},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[86,158051,158053],{"id":158052},"_361-and","3.6.1 and",[14,158055,158056],{},"两个条件都成立才成立。",[106,158058,158060],{"className":30379,"code":158059,"language":30381,"meta":22,"style":22},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[112,158061,158062,158070,158078,158082,158097],{"__ignoreMap":22},[115,158063,158064,158066,158068],{"class":117,"line":118},[115,158065,146536],{"class":125},[115,158067,171],{"class":121},[115,158069,88055],{"class":174},[115,158071,158072,158074,158076],{"class":117,"line":37},[115,158073,156351],{"class":125},[115,158075,171],{"class":121},[115,158077,153589],{"class":174},[115,158079,158080],{"class":117,"line":1180},[115,158081,2400],{"emptyLinePlaceholder":42},[115,158083,158084,158086,158088,158090,158092,158094],{"class":117,"line":1195},[115,158085,1531],{"class":121},[115,158087,15708],{"class":125},[115,158089,1710],{"class":121},[115,158091,156275],{"class":174},[115,158093,120419],{"class":121},[115,158095,158096],{"class":125}," has_ticket:\n",[115,158098,158099,158101,158103,158105],{"class":117,"line":1201},[115,158100,31300],{"class":174},[115,158102,126],{"class":125},[115,158104,157637],{"class":230},[115,158106,132],{"class":125},[86,158108,158110],{"id":158109},"_362-or","3.6.2 or",[14,158112,158113],{},"只要一个条件成立就成立。",[106,158115,158117],{"className":30379,"code":158116,"language":30381,"meta":22,"style":22},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[112,158118,158119,158128,158137,158141,158153],{"__ignoreMap":22},[115,158120,158121,158124,158126],{"class":117,"line":118},[115,158122,158123],{"class":125},"is_vip ",[115,158125,171],{"class":121},[115,158127,125797],{"class":174},[115,158129,158130,158133,158135],{"class":117,"line":37},[115,158131,158132],{"class":125},"coupon ",[115,158134,171],{"class":121},[115,158136,153589],{"class":174},[115,158138,158139],{"class":117,"line":1180},[115,158140,2400],{"emptyLinePlaceholder":42},[115,158142,158143,158145,158148,158150],{"class":117,"line":1195},[115,158144,1531],{"class":121},[115,158146,158147],{"class":125}," is_vip ",[115,158149,115080],{"class":121},[115,158151,158152],{"class":125}," coupon:\n",[115,158154,158155,158157,158159,158162],{"class":117,"line":1201},[115,158156,31300],{"class":174},[115,158158,126],{"class":125},[115,158160,158161],{"class":230},"\"可以享受优惠\"",[115,158163,132],{"class":125},[86,158165,158167],{"id":158166},"_363-not","3.6.3 not",[14,158169,158170],{},"取反。",[106,158172,158174],{"className":30379,"code":158173,"language":30381,"meta":22,"style":22},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[112,158175,158176,158185,158189,158198],{"__ignoreMap":22},[115,158177,158178,158181,158183],{"class":117,"line":118},[115,158179,158180],{"class":125},"is_closed ",[115,158182,171],{"class":121},[115,158184,125797],{"class":174},[115,158186,158187],{"class":117,"line":37},[115,158188,2400],{"emptyLinePlaceholder":42},[115,158190,158191,158193,158195],{"class":117,"line":1180},[115,158192,1531],{"class":121},[115,158194,38931],{"class":121},[115,158196,158197],{"class":125}," is_closed:\n",[115,158199,158200,158202,158204,158207],{"class":117,"line":1195},[115,158201,31300],{"class":174},[115,158203,126],{"class":125},[115,158205,158206],{"class":230},"\"店铺营业中\"",[115,158208,132],{"class":125},[57,158210,158212],{"id":158211},"_37-链式比较","3.7 链式比较",[14,158214,158215],{},"Python 支持链式比较：",[106,158217,158219],{"className":30379,"code":158218,"language":30381,"meta":22,"style":22},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[112,158220,158221,158230,158234,158251],{"__ignoreMap":22},[115,158222,158223,158225,158227],{"class":117,"line":118},[115,158224,155348],{"class":125},[115,158226,171],{"class":121},[115,158228,158229],{"class":174}," 85\n",[115,158231,158232],{"class":117,"line":37},[115,158233,2400],{"emptyLinePlaceholder":42},[115,158235,158236,158238,158240,158243,158245,158247,158249],{"class":117,"line":1180},[115,158237,1531],{"class":121},[115,158239,4093],{"class":174},[115,158241,158242],{"class":121}," \u003C=",[115,158244,157773],{"class":125},[115,158246,1588],{"class":121},[115,158248,5755],{"class":174},[115,158250,3739],{"class":125},[115,158252,158253,158255,158257,158260],{"class":117,"line":1195},[115,158254,31300],{"class":174},[115,158256,126],{"class":125},[115,158258,158259],{"class":230},"\"成绩合法\"",[115,158261,132],{"class":125},[14,158263,158264],{},"等价于：",[106,158266,158268],{"className":30379,"code":158267,"language":30381,"meta":22,"style":22},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[112,158269,158270,158290],{"__ignoreMap":22},[115,158271,158272,158274,158276,158278,158280,158282,158284,158286,158288],{"class":117,"line":118},[115,158273,1531],{"class":121},[115,158275,157773],{"class":125},[115,158277,1710],{"class":121},[115,158279,4093],{"class":174},[115,158281,120419],{"class":121},[115,158283,157773],{"class":125},[115,158285,1588],{"class":121},[115,158287,5755],{"class":174},[115,158289,3739],{"class":125},[115,158291,158292,158294,158296,158298],{"class":117,"line":37},[115,158293,31300],{"class":174},[115,158295,126],{"class":125},[115,158297,158259],{"class":230},[115,158299,132],{"class":125},[57,158301,158303],{"id":158302},"_38-真值和假值","3.8 真值和假值",[14,158305,116457,158306,158308],{},[112,158307,1531],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158310,158311],{},"假值：",[106,158313,158315],{"className":30379,"code":158314,"language":30381,"meta":22,"style":22},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[112,158316,158317,158321,158326,158330,158334,158339,158343,158347,158352],{"__ignoreMap":22},[115,158318,158319],{"class":117,"line":118},[115,158320,157507],{"class":174},[115,158322,158323],{"class":117,"line":37},[115,158324,158325],{"class":174},"None\n",[115,158327,158328],{"class":117,"line":1180},[115,158329,3085],{"class":174},[115,158331,158332],{"class":117,"line":1195},[115,158333,32343],{"class":174},[115,158335,158336],{"class":117,"line":1201},[115,158337,158338],{"class":230},"\"\"\n",[115,158340,158341],{"class":117,"line":1215},[115,158342,32358],{"class":125},[115,158344,158345],{"class":117,"line":1221},[115,158346,1976],{"class":125},[115,158348,158349],{"class":117,"line":1312},[115,158350,158351],{"class":125},"{}\n",[115,158353,158354,158356],{"class":117,"line":1318},[115,158355,155280],{"class":174},[115,158357,1976],{"class":125},[14,158359,15136],{},[106,158361,158363],{"className":30379,"code":158362,"language":30381,"meta":22,"style":22},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[112,158364,158365,158379,158383,158390,158410,158416],{"__ignoreMap":22},[115,158366,158367,158369,158371,158373,158375,158377],{"class":117,"line":118},[115,158368,146526],{"class":125},[115,158370,171],{"class":121},[115,158372,60595],{"class":174},[115,158374,126],{"class":125},[115,158376,152369],{"class":230},[115,158378,132],{"class":125},[115,158380,158381],{"class":117,"line":37},[115,158382,2400],{"emptyLinePlaceholder":42},[115,158384,158385,158387],{"class":117,"line":1180},[115,158386,1531],{"class":121},[115,158388,158389],{"class":125}," name:\n",[115,158391,158392,158394,158396,158398,158400,158402,158404,158406,158408],{"class":117,"line":1195},[115,158393,31300],{"class":174},[115,158395,126],{"class":125},[115,158397,178],{"class":121},[115,158399,157044],{"class":230},[115,158401,1021],{"class":174},[115,158403,79800],{"class":125},[115,158405,1071],{"class":174},[115,158407,376],{"class":230},[115,158409,132],{"class":125},[115,158411,158412,158414],{"class":117,"line":1201},[115,158413,1701],{"class":121},[115,158415,3739],{"class":125},[115,158417,158418,158420,158422,158425],{"class":117,"line":1215},[115,158419,31300],{"class":174},[115,158421,126],{"class":125},[115,158423,158424],{"class":230},"\"姓名不能为空\"",[115,158426,132],{"class":125},[57,158428,158430],{"id":158429},"_39-match语句","3.9 match语句",[14,158432,158433,158434,158436],{},"Python 3.10 开始支持 ",[112,158435,71255],{},"。它适合处理固定选项。",[106,158438,158440],{"className":30379,"code":158439,"language":30381,"meta":22,"style":22},"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",[112,158441,158442,158458,158462,158469,158479,158490,158499,158510,158519,158530,158537],{"__ignoreMap":22},[115,158443,158444,158447,158449,158451,158453,158456],{"class":117,"line":118},[115,158445,158446],{"class":125},"command ",[115,158448,171],{"class":121},[115,158450,60595],{"class":174},[115,158452,126],{"class":125},[115,158454,158455],{"class":230},"\"请输入命令:\"",[115,158457,132],{"class":125},[115,158459,158460],{"class":117,"line":37},[115,158461,2400],{"emptyLinePlaceholder":42},[115,158463,158464,158466],{"class":117,"line":1180},[115,158465,71255],{"class":121},[115,158467,158468],{"class":125}," command:\n",[115,158470,158471,158474,158477],{"class":117,"line":1195},[115,158472,158473],{"class":121},"    case",[115,158475,158476],{"class":230}," \"start\"",[115,158478,3739],{"class":125},[115,158480,158481,158483,158485,158488],{"class":117,"line":1201},[115,158482,32452],{"class":174},[115,158484,126],{"class":125},[115,158486,158487],{"class":230},"\"启动\"",[115,158489,132],{"class":125},[115,158491,158492,158494,158497],{"class":117,"line":1215},[115,158493,158473],{"class":121},[115,158495,158496],{"class":230}," \"stop\"",[115,158498,3739],{"class":125},[115,158500,158501,158503,158505,158508],{"class":117,"line":1221},[115,158502,32452],{"class":174},[115,158504,126],{"class":125},[115,158506,158507],{"class":230},"\"停止\"",[115,158509,132],{"class":125},[115,158511,158512,158514,158517],{"class":117,"line":1312},[115,158513,158473],{"class":121},[115,158515,158516],{"class":230}," \"restart\"",[115,158518,3739],{"class":125},[115,158520,158521,158523,158525,158528],{"class":117,"line":1318},[115,158522,32452],{"class":174},[115,158524,126],{"class":125},[115,158526,158527],{"class":230},"\"重启\"",[115,158529,132],{"class":125},[115,158531,158532,158534],{"class":117,"line":1330},[115,158533,158473],{"class":121},[115,158535,158536],{"class":125}," _:\n",[115,158538,158539,158541,158543,158546],{"class":117,"line":1612},[115,158540,32452],{"class":174},[115,158542,126],{"class":125},[115,158544,158545],{"class":230},"\"未知命令\"",[115,158547,132],{"class":125},[14,158549,158550,158551,158553,158554,158556],{},"入门阶段掌握 ",[112,158552,154648],{}," 更重要，",[112,158555,71255],{}," 可以作为补充。",[57,158558,158560],{"id":158559},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158562,123282],{},[69,158564,158565,158568,158571],{},[72,158566,158567],{},"输入成绩。",[72,158569,158570],{},"判断成绩是否合法。",[72,158572,158573],{},"输出等级。",[14,158575,10036],{},[106,158577,158579],{"className":30379,"code":158578,"language":30381,"meta":22,"style":22},"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",[112,158580,158581,158599,158603,158621,158632,158644,158655,158667,158678,158691,158702,158714,158725,158731],{"__ignoreMap":22},[115,158582,158583,158585,158587,158589,158591,158593,158595,158597],{"class":117,"line":118},[115,158584,155348],{"class":125},[115,158586,171],{"class":121},[115,158588,109787],{"class":174},[115,158590,126],{"class":125},[115,158592,53811],{"class":174},[115,158594,126],{"class":125},[115,158596,152399],{"class":230},[115,158598,30498],{"class":125},[115,158600,158601],{"class":117,"line":37},[115,158602,2400],{"emptyLinePlaceholder":42},[115,158604,158605,158607,158609,158611,158613,158615,158617,158619],{"class":117,"line":1180},[115,158606,1531],{"class":121},[115,158608,38931],{"class":121},[115,158610,4093],{"class":174},[115,158612,158242],{"class":121},[115,158614,157773],{"class":125},[115,158616,1588],{"class":121},[115,158618,5755],{"class":174},[115,158620,3739],{"class":125},[115,158622,158623,158625,158627,158630],{"class":117,"line":1195},[115,158624,31300],{"class":174},[115,158626,126],{"class":125},[115,158628,158629],{"class":230},"\"成绩不合法\"",[115,158631,132],{"class":125},[115,158633,158634,158636,158638,158640,158642],{"class":117,"line":1201},[115,158635,157796],{"class":121},[115,158637,157773],{"class":125},[115,158639,1710],{"class":121},[115,158641,157778],{"class":174},[115,158643,3739],{"class":125},[115,158645,158646,158648,158650,158653],{"class":117,"line":1215},[115,158647,31300],{"class":174},[115,158649,126],{"class":125},[115,158651,158652],{"class":230},"\"等级:A\"",[115,158654,132],{"class":125},[115,158656,158657,158659,158661,158663,158665],{"class":117,"line":1221},[115,158658,157796],{"class":121},[115,158660,157773],{"class":125},[115,158662,1710],{"class":121},[115,158664,157803],{"class":174},[115,158666,3739],{"class":125},[115,158668,158669,158671,158673,158676],{"class":117,"line":1312},[115,158670,31300],{"class":174},[115,158672,126],{"class":125},[115,158674,158675],{"class":230},"\"等级:B\"",[115,158677,132],{"class":125},[115,158679,158680,158682,158684,158686,158689],{"class":117,"line":1318},[115,158681,157796],{"class":121},[115,158683,157773],{"class":125},[115,158685,1710],{"class":121},[115,158687,158688],{"class":174}," 70",[115,158690,3739],{"class":125},[115,158692,158693,158695,158697,158700],{"class":117,"line":1330},[115,158694,31300],{"class":174},[115,158696,126],{"class":125},[115,158698,158699],{"class":230},"\"等级:C\"",[115,158701,132],{"class":125},[115,158703,158704,158706,158708,158710,158712],{"class":117,"line":1612},[115,158705,157796],{"class":121},[115,158707,157773],{"class":125},[115,158709,1710],{"class":121},[115,158711,157827],{"class":174},[115,158713,3739],{"class":125},[115,158715,158716,158718,158720,158723],{"class":117,"line":1617},[115,158717,31300],{"class":174},[115,158719,126],{"class":125},[115,158721,158722],{"class":230},"\"等级:D\"",[115,158724,132],{"class":125},[115,158726,158727,158729],{"class":117,"line":1623},[115,158728,1701],{"class":121},[115,158730,3739],{"class":125},[115,158732,158733,158735,158737,158740],{"class":117,"line":1628},[115,158734,31300],{"class":174},[115,158736,126],{"class":125},[115,158738,158739],{"class":230},"\"等级:E\"",[115,158741,132],{"class":125},[57,158743,158745],{"id":158744},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158747,123282],{},[69,158749,158750,158753,158756,158759],{},[72,158751,158752],{},"输入消费金额。",[72,158754,158755],{},"输入会员等级，普通、银卡、金卡。",[72,158757,158758],{},"普通不打折，银卡 9 折，金卡 8 折。",[72,158760,158761],{},"满 500 再减 50。",[14,158763,10036],{},[106,158765,158767],{"className":30379,"code":158766,"language":30381,"meta":22,"style":22},"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",[112,158768,158769,158789,158805,158809,158817,158821,158835,158845,158858,158867,158880,158888,158894,158905,158909,158923,158927,158941,158951,158955],{"__ignoreMap":22},[115,158770,158771,158774,158776,158778,158780,158782,158784,158787],{"class":117,"line":118},[115,158772,158773],{"class":125},"amount ",[115,158775,171],{"class":121},[115,158777,109787],{"class":174},[115,158779,126],{"class":125},[115,158781,53811],{"class":174},[115,158783,126],{"class":125},[115,158785,158786],{"class":230},"\"请输入消费金额:\"",[115,158788,30498],{"class":125},[115,158790,158791,158794,158796,158798,158800,158803],{"class":117,"line":37},[115,158792,158793],{"class":125},"level ",[115,158795,171],{"class":121},[115,158797,60595],{"class":174},[115,158799,126],{"class":125},[115,158801,158802],{"class":230},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[115,158804,132],{"class":125},[115,158806,158807],{"class":117,"line":1180},[115,158808,2400],{"emptyLinePlaceholder":42},[115,158810,158811,158813,158815],{"class":117,"line":1195},[115,158812,157226],{"class":125},[115,158814,171],{"class":121},[115,158816,55689],{"class":174},[115,158818,158819],{"class":117,"line":1201},[115,158820,2400],{"emptyLinePlaceholder":42},[115,158822,158823,158825,158828,158830,158833],{"class":117,"line":1215},[115,158824,1531],{"class":121},[115,158826,158827],{"class":125}," level ",[115,158829,2949],{"class":121},[115,158831,158832],{"class":230}," \"银卡\"",[115,158834,3739],{"class":125},[115,158836,158837,158840,158842],{"class":117,"line":1221},[115,158838,158839],{"class":125},"    discount ",[115,158841,171],{"class":121},[115,158843,158844],{"class":174}," 0.9\n",[115,158846,158847,158849,158851,158853,158856],{"class":117,"line":1312},[115,158848,157796],{"class":121},[115,158850,158827],{"class":125},[115,158852,2949],{"class":121},[115,158854,158855],{"class":230}," \"金卡\"",[115,158857,3739],{"class":125},[115,158859,158860,158862,158864],{"class":117,"line":1318},[115,158861,158839],{"class":125},[115,158863,171],{"class":121},[115,158865,158866],{"class":174}," 0.8\n",[115,158868,158869,158871,158873,158875,158878],{"class":117,"line":1330},[115,158870,157796],{"class":121},[115,158872,158827],{"class":125},[115,158874,2949],{"class":121},[115,158876,158877],{"class":230}," \"普通\"",[115,158879,3739],{"class":125},[115,158881,158882,158884,158886],{"class":117,"line":1612},[115,158883,158839],{"class":125},[115,158885,171],{"class":121},[115,158887,55689],{"class":174},[115,158889,158890,158892],{"class":117,"line":1617},[115,158891,1701],{"class":121},[115,158893,3739],{"class":125},[115,158895,158896,158898,158900,158903],{"class":117,"line":1623},[115,158897,31300],{"class":174},[115,158899,126],{"class":125},[115,158901,158902],{"class":230},"\"会员等级输入错误，按普通会员计算\"",[115,158904,132],{"class":125},[115,158906,158907],{"class":117,"line":1628},[115,158908,2400],{"emptyLinePlaceholder":42},[115,158910,158911,158914,158916,158919,158921],{"class":117,"line":1642},[115,158912,158913],{"class":125},"pay ",[115,158915,171],{"class":121},[115,158917,158918],{"class":125}," amount ",[115,158920,580],{"class":121},[115,158922,157265],{"class":125},[115,158924,158925],{"class":117,"line":1647},[115,158926,2400],{"emptyLinePlaceholder":42},[115,158928,158929,158931,158934,158936,158939],{"class":117,"line":1653},[115,158930,1531],{"class":121},[115,158932,158933],{"class":125}," pay ",[115,158935,1710],{"class":121},[115,158937,158938],{"class":174}," 500",[115,158940,3739],{"class":125},[115,158942,158943,158946,158948],{"class":117,"line":1674},[115,158944,158945],{"class":125},"    pay ",[115,158947,150242],{"class":121},[115,158949,158950],{"class":174}," 50\n",[115,158952,158953],{"class":117,"line":1679},[115,158954,2400],{"emptyLinePlaceholder":42},[115,158956,158957,158959,158961,158963,158965,158967,158970,158972,158974,158976],{"class":117,"line":1693},[115,158958,30416],{"class":174},[115,158960,126],{"class":125},[115,158962,178],{"class":121},[115,158964,157346],{"class":230},[115,158966,1021],{"class":174},[115,158968,158969],{"class":125},"pay",[115,158971,157149],{"class":121},[115,158973,1071],{"class":174},[115,158975,157002],{"class":230},[115,158977,132],{"class":125},[57,158979,158981],{"id":158980},"_312-易错点","3.12 易错点",[69,158983,158984,158987,158990,158993,158998],{},[72,158985,158986],{},"冒号不能漏。",[72,158988,158989],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[72,158991,158992],{},"多分支判断要注意顺序。",[72,158994,158995,158996,28386],{},"判断相等用 ",[112,158997,2949],{},[72,158999,159000],{},"字符串比较区分大小写：",[106,159002,159004],{"className":30379,"code":159003,"language":30381,"meta":22,"style":22},"\"Y\" == \"y\"  # False\n",[112,159005,159006],{"__ignoreMap":22},[115,159007,159008,159011,159013,159015],{"class":117,"line":118},[115,159009,159010],{"class":230},"\"Y\"",[115,159012,101549],{"class":121},[115,159014,157995],{"class":230},[115,159016,159017],{"class":184},"  # False\n",[14,159019,159020],{},"可转换后再判断：",[106,159022,159024],{"className":30379,"code":159023,"language":30381,"meta":22,"style":22},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[112,159025,159026,159043,159056],{"__ignoreMap":22},[115,159027,159028,159031,159033,159035,159037,159040],{"class":117,"line":118},[115,159029,159030],{"class":125},"answer ",[115,159032,171],{"class":121},[115,159034,60595],{"class":174},[115,159036,126],{"class":125},[115,159038,159039],{"class":230},"\"是否继续(y\u002Fn):\"",[115,159041,159042],{"class":125},").lower()\n",[115,159044,159045,159047,159050,159052,159054],{"class":117,"line":37},[115,159046,1531],{"class":121},[115,159048,159049],{"class":125}," answer ",[115,159051,2949],{"class":121},[115,159053,157995],{"class":230},[115,159055,3739],{"class":125},[115,159057,159058,159060,159062,159065],{"class":117,"line":1180},[115,159059,31300],{"class":174},[115,159061,126],{"class":125},[115,159063,159064],{"class":230},"\"继续\"",[115,159066,132],{"class":125},[57,159068,159070],{"id":159069},"_313-本章练习","3.13 本章练习",[69,159072,159073,159076,159079,159082,159092],{},[72,159074,159075],{},"输入年龄，判断是否成年。",[72,159077,159078],{},"输入年份，判断是否为闰年。",[72,159080,159081],{},"输入三个数字，输出最大值。",[72,159083,159084,159085,159088,159089,159091],{},"写登录判断：用户名是 ",[112,159086,159087],{},"admin"," 且密码是 ",[112,159090,15085],{}," 才登录成功。",[72,159093,159094],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5127,159096,159097],{},"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":22,"searchDepth":37,"depth":37,"links":159099},[159100,159101,159102,159103,159104,159105,159110,159111,159112,159113,159114,159115,159116],{"id":157488,"depth":37,"text":157489},{"id":157541,"depth":37,"text":157542},{"id":157645,"depth":37,"text":157646},{"id":157735,"depth":37,"text":157736},{"id":157925,"depth":37,"text":157926},{"id":158048,"depth":37,"text":158049,"children":159106},[159107,159108,159109],{"id":158052,"depth":1180,"text":158053},{"id":158109,"depth":1180,"text":158110},{"id":158166,"depth":1180,"text":158167},{"id":158211,"depth":37,"text":158212},{"id":158302,"depth":37,"text":158303},{"id":158429,"depth":37,"text":158430},{"id":158559,"depth":37,"text":158560},{"id":158744,"depth":37,"text":158745},{"id":158980,"depth":37,"text":158981},{"id":159069,"depth":37,"text":159070},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157480,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159123,"title":159124,"body":159125,"description":39,"extension":40,"meta":160894,"navigation":42,"path":160895,"seo":160896,"stem":160897,"__hash__":160898},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159126,"toc":160874},[159127,159130,159134,159140,159143,159160,159164,159166,159183,159185,159230,159232,159249,159253,159256,159322,159325,159343,159347,159508,159517,159521,159525,159530,159577,159579,159585,159589,159594,159641,159643,159649,159653,159658,159694,159697,159744,159748,159754,159812,159817,159848,159853,159857,159912,159915,159987,159990,160049,160053,160056,160131,160134,160138,160244,160247,160273,160277,160289,160358,160361,160453,160457,160459,160470,160472,160602,160606,160808,160816,160820,160850,160854,160871],[10,159128,159124],{"id":159129},"_4-循环语句",[57,159131,159133],{"id":159132},"_41-为什么需要循环","4.1 为什么需要循环",[14,159135,159136,159137,159139],{},"如果要输出 1 到 100，不应该写 100 行 ",[112,159138,146462],{},"，而应该用循环。",[14,159141,159142],{},"循环适合处理重复任务：",[69,159144,159145,159148,159151,159154,159157],{},[72,159146,159147],{},"重复输出。",[72,159149,159150],{},"重复输入。",[72,159152,159153],{},"遍历数据。",[72,159155,159156],{},"持续执行菜单。",[72,159158,159159],{},"批量处理文件或数据。",[57,159161,159163],{"id":159162},"_42-while循环","4.2 while循环",[14,159165,5182],{},[106,159167,159169],{"className":30379,"code":159168,"language":30381,"meta":22,"style":22},"while 条件:\n    循环体\n",[112,159170,159171,159178],{"__ignoreMap":22},[115,159172,159173,159175],{"class":117,"line":118},[115,159174,108653],{"class":121},[115,159176,159177],{"class":125}," 条件:\n",[115,159179,159180],{"class":117,"line":37},[115,159181,159182],{"class":125},"    循环体\n",[14,159184,15136],{},[106,159186,159188],{"className":30379,"code":159187,"language":30381,"meta":22,"style":22},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[112,159189,159190,159198,159202,159214,159221],{"__ignoreMap":22},[115,159191,159192,159194,159196],{"class":117,"line":118},[115,159193,100138],{"class":125},[115,159195,171],{"class":121},[115,159197,55689],{"class":174},[115,159199,159200],{"class":117,"line":37},[115,159201,2400],{"emptyLinePlaceholder":42},[115,159203,159204,159206,159208,159210,159212],{"class":117,"line":1180},[115,159205,108653],{"class":121},[115,159207,9439],{"class":125},[115,159209,1588],{"class":121},[115,159211,2148],{"class":174},[115,159213,3739],{"class":125},[115,159215,159216,159218],{"class":117,"line":1195},[115,159217,31300],{"class":174},[115,159219,159220],{"class":125},"(i)\n",[115,159222,159223,159226,159228],{"class":117,"line":1201},[115,159224,159225],{"class":125},"    i ",[115,159227,9478],{"class":121},[115,159229,55689],{"class":174},[14,159231,80919],{},[69,159233,159234,159240,159243,159246],{},[72,159235,159236,159237,28386],{},"判断条件 ",[112,159238,159239],{},"i \u003C= 5",[72,159241,159242],{},"条件成立，执行循环体。",[72,159244,159245],{},"执行完后回到条件判断。",[72,159247,159248],{},"条件不成立，退出循环。",[57,159250,159252],{"id":159251},"_43-while累加","4.3 while累加",[14,159254,159255],{},"计算 1 到 100 的和：",[106,159257,159259],{"className":30379,"code":159258,"language":30381,"meta":22,"style":22},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[112,159260,159261,159269,159277,159281,159293,159303,159311,159315],{"__ignoreMap":22},[115,159262,159263,159265,159267],{"class":117,"line":118},[115,159264,100138],{"class":125},[115,159266,171],{"class":121},[115,159268,55689],{"class":174},[115,159270,159271,159273,159275],{"class":117,"line":37},[115,159272,157250],{"class":125},[115,159274,171],{"class":121},[115,159276,47334],{"class":174},[115,159278,159279],{"class":117,"line":1180},[115,159280,2400],{"emptyLinePlaceholder":42},[115,159282,159283,159285,159287,159289,159291],{"class":117,"line":1195},[115,159284,108653],{"class":121},[115,159286,9439],{"class":125},[115,159288,1588],{"class":121},[115,159290,5755],{"class":174},[115,159292,3739],{"class":125},[115,159294,159295,159298,159300],{"class":117,"line":1201},[115,159296,159297],{"class":125},"    total ",[115,159299,9478],{"class":121},[115,159301,159302],{"class":125}," i\n",[115,159304,159305,159307,159309],{"class":117,"line":1215},[115,159306,159225],{"class":125},[115,159308,9478],{"class":121},[115,159310,55689],{"class":174},[115,159312,159313],{"class":117,"line":1221},[115,159314,2400],{"emptyLinePlaceholder":42},[115,159316,159317,159319],{"class":117,"line":1312},[115,159318,30416],{"class":174},[115,159320,159321],{"class":125},"(total)\n",[14,159323,159324],{},"核心思想：",[69,159326,159327,159332,159337],{},[72,159328,159329,159331],{},[112,159330,566],{}," 控制循环次数。",[72,159333,159334,159336],{},[112,159335,157351],{}," 保存累加结果。",[72,159338,159339,159340,159342],{},"每轮循环都要更新 ",[112,159341,566],{},"，否则可能死循环。",[57,159344,159346],{"id":159345},"_44-while猜数字","4.4 while猜数字",[106,159348,159350],{"className":30379,"code":159349,"language":30381,"meta":22,"style":22},"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",[112,159351,159352,159358,159362,159379,159387,159391,159399,159419,159428,159432,159444,159455,159465,159476,159482,159504],{"__ignoreMap":22},[115,159353,159354,159356],{"class":117,"line":118},[115,159355,30393],{"class":121},[115,159357,45329],{"class":125},[115,159359,159360],{"class":117,"line":37},[115,159361,2400],{"emptyLinePlaceholder":42},[115,159363,159364,159366,159368,159371,159373,159375,159377],{"class":117,"line":1180},[115,159365,159030],{"class":125},[115,159367,171],{"class":121},[115,159369,159370],{"class":125}," random.randint(",[115,159372,343],{"class":174},[115,159374,12436],{"class":125},[115,159376,436],{"class":174},[115,159378,132],{"class":125},[115,159380,159381,159383,159385],{"class":117,"line":1195},[115,159382,146681],{"class":125},[115,159384,171],{"class":121},[115,159386,47334],{"class":174},[115,159388,159389],{"class":117,"line":1201},[115,159390,2400],{"emptyLinePlaceholder":42},[115,159392,159393,159395,159397],{"class":117,"line":1215},[115,159394,108653],{"class":121},[115,159396,95282],{"class":174},[115,159398,3739],{"class":125},[115,159400,159401,159404,159406,159408,159410,159412,159414,159417],{"class":117,"line":1221},[115,159402,159403],{"class":125},"    guess ",[115,159405,171],{"class":121},[115,159407,2382],{"class":174},[115,159409,126],{"class":125},[115,159411,53811],{"class":174},[115,159413,126],{"class":125},[115,159415,159416],{"class":230},"\"请输入1到100之间的数字:\"",[115,159418,30498],{"class":125},[115,159420,159421,159424,159426],{"class":117,"line":1312},[115,159422,159423],{"class":125},"    count ",[115,159425,9478],{"class":121},[115,159427,55689],{"class":174},[115,159429,159430],{"class":117,"line":1318},[115,159431,2400],{"emptyLinePlaceholder":42},[115,159433,159434,159436,159439,159441],{"class":117,"line":1330},[115,159435,3101],{"class":121},[115,159437,159438],{"class":125}," guess ",[115,159440,1085],{"class":121},[115,159442,159443],{"class":125}," answer:\n",[115,159445,159446,159448,159450,159453],{"class":117,"line":1612},[115,159447,32452],{"class":174},[115,159449,126],{"class":125},[115,159451,159452],{"class":230},"\"猜大了\"",[115,159454,132],{"class":125},[115,159456,159457,159459,159461,159463],{"class":117,"line":1617},[115,159458,39294],{"class":121},[115,159460,159438],{"class":125},[115,159462,1035],{"class":121},[115,159464,159443],{"class":125},[115,159466,159467,159469,159471,159474],{"class":117,"line":1623},[115,159468,32452],{"class":174},[115,159470,126],{"class":125},[115,159472,159473],{"class":230},"\"猜小了\"",[115,159475,132],{"class":125},[115,159477,159478,159480],{"class":117,"line":1628},[115,159479,158012],{"class":121},[115,159481,3739],{"class":125},[115,159483,159484,159486,159488,159490,159493,159495,159497,159499,159502],{"class":117,"line":1642},[115,159485,32452],{"class":174},[115,159487,126],{"class":125},[115,159489,178],{"class":121},[115,159491,159492],{"class":230},"\"猜对了，一共猜了",[115,159494,1021],{"class":174},[115,159496,84424],{"class":125},[115,159498,1071],{"class":174},[115,159500,159501],{"class":230},"次\"",[115,159503,132],{"class":125},[115,159505,159506],{"class":117,"line":1647},[115,159507,31628],{"class":121},[14,159509,159510,159513,159514,159516],{},[112,159511,159512],{},"while True"," 表示无限循环，通常配合 ",[112,159515,2053],{}," 使用。",[57,159518,159520],{"id":159519},"_45-break和continue","4.5 break和continue",[86,159522,159524],{"id":159523},"_451-break","4.5.1 break",[14,159526,159527,159529],{},[112,159528,2053],{}," 直接结束整个循环。",[106,159531,159533],{"className":30379,"code":159532,"language":30381,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[112,159534,159535,159555,159567,159571],{"__ignoreMap":22},[115,159536,159537,159539,159541,159543,159545,159547,159549,159551,159553],{"class":117,"line":118},[115,159538,3025],{"class":121},[115,159540,9439],{"class":125},[115,159542,26044],{"class":121},[115,159544,32444],{"class":174},[115,159546,126],{"class":125},[115,159548,343],{"class":174},[115,159550,12436],{"class":125},[115,159552,469],{"class":174},[115,159554,30787],{"class":125},[115,159556,159557,159559,159561,159563,159565],{"class":117,"line":37},[115,159558,3101],{"class":121},[115,159560,9439],{"class":125},[115,159562,2949],{"class":121},[115,159564,78060],{"class":174},[115,159566,3739],{"class":125},[115,159568,159569],{"class":117,"line":1180},[115,159570,31628],{"class":121},[115,159572,159573,159575],{"class":117,"line":1195},[115,159574,31300],{"class":174},[115,159576,159220],{"class":125},[14,159578,146447],{},[106,159580,159583],{"className":159581,"code":159582,"language":5188,"meta":22},[5186],"1\n2\n",[112,159584,159582],{"__ignoreMap":22},[86,159586,159588],{"id":159587},"_452-continue","4.5.2 continue",[14,159590,159591,159593],{},[112,159592,154662],{}," 跳过本轮剩余代码，进入下一轮循环。",[106,159595,159597],{"className":30379,"code":159596,"language":30381,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[112,159598,159599,159619,159631,159635],{"__ignoreMap":22},[115,159600,159601,159603,159605,159607,159609,159611,159613,159615,159617],{"class":117,"line":118},[115,159602,3025],{"class":121},[115,159604,9439],{"class":125},[115,159606,26044],{"class":121},[115,159608,32444],{"class":174},[115,159610,126],{"class":125},[115,159612,343],{"class":174},[115,159614,12436],{"class":125},[115,159616,469],{"class":174},[115,159618,30787],{"class":125},[115,159620,159621,159623,159625,159627,159629],{"class":117,"line":37},[115,159622,3101],{"class":121},[115,159624,9439],{"class":125},[115,159626,2949],{"class":121},[115,159628,78060],{"class":174},[115,159630,3739],{"class":125},[115,159632,159633],{"class":117,"line":1180},[115,159634,148502],{"class":121},[115,159636,159637,159639],{"class":117,"line":1195},[115,159638,31300],{"class":174},[115,159640,159220],{"class":125},[14,159642,146447],{},[106,159644,159647],{"className":159645,"code":159646,"language":5188,"meta":22},[5186],"1\n2\n4\n5\n",[112,159648,159646],{"__ignoreMap":22},[57,159650,159652],{"id":159651},"_46-for循环","4.6 for循环",[14,159654,159655,159657],{},[112,159656,3025],{}," 常用于遍历序列。",[106,159659,159661],{"className":30379,"code":159660,"language":30381,"meta":22,"style":22},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[112,159662,159663,159672,159676,159687],{"__ignoreMap":22},[115,159664,159665,159667,159669],{"class":117,"line":118},[115,159666,146526],{"class":125},[115,159668,171],{"class":121},[115,159670,159671],{"class":230}," \"python\"\n",[115,159673,159674],{"class":117,"line":37},[115,159675,2400],{"emptyLinePlaceholder":42},[115,159677,159678,159680,159683,159685],{"class":117,"line":1180},[115,159679,3025],{"class":121},[115,159681,159682],{"class":125}," ch ",[115,159684,26044],{"class":121},[115,159686,158389],{"class":125},[115,159688,159689,159691],{"class":117,"line":1195},[115,159690,31300],{"class":174},[115,159692,159693],{"class":125},"(ch)\n",[14,159695,159696],{},"遍历列表：",[106,159698,159700],{"className":30379,"code":159699,"language":30381,"meta":22,"style":22},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[112,159701,159702,159724,159728,159738],{"__ignoreMap":22},[115,159703,159704,159707,159709,159711,159713,159715,159717,159719,159722],{"class":117,"line":118},[115,159705,159706],{"class":125},"students ",[115,159708,171],{"class":121},[115,159710,52216],{"class":125},[115,159712,149878],{"class":230},[115,159714,12436],{"class":125},[115,159716,150926],{"class":230},[115,159718,12436],{"class":125},[115,159720,159721],{"class":230},"\"小刚\"",[115,159723,33247],{"class":125},[115,159725,159726],{"class":117,"line":37},[115,159727,2400],{"emptyLinePlaceholder":42},[115,159729,159730,159732,159734,159736],{"class":117,"line":1180},[115,159731,3025],{"class":121},[115,159733,152127],{"class":125},[115,159735,26044],{"class":121},[115,159737,152132],{"class":125},[115,159739,159740,159742],{"class":117,"line":1195},[115,159741,31300],{"class":174},[115,159743,150032],{"class":125},[57,159745,159747],{"id":159746},"_47-range函数","4.7 range函数",[14,159749,159750,159753],{},[112,159751,159752],{},"range()"," 用于生成整数序列。",[106,159755,159757],{"className":30379,"code":159756,"language":30381,"meta":22,"style":22},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[112,159758,159759,159773,159791],{"__ignoreMap":22},[115,159760,159761,159763,159765,159767,159770],{"class":117,"line":118},[115,159762,33417],{"class":174},[115,159764,126],{"class":125},[115,159766,444],{"class":174},[115,159768,159769],{"class":125},")          ",[115,159771,159772],{"class":184},"# 0,1,2,3,4\n",[115,159774,159775,159777,159779,159781,159783,159785,159788],{"class":117,"line":37},[115,159776,33417],{"class":174},[115,159778,126],{"class":125},[115,159780,343],{"class":174},[115,159782,12436],{"class":125},[115,159784,444],{"class":174},[115,159786,159787],{"class":125},")       ",[115,159789,159790],{"class":184},"# 1,2,3,4\n",[115,159792,159793,159795,159797,159799,159801,159803,159805,159807,159809],{"class":117,"line":1180},[115,159794,33417],{"class":174},[115,159796,126],{"class":125},[115,159798,343],{"class":174},[115,159800,12436],{"class":125},[115,159802,571],{"class":174},[115,159804,12436],{"class":125},[115,159806,203],{"class":174},[115,159808,155651],{"class":125},[115,159810,159811],{"class":184},"# 1,3,5,7,9\n",[14,159813,159814,159815,24619],{},"配合 ",[112,159816,3025],{},[106,159818,159820],{"className":30379,"code":159819,"language":30381,"meta":22,"style":22},"for i in range(1, 6):\n    print(i)\n",[112,159821,159822,159842],{"__ignoreMap":22},[115,159823,159824,159826,159828,159830,159832,159834,159836,159838,159840],{"class":117,"line":118},[115,159825,3025],{"class":121},[115,159827,9439],{"class":125},[115,159829,26044],{"class":121},[115,159831,32444],{"class":174},[115,159833,126],{"class":125},[115,159835,343],{"class":174},[115,159837,12436],{"class":125},[115,159839,469],{"class":174},[115,159841,30787],{"class":125},[115,159843,159844,159846],{"class":117,"line":37},[115,159845,31300],{"class":174},[115,159847,159220],{"class":125},[14,159849,9026,159850,159852],{},[112,159851,33417],{}," 的结束值不包含在内。",[57,159854,159856],{"id":159855},"_48-for循环求和","4.8 for循环求和",[106,159858,159860],{"className":30379,"code":159859,"language":30381,"meta":22,"style":22},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[112,159861,159862,159870,159874,159894,159902,159906],{"__ignoreMap":22},[115,159863,159864,159866,159868],{"class":117,"line":118},[115,159865,157250],{"class":125},[115,159867,171],{"class":121},[115,159869,47334],{"class":174},[115,159871,159872],{"class":117,"line":37},[115,159873,2400],{"emptyLinePlaceholder":42},[115,159875,159876,159878,159880,159882,159884,159886,159888,159890,159892],{"class":117,"line":1180},[115,159877,3025],{"class":121},[115,159879,9439],{"class":125},[115,159881,26044],{"class":121},[115,159883,32444],{"class":174},[115,159885,126],{"class":125},[115,159887,343],{"class":174},[115,159889,12436],{"class":125},[115,159891,462],{"class":174},[115,159893,30787],{"class":125},[115,159895,159896,159898,159900],{"class":117,"line":1195},[115,159897,159297],{"class":125},[115,159899,9478],{"class":121},[115,159901,159302],{"class":125},[115,159903,159904],{"class":117,"line":1201},[115,159905,2400],{"emptyLinePlaceholder":42},[115,159907,159908,159910],{"class":117,"line":1215},[115,159909,30416],{"class":174},[115,159911,159321],{"class":125},[14,159913,159914],{},"求偶数和：",[106,159916,159918],{"className":30379,"code":159917,"language":30381,"meta":22,"style":22},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[112,159919,159920,159928,159932,159952,159968,159977,159981],{"__ignoreMap":22},[115,159921,159922,159924,159926],{"class":117,"line":118},[115,159923,157250],{"class":125},[115,159925,171],{"class":121},[115,159927,47334],{"class":174},[115,159929,159930],{"class":117,"line":37},[115,159931,2400],{"emptyLinePlaceholder":42},[115,159933,159934,159936,159938,159940,159942,159944,159946,159948,159950],{"class":117,"line":1180},[115,159935,3025],{"class":121},[115,159937,9439],{"class":125},[115,159939,26044],{"class":121},[115,159941,32444],{"class":174},[115,159943,126],{"class":125},[115,159945,343],{"class":174},[115,159947,12436],{"class":125},[115,159949,462],{"class":174},[115,159951,30787],{"class":125},[115,159953,159954,159956,159958,159960,159962,159964,159966],{"class":117,"line":1195},[115,159955,3101],{"class":121},[115,159957,9439],{"class":125},[115,159959,453],{"class":121},[115,159961,14756],{"class":174},[115,159963,101549],{"class":121},[115,159965,4093],{"class":174},[115,159967,3739],{"class":125},[115,159969,159970,159973,159975],{"class":117,"line":1201},[115,159971,159972],{"class":125},"        total ",[115,159974,9478],{"class":121},[115,159976,159302],{"class":125},[115,159978,159979],{"class":117,"line":1215},[115,159980,2400],{"emptyLinePlaceholder":42},[115,159982,159983,159985],{"class":117,"line":1221},[115,159984,30416],{"class":174},[115,159986,159321],{"class":125},[14,159988,159989],{},"也可以：",[106,159991,159993],{"className":30379,"code":159992,"language":30381,"meta":22,"style":22},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[112,159994,159995,160003,160007,160031,160039,160043],{"__ignoreMap":22},[115,159996,159997,159999,160001],{"class":117,"line":118},[115,159998,157250],{"class":125},[115,160000,171],{"class":121},[115,160002,47334],{"class":174},[115,160004,160005],{"class":117,"line":37},[115,160006,2400],{"emptyLinePlaceholder":42},[115,160008,160009,160011,160013,160015,160017,160019,160021,160023,160025,160027,160029],{"class":117,"line":1180},[115,160010,3025],{"class":121},[115,160012,9439],{"class":125},[115,160014,26044],{"class":121},[115,160016,32444],{"class":174},[115,160018,126],{"class":125},[115,160020,203],{"class":174},[115,160022,12436],{"class":125},[115,160024,462],{"class":174},[115,160026,12436],{"class":125},[115,160028,203],{"class":174},[115,160030,30787],{"class":125},[115,160032,160033,160035,160037],{"class":117,"line":1195},[115,160034,159297],{"class":125},[115,160036,9478],{"class":121},[115,160038,159302],{"class":125},[115,160040,160041],{"class":117,"line":1201},[115,160042,2400],{"emptyLinePlaceholder":42},[115,160044,160045,160047],{"class":117,"line":1215},[115,160046,30416],{"class":174},[115,160048,159321],{"class":125},[57,160050,160052],{"id":160051},"_49-循环嵌套","4.9 循环嵌套",[14,160054,160055],{},"嵌套循环就是循环里面再写循环。",[106,160057,160059],{"className":30379,"code":160058,"language":30381,"meta":22,"style":22},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[112,160060,160061,160081,160101],{"__ignoreMap":22},[115,160062,160063,160065,160067,160069,160071,160073,160075,160077,160079],{"class":117,"line":118},[115,160064,3025],{"class":121},[115,160066,9439],{"class":125},[115,160068,26044],{"class":121},[115,160070,32444],{"class":174},[115,160072,126],{"class":125},[115,160074,343],{"class":174},[115,160076,12436],{"class":125},[115,160078,418],{"class":174},[115,160080,30787],{"class":125},[115,160082,160083,160085,160087,160089,160091,160093,160095,160097,160099],{"class":117,"line":37},[115,160084,3201],{"class":121},[115,160086,9501],{"class":125},[115,160088,26044],{"class":121},[115,160090,32444],{"class":174},[115,160092,126],{"class":125},[115,160094,343],{"class":174},[115,160096,12436],{"class":125},[115,160098,418],{"class":174},[115,160100,30787],{"class":125},[115,160102,160103,160105,160107,160109,160112,160114,160116,160118,160121,160123,160125,160127,160129],{"class":117,"line":1180},[115,160104,32452],{"class":174},[115,160106,126],{"class":125},[115,160108,178],{"class":121},[115,160110,160111],{"class":230},"\"i=",[115,160113,1021],{"class":174},[115,160115,566],{"class":125},[115,160117,1071],{"class":174},[115,160119,160120],{"class":230},", j=",[115,160122,1021],{"class":174},[115,160124,592],{"class":125},[115,160126,1071],{"class":174},[115,160128,376],{"class":230},[115,160130,132],{"class":125},[14,160132,160133],{},"外层循环执行一次，内层循环执行完整一轮。",[57,160135,160137],{"id":160136},"_410-九九乘法表","4.10 九九乘法表",[106,160139,160141],{"className":30379,"code":160140,"language":30381,"meta":22,"style":22},"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",[112,160142,160143,160163,160186,160238],{"__ignoreMap":22},[115,160144,160145,160147,160149,160151,160153,160155,160157,160159,160161],{"class":117,"line":118},[115,160146,3025],{"class":121},[115,160148,9439],{"class":125},[115,160150,26044],{"class":121},[115,160152,32444],{"class":174},[115,160154,126],{"class":125},[115,160156,343],{"class":174},[115,160158,12436],{"class":125},[115,160160,571],{"class":174},[115,160162,30787],{"class":125},[115,160164,160165,160167,160169,160171,160173,160175,160177,160180,160182,160184],{"class":117,"line":37},[115,160166,3201],{"class":121},[115,160168,9501],{"class":125},[115,160170,26044],{"class":121},[115,160172,32444],{"class":174},[115,160174,126],{"class":125},[115,160176,343],{"class":174},[115,160178,160179],{"class":125},", i ",[115,160181,606],{"class":121},[115,160183,25119],{"class":174},[115,160185,30787],{"class":125},[115,160187,160188,160190,160192,160194,160196,160198,160200,160202,160204,160206,160208,160210,160212,160214,160216,160218,160220,160222,160224,160226,160228,160230,160232,160234,160236],{"class":117,"line":1180},[115,160189,32452],{"class":174},[115,160191,126],{"class":125},[115,160193,178],{"class":121},[115,160195,376],{"class":230},[115,160197,1021],{"class":174},[115,160199,592],{"class":125},[115,160201,1071],{"class":174},[115,160203,580],{"class":230},[115,160205,1021],{"class":174},[115,160207,566],{"class":125},[115,160209,1071],{"class":174},[115,160211,171],{"class":230},[115,160213,1021],{"class":174},[115,160215,100138],{"class":125},[115,160217,580],{"class":121},[115,160219,3410],{"class":125},[115,160221,1071],{"class":174},[115,160223,376],{"class":230},[115,160225,12436],{"class":125},[115,160227,45802],{"class":5217},[115,160229,171],{"class":121},[115,160231,376],{"class":230},[115,160233,1231],{"class":174},[115,160235,376],{"class":230},[115,160237,132],{"class":125},[115,160239,160240,160242],{"class":117,"line":1195},[115,160241,31300],{"class":174},[115,160243,1976],{"class":125},[14,160245,160246],{},"关键点：",[69,160248,160249,160255,160261,160267],{},[72,160250,160251,160252,160254],{},"外层 ",[112,160253,566],{}," 控制行。",[72,160256,160257,160258,160260],{},"内层 ",[112,160259,592],{}," 控制列。",[72,160262,160263,160264,160266],{},"每行结束后用 ",[112,160265,146462],{}," 换行。",[72,160268,160269,160272],{},[112,160270,160271],{},"end=\"\\t\""," 让同一行的内容横向排列。",[57,160274,160276],{"id":160275},"_411-循环else","4.11 循环else",[14,160278,160279,160280,160282,160283,160285,160286,160288],{},"Python 的循环可以带 ",[112,160281,1701],{},"。当循环正常结束时执行 ",[112,160284,1701],{},"，如果被 ",[112,160287,2053],{}," 打断，则不执行。",[106,160290,160292],{"className":30379,"code":160291,"language":30381,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[112,160293,160294,160314,160326,160337,160341,160347],{"__ignoreMap":22},[115,160295,160296,160298,160300,160302,160304,160306,160308,160310,160312],{"class":117,"line":118},[115,160297,3025],{"class":121},[115,160299,9439],{"class":125},[115,160301,26044],{"class":121},[115,160303,32444],{"class":174},[115,160305,126],{"class":125},[115,160307,343],{"class":174},[115,160309,12436],{"class":125},[115,160311,469],{"class":174},[115,160313,30787],{"class":125},[115,160315,160316,160318,160320,160322,160324],{"class":117,"line":37},[115,160317,3101],{"class":121},[115,160319,9439],{"class":125},[115,160321,2949],{"class":121},[115,160323,2038],{"class":174},[115,160325,3739],{"class":125},[115,160327,160328,160330,160332,160335],{"class":117,"line":1180},[115,160329,32452],{"class":174},[115,160331,126],{"class":125},[115,160333,160334],{"class":230},"\"找到了\"",[115,160336,132],{"class":125},[115,160338,160339],{"class":117,"line":1195},[115,160340,31628],{"class":121},[115,160342,160343,160345],{"class":117,"line":1201},[115,160344,1701],{"class":121},[115,160346,3739],{"class":125},[115,160348,160349,160351,160353,160356],{"class":117,"line":1215},[115,160350,31300],{"class":174},[115,160352,126],{"class":125},[115,160354,160355],{"class":230},"\"没找到\"",[115,160357,132],{"class":125},[14,160359,160360],{},"常用于搜索。",[106,160362,160364],{"className":30379,"code":160363,"language":30381,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[112,160365,160366,160387,160396,160400,160412,160423,160433,160437,160443],{"__ignoreMap":22},[115,160367,160368,160371,160373,160375,160377,160379,160381,160383,160385],{"class":117,"line":118},[115,160369,160370],{"class":125},"names ",[115,160372,171],{"class":121},[115,160374,52216],{"class":125},[115,160376,149878],{"class":230},[115,160378,12436],{"class":125},[115,160380,150926],{"class":230},[115,160382,12436],{"class":125},[115,160384,159721],{"class":230},[115,160386,33247],{"class":125},[115,160388,160389,160391,160393],{"class":117,"line":37},[115,160390,111568],{"class":125},[115,160392,171],{"class":121},[115,160394,160395],{"class":230}," \"小李\"\n",[115,160397,160398],{"class":117,"line":1180},[115,160399,2400],{"emptyLinePlaceholder":42},[115,160401,160402,160404,160407,160409],{"class":117,"line":1195},[115,160403,3025],{"class":121},[115,160405,160406],{"class":125}," name ",[115,160408,26044],{"class":121},[115,160410,160411],{"class":125}," names:\n",[115,160413,160414,160416,160418,160420],{"class":117,"line":1201},[115,160415,3101],{"class":121},[115,160417,160406],{"class":125},[115,160419,2949],{"class":121},[115,160421,160422],{"class":125}," target:\n",[115,160424,160425,160427,160429,160431],{"class":117,"line":1215},[115,160426,32452],{"class":174},[115,160428,126],{"class":125},[115,160430,160334],{"class":230},[115,160432,132],{"class":125},[115,160434,160435],{"class":117,"line":1221},[115,160436,31628],{"class":121},[115,160438,160439,160441],{"class":117,"line":1312},[115,160440,1701],{"class":121},[115,160442,3739],{"class":125},[115,160444,160445,160447,160449,160451],{"class":117,"line":1318},[115,160446,31300],{"class":174},[115,160448,126],{"class":125},[115,160450,160355],{"class":230},[115,160452,132],{"class":125},[57,160454,160456],{"id":160455},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160458,123282],{},[69,160460,160461,160464,160467],{},[72,160462,160463],{},"用户最多输入 3 次密码。",[72,160465,160466],{},"密码正确则登录成功。",[72,160468,160469],{},"3 次都错误则锁定账号。",[14,160471,10036],{},[106,160473,160475],{"className":30379,"code":160474,"language":30381,"meta":22,"style":22},"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",[112,160476,160477,160487,160491,160507,160523,160527,160539,160550,160554,160560,160585,160591],{"__ignoreMap":22},[115,160478,160479,160482,160484],{"class":117,"line":118},[115,160480,160481],{"class":125},"password ",[115,160483,171],{"class":121},[115,160485,160486],{"class":230}," \"123456\"\n",[115,160488,160489],{"class":117,"line":37},[115,160490,2400],{"emptyLinePlaceholder":42},[115,160492,160493,160495,160497,160499,160501,160503,160505],{"class":117,"line":1180},[115,160494,3025],{"class":121},[115,160496,9439],{"class":125},[115,160498,26044],{"class":121},[115,160500,32444],{"class":174},[115,160502,126],{"class":125},[115,160504,197],{"class":174},[115,160506,30787],{"class":125},[115,160508,160509,160512,160514,160516,160518,160521],{"class":117,"line":1195},[115,160510,160511],{"class":125},"    user_password ",[115,160513,171],{"class":121},[115,160515,60595],{"class":174},[115,160517,126],{"class":125},[115,160519,160520],{"class":230},"\"请输入密码:\"",[115,160522,132],{"class":125},[115,160524,160525],{"class":117,"line":1201},[115,160526,2400],{"emptyLinePlaceholder":42},[115,160528,160529,160531,160534,160536],{"class":117,"line":1215},[115,160530,3101],{"class":121},[115,160532,160533],{"class":125}," user_password ",[115,160535,2949],{"class":121},[115,160537,160538],{"class":125}," password:\n",[115,160540,160541,160543,160545,160548],{"class":117,"line":1221},[115,160542,32452],{"class":174},[115,160544,126],{"class":125},[115,160546,160547],{"class":230},"\"登录成功\"",[115,160549,132],{"class":125},[115,160551,160552],{"class":117,"line":1312},[115,160553,31628],{"class":121},[115,160555,160556,160558],{"class":117,"line":1318},[115,160557,158012],{"class":121},[115,160559,3739],{"class":125},[115,160561,160562,160564,160566,160568,160571,160574,160576,160578,160580,160583],{"class":117,"line":1330},[115,160563,32452],{"class":174},[115,160565,126],{"class":125},[115,160567,178],{"class":121},[115,160569,160570],{"class":230},"\"密码错误，还剩",[115,160572,160573],{"class":174},"{2",[115,160575,52261],{"class":121},[115,160577,3032],{"class":125},[115,160579,1071],{"class":174},[115,160581,160582],{"class":230},"次机会\"",[115,160584,132],{"class":125},[115,160586,160587,160589],{"class":117,"line":1612},[115,160588,1701],{"class":121},[115,160590,3739],{"class":125},[115,160592,160593,160595,160597,160600],{"class":117,"line":1617},[115,160594,31300],{"class":174},[115,160596,126],{"class":125},[115,160598,160599],{"class":230},"\"账号已锁定\"",[115,160601,132],{"class":125},[57,160603,160605],{"id":160604},"_413-小案例菜单程序","4.13 小案例：菜单程序",[106,160607,160609],{"className":30379,"code":160608,"language":30381,"meta":22,"style":22},"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",[112,160610,160611,160619,160630,160641,160652,160663,160674,160678,160693,160697,160709,160720,160732,160743,160755,160766,160778,160788,160792,160798],{"__ignoreMap":22},[115,160612,160613,160615,160617],{"class":117,"line":118},[115,160614,108653],{"class":121},[115,160616,95282],{"class":174},[115,160618,3739],{"class":125},[115,160620,160621,160623,160625,160628],{"class":117,"line":37},[115,160622,31300],{"class":174},[115,160624,126],{"class":125},[115,160626,160627],{"class":230},"\"====== 菜单 ======\"",[115,160629,132],{"class":125},[115,160631,160632,160634,160636,160639],{"class":117,"line":1180},[115,160633,31300],{"class":174},[115,160635,126],{"class":125},[115,160637,160638],{"class":230},"\"1. 查询余额\"",[115,160640,132],{"class":125},[115,160642,160643,160645,160647,160650],{"class":117,"line":1195},[115,160644,31300],{"class":174},[115,160646,126],{"class":125},[115,160648,160649],{"class":230},"\"2. 存款\"",[115,160651,132],{"class":125},[115,160653,160654,160656,160658,160661],{"class":117,"line":1201},[115,160655,31300],{"class":174},[115,160657,126],{"class":125},[115,160659,160660],{"class":230},"\"3. 取款\"",[115,160662,132],{"class":125},[115,160664,160665,160667,160669,160672],{"class":117,"line":1215},[115,160666,31300],{"class":174},[115,160668,126],{"class":125},[115,160670,160671],{"class":230},"\"0. 退出\"",[115,160673,132],{"class":125},[115,160675,160676],{"class":117,"line":1221},[115,160677,2400],{"emptyLinePlaceholder":42},[115,160679,160680,160683,160685,160687,160689,160691],{"class":117,"line":1312},[115,160681,160682],{"class":125},"    choice ",[115,160684,171],{"class":121},[115,160686,60595],{"class":174},[115,160688,126],{"class":125},[115,160690,153063],{"class":230},[115,160692,132],{"class":125},[115,160694,160695],{"class":117,"line":1318},[115,160696,2400],{"emptyLinePlaceholder":42},[115,160698,160699,160701,160703,160705,160707],{"class":117,"line":1330},[115,160700,3101],{"class":121},[115,160702,153076],{"class":125},[115,160704,2949],{"class":121},[115,160706,153081],{"class":230},[115,160708,3739],{"class":125},[115,160710,160711,160713,160715,160718],{"class":117,"line":1612},[115,160712,32452],{"class":174},[115,160714,126],{"class":125},[115,160716,160717],{"class":230},"\"余额为1000元\"",[115,160719,132],{"class":125},[115,160721,160722,160724,160726,160728,160730],{"class":117,"line":1617},[115,160723,39294],{"class":121},[115,160725,153076],{"class":125},[115,160727,2949],{"class":121},[115,160729,153100],{"class":230},[115,160731,3739],{"class":125},[115,160733,160734,160736,160738,160741],{"class":117,"line":1623},[115,160735,32452],{"class":174},[115,160737,126],{"class":125},[115,160739,160740],{"class":230},"\"存款功能\"",[115,160742,132],{"class":125},[115,160744,160745,160747,160749,160751,160753],{"class":117,"line":1628},[115,160746,39294],{"class":121},[115,160748,153076],{"class":125},[115,160750,2949],{"class":121},[115,160752,153118],{"class":230},[115,160754,3739],{"class":125},[115,160756,160757,160759,160761,160764],{"class":117,"line":1642},[115,160758,32452],{"class":174},[115,160760,126],{"class":125},[115,160762,160763],{"class":230},"\"取款功能\"",[115,160765,132],{"class":125},[115,160767,160768,160770,160772,160774,160776],{"class":117,"line":1647},[115,160769,39294],{"class":121},[115,160771,153076],{"class":125},[115,160773,2949],{"class":121},[115,160775,153172],{"class":230},[115,160777,3739],{"class":125},[115,160779,160780,160782,160784,160786],{"class":117,"line":1653},[115,160781,32452],{"class":174},[115,160783,126],{"class":125},[115,160785,153183],{"class":230},[115,160787,132],{"class":125},[115,160789,160790],{"class":117,"line":1674},[115,160791,31628],{"class":121},[115,160793,160794,160796],{"class":117,"line":1679},[115,160795,158012],{"class":121},[115,160797,3739],{"class":125},[115,160799,160800,160802,160804,160806],{"class":117,"line":1693},[115,160801,32452],{"class":174},[115,160803,126],{"class":125},[115,160805,153204],{"class":230},[115,160807,132],{"class":125},[14,160809,160810,160811,160813,160814,28386],{},"菜单类程序通常使用 ",[112,160812,159512],{},"，用户选择退出时 ",[112,160815,2053],{},[57,160817,160819],{"id":160818},"_414-易错点","4.14 易错点",[69,160821,160822,160827,160833,160841,160847],{},[72,160823,160824,160826],{},[112,160825,108653],{}," 循环必须更新控制变量。",[72,160828,160829,160832],{},[112,160830,160831],{},"range(1, 10)"," 不包含 10。",[72,160834,160835,160837,160838,160840],{},[112,160836,2053],{}," 结束整个循环，",[112,160839,154662],{}," 只跳过本轮。",[72,160842,160843,160844,160846],{},"嵌套循环中，",[112,160845,2053],{}," 只跳出当前所在的一层循环。",[72,160848,160849],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[57,160851,160853],{"id":160852},"_415-本章练习","4.15 本章练习",[69,160855,160856,160859,160862,160865,160868],{},[72,160857,160858],{},"输出 1 到 100。",[72,160860,160861],{},"计算 1 到 100 的偶数和。",[72,160863,160864],{},"输出 100 以内能被 3 和 5 同时整除的数。",[72,160866,160867],{},"编写猜数字游戏，限制最多猜 7 次。",[72,160869,160870],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5127,160872,160873],{},"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":22,"searchDepth":37,"depth":37,"links":160875},[160876,160877,160878,160879,160880,160884,160885,160886,160887,160888,160889,160890,160891,160892,160893],{"id":159132,"depth":37,"text":159133},{"id":159162,"depth":37,"text":159163},{"id":159251,"depth":37,"text":159252},{"id":159345,"depth":37,"text":159346},{"id":159519,"depth":37,"text":159520,"children":160881},[160882,160883],{"id":159523,"depth":1180,"text":159524},{"id":159587,"depth":1180,"text":159588},{"id":159651,"depth":37,"text":159652},{"id":159746,"depth":37,"text":159747},{"id":159855,"depth":37,"text":159856},{"id":160051,"depth":37,"text":160052},{"id":160136,"depth":37,"text":160137},{"id":160275,"depth":37,"text":160276},{"id":160455,"depth":37,"text":160456},{"id":160604,"depth":37,"text":160605},{"id":160818,"depth":37,"text":160819},{"id":160852,"depth":37,"text":160853},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159124,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160900,"title":160901,"body":160902,"description":39,"extension":40,"meta":162907,"navigation":42,"path":162908,"seo":162909,"stem":162910,"__hash__":162911},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160903,"toc":162887},[160904,160907,160911,160914,160917,160931,160934,160948,160952,160954,160973,160975,161022,161024,161038,161042,161116,161119,161123,161126,161185,161193,161196,161249,161252,161256,161261,161316,161324,161374,161378,161383,161391,161490,161496,161500,161505,161508,161519,161560,161573,161577,161580,161616,161619,161632,161635,161695,161699,161703,161706,161757,161761,161764,161811,161817,161883,161886,161890,161893,162009,162012,162016,162019,162125,162129,162132,162170,162173,162215,162218,162278,162281,162285,162749,162752,162756,162783,162789,162850,162854,162884],[10,160905,160901],{"id":160906},"_5-函数基础",[57,160908,160910],{"id":160909},"_51-为什么需要函数","5.1 为什么需要函数",[14,160912,160913],{},"函数用于封装一段可以重复使用的代码。",[14,160915,160916],{},"不使用函数的问题：",[69,160918,160919,160922,160925,160928],{},[72,160920,160921],{},"重复代码多。",[72,160923,160924],{},"修改逻辑时容易漏改。",[72,160926,160927],{},"主流程不清晰。",[72,160929,160930],{},"程序越写越长，难以维护。",[14,160932,160933],{},"使用函数后的好处：",[69,160935,160936,160939,160942,160945],{},[72,160937,160938],{},"提高复用性。",[72,160940,160941],{},"提高可读性。",[72,160943,160944],{},"便于调试。",[72,160946,160947],{},"便于分工。",[57,160949,160951],{"id":160950},"_52-函数定义","5.2 函数定义",[14,160953,5182],{},[106,160955,160957],{"className":30379,"code":160956,"language":30381,"meta":22,"style":22},"def 函数名():\n    函数体\n",[112,160958,160959,160968],{"__ignoreMap":22},[115,160960,160961,160963,160966],{"class":117,"line":118},[115,160962,31948],{"class":121},[115,160964,160965],{"class":1963}," 函数名",[115,160967,31954],{"class":125},[115,160969,160970],{"class":117,"line":37},[115,160971,160972],{"class":125},"    函数体\n",[14,160974,15136],{},[106,160976,160978],{"className":30379,"code":160977,"language":30381,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[112,160979,160980,160989,160999,161009,161013,161017],{"__ignoreMap":22},[115,160981,160982,160984,160987],{"class":117,"line":118},[115,160983,31948],{"class":121},[115,160985,160986],{"class":1963}," say_hello",[115,160988,31954],{"class":125},[115,160990,160991,160993,160995,160997],{"class":117,"line":37},[115,160992,31300],{"class":174},[115,160994,126],{"class":125},[115,160996,5845],{"class":230},[115,160998,132],{"class":125},[115,161000,161001,161003,161005,161007],{"class":117,"line":1180},[115,161002,31300],{"class":174},[115,161004,126],{"class":125},[115,161006,146629],{"class":230},[115,161008,132],{"class":125},[115,161010,161011],{"class":117,"line":1195},[115,161012,2400],{"emptyLinePlaceholder":42},[115,161014,161015],{"class":117,"line":1201},[115,161016,2400],{"emptyLinePlaceholder":42},[115,161018,161019],{"class":117,"line":1215},[115,161020,161021],{"class":125},"say_hello()\n",[14,161023,9026],{},[69,161025,161026,161029,161032,161035],{},[72,161027,161028],{},"函数必须先定义，再调用。",[72,161030,161031],{},"函数名遵循变量命名规则。",[72,161033,161034],{},"函数体需要缩进。",[72,161036,161037],{},"函数不调用就不会执行。",[57,161039,161041],{"id":161040},"_53-函数调用","5.3 函数调用",[106,161043,161045],{"className":30379,"code":161044,"language":30381,"meta":22,"style":22},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[112,161046,161047,161056,161067,161078,161089,161099,161103,161107,161112],{"__ignoreMap":22},[115,161048,161049,161051,161054],{"class":117,"line":118},[115,161050,31948],{"class":121},[115,161052,161053],{"class":1963}," print_menu",[115,161055,31954],{"class":125},[115,161057,161058,161060,161062,161065],{"class":117,"line":37},[115,161059,31300],{"class":174},[115,161061,126],{"class":125},[115,161063,161064],{"class":230},"\"1. 查询\"",[115,161066,132],{"class":125},[115,161068,161069,161071,161073,161076],{"class":117,"line":1180},[115,161070,31300],{"class":174},[115,161072,126],{"class":125},[115,161074,161075],{"class":230},"\"2. 添加\"",[115,161077,132],{"class":125},[115,161079,161080,161082,161084,161087],{"class":117,"line":1195},[115,161081,31300],{"class":174},[115,161083,126],{"class":125},[115,161085,161086],{"class":230},"\"3. 删除\"",[115,161088,132],{"class":125},[115,161090,161091,161093,161095,161097],{"class":117,"line":1201},[115,161092,31300],{"class":174},[115,161094,126],{"class":125},[115,161096,160671],{"class":230},[115,161098,132],{"class":125},[115,161100,161101],{"class":117,"line":1215},[115,161102,2400],{"emptyLinePlaceholder":42},[115,161104,161105],{"class":117,"line":1221},[115,161106,2400],{"emptyLinePlaceholder":42},[115,161108,161109],{"class":117,"line":1312},[115,161110,161111],{"class":125},"print_menu()\n",[115,161113,161114],{"class":117,"line":1318},[115,161115,161111],{"class":125},[14,161117,161118],{},"函数可以多次调用，每次调用都会执行函数体。",[57,161120,161122],{"id":161121},"_54-参数","5.4 参数",[14,161124,161125],{},"参数用于向函数传递数据。",[106,161127,161129],{"className":30379,"code":161128,"language":30381,"meta":22,"style":22},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[112,161130,161131,161140,161160,161164,161168,161177],{"__ignoreMap":22},[115,161132,161133,161135,161137],{"class":117,"line":118},[115,161134,31948],{"class":121},[115,161136,160986],{"class":1963},[115,161138,161139],{"class":125},"(name):\n",[115,161141,161142,161144,161146,161148,161150,161152,161154,161156,161158],{"class":117,"line":37},[115,161143,31300],{"class":174},[115,161145,126],{"class":125},[115,161147,178],{"class":121},[115,161149,157044],{"class":230},[115,161151,1021],{"class":174},[115,161153,79800],{"class":125},[115,161155,1071],{"class":174},[115,161157,376],{"class":230},[115,161159,132],{"class":125},[115,161161,161162],{"class":117,"line":1180},[115,161163,2400],{"emptyLinePlaceholder":42},[115,161165,161166],{"class":117,"line":1195},[115,161167,2400],{"emptyLinePlaceholder":42},[115,161169,161170,161173,161175],{"class":117,"line":1201},[115,161171,161172],{"class":125},"say_hello(",[115,161174,149878],{"class":230},[115,161176,132],{"class":125},[115,161178,161179,161181,161183],{"class":117,"line":1215},[115,161180,161172],{"class":125},[115,161182,150926],{"class":230},[115,161184,132],{"class":125},[14,161186,161187,161189,161190,161192],{},[112,161188,79800],{}," 是形参，",[112,161191,149878],{}," 是实参。",[14,161194,161195],{},"多个参数：",[106,161197,161199],{"className":30379,"code":161198,"language":30381,"meta":22,"style":22},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[112,161200,161201,161209,161222,161228,161232,161236],{"__ignoreMap":22},[115,161202,161203,161205,161207],{"class":117,"line":118},[115,161204,31948],{"class":121},[115,161206,5210],{"class":1963},[115,161208,151083],{"class":125},[115,161210,161211,161214,161216,161218,161220],{"class":117,"line":37},[115,161212,161213],{"class":125},"    result ",[115,161215,171],{"class":121},[115,161217,10870],{"class":125},[115,161219,606],{"class":121},[115,161221,151094],{"class":125},[115,161223,161224,161226],{"class":117,"line":1180},[115,161225,31300],{"class":174},[115,161227,76575],{"class":125},[115,161229,161230],{"class":117,"line":1195},[115,161231,2400],{"emptyLinePlaceholder":42},[115,161233,161234],{"class":117,"line":1201},[115,161235,2400],{"emptyLinePlaceholder":42},[115,161237,161238,161241,161243,161245,161247],{"class":117,"line":1215},[115,161239,161240],{"class":125},"add(",[115,161242,571],{"class":174},[115,161244,12436],{"class":125},[115,161246,825],{"class":174},[115,161248,132],{"class":125},[14,161250,161251],{},"调用时参数数量必须匹配。",[57,161253,161255],{"id":161254},"_55-返回值","5.5 返回值",[14,161257,161258,161260],{},[112,161259,17047],{}," 用于把函数内部的结果返回给调用者。",[106,161262,161264],{"className":30379,"code":161263,"language":30381,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[112,161265,161266,161274,161284,161288,161292,161310],{"__ignoreMap":22},[115,161267,161268,161270,161272],{"class":117,"line":118},[115,161269,31948],{"class":121},[115,161271,5210],{"class":1963},[115,161273,151083],{"class":125},[115,161275,161276,161278,161280,161282],{"class":117,"line":37},[115,161277,4090],{"class":121},[115,161279,10870],{"class":125},[115,161281,606],{"class":121},[115,161283,151094],{"class":125},[115,161285,161286],{"class":117,"line":1180},[115,161287,2400],{"emptyLinePlaceholder":42},[115,161289,161290],{"class":117,"line":1195},[115,161291,2400],{"emptyLinePlaceholder":42},[115,161293,161294,161297,161299,161302,161304,161306,161308],{"class":117,"line":1201},[115,161295,161296],{"class":125},"result ",[115,161298,171],{"class":121},[115,161300,161301],{"class":125}," add(",[115,161303,571],{"class":174},[115,161305,12436],{"class":125},[115,161307,825],{"class":174},[115,161309,132],{"class":125},[115,161311,161312,161314],{"class":117,"line":1215},[115,161313,30416],{"class":174},[115,161315,76575],{"class":125},[14,161317,161318,161319,161321,161322,28386],{},"如果函数没有写 ",[112,161320,17047],{},"，默认返回 ",[112,161323,95676],{},[106,161325,161327],{"className":30379,"code":161326,"language":30381,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[112,161328,161329,161337,161347,161351,161355,161364],{"__ignoreMap":22},[115,161330,161331,161333,161335],{"class":117,"line":118},[115,161332,31948],{"class":121},[115,161334,160986],{"class":1963},[115,161336,31954],{"class":125},[115,161338,161339,161341,161343,161345],{"class":117,"line":37},[115,161340,31300],{"class":174},[115,161342,126],{"class":125},[115,161344,5845],{"class":230},[115,161346,132],{"class":125},[115,161348,161349],{"class":117,"line":1180},[115,161350,2400],{"emptyLinePlaceholder":42},[115,161352,161353],{"class":117,"line":1195},[115,161354,2400],{"emptyLinePlaceholder":42},[115,161356,161357,161359,161361],{"class":117,"line":1201},[115,161358,161296],{"class":125},[115,161360,171],{"class":121},[115,161362,161363],{"class":125}," say_hello()\n",[115,161365,161366,161368,161371],{"class":117,"line":1215},[115,161367,30416],{"class":174},[115,161369,161370],{"class":125},"(result)  ",[115,161372,161373],{"class":184},"# None\n",[57,161375,161377],{"id":161376},"_56-return的作用","5.6 return的作用",[14,161379,161380,161382],{},[112,161381,17047],{}," 有两个作用：",[69,161384,161385,161388],{},[72,161386,161387],{},"返回结果。",[72,161389,161390],{},"结束函数。",[106,161392,161394],{"className":30379,"code":161393,"language":30381,"meta":22,"style":22},"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",[112,161395,161396,161406,161418,161425,161429,161441,161448,161452,161459,161463,161467,161478],{"__ignoreMap":22},[115,161397,161398,161400,161403],{"class":117,"line":118},[115,161399,31948],{"class":121},[115,161401,161402],{"class":1963}," check_age",[115,161404,161405],{"class":125},"(age):\n",[115,161407,161408,161410,161412,161414,161416],{"class":117,"line":37},[115,161409,3101],{"class":121},[115,161411,15708],{"class":125},[115,161413,1035],{"class":121},[115,161415,4093],{"class":174},[115,161417,3739],{"class":125},[115,161419,161420,161422],{"class":117,"line":1180},[115,161421,14753],{"class":121},[115,161423,161424],{"class":230}," \"年龄不合法\"\n",[115,161426,161427],{"class":117,"line":1195},[115,161428,2400],{"emptyLinePlaceholder":42},[115,161430,161431,161433,161435,161437,161439],{"class":117,"line":1201},[115,161432,3101],{"class":121},[115,161434,15708],{"class":125},[115,161436,1710],{"class":121},[115,161438,156275],{"class":174},[115,161440,3739],{"class":125},[115,161442,161443,161445],{"class":117,"line":1215},[115,161444,14753],{"class":121},[115,161446,161447],{"class":230}," \"成年人\"\n",[115,161449,161450],{"class":117,"line":1221},[115,161451,2400],{"emptyLinePlaceholder":42},[115,161453,161454,161456],{"class":117,"line":1312},[115,161455,4090],{"class":121},[115,161457,161458],{"class":230}," \"未成年人\"\n",[115,161460,161461],{"class":117,"line":1318},[115,161462,2400],{"emptyLinePlaceholder":42},[115,161464,161465],{"class":117,"line":1330},[115,161466,2400],{"emptyLinePlaceholder":42},[115,161468,161469,161471,161474,161476],{"class":117,"line":1612},[115,161470,30416],{"class":174},[115,161472,161473],{"class":125},"(check_age(",[115,161475,825],{"class":174},[115,161477,30498],{"class":125},[115,161479,161480,161482,161484,161486,161488],{"class":117,"line":1617},[115,161481,30416],{"class":174},[115,161483,161473],{"class":125},[115,161485,657],{"class":121},[115,161487,343],{"class":174},[115,161489,30498],{"class":125},[14,161491,161492,161493,161495],{},"函数执行到 ",[112,161494,17047],{}," 后，后面的代码不会继续执行。",[57,161497,161499],{"id":161498},"_57-none","5.7 None",[14,161501,161502,161504],{},[112,161503,95676],{}," 表示空值或没有结果。",[14,161506,161507],{},"常见使用场景：",[69,161509,161510,161513,161516],{},[72,161511,161512],{},"函数没有返回值。",[72,161514,161515],{},"变量暂时没有具体值。",[72,161517,161518],{},"表示查询不到结果。",[106,161520,161522],{"className":30379,"code":161521,"language":30381,"meta":22,"style":22},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[112,161523,161524,161532,161536,161549],{"__ignoreMap":22},[115,161525,161526,161528,161530],{"class":117,"line":118},[115,161527,161296],{"class":125},[115,161529,171],{"class":121},[115,161531,152162],{"class":174},[115,161533,161534],{"class":117,"line":37},[115,161535,2400],{"emptyLinePlaceholder":42},[115,161537,161538,161540,161543,161545,161547],{"class":117,"line":1180},[115,161539,1531],{"class":121},[115,161541,161542],{"class":125}," result ",[115,161544,38928],{"class":121},[115,161546,38934],{"class":174},[115,161548,3739],{"class":125},[115,161550,161551,161553,161555,161558],{"class":117,"line":1195},[115,161552,31300],{"class":174},[115,161554,126],{"class":125},[115,161556,161557],{"class":230},"\"没有数据\"",[115,161559,132],{"class":125},[14,161561,161562,161563,161565,161566,161569,161570,28386],{},"判断 ",[112,161564,95676],{}," 推荐使用 ",[112,161567,161568],{},"is None","，不要写成 ",[112,161571,161572],{},"== None",[57,161574,161576],{"id":161575},"_58-函数文档字符串","5.8 函数文档字符串",[14,161578,161579],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[106,161581,161583],{"className":30379,"code":161582,"language":30381,"meta":22,"style":22},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[112,161584,161585,161595,161600],{"__ignoreMap":22},[115,161586,161587,161589,161592],{"class":117,"line":118},[115,161588,31948],{"class":121},[115,161590,161591],{"class":1963}," calculate_bmi",[115,161593,161594],{"class":125},"(weight, height):\n",[115,161596,161597],{"class":117,"line":37},[115,161598,161599],{"class":230},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[115,161601,161602,161604,161607,161609,161612,161614],{"class":117,"line":1180},[115,161603,4090],{"class":121},[115,161605,161606],{"class":125}," weight ",[115,161608,709],{"class":121},[115,161610,161611],{"class":125}," height ",[115,161613,10662],{"class":121},[115,161615,47724],{"class":174},[14,161617,161618],{},"查看说明：",[106,161620,161622],{"className":30379,"code":161621,"language":30381,"meta":22,"style":22},"help(calculate_bmi)\n",[112,161623,161624],{"__ignoreMap":22},[115,161625,161626,161629],{"class":117,"line":118},[115,161627,161628],{"class":174},"help",[115,161630,161631],{"class":125},"(calculate_bmi)\n",[14,161633,161634],{},"较完整的写法：",[106,161636,161638],{"className":30379,"code":161637,"language":30381,"meta":22,"style":22},"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",[112,161639,161640,161648,161653,161658,161662,161667,161672,161677,161681],{"__ignoreMap":22},[115,161641,161642,161644,161646],{"class":117,"line":118},[115,161643,31948],{"class":121},[115,161645,161591],{"class":1963},[115,161647,161594],{"class":125},[115,161649,161650],{"class":117,"line":37},[115,161651,161652],{"class":230},"    \"\"\"\n",[115,161654,161655],{"class":117,"line":1180},[115,161656,161657],{"class":230},"    计算BMI。\n",[115,161659,161660],{"class":117,"line":1195},[115,161661,2400],{"emptyLinePlaceholder":42},[115,161663,161664],{"class":117,"line":1201},[115,161665,161666],{"class":230},"    :param weight: 体重，单位kg\n",[115,161668,161669],{"class":117,"line":1215},[115,161670,161671],{"class":230},"    :param height: 身高，单位m\n",[115,161673,161674],{"class":117,"line":1221},[115,161675,161676],{"class":230},"    :return: BMI数值\n",[115,161678,161679],{"class":117,"line":1312},[115,161680,161652],{"class":230},[115,161682,161683,161685,161687,161689,161691,161693],{"class":117,"line":1318},[115,161684,4090],{"class":121},[115,161686,161606],{"class":125},[115,161688,709],{"class":121},[115,161690,161611],{"class":125},[115,161692,10662],{"class":121},[115,161694,47724],{"class":174},[57,161696,161698],{"id":161697},"_59-变量作用域","5.9 变量作用域",[86,161700,161702],{"id":161701},"_591-局部变量","5.9.1 局部变量",[14,161704,161705],{},"在函数内部定义的变量，只能在函数内部使用。",[106,161707,161709],{"className":30379,"code":161708,"language":30381,"meta":22,"style":22},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[112,161710,161711,161720,161728,161734,161738,161742,161747],{"__ignoreMap":22},[115,161712,161713,161715,161718],{"class":117,"line":118},[115,161714,31948],{"class":121},[115,161716,161717],{"class":1963}," test",[115,161719,31954],{"class":125},[115,161721,161722,161724,161726],{"class":117,"line":37},[115,161723,45594],{"class":125},[115,161725,171],{"class":121},[115,161727,58418],{"class":174},[115,161729,161730,161732],{"class":117,"line":1180},[115,161731,31300],{"class":174},[115,161733,139],{"class":125},[115,161735,161736],{"class":117,"line":1195},[115,161737,2400],{"emptyLinePlaceholder":42},[115,161739,161740],{"class":117,"line":1201},[115,161741,2400],{"emptyLinePlaceholder":42},[115,161743,161744],{"class":117,"line":1215},[115,161745,161746],{"class":125},"test()\n",[115,161748,161749,161751,161754],{"class":117,"line":1221},[115,161750,30416],{"class":174},[115,161752,161753],{"class":125},"(num)  ",[115,161755,161756],{"class":184},"# 报错\n",[86,161758,161760],{"id":161759},"_592-全局变量","5.9.2 全局变量",[14,161762,161763],{},"在函数外部定义的变量，可以在函数内部读取。",[106,161765,161767],{"className":30379,"code":161766,"language":30381,"meta":22,"style":22},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[112,161768,161769,161777,161781,161785,161793,161799,161803,161807],{"__ignoreMap":22},[115,161770,161771,161773,161775],{"class":117,"line":118},[115,161772,146526],{"class":125},[115,161774,171],{"class":121},[115,161776,149343],{"class":230},[115,161778,161779],{"class":117,"line":37},[115,161780,2400],{"emptyLinePlaceholder":42},[115,161782,161783],{"class":117,"line":1180},[115,161784,2400],{"emptyLinePlaceholder":42},[115,161786,161787,161789,161791],{"class":117,"line":1195},[115,161788,31948],{"class":121},[115,161790,160986],{"class":1963},[115,161792,31954],{"class":125},[115,161794,161795,161797],{"class":117,"line":1201},[115,161796,31300],{"class":174},[115,161798,150650],{"class":125},[115,161800,161801],{"class":117,"line":1215},[115,161802,2400],{"emptyLinePlaceholder":42},[115,161804,161805],{"class":117,"line":1221},[115,161806,2400],{"emptyLinePlaceholder":42},[115,161808,161809],{"class":117,"line":1312},[115,161810,161021],{"class":125},[14,161812,161813,161814,28386],{},"如果要在函数内部修改全局变量，需要 ",[112,161815,161816],{},"global",[106,161818,161820],{"className":30379,"code":161819,"language":30381,"meta":22,"style":22},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[112,161821,161822,161830,161834,161838,161847,161855,161863,161867,161871,161876],{"__ignoreMap":22},[115,161823,161824,161826,161828],{"class":117,"line":118},[115,161825,146681],{"class":125},[115,161827,171],{"class":121},[115,161829,47334],{"class":174},[115,161831,161832],{"class":117,"line":37},[115,161833,2400],{"emptyLinePlaceholder":42},[115,161835,161836],{"class":117,"line":1180},[115,161837,2400],{"emptyLinePlaceholder":42},[115,161839,161840,161842,161845],{"class":117,"line":1195},[115,161841,31948],{"class":121},[115,161843,161844],{"class":1963}," add_count",[115,161846,31954],{"class":125},[115,161848,161849,161852],{"class":117,"line":1201},[115,161850,161851],{"class":121},"    global",[115,161853,161854],{"class":125}," count\n",[115,161856,161857,161859,161861],{"class":117,"line":1215},[115,161858,159423],{"class":125},[115,161860,9478],{"class":121},[115,161862,55689],{"class":174},[115,161864,161865],{"class":117,"line":1221},[115,161866,2400],{"emptyLinePlaceholder":42},[115,161868,161869],{"class":117,"line":1312},[115,161870,2400],{"emptyLinePlaceholder":42},[115,161872,161873],{"class":117,"line":1318},[115,161874,161875],{"class":125},"add_count()\n",[115,161877,161878,161880],{"class":117,"line":1330},[115,161879,30416],{"class":174},[115,161881,161882],{"class":125},"(count)\n",[14,161884,161885],{},"不建议大量使用全局变量，项目变大后很难维护。",[57,161887,161889],{"id":161888},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161891,161892],{},"一个函数中可以调用另一个函数。",[106,161894,161896],{"className":30379,"code":161895,"language":30381,"meta":22,"style":22},"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",[112,161897,161898,161907,161921,161925,161929,161938,161943,161963,161984,161988,161992,161996],{"__ignoreMap":22},[115,161899,161900,161902,161905],{"class":117,"line":118},[115,161901,31948],{"class":121},[115,161903,161904],{"class":1963}," print_line",[115,161906,31954],{"class":125},[115,161908,161909,161911,161913,161915,161917,161919],{"class":117,"line":37},[115,161910,31300],{"class":174},[115,161912,126],{"class":125},[115,161914,32484],{"class":230},[115,161916,6519],{"class":121},[115,161918,78655],{"class":174},[115,161920,132],{"class":125},[115,161922,161923],{"class":117,"line":1180},[115,161924,2400],{"emptyLinePlaceholder":42},[115,161926,161927],{"class":117,"line":1195},[115,161928,2400],{"emptyLinePlaceholder":42},[115,161930,161931,161933,161936],{"class":117,"line":1201},[115,161932,31948],{"class":121},[115,161934,161935],{"class":1963}," print_info",[115,161937,149365],{"class":125},[115,161939,161940],{"class":117,"line":1215},[115,161941,161942],{"class":125},"    print_line()\n",[115,161944,161945,161947,161949,161951,161953,161955,161957,161959,161961],{"class":117,"line":1221},[115,161946,31300],{"class":174},[115,161948,126],{"class":125},[115,161950,178],{"class":121},[115,161952,156672],{"class":230},[115,161954,1021],{"class":174},[115,161956,79800],{"class":125},[115,161958,1071],{"class":174},[115,161960,376],{"class":230},[115,161962,132],{"class":125},[115,161964,161965,161967,161969,161971,161974,161976,161978,161980,161982],{"class":117,"line":1312},[115,161966,31300],{"class":174},[115,161968,126],{"class":125},[115,161970,178],{"class":121},[115,161972,161973],{"class":230},"\"年龄:",[115,161975,1021],{"class":174},[115,161977,70211],{"class":125},[115,161979,1071],{"class":174},[115,161981,376],{"class":230},[115,161983,132],{"class":125},[115,161985,161986],{"class":117,"line":1318},[115,161987,161942],{"class":125},[115,161989,161990],{"class":117,"line":1330},[115,161991,2400],{"emptyLinePlaceholder":42},[115,161993,161994],{"class":117,"line":1612},[115,161995,2400],{"emptyLinePlaceholder":42},[115,161997,161998,162001,162003,162005,162007],{"class":117,"line":1617},[115,161999,162000],{"class":125},"print_info(",[115,162002,149878],{"class":230},[115,162004,12436],{"class":125},[115,162006,775],{"class":174},[115,162008,132],{"class":125},[14,162010,162011],{},"这种方式可以把小功能组合成大功能。",[57,162013,162015],{"id":162014},"_511-参数检查","5.11 参数检查",[14,162017,162018],{},"函数内部可以检查参数是否合法。",[106,162020,162022],{"className":30379,"code":162021,"language":30381,"meta":22,"style":22},"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",[112,162023,162024,162033,162045,162051,162061,162065,162069,162086,162090,162102,162113,162119],{"__ignoreMap":22},[115,162025,162026,162028,162031],{"class":117,"line":118},[115,162027,31948],{"class":121},[115,162029,162030],{"class":1963}," divide",[115,162032,151083],{"class":125},[115,162034,162035,162037,162039,162041,162043],{"class":117,"line":37},[115,162036,3101],{"class":121},[115,162038,10883],{"class":125},[115,162040,2949],{"class":121},[115,162042,4093],{"class":174},[115,162044,3739],{"class":125},[115,162046,162047,162049],{"class":117,"line":1180},[115,162048,14753],{"class":121},[115,162050,152162],{"class":174},[115,162052,162053,162055,162057,162059],{"class":117,"line":1195},[115,162054,4090],{"class":121},[115,162056,10870],{"class":125},[115,162058,709],{"class":121},[115,162060,151094],{"class":125},[115,162062,162063],{"class":117,"line":1201},[115,162064,2400],{"emptyLinePlaceholder":42},[115,162066,162067],{"class":117,"line":1215},[115,162068,2400],{"emptyLinePlaceholder":42},[115,162070,162071,162073,162075,162078,162080,162082,162084],{"class":117,"line":1221},[115,162072,161296],{"class":125},[115,162074,171],{"class":121},[115,162076,162077],{"class":125}," divide(",[115,162079,571],{"class":174},[115,162081,12436],{"class":125},[115,162083,317],{"class":174},[115,162085,132],{"class":125},[115,162087,162088],{"class":117,"line":1312},[115,162089,2400],{"emptyLinePlaceholder":42},[115,162091,162092,162094,162096,162098,162100],{"class":117,"line":1318},[115,162093,1531],{"class":121},[115,162095,161542],{"class":125},[115,162097,38928],{"class":121},[115,162099,38934],{"class":174},[115,162101,3739],{"class":125},[115,162103,162104,162106,162108,162111],{"class":117,"line":1330},[115,162105,31300],{"class":174},[115,162107,126],{"class":125},[115,162109,162110],{"class":230},"\"除数不能为0\"",[115,162112,132],{"class":125},[115,162114,162115,162117],{"class":117,"line":1612},[115,162116,1701],{"class":121},[115,162118,3739],{"class":125},[115,162120,162121,162123],{"class":117,"line":1617},[115,162122,31300],{"class":174},[115,162124,76575],{"class":125},[57,162126,162128],{"id":162127},"_512-类型提示","5.12 类型提示",[14,162130,162131],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[106,162133,162135],{"className":30379,"code":162134,"language":30381,"meta":22,"style":22},"def add(a: int, b: int) -> int:\n    return a + b\n",[112,162136,162137,162160],{"__ignoreMap":22},[115,162138,162139,162141,162143,162146,162148,162151,162153,162156,162158],{"class":117,"line":118},[115,162140,31948],{"class":121},[115,162142,5210],{"class":1963},[115,162144,162145],{"class":125},"(a: ",[115,162147,129],{"class":174},[115,162149,162150],{"class":125},", b: ",[115,162152,129],{"class":174},[115,162154,162155],{"class":125},") -> ",[115,162157,129],{"class":174},[115,162159,3739],{"class":125},[115,162161,162162,162164,162166,162168],{"class":117,"line":37},[115,162163,4090],{"class":121},[115,162165,10870],{"class":125},[115,162167,606],{"class":121},[115,162169,151094],{"class":125},[14,162171,162172],{},"字符串参数：",[106,162174,162176],{"className":30379,"code":162175,"language":30381,"meta":22,"style":22},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[112,162177,162178,162195],{"__ignoreMap":22},[115,162179,162180,162182,162184,162187,162189,162191,162193],{"class":117,"line":118},[115,162181,31948],{"class":121},[115,162183,160986],{"class":1963},[115,162185,162186],{"class":125},"(name: ",[115,162188,1300],{"class":174},[115,162190,162155],{"class":125},[115,162192,95676],{"class":174},[115,162194,3739],{"class":125},[115,162196,162197,162199,162201,162203,162205,162207,162209,162211,162213],{"class":117,"line":37},[115,162198,31300],{"class":174},[115,162200,126],{"class":125},[115,162202,178],{"class":121},[115,162204,157044],{"class":230},[115,162206,1021],{"class":174},[115,162208,79800],{"class":125},[115,162210,1071],{"class":174},[115,162212,376],{"class":230},[115,162214,132],{"class":125},[14,162216,162217],{},"列表参数：",[106,162219,162221],{"className":30379,"code":162220,"language":30381,"meta":22,"style":22},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[112,162222,162223,162242,162250,162262,162271],{"__ignoreMap":22},[115,162224,162225,162227,162230,162233,162235,162238,162240],{"class":117,"line":118},[115,162226,31948],{"class":121},[115,162228,162229],{"class":1963}," get_total",[115,162231,162232],{"class":125},"(numbers: list[",[115,162234,129],{"class":174},[115,162236,162237],{"class":125},"]) -> ",[115,162239,129],{"class":174},[115,162241,3739],{"class":125},[115,162243,162244,162246,162248],{"class":117,"line":37},[115,162245,159297],{"class":125},[115,162247,171],{"class":121},[115,162249,47334],{"class":174},[115,162251,162252,162254,162257,162259],{"class":117,"line":1180},[115,162253,3201],{"class":121},[115,162255,162256],{"class":125}," number ",[115,162258,26044],{"class":121},[115,162260,162261],{"class":125}," numbers:\n",[115,162263,162264,162266,162268],{"class":117,"line":1195},[115,162265,159972],{"class":125},[115,162267,9478],{"class":121},[115,162269,162270],{"class":125}," number\n",[115,162272,162273,162275],{"class":117,"line":1201},[115,162274,4090],{"class":121},[115,162276,162277],{"class":125}," total\n",[14,162279,162280],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[57,162282,162284],{"id":162283},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[106,162286,162288],{"className":30379,"code":162287,"language":30381,"meta":22,"style":22},"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",[112,162289,162290,162300,162304,162308,162316,162327,162337,162347,162357,162367,162371,162375,162384,162406,162410,162414,162423,162429,162449,162461,162472,162476,162485,162496,162501,162505,162509,162518,162524,162543,162555,162565,162569,162580,162590,162594,162602,162613,162617,162621,162625,162633,162638,162652,162656,162668,162673,162685,162690,162702,162707,162719,162729,162733,162739],{"__ignoreMap":22},[115,162291,162292,162295,162297],{"class":117,"line":118},[115,162293,162294],{"class":125},"balance ",[115,162296,171],{"class":121},[115,162298,162299],{"class":174}," 1000\n",[115,162301,162302],{"class":117,"line":37},[115,162303,2400],{"emptyLinePlaceholder":42},[115,162305,162306],{"class":117,"line":1180},[115,162307,2400],{"emptyLinePlaceholder":42},[115,162309,162310,162312,162314],{"class":117,"line":1195},[115,162311,31948],{"class":121},[115,162313,152023],{"class":1963},[115,162315,31954],{"class":125},[115,162317,162318,162320,162322,162325],{"class":117,"line":1201},[115,162319,31300],{"class":174},[115,162321,126],{"class":125},[115,162323,162324],{"class":230},"\"====== ATM ======\"",[115,162326,132],{"class":125},[115,162328,162329,162331,162333,162335],{"class":117,"line":1215},[115,162330,31300],{"class":174},[115,162332,126],{"class":125},[115,162334,160638],{"class":230},[115,162336,132],{"class":125},[115,162338,162339,162341,162343,162345],{"class":117,"line":1221},[115,162340,31300],{"class":174},[115,162342,126],{"class":125},[115,162344,160649],{"class":230},[115,162346,132],{"class":125},[115,162348,162349,162351,162353,162355],{"class":117,"line":1312},[115,162350,31300],{"class":174},[115,162352,126],{"class":125},[115,162354,160660],{"class":230},[115,162356,132],{"class":125},[115,162358,162359,162361,162363,162365],{"class":117,"line":1318},[115,162360,31300],{"class":174},[115,162362,126],{"class":125},[115,162364,160671],{"class":230},[115,162366,132],{"class":125},[115,162368,162369],{"class":117,"line":1330},[115,162370,2400],{"emptyLinePlaceholder":42},[115,162372,162373],{"class":117,"line":1612},[115,162374,2400],{"emptyLinePlaceholder":42},[115,162376,162377,162379,162382],{"class":117,"line":1617},[115,162378,31948],{"class":121},[115,162380,162381],{"class":1963}," show_balance",[115,162383,31954],{"class":125},[115,162385,162386,162388,162390,162392,162395,162397,162400,162402,162404],{"class":117,"line":1623},[115,162387,31300],{"class":174},[115,162389,126],{"class":125},[115,162391,178],{"class":121},[115,162393,162394],{"class":230},"\"当前余额:",[115,162396,1021],{"class":174},[115,162398,162399],{"class":125},"balance",[115,162401,1071],{"class":174},[115,162403,157002],{"class":230},[115,162405,132],{"class":125},[115,162407,162408],{"class":117,"line":1628},[115,162409,2400],{"emptyLinePlaceholder":42},[115,162411,162412],{"class":117,"line":1642},[115,162413,2400],{"emptyLinePlaceholder":42},[115,162415,162416,162418,162421],{"class":117,"line":1647},[115,162417,31948],{"class":121},[115,162419,162420],{"class":1963}," save_money",[115,162422,31954],{"class":125},[115,162424,162425,162427],{"class":117,"line":1653},[115,162426,161851],{"class":121},[115,162428,150089],{"class":125},[115,162430,162431,162434,162436,162438,162440,162442,162444,162447],{"class":117,"line":1674},[115,162432,162433],{"class":125},"    money ",[115,162435,171],{"class":121},[115,162437,109787],{"class":174},[115,162439,126],{"class":125},[115,162441,53811],{"class":174},[115,162443,126],{"class":125},[115,162445,162446],{"class":230},"\"请输入存款金额:\"",[115,162448,30498],{"class":125},[115,162450,162451,162453,162455,162457,162459],{"class":117,"line":1679},[115,162452,3101],{"class":121},[115,162454,150132],{"class":125},[115,162456,1588],{"class":121},[115,162458,4093],{"class":174},[115,162460,3739],{"class":125},[115,162462,162463,162465,162467,162470],{"class":117,"line":1693},[115,162464,32452],{"class":174},[115,162466,126],{"class":125},[115,162468,162469],{"class":230},"\"金额必须大于0\"",[115,162471,132],{"class":125},[115,162473,162474],{"class":117,"line":1698},[115,162475,152351],{"class":121},[115,162477,162478,162481,162483],{"class":117,"line":1727},[115,162479,162480],{"class":125},"    balance ",[115,162482,9478],{"class":121},[115,162484,150165],{"class":125},[115,162486,162487,162489,162491,162494],{"class":117,"line":1732},[115,162488,31300],{"class":174},[115,162490,126],{"class":125},[115,162492,162493],{"class":230},"\"存款成功\"",[115,162495,132],{"class":125},[115,162497,162498],{"class":117,"line":1749},[115,162499,162500],{"class":125},"    show_balance()\n",[115,162502,162503],{"class":117,"line":1754},[115,162504,2400],{"emptyLinePlaceholder":42},[115,162506,162507],{"class":117,"line":1759},[115,162508,2400],{"emptyLinePlaceholder":42},[115,162510,162511,162513,162516],{"class":117,"line":1764},[115,162512,31948],{"class":121},[115,162514,162515],{"class":1963}," withdraw_money",[115,162517,31954],{"class":125},[115,162519,162520,162522],{"class":117,"line":1778},[115,162521,161851],{"class":121},[115,162523,150089],{"class":125},[115,162525,162526,162528,162530,162532,162534,162536,162538,162541],{"class":117,"line":1783},[115,162527,162433],{"class":125},[115,162529,171],{"class":121},[115,162531,109787],{"class":174},[115,162533,126],{"class":125},[115,162535,53811],{"class":174},[115,162537,126],{"class":125},[115,162539,162540],{"class":230},"\"请输入取款金额:\"",[115,162542,30498],{"class":125},[115,162544,162545,162547,162549,162551,162553],{"class":117,"line":2577},[115,162546,3101],{"class":121},[115,162548,150132],{"class":125},[115,162550,1588],{"class":121},[115,162552,4093],{"class":174},[115,162554,3739],{"class":125},[115,162556,162557,162559,162561,162563],{"class":117,"line":2591},[115,162558,32452],{"class":174},[115,162560,126],{"class":125},[115,162562,162469],{"class":230},[115,162564,132],{"class":125},[115,162566,162567],{"class":117,"line":2599},[115,162568,152351],{"class":121},[115,162570,162571,162573,162575,162577],{"class":117,"line":2604},[115,162572,3101],{"class":121},[115,162574,150132],{"class":125},[115,162576,1085],{"class":121},[115,162578,162579],{"class":125}," balance:\n",[115,162581,162582,162584,162586,162588],{"class":117,"line":2610},[115,162583,32452],{"class":174},[115,162585,126],{"class":125},[115,162587,150227],{"class":230},[115,162589,132],{"class":125},[115,162591,162592],{"class":117,"line":2616},[115,162593,152351],{"class":121},[115,162595,162596,162598,162600],{"class":117,"line":2621},[115,162597,162480],{"class":125},[115,162599,150242],{"class":121},[115,162601,150165],{"class":125},[115,162603,162604,162606,162608,162611],{"class":117,"line":7949},[115,162605,31300],{"class":174},[115,162607,126],{"class":125},[115,162609,162610],{"class":230},"\"取款成功\"",[115,162612,132],{"class":125},[115,162614,162615],{"class":117,"line":7973},[115,162616,162500],{"class":125},[115,162618,162619],{"class":117,"line":7978},[115,162620,2400],{"emptyLinePlaceholder":42},[115,162622,162623],{"class":117,"line":7984},[115,162624,2400],{"emptyLinePlaceholder":42},[115,162626,162627,162629,162631],{"class":117,"line":8011},[115,162628,108653],{"class":121},[115,162630,95282],{"class":174},[115,162632,3739],{"class":125},[115,162634,162635],{"class":117,"line":8016},[115,162636,162637],{"class":125},"    show_menu()\n",[115,162639,162640,162642,162644,162646,162648,162650],{"class":117,"line":8022},[115,162641,160682],{"class":125},[115,162643,171],{"class":121},[115,162645,60595],{"class":174},[115,162647,126],{"class":125},[115,162649,153063],{"class":230},[115,162651,132],{"class":125},[115,162653,162654],{"class":117,"line":8034},[115,162655,2400],{"emptyLinePlaceholder":42},[115,162657,162658,162660,162662,162664,162666],{"class":117,"line":8046},[115,162659,3101],{"class":121},[115,162661,153076],{"class":125},[115,162663,2949],{"class":121},[115,162665,153081],{"class":230},[115,162667,3739],{"class":125},[115,162669,162670],{"class":117,"line":8058},[115,162671,162672],{"class":125},"        show_balance()\n",[115,162674,162675,162677,162679,162681,162683],{"class":117,"line":9717},[115,162676,39294],{"class":121},[115,162678,153076],{"class":125},[115,162680,2949],{"class":121},[115,162682,153100],{"class":230},[115,162684,3739],{"class":125},[115,162686,162687],{"class":117,"line":9742},[115,162688,162689],{"class":125},"        save_money()\n",[115,162691,162692,162694,162696,162698,162700],{"class":117,"line":9765},[115,162693,39294],{"class":121},[115,162695,153076],{"class":125},[115,162697,2949],{"class":121},[115,162699,153118],{"class":230},[115,162701,3739],{"class":125},[115,162703,162704],{"class":117,"line":9789},[115,162705,162706],{"class":125},"        withdraw_money()\n",[115,162708,162709,162711,162713,162715,162717],{"class":117,"line":9794},[115,162710,39294],{"class":121},[115,162712,153076],{"class":125},[115,162714,2949],{"class":121},[115,162716,153172],{"class":230},[115,162718,3739],{"class":125},[115,162720,162721,162723,162725,162727],{"class":117,"line":9799},[115,162722,32452],{"class":174},[115,162724,126],{"class":125},[115,162726,153183],{"class":230},[115,162728,132],{"class":125},[115,162730,162731],{"class":117,"line":9804},[115,162732,31628],{"class":121},[115,162734,162735,162737],{"class":117,"line":9813},[115,162736,158012],{"class":121},[115,162738,3739],{"class":125},[115,162740,162741,162743,162745,162747],{"class":117,"line":9818},[115,162742,32452],{"class":174},[115,162744,126],{"class":125},[115,162746,153204],{"class":230},[115,162748,132],{"class":125},[14,162750,162751],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[57,162753,162755],{"id":162754},"_514-易错点","5.14 易错点",[69,162757,162758,162761,162764,162769,162774,162777],{},[72,162759,162760],{},"函数定义后必须调用才会执行。",[72,162762,162763],{},"函数名后面有括号才是调用。",[72,162765,162766,162768],{},[112,162767,17047],{}," 后面的代码不会执行。",[72,162770,162771,162772,28386],{},"没有返回值的函数默认返回 ",[112,162773,95676],{},[72,162775,162776],{},"局部变量不能在函数外部访问。",[72,162778,162779,162780,162782],{},"不要滥用 ",[112,162781,161816],{},"，更好的方式是让函数返回新值。",[14,162784,162785,162786,162788],{},"例如不用 ",[112,162787,161816],{}," 改写存款：",[106,162790,162792],{"className":30379,"code":162791,"language":30381,"meta":22,"style":22},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[112,162793,162794,162803,162814,162818,162822,162830,162843],{"__ignoreMap":22},[115,162795,162796,162798,162800],{"class":117,"line":118},[115,162797,31948],{"class":121},[115,162799,162420],{"class":1963},[115,162801,162802],{"class":125},"(balance, money):\n",[115,162804,162805,162807,162810,162812],{"class":117,"line":37},[115,162806,4090],{"class":121},[115,162808,162809],{"class":125}," balance ",[115,162811,606],{"class":121},[115,162813,150165],{"class":125},[115,162815,162816],{"class":117,"line":1180},[115,162817,2400],{"emptyLinePlaceholder":42},[115,162819,162820],{"class":117,"line":1195},[115,162821,2400],{"emptyLinePlaceholder":42},[115,162823,162824,162826,162828],{"class":117,"line":1201},[115,162825,162294],{"class":125},[115,162827,171],{"class":121},[115,162829,162299],{"class":174},[115,162831,162832,162834,162836,162839,162841],{"class":117,"line":1215},[115,162833,162294],{"class":125},[115,162835,171],{"class":121},[115,162837,162838],{"class":125}," save_money(balance, ",[115,162840,1722],{"class":174},[115,162842,132],{"class":125},[115,162844,162845,162847],{"class":117,"line":1221},[115,162846,30416],{"class":174},[115,162848,162849],{"class":125},"(balance)\n",[57,162851,162853],{"id":162852},"_515-本章练习","5.15 本章练习",[69,162855,162856,162863,162869,162875,162881],{},[72,162857,162858,162859,162862],{},"定义函数 ",[112,162860,162861],{},"print_student(name, age)","，输出学生信息。",[72,162864,162858,162865,162868],{},[112,162866,162867],{},"get_max(a, b, c)","，返回三个数中的最大值。",[72,162870,162858,162871,162874],{},[112,162872,162873],{},"is_even(num)","，判断一个数是否为偶数。",[72,162876,162858,162877,162880],{},[112,162878,162879],{},"calculate_bmi(weight, height)","，返回 BMI。",[72,162882,162883],{},"把第 4 章的菜单程序拆分成多个函数。",[5127,162885,162886],{},"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":22,"searchDepth":37,"depth":37,"links":162888},[162889,162890,162891,162892,162893,162894,162895,162896,162897,162901,162902,162903,162904,162905,162906],{"id":160909,"depth":37,"text":160910},{"id":160950,"depth":37,"text":160951},{"id":161040,"depth":37,"text":161041},{"id":161121,"depth":37,"text":161122},{"id":161254,"depth":37,"text":161255},{"id":161376,"depth":37,"text":161377},{"id":161498,"depth":37,"text":161499},{"id":161575,"depth":37,"text":161576},{"id":161697,"depth":37,"text":161698,"children":162898},[162899,162900],{"id":161701,"depth":1180,"text":161702},{"id":161759,"depth":1180,"text":161760},{"id":161888,"depth":37,"text":161889},{"id":162014,"depth":37,"text":162015},{"id":162127,"depth":37,"text":162128},{"id":162283,"depth":37,"text":162284},{"id":162754,"depth":37,"text":162755},{"id":162852,"depth":37,"text":162853},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160901,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162913,"title":162914,"body":162915,"description":39,"extension":40,"meta":165959,"navigation":42,"path":165960,"seo":165961,"stem":165962,"__hash__":165963},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162916,"toc":165940},[162917,162920,162924,162927,162930,163034,163037,163041,163044,163124,163127,163131,163134,163194,163197,163233,163236,163251,163255,163328,163331,163386,163389,163459,163462,163546,163556,163614,163618,163663,163666,163692,163695,163801,163805,163808,163850,163853,163917,163920,163924,163927,163988,163991,164021,164024,164062,164066,164069,164078,164081,164205,164208,164249,164253,164256,164267,164307,164310,164325,164330,164333,164400,164403,164493,164497,164500,164548,164551,164578,164580,164610,164613,164633,164636,164667,164670,164703,164707,164710,164734,164737,164761,164764,164788,164792,164795,164925,164928,165008,165011,165086,165090,165093,165143,165146,165188,165191,165215,165217,165241,165244,165299,165302,165368,165372,165375,165378,165416,165419,165472,165475,165521,165524,165557,165560,165564,165883,165887,165916,165920,165937],[10,162918,162914],{"id":162919},"_6-数据容器",[57,162921,162923],{"id":162922},"_61-什么是数据容器","6.1 什么是数据容器",[14,162925,162926],{},"数据容器用于一次保存多个数据。",[14,162928,162929],{},"常见容器：",[263,162931,162932,162949],{},[266,162933,162934],{},[269,162935,162936,162938,162941,162944,162947],{},[272,162937,25772],{},[272,162939,162940],{},"是否有序",[272,162942,162943],{},"是否可变",[272,162945,162946],{},"是否允许重复",[272,162948,27493],{},[310,162950,162951,162969,162985,163000,163017],{},[269,162952,162953,162956,162959,162962,162965],{},[315,162954,162955],{},"list列表",[315,162957,162958],{},"有序",[315,162960,162961],{},"可变",[315,162963,162964],{},"允许",[315,162966,162967],{},[112,162968,155247],{},[269,162970,162971,162974,162976,162979,162981],{},[315,162972,162973],{},"tuple元组",[315,162975,162958],{},[315,162977,162978],{},"不可变",[315,162980,162964],{},[315,162982,162983],{},[112,162984,155260],{},[269,162986,162987,162990,162992,162994,162996],{},[315,162988,162989],{},"str字符串",[315,162991,162958],{},[315,162993,162978],{},[315,162995,162964],{},[315,162997,162998],{},[112,162999,155870],{},[269,163001,163002,163005,163008,163010,163013],{},[315,163003,163004],{},"set集合",[315,163006,163007],{},"无序",[315,163009,162961],{},[315,163011,163012],{},"不允许",[315,163014,163015],{},[112,163016,155285],{},[269,163018,163019,163022,163024,163026,163029],{},[315,163020,163021],{},"dict字典",[315,163023,162958],{},[315,163025,162961],{},[315,163027,163028],{},"key不允许重复",[315,163030,163031],{},[112,163032,163033],{},"{\"name\": \"小明\"}",[14,163035,163036],{},"Python 3.7 之后，字典保持插入顺序。",[57,163038,163040],{"id":163039},"_62-列表list","6.2 列表list",[14,163042,163043],{},"列表用于保存一组有顺序的数据。",[106,163045,163047],{"className":30379,"code":163046,"language":30381,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[112,163048,163049,163069,163094,163115],{"__ignoreMap":22},[115,163050,163051,163053,163055,163057,163059,163061,163063,163065,163067],{"class":117,"line":118},[115,163052,160370],{"class":125},[115,163054,171],{"class":121},[115,163056,52216],{"class":125},[115,163058,149878],{"class":230},[115,163060,12436],{"class":125},[115,163062,150926],{"class":230},[115,163064,12436],{"class":125},[115,163066,159721],{"class":230},[115,163068,33247],{"class":125},[115,163070,163071,163074,163076,163078,163080,163082,163084,163086,163088,163090,163092],{"class":117,"line":37},[115,163072,163073],{"class":125},"numbers ",[115,163075,171],{"class":121},[115,163077,52216],{"class":125},[115,163079,343],{"class":174},[115,163081,12436],{"class":125},[115,163083,203],{"class":174},[115,163085,12436],{"class":125},[115,163087,197],{"class":174},[115,163089,12436],{"class":125},[115,163091,418],{"class":174},[115,163093,33247],{"class":125},[115,163095,163096,163099,163101,163103,163105,163107,163109,163111,163113],{"class":117,"line":1180},[115,163097,163098],{"class":125},"mixed ",[115,163100,171],{"class":121},[115,163102,52216],{"class":125},[115,163104,149878],{"class":230},[115,163106,12436],{"class":125},[115,163108,775],{"class":174},[115,163110,12436],{"class":125},[115,163112,31477],{"class":174},[115,163114,33247],{"class":125},[115,163116,163117,163120,163122],{"class":117,"line":1195},[115,163118,163119],{"class":125},"empty ",[115,163121,171],{"class":121},[115,163123,51828],{"class":125},[14,163125,163126],{},"推荐一个列表中保存同类数据，代码更清晰。",[57,163128,163130],{"id":163129},"_63-列表索引","6.3 列表索引",[14,163132,163133],{},"正向索引从 0 开始：",[106,163135,163137],{"className":30379,"code":163136,"language":30381,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[112,163138,163139,163159,163163,163174,163184],{"__ignoreMap":22},[115,163140,163141,163143,163145,163147,163149,163151,163153,163155,163157],{"class":117,"line":118},[115,163142,160370],{"class":125},[115,163144,171],{"class":121},[115,163146,52216],{"class":125},[115,163148,149878],{"class":230},[115,163150,12436],{"class":125},[115,163152,150926],{"class":230},[115,163154,12436],{"class":125},[115,163156,159721],{"class":230},[115,163158,33247],{"class":125},[115,163160,163161],{"class":117,"line":37},[115,163162,2400],{"emptyLinePlaceholder":42},[115,163164,163165,163167,163170,163172],{"class":117,"line":1180},[115,163166,30416],{"class":174},[115,163168,163169],{"class":125},"(names[",[115,163171,317],{"class":174},[115,163173,4657],{"class":125},[115,163175,163176,163178,163180,163182],{"class":117,"line":1195},[115,163177,30416],{"class":174},[115,163179,163169],{"class":125},[115,163181,343],{"class":174},[115,163183,4657],{"class":125},[115,163185,163186,163188,163190,163192],{"class":117,"line":1201},[115,163187,30416],{"class":174},[115,163189,163169],{"class":125},[115,163191,203],{"class":174},[115,163193,4657],{"class":125},[14,163195,163196],{},"反向索引从 -1 开始：",[106,163198,163200],{"className":30379,"code":163199,"language":30381,"meta":22,"style":22},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[112,163201,163202,163218],{"__ignoreMap":22},[115,163203,163204,163206,163208,163210,163212,163215],{"class":117,"line":118},[115,163205,30416],{"class":174},[115,163207,163169],{"class":125},[115,163209,657],{"class":121},[115,163211,343],{"class":174},[115,163213,163214],{"class":125},"])  ",[115,163216,163217],{"class":184},"# 小刚\n",[115,163219,163220,163222,163224,163226,163228,163230],{"class":117,"line":37},[115,163221,30416],{"class":174},[115,163223,163169],{"class":125},[115,163225,657],{"class":121},[115,163227,203],{"class":174},[115,163229,163214],{"class":125},[115,163231,163232],{"class":184},"# 小红\n",[14,163234,163235],{},"索引越界会报错：",[106,163237,163239],{"className":30379,"code":163238,"language":30381,"meta":22,"style":22},"print(names[3])\n",[112,163240,163241],{"__ignoreMap":22},[115,163242,163243,163245,163247,163249],{"class":117,"line":118},[115,163244,30416],{"class":174},[115,163246,163169],{"class":125},[115,163248,197],{"class":174},[115,163250,4657],{"class":125},[57,163252,163254],{"id":163253},"_64-列表常用方法","6.4 列表常用方法",[106,163256,163258],{"className":30379,"code":163257,"language":30381,"meta":22,"style":22},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[112,163259,163260,163276,163280,163289,163303,163317,163321],{"__ignoreMap":22},[115,163261,163262,163264,163266,163268,163270,163272,163274],{"class":117,"line":118},[115,163263,160370],{"class":125},[115,163265,171],{"class":121},[115,163267,52216],{"class":125},[115,163269,149878],{"class":230},[115,163271,12436],{"class":125},[115,163273,150926],{"class":230},[115,163275,33247],{"class":125},[115,163277,163278],{"class":117,"line":37},[115,163279,2400],{"emptyLinePlaceholder":42},[115,163281,163282,163285,163287],{"class":117,"line":1180},[115,163283,163284],{"class":125},"names.append(",[115,163286,159721],{"class":230},[115,163288,132],{"class":125},[115,163290,163291,163294,163296,163298,163301],{"class":117,"line":1195},[115,163292,163293],{"class":125},"names.insert(",[115,163295,343],{"class":174},[115,163297,12436],{"class":125},[115,163299,163300],{"class":230},"\"小李\"",[115,163302,132],{"class":125},[115,163304,163305,163308,163310,163312,163315],{"class":117,"line":1201},[115,163306,163307],{"class":125},"names.extend([",[115,163309,8684],{"class":230},[115,163311,12436],{"class":125},[115,163313,163314],{"class":230},"\"小赵\"",[115,163316,4657],{"class":125},[115,163318,163319],{"class":117,"line":1215},[115,163320,2400],{"emptyLinePlaceholder":42},[115,163322,163323,163325],{"class":117,"line":1221},[115,163324,30416],{"class":174},[115,163326,163327],{"class":125},"(names)\n",[14,163329,163330],{},"删除元素：",[106,163332,163334],{"className":30379,"code":163333,"language":30381,"meta":22,"style":22},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[112,163335,163336,163345,163355,163369,163381],{"__ignoreMap":22},[115,163337,163338,163341,163343],{"class":117,"line":118},[115,163339,163340],{"class":125},"names.remove(",[115,163342,150926],{"class":230},[115,163344,132],{"class":125},[115,163346,163347,163350,163352],{"class":117,"line":37},[115,163348,163349],{"class":125},"last ",[115,163351,171],{"class":121},[115,163353,163354],{"class":125}," names.pop()\n",[115,163356,163357,163360,163362,163365,163367],{"class":117,"line":1180},[115,163358,163359],{"class":125},"first ",[115,163361,171],{"class":121},[115,163363,163364],{"class":125}," names.pop(",[115,163366,317],{"class":174},[115,163368,132],{"class":125},[115,163370,163371,163374,163377,163379],{"class":117,"line":1195},[115,163372,163373],{"class":121},"del",[115,163375,163376],{"class":125}," names[",[115,163378,317],{"class":174},[115,163380,33247],{"class":125},[115,163382,163383],{"class":117,"line":1201},[115,163384,163385],{"class":125},"names.clear()\n",[14,163387,163388],{},"查询和统计：",[106,163390,163392],{"className":30379,"code":163391,"language":30381,"meta":22,"style":22},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[112,163393,163394,163422,163426,163437,163448],{"__ignoreMap":22},[115,163395,163396,163398,163400,163402,163404,163406,163408,163410,163412,163414,163416,163418,163420],{"class":117,"line":118},[115,163397,163073],{"class":125},[115,163399,171],{"class":121},[115,163401,52216],{"class":125},[115,163403,343],{"class":174},[115,163405,12436],{"class":125},[115,163407,203],{"class":174},[115,163409,12436],{"class":125},[115,163411,197],{"class":174},[115,163413,12436],{"class":125},[115,163415,203],{"class":174},[115,163417,12436],{"class":125},[115,163419,418],{"class":174},[115,163421,33247],{"class":125},[115,163423,163424],{"class":117,"line":37},[115,163425,2400],{"emptyLinePlaceholder":42},[115,163427,163428,163430,163433,163435],{"class":117,"line":1180},[115,163429,30416],{"class":174},[115,163431,163432],{"class":125},"(numbers.index(",[115,163434,197],{"class":174},[115,163436,30498],{"class":125},[115,163438,163439,163441,163444,163446],{"class":117,"line":1195},[115,163440,30416],{"class":174},[115,163442,163443],{"class":125},"(numbers.count(",[115,163445,203],{"class":174},[115,163447,30498],{"class":125},[115,163449,163450,163452,163454,163456],{"class":117,"line":1201},[115,163451,30416],{"class":174},[115,163453,126],{"class":125},[115,163455,7359],{"class":174},[115,163457,163458],{"class":125},"(numbers))\n",[14,163460,163461],{},"排序：",[106,163463,163465],{"className":30379,"code":163464,"language":30381,"meta":22,"style":22},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[112,163466,163467,163491,163495,163500,163507,163511,163525,163531,163535,163540],{"__ignoreMap":22},[115,163468,163469,163471,163473,163475,163477,163479,163481,163483,163485,163487,163489],{"class":117,"line":118},[115,163470,163073],{"class":125},[115,163472,171],{"class":121},[115,163474,52216],{"class":125},[115,163476,197],{"class":174},[115,163478,12436],{"class":125},[115,163480,343],{"class":174},[115,163482,12436],{"class":125},[115,163484,444],{"class":174},[115,163486,12436],{"class":125},[115,163488,203],{"class":174},[115,163490,33247],{"class":125},[115,163492,163493],{"class":117,"line":37},[115,163494,2400],{"emptyLinePlaceholder":42},[115,163496,163497],{"class":117,"line":1180},[115,163498,163499],{"class":125},"numbers.sort()\n",[115,163501,163502,163504],{"class":117,"line":1195},[115,163503,30416],{"class":174},[115,163505,163506],{"class":125},"(numbers)\n",[115,163508,163509],{"class":117,"line":1201},[115,163510,2400],{"emptyLinePlaceholder":42},[115,163512,163513,163516,163519,163521,163523],{"class":117,"line":1215},[115,163514,163515],{"class":125},"numbers.sort(",[115,163517,163518],{"class":5217},"reverse",[115,163520,171],{"class":121},[115,163522,31477],{"class":174},[115,163524,132],{"class":125},[115,163526,163527,163529],{"class":117,"line":1221},[115,163528,30416],{"class":174},[115,163530,163506],{"class":125},[115,163532,163533],{"class":117,"line":1312},[115,163534,2400],{"emptyLinePlaceholder":42},[115,163536,163537],{"class":117,"line":1318},[115,163538,163539],{"class":125},"numbers.reverse()\n",[115,163541,163542,163544],{"class":117,"line":1330},[115,163543,30416],{"class":174},[115,163545,163506],{"class":125},[14,163547,163548,163551,163552,163555],{},[112,163549,163550],{},"sort()"," 会修改原列表，",[112,163553,163554],{},"sorted()"," 返回新列表。",[106,163557,163559],{"className":30379,"code":163558,"language":30381,"meta":22,"style":22},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[112,163560,163561,163585,163597,163601,163607],{"__ignoreMap":22},[115,163562,163563,163565,163567,163569,163571,163573,163575,163577,163579,163581,163583],{"class":117,"line":118},[115,163564,163073],{"class":125},[115,163566,171],{"class":121},[115,163568,52216],{"class":125},[115,163570,197],{"class":174},[115,163572,12436],{"class":125},[115,163574,343],{"class":174},[115,163576,12436],{"class":125},[115,163578,444],{"class":174},[115,163580,12436],{"class":125},[115,163582,203],{"class":174},[115,163584,33247],{"class":125},[115,163586,163587,163590,163592,163595],{"class":117,"line":37},[115,163588,163589],{"class":125},"new_numbers ",[115,163591,171],{"class":121},[115,163593,163594],{"class":174}," sorted",[115,163596,163506],{"class":125},[115,163598,163599],{"class":117,"line":1180},[115,163600,2400],{"emptyLinePlaceholder":42},[115,163602,163603,163605],{"class":117,"line":1195},[115,163604,30416],{"class":174},[115,163606,163506],{"class":125},[115,163608,163609,163611],{"class":117,"line":1201},[115,163610,30416],{"class":174},[115,163612,163613],{"class":125},"(new_numbers)\n",[57,163615,163617],{"id":163616},"_65-列表遍历","6.5 列表遍历",[106,163619,163621],{"className":30379,"code":163620,"language":30381,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[112,163622,163623,163643,163647,163657],{"__ignoreMap":22},[115,163624,163625,163627,163629,163631,163633,163635,163637,163639,163641],{"class":117,"line":118},[115,163626,160370],{"class":125},[115,163628,171],{"class":121},[115,163630,52216],{"class":125},[115,163632,149878],{"class":230},[115,163634,12436],{"class":125},[115,163636,150926],{"class":230},[115,163638,12436],{"class":125},[115,163640,159721],{"class":230},[115,163642,33247],{"class":125},[115,163644,163645],{"class":117,"line":37},[115,163646,2400],{"emptyLinePlaceholder":42},[115,163648,163649,163651,163653,163655],{"class":117,"line":1180},[115,163650,3025],{"class":121},[115,163652,160406],{"class":125},[115,163654,26044],{"class":121},[115,163656,160411],{"class":125},[115,163658,163659,163661],{"class":117,"line":1195},[115,163660,31300],{"class":174},[115,163662,150650],{"class":125},[14,163664,163665],{},"需要索引时：",[106,163667,163669],{"className":30379,"code":163668,"language":30381,"meta":22,"style":22},"for index, name in enumerate(names):\n    print(index, name)\n",[112,163670,163671,163685],{"__ignoreMap":22},[115,163672,163673,163675,163678,163680,163682],{"class":117,"line":118},[115,163674,3025],{"class":121},[115,163676,163677],{"class":125}," index, name ",[115,163679,26044],{"class":121},[115,163681,31607],{"class":174},[115,163683,163684],{"class":125},"(names):\n",[115,163686,163687,163689],{"class":117,"line":37},[115,163688,31300],{"class":174},[115,163690,163691],{"class":125},"(index, name)\n",[14,163693,163694],{},"统计总分：",[106,163696,163698],{"className":30379,"code":163697,"language":30381,"meta":22,"style":22},"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",[112,163699,163700,163725,163733,163737,163748,163756,163760,163777],{"__ignoreMap":22},[115,163701,163702,163705,163707,163709,163711,163713,163715,163717,163719,163721,163723],{"class":117,"line":118},[115,163703,163704],{"class":125},"scores ",[115,163706,171],{"class":121},[115,163708,52216],{"class":125},[115,163710,987],{"class":174},[115,163712,12436],{"class":125},[115,163714,861],{"class":174},[115,163716,12436],{"class":125},[115,163718,379],{"class":174},[115,163720,12436],{"class":125},[115,163722,686],{"class":174},[115,163724,33247],{"class":125},[115,163726,163727,163729,163731],{"class":117,"line":37},[115,163728,157250],{"class":125},[115,163730,171],{"class":121},[115,163732,47334],{"class":174},[115,163734,163735],{"class":117,"line":1180},[115,163736,2400],{"emptyLinePlaceholder":42},[115,163738,163739,163741,163743,163745],{"class":117,"line":1195},[115,163740,3025],{"class":121},[115,163742,157773],{"class":125},[115,163744,26044],{"class":121},[115,163746,163747],{"class":125}," scores:\n",[115,163749,163750,163752,163754],{"class":117,"line":1201},[115,163751,159297],{"class":125},[115,163753,9478],{"class":121},[115,163755,1579],{"class":125},[115,163757,163758],{"class":117,"line":1215},[115,163759,2400],{"emptyLinePlaceholder":42},[115,163761,163762,163765,163767,163770,163772,163774],{"class":117,"line":1221},[115,163763,163764],{"class":125},"avg ",[115,163766,171],{"class":121},[115,163768,163769],{"class":125}," total ",[115,163771,709],{"class":121},[115,163773,7332],{"class":174},[115,163775,163776],{"class":125},"(scores)\n",[115,163778,163779,163781,163783,163785,163788,163790,163793,163795,163797,163799],{"class":117,"line":1312},[115,163780,30416],{"class":174},[115,163782,126],{"class":125},[115,163784,178],{"class":121},[115,163786,163787],{"class":230},"\"平均分:",[115,163789,1021],{"class":174},[115,163791,163792],{"class":125},"avg",[115,163794,157149],{"class":121},[115,163796,1071],{"class":174},[115,163798,376],{"class":230},[115,163800,132],{"class":125},[57,163802,163804],{"id":163803},"_66-元组tuple","6.6 元组tuple",[14,163806,163807],{},"元组和列表类似，但不可修改。",[106,163809,163811],{"className":30379,"code":163810,"language":30381,"meta":22,"style":22},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[112,163812,163813,163830],{"__ignoreMap":22},[115,163814,163815,163818,163820,163822,163824,163826,163828],{"class":117,"line":118},[115,163816,163817],{"class":125},"point ",[115,163819,171],{"class":121},[115,163821,1658],{"class":125},[115,163823,571],{"class":174},[115,163825,12436],{"class":125},[115,163827,825],{"class":174},[115,163829,132],{"class":125},[115,163831,163832,163834,163836,163838,163840,163842,163844,163846,163848],{"class":117,"line":37},[115,163833,116304],{"class":125},[115,163835,171],{"class":121},[115,163837,1658],{"class":125},[115,163839,149878],{"class":230},[115,163841,12436],{"class":125},[115,163843,775],{"class":174},[115,163845,12436],{"class":125},[115,163847,69259],{"class":230},[115,163849,132],{"class":125},[14,163851,163852],{},"单元素元组必须加逗号：",[106,163854,163856],{"className":30379,"code":163855,"language":30381,"meta":22,"style":22},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[112,163857,163858,163872,163885,163889,163903],{"__ignoreMap":22},[115,163859,163860,163863,163865,163867,163869],{"class":117,"line":118},[115,163861,163862],{"class":125},"t1 ",[115,163864,171],{"class":121},[115,163866,1658],{"class":125},[115,163868,571],{"class":174},[115,163870,163871],{"class":125},",)\n",[115,163873,163874,163877,163879,163881,163883],{"class":117,"line":37},[115,163875,163876],{"class":125},"t2 ",[115,163878,171],{"class":121},[115,163880,1658],{"class":125},[115,163882,571],{"class":174},[115,163884,132],{"class":125},[115,163886,163887],{"class":117,"line":1180},[115,163888,2400],{"emptyLinePlaceholder":42},[115,163890,163891,163893,163895,163897,163900],{"class":117,"line":1195},[115,163892,30416],{"class":174},[115,163894,126],{"class":125},[115,163896,103097],{"class":174},[115,163898,163899],{"class":125},"(t1))  ",[115,163901,163902],{"class":184},"# tuple\n",[115,163904,163905,163907,163909,163911,163914],{"class":117,"line":1201},[115,163906,30416],{"class":174},[115,163908,126],{"class":125},[115,163910,103097],{"class":174},[115,163912,163913],{"class":125},"(t2))  ",[115,163915,163916],{"class":184},"# int\n",[14,163918,163919],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[57,163921,163923],{"id":163922},"_67-字符串str","6.7 字符串str",[14,163925,163926],{},"字符串也是序列，可以索引、切片和遍历。",[106,163928,163930],{"className":30379,"code":163929,"language":30381,"meta":22,"style":22},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[112,163931,163932,163940,163944,163955,163967,163971,163982],{"__ignoreMap":22},[115,163933,163934,163936,163938],{"class":117,"line":118},[115,163935,156434],{"class":125},[115,163937,171],{"class":121},[115,163939,159671],{"class":230},[115,163941,163942],{"class":117,"line":37},[115,163943,2400],{"emptyLinePlaceholder":42},[115,163945,163946,163948,163951,163953],{"class":117,"line":1180},[115,163947,30416],{"class":174},[115,163949,163950],{"class":125},"(text[",[115,163952,317],{"class":174},[115,163954,4657],{"class":125},[115,163956,163957,163959,163961,163963,163965],{"class":117,"line":1195},[115,163958,30416],{"class":174},[115,163960,163950],{"class":125},[115,163962,657],{"class":121},[115,163964,343],{"class":174},[115,163966,4657],{"class":125},[115,163968,163969],{"class":117,"line":1201},[115,163970,2400],{"emptyLinePlaceholder":42},[115,163972,163973,163975,163977,163979],{"class":117,"line":1215},[115,163974,3025],{"class":121},[115,163976,159682],{"class":125},[115,163978,26044],{"class":121},[115,163980,163981],{"class":125}," text:\n",[115,163983,163984,163986],{"class":117,"line":1221},[115,163985,31300],{"class":174},[115,163987,159693],{"class":125},[14,163989,163990],{},"字符串不可变：",[106,163992,163994],{"className":30379,"code":163993,"language":30381,"meta":22,"style":22},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[112,163995,163996,164004],{"__ignoreMap":22},[115,163997,163998,164000,164002],{"class":117,"line":118},[115,163999,156434],{"class":125},[115,164001,171],{"class":121},[115,164003,159671],{"class":230},[115,164005,164006,164009,164011,164013,164015,164018],{"class":117,"line":37},[115,164007,164008],{"class":125},"text[",[115,164010,317],{"class":174},[115,164012,4443],{"class":125},[115,164014,171],{"class":121},[115,164016,164017],{"class":230}," \"P\"",[115,164019,164020],{"class":184},"  # 报错\n",[14,164022,164023],{},"如果要得到新字符串：",[106,164025,164027],{"className":30379,"code":164026,"language":30381,"meta":22,"style":22},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[112,164028,164029,164037,164055],{"__ignoreMap":22},[115,164030,164031,164033,164035],{"class":117,"line":118},[115,164032,156434],{"class":125},[115,164034,171],{"class":121},[115,164036,159671],{"class":230},[115,164038,164039,164041,164043,164045,164047,164050,164052],{"class":117,"line":37},[115,164040,156434],{"class":125},[115,164042,171],{"class":121},[115,164044,164017],{"class":230},[115,164046,45567],{"class":121},[115,164048,164049],{"class":125}," text[",[115,164051,343],{"class":174},[115,164053,164054],{"class":125},":]\n",[115,164056,164057,164059],{"class":117,"line":1180},[115,164058,30416],{"class":174},[115,164060,164061],{"class":125},"(text)\n",[57,164063,164065],{"id":164064},"_68-切片","6.8 切片",[14,164067,164068],{},"切片用于从序列中取一部分。",[106,164070,164072],{"className":30379,"code":164071,"language":30381,"meta":22,"style":22},"序列[开始:结束:步长]\n",[112,164073,164074],{"__ignoreMap":22},[115,164075,164076],{"class":117,"line":118},[115,164077,164071],{"class":125},[14,164079,164080],{},"结束位置不包含。",[106,164082,164084],{"className":30379,"code":164083,"language":30381,"meta":22,"style":22},"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",[112,164085,164086,164123,164127,164146,164161,164175,164189],{"__ignoreMap":22},[115,164087,164088,164091,164093,164095,164097,164099,164101,164103,164105,164107,164109,164111,164113,164115,164117,164119,164121],{"class":117,"line":118},[115,164089,164090],{"class":125},"nums ",[115,164092,171],{"class":121},[115,164094,52216],{"class":125},[115,164096,317],{"class":174},[115,164098,12436],{"class":125},[115,164100,343],{"class":174},[115,164102,12436],{"class":125},[115,164104,203],{"class":174},[115,164106,12436],{"class":125},[115,164108,197],{"class":174},[115,164110,12436],{"class":125},[115,164112,418],{"class":174},[115,164114,12436],{"class":125},[115,164116,444],{"class":174},[115,164118,12436],{"class":125},[115,164120,469],{"class":174},[115,164122,33247],{"class":125},[115,164124,164125],{"class":117,"line":37},[115,164126,2400],{"emptyLinePlaceholder":42},[115,164128,164129,164131,164134,164136,164138,164140,164143],{"class":117,"line":1180},[115,164130,30416],{"class":174},[115,164132,164133],{"class":125},"(nums[",[115,164135,343],{"class":174},[115,164137,984],{"class":125},[115,164139,418],{"class":174},[115,164141,164142],{"class":125},"])    ",[115,164144,164145],{"class":184},"# [1, 2, 3]\n",[115,164147,164148,164150,164153,164155,164158],{"class":117,"line":1195},[115,164149,30416],{"class":174},[115,164151,164152],{"class":125},"(nums[:",[115,164154,197],{"class":174},[115,164156,164157],{"class":125},"])     ",[115,164159,164160],{"class":184},"# [0, 1, 2]\n",[115,164162,164163,164165,164167,164169,164172],{"class":117,"line":1201},[115,164164,30416],{"class":174},[115,164166,164133],{"class":125},[115,164168,197],{"class":174},[115,164170,164171],{"class":125},":])     ",[115,164173,164174],{"class":184},"# [3, 4, 5, 6]\n",[115,164176,164177,164179,164182,164184,164186],{"class":117,"line":1215},[115,164178,30416],{"class":174},[115,164180,164181],{"class":125},"(nums[::",[115,164183,203],{"class":174},[115,164185,164142],{"class":125},[115,164187,164188],{"class":184},"# [0, 2, 4, 6]\n",[115,164190,164191,164193,164195,164197,164199,164202],{"class":117,"line":1221},[115,164192,30416],{"class":174},[115,164194,164181],{"class":125},[115,164196,657],{"class":121},[115,164198,343],{"class":174},[115,164200,164201],{"class":125},"])   ",[115,164203,164204],{"class":184},"# 反转\n",[14,164206,164207],{},"字符串切片：",[106,164209,164211],{"className":30379,"code":164210,"language":30381,"meta":22,"style":22},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[112,164212,164213,164222,164236],{"__ignoreMap":22},[115,164214,164215,164217,164219],{"class":117,"line":118},[115,164216,156434],{"class":125},[115,164218,171],{"class":121},[115,164220,164221],{"class":230}," \"abcdef\"\n",[115,164223,164224,164226,164228,164230,164232,164234],{"class":117,"line":37},[115,164225,30416],{"class":174},[115,164227,163950],{"class":125},[115,164229,343],{"class":174},[115,164231,984],{"class":125},[115,164233,418],{"class":174},[115,164235,4657],{"class":125},[115,164237,164238,164240,164243,164245,164247],{"class":117,"line":1180},[115,164239,30416],{"class":174},[115,164241,164242],{"class":125},"(text[::",[115,164244,657],{"class":121},[115,164246,343],{"class":174},[115,164248,4657],{"class":125},[57,164250,164252],{"id":164251},"_69-集合set","6.9 集合set",[14,164254,164255],{},"集合特点：",[69,164257,164258,164261,164264],{},[72,164259,164260],{},"无序。",[72,164262,164263],{},"元素不重复。",[72,164265,164266],{},"可以做交集、并集、差集。",[106,164268,164270],{"className":30379,"code":164269,"language":30381,"meta":22,"style":22},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[112,164271,164272,164300],{"__ignoreMap":22},[115,164273,164274,164276,164278,164280,164282,164284,164286,164288,164290,164292,164294,164296,164298],{"class":117,"line":118},[115,164275,164090],{"class":125},[115,164277,171],{"class":121},[115,164279,4448],{"class":125},[115,164281,343],{"class":174},[115,164283,12436],{"class":125},[115,164285,203],{"class":174},[115,164287,12436],{"class":125},[115,164289,197],{"class":174},[115,164291,12436],{"class":125},[115,164293,197],{"class":174},[115,164295,12436],{"class":125},[115,164297,418],{"class":174},[115,164299,1565],{"class":125},[115,164301,164302,164304],{"class":117,"line":37},[115,164303,30416],{"class":174},[115,164305,164306],{"class":125},"(nums)\n",[14,164308,164309],{},"创建空集合：",[106,164311,164313],{"className":30379,"code":164312,"language":30381,"meta":22,"style":22},"s = set()\n",[112,164314,164315],{"__ignoreMap":22},[115,164316,164317,164319,164321,164323],{"class":117,"line":118},[115,164318,10580],{"class":125},[115,164320,171],{"class":121},[115,164322,119712],{"class":174},[115,164324,1976],{"class":125},[14,164326,9026,164327,164329],{},[112,164328,32460],{}," 是空字典，不是空集合。",[14,164331,164332],{},"集合常用操作：",[106,164334,164336],{"className":30379,"code":164335,"language":30381,"meta":22,"style":22},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[112,164337,164338,164358,164362,164371,164380,164389],{"__ignoreMap":22},[115,164339,164340,164342,164344,164346,164348,164350,164352,164354,164356],{"class":117,"line":118},[115,164341,10580],{"class":125},[115,164343,171],{"class":121},[115,164345,4448],{"class":125},[115,164347,343],{"class":174},[115,164349,12436],{"class":125},[115,164351,203],{"class":174},[115,164353,12436],{"class":125},[115,164355,197],{"class":174},[115,164357,1565],{"class":125},[115,164359,164360],{"class":117,"line":37},[115,164361,2400],{"emptyLinePlaceholder":42},[115,164363,164364,164367,164369],{"class":117,"line":1180},[115,164365,164366],{"class":125},"s.add(",[115,164368,418],{"class":174},[115,164370,132],{"class":125},[115,164372,164373,164376,164378],{"class":117,"line":1195},[115,164374,164375],{"class":125},"s.remove(",[115,164377,203],{"class":174},[115,164379,132],{"class":125},[115,164381,164382,164385,164387],{"class":117,"line":1201},[115,164383,164384],{"class":125},"s.discard(",[115,164386,571],{"class":174},[115,164388,132],{"class":125},[115,164390,164391,164393,164395,164397],{"class":117,"line":1215},[115,164392,30416],{"class":174},[115,164394,126],{"class":125},[115,164396,7359],{"class":174},[115,164398,164399],{"class":125},"(s))\n",[14,164401,164402],{},"交并差：",[106,164404,164406],{"className":30379,"code":164405,"language":30381,"meta":22,"style":22},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[112,164407,164408,164428,164448,164452,164467,164480],{"__ignoreMap":22},[115,164409,164410,164412,164414,164416,164418,164420,164422,164424,164426],{"class":117,"line":118},[115,164411,10920],{"class":125},[115,164413,171],{"class":121},[115,164415,4448],{"class":125},[115,164417,343],{"class":174},[115,164419,12436],{"class":125},[115,164421,203],{"class":174},[115,164423,12436],{"class":125},[115,164425,197],{"class":174},[115,164427,1565],{"class":125},[115,164429,164430,164432,164434,164436,164438,164440,164442,164444,164446],{"class":117,"line":37},[115,164431,10946],{"class":125},[115,164433,171],{"class":121},[115,164435,4448],{"class":125},[115,164437,197],{"class":174},[115,164439,12436],{"class":125},[115,164441,418],{"class":174},[115,164443,12436],{"class":125},[115,164445,444],{"class":174},[115,164447,1565],{"class":125},[115,164449,164450],{"class":117,"line":1180},[115,164451,2400],{"emptyLinePlaceholder":42},[115,164453,164454,164456,164459,164461,164464],{"class":117,"line":1195},[115,164455,30416],{"class":174},[115,164457,164458],{"class":125},"(a ",[115,164460,478],{"class":121},[115,164462,164463],{"class":125}," b)  ",[115,164465,164466],{"class":184},"# 交集\n",[115,164468,164469,164471,164473,164475,164477],{"class":117,"line":1201},[115,164470,30416],{"class":174},[115,164472,164458],{"class":125},[115,164474,1046],{"class":121},[115,164476,164463],{"class":125},[115,164478,164479],{"class":184},"# 并集\n",[115,164481,164482,164484,164486,164488,164490],{"class":117,"line":1215},[115,164483,30416],{"class":174},[115,164485,164458],{"class":125},[115,164487,657],{"class":121},[115,164489,164463],{"class":125},[115,164491,164492],{"class":184},"# 差集\n",[57,164494,164496],{"id":164495},"_610-字典dict","6.10 字典dict",[14,164498,164499],{},"字典通过 key-value 保存数据。",[106,164501,164503],{"className":30379,"code":164502,"language":30381,"meta":22,"style":22},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[112,164504,164505,164513,164523,164534,164544],{"__ignoreMap":22},[115,164506,164507,164509,164511],{"class":117,"line":118},[115,164508,149471],{"class":125},[115,164510,171],{"class":121},[115,164512,15573],{"class":125},[115,164514,164515,164517,164519,164521],{"class":117,"line":37},[115,164516,147010],{"class":230},[115,164518,51427],{"class":125},[115,164520,149878],{"class":230},[115,164522,31467],{"class":125},[115,164524,164525,164528,164530,164532],{"class":117,"line":1180},[115,164526,164527],{"class":230},"    \"age\"",[115,164529,51427],{"class":125},[115,164531,775],{"class":174},[115,164533,31467],{"class":125},[115,164535,164536,164539,164541],{"class":117,"line":1195},[115,164537,164538],{"class":230},"    \"score\"",[115,164540,51427],{"class":125},[115,164542,164543],{"class":174},"95\n",[115,164545,164546],{"class":117,"line":1201},[115,164547,1565],{"class":125},[14,164549,164550],{},"获取值：",[106,164552,164554],{"className":30379,"code":164553,"language":30381,"meta":22,"style":22},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[112,164555,164556,164567],{"__ignoreMap":22},[115,164557,164558,164560,164563,164565],{"class":117,"line":118},[115,164559,30416],{"class":174},[115,164561,164562],{"class":125},"(student[",[115,164564,62669],{"class":230},[115,164566,4657],{"class":125},[115,164568,164569,164571,164574,164576],{"class":117,"line":37},[115,164570,30416],{"class":174},[115,164572,164573],{"class":125},"(student.get(",[115,164575,62669],{"class":230},[115,164577,30498],{"class":125},[14,164579,15389],{},[106,164581,164583],{"className":30379,"code":164582,"language":30381,"meta":22,"style":22},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[112,164584,164585,164598],{"__ignoreMap":22},[115,164586,164587,164589,164592,164595],{"class":117,"line":118},[115,164588,152849],{"class":125},[115,164590,164591],{"class":230},"\"address\"",[115,164593,164594],{"class":125},"]     ",[115,164596,164597],{"class":184},"# key不存在会报错\n",[115,164599,164600,164603,164605,164607],{"class":117,"line":37},[115,164601,164602],{"class":125},"student.get(",[115,164604,164591],{"class":230},[115,164606,13715],{"class":125},[115,164608,164609],{"class":184},"# key不存在返回None\n",[14,164611,164612],{},"设置默认值：",[106,164614,164616],{"className":30379,"code":164615,"language":30381,"meta":22,"style":22},"print(student.get(\"address\", \"未知\"))\n",[112,164617,164618],{"__ignoreMap":22},[115,164619,164620,164622,164624,164626,164628,164631],{"class":117,"line":118},[115,164621,30416],{"class":174},[115,164623,164573],{"class":125},[115,164625,164591],{"class":230},[115,164627,12436],{"class":125},[115,164629,164630],{"class":230},"\"未知\"",[115,164632,30498],{"class":125},[14,164634,164635],{},"新增和修改：",[106,164637,164639],{"className":30379,"code":164638,"language":30381,"meta":22,"style":22},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[112,164640,164641,164654],{"__ignoreMap":22},[115,164642,164643,164645,164647,164649,164651],{"class":117,"line":118},[115,164644,152849],{"class":125},[115,164646,69114],{"class":230},[115,164648,4443],{"class":125},[115,164650,171],{"class":121},[115,164652,164653],{"class":174}," 19\n",[115,164655,164656,164658,164660,164662,164664],{"class":117,"line":37},[115,164657,152849],{"class":125},[115,164659,164591],{"class":230},[115,164661,4443],{"class":125},[115,164663,171],{"class":121},[115,164665,164666],{"class":230}," \"北京\"\n",[14,164668,164669],{},"删除：",[106,164671,164673],{"className":30379,"code":164672,"language":30381,"meta":22,"style":22},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[112,164674,164675,164688,164698],{"__ignoreMap":22},[115,164676,164677,164679,164681,164684,164686],{"class":117,"line":118},[115,164678,155348],{"class":125},[115,164680,171],{"class":121},[115,164682,164683],{"class":125}," student.pop(",[115,164685,151462],{"class":230},[115,164687,132],{"class":125},[115,164689,164690,164692,164694,164696],{"class":117,"line":37},[115,164691,163373],{"class":121},[115,164693,152139],{"class":125},[115,164695,69114],{"class":230},[115,164697,33247],{"class":125},[115,164699,164700],{"class":117,"line":1180},[115,164701,164702],{"class":125},"student.clear()\n",[57,164704,164706],{"id":164705},"_611-字典遍历","6.11 字典遍历",[14,164708,164709],{},"遍历 key：",[106,164711,164713],{"className":30379,"code":164712,"language":30381,"meta":22,"style":22},"for key in student:\n    print(key, student[key])\n",[112,164714,164715,164727],{"__ignoreMap":22},[115,164716,164717,164719,164722,164724],{"class":117,"line":118},[115,164718,3025],{"class":121},[115,164720,164721],{"class":125}," key ",[115,164723,26044],{"class":121},[115,164725,164726],{"class":125}," student:\n",[115,164728,164729,164731],{"class":117,"line":37},[115,164730,31300],{"class":174},[115,164732,164733],{"class":125},"(key, student[key])\n",[14,164735,164736],{},"遍历 value：",[106,164738,164740],{"className":30379,"code":164739,"language":30381,"meta":22,"style":22},"for value in student.values():\n    print(value)\n",[112,164741,164742,164754],{"__ignoreMap":22},[115,164743,164744,164746,164749,164751],{"class":117,"line":118},[115,164745,3025],{"class":121},[115,164747,164748],{"class":125}," value ",[115,164750,26044],{"class":121},[115,164752,164753],{"class":125}," student.values():\n",[115,164755,164756,164758],{"class":117,"line":37},[115,164757,31300],{"class":174},[115,164759,164760],{"class":125},"(value)\n",[14,164762,164763],{},"遍历 key 和 value：",[106,164765,164767],{"className":30379,"code":164766,"language":30381,"meta":22,"style":22},"for key, value in student.items():\n    print(key, value)\n",[112,164768,164769,164781],{"__ignoreMap":22},[115,164770,164771,164773,164776,164778],{"class":117,"line":118},[115,164772,3025],{"class":121},[115,164774,164775],{"class":125}," key, value ",[115,164777,26044],{"class":121},[115,164779,164780],{"class":125}," student.items():\n",[115,164782,164783,164785],{"class":117,"line":37},[115,164784,31300],{"class":174},[115,164786,164787],{"class":125},"(key, value)\n",[57,164789,164791],{"id":164790},"_612-嵌套容器","6.12 嵌套容器",[14,164793,164794],{},"列表中保存字典，是项目中最常见的结构之一。",[106,164796,164798],{"className":30379,"code":164797,"language":30381,"meta":22,"style":22},"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",[112,164799,164800,164808,164836,164864,164892,164896,164900,164910],{"__ignoreMap":22},[115,164801,164802,164804,164806],{"class":117,"line":118},[115,164803,159706],{"class":125},[115,164805,171],{"class":121},[115,164807,55437],{"class":125},[115,164809,164810,164812,164814,164816,164818,164820,164822,164824,164826,164828,164830,164832,164834],{"class":117,"line":37},[115,164811,148375],{"class":125},[115,164813,62669],{"class":230},[115,164815,51427],{"class":125},[115,164817,149878],{"class":230},[115,164819,12436],{"class":125},[115,164821,69114],{"class":230},[115,164823,51427],{"class":125},[115,164825,775],{"class":174},[115,164827,12436],{"class":125},[115,164829,151462],{"class":230},[115,164831,51427],{"class":125},[115,164833,1114],{"class":174},[115,164835,4930],{"class":125},[115,164837,164838,164840,164842,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862],{"class":117,"line":1180},[115,164839,148375],{"class":125},[115,164841,62669],{"class":230},[115,164843,51427],{"class":125},[115,164845,150926],{"class":230},[115,164847,12436],{"class":125},[115,164849,69114],{"class":230},[115,164851,51427],{"class":125},[115,164853,750],{"class":174},[115,164855,12436],{"class":125},[115,164857,151462],{"class":230},[115,164859,51427],{"class":125},[115,164861,936],{"class":174},[115,164863,4930],{"class":125},[115,164865,164866,164868,164870,164872,164874,164876,164878,164880,164882,164884,164886,164888,164890],{"class":117,"line":1195},[115,164867,148375],{"class":125},[115,164869,62669],{"class":230},[115,164871,51427],{"class":125},[115,164873,159721],{"class":230},[115,164875,12436],{"class":125},[115,164877,69114],{"class":230},[115,164879,51427],{"class":125},[115,164881,800],{"class":174},[115,164883,12436],{"class":125},[115,164885,151462],{"class":230},[115,164887,51427],{"class":125},[115,164889,531],{"class":174},[115,164891,4930],{"class":125},[115,164893,164894],{"class":117,"line":1201},[115,164895,33247],{"class":125},[115,164897,164898],{"class":117,"line":1215},[115,164899,2400],{"emptyLinePlaceholder":42},[115,164901,164902,164904,164906,164908],{"class":117,"line":1221},[115,164903,3025],{"class":121},[115,164905,152127],{"class":125},[115,164907,26044],{"class":121},[115,164909,152132],{"class":125},[115,164911,164912,164914,164916,164918,164921,164923],{"class":117,"line":1312},[115,164913,31300],{"class":174},[115,164915,164562],{"class":125},[115,164917,62669],{"class":230},[115,164919,164920],{"class":125},"], student[",[115,164922,151462],{"class":230},[115,164924,4657],{"class":125},[14,164926,164927],{},"统计平均分：",[106,164929,164931],{"className":30379,"code":164930,"language":30381,"meta":22,"style":22},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[112,164932,164933,164941,164945,164955,164967,164971,164986],{"__ignoreMap":22},[115,164934,164935,164937,164939],{"class":117,"line":118},[115,164936,157250],{"class":125},[115,164938,171],{"class":121},[115,164940,47334],{"class":174},[115,164942,164943],{"class":117,"line":37},[115,164944,2400],{"emptyLinePlaceholder":42},[115,164946,164947,164949,164951,164953],{"class":117,"line":1180},[115,164948,3025],{"class":121},[115,164950,152127],{"class":125},[115,164952,26044],{"class":121},[115,164954,152132],{"class":125},[115,164956,164957,164959,164961,164963,164965],{"class":117,"line":1195},[115,164958,159297],{"class":125},[115,164960,9478],{"class":121},[115,164962,152139],{"class":125},[115,164964,151462],{"class":230},[115,164966,33247],{"class":125},[115,164968,164969],{"class":117,"line":1201},[115,164970,2400],{"emptyLinePlaceholder":42},[115,164972,164973,164975,164977,164979,164981,164983],{"class":117,"line":1215},[115,164974,163764],{"class":125},[115,164976,171],{"class":121},[115,164978,163769],{"class":125},[115,164980,709],{"class":121},[115,164982,7332],{"class":174},[115,164984,164985],{"class":125},"(students)\n",[115,164987,164988,164990,164992,164994,164996,164998,165000,165002,165004,165006],{"class":117,"line":1221},[115,164989,30416],{"class":174},[115,164991,126],{"class":125},[115,164993,178],{"class":121},[115,164995,163787],{"class":230},[115,164997,1021],{"class":174},[115,164999,163792],{"class":125},[115,165001,157149],{"class":121},[115,165003,1071],{"class":174},[115,165005,376],{"class":230},[115,165007,132],{"class":125},[14,165009,165010],{},"查找学生：",[106,165012,165014],{"className":30379,"code":165013,"language":30381,"meta":22,"style":22},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[112,165015,165016,165031,165035,165045,165059,165065,165069,165075],{"__ignoreMap":22},[115,165017,165018,165020,165022,165024,165026,165029],{"class":117,"line":118},[115,165019,111568],{"class":125},[115,165021,171],{"class":121},[115,165023,60595],{"class":174},[115,165025,126],{"class":125},[115,165027,165028],{"class":230},"\"请输入学生姓名:\"",[115,165030,132],{"class":125},[115,165032,165033],{"class":117,"line":37},[115,165034,2400],{"emptyLinePlaceholder":42},[115,165036,165037,165039,165041,165043],{"class":117,"line":1180},[115,165038,3025],{"class":121},[115,165040,152127],{"class":125},[115,165042,26044],{"class":121},[115,165044,152132],{"class":125},[115,165046,165047,165049,165051,165053,165055,165057],{"class":117,"line":1195},[115,165048,3101],{"class":121},[115,165050,152139],{"class":125},[115,165052,62669],{"class":230},[115,165054,4443],{"class":125},[115,165056,2949],{"class":121},[115,165058,160422],{"class":125},[115,165060,165061,165063],{"class":117,"line":1201},[115,165062,32452],{"class":174},[115,165064,150032],{"class":125},[115,165066,165067],{"class":117,"line":1215},[115,165068,31628],{"class":121},[115,165070,165071,165073],{"class":117,"line":1221},[115,165072,1701],{"class":121},[115,165074,3739],{"class":125},[115,165076,165077,165079,165081,165084],{"class":117,"line":1312},[115,165078,31300],{"class":174},[115,165080,126],{"class":125},[115,165082,165083],{"class":230},"\"没有找到\"",[115,165085,132],{"class":125},[57,165087,165089],{"id":165088},"_613-容器通用操作","6.13 容器通用操作",[14,165091,165092],{},"长度：",[106,165094,165096],{"className":30379,"code":165095,"language":30381,"meta":22,"style":22},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[112,165097,165098,165117,165127],{"__ignoreMap":22},[115,165099,165100,165102,165105,165107,165109,165111,165113,165115],{"class":117,"line":118},[115,165101,7359],{"class":174},[115,165103,165104],{"class":125},"([",[115,165106,343],{"class":174},[115,165108,12436],{"class":125},[115,165110,203],{"class":174},[115,165112,12436],{"class":125},[115,165114,197],{"class":174},[115,165116,4657],{"class":125},[115,165118,165119,165121,165123,165125],{"class":117,"line":37},[115,165120,7359],{"class":174},[115,165122,126],{"class":125},[115,165124,155870],{"class":230},[115,165126,132],{"class":125},[115,165128,165129,165131,165134,165136,165138,165140],{"class":117,"line":1180},[115,165130,7359],{"class":174},[115,165132,165133],{"class":125},"({",[115,165135,62669],{"class":230},[115,165137,51427],{"class":125},[115,165139,149878],{"class":230},[115,165141,165142],{"class":125},"})\n",[14,165144,165145],{},"最大最小：",[106,165147,165149],{"className":30379,"code":165148,"language":30381,"meta":22,"style":22},"max([1, 2, 3])\nmin([1, 2, 3])\n",[112,165150,165151,165169],{"__ignoreMap":22},[115,165152,165153,165155,165157,165159,165161,165163,165165,165167],{"class":117,"line":118},[115,165154,6016],{"class":174},[115,165156,165104],{"class":125},[115,165158,343],{"class":174},[115,165160,12436],{"class":125},[115,165162,203],{"class":174},[115,165164,12436],{"class":125},[115,165166,197],{"class":174},[115,165168,4657],{"class":125},[115,165170,165171,165174,165176,165178,165180,165182,165184,165186],{"class":117,"line":37},[115,165172,165173],{"class":174},"min",[115,165175,165104],{"class":125},[115,165177,343],{"class":174},[115,165179,12436],{"class":125},[115,165181,203],{"class":174},[115,165183,12436],{"class":125},[115,165185,197],{"class":174},[115,165187,4657],{"class":125},[14,165189,165190],{},"求和：",[106,165192,165194],{"className":30379,"code":165193,"language":30381,"meta":22,"style":22},"sum([1, 2, 3])\n",[112,165195,165196],{"__ignoreMap":22},[115,165197,165198,165201,165203,165205,165207,165209,165211,165213],{"class":117,"line":118},[115,165199,165200],{"class":174},"sum",[115,165202,165104],{"class":125},[115,165204,343],{"class":174},[115,165206,12436],{"class":125},[115,165208,203],{"class":174},[115,165210,12436],{"class":125},[115,165212,197],{"class":174},[115,165214,4657],{"class":125},[14,165216,163461],{},[106,165218,165220],{"className":30379,"code":165219,"language":30381,"meta":22,"style":22},"sorted([3, 1, 2])\n",[112,165221,165222],{"__ignoreMap":22},[115,165223,165224,165227,165229,165231,165233,165235,165237,165239],{"class":117,"line":118},[115,165225,165226],{"class":174},"sorted",[115,165228,165104],{"class":125},[115,165230,197],{"class":174},[115,165232,12436],{"class":125},[115,165234,343],{"class":174},[115,165236,12436],{"class":125},[115,165238,203],{"class":174},[115,165240,4657],{"class":125},[14,165242,165243],{},"类型转换：",[106,165245,165247],{"className":30379,"code":165246,"language":30381,"meta":22,"style":22},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[112,165248,165249,165259,165277],{"__ignoreMap":22},[115,165250,165251,165253,165255,165257],{"class":117,"line":118},[115,165252,154060],{"class":174},[115,165254,126],{"class":125},[115,165256,155870],{"class":230},[115,165258,132],{"class":125},[115,165260,165261,165263,165265,165267,165269,165271,165273,165275],{"class":117,"line":37},[115,165262,155255],{"class":174},[115,165264,165104],{"class":125},[115,165266,343],{"class":174},[115,165268,12436],{"class":125},[115,165270,203],{"class":174},[115,165272,12436],{"class":125},[115,165274,197],{"class":174},[115,165276,4657],{"class":125},[115,165278,165279,165281,165283,165285,165287,165289,165291,165293,165295,165297],{"class":117,"line":1180},[115,165280,155280],{"class":174},[115,165282,165104],{"class":125},[115,165284,343],{"class":174},[115,165286,12436],{"class":125},[115,165288,343],{"class":174},[115,165290,12436],{"class":125},[115,165292,203],{"class":174},[115,165294,12436],{"class":125},[115,165296,197],{"class":174},[115,165298,4657],{"class":125},[14,165300,165301],{},"成员判断：",[106,165303,165305],{"className":30379,"code":165304,"language":30381,"meta":22,"style":22},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[112,165306,165307,165324,165348],{"__ignoreMap":22},[115,165308,165309,165311,165313,165316,165319,165322],{"class":117,"line":118},[115,165310,30416],{"class":174},[115,165312,126],{"class":125},[115,165314,165315],{"class":230},"\"a\"",[115,165317,165318],{"class":121}," in",[115,165320,165321],{"class":230}," \"abc\"",[115,165323,132],{"class":125},[115,165325,165326,165328,165330,165332,165334,165336,165338,165340,165342,165344,165346],{"class":117,"line":37},[115,165327,30416],{"class":174},[115,165329,126],{"class":125},[115,165331,343],{"class":174},[115,165333,165318],{"class":121},[115,165335,52216],{"class":125},[115,165337,343],{"class":174},[115,165339,12436],{"class":125},[115,165341,203],{"class":174},[115,165343,12436],{"class":125},[115,165345,197],{"class":174},[115,165347,4657],{"class":125},[115,165349,165350,165352,165354,165356,165358,165360,165362,165364,165366],{"class":117,"line":1180},[115,165351,30416],{"class":174},[115,165353,126],{"class":125},[115,165355,62669],{"class":230},[115,165357,165318],{"class":121},[115,165359,4448],{"class":125},[115,165361,62669],{"class":230},[115,165363,51427],{"class":125},[115,165365,149878],{"class":230},[115,165367,165142],{"class":125},[57,165369,165371],{"id":165370},"_614-推导式","6.14 推导式",[14,165373,165374],{},"推导式用于快速生成容器。",[14,165376,165377],{},"列表推导式：",[106,165379,165381],{"className":30379,"code":165380,"language":30381,"meta":22,"style":22},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[112,165382,165383,165410],{"__ignoreMap":22},[115,165384,165385,165387,165389,165392,165394,165396,165398,165400,165402,165404,165406,165408],{"class":117,"line":118},[115,165386,164090],{"class":125},[115,165388,171],{"class":121},[115,165390,165391],{"class":125}," [i ",[115,165393,3025],{"class":121},[115,165395,9439],{"class":125},[115,165397,26044],{"class":121},[115,165399,32444],{"class":174},[115,165401,126],{"class":125},[115,165403,343],{"class":174},[115,165405,12436],{"class":125},[115,165407,469],{"class":174},[115,165409,97290],{"class":125},[115,165411,165412,165414],{"class":117,"line":37},[115,165413,30416],{"class":174},[115,165415,164306],{"class":125},[14,165417,165418],{},"带条件：",[106,165420,165422],{"className":30379,"code":165421,"language":30381,"meta":22,"style":22},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[112,165423,165424,165465],{"__ignoreMap":22},[115,165425,165426,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451,165453,165455,165457,165459,165461,165463],{"class":117,"line":118},[115,165427,165428],{"class":125},"even_nums ",[115,165430,171],{"class":121},[115,165432,165391],{"class":125},[115,165434,3025],{"class":121},[115,165436,9439],{"class":125},[115,165438,26044],{"class":121},[115,165440,32444],{"class":174},[115,165442,126],{"class":125},[115,165444,343],{"class":174},[115,165446,12436],{"class":125},[115,165448,462],{"class":174},[115,165450,13715],{"class":125},[115,165452,1531],{"class":121},[115,165454,9439],{"class":125},[115,165456,453],{"class":121},[115,165458,14756],{"class":174},[115,165460,101549],{"class":121},[115,165462,4093],{"class":174},[115,165464,33247],{"class":125},[115,165466,165467,165469],{"class":117,"line":37},[115,165468,30416],{"class":174},[115,165470,165471],{"class":125},"(even_nums)\n",[14,165473,165474],{},"字典推导式：",[106,165476,165478],{"className":30379,"code":165477,"language":30381,"meta":22,"style":22},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[112,165479,165480,165514],{"__ignoreMap":22},[115,165481,165482,165485,165487,165490,165492,165494,165497,165499,165501,165503,165505,165507,165509,165511],{"class":117,"line":118},[115,165483,165484],{"class":125},"squares ",[115,165486,171],{"class":121},[115,165488,165489],{"class":125}," {i: i ",[115,165491,10662],{"class":121},[115,165493,14756],{"class":174},[115,165495,165496],{"class":121}," for",[115,165498,9439],{"class":125},[115,165500,26044],{"class":121},[115,165502,32444],{"class":174},[115,165504,126],{"class":125},[115,165506,343],{"class":174},[115,165508,12436],{"class":125},[115,165510,469],{"class":174},[115,165512,165513],{"class":125},")}\n",[115,165515,165516,165518],{"class":117,"line":37},[115,165517,30416],{"class":174},[115,165519,165520],{"class":125},"(squares)\n",[14,165522,165523],{},"集合推导式：",[106,165525,165527],{"className":30379,"code":165526,"language":30381,"meta":22,"style":22},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[112,165528,165529,165550],{"__ignoreMap":22},[115,165530,165531,165534,165536,165539,165541,165543,165545,165548],{"class":117,"line":118},[115,165532,165533],{"class":125},"chars ",[115,165535,171],{"class":121},[115,165537,165538],{"class":125}," {ch ",[115,165540,3025],{"class":121},[115,165542,159682],{"class":125},[115,165544,26044],{"class":121},[115,165546,165547],{"class":230}," \"hello\"",[115,165549,1565],{"class":125},[115,165551,165552,165554],{"class":117,"line":37},[115,165553,30416],{"class":174},[115,165555,165556],{"class":125},"(chars)\n",[14,165558,165559],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[57,165561,165563],{"id":165562},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[106,165565,165567],{"className":30379,"code":165566,"language":30381,"meta":22,"style":22},"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",[112,165568,165569,165577,165597,165617,165637,165657,165661,165665,165673,165687,165696,165700,165710,165722,165726,165746,165755,165759,165775,165780,165784,165798,165802,165824,165860],{"__ignoreMap":22},[115,165570,165571,165573,165575],{"class":117,"line":118},[115,165572,159706],{"class":125},[115,165574,171],{"class":121},[115,165576,55437],{"class":125},[115,165578,165579,165581,165583,165585,165587,165589,165591,165593,165595],{"class":117,"line":37},[115,165580,148375],{"class":125},[115,165582,62669],{"class":230},[115,165584,51427],{"class":125},[115,165586,149878],{"class":230},[115,165588,12436],{"class":125},[115,165590,151462],{"class":230},[115,165592,51427],{"class":125},[115,165594,1114],{"class":174},[115,165596,4930],{"class":125},[115,165598,165599,165601,165603,165605,165607,165609,165611,165613,165615],{"class":117,"line":1180},[115,165600,148375],{"class":125},[115,165602,62669],{"class":230},[115,165604,51427],{"class":125},[115,165606,150926],{"class":230},[115,165608,12436],{"class":125},[115,165610,151462],{"class":230},[115,165612,51427],{"class":125},[115,165614,936],{"class":174},[115,165616,4930],{"class":125},[115,165618,165619,165621,165623,165625,165627,165629,165631,165633,165635],{"class":117,"line":1195},[115,165620,148375],{"class":125},[115,165622,62669],{"class":230},[115,165624,51427],{"class":125},[115,165626,159721],{"class":230},[115,165628,12436],{"class":125},[115,165630,151462],{"class":230},[115,165632,51427],{"class":125},[115,165634,531],{"class":174},[115,165636,4930],{"class":125},[115,165638,165639,165641,165643,165645,165647,165649,165651,165653,165655],{"class":117,"line":1201},[115,165640,148375],{"class":125},[115,165642,62669],{"class":230},[115,165644,51427],{"class":125},[115,165646,163300],{"class":230},[115,165648,12436],{"class":125},[115,165650,151462],{"class":230},[115,165652,51427],{"class":125},[115,165654,1007],{"class":174},[115,165656,4930],{"class":125},[115,165658,165659],{"class":117,"line":1215},[115,165660,33247],{"class":125},[115,165662,165663],{"class":117,"line":1221},[115,165664,2400],{"emptyLinePlaceholder":42},[115,165666,165667,165669,165671],{"class":117,"line":1312},[115,165668,157250],{"class":125},[115,165670,171],{"class":121},[115,165672,47334],{"class":174},[115,165674,165675,165678,165680,165683,165685],{"class":117,"line":1318},[115,165676,165677],{"class":125},"max_student ",[115,165679,171],{"class":121},[115,165681,165682],{"class":125}," students[",[115,165684,317],{"class":174},[115,165686,33247],{"class":125},[115,165688,165689,165692,165694],{"class":117,"line":1330},[115,165690,165691],{"class":125},"passed ",[115,165693,171],{"class":121},[115,165695,51828],{"class":125},[115,165697,165698],{"class":117,"line":1612},[115,165699,2400],{"emptyLinePlaceholder":42},[115,165701,165702,165704,165706,165708],{"class":117,"line":1617},[115,165703,3025],{"class":121},[115,165705,152127],{"class":125},[115,165707,26044],{"class":121},[115,165709,152132],{"class":125},[115,165711,165712,165714,165716,165718,165720],{"class":117,"line":1623},[115,165713,159297],{"class":125},[115,165715,9478],{"class":121},[115,165717,152139],{"class":125},[115,165719,151462],{"class":230},[115,165721,33247],{"class":125},[115,165723,165724],{"class":117,"line":1628},[115,165725,2400],{"emptyLinePlaceholder":42},[115,165727,165728,165730,165732,165734,165736,165738,165741,165743],{"class":117,"line":1642},[115,165729,3101],{"class":121},[115,165731,152139],{"class":125},[115,165733,151462],{"class":230},[115,165735,4443],{"class":125},[115,165737,1085],{"class":121},[115,165739,165740],{"class":125}," max_student[",[115,165742,151462],{"class":230},[115,165744,165745],{"class":125},"]:\n",[115,165747,165748,165751,165753],{"class":117,"line":1647},[115,165749,165750],{"class":125},"        max_student ",[115,165752,171],{"class":121},[115,165754,152155],{"class":125},[115,165756,165757],{"class":117,"line":1653},[115,165758,2400],{"emptyLinePlaceholder":42},[115,165760,165761,165763,165765,165767,165769,165771,165773],{"class":117,"line":1674},[115,165762,3101],{"class":121},[115,165764,152139],{"class":125},[115,165766,151462],{"class":230},[115,165768,4443],{"class":125},[115,165770,1710],{"class":121},[115,165772,157827],{"class":174},[115,165774,3739],{"class":125},[115,165776,165777],{"class":117,"line":1679},[115,165778,165779],{"class":125},"        passed.append(student)\n",[115,165781,165782],{"class":117,"line":1693},[115,165783,2400],{"emptyLinePlaceholder":42},[115,165785,165786,165788,165790,165792,165794,165796],{"class":117,"line":1698},[115,165787,163764],{"class":125},[115,165789,171],{"class":121},[115,165791,163769],{"class":125},[115,165793,709],{"class":121},[115,165795,7332],{"class":174},[115,165797,164985],{"class":125},[115,165799,165800],{"class":117,"line":1727},[115,165801,2400],{"emptyLinePlaceholder":42},[115,165803,165804,165806,165808,165810,165812,165814,165816,165818,165820,165822],{"class":117,"line":1732},[115,165805,30416],{"class":174},[115,165807,126],{"class":125},[115,165809,178],{"class":121},[115,165811,163787],{"class":230},[115,165813,1021],{"class":174},[115,165815,163792],{"class":125},[115,165817,157149],{"class":121},[115,165819,1071],{"class":174},[115,165821,376],{"class":230},[115,165823,132],{"class":125},[115,165825,165826,165828,165830,165832,165835,165837,165840,165842,165844,165846,165848,165850,165852,165854,165856,165858],{"class":117,"line":1749},[115,165827,30416],{"class":174},[115,165829,126],{"class":125},[115,165831,178],{"class":121},[115,165833,165834],{"class":230},"\"最高分学生:",[115,165836,1021],{"class":174},[115,165838,165839],{"class":125},"max_student[",[115,165841,152872],{"class":230},[115,165843,1065],{"class":125},[115,165845,1071],{"class":174},[115,165847,4448],{"class":174},[115,165849,165839],{"class":125},[115,165851,152910],{"class":230},[115,165853,1065],{"class":125},[115,165855,1071],{"class":174},[115,165857,376],{"class":230},[115,165859,132],{"class":125},[115,165861,165862,165864,165866,165868,165871,165874,165877,165879,165881],{"class":117,"line":1754},[115,165863,30416],{"class":174},[115,165865,126],{"class":125},[115,165867,178],{"class":121},[115,165869,165870],{"class":230},"\"及格人数:",[115,165872,165873],{"class":174},"{len",[115,165875,165876],{"class":125},"(passed)",[115,165878,1071],{"class":174},[115,165880,376],{"class":230},[115,165882,132],{"class":125},[57,165884,165886],{"id":165885},"_616-易错点","6.16 易错点",[69,165888,165889,165892,165895,165898,165904,165913],{},[72,165890,165891],{},"列表可变，元组和字符串不可变。",[72,165893,165894],{},"切片结束位置不包含。",[72,165896,165897],{},"字典通过 key 取值，不是通过索引。",[72,165899,165900,165901,28386],{},"空集合要用 ",[112,165902,165903],{},"set()",[72,165905,104356,165906,165909,165910,28386],{},[112,165907,165908],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[112,165911,165912],{},"get()",[72,165914,165915],{},"嵌套容器要先看清楚每一层是什么类型。",[57,165917,165919],{"id":165918},"_617-本章练习","6.17 本章练习",[69,165921,165922,165925,165928,165931,165934],{},[72,165923,165924],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[72,165926,165927],{},"输入一句话，统计每个字符出现次数。",[72,165929,165930],{},"使用集合去除列表中的重复元素。",[72,165932,165933],{},"使用字典保存一个学生的信息，并实现修改成绩。",[72,165935,165936],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5127,165938,165939],{},"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":22,"searchDepth":37,"depth":37,"links":165941},[165942,165943,165944,165945,165946,165947,165948,165949,165950,165951,165952,165953,165954,165955,165956,165957,165958],{"id":162922,"depth":37,"text":162923},{"id":163039,"depth":37,"text":163040},{"id":163129,"depth":37,"text":163130},{"id":163253,"depth":37,"text":163254},{"id":163616,"depth":37,"text":163617},{"id":163803,"depth":37,"text":163804},{"id":163922,"depth":37,"text":163923},{"id":164064,"depth":37,"text":164065},{"id":164251,"depth":37,"text":164252},{"id":164495,"depth":37,"text":164496},{"id":164705,"depth":37,"text":164706},{"id":164790,"depth":37,"text":164791},{"id":165088,"depth":37,"text":165089},{"id":165370,"depth":37,"text":165371},{"id":165562,"depth":37,"text":165563},{"id":165885,"depth":37,"text":165886},{"id":165918,"depth":37,"text":165919},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162914,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165965,"title":165966,"body":165967,"description":39,"extension":40,"meta":168139,"navigation":42,"path":168140,"seo":168141,"stem":168142,"__hash__":168143},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165968,"toc":168114},[165969,165972,165976,165979,166059,166062,166083,166086,166090,166093,166155,166158,166175,166179,166182,166227,166229,166237,166241,166244,166326,166329,166332,166357,166360,166383,166387,166390,166392,166454,166457,166459,166510,166514,166518,166524,166629,166633,166639,166710,166714,166717,166785,166788,166868,166872,166878,166914,166917,166920,167030,167036,167040,167043,167115,167118,167122,167126,167131,167193,167197,167202,167270,167274,167279,167395,167399,167402,167482,167485,167489,167492,167596,167598,167613,167616,167620,167758,167766,167770,167772,167783,167785,168043,168047,168079,168083,168111],[10,165970,165966],{"id":165971},"_7-函数进阶",[57,165973,165975],{"id":165974},"_71-多返回值","7.1 多返回值",[14,165977,165978],{},"Python 函数可以返回多个值，本质上返回的是元组。",[106,165980,165982],{"className":30379,"code":165981,"language":30381,"meta":22,"style":22},"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",[112,165983,165984,165993,166001,166009,166018,166025,166029,166033,166042,166048],{"__ignoreMap":22},[115,165985,165986,165988,165991],{"class":117,"line":118},[115,165987,31948],{"class":121},[115,165989,165990],{"class":1963}," get_info",[115,165992,31954],{"class":125},[115,165994,165995,165997,165999],{"class":117,"line":37},[115,165996,152360],{"class":125},[115,165998,171],{"class":121},[115,166000,149343],{"class":230},[115,166002,166003,166005,166007],{"class":117,"line":1180},[115,166004,152376],{"class":125},[115,166006,171],{"class":121},[115,166008,146541],{"class":174},[115,166010,166011,166013,166015],{"class":117,"line":1195},[115,166012,152391],{"class":125},[115,166014,171],{"class":121},[115,166016,166017],{"class":174}," 95\n",[115,166019,166020,166022],{"class":117,"line":1201},[115,166021,4090],{"class":121},[115,166023,166024],{"class":125}," name, age, score\n",[115,166026,166027],{"class":117,"line":1215},[115,166028,2400],{"emptyLinePlaceholder":42},[115,166030,166031],{"class":117,"line":1221},[115,166032,2400],{"emptyLinePlaceholder":42},[115,166034,166035,166037,166039],{"class":117,"line":1312},[115,166036,161296],{"class":125},[115,166038,171],{"class":121},[115,166040,166041],{"class":125}," get_info()\n",[115,166043,166044,166046],{"class":117,"line":1318},[115,166045,30416],{"class":174},[115,166047,76575],{"class":125},[115,166049,166050,166052,166054,166056],{"class":117,"line":1330},[115,166051,30416],{"class":174},[115,166053,126],{"class":125},[115,166055,103097],{"class":174},[115,166057,166058],{"class":125},"(result))\n",[14,166060,166061],{},"可以直接解包：",[106,166063,166065],{"className":30379,"code":166064,"language":30381,"meta":22,"style":22},"name, age, score = get_info()\nprint(name, age, score)\n",[112,166066,166067,166076],{"__ignoreMap":22},[115,166068,166069,166072,166074],{"class":117,"line":118},[115,166070,166071],{"class":125},"name, age, score ",[115,166073,171],{"class":121},[115,166075,166041],{"class":125},[115,166077,166078,166080],{"class":117,"line":37},[115,166079,30416],{"class":174},[115,166081,166082],{"class":125},"(name, age, score)\n",[14,166084,166085],{},"返回多个值适合函数需要同时给出多个结果时使用。",[57,166087,166089],{"id":166088},"_72-位置参数","7.2 位置参数",[14,166091,166092],{},"位置参数按顺序传递。",[106,166094,166096],{"className":30379,"code":166095,"language":30381,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[112,166097,166098,166106,166134,166138,166142],{"__ignoreMap":22},[115,166099,166100,166102,166104],{"class":117,"line":118},[115,166101,31948],{"class":121},[115,166103,149362],{"class":1963},[115,166105,149365],{"class":125},[115,166107,166108,166110,166112,166114,166116,166118,166120,166122,166124,166126,166128,166130,166132],{"class":117,"line":37},[115,166109,31300],{"class":174},[115,166111,126],{"class":125},[115,166113,178],{"class":121},[115,166115,149376],{"class":230},[115,166117,1021],{"class":174},[115,166119,79800],{"class":125},[115,166121,1071],{"class":174},[115,166123,149385],{"class":230},[115,166125,1021],{"class":174},[115,166127,70211],{"class":125},[115,166129,1071],{"class":174},[115,166131,149394],{"class":230},[115,166133,132],{"class":125},[115,166135,166136],{"class":117,"line":1180},[115,166137,2400],{"emptyLinePlaceholder":42},[115,166139,166140],{"class":117,"line":1195},[115,166141,2400],{"emptyLinePlaceholder":42},[115,166143,166144,166147,166149,166151,166153],{"class":117,"line":1201},[115,166145,166146],{"class":125},"introduce(",[115,166148,149878],{"class":230},[115,166150,12436],{"class":125},[115,166152,775],{"class":174},[115,166154,132],{"class":125},[14,166156,166157],{},"顺序错了就会得到错误含义：",[106,166159,166161],{"className":30379,"code":166160,"language":30381,"meta":22,"style":22},"introduce(18, \"小明\")\n",[112,166162,166163],{"__ignoreMap":22},[115,166164,166165,166167,166169,166171,166173],{"class":117,"line":118},[115,166166,166146],{"class":125},[115,166168,775],{"class":174},[115,166170,12436],{"class":125},[115,166172,149878],{"class":230},[115,166174,132],{"class":125},[57,166176,166178],{"id":166177},"_73-关键字参数","7.3 关键字参数",[14,166180,166181],{},"关键字参数按参数名传递。",[106,166183,166185],{"className":30379,"code":166184,"language":30381,"meta":22,"style":22},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[112,166186,166187,166207],{"__ignoreMap":22},[115,166188,166189,166191,166193,166195,166197,166199,166201,166203,166205],{"class":117,"line":118},[115,166190,166146],{"class":125},[115,166192,79800],{"class":5217},[115,166194,171],{"class":121},[115,166196,149878],{"class":230},[115,166198,12436],{"class":125},[115,166200,70211],{"class":5217},[115,166202,171],{"class":121},[115,166204,775],{"class":174},[115,166206,132],{"class":125},[115,166208,166209,166211,166213,166215,166217,166219,166221,166223,166225],{"class":117,"line":37},[115,166210,166146],{"class":125},[115,166212,70211],{"class":5217},[115,166214,171],{"class":121},[115,166216,775],{"class":174},[115,166218,12436],{"class":125},[115,166220,79800],{"class":5217},[115,166222,171],{"class":121},[115,166224,149878],{"class":230},[115,166226,132],{"class":125},[14,166228,117924],{},[69,166230,166231,166234],{},[72,166232,166233],{},"顺序不容易错。",[72,166235,166236],{},"调用时可读性更强。",[57,166238,166240],{"id":166239},"_74-默认参数","7.4 默认参数",[14,166242,166243],{},"默认参数给参数设置默认值。",[106,166245,166247],{"className":30379,"code":166246,"language":30381,"meta":22,"style":22},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[112,166248,166249,166265,166295,166299,166303,166313],{"__ignoreMap":22},[115,166250,166251,166253,166255,166258,166260,166263],{"class":117,"line":118},[115,166252,31948],{"class":121},[115,166254,122083],{"class":1963},[115,166256,166257],{"class":125},"(host, port",[115,166259,171],{"class":121},[115,166261,166262],{"class":174},"3306",[115,166264,30787],{"class":125},[115,166266,166267,166269,166271,166273,166276,166278,166280,166282,166284,166286,166289,166291,166293],{"class":117,"line":37},[115,166268,31300],{"class":174},[115,166270,126],{"class":125},[115,166272,178],{"class":121},[115,166274,166275],{"class":230},"\"连接",[115,166277,1021],{"class":174},[115,166279,27396],{"class":125},[115,166281,1071],{"class":174},[115,166283,984],{"class":230},[115,166285,1021],{"class":174},[115,166287,166288],{"class":125},"port",[115,166290,1071],{"class":174},[115,166292,376],{"class":230},[115,166294,132],{"class":125},[115,166296,166297],{"class":117,"line":1180},[115,166298,2400],{"emptyLinePlaceholder":42},[115,166300,166301],{"class":117,"line":1195},[115,166302,2400],{"emptyLinePlaceholder":42},[115,166304,166305,166308,166311],{"class":117,"line":1201},[115,166306,166307],{"class":125},"connect(",[115,166309,166310],{"class":230},"\"localhost\"",[115,166312,132],{"class":125},[115,166314,166315,166317,166319,166321,166324],{"class":117,"line":1215},[115,166316,166307],{"class":125},[115,166318,166310],{"class":230},[115,166320,12436],{"class":125},[115,166322,166323],{"class":174},"6379",[115,166325,132],{"class":125},[14,166327,166328],{},"注意：默认参数必须放在非默认参数后面。",[14,166330,166331],{},"错误：",[106,166333,166335],{"className":30379,"code":166334,"language":30381,"meta":22,"style":22},"def connect(port=3306, host):\n    pass\n",[112,166336,166337,166353],{"__ignoreMap":22},[115,166338,166339,166341,166343,166346,166348,166350],{"class":117,"line":118},[115,166340,31948],{"class":121},[115,166342,122083],{"class":1963},[115,166344,166345],{"class":125},"(port",[115,166347,171],{"class":121},[115,166349,166262],{"class":174},[115,166351,166352],{"class":125},", host):\n",[115,166354,166355],{"class":117,"line":37},[115,166356,149527],{"class":121},[14,166358,166359],{},"正确：",[106,166361,166363],{"className":30379,"code":166362,"language":30381,"meta":22,"style":22},"def connect(host, port=3306):\n    pass\n",[112,166364,166365,166379],{"__ignoreMap":22},[115,166366,166367,166369,166371,166373,166375,166377],{"class":117,"line":118},[115,166368,31948],{"class":121},[115,166370,122083],{"class":1963},[115,166372,166257],{"class":125},[115,166374,171],{"class":121},[115,166376,166262],{"class":174},[115,166378,30787],{"class":125},[115,166380,166381],{"class":117,"line":37},[115,166382,149527],{"class":121},[57,166384,166386],{"id":166385},"_75-默认参数的坑","7.5 默认参数的坑",[14,166388,166389],{},"不要使用可变对象作为默认参数。",[14,166391,157613],{},[106,166393,166395],{"className":30379,"code":166394,"language":30381,"meta":22,"style":22},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[112,166396,166397,166412,166417,166424,166428,166432,166443],{"__ignoreMap":22},[115,166398,166399,166401,166404,166407,166409],{"class":117,"line":118},[115,166400,31948],{"class":121},[115,166402,166403],{"class":1963}," add_item",[115,166405,166406],{"class":125},"(item, items",[115,166408,171],{"class":121},[115,166410,166411],{"class":125},"[]):\n",[115,166413,166414],{"class":117,"line":37},[115,166415,166416],{"class":125},"    items.append(item)\n",[115,166418,166419,166421],{"class":117,"line":1180},[115,166420,4090],{"class":121},[115,166422,166423],{"class":125}," items\n",[115,166425,166426],{"class":117,"line":1195},[115,166427,2400],{"emptyLinePlaceholder":42},[115,166429,166430],{"class":117,"line":1201},[115,166431,2400],{"emptyLinePlaceholder":42},[115,166433,166434,166436,166439,166441],{"class":117,"line":1215},[115,166435,30416],{"class":174},[115,166437,166438],{"class":125},"(add_item(",[115,166440,165315],{"class":230},[115,166442,30498],{"class":125},[115,166444,166445,166447,166449,166452],{"class":117,"line":1221},[115,166446,30416],{"class":174},[115,166448,166438],{"class":125},[115,166450,166451],{"class":230},"\"b\"",[115,166453,30498],{"class":125},[14,166455,166456],{},"第二次调用会复用第一次的列表。",[14,166458,155878],{},[106,166460,166462],{"className":30379,"code":166461,"language":30381,"meta":22,"style":22},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[112,166463,166464,166478,166491,166500,166504],{"__ignoreMap":22},[115,166465,166466,166468,166470,166472,166474,166476],{"class":117,"line":118},[115,166467,31948],{"class":121},[115,166469,166403],{"class":1963},[115,166471,166406],{"class":125},[115,166473,171],{"class":121},[115,166475,95676],{"class":174},[115,166477,30787],{"class":125},[115,166479,166480,166482,166485,166487,166489],{"class":117,"line":37},[115,166481,3101],{"class":121},[115,166483,166484],{"class":125}," items ",[115,166486,38928],{"class":121},[115,166488,38934],{"class":174},[115,166490,3739],{"class":125},[115,166492,166493,166496,166498],{"class":117,"line":1180},[115,166494,166495],{"class":125},"        items ",[115,166497,171],{"class":121},[115,166499,51828],{"class":125},[115,166501,166502],{"class":117,"line":1195},[115,166503,166416],{"class":125},[115,166505,166506,166508],{"class":117,"line":1201},[115,166507,4090],{"class":121},[115,166509,166423],{"class":125},[57,166511,166513],{"id":166512},"_76-不定长参数","7.6 不定长参数",[86,166515,166517],{"id":166516},"_761-args","7.6.1 *args",[14,166519,166520,166523],{},[112,166521,166522],{},"*args"," 接收任意数量的位置参数，得到元组。",[106,166525,166527],{"className":30379,"code":166526,"language":30381,"meta":22,"style":22},"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",[112,166528,166529,166542,166550,166561,166570,166576,166580,166584,166603],{"__ignoreMap":22},[115,166530,166531,166533,166535,166537,166539],{"class":117,"line":118},[115,166532,31948],{"class":121},[115,166534,5210],{"class":1963},[115,166536,126],{"class":125},[115,166538,580],{"class":121},[115,166540,166541],{"class":125},"args):\n",[115,166543,166544,166546,166548],{"class":117,"line":37},[115,166545,159297],{"class":125},[115,166547,171],{"class":121},[115,166549,47334],{"class":174},[115,166551,166552,166554,166556,166558],{"class":117,"line":1180},[115,166553,3201],{"class":121},[115,166555,156170],{"class":125},[115,166557,26044],{"class":121},[115,166559,166560],{"class":125}," args:\n",[115,166562,166563,166565,166567],{"class":117,"line":1195},[115,166564,159972],{"class":125},[115,166566,9478],{"class":121},[115,166568,166569],{"class":125}," num\n",[115,166571,166572,166574],{"class":117,"line":1201},[115,166573,4090],{"class":121},[115,166575,162277],{"class":125},[115,166577,166578],{"class":117,"line":1215},[115,166579,2400],{"emptyLinePlaceholder":42},[115,166581,166582],{"class":117,"line":1221},[115,166583,2400],{"emptyLinePlaceholder":42},[115,166585,166586,166588,166591,166593,166595,166597,166599,166601],{"class":117,"line":1312},[115,166587,30416],{"class":174},[115,166589,166590],{"class":125},"(add(",[115,166592,343],{"class":174},[115,166594,12436],{"class":125},[115,166596,203],{"class":174},[115,166598,12436],{"class":125},[115,166600,197],{"class":174},[115,166602,30498],{"class":125},[115,166604,166605,166607,166609,166611,166613,166615,166617,166619,166621,166623,166625,166627],{"class":117,"line":1318},[115,166606,30416],{"class":174},[115,166608,166590],{"class":125},[115,166610,343],{"class":174},[115,166612,12436],{"class":125},[115,166614,203],{"class":174},[115,166616,12436],{"class":125},[115,166618,197],{"class":174},[115,166620,12436],{"class":125},[115,166622,418],{"class":174},[115,166624,12436],{"class":125},[115,166626,444],{"class":174},[115,166628,30498],{"class":125},[86,166630,166632],{"id":166631},"_762-kwargs","7.6.2 **kwargs",[14,166634,166635,166638],{},[112,166636,166637],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[106,166640,166642],{"className":30379,"code":166641,"language":30381,"meta":22,"style":22},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[112,166643,166644,166657,166668,166674,166678,166682],{"__ignoreMap":22},[115,166645,166646,166648,166650,166652,166654],{"class":117,"line":118},[115,166647,31948],{"class":121},[115,166649,161935],{"class":1963},[115,166651,126],{"class":125},[115,166653,10662],{"class":121},[115,166655,166656],{"class":125},"kwargs):\n",[115,166658,166659,166661,166663,166665],{"class":117,"line":37},[115,166660,3201],{"class":121},[115,166662,164775],{"class":125},[115,166664,26044],{"class":121},[115,166666,166667],{"class":125}," kwargs.items():\n",[115,166669,166670,166672],{"class":117,"line":1180},[115,166671,32452],{"class":174},[115,166673,164787],{"class":125},[115,166675,166676],{"class":117,"line":1195},[115,166677,2400],{"emptyLinePlaceholder":42},[115,166679,166680],{"class":117,"line":1201},[115,166681,2400],{"emptyLinePlaceholder":42},[115,166683,166684,166686,166688,166690,166692,166694,166696,166698,166700,166702,166704,166706,166708],{"class":117,"line":1215},[115,166685,162000],{"class":125},[115,166687,79800],{"class":5217},[115,166689,171],{"class":121},[115,166691,149878],{"class":230},[115,166693,12436],{"class":125},[115,166695,70211],{"class":5217},[115,166697,171],{"class":121},[115,166699,775],{"class":174},[115,166701,12436],{"class":125},[115,166703,70262],{"class":5217},[115,166705,171],{"class":121},[115,166707,69259],{"class":230},[115,166709,132],{"class":125},[57,166711,166713],{"id":166712},"_77-参数解包","7.7 参数解包",[14,166715,166716],{},"列表或元组解包为位置参数：",[106,166718,166720],{"className":30379,"code":166719,"language":30381,"meta":22,"style":22},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[112,166721,166722,166731,166746,166750,166754,166774],{"__ignoreMap":22},[115,166723,166724,166726,166728],{"class":117,"line":118},[115,166725,31948],{"class":121},[115,166727,5210],{"class":1963},[115,166729,166730],{"class":125},"(a, b, c):\n",[115,166732,166733,166735,166737,166739,166741,166743],{"class":117,"line":37},[115,166734,4090],{"class":121},[115,166736,10870],{"class":125},[115,166738,606],{"class":121},[115,166740,10883],{"class":125},[115,166742,606],{"class":121},[115,166744,166745],{"class":125}," c\n",[115,166747,166748],{"class":117,"line":1180},[115,166749,2400],{"emptyLinePlaceholder":42},[115,166751,166752],{"class":117,"line":1195},[115,166753,2400],{"emptyLinePlaceholder":42},[115,166755,166756,166758,166760,166762,166764,166766,166768,166770,166772],{"class":117,"line":1201},[115,166757,164090],{"class":125},[115,166759,171],{"class":121},[115,166761,52216],{"class":125},[115,166763,343],{"class":174},[115,166765,12436],{"class":125},[115,166767,203],{"class":174},[115,166769,12436],{"class":125},[115,166771,197],{"class":174},[115,166773,33247],{"class":125},[115,166775,166776,166778,166780,166782],{"class":117,"line":1215},[115,166777,30416],{"class":174},[115,166779,166590],{"class":125},[115,166781,580],{"class":121},[115,166783,166784],{"class":125},"nums))\n",[14,166786,166787],{},"字典解包为关键字参数：",[106,166789,166791],{"className":30379,"code":166790,"language":30381,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[112,166792,166793,166801,166827,166831,166835,166859],{"__ignoreMap":22},[115,166794,166795,166797,166799],{"class":117,"line":118},[115,166796,31948],{"class":121},[115,166798,149362],{"class":1963},[115,166800,149365],{"class":125},[115,166802,166803,166805,166807,166809,166811,166813,166815,166817,166819,166821,166823,166825],{"class":117,"line":37},[115,166804,31300],{"class":174},[115,166806,126],{"class":125},[115,166808,178],{"class":121},[115,166810,376],{"class":230},[115,166812,1021],{"class":174},[115,166814,79800],{"class":125},[115,166816,1071],{"class":174},[115,166818,4448],{"class":174},[115,166820,70211],{"class":125},[115,166822,1071],{"class":174},[115,166824,376],{"class":230},[115,166826,132],{"class":125},[115,166828,166829],{"class":117,"line":1180},[115,166830,2400],{"emptyLinePlaceholder":42},[115,166832,166833],{"class":117,"line":1195},[115,166834,2400],{"emptyLinePlaceholder":42},[115,166836,166837,166839,166841,166843,166845,166847,166849,166851,166853,166855,166857],{"class":117,"line":1201},[115,166838,116304],{"class":125},[115,166840,171],{"class":121},[115,166842,4448],{"class":125},[115,166844,62669],{"class":230},[115,166846,51427],{"class":125},[115,166848,149878],{"class":230},[115,166850,12436],{"class":125},[115,166852,69114],{"class":230},[115,166854,51427],{"class":125},[115,166856,775],{"class":174},[115,166858,1565],{"class":125},[115,166860,166861,166863,166865],{"class":117,"line":1215},[115,166862,166146],{"class":125},[115,166864,10662],{"class":121},[115,166866,166867],{"class":125},"info)\n",[57,166869,166871],{"id":166870},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166873,166874,166877],{},[112,166875,166876],{},"lambda"," 用于定义简单匿名函数。",[106,166879,166881],{"className":30379,"code":166880,"language":30381,"meta":22,"style":22},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[112,166882,166883,166900],{"__ignoreMap":22},[115,166884,166885,166888,166890,166893,166896,166898],{"class":117,"line":118},[115,166886,166887],{"class":125},"add ",[115,166889,171],{"class":121},[115,166891,166892],{"class":121}," lambda",[115,166894,166895],{"class":125}," a, b: a ",[115,166897,606],{"class":121},[115,166899,151094],{"class":125},[115,166901,166902,166904,166906,166908,166910,166912],{"class":117,"line":37},[115,166903,30416],{"class":174},[115,166905,166590],{"class":125},[115,166907,343],{"class":174},[115,166909,12436],{"class":125},[115,166911,203],{"class":174},[115,166913,30498],{"class":125},[14,166915,166916],{},"常和排序、过滤等函数一起使用。",[14,166918,166919],{},"按分数排序：",[106,166921,166923],{"className":30379,"code":166922,"language":30381,"meta":22,"style":22},"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",[112,166924,166925,166933,166953,166973,166993,166997,167001,167024],{"__ignoreMap":22},[115,166926,166927,166929,166931],{"class":117,"line":118},[115,166928,159706],{"class":125},[115,166930,171],{"class":121},[115,166932,55437],{"class":125},[115,166934,166935,166937,166939,166941,166943,166945,166947,166949,166951],{"class":117,"line":37},[115,166936,148375],{"class":125},[115,166938,62669],{"class":230},[115,166940,51427],{"class":125},[115,166942,149878],{"class":230},[115,166944,12436],{"class":125},[115,166946,151462],{"class":230},[115,166948,51427],{"class":125},[115,166950,1114],{"class":174},[115,166952,4930],{"class":125},[115,166954,166955,166957,166959,166961,166963,166965,166967,166969,166971],{"class":117,"line":1180},[115,166956,148375],{"class":125},[115,166958,62669],{"class":230},[115,166960,51427],{"class":125},[115,166962,150926],{"class":230},[115,166964,12436],{"class":125},[115,166966,151462],{"class":230},[115,166968,51427],{"class":125},[115,166970,936],{"class":174},[115,166972,4930],{"class":125},[115,166974,166975,166977,166979,166981,166983,166985,166987,166989,166991],{"class":117,"line":1195},[115,166976,148375],{"class":125},[115,166978,62669],{"class":230},[115,166980,51427],{"class":125},[115,166982,159721],{"class":230},[115,166984,12436],{"class":125},[115,166986,151462],{"class":230},[115,166988,51427],{"class":125},[115,166990,531],{"class":174},[115,166992,4930],{"class":125},[115,166994,166995],{"class":117,"line":1201},[115,166996,33247],{"class":125},[115,166998,166999],{"class":117,"line":1215},[115,167000,2400],{"emptyLinePlaceholder":42},[115,167002,167003,167006,167008,167010,167012,167014,167016,167018,167020,167022],{"class":117,"line":1221},[115,167004,167005],{"class":125},"students.sort(",[115,167007,153936],{"class":5217},[115,167009,153939],{"class":121},[115,167011,153942],{"class":125},[115,167013,151462],{"class":230},[115,167015,112192],{"class":125},[115,167017,163518],{"class":5217},[115,167019,171],{"class":121},[115,167021,31477],{"class":174},[115,167023,132],{"class":125},[115,167025,167026,167028],{"class":117,"line":1312},[115,167027,30416],{"class":174},[115,167029,164985],{"class":125},[14,167031,167032,167033,167035],{},"如果逻辑复杂，不要硬写 ",[112,167034,166876],{},"，定义普通函数更清晰。",[57,167037,167039],{"id":167038},"_79-函数作为参数","7.9 函数作为参数",[14,167041,167042],{},"函数可以作为参数传给另一个函数。",[106,167044,167046],{"className":30379,"code":167045,"language":30381,"meta":22,"style":22},"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",[112,167047,167048,167056,167066,167070,167074,167084,167091,167095,167099],{"__ignoreMap":22},[115,167049,167050,167052,167054],{"class":117,"line":118},[115,167051,31948],{"class":121},[115,167053,5210],{"class":1963},[115,167055,151083],{"class":125},[115,167057,167058,167060,167062,167064],{"class":117,"line":37},[115,167059,4090],{"class":121},[115,167061,10870],{"class":125},[115,167063,606],{"class":121},[115,167065,151094],{"class":125},[115,167067,167068],{"class":117,"line":1180},[115,167069,2400],{"emptyLinePlaceholder":42},[115,167071,167072],{"class":117,"line":1195},[115,167073,2400],{"emptyLinePlaceholder":42},[115,167075,167076,167078,167081],{"class":117,"line":1201},[115,167077,31948],{"class":121},[115,167079,167080],{"class":1963}," calculate",[115,167082,167083],{"class":125},"(a, b, func):\n",[115,167085,167086,167088],{"class":117,"line":1215},[115,167087,4090],{"class":121},[115,167089,167090],{"class":125}," func(a, b)\n",[115,167092,167093],{"class":117,"line":1221},[115,167094,2400],{"emptyLinePlaceholder":42},[115,167096,167097],{"class":117,"line":1312},[115,167098,2400],{"emptyLinePlaceholder":42},[115,167100,167101,167103,167106,167108,167110,167112],{"class":117,"line":1318},[115,167102,30416],{"class":174},[115,167104,167105],{"class":125},"(calculate(",[115,167107,571],{"class":174},[115,167109,12436],{"class":125},[115,167111,825],{"class":174},[115,167113,167114],{"class":125},", add))\n",[14,167116,167117],{},"这种思想在排序、回调、框架中经常出现。",[57,167119,167121],{"id":167120},"_710-mapfiltersorted","7.10 map、filter、sorted",[86,167123,167125],{"id":167124},"_7101-map","7.10.1 map",[14,167127,167128,167130],{},[112,167129,74034],{}," 对每个元素执行函数。",[106,167132,167134],{"className":30379,"code":167133,"language":30381,"meta":22,"style":22},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[112,167135,167136,167160,167183],{"__ignoreMap":22},[115,167137,167138,167140,167142,167144,167146,167148,167150,167152,167154,167156,167158],{"class":117,"line":118},[115,167139,164090],{"class":125},[115,167141,171],{"class":121},[115,167143,52216],{"class":125},[115,167145,343],{"class":174},[115,167147,12436],{"class":125},[115,167149,203],{"class":174},[115,167151,12436],{"class":125},[115,167153,197],{"class":174},[115,167155,12436],{"class":125},[115,167157,418],{"class":174},[115,167159,33247],{"class":125},[115,167161,167162,167164,167166,167169,167171,167173,167176,167178,167180],{"class":117,"line":37},[115,167163,161296],{"class":125},[115,167165,171],{"class":121},[115,167167,167168],{"class":174}," map",[115,167170,126],{"class":125},[115,167172,166876],{"class":121},[115,167174,167175],{"class":125}," x: x ",[115,167177,580],{"class":121},[115,167179,14756],{"class":174},[115,167181,167182],{"class":125},", nums)\n",[115,167184,167185,167187,167189,167191],{"class":117,"line":1180},[115,167186,30416],{"class":174},[115,167188,126],{"class":125},[115,167190,154060],{"class":174},[115,167192,166058],{"class":125},[86,167194,167196],{"id":167195},"_7102-filter","7.10.2 filter",[14,167198,167199,167201],{},[112,167200,80041],{}," 保留满足条件的元素。",[106,167203,167205],{"className":30379,"code":167204,"language":30381,"meta":22,"style":22},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[112,167206,167207,167235,167260],{"__ignoreMap":22},[115,167208,167209,167211,167213,167215,167217,167219,167221,167223,167225,167227,167229,167231,167233],{"class":117,"line":118},[115,167210,164090],{"class":125},[115,167212,171],{"class":121},[115,167214,52216],{"class":125},[115,167216,343],{"class":174},[115,167218,12436],{"class":125},[115,167220,203],{"class":174},[115,167222,12436],{"class":125},[115,167224,197],{"class":174},[115,167226,12436],{"class":125},[115,167228,418],{"class":174},[115,167230,12436],{"class":125},[115,167232,444],{"class":174},[115,167234,33247],{"class":125},[115,167236,167237,167239,167241,167244,167246,167248,167250,167252,167254,167256,167258],{"class":117,"line":37},[115,167238,161296],{"class":125},[115,167240,171],{"class":121},[115,167242,167243],{"class":174}," filter",[115,167245,126],{"class":125},[115,167247,166876],{"class":121},[115,167249,167175],{"class":125},[115,167251,453],{"class":121},[115,167253,14756],{"class":174},[115,167255,101549],{"class":121},[115,167257,4093],{"class":174},[115,167259,167182],{"class":125},[115,167261,167262,167264,167266,167268],{"class":117,"line":1180},[115,167263,30416],{"class":174},[115,167265,126],{"class":125},[115,167267,154060],{"class":174},[115,167269,166058],{"class":125},[86,167271,167273],{"id":167272},"_7103-sorted","7.10.3 sorted",[14,167275,167276,167278],{},[112,167277,165226],{}," 返回排序后的新列表。",[106,167280,167282],{"className":30379,"code":167281,"language":30381,"meta":22,"style":22},"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",[112,167283,167284,167292,167312,167332,167352,167356,167360,167389],{"__ignoreMap":22},[115,167285,167286,167288,167290],{"class":117,"line":118},[115,167287,159706],{"class":125},[115,167289,171],{"class":121},[115,167291,55437],{"class":125},[115,167293,167294,167296,167298,167300,167302,167304,167306,167308,167310],{"class":117,"line":37},[115,167295,148375],{"class":125},[115,167297,62669],{"class":230},[115,167299,51427],{"class":125},[115,167301,149878],{"class":230},[115,167303,12436],{"class":125},[115,167305,151462],{"class":230},[115,167307,51427],{"class":125},[115,167309,1114],{"class":174},[115,167311,4930],{"class":125},[115,167313,167314,167316,167318,167320,167322,167324,167326,167328,167330],{"class":117,"line":1180},[115,167315,148375],{"class":125},[115,167317,62669],{"class":230},[115,167319,51427],{"class":125},[115,167321,150926],{"class":230},[115,167323,12436],{"class":125},[115,167325,151462],{"class":230},[115,167327,51427],{"class":125},[115,167329,936],{"class":174},[115,167331,4930],{"class":125},[115,167333,167334,167336,167338,167340,167342,167344,167346,167348,167350],{"class":117,"line":1195},[115,167335,148375],{"class":125},[115,167337,62669],{"class":230},[115,167339,51427],{"class":125},[115,167341,159721],{"class":230},[115,167343,12436],{"class":125},[115,167345,151462],{"class":230},[115,167347,51427],{"class":125},[115,167349,531],{"class":174},[115,167351,4930],{"class":125},[115,167353,167354],{"class":117,"line":1201},[115,167355,33247],{"class":125},[115,167357,167358],{"class":117,"line":1215},[115,167359,2400],{"emptyLinePlaceholder":42},[115,167361,167362,167364,167366,167368,167371,167373,167375,167377,167379,167381,167383,167385,167387],{"class":117,"line":1221},[115,167363,161296],{"class":125},[115,167365,171],{"class":121},[115,167367,163594],{"class":174},[115,167369,167370],{"class":125},"(students, ",[115,167372,153936],{"class":5217},[115,167374,153939],{"class":121},[115,167376,153942],{"class":125},[115,167378,151462],{"class":230},[115,167380,112192],{"class":125},[115,167382,163518],{"class":5217},[115,167384,171],{"class":121},[115,167386,31477],{"class":174},[115,167388,132],{"class":125},[115,167390,167391,167393],{"class":117,"line":1312},[115,167392,30416],{"class":174},[115,167394,76575],{"class":125},[57,167396,167398],{"id":167397},"_711-闭包入门","7.11 闭包入门",[14,167400,167401],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[106,167403,167405],{"className":30379,"code":167404,"language":30381,"meta":22,"style":22},"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",[112,167406,167407,167417,167427,167438,167442,167449,167453,167457,167471],{"__ignoreMap":22},[115,167408,167409,167411,167414],{"class":117,"line":118},[115,167410,31948],{"class":121},[115,167412,167413],{"class":1963}," outer",[115,167415,167416],{"class":125},"(base):\n",[115,167418,167419,167421,167424],{"class":117,"line":37},[115,167420,30802],{"class":121},[115,167422,167423],{"class":1963}," inner",[115,167425,167426],{"class":125},"(num):\n",[115,167428,167429,167431,167434,167436],{"class":117,"line":1180},[115,167430,14753],{"class":121},[115,167432,167433],{"class":125}," base ",[115,167435,606],{"class":121},[115,167437,166569],{"class":125},[115,167439,167440],{"class":117,"line":1195},[115,167441,2400],{"emptyLinePlaceholder":42},[115,167443,167444,167446],{"class":117,"line":1201},[115,167445,4090],{"class":121},[115,167447,167448],{"class":125}," inner\n",[115,167450,167451],{"class":117,"line":1215},[115,167452,2400],{"emptyLinePlaceholder":42},[115,167454,167455],{"class":117,"line":1221},[115,167456,2400],{"emptyLinePlaceholder":42},[115,167458,167459,167462,167464,167467,167469],{"class":117,"line":1312},[115,167460,167461],{"class":125},"add_10 ",[115,167463,171],{"class":121},[115,167465,167466],{"class":125}," outer(",[115,167468,571],{"class":174},[115,167470,132],{"class":125},[115,167472,167473,167475,167478,167480],{"class":117,"line":1318},[115,167474,30416],{"class":174},[115,167476,167477],{"class":125},"(add_10(",[115,167479,444],{"class":174},[115,167481,30498],{"class":125},[14,167483,167484],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[57,167486,167488],{"id":167487},"_712-装饰器入门","7.12 装饰器入门",[14,167490,167491],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[106,167493,167495],{"className":30379,"code":167494,"language":30381,"meta":22,"style":22},"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",[112,167496,167497,167506,167515,167526,167531,167542,167546,167553,167557,167561,167566,167574,167584,167588,167592],{"__ignoreMap":22},[115,167498,167499,167501,167503],{"class":117,"line":118},[115,167500,31948],{"class":121},[115,167502,87181],{"class":1963},[115,167504,167505],{"class":125},"(func):\n",[115,167507,167508,167510,167513],{"class":117,"line":37},[115,167509,30802],{"class":121},[115,167511,167512],{"class":1963}," wrapper",[115,167514,31954],{"class":125},[115,167516,167517,167519,167521,167524],{"class":117,"line":1180},[115,167518,32452],{"class":174},[115,167520,126],{"class":125},[115,167522,167523],{"class":230},"\"函数开始执行\"",[115,167525,132],{"class":125},[115,167527,167528],{"class":117,"line":1195},[115,167529,167530],{"class":125},"        func()\n",[115,167532,167533,167535,167537,167540],{"class":117,"line":1201},[115,167534,32452],{"class":174},[115,167536,126],{"class":125},[115,167538,167539],{"class":230},"\"函数执行结束\"",[115,167541,132],{"class":125},[115,167543,167544],{"class":117,"line":1215},[115,167545,2400],{"emptyLinePlaceholder":42},[115,167547,167548,167550],{"class":117,"line":1221},[115,167549,4090],{"class":121},[115,167551,167552],{"class":125}," wrapper\n",[115,167554,167555],{"class":117,"line":1312},[115,167556,2400],{"emptyLinePlaceholder":42},[115,167558,167559],{"class":117,"line":1318},[115,167560,2400],{"emptyLinePlaceholder":42},[115,167562,167563],{"class":117,"line":1330},[115,167564,167565],{"class":1963},"@log\n",[115,167567,167568,167570,167572],{"class":117,"line":1612},[115,167569,31948],{"class":121},[115,167571,160986],{"class":1963},[115,167573,31954],{"class":125},[115,167575,167576,167578,167580,167582],{"class":117,"line":1617},[115,167577,31300],{"class":174},[115,167579,126],{"class":125},[115,167581,5845],{"class":230},[115,167583,132],{"class":125},[115,167585,167586],{"class":117,"line":1623},[115,167587,2400],{"emptyLinePlaceholder":42},[115,167589,167590],{"class":117,"line":1628},[115,167591,2400],{"emptyLinePlaceholder":42},[115,167593,167594],{"class":117,"line":1642},[115,167595,161021],{"class":125},[14,167597,158264],{},[106,167599,167601],{"className":30379,"code":167600,"language":30381,"meta":22,"style":22},"say_hello = log(say_hello)\n",[112,167602,167603],{"__ignoreMap":22},[115,167604,167605,167608,167610],{"class":117,"line":118},[115,167606,167607],{"class":125},"say_hello ",[115,167609,171],{"class":121},[115,167611,167612],{"class":125}," log(say_hello)\n",[14,167614,167615],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[57,167617,167619],{"id":167618},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[106,167621,167623],{"className":30379,"code":167622,"language":30381,"meta":22,"style":22},"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",[112,167624,167625,167633,167650,167660,167679,167689,167696,167700,167706,167710,167714,167718,167726,167736,167740,167744],{"__ignoreMap":22},[115,167626,167627,167629,167631],{"class":117,"line":118},[115,167628,31948],{"class":121},[115,167630,87181],{"class":1963},[115,167632,167505],{"class":125},[115,167634,167635,167637,167639,167641,167643,167646,167648],{"class":117,"line":37},[115,167636,30802],{"class":121},[115,167638,167512],{"class":1963},[115,167640,126],{"class":125},[115,167642,580],{"class":121},[115,167644,167645],{"class":125},"args, ",[115,167647,10662],{"class":121},[115,167649,166656],{"class":125},[115,167651,167652,167654,167656,167658],{"class":117,"line":1180},[115,167653,32452],{"class":174},[115,167655,126],{"class":125},[115,167657,167523],{"class":230},[115,167659,132],{"class":125},[115,167661,167662,167665,167667,167670,167672,167674,167676],{"class":117,"line":1195},[115,167663,167664],{"class":125},"        result ",[115,167666,171],{"class":121},[115,167668,167669],{"class":125}," func(",[115,167671,580],{"class":121},[115,167673,167645],{"class":125},[115,167675,10662],{"class":121},[115,167677,167678],{"class":125},"kwargs)\n",[115,167680,167681,167683,167685,167687],{"class":117,"line":1201},[115,167682,32452],{"class":174},[115,167684,126],{"class":125},[115,167686,167539],{"class":230},[115,167688,132],{"class":125},[115,167690,167691,167693],{"class":117,"line":1215},[115,167692,14753],{"class":121},[115,167694,167695],{"class":125}," result\n",[115,167697,167698],{"class":117,"line":1221},[115,167699,2400],{"emptyLinePlaceholder":42},[115,167701,167702,167704],{"class":117,"line":1312},[115,167703,4090],{"class":121},[115,167705,167552],{"class":125},[115,167707,167708],{"class":117,"line":1318},[115,167709,2400],{"emptyLinePlaceholder":42},[115,167711,167712],{"class":117,"line":1330},[115,167713,2400],{"emptyLinePlaceholder":42},[115,167715,167716],{"class":117,"line":1612},[115,167717,167565],{"class":1963},[115,167719,167720,167722,167724],{"class":117,"line":1617},[115,167721,31948],{"class":121},[115,167723,5210],{"class":1963},[115,167725,151083],{"class":125},[115,167727,167728,167730,167732,167734],{"class":117,"line":1623},[115,167729,4090],{"class":121},[115,167731,10870],{"class":125},[115,167733,606],{"class":121},[115,167735,151094],{"class":125},[115,167737,167738],{"class":117,"line":1628},[115,167739,2400],{"emptyLinePlaceholder":42},[115,167741,167742],{"class":117,"line":1642},[115,167743,2400],{"emptyLinePlaceholder":42},[115,167745,167746,167748,167750,167752,167754,167756],{"class":117,"line":1647},[115,167747,30416],{"class":174},[115,167749,166590],{"class":125},[115,167751,571],{"class":174},[115,167753,12436],{"class":125},[115,167755,825],{"class":174},[115,167757,30498],{"class":125},[14,167759,167760,167761,101008,167763,167765],{},"这个写法使用 ",[112,167762,166522],{},[112,167764,166637],{}," 接收原函数的所有参数。",[57,167767,167769],{"id":167768},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167771,123282],{},[69,167773,167774,167777,167780],{},[72,167775,167776],{},"给定一组学生数据。",[72,167778,167779],{},"封装函数，根据传入规则筛选学生。",[72,167781,167782],{},"筛选及格、优秀、未成年学生。",[14,167784,10036],{},[106,167786,167788],{"className":30379,"code":167787,"language":30381,"meta":22,"style":22},"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",[112,167789,167790,167798,167826,167854,167882,167886,167890,167894,167904,167912,167922,167929,167934,167940,167944,167948,167972,167995,168018,168022,168029,168036],{"__ignoreMap":22},[115,167791,167792,167794,167796],{"class":117,"line":118},[115,167793,159706],{"class":125},[115,167795,171],{"class":121},[115,167797,55437],{"class":125},[115,167799,167800,167802,167804,167806,167808,167810,167812,167814,167816,167818,167820,167822,167824],{"class":117,"line":37},[115,167801,148375],{"class":125},[115,167803,62669],{"class":230},[115,167805,51427],{"class":125},[115,167807,149878],{"class":230},[115,167809,12436],{"class":125},[115,167811,69114],{"class":230},[115,167813,51427],{"class":125},[115,167815,775],{"class":174},[115,167817,12436],{"class":125},[115,167819,151462],{"class":230},[115,167821,51427],{"class":125},[115,167823,1114],{"class":174},[115,167825,4930],{"class":125},[115,167827,167828,167830,167832,167834,167836,167838,167840,167842,167844,167846,167848,167850,167852],{"class":117,"line":1180},[115,167829,148375],{"class":125},[115,167831,62669],{"class":230},[115,167833,51427],{"class":125},[115,167835,150926],{"class":230},[115,167837,12436],{"class":125},[115,167839,69114],{"class":230},[115,167841,51427],{"class":125},[115,167843,750],{"class":174},[115,167845,12436],{"class":125},[115,167847,151462],{"class":230},[115,167849,51427],{"class":125},[115,167851,936],{"class":174},[115,167853,4930],{"class":125},[115,167855,167856,167858,167860,167862,167864,167866,167868,167870,167872,167874,167876,167878,167880],{"class":117,"line":1195},[115,167857,148375],{"class":125},[115,167859,62669],{"class":230},[115,167861,51427],{"class":125},[115,167863,159721],{"class":230},[115,167865,12436],{"class":125},[115,167867,69114],{"class":230},[115,167869,51427],{"class":125},[115,167871,800],{"class":174},[115,167873,12436],{"class":125},[115,167875,151462],{"class":230},[115,167877,51427],{"class":125},[115,167879,1007],{"class":174},[115,167881,4930],{"class":125},[115,167883,167884],{"class":117,"line":1201},[115,167885,33247],{"class":125},[115,167887,167888],{"class":117,"line":1215},[115,167889,2400],{"emptyLinePlaceholder":42},[115,167891,167892],{"class":117,"line":1221},[115,167893,2400],{"emptyLinePlaceholder":42},[115,167895,167896,167898,167901],{"class":117,"line":1312},[115,167897,31948],{"class":121},[115,167899,167900],{"class":1963}," filter_students",[115,167902,167903],{"class":125},"(students, condition):\n",[115,167905,167906,167908,167910],{"class":117,"line":1318},[115,167907,161213],{"class":125},[115,167909,171],{"class":121},[115,167911,51828],{"class":125},[115,167913,167914,167916,167918,167920],{"class":117,"line":1330},[115,167915,3201],{"class":121},[115,167917,152127],{"class":125},[115,167919,26044],{"class":121},[115,167921,152132],{"class":125},[115,167923,167924,167926],{"class":117,"line":1612},[115,167925,2497],{"class":121},[115,167927,167928],{"class":125}," condition(student):\n",[115,167930,167931],{"class":117,"line":1617},[115,167932,167933],{"class":125},"            result.append(student)\n",[115,167935,167936,167938],{"class":117,"line":1623},[115,167937,4090],{"class":121},[115,167939,167695],{"class":125},[115,167941,167942],{"class":117,"line":1628},[115,167943,2400],{"emptyLinePlaceholder":42},[115,167945,167946],{"class":117,"line":1642},[115,167947,2400],{"emptyLinePlaceholder":42},[115,167949,167950,167952,167954,167957,167959,167962,167964,167966,167968,167970],{"class":117,"line":1647},[115,167951,165691],{"class":125},[115,167953,171],{"class":121},[115,167955,167956],{"class":125}," filter_students(students, ",[115,167958,166876],{"class":121},[115,167960,167961],{"class":125}," s: s[",[115,167963,151462],{"class":230},[115,167965,4443],{"class":125},[115,167967,1710],{"class":121},[115,167969,157827],{"class":174},[115,167971,132],{"class":125},[115,167973,167974,167977,167979,167981,167983,167985,167987,167989,167991,167993],{"class":117,"line":1653},[115,167975,167976],{"class":125},"excellent ",[115,167978,171],{"class":121},[115,167980,167956],{"class":125},[115,167982,166876],{"class":121},[115,167984,167961],{"class":125},[115,167986,151462],{"class":230},[115,167988,4443],{"class":125},[115,167990,1710],{"class":121},[115,167992,157778],{"class":174},[115,167994,132],{"class":125},[115,167996,167997,168000,168002,168004,168006,168008,168010,168012,168014,168016],{"class":117,"line":1674},[115,167998,167999],{"class":125},"under_age ",[115,168001,171],{"class":121},[115,168003,167956],{"class":125},[115,168005,166876],{"class":121},[115,168007,167961],{"class":125},[115,168009,69114],{"class":230},[115,168011,4443],{"class":125},[115,168013,1035],{"class":121},[115,168015,156275],{"class":174},[115,168017,132],{"class":125},[115,168019,168020],{"class":117,"line":1679},[115,168021,2400],{"emptyLinePlaceholder":42},[115,168023,168024,168026],{"class":117,"line":1693},[115,168025,30416],{"class":174},[115,168027,168028],{"class":125},"(passed)\n",[115,168030,168031,168033],{"class":117,"line":1698},[115,168032,30416],{"class":174},[115,168034,168035],{"class":125},"(excellent)\n",[115,168037,168038,168040],{"class":117,"line":1727},[115,168039,30416],{"class":174},[115,168041,168042],{"class":125},"(under_age)\n",[57,168044,168046],{"id":168045},"_715-易错点","7.15 易错点",[69,168048,168049,168052,168060,168065,168076],{},[72,168050,168051],{},"默认参数不要写可变对象。",[72,168053,168054,168056,168057,168059],{},[112,168055,166522],{}," 是元组，",[112,168058,166637],{}," 是字典。",[72,168061,168062,168064],{},[112,168063,166876],{}," 只适合简单表达式。",[72,168066,168067,101008,168069,168071,168072,168075],{},[112,168068,74034],{},[112,168070,80041],{}," 的结果是迭代器，常用 ",[112,168073,168074],{},"list()"," 转换查看。",[72,168077,168078],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[57,168080,168082],{"id":168081},"_716-本章练习","7.16 本章练习",[69,168084,168085,168092,168098,168103,168108],{},[72,168086,168087,168088,168091],{},"写函数 ",[112,168089,168090],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[72,168093,168087,168094,168097],{},[112,168095,168096],{},"print_user(**kwargs)","，输出用户所有字段。",[72,168099,104356,168100,168102],{},[112,168101,166876],{}," 对学生列表按年龄排序。",[72,168104,104356,168105,168107],{},[112,168106,80041],{}," 找出成绩不及格的学生。",[72,168109,168110],{},"写一个装饰器，统计函数执行前后的提示信息。",[5127,168112,168113],{},"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":22,"searchDepth":37,"depth":37,"links":168115},[168116,168117,168118,168119,168120,168121,168125,168126,168127,168128,168133,168134,168135,168136,168137,168138],{"id":165974,"depth":37,"text":165975},{"id":166088,"depth":37,"text":166089},{"id":166177,"depth":37,"text":166178},{"id":166239,"depth":37,"text":166240},{"id":166385,"depth":37,"text":166386},{"id":166512,"depth":37,"text":166513,"children":168122},[168123,168124],{"id":166516,"depth":1180,"text":166517},{"id":166631,"depth":1180,"text":166632},{"id":166712,"depth":37,"text":166713},{"id":166870,"depth":37,"text":166871},{"id":167038,"depth":37,"text":167039},{"id":167120,"depth":37,"text":167121,"children":168129},[168130,168131,168132],{"id":167124,"depth":1180,"text":167125},{"id":167195,"depth":1180,"text":167196},{"id":167272,"depth":1180,"text":167273},{"id":167397,"depth":37,"text":167398},{"id":167487,"depth":37,"text":167488},{"id":167618,"depth":37,"text":167619},{"id":167768,"depth":37,"text":167769},{"id":168045,"depth":37,"text":168046},{"id":168081,"depth":37,"text":168082},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165966,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168145,"title":168146,"body":168147,"description":39,"extension":40,"meta":170666,"navigation":42,"path":170667,"seo":170668,"stem":170669,"__hash__":170670},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168148,"toc":170641},[168149,168152,168156,168159,168162,168193,168197,168201,168204,168231,168235,168238,168289,168292,168307,168310,168345,168349,168351,168375,168378,168438,168442,168446,168449,168506,168509,168529,168533,168536,168599,168603,168606,168662,168669,168693,168697,168700,168763,168767,168772,168823,168826,168830,168835,168902,168905,168987,168991,168996,169047,169050,169054,169057,169060,169068,169071,169117,169120,169166,169170,169176,169220,169223,169269,169272,169312,169315,169376,169380,169383,169473,169476,169618,169621,169688,169692,169695,169698,169839,169842,169920,169923,170099,170103,170105,170116,170118,170317,170321,170565,170569,170603,170607,170638],[10,168150,168146],{"id":168151},"_8-文件操作",[57,168153,168155],{"id":168154},"_81-文件操作的意义","8.1 文件操作的意义",[14,168157,168158],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168160,168161],{},"常见文件类型：",[69,168163,168164,168170,168176,168182,168188],{},[72,168165,168166,168169],{},[112,168167,168168],{},".txt","：普通文本。",[72,168171,168172,168175],{},[112,168173,168174],{},".csv","：表格文本。",[72,168177,168178,168181],{},[112,168179,168180],{},".json","：结构化数据。",[72,168183,168184,168187],{},[112,168185,168186],{},".log","：日志文件。",[72,168189,168190,168192],{},[112,168191,146342],{},"：Python 源代码。",[57,168194,168196],{"id":168195},"_82-路径","8.2 路径",[86,168198,168200],{"id":168199},"_821-相对路径","8.2.1 相对路径",[14,168202,168203],{},"相对当前运行目录：",[106,168205,168207],{"className":30379,"code":168206,"language":30381,"meta":22,"style":22},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[112,168208,168209],{"__ignoreMap":22},[115,168210,168211,168213,168215,168217,168219,168221,168223,168225,168227,168229],{"class":117,"line":118},[115,168212,86905],{"class":174},[115,168214,126],{"class":125},[115,168216,146786],{"class":230},[115,168218,12436],{"class":125},[115,168220,146791],{"class":230},[115,168222,12436],{"class":125},[115,168224,146796],{"class":5217},[115,168226,171],{"class":121},[115,168228,146801],{"class":230},[115,168230,132],{"class":125},[86,168232,168234],{"id":168233},"_822-绝对路径","8.2.2 绝对路径",[14,168236,168237],{},"从根目录或盘符开始：",[106,168239,168241],{"className":30379,"code":168240,"language":30381,"meta":22,"style":22},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[112,168242,168243,168266],{"__ignoreMap":22},[115,168244,168245,168247,168249,168252,168254,168256,168258,168260,168262,168264],{"class":117,"line":118},[115,168246,86905],{"class":174},[115,168248,126],{"class":125},[115,168250,168251],{"class":230},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[115,168253,12436],{"class":125},[115,168255,146791],{"class":230},[115,168257,12436],{"class":125},[115,168259,146796],{"class":5217},[115,168261,171],{"class":121},[115,168263,146801],{"class":230},[115,168265,132],{"class":125},[115,168267,168268,168270,168272,168275,168277,168279,168281,168283,168285,168287],{"class":117,"line":37},[115,168269,86905],{"class":174},[115,168271,126],{"class":125},[115,168273,168274],{"class":230},"\"D:\u002Fdata\u002Fdata.txt\"",[115,168276,12436],{"class":125},[115,168278,146791],{"class":230},[115,168280,12436],{"class":125},[115,168282,146796],{"class":5217},[115,168284,171],{"class":121},[115,168286,146801],{"class":230},[115,168288,132],{"class":125},[14,168290,168291],{},"Windows 路径建议写成：",[106,168293,168295],{"className":30379,"code":168294,"language":30381,"meta":22,"style":22},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[112,168296,168297],{"__ignoreMap":22},[115,168298,168299,168302,168304],{"class":117,"line":118},[115,168300,168301],{"class":125},"path ",[115,168303,171],{"class":121},[115,168305,168306],{"class":230}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168308,168309],{},"或原始字符串：",[106,168311,168313],{"className":30379,"code":168312,"language":30381,"meta":22,"style":22},"path = r\"D:\\data\\data.txt\"\n",[112,168314,168315],{"__ignoreMap":22},[115,168316,168317,168319,168321,168323,168325,168328,168331,168334,168336,168338,168340,168343],{"class":117,"line":118},[115,168318,168301],{"class":125},[115,168320,171],{"class":121},[115,168322,17122],{"class":121},[115,168324,376],{"class":230},[115,168326,168327],{"class":47978},"D:",[115,168329,168330],{"class":174},"\\d",[115,168332,168333],{"class":47978},"ata",[115,168335,168330],{"class":174},[115,168337,168333],{"class":47978},[115,168339,683],{"class":174},[115,168341,168342],{"class":47978},"txt",[115,168344,25134],{"class":230},[57,168346,168348],{"id":168347},"_83-open函数","8.3 open函数",[14,168350,5182],{},[106,168352,168354],{"className":30379,"code":168353,"language":30381,"meta":22,"style":22},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[112,168355,168356],{"__ignoreMap":22},[115,168357,168358,168360,168362,168364,168367,168369,168371,168373],{"class":117,"line":118},[115,168359,45355],{"class":5217},[115,168361,13565],{"class":121},[115,168363,146781],{"class":174},[115,168365,168366],{"class":125},"(文件路径, 打开模式, ",[115,168368,146796],{"class":5217},[115,168370,171],{"class":121},[115,168372,146801],{"class":230},[115,168374,132],{"class":125},[14,168376,168377],{},"常见模式：",[263,168379,168380,168389],{},[266,168381,168382],{},[269,168383,168384,168387],{},[272,168385,168386],{},"模式",[272,168388,25870],{},[310,168390,168391,168400,168409,168418,168428],{},[269,168392,168393,168397],{},[315,168394,168395],{},[112,168396,795],{},[315,168398,168399],{},"只读，文件不存在会报错",[269,168401,168402,168406],{},[315,168403,168404],{},[112,168405,920],{},[315,168407,168408],{},"只写，文件不存在会创建，存在会清空",[269,168410,168411,168415],{},[315,168412,168413],{},[112,168414,27],{},[315,168416,168417],{},"追加，文件不存在会创建",[269,168419,168420,168425],{},[315,168421,168422],{},[112,168423,168424],{},"rb",[315,168426,168427],{},"二进制只读",[269,168429,168430,168435],{},[315,168431,168432],{},[112,168433,168434],{},"wb",[315,168436,168437],{},"二进制只写",[57,168439,168441],{"id":168440},"_84-读取文件","8.4 读取文件",[86,168443,168445],{"id":168444},"_841-read","8.4.1 read",[14,168447,168448],{},"一次读取全部内容：",[106,168450,168452],{"className":30379,"code":168451,"language":30381,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[112,168453,168454,168480,168492,168499],{"__ignoreMap":22},[115,168455,168456,168458,168460,168462,168464,168466,168468,168470,168472,168474,168476,168478],{"class":117,"line":118},[115,168457,45355],{"class":5217},[115,168459,13565],{"class":121},[115,168461,146781],{"class":174},[115,168463,126],{"class":125},[115,168465,146786],{"class":230},[115,168467,12436],{"class":125},[115,168469,146791],{"class":230},[115,168471,12436],{"class":125},[115,168473,146796],{"class":5217},[115,168475,171],{"class":121},[115,168477,146801],{"class":230},[115,168479,132],{"class":125},[115,168481,168482,168485,168487,168489],{"class":117,"line":37},[115,168483,168484],{"class":125},"content ",[115,168486,171],{"class":121},[115,168488,148143],{"class":5217},[115,168490,168491],{"class":125},".read()\n",[115,168493,168494,168496],{"class":117,"line":1180},[115,168495,30416],{"class":174},[115,168497,168498],{"class":125},"(content)\n",[115,168500,168501,168503],{"class":117,"line":1195},[115,168502,45355],{"class":5217},[115,168504,168505],{"class":125},".close()\n",[14,168507,168508],{},"可以指定读取字符数：",[106,168510,168512],{"className":30379,"code":168511,"language":30381,"meta":22,"style":22},"content = file.read(10)\n",[112,168513,168514],{"__ignoreMap":22},[115,168515,168516,168518,168520,168522,168525,168527],{"class":117,"line":118},[115,168517,168484],{"class":125},[115,168519,171],{"class":121},[115,168521,148143],{"class":5217},[115,168523,168524],{"class":125},".read(",[115,168526,571],{"class":174},[115,168528,132],{"class":125},[86,168530,168532],{"id":168531},"_842-readline","8.4.2 readline",[14,168534,168535],{},"一次读取一行：",[106,168537,168539],{"className":30379,"code":168538,"language":30381,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[112,168540,168541,168567,168571,168582,168589,168593],{"__ignoreMap":22},[115,168542,168543,168545,168547,168549,168551,168553,168555,168557,168559,168561,168563,168565],{"class":117,"line":118},[115,168544,45355],{"class":5217},[115,168546,13565],{"class":121},[115,168548,146781],{"class":174},[115,168550,126],{"class":125},[115,168552,146786],{"class":230},[115,168554,12436],{"class":125},[115,168556,146791],{"class":230},[115,168558,12436],{"class":125},[115,168560,146796],{"class":5217},[115,168562,171],{"class":121},[115,168564,146801],{"class":230},[115,168566,132],{"class":125},[115,168568,168569],{"class":117,"line":37},[115,168570,2400],{"emptyLinePlaceholder":42},[115,168572,168573,168575,168577,168579],{"class":117,"line":1180},[115,168574,147242],{"class":125},[115,168576,171],{"class":121},[115,168578,148143],{"class":5217},[115,168580,168581],{"class":125},".readline()\n",[115,168583,168584,168586],{"class":117,"line":1195},[115,168585,30416],{"class":174},[115,168587,168588],{"class":125},"(line)\n",[115,168590,168591],{"class":117,"line":1201},[115,168592,2400],{"emptyLinePlaceholder":42},[115,168594,168595,168597],{"class":117,"line":1215},[115,168596,45355],{"class":5217},[115,168598,168505],{"class":125},[86,168600,168602],{"id":168601},"_843-readlines","8.4.3 readlines",[14,168604,168605],{},"读取所有行，返回列表：",[106,168607,168609],{"className":30379,"code":168608,"language":30381,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[112,168610,168611,168637,168649,168656],{"__ignoreMap":22},[115,168612,168613,168615,168617,168619,168621,168623,168625,168627,168629,168631,168633,168635],{"class":117,"line":118},[115,168614,45355],{"class":5217},[115,168616,13565],{"class":121},[115,168618,146781],{"class":174},[115,168620,126],{"class":125},[115,168622,146786],{"class":230},[115,168624,12436],{"class":125},[115,168626,146791],{"class":230},[115,168628,12436],{"class":125},[115,168630,146796],{"class":5217},[115,168632,171],{"class":121},[115,168634,146801],{"class":230},[115,168636,132],{"class":125},[115,168638,168639,168642,168644,168646],{"class":117,"line":37},[115,168640,168641],{"class":125},"lines ",[115,168643,171],{"class":121},[115,168645,148143],{"class":5217},[115,168647,168648],{"class":125},".readlines()\n",[115,168650,168651,168653],{"class":117,"line":1180},[115,168652,30416],{"class":174},[115,168654,168655],{"class":125},"(lines)\n",[115,168657,168658,168660],{"class":117,"line":1195},[115,168659,45355],{"class":5217},[115,168661,168505],{"class":125},[14,168663,168664,168665,168668],{},"每一行通常带有换行符，可以用 ",[112,168666,168667],{},"strip()"," 去掉：",[106,168670,168672],{"className":30379,"code":168671,"language":30381,"meta":22,"style":22},"for line in lines:\n    print(line.strip())\n",[112,168673,168674,168686],{"__ignoreMap":22},[115,168675,168676,168678,168681,168683],{"class":117,"line":118},[115,168677,3025],{"class":121},[115,168679,168680],{"class":125}," line ",[115,168682,26044],{"class":121},[115,168684,168685],{"class":125}," lines:\n",[115,168687,168688,168690],{"class":117,"line":37},[115,168689,31300],{"class":174},[115,168691,168692],{"class":125},"(line.strip())\n",[86,168694,168696],{"id":168695},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168698,168699],{},"推荐读取大文件时使用：",[106,168701,168703],{"className":30379,"code":168702,"language":30381,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[112,168704,168705,168731,168735,168747,168753,168757],{"__ignoreMap":22},[115,168706,168707,168709,168711,168713,168715,168717,168719,168721,168723,168725,168727,168729],{"class":117,"line":118},[115,168708,45355],{"class":5217},[115,168710,13565],{"class":121},[115,168712,146781],{"class":174},[115,168714,126],{"class":125},[115,168716,146786],{"class":230},[115,168718,12436],{"class":125},[115,168720,146791],{"class":230},[115,168722,12436],{"class":125},[115,168724,146796],{"class":5217},[115,168726,171],{"class":121},[115,168728,146801],{"class":230},[115,168730,132],{"class":125},[115,168732,168733],{"class":117,"line":37},[115,168734,2400],{"emptyLinePlaceholder":42},[115,168736,168737,168739,168741,168743,168745],{"class":117,"line":1180},[115,168738,3025],{"class":121},[115,168740,168680],{"class":125},[115,168742,26044],{"class":121},[115,168744,148143],{"class":5217},[115,168746,3739],{"class":125},[115,168748,168749,168751],{"class":117,"line":1195},[115,168750,31300],{"class":174},[115,168752,168692],{"class":125},[115,168754,168755],{"class":117,"line":1201},[115,168756,2400],{"emptyLinePlaceholder":42},[115,168758,168759,168761],{"class":117,"line":1215},[115,168760,45355],{"class":5217},[115,168762,168505],{"class":125},[57,168764,168766],{"id":168765},"_85-with语句","8.5 with语句",[14,168768,168769,168771],{},[112,168770,107823],{}," 会自动关闭文件，推荐使用。",[106,168773,168775],{"className":30379,"code":168774,"language":30381,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[112,168776,168777,168807,168817],{"__ignoreMap":22},[115,168778,168779,168781,168783,168785,168787,168789,168791,168793,168795,168797,168799,168801,168803,168805],{"class":117,"line":118},[115,168780,107823],{"class":121},[115,168782,146781],{"class":174},[115,168784,126],{"class":125},[115,168786,146786],{"class":230},[115,168788,12436],{"class":125},[115,168790,146791],{"class":230},[115,168792,12436],{"class":125},[115,168794,146796],{"class":5217},[115,168796,171],{"class":121},[115,168798,146801],{"class":230},[115,168800,13715],{"class":125},[115,168802,31384],{"class":121},[115,168804,148143],{"class":5217},[115,168806,3739],{"class":125},[115,168808,168809,168811,168813,168815],{"class":117,"line":37},[115,168810,146813],{"class":125},[115,168812,171],{"class":121},[115,168814,148143],{"class":5217},[115,168816,168491],{"class":125},[115,168818,168819,168821],{"class":117,"line":1180},[115,168820,31300],{"class":174},[115,168822,168498],{"class":125},[14,168824,168825],{},"等价于打开文件、读取、最后关闭，但更安全。",[57,168827,168829],{"id":168828},"_86-写入文件","8.6 写入文件",[14,168831,168832,168834],{},[112,168833,920],{}," 模式会清空原文件。",[106,168836,168838],{"className":30379,"code":168837,"language":30381,"meta":22,"style":22},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[112,168839,168840,168870,168887],{"__ignoreMap":22},[115,168841,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868],{"class":117,"line":118},[115,168843,107823],{"class":121},[115,168845,146781],{"class":174},[115,168847,126],{"class":125},[115,168849,146786],{"class":230},[115,168851,12436],{"class":125},[115,168853,151966],{"class":230},[115,168855,12436],{"class":125},[115,168857,146796],{"class":5217},[115,168859,171],{"class":121},[115,168861,146801],{"class":230},[115,168863,13715],{"class":125},[115,168865,31384],{"class":121},[115,168867,148143],{"class":5217},[115,168869,3739],{"class":125},[115,168871,168872,168875,168878,168881,168883,168885],{"class":117,"line":37},[115,168873,168874],{"class":5217},"    file",[115,168876,168877],{"class":125},".write(",[115,168879,168880],{"class":230},"\"hello",[115,168882,156515],{"class":174},[115,168884,376],{"class":230},[115,168886,132],{"class":125},[115,168888,168889,168891,168893,168896,168898,168900],{"class":117,"line":1180},[115,168890,168874],{"class":5217},[115,168892,168877],{"class":125},[115,168894,168895],{"class":230},"\"python",[115,168897,156515],{"class":174},[115,168899,376],{"class":230},[115,168901,132],{"class":125},[14,168903,168904],{},"写入多行：",[106,168906,168908],{"className":30379,"code":168907,"language":30381,"meta":22,"style":22},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[112,168909,168910,168945,168949,168980],{"__ignoreMap":22},[115,168911,168912,168914,168916,168918,168921,168923,168925,168927,168930,168932,168934,168936,168939,168941,168943],{"class":117,"line":118},[115,168913,168641],{"class":125},[115,168915,171],{"class":121},[115,168917,52216],{"class":125},[115,168919,168920],{"class":230},"\"小明,18",[115,168922,156515],{"class":174},[115,168924,376],{"class":230},[115,168926,12436],{"class":125},[115,168928,168929],{"class":230},"\"小红,17",[115,168931,156515],{"class":174},[115,168933,376],{"class":230},[115,168935,12436],{"class":125},[115,168937,168938],{"class":230},"\"小刚,19",[115,168940,156515],{"class":174},[115,168942,376],{"class":230},[115,168944,33247],{"class":125},[115,168946,168947],{"class":117,"line":37},[115,168948,2400],{"emptyLinePlaceholder":42},[115,168950,168951,168953,168955,168957,168960,168962,168964,168966,168968,168970,168972,168974,168976,168978],{"class":117,"line":1180},[115,168952,107823],{"class":121},[115,168954,146781],{"class":174},[115,168956,126],{"class":125},[115,168958,168959],{"class":230},"\"students.txt\"",[115,168961,12436],{"class":125},[115,168963,151966],{"class":230},[115,168965,12436],{"class":125},[115,168967,146796],{"class":5217},[115,168969,171],{"class":121},[115,168971,146801],{"class":230},[115,168973,13715],{"class":125},[115,168975,31384],{"class":121},[115,168977,148143],{"class":5217},[115,168979,3739],{"class":125},[115,168981,168982,168984],{"class":117,"line":1195},[115,168983,168874],{"class":5217},[115,168985,168986],{"class":125},".writelines(lines)\n",[57,168988,168990],{"id":168989},"_87-追加文件","8.7 追加文件",[14,168992,168993,168995],{},[112,168994,27],{}," 模式不会清空原内容，而是在末尾追加。",[106,168997,168999],{"className":30379,"code":168998,"language":30381,"meta":22,"style":22},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[112,169000,169001,169032],{"__ignoreMap":22},[115,169002,169003,169005,169007,169009,169012,169014,169016,169018,169020,169022,169024,169026,169028,169030],{"class":117,"line":118},[115,169004,107823],{"class":121},[115,169006,146781],{"class":174},[115,169008,126],{"class":125},[115,169010,169011],{"class":230},"\"log.txt\"",[115,169013,12436],{"class":125},[115,169015,165315],{"class":230},[115,169017,12436],{"class":125},[115,169019,146796],{"class":5217},[115,169021,171],{"class":121},[115,169023,146801],{"class":230},[115,169025,13715],{"class":125},[115,169027,31384],{"class":121},[115,169029,148143],{"class":5217},[115,169031,3739],{"class":125},[115,169033,169034,169036,169038,169041,169043,169045],{"class":117,"line":37},[115,169035,168874],{"class":5217},[115,169037,168877],{"class":125},[115,169039,169040],{"class":230},"\"程序启动",[115,169042,156515],{"class":174},[115,169044,376],{"class":230},[115,169046,132],{"class":125},[14,169048,169049],{},"日志类文件常用追加模式。",[57,169051,169053],{"id":169052},"_88-文件编码","8.8 文件编码",[14,169055,169056],{},"编码决定文字如何保存为字节。",[14,169058,169059],{},"常见编码：",[69,169061,169062,169065],{},[72,169063,169064],{},"UTF-8：推荐。",[72,169066,169067],{},"GBK：部分 Windows 中文文件常见。",[14,169069,169070],{},"读取文件乱码时，可以尝试：",[106,169072,169074],{"className":30379,"code":169073,"language":30381,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[112,169075,169076,169107],{"__ignoreMap":22},[115,169077,169078,169080,169082,169084,169086,169088,169090,169092,169094,169096,169099,169101,169103,169105],{"class":117,"line":118},[115,169079,107823],{"class":121},[115,169081,146781],{"class":174},[115,169083,126],{"class":125},[115,169085,146786],{"class":230},[115,169087,12436],{"class":125},[115,169089,146791],{"class":230},[115,169091,12436],{"class":125},[115,169093,146796],{"class":5217},[115,169095,171],{"class":121},[115,169097,169098],{"class":230},"\"gbk\"",[115,169100,13715],{"class":125},[115,169102,31384],{"class":121},[115,169104,148143],{"class":5217},[115,169106,3739],{"class":125},[115,169108,169109,169111,169113,169115],{"class":117,"line":37},[115,169110,146813],{"class":125},[115,169112,171],{"class":121},[115,169114,148143],{"class":5217},[115,169116,168491],{"class":125},[14,169118,169119],{},"写文件时建议统一 UTF-8：",[106,169121,169123],{"className":30379,"code":169122,"language":30381,"meta":22,"style":22},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[112,169124,169125,169155],{"__ignoreMap":22},[115,169126,169127,169129,169131,169133,169135,169137,169139,169141,169143,169145,169147,169149,169151,169153],{"class":117,"line":118},[115,169128,107823],{"class":121},[115,169130,146781],{"class":174},[115,169132,126],{"class":125},[115,169134,146786],{"class":230},[115,169136,12436],{"class":125},[115,169138,151966],{"class":230},[115,169140,12436],{"class":125},[115,169142,146796],{"class":5217},[115,169144,171],{"class":121},[115,169146,146801],{"class":230},[115,169148,13715],{"class":125},[115,169150,31384],{"class":121},[115,169152,148143],{"class":5217},[115,169154,3739],{"class":125},[115,169156,169157,169159,169161,169164],{"class":117,"line":37},[115,169158,168874],{"class":5217},[115,169160,168877],{"class":125},[115,169162,169163],{"class":230},"\"中文内容\"",[115,169165,132],{"class":125},[57,169167,169169],{"id":169168},"_89-pathlib","8.9 pathlib",[14,169171,169172,169175],{},[112,169173,169174],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[106,169177,169179],{"className":30379,"code":169178,"language":30381,"meta":22,"style":22},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[112,169180,169181,169191,169195,169213],{"__ignoreMap":22},[115,169182,169183,169185,169187,169189],{"class":117,"line":118},[115,169184,30738],{"class":121},[115,169186,108301],{"class":125},[115,169188,30393],{"class":121},[115,169190,108306],{"class":125},[115,169192,169193],{"class":117,"line":37},[115,169194,2400],{"emptyLinePlaceholder":42},[115,169196,169197,169199,169201,169203,169206,169208,169210],{"class":117,"line":1180},[115,169198,168301],{"class":125},[115,169200,171],{"class":121},[115,169202,108535],{"class":125},[115,169204,169205],{"class":230},"\"data\"",[115,169207,13715],{"class":125},[115,169209,709],{"class":121},[115,169211,169212],{"class":230}," \"students.txt\"\n",[115,169214,169215,169217],{"class":117,"line":1195},[115,169216,30416],{"class":174},[115,169218,169219],{"class":125},"(path)\n",[14,169221,169222],{},"创建目录：",[106,169224,169226],{"className":30379,"code":169225,"language":30381,"meta":22,"style":22},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[112,169227,169228,169238,169242,169255],{"__ignoreMap":22},[115,169229,169230,169232,169234,169236],{"class":117,"line":118},[115,169231,30738],{"class":121},[115,169233,108301],{"class":125},[115,169235,30393],{"class":121},[115,169237,108306],{"class":125},[115,169239,169240],{"class":117,"line":37},[115,169241,2400],{"emptyLinePlaceholder":42},[115,169243,169244,169247,169249,169251,169253],{"class":117,"line":1180},[115,169245,169246],{"class":125},"data_dir ",[115,169248,171],{"class":121},[115,169250,108535],{"class":125},[115,169252,169205],{"class":230},[115,169254,132],{"class":125},[115,169256,169257,169260,169263,169265,169267],{"class":117,"line":1195},[115,169258,169259],{"class":125},"data_dir.mkdir(",[115,169261,169262],{"class":5217},"exist_ok",[115,169264,171],{"class":121},[115,169266,31477],{"class":174},[115,169268,132],{"class":125},[14,169270,169271],{},"判断文件是否存在：",[106,169273,169275],{"className":30379,"code":169274,"language":30381,"meta":22,"style":22},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[112,169276,169277,169290,169294,169301],{"__ignoreMap":22},[115,169278,169279,169281,169283,169285,169288],{"class":117,"line":118},[115,169280,168301],{"class":125},[115,169282,171],{"class":121},[115,169284,108535],{"class":125},[115,169286,169287],{"class":230},"\"data\u002Fstudents.txt\"",[115,169289,132],{"class":125},[115,169291,169292],{"class":117,"line":37},[115,169293,2400],{"emptyLinePlaceholder":42},[115,169295,169296,169298],{"class":117,"line":1180},[115,169297,1531],{"class":121},[115,169299,169300],{"class":125}," path.exists():\n",[115,169302,169303,169305,169307,169310],{"class":117,"line":1195},[115,169304,31300],{"class":174},[115,169306,126],{"class":125},[115,169308,169309],{"class":230},"\"文件存在\"",[115,169311,132],{"class":125},[14,169313,169314],{},"读写文本：",[106,169316,169318],{"className":30379,"code":169317,"language":30381,"meta":22,"style":22},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[112,169319,169320,169332,169336,169353,169370],{"__ignoreMap":22},[115,169321,169322,169324,169326,169328,169330],{"class":117,"line":118},[115,169323,168301],{"class":125},[115,169325,171],{"class":121},[115,169327,108535],{"class":125},[115,169329,146786],{"class":230},[115,169331,132],{"class":125},[115,169333,169334],{"class":117,"line":37},[115,169335,2400],{"emptyLinePlaceholder":42},[115,169337,169338,169341,169343,169345,169347,169349,169351],{"class":117,"line":1180},[115,169339,169340],{"class":125},"path.write_text(",[115,169342,145866],{"class":230},[115,169344,12436],{"class":125},[115,169346,146796],{"class":5217},[115,169348,171],{"class":121},[115,169350,146801],{"class":230},[115,169352,132],{"class":125},[115,169354,169355,169357,169359,169362,169364,169366,169368],{"class":117,"line":1195},[115,169356,168484],{"class":125},[115,169358,171],{"class":121},[115,169360,169361],{"class":125}," path.read_text(",[115,169363,146796],{"class":5217},[115,169365,171],{"class":121},[115,169367,146801],{"class":230},[115,169369,132],{"class":125},[115,169371,169372,169374],{"class":117,"line":1201},[115,169373,30416],{"class":174},[115,169375,168498],{"class":125},[57,169377,169379],{"id":169378},"_810-json文件","8.10 JSON文件",[14,169381,169382],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[106,169384,169386],{"className":30379,"code":169385,"language":30381,"meta":22,"style":22},"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",[112,169387,169388,169394,169398,169406,169416,169426,169434,169438,169442,169467],{"__ignoreMap":22},[115,169389,169390,169392],{"class":117,"line":118},[115,169391,30393],{"class":121},[115,169393,147081],{"class":125},[115,169395,169396],{"class":117,"line":37},[115,169397,2400],{"emptyLinePlaceholder":42},[115,169399,169400,169402,169404],{"class":117,"line":1180},[115,169401,149471],{"class":125},[115,169403,171],{"class":121},[115,169405,15573],{"class":125},[115,169407,169408,169410,169412,169414],{"class":117,"line":1195},[115,169409,147010],{"class":230},[115,169411,51427],{"class":125},[115,169413,149878],{"class":230},[115,169415,31467],{"class":125},[115,169417,169418,169420,169422,169424],{"class":117,"line":1201},[115,169419,164527],{"class":230},[115,169421,51427],{"class":125},[115,169423,775],{"class":174},[115,169425,31467],{"class":125},[115,169427,169428,169430,169432],{"class":117,"line":1215},[115,169429,164538],{"class":230},[115,169431,51427],{"class":125},[115,169433,164543],{"class":174},[115,169435,169436],{"class":117,"line":1221},[115,169437,1565],{"class":125},[115,169439,169440],{"class":117,"line":1312},[115,169441,2400],{"emptyLinePlaceholder":42},[115,169443,169444,169446,169448,169451,169453,169455,169457,169459,169461,169463,169465],{"class":117,"line":1318},[115,169445,156434],{"class":125},[115,169447,171],{"class":121},[115,169449,169450],{"class":125}," json.dumps(student, ",[115,169452,147127],{"class":5217},[115,169454,171],{"class":121},[115,169456,33988],{"class":174},[115,169458,12436],{"class":125},[115,169460,152002],{"class":5217},[115,169462,171],{"class":121},[115,169464,203],{"class":174},[115,169466,132],{"class":125},[115,169468,169469,169471],{"class":117,"line":1330},[115,169470,30416],{"class":174},[115,169472,164061],{"class":125},[14,169474,169475],{},"写入 JSON 文件：",[106,169477,169479],{"className":30379,"code":169478,"language":30381,"meta":22,"style":22},"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",[112,169480,169481,169487,169491,169499,169527,169555,169559,169563,169593],{"__ignoreMap":22},[115,169482,169483,169485],{"class":117,"line":118},[115,169484,30393],{"class":121},[115,169486,147081],{"class":125},[115,169488,169489],{"class":117,"line":37},[115,169490,2400],{"emptyLinePlaceholder":42},[115,169492,169493,169495,169497],{"class":117,"line":1180},[115,169494,159706],{"class":125},[115,169496,171],{"class":121},[115,169498,55437],{"class":125},[115,169500,169501,169503,169505,169507,169509,169511,169513,169515,169517,169519,169521,169523,169525],{"class":117,"line":1195},[115,169502,148375],{"class":125},[115,169504,62669],{"class":230},[115,169506,51427],{"class":125},[115,169508,149878],{"class":230},[115,169510,12436],{"class":125},[115,169512,69114],{"class":230},[115,169514,51427],{"class":125},[115,169516,775],{"class":174},[115,169518,12436],{"class":125},[115,169520,151462],{"class":230},[115,169522,51427],{"class":125},[115,169524,1114],{"class":174},[115,169526,4930],{"class":125},[115,169528,169529,169531,169533,169535,169537,169539,169541,169543,169545,169547,169549,169551,169553],{"class":117,"line":1201},[115,169530,148375],{"class":125},[115,169532,62669],{"class":230},[115,169534,51427],{"class":125},[115,169536,150926],{"class":230},[115,169538,12436],{"class":125},[115,169540,69114],{"class":230},[115,169542,51427],{"class":125},[115,169544,750],{"class":174},[115,169546,12436],{"class":125},[115,169548,151462],{"class":230},[115,169550,51427],{"class":125},[115,169552,936],{"class":174},[115,169554,4930],{"class":125},[115,169556,169557],{"class":117,"line":1215},[115,169558,33247],{"class":125},[115,169560,169561],{"class":117,"line":1221},[115,169562,2400],{"emptyLinePlaceholder":42},[115,169564,169565,169567,169569,169571,169573,169575,169577,169579,169581,169583,169585,169587,169589,169591],{"class":117,"line":1312},[115,169566,107823],{"class":121},[115,169568,146781],{"class":174},[115,169570,126],{"class":125},[115,169572,151821],{"class":230},[115,169574,12436],{"class":125},[115,169576,151966],{"class":230},[115,169578,12436],{"class":125},[115,169580,146796],{"class":5217},[115,169582,171],{"class":121},[115,169584,146801],{"class":230},[115,169586,13715],{"class":125},[115,169588,31384],{"class":121},[115,169590,148143],{"class":5217},[115,169592,3739],{"class":125},[115,169594,169595,169598,169600,169602,169604,169606,169608,169610,169612,169614,169616],{"class":117,"line":1318},[115,169596,169597],{"class":125},"    json.dump(students, ",[115,169599,45355],{"class":5217},[115,169601,12436],{"class":125},[115,169603,147127],{"class":5217},[115,169605,171],{"class":121},[115,169607,33988],{"class":174},[115,169609,12436],{"class":125},[115,169611,152002],{"class":5217},[115,169613,171],{"class":121},[115,169615,203],{"class":174},[115,169617,132],{"class":125},[14,169619,169620],{},"读取 JSON 文件：",[106,169622,169624],{"className":30379,"code":169623,"language":30381,"meta":22,"style":22},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[112,169625,169626,169632,169636,169666,169678,169682],{"__ignoreMap":22},[115,169627,169628,169630],{"class":117,"line":118},[115,169629,30393],{"class":121},[115,169631,147081],{"class":125},[115,169633,169634],{"class":117,"line":37},[115,169635,2400],{"emptyLinePlaceholder":42},[115,169637,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664],{"class":117,"line":1180},[115,169639,107823],{"class":121},[115,169641,146781],{"class":174},[115,169643,126],{"class":125},[115,169645,151821],{"class":230},[115,169647,12436],{"class":125},[115,169649,146791],{"class":230},[115,169651,12436],{"class":125},[115,169653,146796],{"class":5217},[115,169655,171],{"class":121},[115,169657,146801],{"class":230},[115,169659,13715],{"class":125},[115,169661,31384],{"class":121},[115,169663,148143],{"class":5217},[115,169665,3739],{"class":125},[115,169667,169668,169670,169672,169674,169676],{"class":117,"line":1195},[115,169669,153027],{"class":125},[115,169671,171],{"class":121},[115,169673,148154],{"class":125},[115,169675,45355],{"class":5217},[115,169677,132],{"class":125},[115,169679,169680],{"class":117,"line":1201},[115,169681,2400],{"emptyLinePlaceholder":42},[115,169683,169684,169686],{"class":117,"line":1215},[115,169685,30416],{"class":174},[115,169687,164985],{"class":125},[57,169689,169691],{"id":169690},"_811-csv文件","8.11 CSV文件",[14,169693,169694],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169696,169697],{},"写入 CSV：",[106,169699,169701],{"className":30379,"code":169700,"language":30381,"meta":22,"style":22},"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",[112,169702,169703,169710,169714,169722,169740,169756,169772,169776,169780,169820,169834],{"__ignoreMap":22},[115,169704,169705,169707],{"class":117,"line":118},[115,169706,30393],{"class":121},[115,169708,169709],{"class":125}," csv\n",[115,169711,169712],{"class":117,"line":37},[115,169713,2400],{"emptyLinePlaceholder":42},[115,169715,169716,169718,169720],{"class":117,"line":1180},[115,169717,159706],{"class":125},[115,169719,171],{"class":121},[115,169721,55437],{"class":125},[115,169723,169724,169727,169729,169731,169733,169735,169738],{"class":117,"line":1195},[115,169725,169726],{"class":125},"    [",[115,169728,73089],{"class":230},[115,169730,12436],{"class":125},[115,169732,73122],{"class":230},[115,169734,12436],{"class":125},[115,169736,169737],{"class":230},"\"成绩\"",[115,169739,87826],{"class":125},[115,169741,169742,169744,169746,169748,169750,169752,169754],{"class":117,"line":1201},[115,169743,169726],{"class":125},[115,169745,149878],{"class":230},[115,169747,12436],{"class":125},[115,169749,775],{"class":174},[115,169751,12436],{"class":125},[115,169753,1114],{"class":174},[115,169755,87826],{"class":125},[115,169757,169758,169760,169762,169764,169766,169768,169770],{"class":117,"line":1215},[115,169759,169726],{"class":125},[115,169761,150926],{"class":230},[115,169763,12436],{"class":125},[115,169765,750],{"class":174},[115,169767,12436],{"class":125},[115,169769,936],{"class":174},[115,169771,87826],{"class":125},[115,169773,169774],{"class":117,"line":1221},[115,169775,33247],{"class":125},[115,169777,169778],{"class":117,"line":1312},[115,169779,2400],{"emptyLinePlaceholder":42},[115,169781,169782,169784,169786,169788,169791,169793,169795,169797,169799,169801,169803,169805,169808,169810,169812,169814,169816,169818],{"class":117,"line":1318},[115,169783,107823],{"class":121},[115,169785,146781],{"class":174},[115,169787,126],{"class":125},[115,169789,169790],{"class":230},"\"students.csv\"",[115,169792,12436],{"class":125},[115,169794,151966],{"class":230},[115,169796,12436],{"class":125},[115,169798,146796],{"class":5217},[115,169800,171],{"class":121},[115,169802,146801],{"class":230},[115,169804,12436],{"class":125},[115,169806,169807],{"class":5217},"newline",[115,169809,171],{"class":121},[115,169811,7653],{"class":230},[115,169813,13715],{"class":125},[115,169815,31384],{"class":121},[115,169817,148143],{"class":5217},[115,169819,3739],{"class":125},[115,169821,169822,169825,169827,169830,169832],{"class":117,"line":1330},[115,169823,169824],{"class":125},"    writer ",[115,169826,171],{"class":121},[115,169828,169829],{"class":125}," csv.writer(",[115,169831,45355],{"class":5217},[115,169833,132],{"class":125},[115,169835,169836],{"class":117,"line":1612},[115,169837,169838],{"class":125},"    writer.writerows(students)\n",[14,169840,169841],{},"读取 CSV：",[106,169843,169845],{"className":30379,"code":169844,"language":30381,"meta":22,"style":22},"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",[112,169846,169847,169853,169857,169887,169901,169913],{"__ignoreMap":22},[115,169848,169849,169851],{"class":117,"line":118},[115,169850,30393],{"class":121},[115,169852,169709],{"class":125},[115,169854,169855],{"class":117,"line":37},[115,169856,2400],{"emptyLinePlaceholder":42},[115,169858,169859,169861,169863,169865,169867,169869,169871,169873,169875,169877,169879,169881,169883,169885],{"class":117,"line":1180},[115,169860,107823],{"class":121},[115,169862,146781],{"class":174},[115,169864,126],{"class":125},[115,169866,169790],{"class":230},[115,169868,12436],{"class":125},[115,169870,146791],{"class":230},[115,169872,12436],{"class":125},[115,169874,146796],{"class":5217},[115,169876,171],{"class":121},[115,169878,146801],{"class":230},[115,169880,13715],{"class":125},[115,169882,31384],{"class":121},[115,169884,148143],{"class":5217},[115,169886,3739],{"class":125},[115,169888,169889,169892,169894,169897,169899],{"class":117,"line":1195},[115,169890,169891],{"class":125},"    reader ",[115,169893,171],{"class":121},[115,169895,169896],{"class":125}," csv.reader(",[115,169898,45355],{"class":5217},[115,169900,132],{"class":125},[115,169902,169903,169905,169908,169910],{"class":117,"line":1201},[115,169904,3201],{"class":121},[115,169906,169907],{"class":125}," row ",[115,169909,26044],{"class":121},[115,169911,169912],{"class":125}," reader:\n",[115,169914,169915,169917],{"class":117,"line":1215},[115,169916,32452],{"class":174},[115,169918,169919],{"class":125},"(row)\n",[14,169921,169922],{},"使用字典写入：",[106,169924,169926],{"className":30379,"code":169925,"language":30381,"meta":22,"style":22},"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",[112,169927,169928,169934,169938,169946,169974,170002,170006,170010,170048,170069,170090,170095],{"__ignoreMap":22},[115,169929,169930,169932],{"class":117,"line":118},[115,169931,30393],{"class":121},[115,169933,169709],{"class":125},[115,169935,169936],{"class":117,"line":37},[115,169937,2400],{"emptyLinePlaceholder":42},[115,169939,169940,169942,169944],{"class":117,"line":1180},[115,169941,159706],{"class":125},[115,169943,171],{"class":121},[115,169945,55437],{"class":125},[115,169947,169948,169950,169952,169954,169956,169958,169960,169962,169964,169966,169968,169970,169972],{"class":117,"line":1195},[115,169949,148375],{"class":125},[115,169951,62669],{"class":230},[115,169953,51427],{"class":125},[115,169955,149878],{"class":230},[115,169957,12436],{"class":125},[115,169959,69114],{"class":230},[115,169961,51427],{"class":125},[115,169963,775],{"class":174},[115,169965,12436],{"class":125},[115,169967,151462],{"class":230},[115,169969,51427],{"class":125},[115,169971,1114],{"class":174},[115,169973,4930],{"class":125},[115,169975,169976,169978,169980,169982,169984,169986,169988,169990,169992,169994,169996,169998,170000],{"class":117,"line":1201},[115,169977,148375],{"class":125},[115,169979,62669],{"class":230},[115,169981,51427],{"class":125},[115,169983,150926],{"class":230},[115,169985,12436],{"class":125},[115,169987,69114],{"class":230},[115,169989,51427],{"class":125},[115,169991,750],{"class":174},[115,169993,12436],{"class":125},[115,169995,151462],{"class":230},[115,169997,51427],{"class":125},[115,169999,936],{"class":174},[115,170001,4930],{"class":125},[115,170003,170004],{"class":117,"line":1215},[115,170005,33247],{"class":125},[115,170007,170008],{"class":117,"line":1221},[115,170009,2400],{"emptyLinePlaceholder":42},[115,170011,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038,170040,170042,170044,170046],{"class":117,"line":1312},[115,170013,107823],{"class":121},[115,170015,146781],{"class":174},[115,170017,126],{"class":125},[115,170019,169790],{"class":230},[115,170021,12436],{"class":125},[115,170023,151966],{"class":230},[115,170025,12436],{"class":125},[115,170027,146796],{"class":5217},[115,170029,171],{"class":121},[115,170031,146801],{"class":230},[115,170033,12436],{"class":125},[115,170035,169807],{"class":5217},[115,170037,171],{"class":121},[115,170039,7653],{"class":230},[115,170041,13715],{"class":125},[115,170043,31384],{"class":121},[115,170045,148143],{"class":5217},[115,170047,3739],{"class":125},[115,170049,170050,170053,170055,170057,170059,170061,170063,170065,170067],{"class":117,"line":1318},[115,170051,170052],{"class":125},"    fieldnames ",[115,170054,171],{"class":121},[115,170056,52216],{"class":125},[115,170058,62669],{"class":230},[115,170060,12436],{"class":125},[115,170062,69114],{"class":230},[115,170064,12436],{"class":125},[115,170066,151462],{"class":230},[115,170068,33247],{"class":125},[115,170070,170071,170073,170075,170078,170080,170082,170085,170087],{"class":117,"line":1330},[115,170072,169824],{"class":125},[115,170074,171],{"class":121},[115,170076,170077],{"class":125}," csv.DictWriter(",[115,170079,45355],{"class":5217},[115,170081,12436],{"class":125},[115,170083,170084],{"class":5217},"fieldnames",[115,170086,171],{"class":121},[115,170088,170089],{"class":125},"fieldnames)\n",[115,170091,170092],{"class":117,"line":1612},[115,170093,170094],{"class":125},"    writer.writeheader()\n",[115,170096,170097],{"class":117,"line":1617},[115,170098,169838],{"class":125},[57,170100,170102],{"id":170101},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170104,123282],{},[69,170106,170107,170110,170113],{},[72,170108,170109],{},"读取文本文件。",[72,170111,170112],{},"统计每个单词出现次数。",[72,170114,170115],{},"输出出现次数最多的前 10 个单词。",[14,170117,10036],{},[106,170119,170121],{"className":30379,"code":170120,"language":30381,"meta":22,"style":22},"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",[112,170122,170123,170133,170137,170150,170166,170170,170180,170189,170193,170205,170225,170234,170238,170256,170260,170290,170294,170310],{"__ignoreMap":22},[115,170124,170125,170127,170129,170131],{"class":117,"line":118},[115,170126,30738],{"class":121},[115,170128,108301],{"class":125},[115,170130,30393],{"class":121},[115,170132,108306],{"class":125},[115,170134,170135],{"class":117,"line":37},[115,170136,2400],{"emptyLinePlaceholder":42},[115,170138,170139,170141,170143,170145,170148],{"class":117,"line":1180},[115,170140,168301],{"class":125},[115,170142,171],{"class":121},[115,170144,108535],{"class":125},[115,170146,170147],{"class":230},"\"article.txt\"",[115,170149,132],{"class":125},[115,170151,170152,170154,170156,170158,170160,170162,170164],{"class":117,"line":1195},[115,170153,168484],{"class":125},[115,170155,171],{"class":121},[115,170157,169361],{"class":125},[115,170159,146796],{"class":5217},[115,170161,171],{"class":121},[115,170163,146801],{"class":230},[115,170165,132],{"class":125},[115,170167,170168],{"class":117,"line":1201},[115,170169,2400],{"emptyLinePlaceholder":42},[115,170171,170172,170175,170177],{"class":117,"line":1215},[115,170173,170174],{"class":125},"words ",[115,170176,171],{"class":121},[115,170178,170179],{"class":125}," content.lower().split()\n",[115,170181,170182,170185,170187],{"class":117,"line":1221},[115,170183,170184],{"class":125},"counter ",[115,170186,171],{"class":121},[115,170188,87858],{"class":125},[115,170190,170191],{"class":117,"line":1312},[115,170192,2400],{"emptyLinePlaceholder":42},[115,170194,170195,170197,170200,170202],{"class":117,"line":1318},[115,170196,3025],{"class":121},[115,170198,170199],{"class":125}," word ",[115,170201,26044],{"class":121},[115,170203,170204],{"class":125}," words:\n",[115,170206,170207,170210,170212,170215,170218,170220,170223],{"class":117,"line":1330},[115,170208,170209],{"class":125},"    word ",[115,170211,171],{"class":121},[115,170213,170214],{"class":125}," word.strip(",[115,170216,170217],{"class":230},"\".,!?;:",[115,170219,156485],{"class":174},[115,170221,170222],{"class":230},"'()[]\"",[115,170224,132],{"class":125},[115,170226,170227,170229,170231],{"class":117,"line":1612},[115,170228,3101],{"class":121},[115,170230,38931],{"class":121},[115,170232,170233],{"class":125}," word:\n",[115,170235,170236],{"class":117,"line":1617},[115,170237,148502],{"class":121},[115,170239,170240,170243,170245,170248,170250,170252,170254],{"class":117,"line":1623},[115,170241,170242],{"class":125},"    counter[word] ",[115,170244,171],{"class":121},[115,170246,170247],{"class":125}," counter.get(word, ",[115,170249,317],{"class":174},[115,170251,13715],{"class":125},[115,170253,606],{"class":121},[115,170255,55689],{"class":174},[115,170257,170258],{"class":117,"line":1628},[115,170259,2400],{"emptyLinePlaceholder":42},[115,170261,170262,170265,170267,170269,170272,170274,170276,170278,170280,170282,170284,170286,170288],{"class":117,"line":1642},[115,170263,170264],{"class":125},"items ",[115,170266,171],{"class":121},[115,170268,163594],{"class":174},[115,170270,170271],{"class":125},"(counter.items(), ",[115,170273,153936],{"class":5217},[115,170275,153939],{"class":121},[115,170277,153942],{"class":125},[115,170279,343],{"class":174},[115,170281,112192],{"class":125},[115,170283,163518],{"class":5217},[115,170285,171],{"class":121},[115,170287,31477],{"class":174},[115,170289,132],{"class":125},[115,170291,170292],{"class":117,"line":1647},[115,170293,2400],{"emptyLinePlaceholder":42},[115,170295,170296,170298,170301,170303,170306,170308],{"class":117,"line":1653},[115,170297,3025],{"class":121},[115,170299,170300],{"class":125}," word, count ",[115,170302,26044],{"class":121},[115,170304,170305],{"class":125}," items[:",[115,170307,571],{"class":174},[115,170309,165745],{"class":125},[115,170311,170312,170314],{"class":117,"line":1674},[115,170313,31300],{"class":174},[115,170315,170316],{"class":125},"(word, count)\n",[57,170318,170320],{"id":170319},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[106,170322,170324],{"className":30379,"code":170323,"language":30381,"meta":22,"style":22},"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",[112,170325,170326,170332,170342,170346,170358,170362,170366,170374,170384,170390,170394,170424,170434,170438,170442,170450,170480,170504,170508,170512,170520,170549,170554],{"__ignoreMap":22},[115,170327,170328,170330],{"class":117,"line":118},[115,170329,30393],{"class":121},[115,170331,147081],{"class":125},[115,170333,170334,170336,170338,170340],{"class":117,"line":37},[115,170335,30738],{"class":121},[115,170337,108301],{"class":125},[115,170339,30393],{"class":121},[115,170341,108306],{"class":125},[115,170343,170344],{"class":117,"line":1180},[115,170345,2400],{"emptyLinePlaceholder":42},[115,170347,170348,170350,170352,170354,170356],{"class":117,"line":1195},[115,170349,151814],{"class":174},[115,170351,13565],{"class":121},[115,170353,108535],{"class":125},[115,170355,151821],{"class":230},[115,170357,132],{"class":125},[115,170359,170360],{"class":117,"line":1201},[115,170361,2400],{"emptyLinePlaceholder":42},[115,170363,170364],{"class":117,"line":1215},[115,170365,2400],{"emptyLinePlaceholder":42},[115,170367,170368,170370,170372],{"class":117,"line":1221},[115,170369,31948],{"class":121},[115,170371,151838],{"class":1963},[115,170373,31954],{"class":125},[115,170375,170376,170378,170380,170382],{"class":117,"line":1312},[115,170377,3101],{"class":121},[115,170379,38931],{"class":121},[115,170381,151849],{"class":174},[115,170383,151852],{"class":125},[115,170385,170386,170388],{"class":117,"line":1318},[115,170387,14753],{"class":121},[115,170389,51828],{"class":125},[115,170391,170392],{"class":117,"line":1330},[115,170393,2400],{"emptyLinePlaceholder":42},[115,170395,170396,170398,170400,170402,170404,170406,170408,170410,170412,170414,170416,170418,170420,170422],{"class":117,"line":1612},[115,170397,34179],{"class":121},[115,170399,146781],{"class":174},[115,170401,126],{"class":125},[115,170403,151814],{"class":174},[115,170405,12436],{"class":125},[115,170407,146791],{"class":230},[115,170409,12436],{"class":125},[115,170411,146796],{"class":5217},[115,170413,171],{"class":121},[115,170415,146801],{"class":230},[115,170417,13715],{"class":125},[115,170419,31384],{"class":121},[115,170421,148143],{"class":5217},[115,170423,3739],{"class":125},[115,170425,170426,170428,170430,170432],{"class":117,"line":1617},[115,170427,14753],{"class":121},[115,170429,148154],{"class":125},[115,170431,45355],{"class":5217},[115,170433,132],{"class":125},[115,170435,170436],{"class":117,"line":1623},[115,170437,2400],{"emptyLinePlaceholder":42},[115,170439,170440],{"class":117,"line":1628},[115,170441,2400],{"emptyLinePlaceholder":42},[115,170443,170444,170446,170448],{"class":117,"line":1642},[115,170445,31948],{"class":121},[115,170447,151948],{"class":1963},[115,170449,151951],{"class":125},[115,170451,170452,170454,170456,170458,170460,170462,170464,170466,170468,170470,170472,170474,170476,170478],{"class":117,"line":1647},[115,170453,34179],{"class":121},[115,170455,146781],{"class":174},[115,170457,126],{"class":125},[115,170459,151814],{"class":174},[115,170461,12436],{"class":125},[115,170463,151966],{"class":230},[115,170465,12436],{"class":125},[115,170467,146796],{"class":5217},[115,170469,171],{"class":121},[115,170471,146801],{"class":230},[115,170473,13715],{"class":125},[115,170475,31384],{"class":121},[115,170477,148143],{"class":5217},[115,170479,3739],{"class":125},[115,170481,170482,170484,170486,170488,170490,170492,170494,170496,170498,170500,170502],{"class":117,"line":1653},[115,170483,151987],{"class":125},[115,170485,45355],{"class":5217},[115,170487,12436],{"class":125},[115,170489,147127],{"class":5217},[115,170491,171],{"class":121},[115,170493,33988],{"class":174},[115,170495,12436],{"class":125},[115,170497,152002],{"class":5217},[115,170499,171],{"class":121},[115,170501,203],{"class":174},[115,170503,132],{"class":125},[115,170505,170506],{"class":117,"line":1674},[115,170507,2400],{"emptyLinePlaceholder":42},[115,170509,170510],{"class":117,"line":1679},[115,170511,2400],{"emptyLinePlaceholder":42},[115,170513,170514,170516,170518],{"class":117,"line":1693},[115,170515,159706],{"class":125},[115,170517,171],{"class":121},[115,170519,153032],{"class":125},[115,170521,170522,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":117,"line":1698},[115,170523,170524],{"class":125},"students.append({",[115,170526,62669],{"class":230},[115,170528,51427],{"class":125},[115,170530,149878],{"class":230},[115,170532,12436],{"class":125},[115,170534,69114],{"class":230},[115,170536,51427],{"class":125},[115,170538,775],{"class":174},[115,170540,12436],{"class":125},[115,170542,151462],{"class":230},[115,170544,51427],{"class":125},[115,170546,1114],{"class":174},[115,170548,165142],{"class":125},[115,170550,170551],{"class":117,"line":1727},[115,170552,170553],{"class":125},"save_students(students)\n",[115,170555,170556,170558,170560,170563],{"class":117,"line":1732},[115,170557,30416],{"class":174},[115,170559,126],{"class":125},[115,170561,170562],{"class":230},"\"保存成功\"",[115,170564,132],{"class":125},[57,170566,170568],{"id":170567},"_814-易错点","8.14 易错点",[69,170570,170571,170575,170581,170586,170593,170600],{},[72,170572,170573,168834],{},[112,170574,920],{},[72,170576,170577,170578,28386],{},"读写中文要指定 ",[112,170579,170580],{},"encoding=\"utf-8\"",[72,170582,170583,170584,28386],{},"打开文件后要关闭，推荐使用 ",[112,170585,107823],{},[72,170587,170588,170589,170592],{},"读取大文件不要直接 ",[112,170590,170591],{},"read()"," 全部内容。",[72,170594,170595,170596,170599],{},"Windows 写 CSV 时建议加 ",[112,170597,170598],{},"newline=\"\"","，避免空行。",[72,170601,170602],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[57,170604,170606],{"id":170605},"_815-本章练习","8.15 本章练习",[69,170608,170609,170616,170621,170624,170627],{},[72,170610,170611,170612,170615],{},"写入一个 ",[112,170613,170614],{},"students.txt","，每行保存一个学生姓名。",[72,170617,104345,170618,170620],{},[112,170619,170614],{}," 并输出所有学生。",[72,170622,170623],{},"把学生列表保存为 JSON 文件。",[72,170625,170626],{},"从 JSON 文件读取学生数据，计算平均分。",[72,170628,170629,170630,170633,170634,170637],{},"写一个日志函数 ",[112,170631,170632],{},"write_log(message)","，每次调用向 ",[112,170635,170636],{},"app.log"," 追加一行。",[5127,170639,170640],{},"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":22,"searchDepth":37,"depth":37,"links":170642},[170643,170644,170648,170649,170655,170656,170657,170658,170659,170660,170661,170662,170663,170664,170665],{"id":168154,"depth":37,"text":168155},{"id":168195,"depth":37,"text":168196,"children":170645},[170646,170647],{"id":168199,"depth":1180,"text":168200},{"id":168233,"depth":1180,"text":168234},{"id":168347,"depth":37,"text":168348},{"id":168440,"depth":37,"text":168441,"children":170650},[170651,170652,170653,170654],{"id":168444,"depth":1180,"text":168445},{"id":168531,"depth":1180,"text":168532},{"id":168601,"depth":1180,"text":168602},{"id":168695,"depth":1180,"text":168696},{"id":168765,"depth":37,"text":168766},{"id":168828,"depth":37,"text":168829},{"id":168989,"depth":37,"text":168990},{"id":169052,"depth":37,"text":169053},{"id":169168,"depth":37,"text":169169},{"id":169378,"depth":37,"text":169379},{"id":169690,"depth":37,"text":169691},{"id":170101,"depth":37,"text":170102},{"id":170319,"depth":37,"text":170320},{"id":170567,"depth":37,"text":170568},{"id":170605,"depth":37,"text":170606},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168146,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170672,"title":170673,"body":170674,"description":39,"extension":40,"meta":172860,"navigation":42,"path":172861,"seo":172862,"stem":172863,"__hash__":172864},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170675,"toc":172827},[170676,170679,170683,170686,170689,170781,170783,170802,170807,170811,170814,170817,170846,170853,170856,170860,170863,170892,170894,170946,170952,171005,171009,171107,171110,171177,171181,171238,171240,171246,171250,171255,171261,171352,171357,171361,171364,171442,171445,171483,171487,171605,171608,171612,171615,171660,171663,171667,171672,171678,171728,171731,171762,171766,171770,171800,171804,171839,171843,171878,171918,171922,171938,171941,171945,171949,172028,172032,172073,172077,172132,172136,172170,172174,172204,172213,172220,172226,172283,172286,172294,172297,172301,172308,172311,172317,172320,172337,172342,172346,172352,172365,172368,172405,172408,172419,172422,172436,172439,172453,172457,172464,172497,172500,172502,172508,172511,172515,172517,172523,172528,172701,172705,172768,172772,172796,172800,172824],[10,170677,170673],{"id":170678},"_9-异常模块与包",[57,170680,170682],{"id":170681},"_91-什么是异常","9.1 什么是异常",[14,170684,170685],{},"异常是程序运行过程中出现的错误。",[14,170687,170688],{},"常见异常：",[263,170690,170691,170700],{},[266,170692,170693],{},[269,170694,170695,170698],{},[272,170696,170697],{},"异常",[272,170699,25870],{},[310,170701,170702,170712,170722,170731,170741,170751,170761,170771],{},[269,170703,170704,170709],{},[315,170705,170706],{},[112,170707,170708],{},"NameError",[315,170710,170711],{},"使用了未定义变量",[269,170713,170714,170719],{},[315,170715,170716],{},[112,170717,170718],{},"TypeError",[315,170720,170721],{},"类型不匹配",[269,170723,170724,170728],{},[315,170725,170726],{},[112,170727,154824],{},[315,170729,170730],{},"值不合法",[269,170732,170733,170738],{},[315,170734,170735],{},[112,170736,170737],{},"IndexError",[315,170739,170740],{},"列表索引越界",[269,170742,170743,170748],{},[315,170744,170745],{},[112,170746,170747],{},"KeyError",[315,170749,170750],{},"字典 key 不存在",[269,170752,170753,170758],{},[315,170754,170755],{},[112,170756,170757],{},"FileNotFoundError",[315,170759,170760],{},"文件不存在",[269,170762,170763,170768],{},[315,170764,170765],{},[112,170766,170767],{},"ZeroDivisionError",[315,170769,170770],{},"除数为 0",[269,170772,170773,170778],{},[315,170774,170775],{},[112,170776,170777],{},"ImportError",[315,170779,170780],{},"导入失败",[14,170782,15136],{},[106,170784,170786],{"className":30379,"code":170785,"language":30381,"meta":22,"style":22},"num = int(\"abc\")\n",[112,170787,170788],{"__ignoreMap":22},[115,170789,170790,170792,170794,170796,170798,170800],{"class":117,"line":118},[115,170791,155777],{"class":125},[115,170793,171],{"class":121},[115,170795,2382],{"class":174},[115,170797,126],{"class":125},[115,170799,155870],{"class":230},[115,170801,132],{"class":125},[14,170803,170804,170805,28386],{},"会触发 ",[112,170806,154824],{},[57,170808,170810],{"id":170809},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170812,170813],{},"如果不处理异常，程序会直接终止。",[14,170815,170816],{},"例如用户输入年龄：",[106,170818,170820],{"className":30379,"code":170819,"language":30381,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[112,170821,170822,170840],{"__ignoreMap":22},[115,170823,170824,170826,170828,170830,170832,170834,170836,170838],{"class":117,"line":118},[115,170825,146536],{"class":125},[115,170827,171],{"class":121},[115,170829,2382],{"class":174},[115,170831,126],{"class":125},[115,170833,53811],{"class":174},[115,170835,126],{"class":125},[115,170837,152384],{"class":230},[115,170839,30498],{"class":125},[115,170841,170842,170844],{"class":117,"line":37},[115,170843,30416],{"class":174},[115,170845,155751],{"class":125},[14,170847,170848,170849,170852],{},"用户输入 ",[112,170850,170851],{},"abc","，程序就会报错退出。",[14,170854,170855],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[57,170857,170859],{"id":170858},"_93-try-except","9.3 try except",[14,170861,170862],{},"基础语法：",[106,170864,170866],{"className":30379,"code":170865,"language":30381,"meta":22,"style":22},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[112,170867,170868,170875,170880,170887],{"__ignoreMap":22},[115,170869,170870,170873],{"class":117,"line":118},[115,170871,170872],{"class":121},"try",[115,170874,3739],{"class":125},[115,170876,170877],{"class":117,"line":37},[115,170878,170879],{"class":125},"    可能出错的代码\n",[115,170881,170882,170885],{"class":117,"line":1180},[115,170883,170884],{"class":121},"except",[115,170886,3739],{"class":125},[115,170888,170889],{"class":117,"line":1195},[115,170890,170891],{"class":125},"    出错后的处理代码\n",[14,170893,15136],{},[106,170895,170897],{"className":30379,"code":170896,"language":30381,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[112,170898,170899,170905,170923,170929,170935],{"__ignoreMap":22},[115,170900,170901,170903],{"class":117,"line":118},[115,170902,170872],{"class":121},[115,170904,3739],{"class":125},[115,170906,170907,170909,170911,170913,170915,170917,170919,170921],{"class":117,"line":37},[115,170908,152376],{"class":125},[115,170910,171],{"class":121},[115,170912,2382],{"class":174},[115,170914,126],{"class":125},[115,170916,53811],{"class":174},[115,170918,126],{"class":125},[115,170920,152384],{"class":230},[115,170922,30498],{"class":125},[115,170924,170925,170927],{"class":117,"line":1180},[115,170926,31300],{"class":174},[115,170928,155751],{"class":125},[115,170930,170931,170933],{"class":117,"line":1195},[115,170932,170884],{"class":121},[115,170934,3739],{"class":125},[115,170936,170937,170939,170941,170944],{"class":117,"line":1201},[115,170938,31300],{"class":174},[115,170940,126],{"class":125},[115,170942,170943],{"class":230},"\"年龄必须是数字\"",[115,170945,132],{"class":125},[14,170947,170948,170949,170951],{},"不建议裸写 ",[112,170950,170884],{},"，最好指定异常类型。",[106,170953,170955],{"className":30379,"code":170954,"language":30381,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[112,170956,170957,170963,170981,170987,170995],{"__ignoreMap":22},[115,170958,170959,170961],{"class":117,"line":118},[115,170960,170872],{"class":121},[115,170962,3739],{"class":125},[115,170964,170965,170967,170969,170971,170973,170975,170977,170979],{"class":117,"line":37},[115,170966,152376],{"class":125},[115,170968,171],{"class":121},[115,170970,2382],{"class":174},[115,170972,126],{"class":125},[115,170974,53811],{"class":174},[115,170976,126],{"class":125},[115,170978,152384],{"class":230},[115,170980,30498],{"class":125},[115,170982,170983,170985],{"class":117,"line":1180},[115,170984,31300],{"class":174},[115,170986,155751],{"class":125},[115,170988,170989,170991,170993],{"class":117,"line":1195},[115,170990,170884],{"class":121},[115,170992,152216],{"class":174},[115,170994,3739],{"class":125},[115,170996,170997,170999,171001,171003],{"class":117,"line":1201},[115,170998,31300],{"class":174},[115,171000,126],{"class":125},[115,171002,170943],{"class":230},[115,171004,132],{"class":125},[57,171006,171008],{"id":171007},"_94-捕获多个异常","9.4 捕获多个异常",[106,171010,171012],{"className":30379,"code":171011,"language":30381,"meta":22,"style":22},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[112,171013,171014,171020,171041,171061,171068,171076,171087,171096],{"__ignoreMap":22},[115,171015,171016,171018],{"class":117,"line":118},[115,171017,170872],{"class":121},[115,171019,3739],{"class":125},[115,171021,171022,171025,171027,171029,171031,171033,171035,171037,171039],{"class":117,"line":37},[115,171023,171024],{"class":125},"    nums ",[115,171026,171],{"class":121},[115,171028,52216],{"class":125},[115,171030,343],{"class":174},[115,171032,12436],{"class":125},[115,171034,203],{"class":174},[115,171036,12436],{"class":125},[115,171038,197],{"class":174},[115,171040,33247],{"class":125},[115,171042,171043,171046,171048,171050,171052,171054,171056,171059],{"class":117,"line":1180},[115,171044,171045],{"class":125},"    index ",[115,171047,171],{"class":121},[115,171049,2382],{"class":174},[115,171051,126],{"class":125},[115,171053,53811],{"class":174},[115,171055,126],{"class":125},[115,171057,171058],{"class":230},"\"请输入索引:\"",[115,171060,30498],{"class":125},[115,171062,171063,171065],{"class":117,"line":1195},[115,171064,31300],{"class":174},[115,171066,171067],{"class":125},"(nums[index])\n",[115,171069,171070,171072,171074],{"class":117,"line":1201},[115,171071,170884],{"class":121},[115,171073,152216],{"class":174},[115,171075,3739],{"class":125},[115,171077,171078,171080,171082,171085],{"class":117,"line":1215},[115,171079,31300],{"class":174},[115,171081,126],{"class":125},[115,171083,171084],{"class":230},"\"索引必须是整数\"",[115,171086,132],{"class":125},[115,171088,171089,171091,171094],{"class":117,"line":1221},[115,171090,170884],{"class":121},[115,171092,171093],{"class":174}," IndexError",[115,171095,3739],{"class":125},[115,171097,171098,171100,171102,171105],{"class":117,"line":1312},[115,171099,31300],{"class":174},[115,171101,126],{"class":125},[115,171103,171104],{"class":230},"\"索引越界\"",[115,171106,132],{"class":125},[14,171108,171109],{},"多个异常使用相同处理逻辑：",[106,171111,171113],{"className":30379,"code":171112,"language":30381,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[112,171114,171115,171121,171139,171152,171166],{"__ignoreMap":22},[115,171116,171117,171119],{"class":117,"line":118},[115,171118,170872],{"class":121},[115,171120,3739],{"class":125},[115,171122,171123,171125,171127,171129,171131,171133,171135,171137],{"class":117,"line":37},[115,171124,45594],{"class":125},[115,171126,171],{"class":121},[115,171128,2382],{"class":174},[115,171130,126],{"class":125},[115,171132,53811],{"class":174},[115,171134,126],{"class":125},[115,171136,155786],{"class":230},[115,171138,30498],{"class":125},[115,171140,171141,171143,171145,171147,171149],{"class":117,"line":1180},[115,171142,31300],{"class":174},[115,171144,126],{"class":125},[115,171146,571],{"class":174},[115,171148,156036],{"class":121},[115,171150,171151],{"class":125}," num)\n",[115,171153,171154,171156,171158,171160,171162,171164],{"class":117,"line":1195},[115,171155,170884],{"class":121},[115,171157,1658],{"class":125},[115,171159,154824],{"class":174},[115,171161,12436],{"class":125},[115,171163,170767],{"class":174},[115,171165,30787],{"class":125},[115,171167,171168,171170,171172,171175],{"class":117,"line":1201},[115,171169,31300],{"class":174},[115,171171,126],{"class":125},[115,171173,171174],{"class":230},"\"输入不合法\"",[115,171176,132],{"class":125},[57,171178,171180],{"id":171179},"_95-获取异常信息","9.5 获取异常信息",[106,171182,171184],{"className":30379,"code":171183,"language":30381,"meta":22,"style":22},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[112,171185,171186,171192,171206,171217],{"__ignoreMap":22},[115,171187,171188,171190],{"class":117,"line":118},[115,171189,170872],{"class":121},[115,171191,3739],{"class":125},[115,171193,171194,171196,171198,171200,171202,171204],{"class":117,"line":37},[115,171195,45594],{"class":125},[115,171197,171],{"class":121},[115,171199,2382],{"class":174},[115,171201,126],{"class":125},[115,171203,155870],{"class":230},[115,171205,132],{"class":125},[115,171207,171208,171210,171212,171214],{"class":117,"line":1180},[115,171209,170884],{"class":121},[115,171211,152216],{"class":174},[115,171213,64594],{"class":121},[115,171215,171216],{"class":125}," e:\n",[115,171218,171219,171221,171223,171225,171228,171230,171232,171234,171236],{"class":117,"line":1195},[115,171220,31300],{"class":174},[115,171222,126],{"class":125},[115,171224,178],{"class":121},[115,171226,171227],{"class":230},"\"出错了:",[115,171229,1021],{"class":174},[115,171231,200],{"class":125},[115,171233,1071],{"class":174},[115,171235,376],{"class":230},[115,171237,132],{"class":125},[14,171239,146447],{},[106,171241,171244],{"className":171242,"code":171243,"language":5188,"meta":22},[5186],"出错了:invalid literal for int() with base 10: 'abc'\n",[112,171245,171243],{"__ignoreMap":22},[57,171247,171249],{"id":171248},"_96-else和finally","9.6 else和finally",[14,171251,171252,171254],{},[112,171253,1701],{},"：没有异常时执行。",[14,171256,171257,171260],{},[112,171258,171259],{},"finally","：无论是否异常都会执行。",[106,171262,171264],{"className":30379,"code":171263,"language":30381,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[112,171265,171266,171272,171290,171298,171308,171314,171335,171341],{"__ignoreMap":22},[115,171267,171268,171270],{"class":117,"line":118},[115,171269,170872],{"class":121},[115,171271,3739],{"class":125},[115,171273,171274,171276,171278,171280,171282,171284,171286,171288],{"class":117,"line":37},[115,171275,45594],{"class":125},[115,171277,171],{"class":121},[115,171279,2382],{"class":174},[115,171281,126],{"class":125},[115,171283,53811],{"class":174},[115,171285,126],{"class":125},[115,171287,155786],{"class":230},[115,171289,30498],{"class":125},[115,171291,171292,171294,171296],{"class":117,"line":1180},[115,171293,170884],{"class":121},[115,171295,152216],{"class":174},[115,171297,3739],{"class":125},[115,171299,171300,171302,171304,171306],{"class":117,"line":1195},[115,171301,31300],{"class":174},[115,171303,126],{"class":125},[115,171305,153204],{"class":230},[115,171307,132],{"class":125},[115,171309,171310,171312],{"class":117,"line":1201},[115,171311,1701],{"class":121},[115,171313,3739],{"class":125},[115,171315,171316,171318,171320,171322,171325,171327,171329,171331,171333],{"class":117,"line":1215},[115,171317,31300],{"class":174},[115,171319,126],{"class":125},[115,171321,178],{"class":121},[115,171323,171324],{"class":230},"\"输入正确:",[115,171326,1021],{"class":174},[115,171328,1665],{"class":125},[115,171330,1071],{"class":174},[115,171332,376],{"class":230},[115,171334,132],{"class":125},[115,171336,171337,171339],{"class":117,"line":1221},[115,171338,171259],{"class":121},[115,171340,3739],{"class":125},[115,171342,171343,171345,171347,171350],{"class":117,"line":1312},[115,171344,31300],{"class":174},[115,171346,126],{"class":125},[115,171348,171349],{"class":230},"\"程序结束\"",[115,171351,132],{"class":125},[14,171353,171354,171356],{},[112,171355,171259],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[57,171358,171360],{"id":171359},"_97-抛出异常","9.7 抛出异常",[14,171362,171363],{},"程序可以主动抛出异常。",[106,171365,171367],{"className":30379,"code":171366,"language":30381,"meta":22,"style":22},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[112,171368,171369,171378,171390,171403,171423,171427,171431],{"__ignoreMap":22},[115,171370,171371,171373,171376],{"class":117,"line":118},[115,171372,31948],{"class":121},[115,171374,171375],{"class":1963}," set_age",[115,171377,161405],{"class":125},[115,171379,171380,171382,171384,171386,171388],{"class":117,"line":37},[115,171381,3101],{"class":121},[115,171383,15708],{"class":125},[115,171385,1035],{"class":121},[115,171387,4093],{"class":174},[115,171389,3739],{"class":125},[115,171391,171392,171394,171396,171398,171401],{"class":117,"line":1180},[115,171393,103422],{"class":121},[115,171395,152216],{"class":174},[115,171397,126],{"class":125},[115,171399,171400],{"class":230},"\"年龄不能为负数\"",[115,171402,132],{"class":125},[115,171404,171405,171407,171409,171411,171413,171415,171417,171419,171421],{"class":117,"line":1195},[115,171406,31300],{"class":174},[115,171408,126],{"class":125},[115,171410,178],{"class":121},[115,171412,161973],{"class":230},[115,171414,1021],{"class":174},[115,171416,70211],{"class":125},[115,171418,1071],{"class":174},[115,171420,376],{"class":230},[115,171422,132],{"class":125},[115,171424,171425],{"class":117,"line":1201},[115,171426,2400],{"emptyLinePlaceholder":42},[115,171428,171429],{"class":117,"line":1215},[115,171430,2400],{"emptyLinePlaceholder":42},[115,171432,171433,171436,171438,171440],{"class":117,"line":1221},[115,171434,171435],{"class":125},"set_age(",[115,171437,657],{"class":121},[115,171439,343],{"class":174},[115,171441,132],{"class":125},[14,171443,171444],{},"调用者可以捕获：",[106,171446,171448],{"className":30379,"code":171447,"language":30381,"meta":22,"style":22},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[112,171449,171450,171456,171467,171477],{"__ignoreMap":22},[115,171451,171452,171454],{"class":117,"line":118},[115,171453,170872],{"class":121},[115,171455,3739],{"class":125},[115,171457,171458,171461,171463,171465],{"class":117,"line":37},[115,171459,171460],{"class":125},"    set_age(",[115,171462,657],{"class":121},[115,171464,343],{"class":174},[115,171466,132],{"class":125},[115,171468,171469,171471,171473,171475],{"class":117,"line":1180},[115,171470,170884],{"class":121},[115,171472,152216],{"class":174},[115,171474,64594],{"class":121},[115,171476,171216],{"class":125},[115,171478,171479,171481],{"class":117,"line":1195},[115,171480,31300],{"class":174},[115,171482,66989],{"class":125},[57,171484,171486],{"id":171485},"_98-自定义异常","9.8 自定义异常",[106,171488,171490],{"className":30379,"code":171489,"language":30381,"meta":22,"style":22},"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",[112,171491,171492,171506,171510,171514,171518,171526,171536,171547,171557,171561,171565,171571,171588,171599],{"__ignoreMap":22},[115,171493,171494,171496,171499,171501,171504],{"class":117,"line":118},[115,171495,14695],{"class":121},[115,171497,171498],{"class":1963}," BalanceNotEnoughError",[115,171500,126],{"class":125},[115,171502,171503],{"class":174},"Exception",[115,171505,30787],{"class":125},[115,171507,171508],{"class":117,"line":37},[115,171509,149527],{"class":121},[115,171511,171512],{"class":117,"line":1180},[115,171513,2400],{"emptyLinePlaceholder":42},[115,171515,171516],{"class":117,"line":1195},[115,171517,2400],{"emptyLinePlaceholder":42},[115,171519,171520,171522,171524],{"class":117,"line":1201},[115,171521,31948],{"class":121},[115,171523,150176],{"class":1963},[115,171525,162802],{"class":125},[115,171527,171528,171530,171532,171534],{"class":117,"line":1215},[115,171529,3101],{"class":121},[115,171531,150132],{"class":125},[115,171533,1085],{"class":121},[115,171535,162579],{"class":125},[115,171537,171538,171540,171543,171545],{"class":117,"line":1221},[115,171539,103422],{"class":121},[115,171541,171542],{"class":125}," BalanceNotEnoughError(",[115,171544,150227],{"class":230},[115,171546,132],{"class":125},[115,171548,171549,171551,171553,171555],{"class":117,"line":1312},[115,171550,4090],{"class":121},[115,171552,162809],{"class":125},[115,171554,657],{"class":121},[115,171556,150165],{"class":125},[115,171558,171559],{"class":117,"line":1318},[115,171560,2400],{"emptyLinePlaceholder":42},[115,171562,171563],{"class":117,"line":1330},[115,171564,2400],{"emptyLinePlaceholder":42},[115,171566,171567,171569],{"class":117,"line":1612},[115,171568,170872],{"class":121},[115,171570,3739],{"class":125},[115,171572,171573,171575,171577,171580,171582,171584,171586],{"class":117,"line":1617},[115,171574,162480],{"class":125},[115,171576,171],{"class":121},[115,171578,171579],{"class":125}," withdraw(",[115,171581,436],{"class":174},[115,171583,12436],{"class":125},[115,171585,1722],{"class":174},[115,171587,132],{"class":125},[115,171589,171590,171592,171595,171597],{"class":117,"line":1623},[115,171591,170884],{"class":121},[115,171593,171594],{"class":125}," BalanceNotEnoughError ",[115,171596,31384],{"class":121},[115,171598,171216],{"class":125},[115,171600,171601,171603],{"class":117,"line":1628},[115,171602,31300],{"class":174},[115,171604,66989],{"class":125},[14,171606,171607],{},"入门阶段大多数情况使用内置异常即可。",[57,171609,171611],{"id":171610},"_99-traceback","9.9 traceback",[14,171613,171614],{},"调试时可以输出完整异常堆栈。",[106,171616,171618],{"className":30379,"code":171617,"language":30381,"meta":22,"style":22},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[112,171619,171620,171627,171631,171637,171647,171655],{"__ignoreMap":22},[115,171621,171622,171624],{"class":117,"line":118},[115,171623,30393],{"class":121},[115,171625,171626],{"class":125}," traceback\n",[115,171628,171629],{"class":117,"line":37},[115,171630,2400],{"emptyLinePlaceholder":42},[115,171632,171633,171635],{"class":117,"line":1180},[115,171634,170872],{"class":121},[115,171636,3739],{"class":125},[115,171638,171639,171641,171643,171645],{"class":117,"line":1195},[115,171640,1985],{"class":174},[115,171642,126],{"class":125},[115,171644,155870],{"class":230},[115,171646,132],{"class":125},[115,171648,171649,171651,171653],{"class":117,"line":1201},[115,171650,170884],{"class":121},[115,171652,152216],{"class":174},[115,171654,3739],{"class":125},[115,171656,171657],{"class":117,"line":1215},[115,171658,171659],{"class":125},"    traceback.print_exc()\n",[14,171661,171662],{},"日志系统中常把异常堆栈记录到文件。",[57,171664,171666],{"id":171665},"_910-什么是模块","9.10 什么是模块",[14,171668,171669,171670,125973],{},"模块就是一个 ",[112,171671,146342],{},[14,171673,171674,171675,24619],{},"例如创建 ",[112,171676,171677],{},"my_math.py",[106,171679,171681],{"className":30379,"code":171680,"language":30381,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[112,171682,171683,171691,171701,171705,171709,171718],{"__ignoreMap":22},[115,171684,171685,171687,171689],{"class":117,"line":118},[115,171686,31948],{"class":121},[115,171688,5210],{"class":1963},[115,171690,151083],{"class":125},[115,171692,171693,171695,171697,171699],{"class":117,"line":37},[115,171694,4090],{"class":121},[115,171696,10870],{"class":125},[115,171698,606],{"class":121},[115,171700,151094],{"class":125},[115,171702,171703],{"class":117,"line":1180},[115,171704,2400],{"emptyLinePlaceholder":42},[115,171706,171707],{"class":117,"line":1195},[115,171708,2400],{"emptyLinePlaceholder":42},[115,171710,171711,171713,171716],{"class":117,"line":1201},[115,171712,31948],{"class":121},[115,171714,171715],{"class":1963}," sub",[115,171717,151083],{"class":125},[115,171719,171720,171722,171724,171726],{"class":117,"line":1215},[115,171721,4090],{"class":121},[115,171723,10870],{"class":125},[115,171725,657],{"class":121},[115,171727,151094],{"class":125},[14,171729,171730],{},"在另一个文件中导入：",[106,171732,171734],{"className":30379,"code":171733,"language":30381,"meta":22,"style":22},"import my_math\n\nprint(my_math.add(1, 2))\n",[112,171735,171736,171743,171747],{"__ignoreMap":22},[115,171737,171738,171740],{"class":117,"line":118},[115,171739,30393],{"class":121},[115,171741,171742],{"class":125}," my_math\n",[115,171744,171745],{"class":117,"line":37},[115,171746,2400],{"emptyLinePlaceholder":42},[115,171748,171749,171751,171754,171756,171758,171760],{"class":117,"line":1180},[115,171750,30416],{"class":174},[115,171752,171753],{"class":125},"(my_math.add(",[115,171755,343],{"class":174},[115,171757,12436],{"class":125},[115,171759,203],{"class":174},[115,171761,30498],{"class":125},[57,171763,171765],{"id":171764},"_911-import导入","9.11 import导入",[86,171767,171769],{"id":171768},"_9111-导入模块","9.11.1 导入模块",[106,171771,171773],{"className":30379,"code":171772,"language":30381,"meta":22,"style":22},"import random\n\nprint(random.randint(1, 10))\n",[112,171774,171775,171781,171785],{"__ignoreMap":22},[115,171776,171777,171779],{"class":117,"line":118},[115,171778,30393],{"class":121},[115,171780,45329],{"class":125},[115,171782,171783],{"class":117,"line":37},[115,171784,2400],{"emptyLinePlaceholder":42},[115,171786,171787,171789,171792,171794,171796,171798],{"class":117,"line":1180},[115,171788,30416],{"class":174},[115,171790,171791],{"class":125},"(random.randint(",[115,171793,343],{"class":174},[115,171795,12436],{"class":125},[115,171797,571],{"class":174},[115,171799,30498],{"class":125},[86,171801,171803],{"id":171802},"_9112-导入指定内容","9.11.2 导入指定内容",[106,171805,171807],{"className":30379,"code":171806,"language":30381,"meta":22,"style":22},"from random import randint\n\nprint(randint(1, 10))\n",[112,171808,171809,171820,171824],{"__ignoreMap":22},[115,171810,171811,171813,171815,171817],{"class":117,"line":118},[115,171812,30738],{"class":121},[115,171814,57786],{"class":125},[115,171816,30393],{"class":121},[115,171818,171819],{"class":125}," randint\n",[115,171821,171822],{"class":117,"line":37},[115,171823,2400],{"emptyLinePlaceholder":42},[115,171825,171826,171828,171831,171833,171835,171837],{"class":117,"line":1180},[115,171827,30416],{"class":174},[115,171829,171830],{"class":125},"(randint(",[115,171832,343],{"class":174},[115,171834,12436],{"class":125},[115,171836,571],{"class":174},[115,171838,30498],{"class":125},[86,171840,171842],{"id":171841},"_9113-起别名","9.11.3 起别名",[106,171844,171846],{"className":30379,"code":171845,"language":30381,"meta":22,"style":22},"import random as rd\n\nprint(rd.randint(1, 10))\n",[112,171847,171848,171859,171863],{"__ignoreMap":22},[115,171849,171850,171852,171854,171856],{"class":117,"line":118},[115,171851,30393],{"class":121},[115,171853,57786],{"class":125},[115,171855,31384],{"class":121},[115,171857,171858],{"class":125}," rd\n",[115,171860,171861],{"class":117,"line":37},[115,171862,2400],{"emptyLinePlaceholder":42},[115,171864,171865,171867,171870,171872,171874,171876],{"class":117,"line":1180},[115,171866,30416],{"class":174},[115,171868,171869],{"class":125},"(rd.randint(",[115,171871,343],{"class":174},[115,171873,12436],{"class":125},[115,171875,571],{"class":174},[115,171877,30498],{"class":125},[106,171879,171881],{"className":30379,"code":171880,"language":30381,"meta":22,"style":22},"from random import randint as rint\n\nprint(rint(1, 10))\n",[112,171882,171883,171899,171903],{"__ignoreMap":22},[115,171884,171885,171887,171889,171891,171894,171896],{"class":117,"line":118},[115,171886,30738],{"class":121},[115,171888,57786],{"class":125},[115,171890,30393],{"class":121},[115,171892,171893],{"class":125}," randint ",[115,171895,31384],{"class":121},[115,171897,171898],{"class":125}," rint\n",[115,171900,171901],{"class":117,"line":37},[115,171902,2400],{"emptyLinePlaceholder":42},[115,171904,171905,171907,171910,171912,171914,171916],{"class":117,"line":1180},[115,171906,30416],{"class":174},[115,171908,171909],{"class":125},"(rint(",[115,171911,343],{"class":174},[115,171913,12436],{"class":125},[115,171915,571],{"class":174},[115,171917,30498],{"class":125},[86,171919,171921],{"id":171920},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[106,171923,171925],{"className":30379,"code":171924,"language":30381,"meta":22,"style":22},"from random import *\n",[112,171926,171927],{"__ignoreMap":22},[115,171928,171929,171931,171933,171935],{"class":117,"line":118},[115,171930,30738],{"class":121},[115,171932,57786],{"class":125},[115,171934,30393],{"class":121},[115,171936,171937],{"class":121}," *\n",[14,171939,171940],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[57,171942,171944],{"id":171943},"_912-常用内置模块","9.12 常用内置模块",[86,171946,171948],{"id":171947},"_9121-random","9.12.1 random",[106,171950,171952],{"className":30379,"code":171951,"language":30381,"meta":22,"style":22},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[112,171953,171954,171960,171964,171978,171997],{"__ignoreMap":22},[115,171955,171956,171958],{"class":117,"line":118},[115,171957,30393],{"class":121},[115,171959,45329],{"class":125},[115,171961,171962],{"class":117,"line":37},[115,171963,2400],{"emptyLinePlaceholder":42},[115,171965,171966,171968,171970,171972,171974,171976],{"class":117,"line":1180},[115,171967,30416],{"class":174},[115,171969,171791],{"class":125},[115,171971,343],{"class":174},[115,171973,12436],{"class":125},[115,171975,571],{"class":174},[115,171977,30498],{"class":125},[115,171979,171980,171982,171985,171987,171989,171991,171993,171995],{"class":117,"line":1195},[115,171981,30416],{"class":174},[115,171983,171984],{"class":125},"(random.choice([",[115,171986,149878],{"class":230},[115,171988,12436],{"class":125},[115,171990,150926],{"class":230},[115,171992,12436],{"class":125},[115,171994,159721],{"class":230},[115,171996,33144],{"class":125},[115,171998,171999,172001,172004,172006,172008,172010,172012,172014,172016,172018,172020,172022,172024,172026],{"class":117,"line":1201},[115,172000,30416],{"class":174},[115,172002,172003],{"class":125},"(random.sample([",[115,172005,343],{"class":174},[115,172007,12436],{"class":125},[115,172009,203],{"class":174},[115,172011,12436],{"class":125},[115,172013,197],{"class":174},[115,172015,12436],{"class":125},[115,172017,418],{"class":174},[115,172019,12436],{"class":125},[115,172021,444],{"class":174},[115,172023,112192],{"class":125},[115,172025,203],{"class":174},[115,172027,30498],{"class":125},[86,172029,172031],{"id":172030},"_9122-time","9.12.2 time",[106,172033,172035],{"className":30379,"code":172034,"language":30381,"meta":22,"style":22},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[112,172036,172037,172043,172047,172054,172062],{"__ignoreMap":22},[115,172038,172039,172041],{"class":117,"line":118},[115,172040,30393],{"class":121},[115,172042,31830],{"class":125},[115,172044,172045],{"class":117,"line":37},[115,172046,2400],{"emptyLinePlaceholder":42},[115,172048,172049,172051],{"class":117,"line":1180},[115,172050,30416],{"class":174},[115,172052,172053],{"class":125},"(time.time())\n",[115,172055,172056,172058,172060],{"class":117,"line":1195},[115,172057,95061],{"class":125},[115,172059,343],{"class":174},[115,172061,132],{"class":125},[115,172063,172064,172066,172068,172071],{"class":117,"line":1201},[115,172065,30416],{"class":174},[115,172067,126],{"class":125},[115,172069,172070],{"class":230},"\"1秒后执行\"",[115,172072,132],{"class":125},[86,172074,172076],{"id":172075},"_9123-datetime","9.12.3 datetime",[106,172078,172080],{"className":30379,"code":172079,"language":30381,"meta":22,"style":22},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[112,172081,172082,172094,172098,172108,172115],{"__ignoreMap":22},[115,172083,172084,172086,172089,172091],{"class":117,"line":118},[115,172085,30738],{"class":121},[115,172087,172088],{"class":125}," datetime ",[115,172090,30393],{"class":121},[115,172092,172093],{"class":125}," datetime\n",[115,172095,172096],{"class":117,"line":37},[115,172097,2400],{"emptyLinePlaceholder":42},[115,172099,172100,172103,172105],{"class":117,"line":1180},[115,172101,172102],{"class":125},"now ",[115,172104,171],{"class":121},[115,172106,172107],{"class":125}," datetime.now()\n",[115,172109,172110,172112],{"class":117,"line":1195},[115,172111,30416],{"class":174},[115,172113,172114],{"class":125},"(now)\n",[115,172116,172117,172119,172122,172125,172127,172130],{"class":117,"line":1201},[115,172118,30416],{"class":174},[115,172120,172121],{"class":125},"(now.strftime(",[115,172123,172124],{"class":230},"\"%Y-%m-",[115,172126,156681],{"class":174},[115,172128,172129],{"class":230}," %H:%M:%S\"",[115,172131,30498],{"class":125},[86,172133,172135],{"id":172134},"_9124-os","9.12.4 os",[106,172137,172139],{"className":30379,"code":172138,"language":30381,"meta":22,"style":22},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[112,172140,172141,172147,172151,172158],{"__ignoreMap":22},[115,172142,172143,172145],{"class":117,"line":118},[115,172144,30393],{"class":121},[115,172146,45306],{"class":125},[115,172148,172149],{"class":117,"line":37},[115,172150,2400],{"emptyLinePlaceholder":42},[115,172152,172153,172155],{"class":117,"line":1180},[115,172154,30416],{"class":174},[115,172156,172157],{"class":125},"(os.getcwd())\n",[115,172159,172160,172162,172165,172168],{"class":117,"line":1195},[115,172161,30416],{"class":174},[115,172163,172164],{"class":125},"(os.listdir(",[115,172166,172167],{"class":230},"\".\"",[115,172169,30498],{"class":125},[86,172171,172173],{"id":172172},"_9125-sys","9.12.5 sys",[106,172175,172177],{"className":30379,"code":172176,"language":30381,"meta":22,"style":22},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[112,172178,172179,172186,172190,172197],{"__ignoreMap":22},[115,172180,172181,172183],{"class":117,"line":118},[115,172182,30393],{"class":121},[115,172184,172185],{"class":125}," sys\n",[115,172187,172188],{"class":117,"line":37},[115,172189,2400],{"emptyLinePlaceholder":42},[115,172191,172192,172194],{"class":117,"line":1180},[115,172193,30416],{"class":174},[115,172195,172196],{"class":125},"(sys.version)\n",[115,172198,172199,172201],{"class":117,"line":1195},[115,172200,30416],{"class":174},[115,172202,172203],{"class":125},"(sys.path)\n",[57,172205,172207,172208,172210,172211,376],{"id":172206},"_913-if-name-main","9.13 if ",[275,172209,79800],{}," == \"",[275,172212,102048],{},[14,172214,172215,172216,172219],{},"模块被直接运行和被导入时，",[112,172217,172218],{},"__name__"," 的值不同。",[14,172221,172222,172223,24619],{},"创建 ",[112,172224,172225],{},"my_module.py",[106,172227,172229],{"className":30379,"code":172228,"language":30381,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[112,172230,172231,172239,172249,172253,172257,172269],{"__ignoreMap":22},[115,172232,172233,172235,172237],{"class":117,"line":118},[115,172234,31948],{"class":121},[115,172236,5210],{"class":1963},[115,172238,151083],{"class":125},[115,172240,172241,172243,172245,172247],{"class":117,"line":37},[115,172242,4090],{"class":121},[115,172244,10870],{"class":125},[115,172246,606],{"class":121},[115,172248,151094],{"class":125},[115,172250,172251],{"class":117,"line":1180},[115,172252,2400],{"emptyLinePlaceholder":42},[115,172254,172255],{"class":117,"line":1195},[115,172256,2400],{"emptyLinePlaceholder":42},[115,172258,172259,172261,172263,172265,172267],{"class":117,"line":1201},[115,172260,1531],{"class":121},[115,172262,31221],{"class":174},[115,172264,101549],{"class":121},[115,172266,101552],{"class":230},[115,172268,3739],{"class":125},[115,172270,172271,172273,172275,172277,172279,172281],{"class":117,"line":1215},[115,172272,31300],{"class":174},[115,172274,166590],{"class":125},[115,172276,343],{"class":174},[115,172278,12436],{"class":125},[115,172280,203],{"class":174},[115,172282,30498],{"class":125},[14,172284,172285],{},"作用：",[69,172287,172288,172291],{},[72,172289,172290],{},"直接运行该文件时，执行测试代码。",[72,172292,172293],{},"被其他文件导入时，不执行测试代码。",[14,172295,172296],{},"这是写模块时很常用的习惯。",[57,172298,172300],{"id":172299},"_914-包","9.14 包",[14,172302,172303,172304,172307],{},"包是包含 ",[112,172305,172306],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172309,172310],{},"目录结构：",[106,172312,172315],{"className":172313,"code":172314,"language":5188,"meta":22},[5186],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[112,172316,172314],{"__ignoreMap":22},[14,172318,172319],{},"导入：",[106,172321,172323],{"className":30379,"code":172322,"language":30381,"meta":22,"style":22},"from utils.file_utils import read_file\n",[112,172324,172325],{"__ignoreMap":22},[115,172326,172327,172329,172332,172334],{"class":117,"line":118},[115,172328,30738],{"class":121},[115,172330,172331],{"class":125}," utils.file_utils ",[115,172333,30393],{"class":121},[115,172335,172336],{"class":125}," read_file\n",[14,172338,172339,172341],{},[112,172340,172306],{}," 可以为空，也可以写包初始化逻辑。",[57,172343,172345],{"id":172344},"_915-第三方包","9.15 第三方包",[14,172347,172348,172349,172351],{},"第三方包通过 ",[112,172350,23832],{}," 安装。",[106,172353,172355],{"className":23823,"code":172354,"language":23825,"meta":22,"style":22},"pip install requests\n",[112,172356,172357],{"__ignoreMap":22},[115,172358,172359,172361,172363],{"class":117,"line":118},[115,172360,23832],{"class":1963},[115,172362,23835],{"class":230},[115,172364,146088],{"class":230},[14,172366,172367],{},"使用：",[106,172369,172371],{"className":30379,"code":172370,"language":30381,"meta":22,"style":22},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[112,172372,172373,172379,172383,172398],{"__ignoreMap":22},[115,172374,172375,172377],{"class":117,"line":118},[115,172376,30393],{"class":121},[115,172378,146088],{"class":125},[115,172380,172381],{"class":117,"line":37},[115,172382,2400],{"emptyLinePlaceholder":42},[115,172384,172385,172388,172390,172393,172396],{"class":117,"line":1180},[115,172386,172387],{"class":125},"response ",[115,172389,171],{"class":121},[115,172391,172392],{"class":125}," requests.get(",[115,172394,172395],{"class":230},"\"https:\u002F\u002Fwww.example.com\"",[115,172397,132],{"class":125},[115,172399,172400,172402],{"class":117,"line":1195},[115,172401,30416],{"class":174},[115,172403,172404],{"class":125},"(response.status_code)\n",[14,172406,172407],{},"查看已安装包：",[106,172409,172411],{"className":23823,"code":172410,"language":23825,"meta":22,"style":22},"pip list\n",[112,172412,172413],{"__ignoreMap":22},[115,172414,172415,172417],{"class":117,"line":118},[115,172416,23832],{"class":1963},[115,172418,118945],{"class":230},[14,172420,172421],{},"导出项目依赖：",[106,172423,172424],{"className":23823,"code":146283,"language":23825,"meta":22,"style":22},[112,172425,172426],{"__ignoreMap":22},[115,172427,172428,172430,172432,172434],{"class":117,"line":118},[115,172429,23832],{"class":1963},[115,172431,146292],{"class":230},[115,172433,26223],{"class":121},[115,172435,146297],{"class":230},[14,172437,172438],{},"安装项目依赖：",[106,172440,172441],{"className":23823,"code":146303,"language":23825,"meta":22,"style":22},[112,172442,172443],{"__ignoreMap":22},[115,172444,172445,172447,172449,172451],{"class":117,"line":118},[115,172446,23832],{"class":1963},[115,172448,23835],{"class":230},[115,172450,119629],{"class":174},[115,172452,146297],{"class":230},[57,172454,172456],{"id":172455},"_916-模块搜索路径","9.16 模块搜索路径",[14,172458,172459,172460,172463],{},"Python 导入模块时会在 ",[112,172461,172462],{},"sys.path"," 中查找。",[106,172465,172467],{"className":30379,"code":172466,"language":30381,"meta":22,"style":22},"import sys\n\nfor path in sys.path:\n    print(path)\n",[112,172468,172469,172475,172479,172491],{"__ignoreMap":22},[115,172470,172471,172473],{"class":117,"line":118},[115,172472,30393],{"class":121},[115,172474,172185],{"class":125},[115,172476,172477],{"class":117,"line":37},[115,172478,2400],{"emptyLinePlaceholder":42},[115,172480,172481,172483,172486,172488],{"class":117,"line":1180},[115,172482,3025],{"class":121},[115,172484,172485],{"class":125}," path ",[115,172487,26044],{"class":121},[115,172489,172490],{"class":125}," sys.path:\n",[115,172492,172493,172495],{"class":117,"line":1195},[115,172494,31300],{"class":174},[115,172496,169219],{"class":125},[14,172498,172499],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172501,157613],{},[106,172503,172506],{"className":172504,"code":172505,"language":5188,"meta":22},[5186],"random.py\njson.py\ntime.py\n",[112,172507,172505],{"__ignoreMap":22},[14,172509,172510],{},"这些文件名可能导致导入异常。",[57,172512,172514],{"id":172513},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172516,172310],{},[106,172518,172521],{"className":172519,"code":172520,"language":5188,"meta":22},[5186],"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",[112,172522,172520],{"__ignoreMap":22},[14,172524,172525,24619],{},[112,172526,172527],{},"utils\u002Ffile_utils.py",[106,172529,172531],{"className":30379,"code":172530,"language":30381,"meta":22,"style":22},"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",[112,172532,172533,172539,172549,172553,172557,172567,172577,172585,172591,172595,172622,172632,172636,172640,172650,172676],{"__ignoreMap":22},[115,172534,172535,172537],{"class":117,"line":118},[115,172536,30393],{"class":121},[115,172538,147081],{"class":125},[115,172540,172541,172543,172545,172547],{"class":117,"line":37},[115,172542,30738],{"class":121},[115,172544,108301],{"class":125},[115,172546,30393],{"class":121},[115,172548,108306],{"class":125},[115,172550,172551],{"class":117,"line":1180},[115,172552,2400],{"emptyLinePlaceholder":42},[115,172554,172555],{"class":117,"line":1195},[115,172556,2400],{"emptyLinePlaceholder":42},[115,172558,172559,172561,172564],{"class":117,"line":1201},[115,172560,31948],{"class":121},[115,172562,172563],{"class":1963}," read_json",[115,172565,172566],{"class":125},"(path):\n",[115,172568,172569,172572,172574],{"class":117,"line":1215},[115,172570,172571],{"class":125},"    path ",[115,172573,171],{"class":121},[115,172575,172576],{"class":125}," Path(path)\n",[115,172578,172579,172581,172583],{"class":117,"line":1221},[115,172580,3101],{"class":121},[115,172582,38931],{"class":121},[115,172584,169300],{"class":125},[115,172586,172587,172589],{"class":117,"line":1312},[115,172588,14753],{"class":121},[115,172590,51828],{"class":125},[115,172592,172593],{"class":117,"line":1318},[115,172594,2400],{"emptyLinePlaceholder":42},[115,172596,172597,172599,172601,172604,172606,172608,172610,172612,172614,172616,172618,172620],{"class":117,"line":1330},[115,172598,34179],{"class":121},[115,172600,146781],{"class":174},[115,172602,172603],{"class":125},"(path, ",[115,172605,146791],{"class":230},[115,172607,12436],{"class":125},[115,172609,146796],{"class":5217},[115,172611,171],{"class":121},[115,172613,146801],{"class":230},[115,172615,13715],{"class":125},[115,172617,31384],{"class":121},[115,172619,148143],{"class":5217},[115,172621,3739],{"class":125},[115,172623,172624,172626,172628,172630],{"class":117,"line":1612},[115,172625,14753],{"class":121},[115,172627,148154],{"class":125},[115,172629,45355],{"class":5217},[115,172631,132],{"class":125},[115,172633,172634],{"class":117,"line":1617},[115,172635,2400],{"emptyLinePlaceholder":42},[115,172637,172638],{"class":117,"line":1623},[115,172639,2400],{"emptyLinePlaceholder":42},[115,172641,172642,172644,172647],{"class":117,"line":1628},[115,172643,31948],{"class":121},[115,172645,172646],{"class":1963}," write_json",[115,172648,172649],{"class":125},"(path, data):\n",[115,172651,172652,172654,172656,172658,172660,172662,172664,172666,172668,172670,172672,172674],{"class":117,"line":1642},[115,172653,34179],{"class":121},[115,172655,146781],{"class":174},[115,172657,172603],{"class":125},[115,172659,151966],{"class":230},[115,172661,12436],{"class":125},[115,172663,146796],{"class":5217},[115,172665,171],{"class":121},[115,172667,146801],{"class":230},[115,172669,13715],{"class":125},[115,172671,31384],{"class":121},[115,172673,148143],{"class":5217},[115,172675,3739],{"class":125},[115,172677,172678,172681,172683,172685,172687,172689,172691,172693,172695,172697,172699],{"class":117,"line":1647},[115,172679,172680],{"class":125},"        json.dump(data, ",[115,172682,45355],{"class":5217},[115,172684,12436],{"class":125},[115,172686,147127],{"class":5217},[115,172688,171],{"class":121},[115,172690,33988],{"class":174},[115,172692,12436],{"class":125},[115,172694,152002],{"class":5217},[115,172696,171],{"class":121},[115,172698,203],{"class":174},[115,172700,132],{"class":125},[14,172702,172703,24619],{},[112,172704,154597],{},[106,172706,172708],{"className":30379,"code":172707,"language":30381,"meta":22,"style":22},"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",[112,172709,172710,172721,172725,172738,172758],{"__ignoreMap":22},[115,172711,172712,172714,172716,172718],{"class":117,"line":118},[115,172713,30738],{"class":121},[115,172715,172331],{"class":125},[115,172717,30393],{"class":121},[115,172719,172720],{"class":125}," read_json, write_json\n",[115,172722,172723],{"class":117,"line":37},[115,172724,2400],{"emptyLinePlaceholder":42},[115,172726,172727,172729,172731,172734,172736],{"class":117,"line":1180},[115,172728,159706],{"class":125},[115,172730,171],{"class":121},[115,172732,172733],{"class":125}," read_json(",[115,172735,151821],{"class":230},[115,172737,132],{"class":125},[115,172739,172740,172742,172744,172746,172748,172750,172752,172754,172756],{"class":117,"line":1195},[115,172741,170524],{"class":125},[115,172743,62669],{"class":230},[115,172745,51427],{"class":125},[115,172747,149878],{"class":230},[115,172749,12436],{"class":125},[115,172751,151462],{"class":230},[115,172753,51427],{"class":125},[115,172755,1114],{"class":174},[115,172757,165142],{"class":125},[115,172759,172760,172763,172765],{"class":117,"line":1201},[115,172761,172762],{"class":125},"write_json(",[115,172764,151821],{"class":230},[115,172766,172767],{"class":125},", students)\n",[57,172769,172771],{"id":172770},"_918-易错点","9.18 易错点",[69,172773,172774,172777,172782,172787,172790,172793],{},[72,172775,172776],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[72,172778,172779,172780,28386],{},"能指定异常类型就不要裸写 ",[112,172781,170884],{},[72,172783,172784,172786],{},[112,172785,171259],{}," 无论是否出错都会执行。",[72,172788,172789],{},"模块文件名不要和标准库重名。",[72,172791,172792],{},"导入自己写的模块时，要注意运行目录。",[72,172794,172795],{},"第三方包要安装到当前解释器或虚拟环境中。",[57,172797,172799],{"id":172798},"_919-本章练习","9.19 本章练习",[69,172801,172802,172805,172808,172814,172821],{},[72,172803,172804],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[72,172806,172807],{},"写函数读取文件，如果文件不存在则返回空字符串。",[72,172809,172222,172810,172813],{},[112,172811,172812],{},"math_utils.py","，实现加减乘除函数并导入使用。",[72,172815,172816,172817,172820],{},"创建一个 ",[112,172818,172819],{},"utils"," 包，把 JSON 读写函数放进去。",[72,172822,172823],{},"写一个程序，捕获除零异常和输入格式异常。",[5127,172825,172826],{},"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":22,"searchDepth":37,"depth":37,"links":172828},[172829,172830,172831,172832,172833,172834,172835,172836,172837,172838,172839,172845,172852,172854,172855,172856,172857,172858,172859],{"id":170681,"depth":37,"text":170682},{"id":170809,"depth":37,"text":170810},{"id":170858,"depth":37,"text":170859},{"id":171007,"depth":37,"text":171008},{"id":171179,"depth":37,"text":171180},{"id":171248,"depth":37,"text":171249},{"id":171359,"depth":37,"text":171360},{"id":171485,"depth":37,"text":171486},{"id":171610,"depth":37,"text":171611},{"id":171665,"depth":37,"text":171666},{"id":171764,"depth":37,"text":171765,"children":172840},[172841,172842,172843,172844],{"id":171768,"depth":1180,"text":171769},{"id":171802,"depth":1180,"text":171803},{"id":171841,"depth":1180,"text":171842},{"id":171920,"depth":1180,"text":171921},{"id":171943,"depth":37,"text":171944,"children":172846},[172847,172848,172849,172850,172851],{"id":171947,"depth":1180,"text":171948},{"id":172030,"depth":1180,"text":172031},{"id":172075,"depth":1180,"text":172076},{"id":172134,"depth":1180,"text":172135},{"id":172172,"depth":1180,"text":172173},{"id":172206,"depth":37,"text":172853},"9.13 if name == \"main\"",{"id":172299,"depth":37,"text":172300},{"id":172344,"depth":37,"text":172345},{"id":172455,"depth":37,"text":172456},{"id":172513,"depth":37,"text":172514},{"id":172770,"depth":37,"text":172771},{"id":172798,"depth":37,"text":172799},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170673,"description":39},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172866,"title":172867,"body":172868,"description":173031,"extension":40,"meta":173032,"navigation":42,"path":173033,"seo":173034,"stem":173035,"__hash__":173036},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172869,"toc":173026},[172870,172873,172876,172879,172890,172892,172966,172969,172972,172975,172978,172981,172984,172987,172990,172993,172996],[10,172871,172867],{"id":172872},"python教程",[14,172874,172875],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172877,172878],{},"建议学习环境：",[69,172880,172881,172884,172887],{},[72,172882,172883],{},"Python 版本：Python 3.10 及以上。",[72,172885,172886],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[72,172888,172889],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[57,172891,117068],{"id":117068},[69,172893,172894,172900,172906,172912,172918,172924,172930,172936,172942,172948,172954,172960],{},[72,172895,172896],{},[27,172897,172899],{"href":172898},".\u002Fch1-Python","Python环境与第一个程序",[72,172901,172902],{},[27,172903,172905],{"href":172904},".\u002Fch2","基础语法、变量与字符串",[72,172907,172908],{},[27,172909,172911],{"href":172910},".\u002Fch3","判断语句",[72,172913,172914],{},[27,172915,172917],{"href":172916},".\u002Fch4","循环语句",[72,172919,172920],{},[27,172921,172923],{"href":172922},".\u002Fch5","函数基础",[72,172925,172926],{},[27,172927,172929],{"href":172928},".\u002Fch6","数据容器",[72,172931,172932],{},[27,172933,172935],{"href":172934},".\u002Fch7","函数进阶",[72,172937,172938],{},[27,172939,172941],{"href":172940},".\u002Fch8","文件操作",[72,172943,172944],{},[27,172945,172947],{"href":172946},".\u002Fch9","异常、模块与包",[72,172949,172950],{},[27,172951,172953],{"href":172952},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[72,172955,172956],{},[27,172957,172959],{"href":172958},".\u002Fch11","面向对象基础",[72,172961,172962],{},[27,172963,172965],{"href":172964},".\u002Fch12","综合案例与复习路线",[57,172967,172968],{"id":172968},"学习路线",[14,172970,172971],{},"第一阶段：能运行程序。",[14,172973,172974],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172976,172977],{},"第二阶段：能组织数据。",[14,172979,172980],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172982,172983],{},"第三阶段：能封装逻辑。",[14,172985,172986],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172988,172989],{},"第四阶段：能做小项目。",[14,172991,172992],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[57,172994,172995],{"id":172995},"参考资料",[69,172997,172998,173005,173012,173019],{},[72,172999,173000,173001],{},"黑马程序员 Python 入门教程推荐：",[27,173002,173003],{"href":173003,"rel":173004},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[31],[72,173006,173007,173008],{},"Python 官方中文教程：",[27,173009,173010],{"href":173010,"rel":173011},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[31],[72,173013,173014,173015],{},"Python 标准库文档：",[27,173016,173017],{"href":173017,"rel":173018},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[31],[72,173020,173021,173022],{},"pyecharts 文档：",[27,173023,173024],{"href":173024,"rel":173025},"https:\u002F\u002Fpyecharts.org\u002F",[31],{"title":22,"searchDepth":37,"depth":37,"links":173027},[173028,173029,173030],{"id":117068,"depth":37,"text":117068},{"id":172968,"depth":37,"text":172968},{"id":172995,"depth":37,"text":172995},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23379},"\u002Fwiki\u002F2024-10-10-python",{"title":172867,"description":173031},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331395631]